mirror of https://github.com/jeecgboot/jeecg-boot
feature : generation of pdf for invoice during breakdown invoicing
parent
afc05eed6e
commit
a02f3dbdb4
|
@ -84,6 +84,8 @@ public class InvoiceController {
|
||||||
|
|
||||||
@Value("${jeecg.path.shippingInvoiceDetailDir}")
|
@Value("${jeecg.path.shippingInvoiceDetailDir}")
|
||||||
private String INVOICE_DETAIL_DIR;
|
private String INVOICE_DETAIL_DIR;
|
||||||
|
@Value("${jeecg.path.shippingInvoicePdfDir}")
|
||||||
|
private String INVOICE_PDF_DIR;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
Environment env;
|
Environment env;
|
||||||
|
@ -484,6 +486,7 @@ public class InvoiceController {
|
||||||
if (metaData.getInvoiceCode().equals("error")) {
|
if (metaData.getInvoiceCode().equals("error")) {
|
||||||
metaDataErrorList.add(metaData);
|
metaDataErrorList.add(metaData);
|
||||||
} else {
|
} else {
|
||||||
|
filenameList.add(INVOICE_PDF_DIR + "//" + "Invoice N°" + metaData.getInvoiceCode() + " (" + metaData.getInvoiceEntity() + ").pdf");
|
||||||
filenameList.add(INVOICE_DIR + "//" + metaData.getFilename());
|
filenameList.add(INVOICE_DIR + "//" + metaData.getFilename());
|
||||||
List<FactureDetail> factureDetails = shippingInvoiceService.getInvoiceDetail(metaData.getInvoiceCode());
|
List<FactureDetail> factureDetails = shippingInvoiceService.getInvoiceDetail(metaData.getInvoiceCode());
|
||||||
List<SavRefundWithDetail> refunds = savRefundWithDetailService.getRefundsByInvoiceNumber(metaData.getInvoiceCode());
|
List<SavRefundWithDetail> refunds = savRefundWithDetailService.getRefundsByInvoiceNumber(metaData.getInvoiceCode());
|
||||||
|
|
|
@ -1,7 +1,5 @@
|
||||||
package org.jeecg.modules.business.controller.admin.shippingInvoice;
|
package org.jeecg.modules.business.controller.admin.shippingInvoice;
|
||||||
|
|
||||||
import com.aspose.cells.SaveFormat;
|
|
||||||
import com.aspose.cells.Workbook;
|
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
|
@ -49,11 +47,7 @@ import java.nio.file.Files;
|
||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
import java.nio.file.Paths;
|
import java.nio.file.Paths;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.regex.Matcher;
|
|
||||||
import java.util.regex.Pattern;
|
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
import java.util.stream.Stream;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @Description: 物流发票
|
* @Description: 物流发票
|
||||||
* @Author: jeecg-boot
|
* @Author: jeecg-boot
|
||||||
|
@ -72,6 +66,8 @@ public class ShippingInvoiceController {
|
||||||
@Autowired
|
@Autowired
|
||||||
private IPlatformOrderService platformOrderService;
|
private IPlatformOrderService platformOrderService;
|
||||||
@Autowired
|
@Autowired
|
||||||
|
private PlatformOrderShippingInvoiceService platformOrderShippingInvoiceService;
|
||||||
|
@Autowired
|
||||||
private ISavRefundService savRefundService;
|
private ISavRefundService savRefundService;
|
||||||
@Autowired
|
@Autowired
|
||||||
private IShippingInvoiceService shippingInvoiceService;
|
private IShippingInvoiceService shippingInvoiceService;
|
||||||
|
@ -79,15 +75,10 @@ public class ShippingInvoiceController {
|
||||||
private FreeMarkerConfigurer freemarkerConfigurer;
|
private FreeMarkerConfigurer freemarkerConfigurer;
|
||||||
@Autowired
|
@Autowired
|
||||||
private EmailService emailService;
|
private EmailService emailService;
|
||||||
private static final String EXTENSION = ".xlsx";
|
|
||||||
@Value("${jeecg.path.shippingInvoiceDir}")
|
@Value("${jeecg.path.shippingInvoiceDir}")
|
||||||
private String INVOICE_LOCATION;
|
private String INVOICE_LOCATION;
|
||||||
@Value("${jeecg.path.shippingInvoiceDetailDir}")
|
@Value("${jeecg.path.shippingInvoiceDetailDir}")
|
||||||
private String INVOICE_DETAIL_LOCATION;
|
private String INVOICE_DETAIL_LOCATION;
|
||||||
@Value("${jeecg.path.shippingInvoicePdfDir}")
|
|
||||||
private String INVOICE_PDF_LOCATION;
|
|
||||||
@Value("${jeecg.path.shippingInvoiceDetailPdfDir}")
|
|
||||||
private String INVOICE_DETAIL_PDF_LOCAION;
|
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
Environment env;
|
Environment env;
|
||||||
|
@ -276,82 +267,6 @@ public class ShippingInvoiceController {
|
||||||
return Result.OK("文件导入失败!");
|
return Result.OK("文件导入失败!");
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Finds the absolute path of invoice file by recursively walking the directory and it's subdirectories
|
|
||||||
*
|
|
||||||
* @param dirPath
|
|
||||||
* @param invoiceNumber
|
|
||||||
* @return List of paths for the file but should only find one result
|
|
||||||
*/
|
|
||||||
public List<Path> getPath(String dirPath, String invoiceNumber) {
|
|
||||||
List<Path> pathList = new ArrayList<>();
|
|
||||||
//Recursively list all files
|
|
||||||
//The walk() method returns a Stream by walking the file tree beginning with a given starting file/directory in a depth-first manner.
|
|
||||||
try (Stream<Path> stream = Files.walk(Paths.get(dirPath))) {
|
|
||||||
pathList = stream.map(Path::normalize)
|
|
||||||
.filter(Files::isRegularFile) // directories, hidden files and files without extension are not included
|
|
||||||
.filter(path -> path.getFileName().toString().contains(invoiceNumber))
|
|
||||||
.filter(path -> path.getFileName().toString().endsWith(EXTENSION))
|
|
||||||
.collect(Collectors.toList());
|
|
||||||
}
|
|
||||||
catch(IOException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
return pathList;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Finds the absolute path of invoice file by recursively walking the directory and it's subdirectories
|
|
||||||
*
|
|
||||||
* @param dirPath
|
|
||||||
* @param invoiceNumber
|
|
||||||
* @return List of paths for the file but should only find one result
|
|
||||||
*/
|
|
||||||
public List<Path> getPath(String dirPath, String invoiceNumber, String invoiceEntity) {
|
|
||||||
List<Path> pathList = new ArrayList<>();
|
|
||||||
//Recursively list all files
|
|
||||||
//The walk() method returns a Stream by walking the file tree beginning with a given starting file/directory in a depth-first manner.
|
|
||||||
try (Stream<Path> stream = Files.walk(Paths.get(dirPath))) {
|
|
||||||
pathList = stream.map(Path::normalize)
|
|
||||||
.filter(Files::isRegularFile) // directories, hidden files and files without extension are not included
|
|
||||||
.filter(path -> path.getFileName().toString().contains(invoiceNumber))
|
|
||||||
.filter(path -> path.getFileName().toString().contains(invoiceEntity))
|
|
||||||
.filter(path -> path.getFileName().toString().endsWith(EXTENSION))
|
|
||||||
.collect(Collectors.toList());
|
|
||||||
}
|
|
||||||
catch(IOException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
return pathList;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Finds the absolute path of invoice file and return the path
|
|
||||||
* @param invoiceNumber
|
|
||||||
* @param filetype if it's an invoice or invoice detail
|
|
||||||
* @return String returns the path of the invoice file
|
|
||||||
*/
|
|
||||||
public String getInvoiceList(String invoiceNumber, String filetype) {
|
|
||||||
log.info("Invoice number : " + invoiceNumber);
|
|
||||||
List<Path> pathList = new ArrayList<>();
|
|
||||||
if(filetype.equals("invoice")) {
|
|
||||||
log.info("File asked is of type invoice");
|
|
||||||
pathList = getPath(INVOICE_LOCATION, invoiceNumber);
|
|
||||||
}
|
|
||||||
if(filetype.equals("detail")) {
|
|
||||||
log.info("File asked is of type invoice detail");
|
|
||||||
pathList = getPath(INVOICE_DETAIL_LOCATION, invoiceNumber);
|
|
||||||
}
|
|
||||||
if(pathList.isEmpty()) {
|
|
||||||
log.error("NO INVOICE FILE FOUND : " + invoiceNumber);
|
|
||||||
return "ERROR";
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
for (Path path : pathList) {
|
|
||||||
log.info(path.toString());
|
|
||||||
}
|
|
||||||
return pathList.get(0).toString();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Downloads the invoice and returns it in form of bytearray
|
* Downloads the invoice and returns it in form of bytearray
|
||||||
* @param invoiceNumber the invoice we want to download
|
* @param invoiceNumber the invoice we want to download
|
||||||
|
@ -361,7 +276,7 @@ public class ShippingInvoiceController {
|
||||||
*/
|
*/
|
||||||
@GetMapping(value = "/downloadCompleteInvoiceExcel")
|
@GetMapping(value = "/downloadCompleteInvoiceExcel")
|
||||||
public ResponseEntity<?> download(@RequestParam("invoiceNumber") String invoiceNumber, @RequestParam("filetype") String filetype) throws IOException {
|
public ResponseEntity<?> download(@RequestParam("invoiceNumber") String invoiceNumber, @RequestParam("filetype") String filetype) throws IOException {
|
||||||
String filename = getInvoiceList(invoiceNumber, filetype);
|
String filename = platformOrderShippingInvoiceService.getInvoiceList(invoiceNumber, filetype);
|
||||||
if(!filename.equals("ERROR")) {
|
if(!filename.equals("ERROR")) {
|
||||||
File file = new File(filename);
|
File file = new File(filename);
|
||||||
|
|
||||||
|
@ -391,32 +306,6 @@ public class ShippingInvoiceController {
|
||||||
.body("Couldn't find the invoice file for : " + invoiceNumber);
|
.body("Couldn't find the invoice file for : " + invoiceNumber);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public String convertToPdf(String invoiceNumber, String fileType) throws Exception {
|
|
||||||
String excelFilePath = getInvoiceList(invoiceNumber, fileType);// (C:\PATH\filename.xlsx)
|
|
||||||
|
|
||||||
if(!excelFilePath.equals("ERROR")) {
|
|
||||||
String pdfFilePath= INVOICE_PDF_LOCATION + "/" + invoiceNumber + ".pdf";
|
|
||||||
if(fileType.equals("invoice")){
|
|
||||||
pdfFilePath = INVOICE_PDF_LOCATION + "/Invoice N°" + invoiceNumber + ".pdf";
|
|
||||||
}
|
|
||||||
if(fileType.equals("detail")) {
|
|
||||||
pdfFilePath = INVOICE_DETAIL_PDF_LOCAION + "/Détail_calcul_de_facture_" + invoiceNumber + ".pdf";
|
|
||||||
}
|
|
||||||
|
|
||||||
Pattern p = Pattern.compile("^(.*)[\\/\\\\](.*)(\\.[a-z]+)"); //group(1): "C:\PATH" , group(2) : "filename", group(3): ".xlsx"
|
|
||||||
Matcher m = p.matcher(excelFilePath);
|
|
||||||
if (m.matches()) {
|
|
||||||
pdfFilePath = INVOICE_PDF_LOCATION + "/" + m.group(2) + ".pdf";
|
|
||||||
}
|
|
||||||
// Créé un classeur pour charger le fichier Excel
|
|
||||||
Workbook workbook = new Workbook(excelFilePath);
|
|
||||||
// On enregistre le document au format PDF
|
|
||||||
workbook.save(pdfFilePath, SaveFormat.PDF);
|
|
||||||
return pdfFilePath;
|
|
||||||
}
|
|
||||||
return "ERROR";
|
|
||||||
}
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @param invoiceNumber
|
* @param invoiceNumber
|
||||||
|
@ -424,7 +313,7 @@ public class ShippingInvoiceController {
|
||||||
*/
|
*/
|
||||||
@GetMapping(value = "/downloadPdf")
|
@GetMapping(value = "/downloadPdf")
|
||||||
public ResponseEntity<?> downloadPdf(@RequestParam("invoiceNumber") String invoiceNumber) throws Exception {
|
public ResponseEntity<?> downloadPdf(@RequestParam("invoiceNumber") String invoiceNumber) throws Exception {
|
||||||
String pdfFilePath = convertToPdf(invoiceNumber, "invoice");
|
String pdfFilePath = platformOrderShippingInvoiceService.convertToPdf(invoiceNumber, "invoice");
|
||||||
if(!pdfFilePath.equals("ERROR")) {
|
if(!pdfFilePath.equals("ERROR")) {
|
||||||
File file = new File(pdfFilePath);
|
File file = new File(pdfFilePath);
|
||||||
HttpHeaders header = new HttpHeaders();
|
HttpHeaders header = new HttpHeaders();
|
||||||
|
@ -453,7 +342,7 @@ public class ShippingInvoiceController {
|
||||||
@RequestParam("invoiceID") String invoiceID,
|
@RequestParam("invoiceID") String invoiceID,
|
||||||
@RequestParam("email") String email,
|
@RequestParam("email") String email,
|
||||||
@RequestParam("invoiceEntity") String invoiceEntity) throws Exception {
|
@RequestParam("invoiceEntity") String invoiceEntity) throws Exception {
|
||||||
String filePath = getInvoiceList(invoiceNumber, "detail");
|
String filePath = platformOrderShippingInvoiceService.getInvoiceList(invoiceNumber, "detail");
|
||||||
String fileType = "Détails de facture";
|
String fileType = "Détails de facture";
|
||||||
String subject = "Détails de facture N°" + invoiceNumber;
|
String subject = "Détails de facture N°" + invoiceNumber;
|
||||||
Properties prop = emailService.getMailSender();
|
Properties prop = emailService.getMailSender();
|
||||||
|
@ -513,8 +402,8 @@ public class ShippingInvoiceController {
|
||||||
shippingInvoiceService.delMain(id);
|
shippingInvoiceService.delMain(id);
|
||||||
log.info("Deleting invoice files ...");
|
log.info("Deleting invoice files ...");
|
||||||
String invoiceEntity = clientService.getClientEntity(clientId);
|
String invoiceEntity = clientService.getClientEntity(clientId);
|
||||||
List<Path> invoicePathList = getPath(INVOICE_LOCATION, invoiceNumber, invoiceEntity);
|
List<Path> invoicePathList = platformOrderShippingInvoiceService.getPath(INVOICE_LOCATION, invoiceNumber, invoiceEntity);
|
||||||
List<Path> detailPathList = getPath(INVOICE_DETAIL_LOCATION, invoiceNumber, invoiceEntity);
|
List<Path> detailPathList = platformOrderShippingInvoiceService.getPath(INVOICE_DETAIL_LOCATION, invoiceNumber, invoiceEntity);
|
||||||
boolean invoiceDeleted = false, detailDeleted = false;
|
boolean invoiceDeleted = false, detailDeleted = false;
|
||||||
|
|
||||||
if(invoicePathList.isEmpty()) {
|
if(invoicePathList.isEmpty()) {
|
||||||
|
@ -577,8 +466,8 @@ public class ShippingInvoiceController {
|
||||||
for(int i = 0; i < ids.size(); i++) {
|
for(int i = 0; i < ids.size(); i++) {
|
||||||
String invoiceNumber = invoiceNumbers.get(i);
|
String invoiceNumber = invoiceNumbers.get(i);
|
||||||
String invoiceEntity = clientService.getClientEntity(clientIds.get(i));
|
String invoiceEntity = clientService.getClientEntity(clientIds.get(i));
|
||||||
List<Path> invoicePathList = getPath(INVOICE_LOCATION, invoiceNumber, invoiceEntity);
|
List<Path> invoicePathList = platformOrderShippingInvoiceService.getPath(INVOICE_LOCATION, invoiceNumber, invoiceEntity);
|
||||||
List<Path> detailPathList = getPath(INVOICE_DETAIL_LOCATION, invoiceNumber, invoiceEntity);
|
List<Path> detailPathList = platformOrderShippingInvoiceService.getPath(INVOICE_DETAIL_LOCATION, invoiceNumber, invoiceEntity);
|
||||||
|
|
||||||
if(invoicePathList.isEmpty()) {
|
if(invoicePathList.isEmpty()) {
|
||||||
log.error("FILE NOT FOUND : " + invoiceNumber + ", " + invoiceEntity);
|
log.error("FILE NOT FOUND : " + invoiceNumber + ", " + invoiceEntity);
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
package org.jeecg.modules.business.service;
|
package org.jeecg.modules.business.service;
|
||||||
|
|
||||||
|
import com.aspose.cells.SaveFormat;
|
||||||
|
import com.aspose.cells.Workbook;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.apache.shiro.SecurityUtils;
|
import org.apache.shiro.SecurityUtils;
|
||||||
|
@ -32,7 +34,10 @@ import java.text.SimpleDateFormat;
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
import java.time.ZoneId;
|
import java.time.ZoneId;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
import java.util.regex.Matcher;
|
||||||
|
import java.util.regex.Pattern;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
import java.util.stream.Stream;
|
||||||
import java.util.zip.ZipEntry;
|
import java.util.zip.ZipEntry;
|
||||||
import java.util.zip.ZipOutputStream;
|
import java.util.zip.ZipOutputStream;
|
||||||
|
|
||||||
|
@ -91,9 +96,13 @@ public class PlatformOrderShippingInvoiceService {
|
||||||
|
|
||||||
@Value("${jeecg.path.shippingInvoiceDir}")
|
@Value("${jeecg.path.shippingInvoiceDir}")
|
||||||
private String INVOICE_DIR;
|
private String INVOICE_DIR;
|
||||||
|
|
||||||
@Value("${jeecg.path.shippingInvoiceDetailDir}")
|
@Value("${jeecg.path.shippingInvoiceDetailDir}")
|
||||||
private String INVOICE_DETAIL_DIR;
|
private String INVOICE_DETAIL_DIR;
|
||||||
|
@Value("${jeecg.path.shippingInvoicePdfDir}")
|
||||||
|
private String INVOICE_PDF_DIR;
|
||||||
|
@Value("${jeecg.path.shippingInvoiceDetailPdfDir}")
|
||||||
|
private String INVOICE_DETAIL_PDF_DIR;
|
||||||
|
private static final String EXTENSION = ".xlsx";
|
||||||
|
|
||||||
private final static String[] DETAILS_TITLES = {
|
private final static String[] DETAILS_TITLES = {
|
||||||
"Boutique",
|
"Boutique",
|
||||||
|
@ -470,8 +479,10 @@ public class PlatformOrderShippingInvoiceService {
|
||||||
metaData = makeInvoice(param);
|
metaData = makeInvoice(param);
|
||||||
else
|
else
|
||||||
metaData = makeCompleteInvoicePostShipping(param, "post");
|
metaData = makeCompleteInvoicePostShipping(param, "post");
|
||||||
|
|
||||||
|
convertToPdf(metaData.getInvoiceCode(), "invoice");
|
||||||
invoiceList.add(metaData);
|
invoiceList.add(metaData);
|
||||||
} catch (UserException | IOException | ParseException e) {
|
} catch (Exception e) {
|
||||||
invoiceList.add(new InvoiceMetaData("", "error", entry.getKey(), e.getMessage()));
|
invoiceList.add(new InvoiceMetaData("", "error", entry.getKey(), e.getMessage()));
|
||||||
log.error(e.getMessage());
|
log.error(e.getMessage());
|
||||||
}
|
}
|
||||||
|
@ -480,6 +491,107 @@ public class PlatformOrderShippingInvoiceService {
|
||||||
return invoiceList;
|
return invoiceList;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/** Finds the absolute path of invoice file by recursively walking the directory and it's subdirectories
|
||||||
|
*
|
||||||
|
* @param dirPath
|
||||||
|
* @param invoiceNumber
|
||||||
|
* @return List of paths for the file but should only find one result
|
||||||
|
*/
|
||||||
|
public List<Path> getPath(String dirPath, String invoiceNumber) {
|
||||||
|
List<Path> pathList = new ArrayList<>();
|
||||||
|
//Recursively list all files
|
||||||
|
//The walk() method returns a Stream by walking the file tree beginning with a given starting file/directory in a depth-first manner.
|
||||||
|
try (Stream<Path> stream = Files.walk(Paths.get(dirPath))) {
|
||||||
|
pathList = stream.map(Path::normalize)
|
||||||
|
.filter(Files::isRegularFile) // directories, hidden files and files without extension are not included
|
||||||
|
.filter(path -> path.getFileName().toString().contains(invoiceNumber))
|
||||||
|
.filter(path -> path.getFileName().toString().endsWith(EXTENSION))
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
}
|
||||||
|
catch(IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
return pathList;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Finds the absolute path of invoice file by recursively walking the directory and it's subdirectories
|
||||||
|
*
|
||||||
|
* @param dirPath
|
||||||
|
* @param invoiceNumber
|
||||||
|
* @return List of paths for the file but should only find one result
|
||||||
|
*/
|
||||||
|
public List<Path> getPath(String dirPath, String invoiceNumber, String invoiceEntity) {
|
||||||
|
List<Path> pathList = new ArrayList<>();
|
||||||
|
//Recursively list all files
|
||||||
|
//The walk() method returns a Stream by walking the file tree beginning with a given starting file/directory in a depth-first manner.
|
||||||
|
try (Stream<Path> stream = Files.walk(Paths.get(dirPath))) {
|
||||||
|
pathList = stream.map(Path::normalize)
|
||||||
|
.filter(Files::isRegularFile) // directories, hidden files and files without extension are not included
|
||||||
|
.filter(path -> path.getFileName().toString().contains(invoiceNumber))
|
||||||
|
.filter(path -> path.getFileName().toString().contains(invoiceEntity))
|
||||||
|
.filter(path -> path.getFileName().toString().endsWith(EXTENSION))
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
}
|
||||||
|
catch(IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
return pathList;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Finds the absolute path of invoice file and return the path
|
||||||
|
* @param invoiceNumber
|
||||||
|
* @param filetype if it's an invoice or invoice detail
|
||||||
|
* @return String returns the path of the invoice file
|
||||||
|
*/
|
||||||
|
public String getInvoiceList(String invoiceNumber, String filetype) {
|
||||||
|
log.info("Invoice number : " + invoiceNumber);
|
||||||
|
List<Path> pathList = new ArrayList<>();
|
||||||
|
if(filetype.equals("invoice")) {
|
||||||
|
log.info("File asked is of type invoice");
|
||||||
|
pathList = getPath(INVOICE_DIR, invoiceNumber);
|
||||||
|
}
|
||||||
|
if(filetype.equals("detail")) {
|
||||||
|
log.info("File asked is of type invoice detail");
|
||||||
|
pathList = getPath(INVOICE_DETAIL_DIR, invoiceNumber);
|
||||||
|
}
|
||||||
|
if(pathList.isEmpty()) {
|
||||||
|
log.error("NO INVOICE FILE FOUND : " + invoiceNumber);
|
||||||
|
return "ERROR";
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
for (Path path : pathList) {
|
||||||
|
log.info(path.toString());
|
||||||
|
}
|
||||||
|
return pathList.get(0).toString();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public String convertToPdf(String invoiceNumber, String fileType) throws Exception {
|
||||||
|
String excelFilePath = getInvoiceList(invoiceNumber, fileType);// (C:\PATH\filename.xlsx)
|
||||||
|
|
||||||
|
if(!excelFilePath.equals("ERROR")) {
|
||||||
|
String pdfFilePath= INVOICE_PDF_DIR + "/" + invoiceNumber + ".pdf";
|
||||||
|
if(fileType.equals("invoice")){
|
||||||
|
pdfFilePath = INVOICE_PDF_DIR + "/Invoice N°" + invoiceNumber + ".pdf";
|
||||||
|
}
|
||||||
|
if(fileType.equals("detail")) {
|
||||||
|
pdfFilePath = INVOICE_DETAIL_PDF_DIR + "/Détail_calcul_de_facture_" + invoiceNumber + ".pdf";
|
||||||
|
}
|
||||||
|
|
||||||
|
Pattern p = Pattern.compile("^(.*)[\\/\\\\](.*)(\\.[a-z]+)"); //group(1): "C:\PATH" , group(2) : "filename", group(3): ".xlsx"
|
||||||
|
Matcher m = p.matcher(excelFilePath);
|
||||||
|
if (m.matches()) {
|
||||||
|
pdfFilePath = INVOICE_PDF_DIR + "/" + m.group(2) + ".pdf";
|
||||||
|
}
|
||||||
|
// Créé un classeur pour charger le fichier Excel
|
||||||
|
Workbook workbook = new Workbook(excelFilePath);
|
||||||
|
// On enregistre le document au format PDF
|
||||||
|
workbook.save(pdfFilePath, SaveFormat.PDF);
|
||||||
|
return pdfFilePath;
|
||||||
|
}
|
||||||
|
return "ERROR";
|
||||||
|
}
|
||||||
@Transactional
|
@Transactional
|
||||||
public String zipInvoices(List<String> invoiceList) throws IOException {
|
public String zipInvoices(List<String> invoiceList) throws IOException {
|
||||||
log.info("Zipping Invoices ...");
|
log.info("Zipping Invoices ...");
|
||||||
|
|
Loading…
Reference in New Issue