first commit

main
unknown 2 years ago
commit 8ddc4147f6
  1. 1
      .gitignore
  2. 94
      Repository/Reportes.js
  3. 88
      app.js
  4. 13
      config/dbconfig.js
  5. 11
      package.json
  6. 34
      views/pages/Amazon/Invoice.ejs
  7. 30
      views/partials/Amazon/InvoiceFooter.ejs
  8. 179
      views/partials/Amazon/InvoiceHeader.ejs
  9. 37
      views/partials/Amazon/Items.ejs
  10. 14
      views/partials/Amazon/ItemsTableHeader.ejs
  11. 2641
      yarn.lock

1
.gitignore vendored

@ -0,0 +1 @@
node_modules

@ -0,0 +1,94 @@
var config = require('../config/dbconfig')
const sql = require('mssql')
async function getRptControlDocumentosClientes() {
try {
let pool = await sql.connect(config)
let reporte = await pool
.request()
.query("SELECT * FROM ReportesDocsSir WHERE Estatus='Activo'")
return reporte.recordset
} catch (error) {
console.log(error)
}
}
async function getNoPartesAmazon(id) {
try {
let pool = await sql.connect(config)
const result = await pool
.request()
.input('id', id)
.execute(`[Clientes.Amazon.Invoice.NoPartes2Excel.Get]`)
//const NoPartesSIR = result.recordset;
console.log(result.recordset)
return result.recordset
} catch (error) {
console.log(error)
}
}
async function getExceptionsFile4Amazon(id) {
try {
let pool = await sql.connect(config)
const result = await pool
.request()
.input('id', id)
.execute(`[Clientes.Amazon.Invoice.ExceptionsFile.Get]`)
console.log(result.recordset)
return result.recordset
} catch (error) {
console.log(error)
}
}
async function getAmazonInvoiceDetail(id) {
try {
let pool = await sql.connect(config)
const result = await pool
.request()
.input('id', id)
.query(`SELECT ItemId,ItemDescription, ItemQuantityUnitOfMeasure, CountryOfOrigin,Quantity,WeightValue, ActualUnitCostMonetaryAmount, TotalUnitValueMonetaryAmount FROM [Clientes.Amazon.Invoice.Detail] WHERE IdHeader = @id`)
console.log(result.recordset)
return result.recordset
} catch (error) {
console.log(error)
}
}
async function getAmazonInvoiceShipmentInfo(id) {
try {
let pool = await sql.connect(config)
const result = await pool
.request()
.input('id', id)
.query(`SELECT * FROM [Clientes.Amazon.Invoice.ShipFromAddress] WHERE IdHeader = @id and (AddressType = 'SELLER' or AddressType = 'BILLER')`)
console.log(result.recordset)
return result.recordset
} catch (error) {
console.log(error)
}
}
async function getAmazonInvoiceHeader(id) {
try {
let pool = await sql.connect(config)
const result = await pool
.request()
.input('id', id)
.query(`SELECT * FROM [Clientes.Amazon.Invoice.Header] WHERE id = @id`)
console.log(result.recordset)
return result.recordset
} catch (error) {
console.log(error)
}
}
module.exports = {
getRptControlDocumentosClientes: getRptControlDocumentosClientes,
getNoPartesAmazon: getNoPartesAmazon,
getExceptionsFile4Amazon: getExceptionsFile4Amazon,
getAmazonInvoiceDetail: getAmazonInvoiceDetail,
getAmazonInvoiceShipmentInfo: getAmazonInvoiceShipmentInfo,
getAmazonInvoiceHeader: getAmazonInvoiceHeader
}

@ -0,0 +1,88 @@
const express = require('express');
var html_to_pdf = require('html-pdf-node');
const report = require("puppeteer-report");
//import puppeteer from "puppeteer";
const puppeteer = require('puppeteer')
var Reportes = require('./Repository/Reportes');
const app = express()
let options = { format: 'A4' };
const port = 9091
app.set('view engine', 'ejs')
const user = {
firstName: 'Tim',
lastName: 'Cook',
}
app.get('/', (req, res) => {
Reportes.getAmazonInvoicePDF(req.query.id).then((InvoiceDetail) => {
//res.status(200).send(data);
res.render('pages/AmazonInvoice', {
user: user,
InvoiceDetail: InvoiceDetail
})
})
})
app.get('/Invoice', async (req, res) => {
const InvoiceDetail = await Reportes.getAmazonInvoiceDetail(req.query.id).then((InvoiceDetail) => {
return InvoiceDetail
})
const InvoiceShipmentInfo = await Reportes.getAmazonInvoiceShipmentInfo(req.query.id).then((InvoiceShipmentInfo) => {
return InvoiceShipmentInfo
})
const InvoiceHeader = await Reportes.getAmazonInvoiceHeader(req.query.id).then((InvoiceHeader) => {
return InvoiceHeader
})
const ObjBillerInfo = InvoiceShipmentInfo.filter(shipment => shipment.AddressType === 'BILLER');
const BillerL1 = ObjBillerInfo[0].Name
const BillerL2 = ObjBillerInfo[0].AddressLine1 + ", " + ObjBillerInfo[0].City + ", " + ObjBillerInfo[0].StateProvince + ", " + ObjBillerInfo[0].CountryName
const BillerL3 = ObjBillerInfo[0].Zip
const ObjSellerInfo = InvoiceShipmentInfo.filter(shipment => shipment.AddressType === 'SELLER');
const SellerL1 = ObjSellerInfo[0].Name
const SellerL2 = ObjSellerInfo[0].AddressLine1 + ", " + ObjBillerInfo[0].City + ", " + ObjBillerInfo[0].StateProvince + ", " + ObjBillerInfo[0].CountryName
const SellerL3 = ObjSellerInfo[0].Zip
res.render('pages/Amazon/Invoice', {
user: user,
InvoiceDetail: InvoiceDetail,
InvoiceHeader: InvoiceHeader[0],
AmazonShipmentReferenceId: InvoiceDetail[0].AmazonShipmentReferenceId,
BillerL1: BillerL1,
BillerL2: BillerL2,
BillerL3: BillerL3,
SellerL1: SellerL1,
SellerL2: SellerL2,
SellerL3: SellerL3
})
})
async function printPDF() {
const browser = await puppeteer.launch({ headless: true });
const page = await browser.newPage();
await page.goto('http://localhost:9091/Invoice?id=2', { waitUntil: 'networkidle0' });
const pdf = await page.pdf({
format: 'A4', displayHeaderFooter: true,
headerTemplate: ``,
footerTemplate: `
<div style="border-top: solid 1px #bbb; width: 100%; font-size: 9px;
padding: 5px 5px 0; color: #bbb; position: relative;">
<div style="position: absolute; right: 5px; top: 5px;"><span class="pageNumber"></span> DE <span class="totalPages"></span></div>
</div>
`,
margin: { bottom: '70px' },
});
await browser.close();
return pdf
}
app.get('/getAmazonInvoicePDF', async (req, res) => {
let file = [{ url: "http://localhost:9091/Invoice?id=2", name: 'AmazonInvoice.pdf' }];
printPDF().then(pdf => {
res.set({ 'Content-Type': 'application/pdf', 'Content-Length': pdf.length })
res.send(pdf)
})
})
app.listen(port, () => {
console.log(`App listening at port ${port}`)
})

@ -0,0 +1,13 @@
const config = {
user: 'sa', // sql user
password: 'toor1234', //sql user password
server: 'localhost', // if it does not work try- localhost
database: 'GEMCO',
options: {
// trustedConnection: true,
trustServerCertificate: true,
},
port: 1433
}
module.exports = config;

@ -0,0 +1,11 @@
{
"dependencies": {
"ejs": "^3.1.8",
"express": "^4.18.2",
"html-pdf-node": "^1.0.8",
"mssql": "^9.0.1",
"puppeteer": "^19.5.2",
"puppeteer-core": "^19.5.2",
"puppeteer-report": "^3.1.0"
}
}

@ -0,0 +1,34 @@
<%- include('../../partials/Amazon/InvoiceHeader')%>
<%- include('../../partials/Amazon/ItemsTableHeader')%>
<% var ren=1; InvoiceDetail.forEach((item)=> { %>
<tr>
<td>
<%= ren++ %>
</td>
<td>
<%= item.ItemId %>
</td>
<td>
<%= item.ItemDescription %>
</td>
<td>
<%= item.ItemQuantityUnitOfMeasure %>
</td>
<td>
<%= item.CountryOfOrigin %>
</td>
<td>
<%= item.Quantity %>
</td>
<td>
<%= item.WeightValue %>
</td>
<td>
<%= item.ActualUnitCostMonetaryAmount %>
</th>
<td>
<%= item.TotalUnitValueMonetaryAmount %>
</td>
</tr>
<% }) %>
<%- include('../../partials/Amazon/InvoiceFooter')%>

@ -0,0 +1,30 @@
<!-- <tfoot>
<tr>
<td></td>
<td></td>
<td></td>
<td></td>
<td class="bolder"=>TOTAL QTY</td>
<td class="bolder" style="font-size:17px;"><%= InvoiceDetail.length %></td>
<th colspan="2" style="text-align: right;">TOTAL USD $</th>
<td class="bolder" style="font-size:17px;"><%= InvoiceHeader.TotalInvoiceValueMonetaryAmount %></td>
</tr>
</tfoot> -->
</table>
<table width="100%">
<tr>
<td width="60%">&nbsp;</td>
<td width="40%">
<table width="100%" style="text-align:right">
<tr class="bolder">
<td>Total Qty:</td>
<td style="font-size:18px"><%= InvoiceDetail.length %></td>
<td>TOTAL USD$:</td>
<td style="font-size:18px"><%= InvoiceHeader.TotalInvoiceValueMonetaryAmount %></td>
</tr>
</table>
</td>
</tr>
</table>
</html>

@ -0,0 +1,179 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet"
integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3" crossorigin="anonymous">
<style>
.bolder {
font-weight: bold;
}
.frame {
border-color: 3px black;
}
</style>
</head>
<table border='0' cellpadding='0' cellspacing='0' width='100%'>
<tr>
<td width='70%'>
<table width='100%' style='font-size: 12px;' cellpadding='0' cellspacing='0'>
<tr>
<td>
<!-- <table border=1 width='100%'>
<tr>
<td class="bolder">Seller</td>
</tr>
<tr>
<td>
<%= SellerL1 %> <br>
<%= SellerL2 %> <br>
<%= SellerL3 %>
</td>
</tr>
</table> -->
<center>
<div class="card" style="width: 90%; padding-left: 20px; text-align: left;">
<div class="card-body">
<span style="font-size:15px; font-weight:bold;">SELLER</span> <br>
<%= SellerL1 %> <br>
<%= SellerL2 %> <br>
<%= SellerL3 %>
</div>
</div>
</center>
</td>
</tr>
<tr>
<td>
<!-- <div class="m-1 btn btn-light
border border-danger border-5" style="width: 100%;">
<table width='100%'>
<tr>
<td class="bolder">Bill to:</td>
</tr>
<tr>
<td>
<%= BillerL1 %> <br>
<%= BillerL2 %> <br>
<%= BillerL3 %>
</td>
</tr>
</table>
</div> -->
<center>
<div class="card" style="width: 90%; padding-left: 20px; text-align: left;">
<div class="card-body">
<span style="font-size:15px; font-weight:bold;">BILLER</span> <br>
<%= BillerL1 %> <br>
<%= BillerL2 %> <br>
<%= BillerL3 %>
</div>
</div>
</center>
</td>
</tr>
</table>
</td>
<td width='50%'>
<table cellpadding='0' cellspacing='0' width='100%' style="padding-top:50px">
<tr>
<td>
<table cellpadding='0' cellspacing='0' width='100%'>
<tr>
<td>
<!-- <table width='100%'>
<tr>
<td class="bolder">Date:</td>
</tr>
<tr>
<td>
<%= InvoiceHeader.CommercialInvoiceDate %>
</td>
</tr>
</table> -->
<center>
<div class="card" style="width: 100%; padding-left: 20px; text-align: left; ; font-size:12px;">
<div class="card-body">
<span style="font-size:15px; font-weight:bold;">Date:</span> <br>
<%= InvoiceHeader.CommercialInvoiceDate %>
</div>
</div>
</center>
</td>
<td>
<!-- <table width='100%'>
<tr>
<td class="bolder">Invoice No:</td>
</tr>
<tr>
<td>
<%= InvoiceHeader.InvoiceNumber %>
</td>
</tr>
</table> -->
<center>
<div class="card" style="width: 90%; padding-left: 20px; text-align: left; font-size:12px;">
<div class="card-body">
<span style="font-size:15px; font-weight:bold;">Invoice No:</span> <br>
<%= InvoiceHeader.InvoiceNumber %>
</div>
</div>
</center>
</td>
</tr>
</table>
</td>
</tr=>
<tr>
<td>
<!-- <table border=1 width='100%'>
<tr>
<td class="bolder">Amazon Shipment Reference Id:</td>
</tr>
<tr>
<td colspan='2' style='text-align: center;'>
<%= AmazonShipmentReferenceId %><br>
</td>
</th>
</tr>
</table> -->
<center>
<div class="card" style="width: 95%; padding-left: 20px; text-align: left; font-size:12px;">
<div class="card-body">
<span style="font-size:15px; font-weight:bold;">Amazon Shipment Reference Id:</span> <br>
<%= AmazonShipmentReferenceId %>
</div>
</div>
</center>
</td>
</tr>
<tr>
<td>
<!-- <table border=1 width='100%'>
<tr>
<td class="bolder">Incoterms:</td>
</tr>
<tr>
<td style='text-align: center; '>
<%= InvoiceHeader.Incoterms %>
</td>
</tr>
</table> -->
<center>
<div class="card" style="width: 95%; padding-left: 20px; text-align: left; font-size:12px;">
<div class="card-body">
<span style="font-size:15px; font-weight:bold;">Incoterms:</span> <br>
<%= InvoiceHeader.Incoterms %>
</div>
</div>
</center>
</td>
</tr>
</table>
</td>
</tr>
</table>

@ -0,0 +1,37 @@
<%- include('../Amazon/partials/header')%>
<%- include('../Amazon/partials/tableHeader')%>
<tbody>
<% var ren=1;
InvoiceDetail.forEach((item)=> { %>
<tr>
<td>
<%= ren++ %>
</td>
<td>
<%= item.ItemId %>
</td>
<td>
<%= item.ItemDescription %>
</td>
<td>
<%= item.ItemQuantityUnitOfMeasure %>
</td>
<td>
<%= item.CountryOfOrigin %>
</td>
<td>
<%= item.Quantity %>
</td>
<td>
<%= item.WeightValue %>
</td>
<td>
<%= item.ActualUnitCostMonetaryAmount %>
</td>
<td>
<%= item.TotalUnitValueMonetaryAmount %>
</td>
</tr>
<% }) %>
</tbody>
<%- include('../Amazon/partials/footer')%>

@ -0,0 +1,14 @@
<table width='100%' class='table table-striped table-sm' style="font-size:12px">
<thead>
<tr>
<th>Ord</th>
<th>ASIN#</th>
<th>Description of Goods</th>
<th>Unit Meas.</th>
<th>Country of Origin</th>
<th>Qty Shipped</th>
<th>Unit Net Weight Kg</th>
<th>Unit Cost USD</th>
<th>Total Value USD</th>
</tr>
</thead>

File diff suppressed because it is too large Load Diff
Loading…
Cancel
Save