From 49ff41e9c5a41f452ba4bdd182d0efb093f6407c Mon Sep 17 00:00:00 2001 From: Anuj Subedi Date: Sat, 20 Jan 2024 23:04:04 +0545 Subject: [PATCH 1/5] :package: Added: Config option. - Extra configuration object can now be sent along with the payload when creating invoice. --- dist/class/invoice.d.mts | 23 ++++++++++++++-- dist/class/invoice.d.ts | 23 ++++++++++++++-- dist/class/invoice.js | 36 ++++++++++++------------- dist/class/invoice.js.map | 2 +- dist/class/invoice.mjs | 36 ++++++++++++------------- dist/class/invoice.mjs.map | 2 +- dist/index.js | 36 ++++++++++++------------- dist/index.js.map | 2 +- dist/index.mjs | 36 ++++++++++++------------- dist/index.mjs.map | 2 +- dist/utils/config.d.mts | 2 ++ dist/utils/config.d.ts | 2 ++ dist/utils/config.js | 7 +++++ dist/utils/config.js.map | 1 + dist/utils/config.mjs | 5 ++++ dist/utils/config.mjs.map | 1 + examples/example.ts | 26 ++++++++++++++++++- examples/invoice.pdf | Bin 11615 -> 11638 bytes global.d.ts | 32 +++++++++++++++++++++++ src/class/invoice.ts | 52 ++++++++++++++++++++++++++++--------- src/utils/config.ts | 36 +++++++++++++++++++++++++ 21 files changed, 269 insertions(+), 93 deletions(-) create mode 100644 dist/utils/config.d.mts create mode 100644 dist/utils/config.d.ts create mode 100644 dist/utils/config.js create mode 100644 dist/utils/config.js.map create mode 100644 dist/utils/config.mjs create mode 100644 dist/utils/config.mjs.map create mode 100644 src/utils/config.ts diff --git a/dist/class/invoice.d.mts b/dist/class/invoice.d.mts index 9750368..678614f 100644 --- a/dist/class/invoice.d.mts +++ b/dist/class/invoice.d.mts @@ -1,6 +1,6 @@ interface CompanyInfo { logo?: string; - name: string; + name?: string; address?: string; phone?: string; email?: string; @@ -59,6 +59,24 @@ interface SimplePDFInvoice { styles(): any; } +interface Configuration { + label: { + invoice: string; + refNumber: string; + date: string; + dueDate: string; + status: string; + billTo: string; + item: string; + quantity: string; + price: string; + tax: string; + total: string; + subTotal: string; + totalTax: string; + }; +} + declare class PDFInvoice implements SimplePDFInvoice { payload: InvoicePayLoad; company: CompanyInfo; @@ -70,7 +88,8 @@ declare class PDFInvoice implements SimplePDFInvoice { qr: QRInfo; note: Notes; date: string; - constructor(payload: InvoicePayLoad); + config: Configuration; + constructor(payload: InvoicePayLoad, config?: Configuration); /** * Create a PDF invoice. * diff --git a/dist/class/invoice.d.ts b/dist/class/invoice.d.ts index 9750368..678614f 100644 --- a/dist/class/invoice.d.ts +++ b/dist/class/invoice.d.ts @@ -1,6 +1,6 @@ interface CompanyInfo { logo?: string; - name: string; + name?: string; address?: string; phone?: string; email?: string; @@ -59,6 +59,24 @@ interface SimplePDFInvoice { styles(): any; } +interface Configuration { + label: { + invoice: string; + refNumber: string; + date: string; + dueDate: string; + status: string; + billTo: string; + item: string; + quantity: string; + price: string; + tax: string; + total: string; + subTotal: string; + totalTax: string; + }; +} + declare class PDFInvoice implements SimplePDFInvoice { payload: InvoicePayLoad; company: CompanyInfo; @@ -70,7 +88,8 @@ declare class PDFInvoice implements SimplePDFInvoice { qr: QRInfo; note: Notes; date: string; - constructor(payload: InvoicePayLoad); + config: Configuration; + constructor(payload: InvoicePayLoad, config?: Configuration); /** * Create a PDF invoice. * diff --git a/dist/class/invoice.js b/dist/class/invoice.js index c83a753..8f17849 100644 --- a/dist/class/invoice.js +++ b/dist/class/invoice.js @@ -1,23 +1,23 @@ 'use strict'; -var r=(s=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(s,{get:(t,e)=>(typeof require<"u"?require:t)[e]}):s)(function(s){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+s+'" is not supported')});var y=(s,t)=>()=>(t||s((t={exports:{}}).exports,t),t.exports);var u=y((b,h)=>{var p={calcItemTotal:function(s){let t=s.price||0,e=s.quantity||1;return (t*e).toFixed(2)},calcSubTotal:function(s){if(s.length===0)return 0;let t=0;return s.forEach(e=>{t+=Number(this.calcItemTotal(e));}),t.toFixed(2)},calcTax:function(s){if(s.length===0)return 0;let t=0;return s.forEach(e=>{let n=e.price,c=e.quantity,i=e.tax||0;t+=n*c*i/100;}),t.toFixed(2)},calcFinalTotal:function(s){if(s.length===0)return 0;let t=Number(this.calcSubTotal(s)),e=Number(this.calcTax(s));return (t+e).toFixed(2)}};h.exports=p;});var f=r("fs"),d=r("path"),x=r("pdfmake"),a=u(),m=class{payload;company;invoice;customer;items;currency;path;qr;note;date;constructor(t){this.payload=t,this.company=t.company,this.customer=t.customer,this.invoice=t.invoice,this.items=t.items,this.qr=t.qr,this.note=t.note,this.currency=this.invoice.currency||"$",this.path=d.resolve(this.invoice.path)||"./invoice.pdf",this.date=new Date().toLocaleDateString("en-US",{year:"numeric",month:"numeric",day:"numeric"});}async create(){let t=new x(this.fonts()),e={pageSize:"A4",orientation:"portrait",pageMargins:[40,40,40,40],info:this.meta(),content:this.content(),defaultStyle:this.defaultStyle(),styles:this.styles()};return new Promise((n,c)=>{let i=t.createPdfKitDocument(e),o=f.createWriteStream(this.path);i.pipe(o),i.on("end",()=>{n(this.path);}),i.on("error",l=>{c(l);}),i.end();})}fonts(){return {Helvetica:{normal:"Helvetica",bold:"Helvetica-Bold",italics:"Helvetica-Oblique",bolditalics:"Helvetica-BoldOblique"}}}meta(){return {title:"Invoice - #"+this.invoice.number,author:this.company.name,subject:"Invoice - "+this.customer.name,keywords:"invoice"}}defaultStyle(){return {fontSize:10,lineHeight:1.8,bold:!1,font:"Helvetica",color:"#222222",columnGap:30}}styles(){return {h1:{fontSize:18,bold:!0},h2:{fontSize:16,bold:!0},h3:{fontSize:14,bold:!0},text:{fontSize:10,bold:!1},textBold:{fontSize:10,bold:!0}}}content(){let t=[],e={columns:[{width:"70%",stack:[],style:"text"},{width:"30%",stack:[],style:"text"}]};if(this.company.logo){if(!this.company.logo.startsWith("0&&this.items.forEach(o=>{let l=a.calcItemTotal(o);c.table.body.push([` - ${o.name}`,` - ${o.quantity}`,` - ${this.currency}${o.price}`,` - ${o.tax||0}%`,` - ${this.currency}${l}`]);}),t.push(c);let i={margin:[0,20,0,0],columns:[{width:"*",stack:[" "],style:"text"},{width:200,lineHeight:1.5,style:"textBold",table:{widths:[80,"*"],headerRows:1,lineHeight:1.5,body:[[` - Subtotal`,` - ${this.currency}${a.calcSubTotal(this.items)}`],[` - Total Tax`,` - ${this.currency}${a.calcTax(this.items)}`],[` - Total`,` - ${this.currency}${a.calcFinalTotal(this.items)}`]]}}]};if(t.push(i),this.payload.qr){let o={margin:[0,50,0,0],qr:this.payload.qr.data,fit:this.payload.qr.width||"50"};t.push(o);}if(this.payload.note){let o={margin:[0,this.payload.qr?20:50,0,0],text:this.payload.note,italics:!0};t.push(o);}return t}}; +var h=(s=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(s,{get:(t,e)=>(typeof require<"u"?require:t)[e]}):s)(function(s){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+s+'" is not supported')});var m=(s,t)=>()=>(t||s((t={exports:{}}).exports,t),t.exports);var y=m((w,f)=>{var I={calcItemTotal:function(s){let t=s.price||0,e=s.quantity||1;return (t*e).toFixed(2)},calcSubTotal:function(s){if(s.length===0)return 0;let t=0;return s.forEach(e=>{t+=Number(this.calcItemTotal(e));}),t.toFixed(2)},calcTax:function(s){if(s.length===0)return 0;let t=0;return s.forEach(e=>{let a=e.price,c=e.quantity,o=e.tax||0;t+=a*c*o/100;}),t.toFixed(2)},calcFinalTotal:function(s){if(s.length===0)return 0;let t=Number(this.calcSubTotal(s)),e=Number(this.calcTax(s));return (t+e).toFixed(2)}};f.exports=I;});var d=m((C,p)=>{var v={label:{invoice:"I N V O I C E",refNumber:"Ref no: #",date:"Date:",dueDate:"Due Date:",status:"Status:",billTo:"Bill To",item:"Item",quantity:"Qty",price:"Price",tax:"Tax",total:"Total",subTotal:"Subtotal",totalTax:"Total Tax"}};p.exports=v;});var T=h("fs"),k=h("path"),q=h("pdfmake"),l=y(),S=d(),x=class{payload;company;invoice;customer;items;currency;path;qr;note;date;config;constructor(t,e=S){this.payload=t,this.company=t.company,this.customer=t.customer,this.invoice=t.invoice,this.items=t.items,this.qr=t.qr,this.note=t.note,this.currency=this.invoice.currency||"$",this.path=k.resolve(this.invoice.path)||"./invoice.pdf",this.date=new Date().toLocaleDateString("en-US",{year:"numeric",month:"numeric",day:"numeric"}),this.config=e;}async create(){let t=new q(this.fonts()),e={pageSize:"A4",orientation:"portrait",pageMargins:[40,40,40,40],info:this.meta(),content:this.content(),defaultStyle:this.defaultStyle(),styles:this.styles()};return new Promise((a,c)=>{let o=t.createPdfKitDocument(e),r=T.createWriteStream(this.path);o.pipe(r),o.on("end",()=>{a(this.path);}),o.on("error",n=>{c(n);}),o.end();})}fonts(){return {Helvetica:{normal:"Helvetica",bold:"Helvetica-Bold",italics:"Helvetica-Oblique",bolditalics:"Helvetica-BoldOblique"}}}meta(){return {title:"Invoice - #"+this.invoice.number,author:this.company.name,subject:"Invoice - "+this.customer.name,keywords:"invoice"}}defaultStyle(){return {fontSize:10,lineHeight:1.8,bold:!1,font:"Helvetica",color:"#222222",columnGap:30}}styles(){return {h1:{fontSize:18,bold:!0},h2:{fontSize:16,bold:!0},h3:{fontSize:14,bold:!0},text:{fontSize:10,bold:!1},textBold:{fontSize:10,bold:!0}}}content(){let t=[],e={columns:[{width:"70%",stack:[],style:"text"},{width:"30%",stack:[],style:"text"}]};if(this.company.logo){if(!this.company.logo.startsWith("0&&this.items.forEach(i=>{let g=l.calcItemTotal(i);u.table.body.push([` + ${i.name}`,` + ${i.quantity}`,` + ${this.currency}${i.price}`,` + ${i.tax||0}%`,` + ${this.currency}${g}`]);}),t.push(u);let b={margin:[0,20,0,0],columns:[{width:"*",stack:[" "],style:"text"},{width:200,lineHeight:1.5,style:"textBold",table:{widths:[80,"*"],headerRows:1,lineHeight:1.5,body:[[` + ${this.config.label.subTotal}`,` + ${this.currency}${l.calcSubTotal(this.items)}`],[` + ${this.config.label.totalTax}`,` + ${this.currency}${l.calcTax(this.items)}`],[` + ${this.config.label.total}`,` + ${this.currency}${l.calcFinalTotal(this.items)}`]]}}]};if(t.push(b),this.payload.qr){let i={margin:[0,50,0,0],qr:this.payload.qr.data,fit:this.payload.qr.width||"50"};t.push(i);}if(this.payload.note){let i={margin:[0,this.payload.qr?20:50,0,0],text:this.payload.note,italics:!0};t.push(i);}return t}}; -exports.PDFInvoice = m; +exports.PDFInvoice = x; //# sourceMappingURL=out.js.map //# sourceMappingURL=invoice.js.map \ No newline at end of file diff --git a/dist/class/invoice.js.map b/dist/class/invoice.js.map index 6dda140..d081430 100644 --- a/dist/class/invoice.js.map +++ b/dist/class/invoice.js.map @@ -1 +1 @@ -{"version":3,"sources":["../../src/utils/helper.ts","../../src/class/invoice.ts"],"names":["require_helper","__commonJSMin","exports","module","helper","item","price","quantity","items","total","tax","subTotal","fs","path","invoiceMaker","PDFInvoice","payload","printer","docDefinition","resolve","reject","doc","stream","err","sections","sectionCompany","sectionCustomer","sectionItems","totalPrice","sectionTotal","sectionQR","sectionNote"],"mappings":"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","sourcesContent":["import type { ItemInfo } from \"../../global\";\r\n\r\ninterface Helpers {\r\n\tcalcItemTotal(item: ItemInfo): number | string;\r\n\tcalcTax(items: ItemInfo[]): number | string;\r\n\tcalcSubTotal(items: ItemInfo[]): number | string;\r\n\tcalcFinalTotal(items: ItemInfo[]): number | string;\r\n}\r\n\r\nconst helper: Helpers = {\r\n\t/**\r\n\t * Item total price calculation.\r\n\t *\r\n\t * @param {Object} item.\r\n\t * @returns {number} total.\r\n\t * @since 1.0.0\r\n\t */\r\n\tcalcItemTotal: function (item: ItemInfo): string {\r\n\t\tconst price = item.price || 0;\r\n\t\tconst quantity = item.quantity || 1;\r\n\t\treturn (price * quantity).toFixed(2);\r\n\t},\r\n\r\n\t/**\r\n\t * Calculate subtotal.\r\n\t *\r\n\t * @param {Object} items.\r\n\t * @returns {number} total.\r\n\t * @since 1.0.0\r\n\t */\r\n\tcalcSubTotal: function (items: ItemInfo[]): number | string {\r\n\t\tif (items.length === 0) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\tlet total = 0;\r\n\r\n\t\titems.forEach((item) => {\r\n\t\t\ttotal += Number(this.calcItemTotal(item));\r\n\t\t});\r\n\r\n\t\treturn total.toFixed(2);\r\n\t},\r\n\r\n\t/**\r\n\t * Calculate tax.\r\n\t *\r\n\t * @param {Object} items.\r\n\t * @returns {number} total.\r\n\t * @since 1.0.0\r\n\t */\r\n\tcalcTax: function (items: ItemInfo[]): number | string {\r\n\t\tif (items.length === 0) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\tlet total = 0;\r\n\r\n\t\titems.forEach((item) => {\r\n\t\t\tconst price = item.price;\r\n\t\t\tconst quantity = item.quantity;\r\n\t\t\tconst tax = item.tax || 0;\r\n\r\n\t\t\ttotal += (price * quantity * tax) / 100;\r\n\t\t});\r\n\r\n\t\treturn total.toFixed(2);\r\n\t},\r\n\r\n\t/**\r\n\t * Calculate total final price.\r\n\t *\r\n\t * @param {Object} items.\r\n\t * @returns {number} total.\r\n\t * @since 1.0.0\r\n\t */\r\n\tcalcFinalTotal: function (items: ItemInfo[]): number | string {\r\n\t\tif (items.length === 0) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\tconst subTotal = Number(this.calcSubTotal(items));\r\n\t\tconst tax = Number(this.calcTax(items));\r\n\r\n\t\treturn (subTotal + tax).toFixed(2);\r\n\t},\r\n};\r\n\r\nmodule.exports = helper;\r\n","const fs = require(\"fs\");\r\nconst path = require(\"path\");\r\nconst invoiceMaker = require(\"pdfmake\");\r\nconst helper = require(\"../utils/helper\");\r\nimport type {\r\n\tCompanyInfo,\r\n\tCustomerInfo,\r\n\tInvoiceInfo,\r\n\tItemInfo,\r\n\tQRInfo,\r\n\tNotes,\r\n\tInvoicePayLoad,\r\n\tSimplePDFInvoice,\r\n} from \"../../global\";\r\n\r\nexport class PDFInvoice implements SimplePDFInvoice {\r\n\tpayload: InvoicePayLoad;\r\n\tcompany: CompanyInfo;\r\n\tinvoice: InvoiceInfo;\r\n\tcustomer: CustomerInfo;\r\n\titems: ItemInfo[];\r\n\tcurrency: string;\r\n\tpath: string;\r\n\tqr: QRInfo;\r\n\tnote: Notes;\r\n\tdate: string;\r\n\tconstructor(payload: InvoicePayLoad) {\r\n\t\tthis.payload = payload;\r\n\r\n\t\t// Invoice content section.\r\n\t\tthis.company = payload.company;\r\n\t\tthis.customer = payload.customer;\r\n\t\tthis.invoice = payload.invoice;\r\n\t\tthis.items = payload.items;\r\n\t\tthis.qr = payload.qr;\r\n\t\tthis.note = payload.note;\r\n\r\n\t\t// Invoice currency.\r\n\t\tthis.currency = this.invoice.currency || \"$\";\r\n\r\n\t\t// Path.\r\n\t\tthis.path = path.resolve(this.invoice.path) || \"./invoice.pdf\";\r\n\r\n\t\t// Invoice information.\r\n\t\tthis.date = new Date().toLocaleDateString(\"en-US\", {\r\n\t\t\tyear: \"numeric\",\r\n\t\t\tmonth: \"numeric\",\r\n\t\t\tday: \"numeric\",\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Create a PDF invoice.\r\n\t *\r\n\t * @returns {void}\r\n\t * @since 1.0.0\r\n\t */\r\n\tasync create(): Promise {\r\n\t\tconst printer = new invoiceMaker(this.fonts());\r\n\r\n\t\tconst docDefinition = {\r\n\t\t\tpageSize: \"A4\",\r\n\t\t\torientation: \"portrait\",\r\n\t\t\tpageMargins: [40, 40, 40, 40],\r\n\t\t\tinfo: this.meta(),\r\n\t\t\tcontent: this.content(),\r\n\t\t\tdefaultStyle: this.defaultStyle(),\r\n\t\t\tstyles: this.styles(),\r\n\t\t};\r\n\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tconst doc = printer.createPdfKitDocument(docDefinition);\r\n\t\t\tconst stream = fs.createWriteStream(this.path);\r\n\r\n\t\t\tdoc.pipe(stream);\r\n\r\n\t\t\tdoc.on(\"end\", () => {\r\n\t\t\t\tresolve(this.path);\r\n\t\t\t});\r\n\r\n\t\t\tdoc.on(\"error\", (err: any) => {\r\n\t\t\t\treject(err);\r\n\t\t\t});\r\n\r\n\t\t\tdoc.end();\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Fonts.\r\n\t *\r\n\t * @returns {Object} font.\r\n\t * @since 1.0.0\r\n\t */\r\n\tfonts(): any {\r\n\t\tconst fonts = {\r\n\t\t\tHelvetica: {\r\n\t\t\t\tnormal: \"Helvetica\",\r\n\t\t\t\tbold: \"Helvetica-Bold\",\r\n\t\t\t\titalics: \"Helvetica-Oblique\",\r\n\t\t\t\tbolditalics: \"Helvetica-BoldOblique\",\r\n\t\t\t},\r\n\t\t};\r\n\r\n\t\treturn fonts;\r\n\t}\r\n\r\n\t/**\r\n\t * Doc meta.\r\n\t *\r\n\t * @returns {Object} meta.\r\n\t * @since 1.0.0\r\n\t */\r\n\tmeta(): any {\r\n\t\tconst meta = {\r\n\t\t\ttitle: \"Invoice - #\" + this.invoice.number,\r\n\t\t\tauthor: this.company.name,\r\n\t\t\tsubject: \"Invoice - \" + this.customer.name,\r\n\t\t\tkeywords: \"invoice\",\r\n\t\t};\r\n\r\n\t\treturn meta;\r\n\t}\r\n\r\n\t/**\r\n\t * Default invoice styles.\r\n\t *\r\n\t * @returns {Object} defaults.\r\n\t * @since 1.0.0\r\n\t */\r\n\tdefaultStyle(): any {\r\n\t\tconst defaults = {\r\n\t\t\tfontSize: 10,\r\n\t\t\tlineHeight: 1.8,\r\n\t\t\tbold: false,\r\n\t\t\tfont: \"Helvetica\",\r\n\t\t\tcolor: \"#222222\",\r\n\t\t\tcolumnGap: 30,\r\n\t\t};\r\n\t\treturn defaults;\r\n\t}\r\n\r\n\t/**\r\n\t * Invoice styles.\r\n\t *\r\n\t * @returns {Object} defaults.\r\n\t * @since 1.0.0\r\n\t */\r\n\tstyles(): any {\r\n\t\tconst styles = {\r\n\t\t\th1: {\r\n\t\t\t\tfontSize: 18,\r\n\t\t\t\tbold: true,\r\n\t\t\t},\r\n\t\t\th2: {\r\n\t\t\t\tfontSize: 16,\r\n\t\t\t\tbold: true,\r\n\t\t\t},\r\n\t\t\th3: {\r\n\t\t\t\tfontSize: 14,\r\n\t\t\t\tbold: true,\r\n\t\t\t},\r\n\t\t\ttext: {\r\n\t\t\t\tfontSize: 10,\r\n\t\t\t\tbold: false,\r\n\t\t\t},\r\n\t\t\ttextBold: {\r\n\t\t\t\tfontSize: 10,\r\n\t\t\t\tbold: true,\r\n\t\t\t},\r\n\t\t};\r\n\t\treturn styles;\r\n\t}\r\n\r\n\t/**\r\n\t * Return the invoice layout.\r\n\t *\r\n\t * @returns {Object} layout.\r\n\t * @since 1.0.0\r\n\t */\r\n\tcontent(): any {\r\n\t\tconst sections = [];\r\n\r\n\t\t/**\r\n\t\t * Left: Company section.\r\n\t\t * Right: Invoice section.\r\n\t\t *\r\n\t\t * @since 1.0.0\r\n\t\t */\r\n\t\tconst sectionCompany = {\r\n\t\t\tcolumns: [\r\n\t\t\t\t{\r\n\t\t\t\t\twidth: \"70%\",\r\n\t\t\t\t\tstack: [] as any,\r\n\t\t\t\t\tstyle: \"text\",\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\twidth: \"30%\",\r\n\t\t\t\t\tstack: [] as any,\r\n\t\t\t\t\tstyle: \"text\",\r\n\t\t\t\t},\r\n\t\t\t],\r\n\t\t};\r\n\r\n\t\tif (this.company.logo) {\r\n\t\t\tif (!this.company.logo.startsWith(\" 0) {\r\n\t\t\tthis.items.forEach((item) => {\r\n\t\t\t\tconst totalPrice = helper.calcItemTotal(item);\r\n\r\n\t\t\t\tsectionItems.table.body.push([\r\n\t\t\t\t\t`\\n ${item.name}`,\r\n\t\t\t\t\t`\\n ${item.quantity}`,\r\n\t\t\t\t\t`\\n ${this.currency}${item.price}`,\r\n\t\t\t\t\t`\\n ${item.tax || 0}%`,\r\n\t\t\t\t\t`\\n ${this.currency}${totalPrice}`,\r\n\t\t\t\t]);\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tsections.push(sectionItems);\r\n\r\n\t\t/**\r\n\t\t * Right: Total section.\r\n\t\t *\r\n\t\t * @since 1.0.0\r\n\t\t */\r\n\t\tconst sectionTotal = {\r\n\t\t\tmargin: [0, 20, 0, 0],\r\n\t\t\tcolumns: [\r\n\t\t\t\t{\r\n\t\t\t\t\twidth: \"*\",\r\n\t\t\t\t\tstack: [\" \"],\r\n\t\t\t\t\tstyle: \"text\",\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\twidth: 200,\r\n\t\t\t\t\tlineHeight: 1.5,\r\n\t\t\t\t\tstyle: \"textBold\",\r\n\t\t\t\t\ttable: {\r\n\t\t\t\t\t\twidths: [80, \"*\"],\r\n\t\t\t\t\t\theaderRows: 1,\r\n\t\t\t\t\t\tlineHeight: 1.5,\r\n\t\t\t\t\t\tbody: [\r\n\t\t\t\t\t\t\t[\r\n\t\t\t\t\t\t\t\t\"\\n Subtotal\",\r\n\t\t\t\t\t\t\t\t`\\n ${this.currency}${helper.calcSubTotal(\r\n\t\t\t\t\t\t\t\t\tthis.items\r\n\t\t\t\t\t\t\t\t)}`,\r\n\t\t\t\t\t\t\t],\r\n\t\t\t\t\t\t\t[\r\n\t\t\t\t\t\t\t\t\"\\n Total Tax\",\r\n\t\t\t\t\t\t\t\t`\\n ${this.currency}${helper.calcTax(\r\n\t\t\t\t\t\t\t\t\tthis.items\r\n\t\t\t\t\t\t\t\t)}`,\r\n\t\t\t\t\t\t\t],\r\n\t\t\t\t\t\t\t[\r\n\t\t\t\t\t\t\t\t\"\\n Total\",\r\n\t\t\t\t\t\t\t\t`\\n ${this.currency}${helper.calcFinalTotal(\r\n\t\t\t\t\t\t\t\t\tthis.items\r\n\t\t\t\t\t\t\t\t)}`,\r\n\t\t\t\t\t\t\t],\r\n\t\t\t\t\t\t],\r\n\t\t\t\t\t},\r\n\t\t\t\t},\r\n\t\t\t],\r\n\t\t};\r\n\r\n\t\tsections.push(sectionTotal);\r\n\r\n\t\t/**\r\n\t\t * Left: QR section.\r\n\t\t *\r\n\t\t * @since 1.0.0\r\n\t\t */\r\n\t\tif (this.payload.qr) {\r\n\t\t\tconst sectionQR = {\r\n\t\t\t\tmargin: [0, 50, 0, 0],\r\n\t\t\t\tqr: this.payload.qr.data,\r\n\t\t\t\tfit: this.payload.qr.width || \"50\",\r\n\t\t\t};\r\n\r\n\t\t\tsections.push(sectionQR);\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Left: Notes section.\r\n\t\t *\r\n\t\t * @since 1.0.0\r\n\t\t */\r\n\t\tif (this.payload.note) {\r\n\t\t\tconst sectionNote = {\r\n\t\t\t\tmargin: [0, this.payload.qr ? 20 : 50, 0, 0],\r\n\t\t\t\ttext: this.payload.note,\r\n\t\t\t\titalics: true,\r\n\t\t\t};\r\n\r\n\t\t\tsections.push(sectionNote);\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Return the invoice sections.\r\n\t\t *\r\n\t\t * @since 1.0.0\r\n\t\t */\r\n\t\treturn sections;\r\n\t}\r\n}\r\n"]} \ No newline at end of file +{"version":3,"sources":["../../src/utils/helper.ts","../../src/utils/config.ts","../../src/class/invoice.ts"],"names":["require_helper","__commonJSMin","exports","module","helper","item","price","quantity","items","total","tax","subTotal","require_config","defaultConfig","fs","path","invoiceMaker","PDFInvoice","payload","config","printer","docDefinition","resolve","reject","doc","stream","err","sections","sectionCompany","refLabel","dateLabel","dueDateLabel","statusLabel","sectionCustomer","sectionItems","totalPrice","sectionTotal","sectionQR","sectionNote"],"mappings":"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","sourcesContent":["import type { ItemInfo } from \"../../global\";\r\n\r\ninterface Helpers {\r\n\tcalcItemTotal(item: ItemInfo): number | string;\r\n\tcalcTax(items: ItemInfo[]): number | string;\r\n\tcalcSubTotal(items: ItemInfo[]): number | string;\r\n\tcalcFinalTotal(items: ItemInfo[]): number | string;\r\n}\r\n\r\nconst helper: Helpers = {\r\n\t/**\r\n\t * Item total price calculation.\r\n\t *\r\n\t * @param {Object} item.\r\n\t * @returns {number} total.\r\n\t * @since 1.0.0\r\n\t */\r\n\tcalcItemTotal: function (item: ItemInfo): string {\r\n\t\tconst price = item.price || 0;\r\n\t\tconst quantity = item.quantity || 1;\r\n\t\treturn (price * quantity).toFixed(2);\r\n\t},\r\n\r\n\t/**\r\n\t * Calculate subtotal.\r\n\t *\r\n\t * @param {Object} items.\r\n\t * @returns {number} total.\r\n\t * @since 1.0.0\r\n\t */\r\n\tcalcSubTotal: function (items: ItemInfo[]): number | string {\r\n\t\tif (items.length === 0) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\tlet total = 0;\r\n\r\n\t\titems.forEach((item) => {\r\n\t\t\ttotal += Number(this.calcItemTotal(item));\r\n\t\t});\r\n\r\n\t\treturn total.toFixed(2);\r\n\t},\r\n\r\n\t/**\r\n\t * Calculate tax.\r\n\t *\r\n\t * @param {Object} items.\r\n\t * @returns {number} total.\r\n\t * @since 1.0.0\r\n\t */\r\n\tcalcTax: function (items: ItemInfo[]): number | string {\r\n\t\tif (items.length === 0) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\tlet total = 0;\r\n\r\n\t\titems.forEach((item) => {\r\n\t\t\tconst price = item.price;\r\n\t\t\tconst quantity = item.quantity;\r\n\t\t\tconst tax = item.tax || 0;\r\n\r\n\t\t\ttotal += (price * quantity * tax) / 100;\r\n\t\t});\r\n\r\n\t\treturn total.toFixed(2);\r\n\t},\r\n\r\n\t/**\r\n\t * Calculate total final price.\r\n\t *\r\n\t * @param {Object} items.\r\n\t * @returns {number} total.\r\n\t * @since 1.0.0\r\n\t */\r\n\tcalcFinalTotal: function (items: ItemInfo[]): number | string {\r\n\t\tif (items.length === 0) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\tconst subTotal = Number(this.calcSubTotal(items));\r\n\t\tconst tax = Number(this.calcTax(items));\r\n\r\n\t\treturn (subTotal + tax).toFixed(2);\r\n\t},\r\n};\r\n\r\nmodule.exports = helper;\r\n","/**\r\n * Holds the default configuration.\r\n *\r\n * @returns {Object} config.\r\n * @since 1.0.7\r\n */\r\nconst defaultConfig = {\r\n\tlabel: {\r\n\t\tinvoice: \"I N V O I C E\",\r\n\t\trefNumber: \"Ref no: #\",\r\n\t\tdate: \"Date:\",\r\n\t\tdueDate: \"Due Date:\",\r\n\t\tstatus: \"Status:\",\r\n\t\tbillTo: \"Bill To\",\r\n\t\titem: \"Item\",\r\n\t\tquantity: \"Qty\",\r\n\t\tprice: \"Price\",\r\n\t\ttax: \"Tax\",\r\n\t\ttotal: \"Total\",\r\n\t\tsubTotal: \"Subtotal\",\r\n\t\ttotalTax: \"Total Tax\",\r\n\t},\r\n};\r\n\r\nmodule.exports = defaultConfig;\r\n","const fs = require(\"fs\");\r\nconst path = require(\"path\");\r\nconst invoiceMaker = require(\"pdfmake\");\r\nconst helper = require(\"../utils/helper\");\r\nconst defaultConfig = require(\"../utils/config\");\r\n\r\nimport type {\r\n\tCompanyInfo,\r\n\tCustomerInfo,\r\n\tInvoiceInfo,\r\n\tItemInfo,\r\n\tQRInfo,\r\n\tNotes,\r\n\tInvoicePayLoad,\r\n\tSimplePDFInvoice,\r\n\tConfiguration,\r\n} from \"../../global\";\r\n\r\nexport class PDFInvoice implements SimplePDFInvoice {\r\n\tpayload: InvoicePayLoad;\r\n\tcompany: CompanyInfo;\r\n\tinvoice: InvoiceInfo;\r\n\tcustomer: CustomerInfo;\r\n\titems: ItemInfo[];\r\n\tcurrency: string;\r\n\tpath: string;\r\n\tqr: QRInfo;\r\n\tnote: Notes;\r\n\tdate: string;\r\n\tconfig: Configuration;\r\n\tconstructor(\r\n\t\tpayload: InvoicePayLoad,\r\n\t\tconfig: Configuration = defaultConfig\r\n\t) {\r\n\t\tthis.payload = payload;\r\n\r\n\t\t// Invoice content section.\r\n\t\tthis.company = payload.company;\r\n\t\tthis.customer = payload.customer;\r\n\t\tthis.invoice = payload.invoice;\r\n\t\tthis.items = payload.items;\r\n\t\tthis.qr = payload.qr;\r\n\t\tthis.note = payload.note;\r\n\r\n\t\t// Invoice currency.\r\n\t\tthis.currency = this.invoice.currency || \"$\";\r\n\r\n\t\t// Path.\r\n\t\tthis.path = path.resolve(this.invoice.path) || \"./invoice.pdf\";\r\n\r\n\t\t// Invoice information.\r\n\t\tthis.date = new Date().toLocaleDateString(\"en-US\", {\r\n\t\t\tyear: \"numeric\",\r\n\t\t\tmonth: \"numeric\",\r\n\t\t\tday: \"numeric\",\r\n\t\t});\r\n\r\n\t\t// Configuration.\r\n\t\tthis.config = config;\r\n\t}\r\n\r\n\t/**\r\n\t * Create a PDF invoice.\r\n\t *\r\n\t * @returns {void}\r\n\t * @since 1.0.0\r\n\t */\r\n\tasync create(): Promise {\r\n\t\tconst printer = new invoiceMaker(this.fonts());\r\n\r\n\t\tconst docDefinition = {\r\n\t\t\tpageSize: \"A4\",\r\n\t\t\torientation: \"portrait\",\r\n\t\t\tpageMargins: [40, 40, 40, 40],\r\n\t\t\tinfo: this.meta(),\r\n\t\t\tcontent: this.content(),\r\n\t\t\tdefaultStyle: this.defaultStyle(),\r\n\t\t\tstyles: this.styles(),\r\n\t\t};\r\n\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tconst doc = printer.createPdfKitDocument(docDefinition);\r\n\t\t\tconst stream = fs.createWriteStream(this.path);\r\n\r\n\t\t\tdoc.pipe(stream);\r\n\r\n\t\t\tdoc.on(\"end\", () => {\r\n\t\t\t\tresolve(this.path);\r\n\t\t\t});\r\n\r\n\t\t\tdoc.on(\"error\", (err: any) => {\r\n\t\t\t\treject(err);\r\n\t\t\t});\r\n\r\n\t\t\tdoc.end();\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Fonts.\r\n\t *\r\n\t * @returns {Object} font.\r\n\t * @since 1.0.0\r\n\t */\r\n\tfonts(): any {\r\n\t\tconst fonts = {\r\n\t\t\tHelvetica: {\r\n\t\t\t\tnormal: \"Helvetica\",\r\n\t\t\t\tbold: \"Helvetica-Bold\",\r\n\t\t\t\titalics: \"Helvetica-Oblique\",\r\n\t\t\t\tbolditalics: \"Helvetica-BoldOblique\",\r\n\t\t\t},\r\n\t\t};\r\n\r\n\t\treturn fonts;\r\n\t}\r\n\r\n\t/**\r\n\t * Doc meta.\r\n\t *\r\n\t * @returns {Object} meta.\r\n\t * @since 1.0.0\r\n\t */\r\n\tmeta(): any {\r\n\t\tconst meta = {\r\n\t\t\ttitle: \"Invoice - #\" + this.invoice.number,\r\n\t\t\tauthor: this.company.name,\r\n\t\t\tsubject: \"Invoice - \" + this.customer.name,\r\n\t\t\tkeywords: \"invoice\",\r\n\t\t};\r\n\r\n\t\treturn meta;\r\n\t}\r\n\r\n\t/**\r\n\t * Default invoice styles.\r\n\t *\r\n\t * @returns {Object} defaults.\r\n\t * @since 1.0.0\r\n\t */\r\n\tdefaultStyle(): any {\r\n\t\tconst defaults = {\r\n\t\t\tfontSize: 10,\r\n\t\t\tlineHeight: 1.8,\r\n\t\t\tbold: false,\r\n\t\t\tfont: \"Helvetica\",\r\n\t\t\tcolor: \"#222222\",\r\n\t\t\tcolumnGap: 30,\r\n\t\t};\r\n\t\treturn defaults;\r\n\t}\r\n\r\n\t/**\r\n\t * Invoice styles.\r\n\t *\r\n\t * @returns {Object} defaults.\r\n\t * @since 1.0.0\r\n\t */\r\n\tstyles(): any {\r\n\t\tconst styles = {\r\n\t\t\th1: {\r\n\t\t\t\tfontSize: 18,\r\n\t\t\t\tbold: true,\r\n\t\t\t},\r\n\t\t\th2: {\r\n\t\t\t\tfontSize: 16,\r\n\t\t\t\tbold: true,\r\n\t\t\t},\r\n\t\t\th3: {\r\n\t\t\t\tfontSize: 14,\r\n\t\t\t\tbold: true,\r\n\t\t\t},\r\n\t\t\ttext: {\r\n\t\t\t\tfontSize: 10,\r\n\t\t\t\tbold: false,\r\n\t\t\t},\r\n\t\t\ttextBold: {\r\n\t\t\t\tfontSize: 10,\r\n\t\t\t\tbold: true,\r\n\t\t\t},\r\n\t\t};\r\n\t\treturn styles;\r\n\t}\r\n\r\n\t/**\r\n\t * Return the invoice layout.\r\n\t *\r\n\t * @returns {Object} layout.\r\n\t * @since 1.0.0\r\n\t */\r\n\tcontent(): any {\r\n\t\tconst sections = [];\r\n\r\n\t\t/**\r\n\t\t * Left: Company section.\r\n\t\t * Right: Invoice section.\r\n\t\t *\r\n\t\t * @since 1.0.0\r\n\t\t */\r\n\t\tconst sectionCompany = {\r\n\t\t\tcolumns: [\r\n\t\t\t\t{\r\n\t\t\t\t\twidth: \"70%\",\r\n\t\t\t\t\tstack: [] as any,\r\n\t\t\t\t\tstyle: \"text\",\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\twidth: \"30%\",\r\n\t\t\t\t\tstack: [] as any,\r\n\t\t\t\t\tstyle: \"text\",\r\n\t\t\t\t},\r\n\t\t\t],\r\n\t\t};\r\n\r\n\t\tif (this.company.logo) {\r\n\t\t\tif (!this.company.logo.startsWith(\" 0) {\r\n\t\t\tthis.items.forEach((item) => {\r\n\t\t\t\tconst totalPrice = helper.calcItemTotal(item);\r\n\r\n\t\t\t\tsectionItems.table.body.push([\r\n\t\t\t\t\t`\\n ${item.name}`,\r\n\t\t\t\t\t`\\n ${item.quantity}`,\r\n\t\t\t\t\t`\\n ${this.currency}${item.price}`,\r\n\t\t\t\t\t`\\n ${item.tax || 0}%`,\r\n\t\t\t\t\t`\\n ${this.currency}${totalPrice}`,\r\n\t\t\t\t]);\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tsections.push(sectionItems);\r\n\r\n\t\t/**\r\n\t\t * Right: Total section.\r\n\t\t *\r\n\t\t * @since 1.0.0\r\n\t\t */\r\n\t\tconst sectionTotal = {\r\n\t\t\tmargin: [0, 20, 0, 0],\r\n\t\t\tcolumns: [\r\n\t\t\t\t{\r\n\t\t\t\t\twidth: \"*\",\r\n\t\t\t\t\tstack: [\" \"],\r\n\t\t\t\t\tstyle: \"text\",\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\twidth: 200,\r\n\t\t\t\t\tlineHeight: 1.5,\r\n\t\t\t\t\tstyle: \"textBold\",\r\n\t\t\t\t\ttable: {\r\n\t\t\t\t\t\twidths: [80, \"*\"],\r\n\t\t\t\t\t\theaderRows: 1,\r\n\t\t\t\t\t\tlineHeight: 1.5,\r\n\t\t\t\t\t\tbody: [\r\n\t\t\t\t\t\t\t[\r\n\t\t\t\t\t\t\t\t`\\n ${this.config.label.subTotal}`,\r\n\t\t\t\t\t\t\t\t`\\n ${this.currency}${helper.calcSubTotal(\r\n\t\t\t\t\t\t\t\t\tthis.items\r\n\t\t\t\t\t\t\t\t)}`,\r\n\t\t\t\t\t\t\t],\r\n\t\t\t\t\t\t\t[\r\n\t\t\t\t\t\t\t\t`\\n ${this.config.label.totalTax}`,\r\n\t\t\t\t\t\t\t\t`\\n ${this.currency}${helper.calcTax(\r\n\t\t\t\t\t\t\t\t\tthis.items\r\n\t\t\t\t\t\t\t\t)}`,\r\n\t\t\t\t\t\t\t],\r\n\t\t\t\t\t\t\t[\r\n\t\t\t\t\t\t\t\t`\\n ${this.config.label.total}`,\r\n\t\t\t\t\t\t\t\t`\\n ${this.currency}${helper.calcFinalTotal(\r\n\t\t\t\t\t\t\t\t\tthis.items\r\n\t\t\t\t\t\t\t\t)}`,\r\n\t\t\t\t\t\t\t],\r\n\t\t\t\t\t\t],\r\n\t\t\t\t\t},\r\n\t\t\t\t},\r\n\t\t\t],\r\n\t\t};\r\n\r\n\t\tsections.push(sectionTotal);\r\n\r\n\t\t/**\r\n\t\t * Left: QR section.\r\n\t\t *\r\n\t\t * @since 1.0.0\r\n\t\t */\r\n\t\tif (this.payload.qr) {\r\n\t\t\tconst sectionQR = {\r\n\t\t\t\tmargin: [0, 50, 0, 0],\r\n\t\t\t\tqr: this.payload.qr.data,\r\n\t\t\t\tfit: this.payload.qr.width || \"50\",\r\n\t\t\t};\r\n\r\n\t\t\tsections.push(sectionQR);\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Left: Notes section.\r\n\t\t *\r\n\t\t * @since 1.0.0\r\n\t\t */\r\n\t\tif (this.payload.note) {\r\n\t\t\tconst sectionNote = {\r\n\t\t\t\tmargin: [0, this.payload.qr ? 20 : 50, 0, 0],\r\n\t\t\t\ttext: this.payload.note,\r\n\t\t\t\titalics: true,\r\n\t\t\t};\r\n\r\n\t\t\tsections.push(sectionNote);\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Return the invoice sections.\r\n\t\t *\r\n\t\t * @since 1.0.0\r\n\t\t */\r\n\t\treturn sections;\r\n\t}\r\n}\r\n"]} \ No newline at end of file diff --git a/dist/class/invoice.mjs b/dist/class/invoice.mjs index bb104a0..90c8cff 100644 --- a/dist/class/invoice.mjs +++ b/dist/class/invoice.mjs @@ -1,21 +1,21 @@ -var r=(s=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(s,{get:(t,e)=>(typeof require<"u"?require:t)[e]}):s)(function(s){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+s+'" is not supported')});var y=(s,t)=>()=>(t||s((t={exports:{}}).exports,t),t.exports);var u=y((b,h)=>{var p={calcItemTotal:function(s){let t=s.price||0,e=s.quantity||1;return (t*e).toFixed(2)},calcSubTotal:function(s){if(s.length===0)return 0;let t=0;return s.forEach(e=>{t+=Number(this.calcItemTotal(e));}),t.toFixed(2)},calcTax:function(s){if(s.length===0)return 0;let t=0;return s.forEach(e=>{let n=e.price,c=e.quantity,i=e.tax||0;t+=n*c*i/100;}),t.toFixed(2)},calcFinalTotal:function(s){if(s.length===0)return 0;let t=Number(this.calcSubTotal(s)),e=Number(this.calcTax(s));return (t+e).toFixed(2)}};h.exports=p;});var f=r("fs"),d=r("path"),x=r("pdfmake"),a=u(),m=class{payload;company;invoice;customer;items;currency;path;qr;note;date;constructor(t){this.payload=t,this.company=t.company,this.customer=t.customer,this.invoice=t.invoice,this.items=t.items,this.qr=t.qr,this.note=t.note,this.currency=this.invoice.currency||"$",this.path=d.resolve(this.invoice.path)||"./invoice.pdf",this.date=new Date().toLocaleDateString("en-US",{year:"numeric",month:"numeric",day:"numeric"});}async create(){let t=new x(this.fonts()),e={pageSize:"A4",orientation:"portrait",pageMargins:[40,40,40,40],info:this.meta(),content:this.content(),defaultStyle:this.defaultStyle(),styles:this.styles()};return new Promise((n,c)=>{let i=t.createPdfKitDocument(e),o=f.createWriteStream(this.path);i.pipe(o),i.on("end",()=>{n(this.path);}),i.on("error",l=>{c(l);}),i.end();})}fonts(){return {Helvetica:{normal:"Helvetica",bold:"Helvetica-Bold",italics:"Helvetica-Oblique",bolditalics:"Helvetica-BoldOblique"}}}meta(){return {title:"Invoice - #"+this.invoice.number,author:this.company.name,subject:"Invoice - "+this.customer.name,keywords:"invoice"}}defaultStyle(){return {fontSize:10,lineHeight:1.8,bold:!1,font:"Helvetica",color:"#222222",columnGap:30}}styles(){return {h1:{fontSize:18,bold:!0},h2:{fontSize:16,bold:!0},h3:{fontSize:14,bold:!0},text:{fontSize:10,bold:!1},textBold:{fontSize:10,bold:!0}}}content(){let t=[],e={columns:[{width:"70%",stack:[],style:"text"},{width:"30%",stack:[],style:"text"}]};if(this.company.logo){if(!this.company.logo.startsWith("0&&this.items.forEach(o=>{let l=a.calcItemTotal(o);c.table.body.push([` - ${o.name}`,` - ${o.quantity}`,` - ${this.currency}${o.price}`,` - ${o.tax||0}%`,` - ${this.currency}${l}`]);}),t.push(c);let i={margin:[0,20,0,0],columns:[{width:"*",stack:[" "],style:"text"},{width:200,lineHeight:1.5,style:"textBold",table:{widths:[80,"*"],headerRows:1,lineHeight:1.5,body:[[` - Subtotal`,` - ${this.currency}${a.calcSubTotal(this.items)}`],[` - Total Tax`,` - ${this.currency}${a.calcTax(this.items)}`],[` - Total`,` - ${this.currency}${a.calcFinalTotal(this.items)}`]]}}]};if(t.push(i),this.payload.qr){let o={margin:[0,50,0,0],qr:this.payload.qr.data,fit:this.payload.qr.width||"50"};t.push(o);}if(this.payload.note){let o={margin:[0,this.payload.qr?20:50,0,0],text:this.payload.note,italics:!0};t.push(o);}return t}}; +var h=(s=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(s,{get:(t,e)=>(typeof require<"u"?require:t)[e]}):s)(function(s){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+s+'" is not supported')});var m=(s,t)=>()=>(t||s((t={exports:{}}).exports,t),t.exports);var y=m((w,f)=>{var I={calcItemTotal:function(s){let t=s.price||0,e=s.quantity||1;return (t*e).toFixed(2)},calcSubTotal:function(s){if(s.length===0)return 0;let t=0;return s.forEach(e=>{t+=Number(this.calcItemTotal(e));}),t.toFixed(2)},calcTax:function(s){if(s.length===0)return 0;let t=0;return s.forEach(e=>{let a=e.price,c=e.quantity,o=e.tax||0;t+=a*c*o/100;}),t.toFixed(2)},calcFinalTotal:function(s){if(s.length===0)return 0;let t=Number(this.calcSubTotal(s)),e=Number(this.calcTax(s));return (t+e).toFixed(2)}};f.exports=I;});var d=m((C,p)=>{var v={label:{invoice:"I N V O I C E",refNumber:"Ref no: #",date:"Date:",dueDate:"Due Date:",status:"Status:",billTo:"Bill To",item:"Item",quantity:"Qty",price:"Price",tax:"Tax",total:"Total",subTotal:"Subtotal",totalTax:"Total Tax"}};p.exports=v;});var T=h("fs"),k=h("path"),q=h("pdfmake"),l=y(),S=d(),x=class{payload;company;invoice;customer;items;currency;path;qr;note;date;config;constructor(t,e=S){this.payload=t,this.company=t.company,this.customer=t.customer,this.invoice=t.invoice,this.items=t.items,this.qr=t.qr,this.note=t.note,this.currency=this.invoice.currency||"$",this.path=k.resolve(this.invoice.path)||"./invoice.pdf",this.date=new Date().toLocaleDateString("en-US",{year:"numeric",month:"numeric",day:"numeric"}),this.config=e;}async create(){let t=new q(this.fonts()),e={pageSize:"A4",orientation:"portrait",pageMargins:[40,40,40,40],info:this.meta(),content:this.content(),defaultStyle:this.defaultStyle(),styles:this.styles()};return new Promise((a,c)=>{let o=t.createPdfKitDocument(e),r=T.createWriteStream(this.path);o.pipe(r),o.on("end",()=>{a(this.path);}),o.on("error",n=>{c(n);}),o.end();})}fonts(){return {Helvetica:{normal:"Helvetica",bold:"Helvetica-Bold",italics:"Helvetica-Oblique",bolditalics:"Helvetica-BoldOblique"}}}meta(){return {title:"Invoice - #"+this.invoice.number,author:this.company.name,subject:"Invoice - "+this.customer.name,keywords:"invoice"}}defaultStyle(){return {fontSize:10,lineHeight:1.8,bold:!1,font:"Helvetica",color:"#222222",columnGap:30}}styles(){return {h1:{fontSize:18,bold:!0},h2:{fontSize:16,bold:!0},h3:{fontSize:14,bold:!0},text:{fontSize:10,bold:!1},textBold:{fontSize:10,bold:!0}}}content(){let t=[],e={columns:[{width:"70%",stack:[],style:"text"},{width:"30%",stack:[],style:"text"}]};if(this.company.logo){if(!this.company.logo.startsWith("0&&this.items.forEach(i=>{let g=l.calcItemTotal(i);u.table.body.push([` + ${i.name}`,` + ${i.quantity}`,` + ${this.currency}${i.price}`,` + ${i.tax||0}%`,` + ${this.currency}${g}`]);}),t.push(u);let b={margin:[0,20,0,0],columns:[{width:"*",stack:[" "],style:"text"},{width:200,lineHeight:1.5,style:"textBold",table:{widths:[80,"*"],headerRows:1,lineHeight:1.5,body:[[` + ${this.config.label.subTotal}`,` + ${this.currency}${l.calcSubTotal(this.items)}`],[` + ${this.config.label.totalTax}`,` + ${this.currency}${l.calcTax(this.items)}`],[` + ${this.config.label.total}`,` + ${this.currency}${l.calcFinalTotal(this.items)}`]]}}]};if(t.push(b),this.payload.qr){let i={margin:[0,50,0,0],qr:this.payload.qr.data,fit:this.payload.qr.width||"50"};t.push(i);}if(this.payload.note){let i={margin:[0,this.payload.qr?20:50,0,0],text:this.payload.note,italics:!0};t.push(i);}return t}}; -export { m as PDFInvoice }; +export { x as PDFInvoice }; //# sourceMappingURL=out.js.map //# sourceMappingURL=invoice.mjs.map \ No newline at end of file diff --git a/dist/class/invoice.mjs.map b/dist/class/invoice.mjs.map index 6dda140..d081430 100644 --- a/dist/class/invoice.mjs.map +++ b/dist/class/invoice.mjs.map @@ -1 +1 @@ -{"version":3,"sources":["../../src/utils/helper.ts","../../src/class/invoice.ts"],"names":["require_helper","__commonJSMin","exports","module","helper","item","price","quantity","items","total","tax","subTotal","fs","path","invoiceMaker","PDFInvoice","payload","printer","docDefinition","resolve","reject","doc","stream","err","sections","sectionCompany","sectionCustomer","sectionItems","totalPrice","sectionTotal","sectionQR","sectionNote"],"mappings":"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","sourcesContent":["import type { ItemInfo } from \"../../global\";\r\n\r\ninterface Helpers {\r\n\tcalcItemTotal(item: ItemInfo): number | string;\r\n\tcalcTax(items: ItemInfo[]): number | string;\r\n\tcalcSubTotal(items: ItemInfo[]): number | string;\r\n\tcalcFinalTotal(items: ItemInfo[]): number | string;\r\n}\r\n\r\nconst helper: Helpers = {\r\n\t/**\r\n\t * Item total price calculation.\r\n\t *\r\n\t * @param {Object} item.\r\n\t * @returns {number} total.\r\n\t * @since 1.0.0\r\n\t */\r\n\tcalcItemTotal: function (item: ItemInfo): string {\r\n\t\tconst price = item.price || 0;\r\n\t\tconst quantity = item.quantity || 1;\r\n\t\treturn (price * quantity).toFixed(2);\r\n\t},\r\n\r\n\t/**\r\n\t * Calculate subtotal.\r\n\t *\r\n\t * @param {Object} items.\r\n\t * @returns {number} total.\r\n\t * @since 1.0.0\r\n\t */\r\n\tcalcSubTotal: function (items: ItemInfo[]): number | string {\r\n\t\tif (items.length === 0) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\tlet total = 0;\r\n\r\n\t\titems.forEach((item) => {\r\n\t\t\ttotal += Number(this.calcItemTotal(item));\r\n\t\t});\r\n\r\n\t\treturn total.toFixed(2);\r\n\t},\r\n\r\n\t/**\r\n\t * Calculate tax.\r\n\t *\r\n\t * @param {Object} items.\r\n\t * @returns {number} total.\r\n\t * @since 1.0.0\r\n\t */\r\n\tcalcTax: function (items: ItemInfo[]): number | string {\r\n\t\tif (items.length === 0) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\tlet total = 0;\r\n\r\n\t\titems.forEach((item) => {\r\n\t\t\tconst price = item.price;\r\n\t\t\tconst quantity = item.quantity;\r\n\t\t\tconst tax = item.tax || 0;\r\n\r\n\t\t\ttotal += (price * quantity * tax) / 100;\r\n\t\t});\r\n\r\n\t\treturn total.toFixed(2);\r\n\t},\r\n\r\n\t/**\r\n\t * Calculate total final price.\r\n\t *\r\n\t * @param {Object} items.\r\n\t * @returns {number} total.\r\n\t * @since 1.0.0\r\n\t */\r\n\tcalcFinalTotal: function (items: ItemInfo[]): number | string {\r\n\t\tif (items.length === 0) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\tconst subTotal = Number(this.calcSubTotal(items));\r\n\t\tconst tax = Number(this.calcTax(items));\r\n\r\n\t\treturn (subTotal + tax).toFixed(2);\r\n\t},\r\n};\r\n\r\nmodule.exports = helper;\r\n","const fs = require(\"fs\");\r\nconst path = require(\"path\");\r\nconst invoiceMaker = require(\"pdfmake\");\r\nconst helper = require(\"../utils/helper\");\r\nimport type {\r\n\tCompanyInfo,\r\n\tCustomerInfo,\r\n\tInvoiceInfo,\r\n\tItemInfo,\r\n\tQRInfo,\r\n\tNotes,\r\n\tInvoicePayLoad,\r\n\tSimplePDFInvoice,\r\n} from \"../../global\";\r\n\r\nexport class PDFInvoice implements SimplePDFInvoice {\r\n\tpayload: InvoicePayLoad;\r\n\tcompany: CompanyInfo;\r\n\tinvoice: InvoiceInfo;\r\n\tcustomer: CustomerInfo;\r\n\titems: ItemInfo[];\r\n\tcurrency: string;\r\n\tpath: string;\r\n\tqr: QRInfo;\r\n\tnote: Notes;\r\n\tdate: string;\r\n\tconstructor(payload: InvoicePayLoad) {\r\n\t\tthis.payload = payload;\r\n\r\n\t\t// Invoice content section.\r\n\t\tthis.company = payload.company;\r\n\t\tthis.customer = payload.customer;\r\n\t\tthis.invoice = payload.invoice;\r\n\t\tthis.items = payload.items;\r\n\t\tthis.qr = payload.qr;\r\n\t\tthis.note = payload.note;\r\n\r\n\t\t// Invoice currency.\r\n\t\tthis.currency = this.invoice.currency || \"$\";\r\n\r\n\t\t// Path.\r\n\t\tthis.path = path.resolve(this.invoice.path) || \"./invoice.pdf\";\r\n\r\n\t\t// Invoice information.\r\n\t\tthis.date = new Date().toLocaleDateString(\"en-US\", {\r\n\t\t\tyear: \"numeric\",\r\n\t\t\tmonth: \"numeric\",\r\n\t\t\tday: \"numeric\",\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Create a PDF invoice.\r\n\t *\r\n\t * @returns {void}\r\n\t * @since 1.0.0\r\n\t */\r\n\tasync create(): Promise {\r\n\t\tconst printer = new invoiceMaker(this.fonts());\r\n\r\n\t\tconst docDefinition = {\r\n\t\t\tpageSize: \"A4\",\r\n\t\t\torientation: \"portrait\",\r\n\t\t\tpageMargins: [40, 40, 40, 40],\r\n\t\t\tinfo: this.meta(),\r\n\t\t\tcontent: this.content(),\r\n\t\t\tdefaultStyle: this.defaultStyle(),\r\n\t\t\tstyles: this.styles(),\r\n\t\t};\r\n\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tconst doc = printer.createPdfKitDocument(docDefinition);\r\n\t\t\tconst stream = fs.createWriteStream(this.path);\r\n\r\n\t\t\tdoc.pipe(stream);\r\n\r\n\t\t\tdoc.on(\"end\", () => {\r\n\t\t\t\tresolve(this.path);\r\n\t\t\t});\r\n\r\n\t\t\tdoc.on(\"error\", (err: any) => {\r\n\t\t\t\treject(err);\r\n\t\t\t});\r\n\r\n\t\t\tdoc.end();\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Fonts.\r\n\t *\r\n\t * @returns {Object} font.\r\n\t * @since 1.0.0\r\n\t */\r\n\tfonts(): any {\r\n\t\tconst fonts = {\r\n\t\t\tHelvetica: {\r\n\t\t\t\tnormal: \"Helvetica\",\r\n\t\t\t\tbold: \"Helvetica-Bold\",\r\n\t\t\t\titalics: \"Helvetica-Oblique\",\r\n\t\t\t\tbolditalics: \"Helvetica-BoldOblique\",\r\n\t\t\t},\r\n\t\t};\r\n\r\n\t\treturn fonts;\r\n\t}\r\n\r\n\t/**\r\n\t * Doc meta.\r\n\t *\r\n\t * @returns {Object} meta.\r\n\t * @since 1.0.0\r\n\t */\r\n\tmeta(): any {\r\n\t\tconst meta = {\r\n\t\t\ttitle: \"Invoice - #\" + this.invoice.number,\r\n\t\t\tauthor: this.company.name,\r\n\t\t\tsubject: \"Invoice - \" + this.customer.name,\r\n\t\t\tkeywords: \"invoice\",\r\n\t\t};\r\n\r\n\t\treturn meta;\r\n\t}\r\n\r\n\t/**\r\n\t * Default invoice styles.\r\n\t *\r\n\t * @returns {Object} defaults.\r\n\t * @since 1.0.0\r\n\t */\r\n\tdefaultStyle(): any {\r\n\t\tconst defaults = {\r\n\t\t\tfontSize: 10,\r\n\t\t\tlineHeight: 1.8,\r\n\t\t\tbold: false,\r\n\t\t\tfont: \"Helvetica\",\r\n\t\t\tcolor: \"#222222\",\r\n\t\t\tcolumnGap: 30,\r\n\t\t};\r\n\t\treturn defaults;\r\n\t}\r\n\r\n\t/**\r\n\t * Invoice styles.\r\n\t *\r\n\t * @returns {Object} defaults.\r\n\t * @since 1.0.0\r\n\t */\r\n\tstyles(): any {\r\n\t\tconst styles = {\r\n\t\t\th1: {\r\n\t\t\t\tfontSize: 18,\r\n\t\t\t\tbold: true,\r\n\t\t\t},\r\n\t\t\th2: {\r\n\t\t\t\tfontSize: 16,\r\n\t\t\t\tbold: true,\r\n\t\t\t},\r\n\t\t\th3: {\r\n\t\t\t\tfontSize: 14,\r\n\t\t\t\tbold: true,\r\n\t\t\t},\r\n\t\t\ttext: {\r\n\t\t\t\tfontSize: 10,\r\n\t\t\t\tbold: false,\r\n\t\t\t},\r\n\t\t\ttextBold: {\r\n\t\t\t\tfontSize: 10,\r\n\t\t\t\tbold: true,\r\n\t\t\t},\r\n\t\t};\r\n\t\treturn styles;\r\n\t}\r\n\r\n\t/**\r\n\t * Return the invoice layout.\r\n\t *\r\n\t * @returns {Object} layout.\r\n\t * @since 1.0.0\r\n\t */\r\n\tcontent(): any {\r\n\t\tconst sections = [];\r\n\r\n\t\t/**\r\n\t\t * Left: Company section.\r\n\t\t * Right: Invoice section.\r\n\t\t *\r\n\t\t * @since 1.0.0\r\n\t\t */\r\n\t\tconst sectionCompany = {\r\n\t\t\tcolumns: [\r\n\t\t\t\t{\r\n\t\t\t\t\twidth: \"70%\",\r\n\t\t\t\t\tstack: [] as any,\r\n\t\t\t\t\tstyle: \"text\",\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\twidth: \"30%\",\r\n\t\t\t\t\tstack: [] as any,\r\n\t\t\t\t\tstyle: \"text\",\r\n\t\t\t\t},\r\n\t\t\t],\r\n\t\t};\r\n\r\n\t\tif (this.company.logo) {\r\n\t\t\tif (!this.company.logo.startsWith(\" 0) {\r\n\t\t\tthis.items.forEach((item) => {\r\n\t\t\t\tconst totalPrice = helper.calcItemTotal(item);\r\n\r\n\t\t\t\tsectionItems.table.body.push([\r\n\t\t\t\t\t`\\n ${item.name}`,\r\n\t\t\t\t\t`\\n ${item.quantity}`,\r\n\t\t\t\t\t`\\n ${this.currency}${item.price}`,\r\n\t\t\t\t\t`\\n ${item.tax || 0}%`,\r\n\t\t\t\t\t`\\n ${this.currency}${totalPrice}`,\r\n\t\t\t\t]);\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tsections.push(sectionItems);\r\n\r\n\t\t/**\r\n\t\t * Right: Total section.\r\n\t\t *\r\n\t\t * @since 1.0.0\r\n\t\t */\r\n\t\tconst sectionTotal = {\r\n\t\t\tmargin: [0, 20, 0, 0],\r\n\t\t\tcolumns: [\r\n\t\t\t\t{\r\n\t\t\t\t\twidth: \"*\",\r\n\t\t\t\t\tstack: [\" \"],\r\n\t\t\t\t\tstyle: \"text\",\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\twidth: 200,\r\n\t\t\t\t\tlineHeight: 1.5,\r\n\t\t\t\t\tstyle: \"textBold\",\r\n\t\t\t\t\ttable: {\r\n\t\t\t\t\t\twidths: [80, \"*\"],\r\n\t\t\t\t\t\theaderRows: 1,\r\n\t\t\t\t\t\tlineHeight: 1.5,\r\n\t\t\t\t\t\tbody: [\r\n\t\t\t\t\t\t\t[\r\n\t\t\t\t\t\t\t\t\"\\n Subtotal\",\r\n\t\t\t\t\t\t\t\t`\\n ${this.currency}${helper.calcSubTotal(\r\n\t\t\t\t\t\t\t\t\tthis.items\r\n\t\t\t\t\t\t\t\t)}`,\r\n\t\t\t\t\t\t\t],\r\n\t\t\t\t\t\t\t[\r\n\t\t\t\t\t\t\t\t\"\\n Total Tax\",\r\n\t\t\t\t\t\t\t\t`\\n ${this.currency}${helper.calcTax(\r\n\t\t\t\t\t\t\t\t\tthis.items\r\n\t\t\t\t\t\t\t\t)}`,\r\n\t\t\t\t\t\t\t],\r\n\t\t\t\t\t\t\t[\r\n\t\t\t\t\t\t\t\t\"\\n Total\",\r\n\t\t\t\t\t\t\t\t`\\n ${this.currency}${helper.calcFinalTotal(\r\n\t\t\t\t\t\t\t\t\tthis.items\r\n\t\t\t\t\t\t\t\t)}`,\r\n\t\t\t\t\t\t\t],\r\n\t\t\t\t\t\t],\r\n\t\t\t\t\t},\r\n\t\t\t\t},\r\n\t\t\t],\r\n\t\t};\r\n\r\n\t\tsections.push(sectionTotal);\r\n\r\n\t\t/**\r\n\t\t * Left: QR section.\r\n\t\t *\r\n\t\t * @since 1.0.0\r\n\t\t */\r\n\t\tif (this.payload.qr) {\r\n\t\t\tconst sectionQR = {\r\n\t\t\t\tmargin: [0, 50, 0, 0],\r\n\t\t\t\tqr: this.payload.qr.data,\r\n\t\t\t\tfit: this.payload.qr.width || \"50\",\r\n\t\t\t};\r\n\r\n\t\t\tsections.push(sectionQR);\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Left: Notes section.\r\n\t\t *\r\n\t\t * @since 1.0.0\r\n\t\t */\r\n\t\tif (this.payload.note) {\r\n\t\t\tconst sectionNote = {\r\n\t\t\t\tmargin: [0, this.payload.qr ? 20 : 50, 0, 0],\r\n\t\t\t\ttext: this.payload.note,\r\n\t\t\t\titalics: true,\r\n\t\t\t};\r\n\r\n\t\t\tsections.push(sectionNote);\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Return the invoice sections.\r\n\t\t *\r\n\t\t * @since 1.0.0\r\n\t\t */\r\n\t\treturn sections;\r\n\t}\r\n}\r\n"]} \ No newline at end of file +{"version":3,"sources":["../../src/utils/helper.ts","../../src/utils/config.ts","../../src/class/invoice.ts"],"names":["require_helper","__commonJSMin","exports","module","helper","item","price","quantity","items","total","tax","subTotal","require_config","defaultConfig","fs","path","invoiceMaker","PDFInvoice","payload","config","printer","docDefinition","resolve","reject","doc","stream","err","sections","sectionCompany","refLabel","dateLabel","dueDateLabel","statusLabel","sectionCustomer","sectionItems","totalPrice","sectionTotal","sectionQR","sectionNote"],"mappings":"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","sourcesContent":["import type { ItemInfo } from \"../../global\";\r\n\r\ninterface Helpers {\r\n\tcalcItemTotal(item: ItemInfo): number | string;\r\n\tcalcTax(items: ItemInfo[]): number | string;\r\n\tcalcSubTotal(items: ItemInfo[]): number | string;\r\n\tcalcFinalTotal(items: ItemInfo[]): number | string;\r\n}\r\n\r\nconst helper: Helpers = {\r\n\t/**\r\n\t * Item total price calculation.\r\n\t *\r\n\t * @param {Object} item.\r\n\t * @returns {number} total.\r\n\t * @since 1.0.0\r\n\t */\r\n\tcalcItemTotal: function (item: ItemInfo): string {\r\n\t\tconst price = item.price || 0;\r\n\t\tconst quantity = item.quantity || 1;\r\n\t\treturn (price * quantity).toFixed(2);\r\n\t},\r\n\r\n\t/**\r\n\t * Calculate subtotal.\r\n\t *\r\n\t * @param {Object} items.\r\n\t * @returns {number} total.\r\n\t * @since 1.0.0\r\n\t */\r\n\tcalcSubTotal: function (items: ItemInfo[]): number | string {\r\n\t\tif (items.length === 0) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\tlet total = 0;\r\n\r\n\t\titems.forEach((item) => {\r\n\t\t\ttotal += Number(this.calcItemTotal(item));\r\n\t\t});\r\n\r\n\t\treturn total.toFixed(2);\r\n\t},\r\n\r\n\t/**\r\n\t * Calculate tax.\r\n\t *\r\n\t * @param {Object} items.\r\n\t * @returns {number} total.\r\n\t * @since 1.0.0\r\n\t */\r\n\tcalcTax: function (items: ItemInfo[]): number | string {\r\n\t\tif (items.length === 0) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\tlet total = 0;\r\n\r\n\t\titems.forEach((item) => {\r\n\t\t\tconst price = item.price;\r\n\t\t\tconst quantity = item.quantity;\r\n\t\t\tconst tax = item.tax || 0;\r\n\r\n\t\t\ttotal += (price * quantity * tax) / 100;\r\n\t\t});\r\n\r\n\t\treturn total.toFixed(2);\r\n\t},\r\n\r\n\t/**\r\n\t * Calculate total final price.\r\n\t *\r\n\t * @param {Object} items.\r\n\t * @returns {number} total.\r\n\t * @since 1.0.0\r\n\t */\r\n\tcalcFinalTotal: function (items: ItemInfo[]): number | string {\r\n\t\tif (items.length === 0) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\tconst subTotal = Number(this.calcSubTotal(items));\r\n\t\tconst tax = Number(this.calcTax(items));\r\n\r\n\t\treturn (subTotal + tax).toFixed(2);\r\n\t},\r\n};\r\n\r\nmodule.exports = helper;\r\n","/**\r\n * Holds the default configuration.\r\n *\r\n * @returns {Object} config.\r\n * @since 1.0.7\r\n */\r\nconst defaultConfig = {\r\n\tlabel: {\r\n\t\tinvoice: \"I N V O I C E\",\r\n\t\trefNumber: \"Ref no: #\",\r\n\t\tdate: \"Date:\",\r\n\t\tdueDate: \"Due Date:\",\r\n\t\tstatus: \"Status:\",\r\n\t\tbillTo: \"Bill To\",\r\n\t\titem: \"Item\",\r\n\t\tquantity: \"Qty\",\r\n\t\tprice: \"Price\",\r\n\t\ttax: \"Tax\",\r\n\t\ttotal: \"Total\",\r\n\t\tsubTotal: \"Subtotal\",\r\n\t\ttotalTax: \"Total Tax\",\r\n\t},\r\n};\r\n\r\nmodule.exports = defaultConfig;\r\n","const fs = require(\"fs\");\r\nconst path = require(\"path\");\r\nconst invoiceMaker = require(\"pdfmake\");\r\nconst helper = require(\"../utils/helper\");\r\nconst defaultConfig = require(\"../utils/config\");\r\n\r\nimport type {\r\n\tCompanyInfo,\r\n\tCustomerInfo,\r\n\tInvoiceInfo,\r\n\tItemInfo,\r\n\tQRInfo,\r\n\tNotes,\r\n\tInvoicePayLoad,\r\n\tSimplePDFInvoice,\r\n\tConfiguration,\r\n} from \"../../global\";\r\n\r\nexport class PDFInvoice implements SimplePDFInvoice {\r\n\tpayload: InvoicePayLoad;\r\n\tcompany: CompanyInfo;\r\n\tinvoice: InvoiceInfo;\r\n\tcustomer: CustomerInfo;\r\n\titems: ItemInfo[];\r\n\tcurrency: string;\r\n\tpath: string;\r\n\tqr: QRInfo;\r\n\tnote: Notes;\r\n\tdate: string;\r\n\tconfig: Configuration;\r\n\tconstructor(\r\n\t\tpayload: InvoicePayLoad,\r\n\t\tconfig: Configuration = defaultConfig\r\n\t) {\r\n\t\tthis.payload = payload;\r\n\r\n\t\t// Invoice content section.\r\n\t\tthis.company = payload.company;\r\n\t\tthis.customer = payload.customer;\r\n\t\tthis.invoice = payload.invoice;\r\n\t\tthis.items = payload.items;\r\n\t\tthis.qr = payload.qr;\r\n\t\tthis.note = payload.note;\r\n\r\n\t\t// Invoice currency.\r\n\t\tthis.currency = this.invoice.currency || \"$\";\r\n\r\n\t\t// Path.\r\n\t\tthis.path = path.resolve(this.invoice.path) || \"./invoice.pdf\";\r\n\r\n\t\t// Invoice information.\r\n\t\tthis.date = new Date().toLocaleDateString(\"en-US\", {\r\n\t\t\tyear: \"numeric\",\r\n\t\t\tmonth: \"numeric\",\r\n\t\t\tday: \"numeric\",\r\n\t\t});\r\n\r\n\t\t// Configuration.\r\n\t\tthis.config = config;\r\n\t}\r\n\r\n\t/**\r\n\t * Create a PDF invoice.\r\n\t *\r\n\t * @returns {void}\r\n\t * @since 1.0.0\r\n\t */\r\n\tasync create(): Promise {\r\n\t\tconst printer = new invoiceMaker(this.fonts());\r\n\r\n\t\tconst docDefinition = {\r\n\t\t\tpageSize: \"A4\",\r\n\t\t\torientation: \"portrait\",\r\n\t\t\tpageMargins: [40, 40, 40, 40],\r\n\t\t\tinfo: this.meta(),\r\n\t\t\tcontent: this.content(),\r\n\t\t\tdefaultStyle: this.defaultStyle(),\r\n\t\t\tstyles: this.styles(),\r\n\t\t};\r\n\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tconst doc = printer.createPdfKitDocument(docDefinition);\r\n\t\t\tconst stream = fs.createWriteStream(this.path);\r\n\r\n\t\t\tdoc.pipe(stream);\r\n\r\n\t\t\tdoc.on(\"end\", () => {\r\n\t\t\t\tresolve(this.path);\r\n\t\t\t});\r\n\r\n\t\t\tdoc.on(\"error\", (err: any) => {\r\n\t\t\t\treject(err);\r\n\t\t\t});\r\n\r\n\t\t\tdoc.end();\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Fonts.\r\n\t *\r\n\t * @returns {Object} font.\r\n\t * @since 1.0.0\r\n\t */\r\n\tfonts(): any {\r\n\t\tconst fonts = {\r\n\t\t\tHelvetica: {\r\n\t\t\t\tnormal: \"Helvetica\",\r\n\t\t\t\tbold: \"Helvetica-Bold\",\r\n\t\t\t\titalics: \"Helvetica-Oblique\",\r\n\t\t\t\tbolditalics: \"Helvetica-BoldOblique\",\r\n\t\t\t},\r\n\t\t};\r\n\r\n\t\treturn fonts;\r\n\t}\r\n\r\n\t/**\r\n\t * Doc meta.\r\n\t *\r\n\t * @returns {Object} meta.\r\n\t * @since 1.0.0\r\n\t */\r\n\tmeta(): any {\r\n\t\tconst meta = {\r\n\t\t\ttitle: \"Invoice - #\" + this.invoice.number,\r\n\t\t\tauthor: this.company.name,\r\n\t\t\tsubject: \"Invoice - \" + this.customer.name,\r\n\t\t\tkeywords: \"invoice\",\r\n\t\t};\r\n\r\n\t\treturn meta;\r\n\t}\r\n\r\n\t/**\r\n\t * Default invoice styles.\r\n\t *\r\n\t * @returns {Object} defaults.\r\n\t * @since 1.0.0\r\n\t */\r\n\tdefaultStyle(): any {\r\n\t\tconst defaults = {\r\n\t\t\tfontSize: 10,\r\n\t\t\tlineHeight: 1.8,\r\n\t\t\tbold: false,\r\n\t\t\tfont: \"Helvetica\",\r\n\t\t\tcolor: \"#222222\",\r\n\t\t\tcolumnGap: 30,\r\n\t\t};\r\n\t\treturn defaults;\r\n\t}\r\n\r\n\t/**\r\n\t * Invoice styles.\r\n\t *\r\n\t * @returns {Object} defaults.\r\n\t * @since 1.0.0\r\n\t */\r\n\tstyles(): any {\r\n\t\tconst styles = {\r\n\t\t\th1: {\r\n\t\t\t\tfontSize: 18,\r\n\t\t\t\tbold: true,\r\n\t\t\t},\r\n\t\t\th2: {\r\n\t\t\t\tfontSize: 16,\r\n\t\t\t\tbold: true,\r\n\t\t\t},\r\n\t\t\th3: {\r\n\t\t\t\tfontSize: 14,\r\n\t\t\t\tbold: true,\r\n\t\t\t},\r\n\t\t\ttext: {\r\n\t\t\t\tfontSize: 10,\r\n\t\t\t\tbold: false,\r\n\t\t\t},\r\n\t\t\ttextBold: {\r\n\t\t\t\tfontSize: 10,\r\n\t\t\t\tbold: true,\r\n\t\t\t},\r\n\t\t};\r\n\t\treturn styles;\r\n\t}\r\n\r\n\t/**\r\n\t * Return the invoice layout.\r\n\t *\r\n\t * @returns {Object} layout.\r\n\t * @since 1.0.0\r\n\t */\r\n\tcontent(): any {\r\n\t\tconst sections = [];\r\n\r\n\t\t/**\r\n\t\t * Left: Company section.\r\n\t\t * Right: Invoice section.\r\n\t\t *\r\n\t\t * @since 1.0.0\r\n\t\t */\r\n\t\tconst sectionCompany = {\r\n\t\t\tcolumns: [\r\n\t\t\t\t{\r\n\t\t\t\t\twidth: \"70%\",\r\n\t\t\t\t\tstack: [] as any,\r\n\t\t\t\t\tstyle: \"text\",\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\twidth: \"30%\",\r\n\t\t\t\t\tstack: [] as any,\r\n\t\t\t\t\tstyle: \"text\",\r\n\t\t\t\t},\r\n\t\t\t],\r\n\t\t};\r\n\r\n\t\tif (this.company.logo) {\r\n\t\t\tif (!this.company.logo.startsWith(\" 0) {\r\n\t\t\tthis.items.forEach((item) => {\r\n\t\t\t\tconst totalPrice = helper.calcItemTotal(item);\r\n\r\n\t\t\t\tsectionItems.table.body.push([\r\n\t\t\t\t\t`\\n ${item.name}`,\r\n\t\t\t\t\t`\\n ${item.quantity}`,\r\n\t\t\t\t\t`\\n ${this.currency}${item.price}`,\r\n\t\t\t\t\t`\\n ${item.tax || 0}%`,\r\n\t\t\t\t\t`\\n ${this.currency}${totalPrice}`,\r\n\t\t\t\t]);\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tsections.push(sectionItems);\r\n\r\n\t\t/**\r\n\t\t * Right: Total section.\r\n\t\t *\r\n\t\t * @since 1.0.0\r\n\t\t */\r\n\t\tconst sectionTotal = {\r\n\t\t\tmargin: [0, 20, 0, 0],\r\n\t\t\tcolumns: [\r\n\t\t\t\t{\r\n\t\t\t\t\twidth: \"*\",\r\n\t\t\t\t\tstack: [\" \"],\r\n\t\t\t\t\tstyle: \"text\",\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\twidth: 200,\r\n\t\t\t\t\tlineHeight: 1.5,\r\n\t\t\t\t\tstyle: \"textBold\",\r\n\t\t\t\t\ttable: {\r\n\t\t\t\t\t\twidths: [80, \"*\"],\r\n\t\t\t\t\t\theaderRows: 1,\r\n\t\t\t\t\t\tlineHeight: 1.5,\r\n\t\t\t\t\t\tbody: [\r\n\t\t\t\t\t\t\t[\r\n\t\t\t\t\t\t\t\t`\\n ${this.config.label.subTotal}`,\r\n\t\t\t\t\t\t\t\t`\\n ${this.currency}${helper.calcSubTotal(\r\n\t\t\t\t\t\t\t\t\tthis.items\r\n\t\t\t\t\t\t\t\t)}`,\r\n\t\t\t\t\t\t\t],\r\n\t\t\t\t\t\t\t[\r\n\t\t\t\t\t\t\t\t`\\n ${this.config.label.totalTax}`,\r\n\t\t\t\t\t\t\t\t`\\n ${this.currency}${helper.calcTax(\r\n\t\t\t\t\t\t\t\t\tthis.items\r\n\t\t\t\t\t\t\t\t)}`,\r\n\t\t\t\t\t\t\t],\r\n\t\t\t\t\t\t\t[\r\n\t\t\t\t\t\t\t\t`\\n ${this.config.label.total}`,\r\n\t\t\t\t\t\t\t\t`\\n ${this.currency}${helper.calcFinalTotal(\r\n\t\t\t\t\t\t\t\t\tthis.items\r\n\t\t\t\t\t\t\t\t)}`,\r\n\t\t\t\t\t\t\t],\r\n\t\t\t\t\t\t],\r\n\t\t\t\t\t},\r\n\t\t\t\t},\r\n\t\t\t],\r\n\t\t};\r\n\r\n\t\tsections.push(sectionTotal);\r\n\r\n\t\t/**\r\n\t\t * Left: QR section.\r\n\t\t *\r\n\t\t * @since 1.0.0\r\n\t\t */\r\n\t\tif (this.payload.qr) {\r\n\t\t\tconst sectionQR = {\r\n\t\t\t\tmargin: [0, 50, 0, 0],\r\n\t\t\t\tqr: this.payload.qr.data,\r\n\t\t\t\tfit: this.payload.qr.width || \"50\",\r\n\t\t\t};\r\n\r\n\t\t\tsections.push(sectionQR);\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Left: Notes section.\r\n\t\t *\r\n\t\t * @since 1.0.0\r\n\t\t */\r\n\t\tif (this.payload.note) {\r\n\t\t\tconst sectionNote = {\r\n\t\t\t\tmargin: [0, this.payload.qr ? 20 : 50, 0, 0],\r\n\t\t\t\ttext: this.payload.note,\r\n\t\t\t\titalics: true,\r\n\t\t\t};\r\n\r\n\t\t\tsections.push(sectionNote);\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Return the invoice sections.\r\n\t\t *\r\n\t\t * @since 1.0.0\r\n\t\t */\r\n\t\treturn sections;\r\n\t}\r\n}\r\n"]} \ No newline at end of file diff --git a/dist/index.js b/dist/index.js index cdba7cb..47e3e0e 100644 --- a/dist/index.js +++ b/dist/index.js @@ -1,23 +1,23 @@ 'use strict'; -var r=(s=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(s,{get:(t,e)=>(typeof require<"u"?require:t)[e]}):s)(function(s){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+s+'" is not supported')});var y=(s,t)=>()=>(t||s((t={exports:{}}).exports,t),t.exports);var m=y((b,u)=>{var p={calcItemTotal:function(s){let t=s.price||0,e=s.quantity||1;return (t*e).toFixed(2)},calcSubTotal:function(s){if(s.length===0)return 0;let t=0;return s.forEach(e=>{t+=Number(this.calcItemTotal(e));}),t.toFixed(2)},calcTax:function(s){if(s.length===0)return 0;let t=0;return s.forEach(e=>{let n=e.price,c=e.quantity,i=e.tax||0;t+=n*c*i/100;}),t.toFixed(2)},calcFinalTotal:function(s){if(s.length===0)return 0;let t=Number(this.calcSubTotal(s)),e=Number(this.calcTax(s));return (t+e).toFixed(2)}};u.exports=p;});var f=r("fs"),d=r("path"),x=r("pdfmake"),a=m(),h=class{payload;company;invoice;customer;items;currency;path;qr;note;date;constructor(t){this.payload=t,this.company=t.company,this.customer=t.customer,this.invoice=t.invoice,this.items=t.items,this.qr=t.qr,this.note=t.note,this.currency=this.invoice.currency||"$",this.path=d.resolve(this.invoice.path)||"./invoice.pdf",this.date=new Date().toLocaleDateString("en-US",{year:"numeric",month:"numeric",day:"numeric"});}async create(){let t=new x(this.fonts()),e={pageSize:"A4",orientation:"portrait",pageMargins:[40,40,40,40],info:this.meta(),content:this.content(),defaultStyle:this.defaultStyle(),styles:this.styles()};return new Promise((n,c)=>{let i=t.createPdfKitDocument(e),o=f.createWriteStream(this.path);i.pipe(o),i.on("end",()=>{n(this.path);}),i.on("error",l=>{c(l);}),i.end();})}fonts(){return {Helvetica:{normal:"Helvetica",bold:"Helvetica-Bold",italics:"Helvetica-Oblique",bolditalics:"Helvetica-BoldOblique"}}}meta(){return {title:"Invoice - #"+this.invoice.number,author:this.company.name,subject:"Invoice - "+this.customer.name,keywords:"invoice"}}defaultStyle(){return {fontSize:10,lineHeight:1.8,bold:!1,font:"Helvetica",color:"#222222",columnGap:30}}styles(){return {h1:{fontSize:18,bold:!0},h2:{fontSize:16,bold:!0},h3:{fontSize:14,bold:!0},text:{fontSize:10,bold:!1},textBold:{fontSize:10,bold:!0}}}content(){let t=[],e={columns:[{width:"70%",stack:[],style:"text"},{width:"30%",stack:[],style:"text"}]};if(this.company.logo){if(!this.company.logo.startsWith("0&&this.items.forEach(o=>{let l=a.calcItemTotal(o);c.table.body.push([` - ${o.name}`,` - ${o.quantity}`,` - ${this.currency}${o.price}`,` - ${o.tax||0}%`,` - ${this.currency}${l}`]);}),t.push(c);let i={margin:[0,20,0,0],columns:[{width:"*",stack:[" "],style:"text"},{width:200,lineHeight:1.5,style:"textBold",table:{widths:[80,"*"],headerRows:1,lineHeight:1.5,body:[[` - Subtotal`,` - ${this.currency}${a.calcSubTotal(this.items)}`],[` - Total Tax`,` - ${this.currency}${a.calcTax(this.items)}`],[` - Total`,` - ${this.currency}${a.calcFinalTotal(this.items)}`]]}}]};if(t.push(i),this.payload.qr){let o={margin:[0,50,0,0],qr:this.payload.qr.data,fit:this.payload.qr.width||"50"};t.push(o);}if(this.payload.note){let o={margin:[0,this.payload.qr?20:50,0,0],text:this.payload.note,italics:!0};t.push(o);}return t}}; +var h=(s=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(s,{get:(t,e)=>(typeof require<"u"?require:t)[e]}):s)(function(s){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+s+'" is not supported')});var f=(s,t)=>()=>(t||s((t={exports:{}}).exports,t),t.exports);var p=f((w,y)=>{var I={calcItemTotal:function(s){let t=s.price||0,e=s.quantity||1;return (t*e).toFixed(2)},calcSubTotal:function(s){if(s.length===0)return 0;let t=0;return s.forEach(e=>{t+=Number(this.calcItemTotal(e));}),t.toFixed(2)},calcTax:function(s){if(s.length===0)return 0;let t=0;return s.forEach(e=>{let a=e.price,c=e.quantity,o=e.tax||0;t+=a*c*o/100;}),t.toFixed(2)},calcFinalTotal:function(s){if(s.length===0)return 0;let t=Number(this.calcSubTotal(s)),e=Number(this.calcTax(s));return (t+e).toFixed(2)}};y.exports=I;});var x=f((C,d)=>{var v={label:{invoice:"I N V O I C E",refNumber:"Ref no: #",date:"Date:",dueDate:"Due Date:",status:"Status:",billTo:"Bill To",item:"Item",quantity:"Qty",price:"Price",tax:"Tax",total:"Total",subTotal:"Subtotal",totalTax:"Total Tax"}};d.exports=v;});var T=h("fs"),k=h("path"),q=h("pdfmake"),l=p(),S=x(),u=class{payload;company;invoice;customer;items;currency;path;qr;note;date;config;constructor(t,e=S){this.payload=t,this.company=t.company,this.customer=t.customer,this.invoice=t.invoice,this.items=t.items,this.qr=t.qr,this.note=t.note,this.currency=this.invoice.currency||"$",this.path=k.resolve(this.invoice.path)||"./invoice.pdf",this.date=new Date().toLocaleDateString("en-US",{year:"numeric",month:"numeric",day:"numeric"}),this.config=e;}async create(){let t=new q(this.fonts()),e={pageSize:"A4",orientation:"portrait",pageMargins:[40,40,40,40],info:this.meta(),content:this.content(),defaultStyle:this.defaultStyle(),styles:this.styles()};return new Promise((a,c)=>{let o=t.createPdfKitDocument(e),r=T.createWriteStream(this.path);o.pipe(r),o.on("end",()=>{a(this.path);}),o.on("error",n=>{c(n);}),o.end();})}fonts(){return {Helvetica:{normal:"Helvetica",bold:"Helvetica-Bold",italics:"Helvetica-Oblique",bolditalics:"Helvetica-BoldOblique"}}}meta(){return {title:"Invoice - #"+this.invoice.number,author:this.company.name,subject:"Invoice - "+this.customer.name,keywords:"invoice"}}defaultStyle(){return {fontSize:10,lineHeight:1.8,bold:!1,font:"Helvetica",color:"#222222",columnGap:30}}styles(){return {h1:{fontSize:18,bold:!0},h2:{fontSize:16,bold:!0},h3:{fontSize:14,bold:!0},text:{fontSize:10,bold:!1},textBold:{fontSize:10,bold:!0}}}content(){let t=[],e={columns:[{width:"70%",stack:[],style:"text"},{width:"30%",stack:[],style:"text"}]};if(this.company.logo){if(!this.company.logo.startsWith("0&&this.items.forEach(i=>{let g=l.calcItemTotal(i);m.table.body.push([` + ${i.name}`,` + ${i.quantity}`,` + ${this.currency}${i.price}`,` + ${i.tax||0}%`,` + ${this.currency}${g}`]);}),t.push(m);let b={margin:[0,20,0,0],columns:[{width:"*",stack:[" "],style:"text"},{width:200,lineHeight:1.5,style:"textBold",table:{widths:[80,"*"],headerRows:1,lineHeight:1.5,body:[[` + ${this.config.label.subTotal}`,` + ${this.currency}${l.calcSubTotal(this.items)}`],[` + ${this.config.label.totalTax}`,` + ${this.currency}${l.calcTax(this.items)}`],[` + ${this.config.label.total}`,` + ${this.currency}${l.calcFinalTotal(this.items)}`]]}}]};if(t.push(b),this.payload.qr){let i={margin:[0,50,0,0],qr:this.payload.qr.data,fit:this.payload.qr.width||"50"};t.push(i);}if(this.payload.note){let i={margin:[0,this.payload.qr?20:50,0,0],text:this.payload.note,italics:!0};t.push(i);}return t}}; -exports.PDFInvoice = h; +exports.PDFInvoice = u; //# sourceMappingURL=out.js.map //# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/dist/index.js.map b/dist/index.js.map index 402462e..caadcc5 100644 --- a/dist/index.js.map +++ b/dist/index.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/utils/helper.ts","../src/class/invoice.ts"],"names":["require_helper","__commonJSMin","exports","module","helper","item","price","quantity","items","total","tax","subTotal","fs","path","invoiceMaker","PDFInvoice","payload","printer","docDefinition","resolve","reject","doc","stream","err","sections","sectionCompany","sectionCustomer","sectionItems","totalPrice","sectionTotal","sectionQR","sectionNote"],"mappings":"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","sourcesContent":["import type { ItemInfo } from \"../../global\";\r\n\r\ninterface Helpers {\r\n\tcalcItemTotal(item: ItemInfo): number | string;\r\n\tcalcTax(items: ItemInfo[]): number | string;\r\n\tcalcSubTotal(items: ItemInfo[]): number | string;\r\n\tcalcFinalTotal(items: ItemInfo[]): number | string;\r\n}\r\n\r\nconst helper: Helpers = {\r\n\t/**\r\n\t * Item total price calculation.\r\n\t *\r\n\t * @param {Object} item.\r\n\t * @returns {number} total.\r\n\t * @since 1.0.0\r\n\t */\r\n\tcalcItemTotal: function (item: ItemInfo): string {\r\n\t\tconst price = item.price || 0;\r\n\t\tconst quantity = item.quantity || 1;\r\n\t\treturn (price * quantity).toFixed(2);\r\n\t},\r\n\r\n\t/**\r\n\t * Calculate subtotal.\r\n\t *\r\n\t * @param {Object} items.\r\n\t * @returns {number} total.\r\n\t * @since 1.0.0\r\n\t */\r\n\tcalcSubTotal: function (items: ItemInfo[]): number | string {\r\n\t\tif (items.length === 0) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\tlet total = 0;\r\n\r\n\t\titems.forEach((item) => {\r\n\t\t\ttotal += Number(this.calcItemTotal(item));\r\n\t\t});\r\n\r\n\t\treturn total.toFixed(2);\r\n\t},\r\n\r\n\t/**\r\n\t * Calculate tax.\r\n\t *\r\n\t * @param {Object} items.\r\n\t * @returns {number} total.\r\n\t * @since 1.0.0\r\n\t */\r\n\tcalcTax: function (items: ItemInfo[]): number | string {\r\n\t\tif (items.length === 0) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\tlet total = 0;\r\n\r\n\t\titems.forEach((item) => {\r\n\t\t\tconst price = item.price;\r\n\t\t\tconst quantity = item.quantity;\r\n\t\t\tconst tax = item.tax || 0;\r\n\r\n\t\t\ttotal += (price * quantity * tax) / 100;\r\n\t\t});\r\n\r\n\t\treturn total.toFixed(2);\r\n\t},\r\n\r\n\t/**\r\n\t * Calculate total final price.\r\n\t *\r\n\t * @param {Object} items.\r\n\t * @returns {number} total.\r\n\t * @since 1.0.0\r\n\t */\r\n\tcalcFinalTotal: function (items: ItemInfo[]): number | string {\r\n\t\tif (items.length === 0) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\tconst subTotal = Number(this.calcSubTotal(items));\r\n\t\tconst tax = Number(this.calcTax(items));\r\n\r\n\t\treturn (subTotal + tax).toFixed(2);\r\n\t},\r\n};\r\n\r\nmodule.exports = helper;\r\n","const fs = require(\"fs\");\r\nconst path = require(\"path\");\r\nconst invoiceMaker = require(\"pdfmake\");\r\nconst helper = require(\"../utils/helper\");\r\nimport type {\r\n\tCompanyInfo,\r\n\tCustomerInfo,\r\n\tInvoiceInfo,\r\n\tItemInfo,\r\n\tQRInfo,\r\n\tNotes,\r\n\tInvoicePayLoad,\r\n\tSimplePDFInvoice,\r\n} from \"../../global\";\r\n\r\nexport class PDFInvoice implements SimplePDFInvoice {\r\n\tpayload: InvoicePayLoad;\r\n\tcompany: CompanyInfo;\r\n\tinvoice: InvoiceInfo;\r\n\tcustomer: CustomerInfo;\r\n\titems: ItemInfo[];\r\n\tcurrency: string;\r\n\tpath: string;\r\n\tqr: QRInfo;\r\n\tnote: Notes;\r\n\tdate: string;\r\n\tconstructor(payload: InvoicePayLoad) {\r\n\t\tthis.payload = payload;\r\n\r\n\t\t// Invoice content section.\r\n\t\tthis.company = payload.company;\r\n\t\tthis.customer = payload.customer;\r\n\t\tthis.invoice = payload.invoice;\r\n\t\tthis.items = payload.items;\r\n\t\tthis.qr = payload.qr;\r\n\t\tthis.note = payload.note;\r\n\r\n\t\t// Invoice currency.\r\n\t\tthis.currency = this.invoice.currency || \"$\";\r\n\r\n\t\t// Path.\r\n\t\tthis.path = path.resolve(this.invoice.path) || \"./invoice.pdf\";\r\n\r\n\t\t// Invoice information.\r\n\t\tthis.date = new Date().toLocaleDateString(\"en-US\", {\r\n\t\t\tyear: \"numeric\",\r\n\t\t\tmonth: \"numeric\",\r\n\t\t\tday: \"numeric\",\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Create a PDF invoice.\r\n\t *\r\n\t * @returns {void}\r\n\t * @since 1.0.0\r\n\t */\r\n\tasync create(): Promise {\r\n\t\tconst printer = new invoiceMaker(this.fonts());\r\n\r\n\t\tconst docDefinition = {\r\n\t\t\tpageSize: \"A4\",\r\n\t\t\torientation: \"portrait\",\r\n\t\t\tpageMargins: [40, 40, 40, 40],\r\n\t\t\tinfo: this.meta(),\r\n\t\t\tcontent: this.content(),\r\n\t\t\tdefaultStyle: this.defaultStyle(),\r\n\t\t\tstyles: this.styles(),\r\n\t\t};\r\n\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tconst doc = printer.createPdfKitDocument(docDefinition);\r\n\t\t\tconst stream = fs.createWriteStream(this.path);\r\n\r\n\t\t\tdoc.pipe(stream);\r\n\r\n\t\t\tdoc.on(\"end\", () => {\r\n\t\t\t\tresolve(this.path);\r\n\t\t\t});\r\n\r\n\t\t\tdoc.on(\"error\", (err: any) => {\r\n\t\t\t\treject(err);\r\n\t\t\t});\r\n\r\n\t\t\tdoc.end();\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Fonts.\r\n\t *\r\n\t * @returns {Object} font.\r\n\t * @since 1.0.0\r\n\t */\r\n\tfonts(): any {\r\n\t\tconst fonts = {\r\n\t\t\tHelvetica: {\r\n\t\t\t\tnormal: \"Helvetica\",\r\n\t\t\t\tbold: \"Helvetica-Bold\",\r\n\t\t\t\titalics: \"Helvetica-Oblique\",\r\n\t\t\t\tbolditalics: \"Helvetica-BoldOblique\",\r\n\t\t\t},\r\n\t\t};\r\n\r\n\t\treturn fonts;\r\n\t}\r\n\r\n\t/**\r\n\t * Doc meta.\r\n\t *\r\n\t * @returns {Object} meta.\r\n\t * @since 1.0.0\r\n\t */\r\n\tmeta(): any {\r\n\t\tconst meta = {\r\n\t\t\ttitle: \"Invoice - #\" + this.invoice.number,\r\n\t\t\tauthor: this.company.name,\r\n\t\t\tsubject: \"Invoice - \" + this.customer.name,\r\n\t\t\tkeywords: \"invoice\",\r\n\t\t};\r\n\r\n\t\treturn meta;\r\n\t}\r\n\r\n\t/**\r\n\t * Default invoice styles.\r\n\t *\r\n\t * @returns {Object} defaults.\r\n\t * @since 1.0.0\r\n\t */\r\n\tdefaultStyle(): any {\r\n\t\tconst defaults = {\r\n\t\t\tfontSize: 10,\r\n\t\t\tlineHeight: 1.8,\r\n\t\t\tbold: false,\r\n\t\t\tfont: \"Helvetica\",\r\n\t\t\tcolor: \"#222222\",\r\n\t\t\tcolumnGap: 30,\r\n\t\t};\r\n\t\treturn defaults;\r\n\t}\r\n\r\n\t/**\r\n\t * Invoice styles.\r\n\t *\r\n\t * @returns {Object} defaults.\r\n\t * @since 1.0.0\r\n\t */\r\n\tstyles(): any {\r\n\t\tconst styles = {\r\n\t\t\th1: {\r\n\t\t\t\tfontSize: 18,\r\n\t\t\t\tbold: true,\r\n\t\t\t},\r\n\t\t\th2: {\r\n\t\t\t\tfontSize: 16,\r\n\t\t\t\tbold: true,\r\n\t\t\t},\r\n\t\t\th3: {\r\n\t\t\t\tfontSize: 14,\r\n\t\t\t\tbold: true,\r\n\t\t\t},\r\n\t\t\ttext: {\r\n\t\t\t\tfontSize: 10,\r\n\t\t\t\tbold: false,\r\n\t\t\t},\r\n\t\t\ttextBold: {\r\n\t\t\t\tfontSize: 10,\r\n\t\t\t\tbold: true,\r\n\t\t\t},\r\n\t\t};\r\n\t\treturn styles;\r\n\t}\r\n\r\n\t/**\r\n\t * Return the invoice layout.\r\n\t *\r\n\t * @returns {Object} layout.\r\n\t * @since 1.0.0\r\n\t */\r\n\tcontent(): any {\r\n\t\tconst sections = [];\r\n\r\n\t\t/**\r\n\t\t * Left: Company section.\r\n\t\t * Right: Invoice section.\r\n\t\t *\r\n\t\t * @since 1.0.0\r\n\t\t */\r\n\t\tconst sectionCompany = {\r\n\t\t\tcolumns: [\r\n\t\t\t\t{\r\n\t\t\t\t\twidth: \"70%\",\r\n\t\t\t\t\tstack: [] as any,\r\n\t\t\t\t\tstyle: \"text\",\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\twidth: \"30%\",\r\n\t\t\t\t\tstack: [] as any,\r\n\t\t\t\t\tstyle: \"text\",\r\n\t\t\t\t},\r\n\t\t\t],\r\n\t\t};\r\n\r\n\t\tif (this.company.logo) {\r\n\t\t\tif (!this.company.logo.startsWith(\" 0) {\r\n\t\t\tthis.items.forEach((item) => {\r\n\t\t\t\tconst totalPrice = helper.calcItemTotal(item);\r\n\r\n\t\t\t\tsectionItems.table.body.push([\r\n\t\t\t\t\t`\\n ${item.name}`,\r\n\t\t\t\t\t`\\n ${item.quantity}`,\r\n\t\t\t\t\t`\\n ${this.currency}${item.price}`,\r\n\t\t\t\t\t`\\n ${item.tax || 0}%`,\r\n\t\t\t\t\t`\\n ${this.currency}${totalPrice}`,\r\n\t\t\t\t]);\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tsections.push(sectionItems);\r\n\r\n\t\t/**\r\n\t\t * Right: Total section.\r\n\t\t *\r\n\t\t * @since 1.0.0\r\n\t\t */\r\n\t\tconst sectionTotal = {\r\n\t\t\tmargin: [0, 20, 0, 0],\r\n\t\t\tcolumns: [\r\n\t\t\t\t{\r\n\t\t\t\t\twidth: \"*\",\r\n\t\t\t\t\tstack: [\" \"],\r\n\t\t\t\t\tstyle: \"text\",\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\twidth: 200,\r\n\t\t\t\t\tlineHeight: 1.5,\r\n\t\t\t\t\tstyle: \"textBold\",\r\n\t\t\t\t\ttable: {\r\n\t\t\t\t\t\twidths: [80, \"*\"],\r\n\t\t\t\t\t\theaderRows: 1,\r\n\t\t\t\t\t\tlineHeight: 1.5,\r\n\t\t\t\t\t\tbody: [\r\n\t\t\t\t\t\t\t[\r\n\t\t\t\t\t\t\t\t\"\\n Subtotal\",\r\n\t\t\t\t\t\t\t\t`\\n ${this.currency}${helper.calcSubTotal(\r\n\t\t\t\t\t\t\t\t\tthis.items\r\n\t\t\t\t\t\t\t\t)}`,\r\n\t\t\t\t\t\t\t],\r\n\t\t\t\t\t\t\t[\r\n\t\t\t\t\t\t\t\t\"\\n Total Tax\",\r\n\t\t\t\t\t\t\t\t`\\n ${this.currency}${helper.calcTax(\r\n\t\t\t\t\t\t\t\t\tthis.items\r\n\t\t\t\t\t\t\t\t)}`,\r\n\t\t\t\t\t\t\t],\r\n\t\t\t\t\t\t\t[\r\n\t\t\t\t\t\t\t\t\"\\n Total\",\r\n\t\t\t\t\t\t\t\t`\\n ${this.currency}${helper.calcFinalTotal(\r\n\t\t\t\t\t\t\t\t\tthis.items\r\n\t\t\t\t\t\t\t\t)}`,\r\n\t\t\t\t\t\t\t],\r\n\t\t\t\t\t\t],\r\n\t\t\t\t\t},\r\n\t\t\t\t},\r\n\t\t\t],\r\n\t\t};\r\n\r\n\t\tsections.push(sectionTotal);\r\n\r\n\t\t/**\r\n\t\t * Left: QR section.\r\n\t\t *\r\n\t\t * @since 1.0.0\r\n\t\t */\r\n\t\tif (this.payload.qr) {\r\n\t\t\tconst sectionQR = {\r\n\t\t\t\tmargin: [0, 50, 0, 0],\r\n\t\t\t\tqr: this.payload.qr.data,\r\n\t\t\t\tfit: this.payload.qr.width || \"50\",\r\n\t\t\t};\r\n\r\n\t\t\tsections.push(sectionQR);\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Left: Notes section.\r\n\t\t *\r\n\t\t * @since 1.0.0\r\n\t\t */\r\n\t\tif (this.payload.note) {\r\n\t\t\tconst sectionNote = {\r\n\t\t\t\tmargin: [0, this.payload.qr ? 20 : 50, 0, 0],\r\n\t\t\t\ttext: this.payload.note,\r\n\t\t\t\titalics: true,\r\n\t\t\t};\r\n\r\n\t\t\tsections.push(sectionNote);\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Return the invoice sections.\r\n\t\t *\r\n\t\t * @since 1.0.0\r\n\t\t */\r\n\t\treturn sections;\r\n\t}\r\n}\r\n"]} \ No newline at end of file +{"version":3,"sources":["../src/utils/helper.ts","../src/utils/config.ts","../src/class/invoice.ts"],"names":["require_helper","__commonJSMin","exports","module","helper","item","price","quantity","items","total","tax","subTotal","require_config","defaultConfig","fs","path","invoiceMaker","PDFInvoice","payload","config","printer","docDefinition","resolve","reject","doc","stream","err","sections","sectionCompany","refLabel","dateLabel","dueDateLabel","statusLabel","sectionCustomer","sectionItems","totalPrice","sectionTotal","sectionQR","sectionNote"],"mappings":"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","sourcesContent":["import type { ItemInfo } from \"../../global\";\r\n\r\ninterface Helpers {\r\n\tcalcItemTotal(item: ItemInfo): number | string;\r\n\tcalcTax(items: ItemInfo[]): number | string;\r\n\tcalcSubTotal(items: ItemInfo[]): number | string;\r\n\tcalcFinalTotal(items: ItemInfo[]): number | string;\r\n}\r\n\r\nconst helper: Helpers = {\r\n\t/**\r\n\t * Item total price calculation.\r\n\t *\r\n\t * @param {Object} item.\r\n\t * @returns {number} total.\r\n\t * @since 1.0.0\r\n\t */\r\n\tcalcItemTotal: function (item: ItemInfo): string {\r\n\t\tconst price = item.price || 0;\r\n\t\tconst quantity = item.quantity || 1;\r\n\t\treturn (price * quantity).toFixed(2);\r\n\t},\r\n\r\n\t/**\r\n\t * Calculate subtotal.\r\n\t *\r\n\t * @param {Object} items.\r\n\t * @returns {number} total.\r\n\t * @since 1.0.0\r\n\t */\r\n\tcalcSubTotal: function (items: ItemInfo[]): number | string {\r\n\t\tif (items.length === 0) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\tlet total = 0;\r\n\r\n\t\titems.forEach((item) => {\r\n\t\t\ttotal += Number(this.calcItemTotal(item));\r\n\t\t});\r\n\r\n\t\treturn total.toFixed(2);\r\n\t},\r\n\r\n\t/**\r\n\t * Calculate tax.\r\n\t *\r\n\t * @param {Object} items.\r\n\t * @returns {number} total.\r\n\t * @since 1.0.0\r\n\t */\r\n\tcalcTax: function (items: ItemInfo[]): number | string {\r\n\t\tif (items.length === 0) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\tlet total = 0;\r\n\r\n\t\titems.forEach((item) => {\r\n\t\t\tconst price = item.price;\r\n\t\t\tconst quantity = item.quantity;\r\n\t\t\tconst tax = item.tax || 0;\r\n\r\n\t\t\ttotal += (price * quantity * tax) / 100;\r\n\t\t});\r\n\r\n\t\treturn total.toFixed(2);\r\n\t},\r\n\r\n\t/**\r\n\t * Calculate total final price.\r\n\t *\r\n\t * @param {Object} items.\r\n\t * @returns {number} total.\r\n\t * @since 1.0.0\r\n\t */\r\n\tcalcFinalTotal: function (items: ItemInfo[]): number | string {\r\n\t\tif (items.length === 0) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\tconst subTotal = Number(this.calcSubTotal(items));\r\n\t\tconst tax = Number(this.calcTax(items));\r\n\r\n\t\treturn (subTotal + tax).toFixed(2);\r\n\t},\r\n};\r\n\r\nmodule.exports = helper;\r\n","/**\r\n * Holds the default configuration.\r\n *\r\n * @returns {Object} config.\r\n * @since 1.0.7\r\n */\r\nconst defaultConfig = {\r\n\tlabel: {\r\n\t\tinvoice: \"I N V O I C E\",\r\n\t\trefNumber: \"Ref no: #\",\r\n\t\tdate: \"Date:\",\r\n\t\tdueDate: \"Due Date:\",\r\n\t\tstatus: \"Status:\",\r\n\t\tbillTo: \"Bill To\",\r\n\t\titem: \"Item\",\r\n\t\tquantity: \"Qty\",\r\n\t\tprice: \"Price\",\r\n\t\ttax: \"Tax\",\r\n\t\ttotal: \"Total\",\r\n\t\tsubTotal: \"Subtotal\",\r\n\t\ttotalTax: \"Total Tax\",\r\n\t},\r\n};\r\n\r\nmodule.exports = defaultConfig;\r\n","const fs = require(\"fs\");\r\nconst path = require(\"path\");\r\nconst invoiceMaker = require(\"pdfmake\");\r\nconst helper = require(\"../utils/helper\");\r\nconst defaultConfig = require(\"../utils/config\");\r\n\r\nimport type {\r\n\tCompanyInfo,\r\n\tCustomerInfo,\r\n\tInvoiceInfo,\r\n\tItemInfo,\r\n\tQRInfo,\r\n\tNotes,\r\n\tInvoicePayLoad,\r\n\tSimplePDFInvoice,\r\n\tConfiguration,\r\n} from \"../../global\";\r\n\r\nexport class PDFInvoice implements SimplePDFInvoice {\r\n\tpayload: InvoicePayLoad;\r\n\tcompany: CompanyInfo;\r\n\tinvoice: InvoiceInfo;\r\n\tcustomer: CustomerInfo;\r\n\titems: ItemInfo[];\r\n\tcurrency: string;\r\n\tpath: string;\r\n\tqr: QRInfo;\r\n\tnote: Notes;\r\n\tdate: string;\r\n\tconfig: Configuration;\r\n\tconstructor(\r\n\t\tpayload: InvoicePayLoad,\r\n\t\tconfig: Configuration = defaultConfig\r\n\t) {\r\n\t\tthis.payload = payload;\r\n\r\n\t\t// Invoice content section.\r\n\t\tthis.company = payload.company;\r\n\t\tthis.customer = payload.customer;\r\n\t\tthis.invoice = payload.invoice;\r\n\t\tthis.items = payload.items;\r\n\t\tthis.qr = payload.qr;\r\n\t\tthis.note = payload.note;\r\n\r\n\t\t// Invoice currency.\r\n\t\tthis.currency = this.invoice.currency || \"$\";\r\n\r\n\t\t// Path.\r\n\t\tthis.path = path.resolve(this.invoice.path) || \"./invoice.pdf\";\r\n\r\n\t\t// Invoice information.\r\n\t\tthis.date = new Date().toLocaleDateString(\"en-US\", {\r\n\t\t\tyear: \"numeric\",\r\n\t\t\tmonth: \"numeric\",\r\n\t\t\tday: \"numeric\",\r\n\t\t});\r\n\r\n\t\t// Configuration.\r\n\t\tthis.config = config;\r\n\t}\r\n\r\n\t/**\r\n\t * Create a PDF invoice.\r\n\t *\r\n\t * @returns {void}\r\n\t * @since 1.0.0\r\n\t */\r\n\tasync create(): Promise {\r\n\t\tconst printer = new invoiceMaker(this.fonts());\r\n\r\n\t\tconst docDefinition = {\r\n\t\t\tpageSize: \"A4\",\r\n\t\t\torientation: \"portrait\",\r\n\t\t\tpageMargins: [40, 40, 40, 40],\r\n\t\t\tinfo: this.meta(),\r\n\t\t\tcontent: this.content(),\r\n\t\t\tdefaultStyle: this.defaultStyle(),\r\n\t\t\tstyles: this.styles(),\r\n\t\t};\r\n\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tconst doc = printer.createPdfKitDocument(docDefinition);\r\n\t\t\tconst stream = fs.createWriteStream(this.path);\r\n\r\n\t\t\tdoc.pipe(stream);\r\n\r\n\t\t\tdoc.on(\"end\", () => {\r\n\t\t\t\tresolve(this.path);\r\n\t\t\t});\r\n\r\n\t\t\tdoc.on(\"error\", (err: any) => {\r\n\t\t\t\treject(err);\r\n\t\t\t});\r\n\r\n\t\t\tdoc.end();\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Fonts.\r\n\t *\r\n\t * @returns {Object} font.\r\n\t * @since 1.0.0\r\n\t */\r\n\tfonts(): any {\r\n\t\tconst fonts = {\r\n\t\t\tHelvetica: {\r\n\t\t\t\tnormal: \"Helvetica\",\r\n\t\t\t\tbold: \"Helvetica-Bold\",\r\n\t\t\t\titalics: \"Helvetica-Oblique\",\r\n\t\t\t\tbolditalics: \"Helvetica-BoldOblique\",\r\n\t\t\t},\r\n\t\t};\r\n\r\n\t\treturn fonts;\r\n\t}\r\n\r\n\t/**\r\n\t * Doc meta.\r\n\t *\r\n\t * @returns {Object} meta.\r\n\t * @since 1.0.0\r\n\t */\r\n\tmeta(): any {\r\n\t\tconst meta = {\r\n\t\t\ttitle: \"Invoice - #\" + this.invoice.number,\r\n\t\t\tauthor: this.company.name,\r\n\t\t\tsubject: \"Invoice - \" + this.customer.name,\r\n\t\t\tkeywords: \"invoice\",\r\n\t\t};\r\n\r\n\t\treturn meta;\r\n\t}\r\n\r\n\t/**\r\n\t * Default invoice styles.\r\n\t *\r\n\t * @returns {Object} defaults.\r\n\t * @since 1.0.0\r\n\t */\r\n\tdefaultStyle(): any {\r\n\t\tconst defaults = {\r\n\t\t\tfontSize: 10,\r\n\t\t\tlineHeight: 1.8,\r\n\t\t\tbold: false,\r\n\t\t\tfont: \"Helvetica\",\r\n\t\t\tcolor: \"#222222\",\r\n\t\t\tcolumnGap: 30,\r\n\t\t};\r\n\t\treturn defaults;\r\n\t}\r\n\r\n\t/**\r\n\t * Invoice styles.\r\n\t *\r\n\t * @returns {Object} defaults.\r\n\t * @since 1.0.0\r\n\t */\r\n\tstyles(): any {\r\n\t\tconst styles = {\r\n\t\t\th1: {\r\n\t\t\t\tfontSize: 18,\r\n\t\t\t\tbold: true,\r\n\t\t\t},\r\n\t\t\th2: {\r\n\t\t\t\tfontSize: 16,\r\n\t\t\t\tbold: true,\r\n\t\t\t},\r\n\t\t\th3: {\r\n\t\t\t\tfontSize: 14,\r\n\t\t\t\tbold: true,\r\n\t\t\t},\r\n\t\t\ttext: {\r\n\t\t\t\tfontSize: 10,\r\n\t\t\t\tbold: false,\r\n\t\t\t},\r\n\t\t\ttextBold: {\r\n\t\t\t\tfontSize: 10,\r\n\t\t\t\tbold: true,\r\n\t\t\t},\r\n\t\t};\r\n\t\treturn styles;\r\n\t}\r\n\r\n\t/**\r\n\t * Return the invoice layout.\r\n\t *\r\n\t * @returns {Object} layout.\r\n\t * @since 1.0.0\r\n\t */\r\n\tcontent(): any {\r\n\t\tconst sections = [];\r\n\r\n\t\t/**\r\n\t\t * Left: Company section.\r\n\t\t * Right: Invoice section.\r\n\t\t *\r\n\t\t * @since 1.0.0\r\n\t\t */\r\n\t\tconst sectionCompany = {\r\n\t\t\tcolumns: [\r\n\t\t\t\t{\r\n\t\t\t\t\twidth: \"70%\",\r\n\t\t\t\t\tstack: [] as any,\r\n\t\t\t\t\tstyle: \"text\",\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\twidth: \"30%\",\r\n\t\t\t\t\tstack: [] as any,\r\n\t\t\t\t\tstyle: \"text\",\r\n\t\t\t\t},\r\n\t\t\t],\r\n\t\t};\r\n\r\n\t\tif (this.company.logo) {\r\n\t\t\tif (!this.company.logo.startsWith(\" 0) {\r\n\t\t\tthis.items.forEach((item) => {\r\n\t\t\t\tconst totalPrice = helper.calcItemTotal(item);\r\n\r\n\t\t\t\tsectionItems.table.body.push([\r\n\t\t\t\t\t`\\n ${item.name}`,\r\n\t\t\t\t\t`\\n ${item.quantity}`,\r\n\t\t\t\t\t`\\n ${this.currency}${item.price}`,\r\n\t\t\t\t\t`\\n ${item.tax || 0}%`,\r\n\t\t\t\t\t`\\n ${this.currency}${totalPrice}`,\r\n\t\t\t\t]);\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tsections.push(sectionItems);\r\n\r\n\t\t/**\r\n\t\t * Right: Total section.\r\n\t\t *\r\n\t\t * @since 1.0.0\r\n\t\t */\r\n\t\tconst sectionTotal = {\r\n\t\t\tmargin: [0, 20, 0, 0],\r\n\t\t\tcolumns: [\r\n\t\t\t\t{\r\n\t\t\t\t\twidth: \"*\",\r\n\t\t\t\t\tstack: [\" \"],\r\n\t\t\t\t\tstyle: \"text\",\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\twidth: 200,\r\n\t\t\t\t\tlineHeight: 1.5,\r\n\t\t\t\t\tstyle: \"textBold\",\r\n\t\t\t\t\ttable: {\r\n\t\t\t\t\t\twidths: [80, \"*\"],\r\n\t\t\t\t\t\theaderRows: 1,\r\n\t\t\t\t\t\tlineHeight: 1.5,\r\n\t\t\t\t\t\tbody: [\r\n\t\t\t\t\t\t\t[\r\n\t\t\t\t\t\t\t\t`\\n ${this.config.label.subTotal}`,\r\n\t\t\t\t\t\t\t\t`\\n ${this.currency}${helper.calcSubTotal(\r\n\t\t\t\t\t\t\t\t\tthis.items\r\n\t\t\t\t\t\t\t\t)}`,\r\n\t\t\t\t\t\t\t],\r\n\t\t\t\t\t\t\t[\r\n\t\t\t\t\t\t\t\t`\\n ${this.config.label.totalTax}`,\r\n\t\t\t\t\t\t\t\t`\\n ${this.currency}${helper.calcTax(\r\n\t\t\t\t\t\t\t\t\tthis.items\r\n\t\t\t\t\t\t\t\t)}`,\r\n\t\t\t\t\t\t\t],\r\n\t\t\t\t\t\t\t[\r\n\t\t\t\t\t\t\t\t`\\n ${this.config.label.total}`,\r\n\t\t\t\t\t\t\t\t`\\n ${this.currency}${helper.calcFinalTotal(\r\n\t\t\t\t\t\t\t\t\tthis.items\r\n\t\t\t\t\t\t\t\t)}`,\r\n\t\t\t\t\t\t\t],\r\n\t\t\t\t\t\t],\r\n\t\t\t\t\t},\r\n\t\t\t\t},\r\n\t\t\t],\r\n\t\t};\r\n\r\n\t\tsections.push(sectionTotal);\r\n\r\n\t\t/**\r\n\t\t * Left: QR section.\r\n\t\t *\r\n\t\t * @since 1.0.0\r\n\t\t */\r\n\t\tif (this.payload.qr) {\r\n\t\t\tconst sectionQR = {\r\n\t\t\t\tmargin: [0, 50, 0, 0],\r\n\t\t\t\tqr: this.payload.qr.data,\r\n\t\t\t\tfit: this.payload.qr.width || \"50\",\r\n\t\t\t};\r\n\r\n\t\t\tsections.push(sectionQR);\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Left: Notes section.\r\n\t\t *\r\n\t\t * @since 1.0.0\r\n\t\t */\r\n\t\tif (this.payload.note) {\r\n\t\t\tconst sectionNote = {\r\n\t\t\t\tmargin: [0, this.payload.qr ? 20 : 50, 0, 0],\r\n\t\t\t\ttext: this.payload.note,\r\n\t\t\t\titalics: true,\r\n\t\t\t};\r\n\r\n\t\t\tsections.push(sectionNote);\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Return the invoice sections.\r\n\t\t *\r\n\t\t * @since 1.0.0\r\n\t\t */\r\n\t\treturn sections;\r\n\t}\r\n}\r\n"]} \ No newline at end of file diff --git a/dist/index.mjs b/dist/index.mjs index 5069798..68c5f3c 100644 --- a/dist/index.mjs +++ b/dist/index.mjs @@ -1,21 +1,21 @@ -var r=(s=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(s,{get:(t,e)=>(typeof require<"u"?require:t)[e]}):s)(function(s){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+s+'" is not supported')});var y=(s,t)=>()=>(t||s((t={exports:{}}).exports,t),t.exports);var m=y((b,u)=>{var p={calcItemTotal:function(s){let t=s.price||0,e=s.quantity||1;return (t*e).toFixed(2)},calcSubTotal:function(s){if(s.length===0)return 0;let t=0;return s.forEach(e=>{t+=Number(this.calcItemTotal(e));}),t.toFixed(2)},calcTax:function(s){if(s.length===0)return 0;let t=0;return s.forEach(e=>{let n=e.price,c=e.quantity,i=e.tax||0;t+=n*c*i/100;}),t.toFixed(2)},calcFinalTotal:function(s){if(s.length===0)return 0;let t=Number(this.calcSubTotal(s)),e=Number(this.calcTax(s));return (t+e).toFixed(2)}};u.exports=p;});var f=r("fs"),d=r("path"),x=r("pdfmake"),a=m(),h=class{payload;company;invoice;customer;items;currency;path;qr;note;date;constructor(t){this.payload=t,this.company=t.company,this.customer=t.customer,this.invoice=t.invoice,this.items=t.items,this.qr=t.qr,this.note=t.note,this.currency=this.invoice.currency||"$",this.path=d.resolve(this.invoice.path)||"./invoice.pdf",this.date=new Date().toLocaleDateString("en-US",{year:"numeric",month:"numeric",day:"numeric"});}async create(){let t=new x(this.fonts()),e={pageSize:"A4",orientation:"portrait",pageMargins:[40,40,40,40],info:this.meta(),content:this.content(),defaultStyle:this.defaultStyle(),styles:this.styles()};return new Promise((n,c)=>{let i=t.createPdfKitDocument(e),o=f.createWriteStream(this.path);i.pipe(o),i.on("end",()=>{n(this.path);}),i.on("error",l=>{c(l);}),i.end();})}fonts(){return {Helvetica:{normal:"Helvetica",bold:"Helvetica-Bold",italics:"Helvetica-Oblique",bolditalics:"Helvetica-BoldOblique"}}}meta(){return {title:"Invoice - #"+this.invoice.number,author:this.company.name,subject:"Invoice - "+this.customer.name,keywords:"invoice"}}defaultStyle(){return {fontSize:10,lineHeight:1.8,bold:!1,font:"Helvetica",color:"#222222",columnGap:30}}styles(){return {h1:{fontSize:18,bold:!0},h2:{fontSize:16,bold:!0},h3:{fontSize:14,bold:!0},text:{fontSize:10,bold:!1},textBold:{fontSize:10,bold:!0}}}content(){let t=[],e={columns:[{width:"70%",stack:[],style:"text"},{width:"30%",stack:[],style:"text"}]};if(this.company.logo){if(!this.company.logo.startsWith("0&&this.items.forEach(o=>{let l=a.calcItemTotal(o);c.table.body.push([` - ${o.name}`,` - ${o.quantity}`,` - ${this.currency}${o.price}`,` - ${o.tax||0}%`,` - ${this.currency}${l}`]);}),t.push(c);let i={margin:[0,20,0,0],columns:[{width:"*",stack:[" "],style:"text"},{width:200,lineHeight:1.5,style:"textBold",table:{widths:[80,"*"],headerRows:1,lineHeight:1.5,body:[[` - Subtotal`,` - ${this.currency}${a.calcSubTotal(this.items)}`],[` - Total Tax`,` - ${this.currency}${a.calcTax(this.items)}`],[` - Total`,` - ${this.currency}${a.calcFinalTotal(this.items)}`]]}}]};if(t.push(i),this.payload.qr){let o={margin:[0,50,0,0],qr:this.payload.qr.data,fit:this.payload.qr.width||"50"};t.push(o);}if(this.payload.note){let o={margin:[0,this.payload.qr?20:50,0,0],text:this.payload.note,italics:!0};t.push(o);}return t}}; +var h=(s=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(s,{get:(t,e)=>(typeof require<"u"?require:t)[e]}):s)(function(s){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+s+'" is not supported')});var f=(s,t)=>()=>(t||s((t={exports:{}}).exports,t),t.exports);var p=f((w,y)=>{var I={calcItemTotal:function(s){let t=s.price||0,e=s.quantity||1;return (t*e).toFixed(2)},calcSubTotal:function(s){if(s.length===0)return 0;let t=0;return s.forEach(e=>{t+=Number(this.calcItemTotal(e));}),t.toFixed(2)},calcTax:function(s){if(s.length===0)return 0;let t=0;return s.forEach(e=>{let a=e.price,c=e.quantity,o=e.tax||0;t+=a*c*o/100;}),t.toFixed(2)},calcFinalTotal:function(s){if(s.length===0)return 0;let t=Number(this.calcSubTotal(s)),e=Number(this.calcTax(s));return (t+e).toFixed(2)}};y.exports=I;});var x=f((C,d)=>{var v={label:{invoice:"I N V O I C E",refNumber:"Ref no: #",date:"Date:",dueDate:"Due Date:",status:"Status:",billTo:"Bill To",item:"Item",quantity:"Qty",price:"Price",tax:"Tax",total:"Total",subTotal:"Subtotal",totalTax:"Total Tax"}};d.exports=v;});var T=h("fs"),k=h("path"),q=h("pdfmake"),l=p(),S=x(),u=class{payload;company;invoice;customer;items;currency;path;qr;note;date;config;constructor(t,e=S){this.payload=t,this.company=t.company,this.customer=t.customer,this.invoice=t.invoice,this.items=t.items,this.qr=t.qr,this.note=t.note,this.currency=this.invoice.currency||"$",this.path=k.resolve(this.invoice.path)||"./invoice.pdf",this.date=new Date().toLocaleDateString("en-US",{year:"numeric",month:"numeric",day:"numeric"}),this.config=e;}async create(){let t=new q(this.fonts()),e={pageSize:"A4",orientation:"portrait",pageMargins:[40,40,40,40],info:this.meta(),content:this.content(),defaultStyle:this.defaultStyle(),styles:this.styles()};return new Promise((a,c)=>{let o=t.createPdfKitDocument(e),r=T.createWriteStream(this.path);o.pipe(r),o.on("end",()=>{a(this.path);}),o.on("error",n=>{c(n);}),o.end();})}fonts(){return {Helvetica:{normal:"Helvetica",bold:"Helvetica-Bold",italics:"Helvetica-Oblique",bolditalics:"Helvetica-BoldOblique"}}}meta(){return {title:"Invoice - #"+this.invoice.number,author:this.company.name,subject:"Invoice - "+this.customer.name,keywords:"invoice"}}defaultStyle(){return {fontSize:10,lineHeight:1.8,bold:!1,font:"Helvetica",color:"#222222",columnGap:30}}styles(){return {h1:{fontSize:18,bold:!0},h2:{fontSize:16,bold:!0},h3:{fontSize:14,bold:!0},text:{fontSize:10,bold:!1},textBold:{fontSize:10,bold:!0}}}content(){let t=[],e={columns:[{width:"70%",stack:[],style:"text"},{width:"30%",stack:[],style:"text"}]};if(this.company.logo){if(!this.company.logo.startsWith("0&&this.items.forEach(i=>{let g=l.calcItemTotal(i);m.table.body.push([` + ${i.name}`,` + ${i.quantity}`,` + ${this.currency}${i.price}`,` + ${i.tax||0}%`,` + ${this.currency}${g}`]);}),t.push(m);let b={margin:[0,20,0,0],columns:[{width:"*",stack:[" "],style:"text"},{width:200,lineHeight:1.5,style:"textBold",table:{widths:[80,"*"],headerRows:1,lineHeight:1.5,body:[[` + ${this.config.label.subTotal}`,` + ${this.currency}${l.calcSubTotal(this.items)}`],[` + ${this.config.label.totalTax}`,` + ${this.currency}${l.calcTax(this.items)}`],[` + ${this.config.label.total}`,` + ${this.currency}${l.calcFinalTotal(this.items)}`]]}}]};if(t.push(b),this.payload.qr){let i={margin:[0,50,0,0],qr:this.payload.qr.data,fit:this.payload.qr.width||"50"};t.push(i);}if(this.payload.note){let i={margin:[0,this.payload.qr?20:50,0,0],text:this.payload.note,italics:!0};t.push(i);}return t}}; -export { h as PDFInvoice }; +export { u as PDFInvoice }; //# sourceMappingURL=out.js.map //# sourceMappingURL=index.mjs.map \ No newline at end of file diff --git a/dist/index.mjs.map b/dist/index.mjs.map index 402462e..caadcc5 100644 --- a/dist/index.mjs.map +++ b/dist/index.mjs.map @@ -1 +1 @@ -{"version":3,"sources":["../src/utils/helper.ts","../src/class/invoice.ts"],"names":["require_helper","__commonJSMin","exports","module","helper","item","price","quantity","items","total","tax","subTotal","fs","path","invoiceMaker","PDFInvoice","payload","printer","docDefinition","resolve","reject","doc","stream","err","sections","sectionCompany","sectionCustomer","sectionItems","totalPrice","sectionTotal","sectionQR","sectionNote"],"mappings":"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","sourcesContent":["import type { ItemInfo } from \"../../global\";\r\n\r\ninterface Helpers {\r\n\tcalcItemTotal(item: ItemInfo): number | string;\r\n\tcalcTax(items: ItemInfo[]): number | string;\r\n\tcalcSubTotal(items: ItemInfo[]): number | string;\r\n\tcalcFinalTotal(items: ItemInfo[]): number | string;\r\n}\r\n\r\nconst helper: Helpers = {\r\n\t/**\r\n\t * Item total price calculation.\r\n\t *\r\n\t * @param {Object} item.\r\n\t * @returns {number} total.\r\n\t * @since 1.0.0\r\n\t */\r\n\tcalcItemTotal: function (item: ItemInfo): string {\r\n\t\tconst price = item.price || 0;\r\n\t\tconst quantity = item.quantity || 1;\r\n\t\treturn (price * quantity).toFixed(2);\r\n\t},\r\n\r\n\t/**\r\n\t * Calculate subtotal.\r\n\t *\r\n\t * @param {Object} items.\r\n\t * @returns {number} total.\r\n\t * @since 1.0.0\r\n\t */\r\n\tcalcSubTotal: function (items: ItemInfo[]): number | string {\r\n\t\tif (items.length === 0) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\tlet total = 0;\r\n\r\n\t\titems.forEach((item) => {\r\n\t\t\ttotal += Number(this.calcItemTotal(item));\r\n\t\t});\r\n\r\n\t\treturn total.toFixed(2);\r\n\t},\r\n\r\n\t/**\r\n\t * Calculate tax.\r\n\t *\r\n\t * @param {Object} items.\r\n\t * @returns {number} total.\r\n\t * @since 1.0.0\r\n\t */\r\n\tcalcTax: function (items: ItemInfo[]): number | string {\r\n\t\tif (items.length === 0) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\tlet total = 0;\r\n\r\n\t\titems.forEach((item) => {\r\n\t\t\tconst price = item.price;\r\n\t\t\tconst quantity = item.quantity;\r\n\t\t\tconst tax = item.tax || 0;\r\n\r\n\t\t\ttotal += (price * quantity * tax) / 100;\r\n\t\t});\r\n\r\n\t\treturn total.toFixed(2);\r\n\t},\r\n\r\n\t/**\r\n\t * Calculate total final price.\r\n\t *\r\n\t * @param {Object} items.\r\n\t * @returns {number} total.\r\n\t * @since 1.0.0\r\n\t */\r\n\tcalcFinalTotal: function (items: ItemInfo[]): number | string {\r\n\t\tif (items.length === 0) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\tconst subTotal = Number(this.calcSubTotal(items));\r\n\t\tconst tax = Number(this.calcTax(items));\r\n\r\n\t\treturn (subTotal + tax).toFixed(2);\r\n\t},\r\n};\r\n\r\nmodule.exports = helper;\r\n","const fs = require(\"fs\");\r\nconst path = require(\"path\");\r\nconst invoiceMaker = require(\"pdfmake\");\r\nconst helper = require(\"../utils/helper\");\r\nimport type {\r\n\tCompanyInfo,\r\n\tCustomerInfo,\r\n\tInvoiceInfo,\r\n\tItemInfo,\r\n\tQRInfo,\r\n\tNotes,\r\n\tInvoicePayLoad,\r\n\tSimplePDFInvoice,\r\n} from \"../../global\";\r\n\r\nexport class PDFInvoice implements SimplePDFInvoice {\r\n\tpayload: InvoicePayLoad;\r\n\tcompany: CompanyInfo;\r\n\tinvoice: InvoiceInfo;\r\n\tcustomer: CustomerInfo;\r\n\titems: ItemInfo[];\r\n\tcurrency: string;\r\n\tpath: string;\r\n\tqr: QRInfo;\r\n\tnote: Notes;\r\n\tdate: string;\r\n\tconstructor(payload: InvoicePayLoad) {\r\n\t\tthis.payload = payload;\r\n\r\n\t\t// Invoice content section.\r\n\t\tthis.company = payload.company;\r\n\t\tthis.customer = payload.customer;\r\n\t\tthis.invoice = payload.invoice;\r\n\t\tthis.items = payload.items;\r\n\t\tthis.qr = payload.qr;\r\n\t\tthis.note = payload.note;\r\n\r\n\t\t// Invoice currency.\r\n\t\tthis.currency = this.invoice.currency || \"$\";\r\n\r\n\t\t// Path.\r\n\t\tthis.path = path.resolve(this.invoice.path) || \"./invoice.pdf\";\r\n\r\n\t\t// Invoice information.\r\n\t\tthis.date = new Date().toLocaleDateString(\"en-US\", {\r\n\t\t\tyear: \"numeric\",\r\n\t\t\tmonth: \"numeric\",\r\n\t\t\tday: \"numeric\",\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Create a PDF invoice.\r\n\t *\r\n\t * @returns {void}\r\n\t * @since 1.0.0\r\n\t */\r\n\tasync create(): Promise {\r\n\t\tconst printer = new invoiceMaker(this.fonts());\r\n\r\n\t\tconst docDefinition = {\r\n\t\t\tpageSize: \"A4\",\r\n\t\t\torientation: \"portrait\",\r\n\t\t\tpageMargins: [40, 40, 40, 40],\r\n\t\t\tinfo: this.meta(),\r\n\t\t\tcontent: this.content(),\r\n\t\t\tdefaultStyle: this.defaultStyle(),\r\n\t\t\tstyles: this.styles(),\r\n\t\t};\r\n\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tconst doc = printer.createPdfKitDocument(docDefinition);\r\n\t\t\tconst stream = fs.createWriteStream(this.path);\r\n\r\n\t\t\tdoc.pipe(stream);\r\n\r\n\t\t\tdoc.on(\"end\", () => {\r\n\t\t\t\tresolve(this.path);\r\n\t\t\t});\r\n\r\n\t\t\tdoc.on(\"error\", (err: any) => {\r\n\t\t\t\treject(err);\r\n\t\t\t});\r\n\r\n\t\t\tdoc.end();\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Fonts.\r\n\t *\r\n\t * @returns {Object} font.\r\n\t * @since 1.0.0\r\n\t */\r\n\tfonts(): any {\r\n\t\tconst fonts = {\r\n\t\t\tHelvetica: {\r\n\t\t\t\tnormal: \"Helvetica\",\r\n\t\t\t\tbold: \"Helvetica-Bold\",\r\n\t\t\t\titalics: \"Helvetica-Oblique\",\r\n\t\t\t\tbolditalics: \"Helvetica-BoldOblique\",\r\n\t\t\t},\r\n\t\t};\r\n\r\n\t\treturn fonts;\r\n\t}\r\n\r\n\t/**\r\n\t * Doc meta.\r\n\t *\r\n\t * @returns {Object} meta.\r\n\t * @since 1.0.0\r\n\t */\r\n\tmeta(): any {\r\n\t\tconst meta = {\r\n\t\t\ttitle: \"Invoice - #\" + this.invoice.number,\r\n\t\t\tauthor: this.company.name,\r\n\t\t\tsubject: \"Invoice - \" + this.customer.name,\r\n\t\t\tkeywords: \"invoice\",\r\n\t\t};\r\n\r\n\t\treturn meta;\r\n\t}\r\n\r\n\t/**\r\n\t * Default invoice styles.\r\n\t *\r\n\t * @returns {Object} defaults.\r\n\t * @since 1.0.0\r\n\t */\r\n\tdefaultStyle(): any {\r\n\t\tconst defaults = {\r\n\t\t\tfontSize: 10,\r\n\t\t\tlineHeight: 1.8,\r\n\t\t\tbold: false,\r\n\t\t\tfont: \"Helvetica\",\r\n\t\t\tcolor: \"#222222\",\r\n\t\t\tcolumnGap: 30,\r\n\t\t};\r\n\t\treturn defaults;\r\n\t}\r\n\r\n\t/**\r\n\t * Invoice styles.\r\n\t *\r\n\t * @returns {Object} defaults.\r\n\t * @since 1.0.0\r\n\t */\r\n\tstyles(): any {\r\n\t\tconst styles = {\r\n\t\t\th1: {\r\n\t\t\t\tfontSize: 18,\r\n\t\t\t\tbold: true,\r\n\t\t\t},\r\n\t\t\th2: {\r\n\t\t\t\tfontSize: 16,\r\n\t\t\t\tbold: true,\r\n\t\t\t},\r\n\t\t\th3: {\r\n\t\t\t\tfontSize: 14,\r\n\t\t\t\tbold: true,\r\n\t\t\t},\r\n\t\t\ttext: {\r\n\t\t\t\tfontSize: 10,\r\n\t\t\t\tbold: false,\r\n\t\t\t},\r\n\t\t\ttextBold: {\r\n\t\t\t\tfontSize: 10,\r\n\t\t\t\tbold: true,\r\n\t\t\t},\r\n\t\t};\r\n\t\treturn styles;\r\n\t}\r\n\r\n\t/**\r\n\t * Return the invoice layout.\r\n\t *\r\n\t * @returns {Object} layout.\r\n\t * @since 1.0.0\r\n\t */\r\n\tcontent(): any {\r\n\t\tconst sections = [];\r\n\r\n\t\t/**\r\n\t\t * Left: Company section.\r\n\t\t * Right: Invoice section.\r\n\t\t *\r\n\t\t * @since 1.0.0\r\n\t\t */\r\n\t\tconst sectionCompany = {\r\n\t\t\tcolumns: [\r\n\t\t\t\t{\r\n\t\t\t\t\twidth: \"70%\",\r\n\t\t\t\t\tstack: [] as any,\r\n\t\t\t\t\tstyle: \"text\",\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\twidth: \"30%\",\r\n\t\t\t\t\tstack: [] as any,\r\n\t\t\t\t\tstyle: \"text\",\r\n\t\t\t\t},\r\n\t\t\t],\r\n\t\t};\r\n\r\n\t\tif (this.company.logo) {\r\n\t\t\tif (!this.company.logo.startsWith(\" 0) {\r\n\t\t\tthis.items.forEach((item) => {\r\n\t\t\t\tconst totalPrice = helper.calcItemTotal(item);\r\n\r\n\t\t\t\tsectionItems.table.body.push([\r\n\t\t\t\t\t`\\n ${item.name}`,\r\n\t\t\t\t\t`\\n ${item.quantity}`,\r\n\t\t\t\t\t`\\n ${this.currency}${item.price}`,\r\n\t\t\t\t\t`\\n ${item.tax || 0}%`,\r\n\t\t\t\t\t`\\n ${this.currency}${totalPrice}`,\r\n\t\t\t\t]);\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tsections.push(sectionItems);\r\n\r\n\t\t/**\r\n\t\t * Right: Total section.\r\n\t\t *\r\n\t\t * @since 1.0.0\r\n\t\t */\r\n\t\tconst sectionTotal = {\r\n\t\t\tmargin: [0, 20, 0, 0],\r\n\t\t\tcolumns: [\r\n\t\t\t\t{\r\n\t\t\t\t\twidth: \"*\",\r\n\t\t\t\t\tstack: [\" \"],\r\n\t\t\t\t\tstyle: \"text\",\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\twidth: 200,\r\n\t\t\t\t\tlineHeight: 1.5,\r\n\t\t\t\t\tstyle: \"textBold\",\r\n\t\t\t\t\ttable: {\r\n\t\t\t\t\t\twidths: [80, \"*\"],\r\n\t\t\t\t\t\theaderRows: 1,\r\n\t\t\t\t\t\tlineHeight: 1.5,\r\n\t\t\t\t\t\tbody: [\r\n\t\t\t\t\t\t\t[\r\n\t\t\t\t\t\t\t\t\"\\n Subtotal\",\r\n\t\t\t\t\t\t\t\t`\\n ${this.currency}${helper.calcSubTotal(\r\n\t\t\t\t\t\t\t\t\tthis.items\r\n\t\t\t\t\t\t\t\t)}`,\r\n\t\t\t\t\t\t\t],\r\n\t\t\t\t\t\t\t[\r\n\t\t\t\t\t\t\t\t\"\\n Total Tax\",\r\n\t\t\t\t\t\t\t\t`\\n ${this.currency}${helper.calcTax(\r\n\t\t\t\t\t\t\t\t\tthis.items\r\n\t\t\t\t\t\t\t\t)}`,\r\n\t\t\t\t\t\t\t],\r\n\t\t\t\t\t\t\t[\r\n\t\t\t\t\t\t\t\t\"\\n Total\",\r\n\t\t\t\t\t\t\t\t`\\n ${this.currency}${helper.calcFinalTotal(\r\n\t\t\t\t\t\t\t\t\tthis.items\r\n\t\t\t\t\t\t\t\t)}`,\r\n\t\t\t\t\t\t\t],\r\n\t\t\t\t\t\t],\r\n\t\t\t\t\t},\r\n\t\t\t\t},\r\n\t\t\t],\r\n\t\t};\r\n\r\n\t\tsections.push(sectionTotal);\r\n\r\n\t\t/**\r\n\t\t * Left: QR section.\r\n\t\t *\r\n\t\t * @since 1.0.0\r\n\t\t */\r\n\t\tif (this.payload.qr) {\r\n\t\t\tconst sectionQR = {\r\n\t\t\t\tmargin: [0, 50, 0, 0],\r\n\t\t\t\tqr: this.payload.qr.data,\r\n\t\t\t\tfit: this.payload.qr.width || \"50\",\r\n\t\t\t};\r\n\r\n\t\t\tsections.push(sectionQR);\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Left: Notes section.\r\n\t\t *\r\n\t\t * @since 1.0.0\r\n\t\t */\r\n\t\tif (this.payload.note) {\r\n\t\t\tconst sectionNote = {\r\n\t\t\t\tmargin: [0, this.payload.qr ? 20 : 50, 0, 0],\r\n\t\t\t\ttext: this.payload.note,\r\n\t\t\t\titalics: true,\r\n\t\t\t};\r\n\r\n\t\t\tsections.push(sectionNote);\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Return the invoice sections.\r\n\t\t *\r\n\t\t * @since 1.0.0\r\n\t\t */\r\n\t\treturn sections;\r\n\t}\r\n}\r\n"]} \ No newline at end of file +{"version":3,"sources":["../src/utils/helper.ts","../src/utils/config.ts","../src/class/invoice.ts"],"names":["require_helper","__commonJSMin","exports","module","helper","item","price","quantity","items","total","tax","subTotal","require_config","defaultConfig","fs","path","invoiceMaker","PDFInvoice","payload","config","printer","docDefinition","resolve","reject","doc","stream","err","sections","sectionCompany","refLabel","dateLabel","dueDateLabel","statusLabel","sectionCustomer","sectionItems","totalPrice","sectionTotal","sectionQR","sectionNote"],"mappings":"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","sourcesContent":["import type { ItemInfo } from \"../../global\";\r\n\r\ninterface Helpers {\r\n\tcalcItemTotal(item: ItemInfo): number | string;\r\n\tcalcTax(items: ItemInfo[]): number | string;\r\n\tcalcSubTotal(items: ItemInfo[]): number | string;\r\n\tcalcFinalTotal(items: ItemInfo[]): number | string;\r\n}\r\n\r\nconst helper: Helpers = {\r\n\t/**\r\n\t * Item total price calculation.\r\n\t *\r\n\t * @param {Object} item.\r\n\t * @returns {number} total.\r\n\t * @since 1.0.0\r\n\t */\r\n\tcalcItemTotal: function (item: ItemInfo): string {\r\n\t\tconst price = item.price || 0;\r\n\t\tconst quantity = item.quantity || 1;\r\n\t\treturn (price * quantity).toFixed(2);\r\n\t},\r\n\r\n\t/**\r\n\t * Calculate subtotal.\r\n\t *\r\n\t * @param {Object} items.\r\n\t * @returns {number} total.\r\n\t * @since 1.0.0\r\n\t */\r\n\tcalcSubTotal: function (items: ItemInfo[]): number | string {\r\n\t\tif (items.length === 0) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\tlet total = 0;\r\n\r\n\t\titems.forEach((item) => {\r\n\t\t\ttotal += Number(this.calcItemTotal(item));\r\n\t\t});\r\n\r\n\t\treturn total.toFixed(2);\r\n\t},\r\n\r\n\t/**\r\n\t * Calculate tax.\r\n\t *\r\n\t * @param {Object} items.\r\n\t * @returns {number} total.\r\n\t * @since 1.0.0\r\n\t */\r\n\tcalcTax: function (items: ItemInfo[]): number | string {\r\n\t\tif (items.length === 0) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\tlet total = 0;\r\n\r\n\t\titems.forEach((item) => {\r\n\t\t\tconst price = item.price;\r\n\t\t\tconst quantity = item.quantity;\r\n\t\t\tconst tax = item.tax || 0;\r\n\r\n\t\t\ttotal += (price * quantity * tax) / 100;\r\n\t\t});\r\n\r\n\t\treturn total.toFixed(2);\r\n\t},\r\n\r\n\t/**\r\n\t * Calculate total final price.\r\n\t *\r\n\t * @param {Object} items.\r\n\t * @returns {number} total.\r\n\t * @since 1.0.0\r\n\t */\r\n\tcalcFinalTotal: function (items: ItemInfo[]): number | string {\r\n\t\tif (items.length === 0) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\tconst subTotal = Number(this.calcSubTotal(items));\r\n\t\tconst tax = Number(this.calcTax(items));\r\n\r\n\t\treturn (subTotal + tax).toFixed(2);\r\n\t},\r\n};\r\n\r\nmodule.exports = helper;\r\n","/**\r\n * Holds the default configuration.\r\n *\r\n * @returns {Object} config.\r\n * @since 1.0.7\r\n */\r\nconst defaultConfig = {\r\n\tlabel: {\r\n\t\tinvoice: \"I N V O I C E\",\r\n\t\trefNumber: \"Ref no: #\",\r\n\t\tdate: \"Date:\",\r\n\t\tdueDate: \"Due Date:\",\r\n\t\tstatus: \"Status:\",\r\n\t\tbillTo: \"Bill To\",\r\n\t\titem: \"Item\",\r\n\t\tquantity: \"Qty\",\r\n\t\tprice: \"Price\",\r\n\t\ttax: \"Tax\",\r\n\t\ttotal: \"Total\",\r\n\t\tsubTotal: \"Subtotal\",\r\n\t\ttotalTax: \"Total Tax\",\r\n\t},\r\n};\r\n\r\nmodule.exports = defaultConfig;\r\n","const fs = require(\"fs\");\r\nconst path = require(\"path\");\r\nconst invoiceMaker = require(\"pdfmake\");\r\nconst helper = require(\"../utils/helper\");\r\nconst defaultConfig = require(\"../utils/config\");\r\n\r\nimport type {\r\n\tCompanyInfo,\r\n\tCustomerInfo,\r\n\tInvoiceInfo,\r\n\tItemInfo,\r\n\tQRInfo,\r\n\tNotes,\r\n\tInvoicePayLoad,\r\n\tSimplePDFInvoice,\r\n\tConfiguration,\r\n} from \"../../global\";\r\n\r\nexport class PDFInvoice implements SimplePDFInvoice {\r\n\tpayload: InvoicePayLoad;\r\n\tcompany: CompanyInfo;\r\n\tinvoice: InvoiceInfo;\r\n\tcustomer: CustomerInfo;\r\n\titems: ItemInfo[];\r\n\tcurrency: string;\r\n\tpath: string;\r\n\tqr: QRInfo;\r\n\tnote: Notes;\r\n\tdate: string;\r\n\tconfig: Configuration;\r\n\tconstructor(\r\n\t\tpayload: InvoicePayLoad,\r\n\t\tconfig: Configuration = defaultConfig\r\n\t) {\r\n\t\tthis.payload = payload;\r\n\r\n\t\t// Invoice content section.\r\n\t\tthis.company = payload.company;\r\n\t\tthis.customer = payload.customer;\r\n\t\tthis.invoice = payload.invoice;\r\n\t\tthis.items = payload.items;\r\n\t\tthis.qr = payload.qr;\r\n\t\tthis.note = payload.note;\r\n\r\n\t\t// Invoice currency.\r\n\t\tthis.currency = this.invoice.currency || \"$\";\r\n\r\n\t\t// Path.\r\n\t\tthis.path = path.resolve(this.invoice.path) || \"./invoice.pdf\";\r\n\r\n\t\t// Invoice information.\r\n\t\tthis.date = new Date().toLocaleDateString(\"en-US\", {\r\n\t\t\tyear: \"numeric\",\r\n\t\t\tmonth: \"numeric\",\r\n\t\t\tday: \"numeric\",\r\n\t\t});\r\n\r\n\t\t// Configuration.\r\n\t\tthis.config = config;\r\n\t}\r\n\r\n\t/**\r\n\t * Create a PDF invoice.\r\n\t *\r\n\t * @returns {void}\r\n\t * @since 1.0.0\r\n\t */\r\n\tasync create(): Promise {\r\n\t\tconst printer = new invoiceMaker(this.fonts());\r\n\r\n\t\tconst docDefinition = {\r\n\t\t\tpageSize: \"A4\",\r\n\t\t\torientation: \"portrait\",\r\n\t\t\tpageMargins: [40, 40, 40, 40],\r\n\t\t\tinfo: this.meta(),\r\n\t\t\tcontent: this.content(),\r\n\t\t\tdefaultStyle: this.defaultStyle(),\r\n\t\t\tstyles: this.styles(),\r\n\t\t};\r\n\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tconst doc = printer.createPdfKitDocument(docDefinition);\r\n\t\t\tconst stream = fs.createWriteStream(this.path);\r\n\r\n\t\t\tdoc.pipe(stream);\r\n\r\n\t\t\tdoc.on(\"end\", () => {\r\n\t\t\t\tresolve(this.path);\r\n\t\t\t});\r\n\r\n\t\t\tdoc.on(\"error\", (err: any) => {\r\n\t\t\t\treject(err);\r\n\t\t\t});\r\n\r\n\t\t\tdoc.end();\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Fonts.\r\n\t *\r\n\t * @returns {Object} font.\r\n\t * @since 1.0.0\r\n\t */\r\n\tfonts(): any {\r\n\t\tconst fonts = {\r\n\t\t\tHelvetica: {\r\n\t\t\t\tnormal: \"Helvetica\",\r\n\t\t\t\tbold: \"Helvetica-Bold\",\r\n\t\t\t\titalics: \"Helvetica-Oblique\",\r\n\t\t\t\tbolditalics: \"Helvetica-BoldOblique\",\r\n\t\t\t},\r\n\t\t};\r\n\r\n\t\treturn fonts;\r\n\t}\r\n\r\n\t/**\r\n\t * Doc meta.\r\n\t *\r\n\t * @returns {Object} meta.\r\n\t * @since 1.0.0\r\n\t */\r\n\tmeta(): any {\r\n\t\tconst meta = {\r\n\t\t\ttitle: \"Invoice - #\" + this.invoice.number,\r\n\t\t\tauthor: this.company.name,\r\n\t\t\tsubject: \"Invoice - \" + this.customer.name,\r\n\t\t\tkeywords: \"invoice\",\r\n\t\t};\r\n\r\n\t\treturn meta;\r\n\t}\r\n\r\n\t/**\r\n\t * Default invoice styles.\r\n\t *\r\n\t * @returns {Object} defaults.\r\n\t * @since 1.0.0\r\n\t */\r\n\tdefaultStyle(): any {\r\n\t\tconst defaults = {\r\n\t\t\tfontSize: 10,\r\n\t\t\tlineHeight: 1.8,\r\n\t\t\tbold: false,\r\n\t\t\tfont: \"Helvetica\",\r\n\t\t\tcolor: \"#222222\",\r\n\t\t\tcolumnGap: 30,\r\n\t\t};\r\n\t\treturn defaults;\r\n\t}\r\n\r\n\t/**\r\n\t * Invoice styles.\r\n\t *\r\n\t * @returns {Object} defaults.\r\n\t * @since 1.0.0\r\n\t */\r\n\tstyles(): any {\r\n\t\tconst styles = {\r\n\t\t\th1: {\r\n\t\t\t\tfontSize: 18,\r\n\t\t\t\tbold: true,\r\n\t\t\t},\r\n\t\t\th2: {\r\n\t\t\t\tfontSize: 16,\r\n\t\t\t\tbold: true,\r\n\t\t\t},\r\n\t\t\th3: {\r\n\t\t\t\tfontSize: 14,\r\n\t\t\t\tbold: true,\r\n\t\t\t},\r\n\t\t\ttext: {\r\n\t\t\t\tfontSize: 10,\r\n\t\t\t\tbold: false,\r\n\t\t\t},\r\n\t\t\ttextBold: {\r\n\t\t\t\tfontSize: 10,\r\n\t\t\t\tbold: true,\r\n\t\t\t},\r\n\t\t};\r\n\t\treturn styles;\r\n\t}\r\n\r\n\t/**\r\n\t * Return the invoice layout.\r\n\t *\r\n\t * @returns {Object} layout.\r\n\t * @since 1.0.0\r\n\t */\r\n\tcontent(): any {\r\n\t\tconst sections = [];\r\n\r\n\t\t/**\r\n\t\t * Left: Company section.\r\n\t\t * Right: Invoice section.\r\n\t\t *\r\n\t\t * @since 1.0.0\r\n\t\t */\r\n\t\tconst sectionCompany = {\r\n\t\t\tcolumns: [\r\n\t\t\t\t{\r\n\t\t\t\t\twidth: \"70%\",\r\n\t\t\t\t\tstack: [] as any,\r\n\t\t\t\t\tstyle: \"text\",\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\twidth: \"30%\",\r\n\t\t\t\t\tstack: [] as any,\r\n\t\t\t\t\tstyle: \"text\",\r\n\t\t\t\t},\r\n\t\t\t],\r\n\t\t};\r\n\r\n\t\tif (this.company.logo) {\r\n\t\t\tif (!this.company.logo.startsWith(\" 0) {\r\n\t\t\tthis.items.forEach((item) => {\r\n\t\t\t\tconst totalPrice = helper.calcItemTotal(item);\r\n\r\n\t\t\t\tsectionItems.table.body.push([\r\n\t\t\t\t\t`\\n ${item.name}`,\r\n\t\t\t\t\t`\\n ${item.quantity}`,\r\n\t\t\t\t\t`\\n ${this.currency}${item.price}`,\r\n\t\t\t\t\t`\\n ${item.tax || 0}%`,\r\n\t\t\t\t\t`\\n ${this.currency}${totalPrice}`,\r\n\t\t\t\t]);\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tsections.push(sectionItems);\r\n\r\n\t\t/**\r\n\t\t * Right: Total section.\r\n\t\t *\r\n\t\t * @since 1.0.0\r\n\t\t */\r\n\t\tconst sectionTotal = {\r\n\t\t\tmargin: [0, 20, 0, 0],\r\n\t\t\tcolumns: [\r\n\t\t\t\t{\r\n\t\t\t\t\twidth: \"*\",\r\n\t\t\t\t\tstack: [\" \"],\r\n\t\t\t\t\tstyle: \"text\",\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\twidth: 200,\r\n\t\t\t\t\tlineHeight: 1.5,\r\n\t\t\t\t\tstyle: \"textBold\",\r\n\t\t\t\t\ttable: {\r\n\t\t\t\t\t\twidths: [80, \"*\"],\r\n\t\t\t\t\t\theaderRows: 1,\r\n\t\t\t\t\t\tlineHeight: 1.5,\r\n\t\t\t\t\t\tbody: [\r\n\t\t\t\t\t\t\t[\r\n\t\t\t\t\t\t\t\t`\\n ${this.config.label.subTotal}`,\r\n\t\t\t\t\t\t\t\t`\\n ${this.currency}${helper.calcSubTotal(\r\n\t\t\t\t\t\t\t\t\tthis.items\r\n\t\t\t\t\t\t\t\t)}`,\r\n\t\t\t\t\t\t\t],\r\n\t\t\t\t\t\t\t[\r\n\t\t\t\t\t\t\t\t`\\n ${this.config.label.totalTax}`,\r\n\t\t\t\t\t\t\t\t`\\n ${this.currency}${helper.calcTax(\r\n\t\t\t\t\t\t\t\t\tthis.items\r\n\t\t\t\t\t\t\t\t)}`,\r\n\t\t\t\t\t\t\t],\r\n\t\t\t\t\t\t\t[\r\n\t\t\t\t\t\t\t\t`\\n ${this.config.label.total}`,\r\n\t\t\t\t\t\t\t\t`\\n ${this.currency}${helper.calcFinalTotal(\r\n\t\t\t\t\t\t\t\t\tthis.items\r\n\t\t\t\t\t\t\t\t)}`,\r\n\t\t\t\t\t\t\t],\r\n\t\t\t\t\t\t],\r\n\t\t\t\t\t},\r\n\t\t\t\t},\r\n\t\t\t],\r\n\t\t};\r\n\r\n\t\tsections.push(sectionTotal);\r\n\r\n\t\t/**\r\n\t\t * Left: QR section.\r\n\t\t *\r\n\t\t * @since 1.0.0\r\n\t\t */\r\n\t\tif (this.payload.qr) {\r\n\t\t\tconst sectionQR = {\r\n\t\t\t\tmargin: [0, 50, 0, 0],\r\n\t\t\t\tqr: this.payload.qr.data,\r\n\t\t\t\tfit: this.payload.qr.width || \"50\",\r\n\t\t\t};\r\n\r\n\t\t\tsections.push(sectionQR);\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Left: Notes section.\r\n\t\t *\r\n\t\t * @since 1.0.0\r\n\t\t */\r\n\t\tif (this.payload.note) {\r\n\t\t\tconst sectionNote = {\r\n\t\t\t\tmargin: [0, this.payload.qr ? 20 : 50, 0, 0],\r\n\t\t\t\ttext: this.payload.note,\r\n\t\t\t\titalics: true,\r\n\t\t\t};\r\n\r\n\t\t\tsections.push(sectionNote);\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Return the invoice sections.\r\n\t\t *\r\n\t\t * @since 1.0.0\r\n\t\t */\r\n\t\treturn sections;\r\n\t}\r\n}\r\n"]} \ No newline at end of file diff --git a/dist/utils/config.d.mts b/dist/utils/config.d.mts new file mode 100644 index 0000000..223e65e --- /dev/null +++ b/dist/utils/config.d.mts @@ -0,0 +1,2 @@ + +export { } diff --git a/dist/utils/config.d.ts b/dist/utils/config.d.ts new file mode 100644 index 0000000..223e65e --- /dev/null +++ b/dist/utils/config.d.ts @@ -0,0 +1,2 @@ + +export { } diff --git a/dist/utils/config.js b/dist/utils/config.js new file mode 100644 index 0000000..0869fa7 --- /dev/null +++ b/dist/utils/config.js @@ -0,0 +1,7 @@ +'use strict'; + +var l=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var i=l((T,a)=>{var o={label:{invoice:"I N V O I C E",refNumber:"Ref no: #",date:"Date:",dueDate:"Due Date:",status:"Status:",billTo:"Bill To",item:"Item",quantity:"Qty",price:"Price",tax:"Tax",total:"Total",subTotal:"Subtotal",totalTax:"Total Tax"}};a.exports=o;});var config = i(); + +module.exports = config; +//# sourceMappingURL=out.js.map +//# sourceMappingURL=config.js.map \ No newline at end of file diff --git a/dist/utils/config.js.map b/dist/utils/config.js.map new file mode 100644 index 0000000..5607e90 --- /dev/null +++ b/dist/utils/config.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["../../src/utils/config.ts"],"names":["require_config","__commonJSMin","exports","module","defaultConfig"],"mappings":"8DAAA,IAAAA,EAAAC,EAAA,CAAAC,EAAAC,IAAA,CAMA,IAAMC,EAAgB,CACrB,MAAO,CACN,QAAS,gBACT,UAAW,YACX,KAAM,QACN,QAAS,YACT,OAAQ,UACR,OAAQ,UACR,KAAM,OACN,SAAU,MACV,MAAO,QACP,IAAK,MACL,MAAO,QACP,SAAU,WACV,SAAU,WACX,CACD,EAEAD,EAAO,QAAUC","sourcesContent":["/**\r\n * Holds the default configuration.\r\n *\r\n * @returns {Object} config.\r\n * @since 1.0.7\r\n */\r\nconst defaultConfig = {\r\n\tlabel: {\r\n\t\tinvoice: \"I N V O I C E\",\r\n\t\trefNumber: \"Ref no: #\",\r\n\t\tdate: \"Date:\",\r\n\t\tdueDate: \"Due Date:\",\r\n\t\tstatus: \"Status:\",\r\n\t\tbillTo: \"Bill To\",\r\n\t\titem: \"Item\",\r\n\t\tquantity: \"Qty\",\r\n\t\tprice: \"Price\",\r\n\t\ttax: \"Tax\",\r\n\t\ttotal: \"Total\",\r\n\t\tsubTotal: \"Subtotal\",\r\n\t\ttotalTax: \"Total Tax\",\r\n\t},\r\n};\r\n\r\nmodule.exports = defaultConfig;\r\n"]} \ No newline at end of file diff --git a/dist/utils/config.mjs b/dist/utils/config.mjs new file mode 100644 index 0000000..473ccdb --- /dev/null +++ b/dist/utils/config.mjs @@ -0,0 +1,5 @@ +var l=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var i=l((T,a)=>{var o={label:{invoice:"I N V O I C E",refNumber:"Ref no: #",date:"Date:",dueDate:"Due Date:",status:"Status:",billTo:"Bill To",item:"Item",quantity:"Qty",price:"Price",tax:"Tax",total:"Total",subTotal:"Subtotal",totalTax:"Total Tax"}};a.exports=o;});var config = i(); + +export { config as default }; +//# sourceMappingURL=out.js.map +//# sourceMappingURL=config.mjs.map \ No newline at end of file diff --git a/dist/utils/config.mjs.map b/dist/utils/config.mjs.map new file mode 100644 index 0000000..5607e90 --- /dev/null +++ b/dist/utils/config.mjs.map @@ -0,0 +1 @@ +{"version":3,"sources":["../../src/utils/config.ts"],"names":["require_config","__commonJSMin","exports","module","defaultConfig"],"mappings":"8DAAA,IAAAA,EAAAC,EAAA,CAAAC,EAAAC,IAAA,CAMA,IAAMC,EAAgB,CACrB,MAAO,CACN,QAAS,gBACT,UAAW,YACX,KAAM,QACN,QAAS,YACT,OAAQ,UACR,OAAQ,UACR,KAAM,OACN,SAAU,MACV,MAAO,QACP,IAAK,MACL,MAAO,QACP,SAAU,WACV,SAAU,WACX,CACD,EAEAD,EAAO,QAAUC","sourcesContent":["/**\r\n * Holds the default configuration.\r\n *\r\n * @returns {Object} config.\r\n * @since 1.0.7\r\n */\r\nconst defaultConfig = {\r\n\tlabel: {\r\n\t\tinvoice: \"I N V O I C E\",\r\n\t\trefNumber: \"Ref no: #\",\r\n\t\tdate: \"Date:\",\r\n\t\tdueDate: \"Due Date:\",\r\n\t\tstatus: \"Status:\",\r\n\t\tbillTo: \"Bill To\",\r\n\t\titem: \"Item\",\r\n\t\tquantity: \"Qty\",\r\n\t\tprice: \"Price\",\r\n\t\ttax: \"Tax\",\r\n\t\ttotal: \"Total\",\r\n\t\tsubTotal: \"Subtotal\",\r\n\t\ttotalTax: \"Total Tax\",\r\n\t},\r\n};\r\n\r\nmodule.exports = defaultConfig;\r\n"]} \ No newline at end of file diff --git a/examples/example.ts b/examples/example.ts index 8418747..0740448 100644 --- a/examples/example.ts +++ b/examples/example.ts @@ -1,6 +1,9 @@ const path = require("path"); const { PDFInvoice } = require("../dist/index"); +/* -------------------------------------------------------------------------- + Payload. + -------------------------------------------------------------------------- */ const payload = { company: { logo: '', @@ -51,12 +54,33 @@ const payload = { note: "Note: This is a system generated invoice. If you have any questions concerning this invoice, contact us at sales@festrolcorp.io. Thank you for your business!", }; +/* -------------------------------------------------------------------------- + Optional: Config + -------------------------------------------------------------------------- */ +const config = { + label: { + invoice: "F A C T U A", + refNumber: "Referencia #", + date: "Fecha", + dueDate: "Fecha de vencimiento", + status: "Estado", + billTo: "Facturar a", + item: "Artículo", + quantity: "Cantidad", + price: "Precio", + tax: "Impuesto", + total: "Total", + subTotal: "Subtotal", + totalTax: "Total Impuesto", + }, +}; + /** * Generate PDF invoice. */ const createPDF = async () => { try { - const invoice = new PDFInvoice(payload); + const invoice = new PDFInvoice(payload, config); const result = await invoice.create(); console.log("✨ [Success] Invoice created : " + result + "\n"); } catch (err) { diff --git a/examples/invoice.pdf b/examples/invoice.pdf index a3fcef2128dc761731bdd526efd2d0f6ce920ab8..b9e8172c4035c7864521c6b25e2d8bbe534b239b 100644 GIT binary patch delta 4051 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 delta 4043 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 OzLq{zQPC840{VYuFpXdU diff --git a/global.d.ts b/global.d.ts index a5bd6c9..97014d1 100644 --- a/global.d.ts +++ b/global.d.ts @@ -58,3 +58,35 @@ export interface SimplePDFInvoice { defaultStyle(): any; styles(): any; } + +export interface Configuration { + string: { + invoice?: string; + refNumber?: string; + date?: string; + dueDate?: string; + status?: string; + billTo?: string; + item?: string; + quantity?: string; + price?: string; + tax?: string; + total?: string; + subTotal?: string; + totalTax?: string; + }; + font: [ + helvetica?: { + normal?: string; + bold?: string; + italics?: string; + bolditalics?: string; + }, + noto?: { + normal?: string; + bold?: string; + italics?: string; + bolditalics?: string; + } + ]; +} diff --git a/src/class/invoice.ts b/src/class/invoice.ts index 61970ff..3445a7e 100644 --- a/src/class/invoice.ts +++ b/src/class/invoice.ts @@ -2,6 +2,8 @@ const fs = require("fs"); const path = require("path"); const invoiceMaker = require("pdfmake"); const helper = require("../utils/helper"); +const defaultConfig = require("../utils/config"); + import type { CompanyInfo, CustomerInfo, @@ -11,6 +13,7 @@ import type { Notes, InvoicePayLoad, SimplePDFInvoice, + Configuration, } from "../../global"; export class PDFInvoice implements SimplePDFInvoice { @@ -24,7 +27,11 @@ export class PDFInvoice implements SimplePDFInvoice { qr: QRInfo; note: Notes; date: string; - constructor(payload: InvoicePayLoad) { + config: Configuration; + constructor( + payload: InvoicePayLoad, + config: Configuration = defaultConfig + ) { this.payload = payload; // Invoice content section. @@ -47,6 +54,9 @@ export class PDFInvoice implements SimplePDFInvoice { month: "numeric", day: "numeric", }); + + // Configuration. + this.config = config; } /** @@ -266,28 +276,36 @@ export class PDFInvoice implements SimplePDFInvoice { }); } else { sectionCompany.columns[1].stack.unshift({ - text: "I N V O I C E", + text: this.config.string.invoice || "I N V O I C E", style: "h1", }); } + const refLabel = this.config.string.refNumber || "Ref no: #"; + sectionCompany.columns[1].stack.push({ - text: `Ref no: #${this.invoice.number || 1}`, + text: refLabel + (this.invoice.number || 1), style: "textBold", }); + const dateLabel = this.config.string.date; + sectionCompany.columns[1].stack.push({ - text: `Date: ${this.invoice.date || this.date}`, + text: dateLabel + " " + (this.invoice.date || this.date), style: "text", }); + const dueDateLabel = this.config.string.dueDate; + sectionCompany.columns[1].stack.push({ - text: `Due Date: ${this.invoice.dueDate || this.date}`, + text: dueDateLabel + " " + (this.invoice.dueDate || this.date), style: "text", }); + const statusLabel = this.config.string.status; + sectionCompany.columns[1].stack.push({ - text: `Status: ${this.invoice.status || "Due to pay!"}`, + text: statusLabel + " " + (this.invoice.status || "Pending!"), style: "textBold", }); @@ -303,7 +321,12 @@ export class PDFInvoice implements SimplePDFInvoice { { width: 300, margin: [0, 30, 0, 0], - stack: [{ text: "Bill To:", style: "h2" }] as any, + stack: [ + { + text: this.config.string.billTo, + style: "h2", + }, + ] as any, style: "text", }, ], @@ -360,14 +383,19 @@ export class PDFInvoice implements SimplePDFInvoice { */ const sectionItems = { margin: [0, 30, 0, 0], - //layout: "lightHorizontalLines", lineHeight: 1.5, table: { widths: [200, 50, "*", 50, "*"], headerRows: 1, lineHeight: 1.5, body: [ - ["\n Item", "\n Qty", "\n Price", "\n TAX", "\n Total"], + [ + `\n ${this.config.string.item}`, + `\n ${this.config.string.quantity}`, + `\n ${this.config.string.price}`, + `\n ${this.config.string.tax}`, + `\n ${this.config.string.total}`, + ], ] as any, }, }; @@ -411,19 +439,19 @@ export class PDFInvoice implements SimplePDFInvoice { lineHeight: 1.5, body: [ [ - "\n Subtotal", + `\n ${this.config.string.subTotal}`, `\n ${this.currency}${helper.calcSubTotal( this.items )}`, ], [ - "\n Total Tax", + `\n ${this.config.string.totalTax}`, `\n ${this.currency}${helper.calcTax( this.items )}`, ], [ - "\n Total", + `\n ${this.config.string.total}`, `\n ${this.currency}${helper.calcFinalTotal( this.items )}`, diff --git a/src/utils/config.ts b/src/utils/config.ts new file mode 100644 index 0000000..c7b0076 --- /dev/null +++ b/src/utils/config.ts @@ -0,0 +1,36 @@ +/** + * Holds the default configuration. + * + * @returns {Object} config. + * @since 1.0.7 + */ +const defaultConfig = { + string: { + invoice: "I N V O I C E", + refNumber: "Ref no: #", + date: "Date:", + dueDate: "Due Date:", + status: "Status:", + billTo: "Bill To", + item: "Item", + quantity: "Qty", + price: "Price", + tax: "Tax", + total: "Total", + subTotal: "Subtotal", + totalTax: "Total Tax", + }, + font: { + helvetica: { + normal: "Helvetica", + bold: "Helvetica-Bold", + italics: "Helvetica-Oblique", + bolditalics: "Helvetica-BoldOblique", + }, + noto: { + + } + }, +}; + +module.exports = defaultConfig; From 91cc8046ae03d0814c3b6fdbf9660a85b12eff67 Mon Sep 17 00:00:00 2001 From: Anuj Subedi Date: Sat, 20 Jan 2024 23:13:57 +0545 Subject: [PATCH 2/5] :bug: Fix field name. - :bug: Fix field name. --- dist/class/invoice.d.mts | 42 ++++++++++++++++++++++++------------- dist/class/invoice.d.ts | 42 ++++++++++++++++++++++++------------- dist/class/invoice.js | 24 ++++++++++----------- dist/class/invoice.js.map | 2 +- dist/class/invoice.mjs | 24 ++++++++++----------- dist/class/invoice.mjs.map | 2 +- dist/index.js | 24 ++++++++++----------- dist/index.js.map | 2 +- dist/index.mjs | 24 ++++++++++----------- dist/index.mjs.map | 2 +- dist/utils/config.js | 2 +- dist/utils/config.js.map | 2 +- dist/utils/config.mjs | 2 +- dist/utils/config.mjs.map | 2 +- examples/example.ts | 4 ++-- examples/invoice.pdf | Bin 11638 -> 11645 bytes src/class/invoice.ts | 10 ++++----- src/utils/config.ts | 6 +++--- 18 files changed, 122 insertions(+), 94 deletions(-) diff --git a/dist/class/invoice.d.mts b/dist/class/invoice.d.mts index 678614f..f7e8577 100644 --- a/dist/class/invoice.d.mts +++ b/dist/class/invoice.d.mts @@ -60,21 +60,35 @@ interface SimplePDFInvoice { } interface Configuration { - label: { - invoice: string; - refNumber: string; - date: string; - dueDate: string; - status: string; - billTo: string; - item: string; - quantity: string; - price: string; - tax: string; - total: string; - subTotal: string; - totalTax: string; + string: { + invoice?: string; + refNumber?: string; + date?: string; + dueDate?: string; + status?: string; + billTo?: string; + item?: string; + quantity?: string; + price?: string; + tax?: string; + total?: string; + subTotal?: string; + totalTax?: string; }; + font: [ + helvetica?: { + normal?: string; + bold?: string; + italics?: string; + bolditalics?: string; + }, + noto?: { + normal?: string; + bold?: string; + italics?: string; + bolditalics?: string; + } + ]; } declare class PDFInvoice implements SimplePDFInvoice { diff --git a/dist/class/invoice.d.ts b/dist/class/invoice.d.ts index 678614f..f7e8577 100644 --- a/dist/class/invoice.d.ts +++ b/dist/class/invoice.d.ts @@ -60,21 +60,35 @@ interface SimplePDFInvoice { } interface Configuration { - label: { - invoice: string; - refNumber: string; - date: string; - dueDate: string; - status: string; - billTo: string; - item: string; - quantity: string; - price: string; - tax: string; - total: string; - subTotal: string; - totalTax: string; + string: { + invoice?: string; + refNumber?: string; + date?: string; + dueDate?: string; + status?: string; + billTo?: string; + item?: string; + quantity?: string; + price?: string; + tax?: string; + total?: string; + subTotal?: string; + totalTax?: string; }; + font: [ + helvetica?: { + normal?: string; + bold?: string; + italics?: string; + bolditalics?: string; + }, + noto?: { + normal?: string; + bold?: string; + italics?: string; + bolditalics?: string; + } + ]; } declare class PDFInvoice implements SimplePDFInvoice { diff --git a/dist/class/invoice.js b/dist/class/invoice.js index 8f17849..9a958b5 100644 --- a/dist/class/invoice.js +++ b/dist/class/invoice.js @@ -1,23 +1,23 @@ 'use strict'; -var h=(s=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(s,{get:(t,e)=>(typeof require<"u"?require:t)[e]}):s)(function(s){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+s+'" is not supported')});var m=(s,t)=>()=>(t||s((t={exports:{}}).exports,t),t.exports);var y=m((w,f)=>{var I={calcItemTotal:function(s){let t=s.price||0,e=s.quantity||1;return (t*e).toFixed(2)},calcSubTotal:function(s){if(s.length===0)return 0;let t=0;return s.forEach(e=>{t+=Number(this.calcItemTotal(e));}),t.toFixed(2)},calcTax:function(s){if(s.length===0)return 0;let t=0;return s.forEach(e=>{let a=e.price,c=e.quantity,o=e.tax||0;t+=a*c*o/100;}),t.toFixed(2)},calcFinalTotal:function(s){if(s.length===0)return 0;let t=Number(this.calcSubTotal(s)),e=Number(this.calcTax(s));return (t+e).toFixed(2)}};f.exports=I;});var d=m((C,p)=>{var v={label:{invoice:"I N V O I C E",refNumber:"Ref no: #",date:"Date:",dueDate:"Due Date:",status:"Status:",billTo:"Bill To",item:"Item",quantity:"Qty",price:"Price",tax:"Tax",total:"Total",subTotal:"Subtotal",totalTax:"Total Tax"}};p.exports=v;});var T=h("fs"),k=h("path"),q=h("pdfmake"),l=y(),S=d(),x=class{payload;company;invoice;customer;items;currency;path;qr;note;date;config;constructor(t,e=S){this.payload=t,this.company=t.company,this.customer=t.customer,this.invoice=t.invoice,this.items=t.items,this.qr=t.qr,this.note=t.note,this.currency=this.invoice.currency||"$",this.path=k.resolve(this.invoice.path)||"./invoice.pdf",this.date=new Date().toLocaleDateString("en-US",{year:"numeric",month:"numeric",day:"numeric"}),this.config=e;}async create(){let t=new q(this.fonts()),e={pageSize:"A4",orientation:"portrait",pageMargins:[40,40,40,40],info:this.meta(),content:this.content(),defaultStyle:this.defaultStyle(),styles:this.styles()};return new Promise((a,c)=>{let o=t.createPdfKitDocument(e),r=T.createWriteStream(this.path);o.pipe(r),o.on("end",()=>{a(this.path);}),o.on("error",n=>{c(n);}),o.end();})}fonts(){return {Helvetica:{normal:"Helvetica",bold:"Helvetica-Bold",italics:"Helvetica-Oblique",bolditalics:"Helvetica-BoldOblique"}}}meta(){return {title:"Invoice - #"+this.invoice.number,author:this.company.name,subject:"Invoice - "+this.customer.name,keywords:"invoice"}}defaultStyle(){return {fontSize:10,lineHeight:1.8,bold:!1,font:"Helvetica",color:"#222222",columnGap:30}}styles(){return {h1:{fontSize:18,bold:!0},h2:{fontSize:16,bold:!0},h3:{fontSize:14,bold:!0},text:{fontSize:10,bold:!1},textBold:{fontSize:10,bold:!0}}}content(){let t=[],e={columns:[{width:"70%",stack:[],style:"text"},{width:"30%",stack:[],style:"text"}]};if(this.company.logo){if(!this.company.logo.startsWith("0&&this.items.forEach(i=>{let g=l.calcItemTotal(i);u.table.body.push([` +var u=(s=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(s,{get:(t,e)=>(typeof require<"u"?require:t)[e]}):s)(function(s){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+s+'" is not supported')});var m=(s,t)=>()=>(t||s((t={exports:{}}).exports,t),t.exports);var y=m((w,f)=>{var I={calcItemTotal:function(s){let t=s.price||0,e=s.quantity||1;return (t*e).toFixed(2)},calcSubTotal:function(s){if(s.length===0)return 0;let t=0;return s.forEach(e=>{t+=Number(this.calcItemTotal(e));}),t.toFixed(2)},calcTax:function(s){if(s.length===0)return 0;let t=0;return s.forEach(e=>{let c=e.price,a=e.quantity,o=e.tax||0;t+=c*a*o/100;}),t.toFixed(2)},calcFinalTotal:function(s){if(s.length===0)return 0;let t=Number(this.calcSubTotal(s)),e=Number(this.calcTax(s));return (t+e).toFixed(2)}};f.exports=I;});var d=m((H,p)=>{var v={string:{invoice:"I N V O I C E",refNumber:"Ref no: #",date:"Date:",dueDate:"Due Date:",status:"Status:",billTo:"Bill To",item:"Item",quantity:"Qty",price:"Price",tax:"Tax",total:"Total",subTotal:"Subtotal",totalTax:"Total Tax"},font:{helvetica:{normal:"Helvetica",bold:"Helvetica-Bold",italics:"Helvetica-Oblique",bolditalics:"Helvetica-BoldOblique"},noto:{}}};p.exports=v;});var T=u("fs"),k=u("path"),q=u("pdfmake"),l=y(),S=d(),g=class{payload;company;invoice;customer;items;currency;path;qr;note;date;config;constructor(t,e=S){this.payload=t,this.company=t.company,this.customer=t.customer,this.invoice=t.invoice,this.items=t.items,this.qr=t.qr,this.note=t.note,this.currency=this.invoice.currency||"$",this.path=k.resolve(this.invoice.path)||"./invoice.pdf",this.date=new Date().toLocaleDateString("en-US",{year:"numeric",month:"numeric",day:"numeric"}),this.config=e;}async create(){let t=new q(this.fonts()),e={pageSize:"A4",orientation:"portrait",pageMargins:[40,40,40,40],info:this.meta(),content:this.content(),defaultStyle:this.defaultStyle(),styles:this.styles()};return new Promise((c,a)=>{let o=t.createPdfKitDocument(e),r=T.createWriteStream(this.path);o.pipe(r),o.on("end",()=>{c(this.path);}),o.on("error",n=>{a(n);}),o.end();})}fonts(){return {Helvetica:{normal:"Helvetica",bold:"Helvetica-Bold",italics:"Helvetica-Oblique",bolditalics:"Helvetica-BoldOblique"}}}meta(){return {title:"Invoice - #"+this.invoice.number,author:this.company.name,subject:"Invoice - "+this.customer.name,keywords:"invoice"}}defaultStyle(){return {fontSize:10,lineHeight:1.8,bold:!1,font:"Helvetica",color:"#222222",columnGap:30}}styles(){return {h1:{fontSize:18,bold:!0},h2:{fontSize:16,bold:!0},h3:{fontSize:14,bold:!0},text:{fontSize:10,bold:!1},textBold:{fontSize:10,bold:!0}}}content(){let t=[],e={columns:[{width:"70%",stack:[],style:"text"},{width:"30%",stack:[],style:"text"}]};if(this.company.logo){if(!this.company.logo.startsWith("0&&this.items.forEach(i=>{let b=l.calcItemTotal(i);h.table.body.push([` ${i.name}`,` ${i.quantity}`,` ${this.currency}${i.price}`,` ${i.tax||0}%`,` - ${this.currency}${g}`]);}),t.push(u);let b={margin:[0,20,0,0],columns:[{width:"*",stack:[" "],style:"text"},{width:200,lineHeight:1.5,style:"textBold",table:{widths:[80,"*"],headerRows:1,lineHeight:1.5,body:[[` - ${this.config.label.subTotal}`,` + ${this.currency}${b}`]);}),t.push(h);let x={margin:[0,20,0,0],columns:[{width:"*",stack:[" "],style:"text"},{width:200,lineHeight:1.5,style:"textBold",table:{widths:[80,"*"],headerRows:1,lineHeight:1.5,body:[[` + ${this.config.string.subTotal}`,` ${this.currency}${l.calcSubTotal(this.items)}`],[` - ${this.config.label.totalTax}`,` + ${this.config.string.totalTax}`,` ${this.currency}${l.calcTax(this.items)}`],[` - ${this.config.label.total}`,` - ${this.currency}${l.calcFinalTotal(this.items)}`]]}}]};if(t.push(b),this.payload.qr){let i={margin:[0,50,0,0],qr:this.payload.qr.data,fit:this.payload.qr.width||"50"};t.push(i);}if(this.payload.note){let i={margin:[0,this.payload.qr?20:50,0,0],text:this.payload.note,italics:!0};t.push(i);}return t}}; + ${this.config.string.total}`,` + ${this.currency}${l.calcFinalTotal(this.items)}`]]}}]};if(t.push(x),this.payload.qr){let i={margin:[0,50,0,0],qr:this.payload.qr.data,fit:this.payload.qr.width||"50"};t.push(i);}if(this.payload.note){let i={margin:[0,this.payload.qr?20:50,0,0],text:this.payload.note,italics:!0};t.push(i);}return t}}; -exports.PDFInvoice = x; +exports.PDFInvoice = g; //# sourceMappingURL=out.js.map //# sourceMappingURL=invoice.js.map \ No newline at end of file diff --git a/dist/class/invoice.js.map b/dist/class/invoice.js.map index d081430..238425b 100644 --- a/dist/class/invoice.js.map +++ b/dist/class/invoice.js.map @@ -1 +1 @@ -{"version":3,"sources":["../../src/utils/helper.ts","../../src/utils/config.ts","../../src/class/invoice.ts"],"names":["require_helper","__commonJSMin","exports","module","helper","item","price","quantity","items","total","tax","subTotal","require_config","defaultConfig","fs","path","invoiceMaker","PDFInvoice","payload","config","printer","docDefinition","resolve","reject","doc","stream","err","sections","sectionCompany","refLabel","dateLabel","dueDateLabel","statusLabel","sectionCustomer","sectionItems","totalPrice","sectionTotal","sectionQR","sectionNote"],"mappings":"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","sourcesContent":["import type { ItemInfo } from \"../../global\";\r\n\r\ninterface Helpers {\r\n\tcalcItemTotal(item: ItemInfo): number | string;\r\n\tcalcTax(items: ItemInfo[]): number | string;\r\n\tcalcSubTotal(items: ItemInfo[]): number | string;\r\n\tcalcFinalTotal(items: ItemInfo[]): number | string;\r\n}\r\n\r\nconst helper: Helpers = {\r\n\t/**\r\n\t * Item total price calculation.\r\n\t *\r\n\t * @param {Object} item.\r\n\t * @returns {number} total.\r\n\t * @since 1.0.0\r\n\t */\r\n\tcalcItemTotal: function (item: ItemInfo): string {\r\n\t\tconst price = item.price || 0;\r\n\t\tconst quantity = item.quantity || 1;\r\n\t\treturn (price * quantity).toFixed(2);\r\n\t},\r\n\r\n\t/**\r\n\t * Calculate subtotal.\r\n\t *\r\n\t * @param {Object} items.\r\n\t * @returns {number} total.\r\n\t * @since 1.0.0\r\n\t */\r\n\tcalcSubTotal: function (items: ItemInfo[]): number | string {\r\n\t\tif (items.length === 0) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\tlet total = 0;\r\n\r\n\t\titems.forEach((item) => {\r\n\t\t\ttotal += Number(this.calcItemTotal(item));\r\n\t\t});\r\n\r\n\t\treturn total.toFixed(2);\r\n\t},\r\n\r\n\t/**\r\n\t * Calculate tax.\r\n\t *\r\n\t * @param {Object} items.\r\n\t * @returns {number} total.\r\n\t * @since 1.0.0\r\n\t */\r\n\tcalcTax: function (items: ItemInfo[]): number | string {\r\n\t\tif (items.length === 0) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\tlet total = 0;\r\n\r\n\t\titems.forEach((item) => {\r\n\t\t\tconst price = item.price;\r\n\t\t\tconst quantity = item.quantity;\r\n\t\t\tconst tax = item.tax || 0;\r\n\r\n\t\t\ttotal += (price * quantity * tax) / 100;\r\n\t\t});\r\n\r\n\t\treturn total.toFixed(2);\r\n\t},\r\n\r\n\t/**\r\n\t * Calculate total final price.\r\n\t *\r\n\t * @param {Object} items.\r\n\t * @returns {number} total.\r\n\t * @since 1.0.0\r\n\t */\r\n\tcalcFinalTotal: function (items: ItemInfo[]): number | string {\r\n\t\tif (items.length === 0) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\tconst subTotal = Number(this.calcSubTotal(items));\r\n\t\tconst tax = Number(this.calcTax(items));\r\n\r\n\t\treturn (subTotal + tax).toFixed(2);\r\n\t},\r\n};\r\n\r\nmodule.exports = helper;\r\n","/**\r\n * Holds the default configuration.\r\n *\r\n * @returns {Object} config.\r\n * @since 1.0.7\r\n */\r\nconst defaultConfig = {\r\n\tlabel: {\r\n\t\tinvoice: \"I N V O I C E\",\r\n\t\trefNumber: \"Ref no: #\",\r\n\t\tdate: \"Date:\",\r\n\t\tdueDate: \"Due Date:\",\r\n\t\tstatus: \"Status:\",\r\n\t\tbillTo: \"Bill To\",\r\n\t\titem: \"Item\",\r\n\t\tquantity: \"Qty\",\r\n\t\tprice: \"Price\",\r\n\t\ttax: \"Tax\",\r\n\t\ttotal: \"Total\",\r\n\t\tsubTotal: \"Subtotal\",\r\n\t\ttotalTax: \"Total Tax\",\r\n\t},\r\n};\r\n\r\nmodule.exports = defaultConfig;\r\n","const fs = require(\"fs\");\r\nconst path = require(\"path\");\r\nconst invoiceMaker = require(\"pdfmake\");\r\nconst helper = require(\"../utils/helper\");\r\nconst defaultConfig = require(\"../utils/config\");\r\n\r\nimport type {\r\n\tCompanyInfo,\r\n\tCustomerInfo,\r\n\tInvoiceInfo,\r\n\tItemInfo,\r\n\tQRInfo,\r\n\tNotes,\r\n\tInvoicePayLoad,\r\n\tSimplePDFInvoice,\r\n\tConfiguration,\r\n} from \"../../global\";\r\n\r\nexport class PDFInvoice implements SimplePDFInvoice {\r\n\tpayload: InvoicePayLoad;\r\n\tcompany: CompanyInfo;\r\n\tinvoice: InvoiceInfo;\r\n\tcustomer: CustomerInfo;\r\n\titems: ItemInfo[];\r\n\tcurrency: string;\r\n\tpath: string;\r\n\tqr: QRInfo;\r\n\tnote: Notes;\r\n\tdate: string;\r\n\tconfig: Configuration;\r\n\tconstructor(\r\n\t\tpayload: InvoicePayLoad,\r\n\t\tconfig: Configuration = defaultConfig\r\n\t) {\r\n\t\tthis.payload = payload;\r\n\r\n\t\t// Invoice content section.\r\n\t\tthis.company = payload.company;\r\n\t\tthis.customer = payload.customer;\r\n\t\tthis.invoice = payload.invoice;\r\n\t\tthis.items = payload.items;\r\n\t\tthis.qr = payload.qr;\r\n\t\tthis.note = payload.note;\r\n\r\n\t\t// Invoice currency.\r\n\t\tthis.currency = this.invoice.currency || \"$\";\r\n\r\n\t\t// Path.\r\n\t\tthis.path = path.resolve(this.invoice.path) || \"./invoice.pdf\";\r\n\r\n\t\t// Invoice information.\r\n\t\tthis.date = new Date().toLocaleDateString(\"en-US\", {\r\n\t\t\tyear: \"numeric\",\r\n\t\t\tmonth: \"numeric\",\r\n\t\t\tday: \"numeric\",\r\n\t\t});\r\n\r\n\t\t// Configuration.\r\n\t\tthis.config = config;\r\n\t}\r\n\r\n\t/**\r\n\t * Create a PDF invoice.\r\n\t *\r\n\t * @returns {void}\r\n\t * @since 1.0.0\r\n\t */\r\n\tasync create(): Promise {\r\n\t\tconst printer = new invoiceMaker(this.fonts());\r\n\r\n\t\tconst docDefinition = {\r\n\t\t\tpageSize: \"A4\",\r\n\t\t\torientation: \"portrait\",\r\n\t\t\tpageMargins: [40, 40, 40, 40],\r\n\t\t\tinfo: this.meta(),\r\n\t\t\tcontent: this.content(),\r\n\t\t\tdefaultStyle: this.defaultStyle(),\r\n\t\t\tstyles: this.styles(),\r\n\t\t};\r\n\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tconst doc = printer.createPdfKitDocument(docDefinition);\r\n\t\t\tconst stream = fs.createWriteStream(this.path);\r\n\r\n\t\t\tdoc.pipe(stream);\r\n\r\n\t\t\tdoc.on(\"end\", () => {\r\n\t\t\t\tresolve(this.path);\r\n\t\t\t});\r\n\r\n\t\t\tdoc.on(\"error\", (err: any) => {\r\n\t\t\t\treject(err);\r\n\t\t\t});\r\n\r\n\t\t\tdoc.end();\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Fonts.\r\n\t *\r\n\t * @returns {Object} font.\r\n\t * @since 1.0.0\r\n\t */\r\n\tfonts(): any {\r\n\t\tconst fonts = {\r\n\t\t\tHelvetica: {\r\n\t\t\t\tnormal: \"Helvetica\",\r\n\t\t\t\tbold: \"Helvetica-Bold\",\r\n\t\t\t\titalics: \"Helvetica-Oblique\",\r\n\t\t\t\tbolditalics: \"Helvetica-BoldOblique\",\r\n\t\t\t},\r\n\t\t};\r\n\r\n\t\treturn fonts;\r\n\t}\r\n\r\n\t/**\r\n\t * Doc meta.\r\n\t *\r\n\t * @returns {Object} meta.\r\n\t * @since 1.0.0\r\n\t */\r\n\tmeta(): any {\r\n\t\tconst meta = {\r\n\t\t\ttitle: \"Invoice - #\" + this.invoice.number,\r\n\t\t\tauthor: this.company.name,\r\n\t\t\tsubject: \"Invoice - \" + this.customer.name,\r\n\t\t\tkeywords: \"invoice\",\r\n\t\t};\r\n\r\n\t\treturn meta;\r\n\t}\r\n\r\n\t/**\r\n\t * Default invoice styles.\r\n\t *\r\n\t * @returns {Object} defaults.\r\n\t * @since 1.0.0\r\n\t */\r\n\tdefaultStyle(): any {\r\n\t\tconst defaults = {\r\n\t\t\tfontSize: 10,\r\n\t\t\tlineHeight: 1.8,\r\n\t\t\tbold: false,\r\n\t\t\tfont: \"Helvetica\",\r\n\t\t\tcolor: \"#222222\",\r\n\t\t\tcolumnGap: 30,\r\n\t\t};\r\n\t\treturn defaults;\r\n\t}\r\n\r\n\t/**\r\n\t * Invoice styles.\r\n\t *\r\n\t * @returns {Object} defaults.\r\n\t * @since 1.0.0\r\n\t */\r\n\tstyles(): any {\r\n\t\tconst styles = {\r\n\t\t\th1: {\r\n\t\t\t\tfontSize: 18,\r\n\t\t\t\tbold: true,\r\n\t\t\t},\r\n\t\t\th2: {\r\n\t\t\t\tfontSize: 16,\r\n\t\t\t\tbold: true,\r\n\t\t\t},\r\n\t\t\th3: {\r\n\t\t\t\tfontSize: 14,\r\n\t\t\t\tbold: true,\r\n\t\t\t},\r\n\t\t\ttext: {\r\n\t\t\t\tfontSize: 10,\r\n\t\t\t\tbold: false,\r\n\t\t\t},\r\n\t\t\ttextBold: {\r\n\t\t\t\tfontSize: 10,\r\n\t\t\t\tbold: true,\r\n\t\t\t},\r\n\t\t};\r\n\t\treturn styles;\r\n\t}\r\n\r\n\t/**\r\n\t * Return the invoice layout.\r\n\t *\r\n\t * @returns {Object} layout.\r\n\t * @since 1.0.0\r\n\t */\r\n\tcontent(): any {\r\n\t\tconst sections = [];\r\n\r\n\t\t/**\r\n\t\t * Left: Company section.\r\n\t\t * Right: Invoice section.\r\n\t\t *\r\n\t\t * @since 1.0.0\r\n\t\t */\r\n\t\tconst sectionCompany = {\r\n\t\t\tcolumns: [\r\n\t\t\t\t{\r\n\t\t\t\t\twidth: \"70%\",\r\n\t\t\t\t\tstack: [] as any,\r\n\t\t\t\t\tstyle: \"text\",\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\twidth: \"30%\",\r\n\t\t\t\t\tstack: [] as any,\r\n\t\t\t\t\tstyle: \"text\",\r\n\t\t\t\t},\r\n\t\t\t],\r\n\t\t};\r\n\r\n\t\tif (this.company.logo) {\r\n\t\t\tif (!this.company.logo.startsWith(\" 0) {\r\n\t\t\tthis.items.forEach((item) => {\r\n\t\t\t\tconst totalPrice = helper.calcItemTotal(item);\r\n\r\n\t\t\t\tsectionItems.table.body.push([\r\n\t\t\t\t\t`\\n ${item.name}`,\r\n\t\t\t\t\t`\\n ${item.quantity}`,\r\n\t\t\t\t\t`\\n ${this.currency}${item.price}`,\r\n\t\t\t\t\t`\\n ${item.tax || 0}%`,\r\n\t\t\t\t\t`\\n ${this.currency}${totalPrice}`,\r\n\t\t\t\t]);\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tsections.push(sectionItems);\r\n\r\n\t\t/**\r\n\t\t * Right: Total section.\r\n\t\t *\r\n\t\t * @since 1.0.0\r\n\t\t */\r\n\t\tconst sectionTotal = {\r\n\t\t\tmargin: [0, 20, 0, 0],\r\n\t\t\tcolumns: [\r\n\t\t\t\t{\r\n\t\t\t\t\twidth: \"*\",\r\n\t\t\t\t\tstack: [\" \"],\r\n\t\t\t\t\tstyle: \"text\",\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\twidth: 200,\r\n\t\t\t\t\tlineHeight: 1.5,\r\n\t\t\t\t\tstyle: \"textBold\",\r\n\t\t\t\t\ttable: {\r\n\t\t\t\t\t\twidths: [80, \"*\"],\r\n\t\t\t\t\t\theaderRows: 1,\r\n\t\t\t\t\t\tlineHeight: 1.5,\r\n\t\t\t\t\t\tbody: [\r\n\t\t\t\t\t\t\t[\r\n\t\t\t\t\t\t\t\t`\\n ${this.config.label.subTotal}`,\r\n\t\t\t\t\t\t\t\t`\\n ${this.currency}${helper.calcSubTotal(\r\n\t\t\t\t\t\t\t\t\tthis.items\r\n\t\t\t\t\t\t\t\t)}`,\r\n\t\t\t\t\t\t\t],\r\n\t\t\t\t\t\t\t[\r\n\t\t\t\t\t\t\t\t`\\n ${this.config.label.totalTax}`,\r\n\t\t\t\t\t\t\t\t`\\n ${this.currency}${helper.calcTax(\r\n\t\t\t\t\t\t\t\t\tthis.items\r\n\t\t\t\t\t\t\t\t)}`,\r\n\t\t\t\t\t\t\t],\r\n\t\t\t\t\t\t\t[\r\n\t\t\t\t\t\t\t\t`\\n ${this.config.label.total}`,\r\n\t\t\t\t\t\t\t\t`\\n ${this.currency}${helper.calcFinalTotal(\r\n\t\t\t\t\t\t\t\t\tthis.items\r\n\t\t\t\t\t\t\t\t)}`,\r\n\t\t\t\t\t\t\t],\r\n\t\t\t\t\t\t],\r\n\t\t\t\t\t},\r\n\t\t\t\t},\r\n\t\t\t],\r\n\t\t};\r\n\r\n\t\tsections.push(sectionTotal);\r\n\r\n\t\t/**\r\n\t\t * Left: QR section.\r\n\t\t *\r\n\t\t * @since 1.0.0\r\n\t\t */\r\n\t\tif (this.payload.qr) {\r\n\t\t\tconst sectionQR = {\r\n\t\t\t\tmargin: [0, 50, 0, 0],\r\n\t\t\t\tqr: this.payload.qr.data,\r\n\t\t\t\tfit: this.payload.qr.width || \"50\",\r\n\t\t\t};\r\n\r\n\t\t\tsections.push(sectionQR);\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Left: Notes section.\r\n\t\t *\r\n\t\t * @since 1.0.0\r\n\t\t */\r\n\t\tif (this.payload.note) {\r\n\t\t\tconst sectionNote = {\r\n\t\t\t\tmargin: [0, this.payload.qr ? 20 : 50, 0, 0],\r\n\t\t\t\ttext: this.payload.note,\r\n\t\t\t\titalics: true,\r\n\t\t\t};\r\n\r\n\t\t\tsections.push(sectionNote);\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Return the invoice sections.\r\n\t\t *\r\n\t\t * @since 1.0.0\r\n\t\t */\r\n\t\treturn sections;\r\n\t}\r\n}\r\n"]} \ No newline at end of file +{"version":3,"sources":["../../src/utils/helper.ts","../../src/utils/config.ts","../../src/class/invoice.ts"],"names":["require_helper","__commonJSMin","exports","module","helper","item","price","quantity","items","total","tax","subTotal","require_config","defaultConfig","fs","path","invoiceMaker","PDFInvoice","payload","config","printer","docDefinition","resolve","reject","doc","stream","err","sections","sectionCompany","refLabel","dateLabel","dueDateLabel","statusLabel","sectionCustomer","sectionItems","totalPrice","sectionTotal","sectionQR","sectionNote"],"mappings":"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","sourcesContent":["import type { ItemInfo } from \"../../global\";\r\n\r\ninterface Helpers {\r\n\tcalcItemTotal(item: ItemInfo): number | string;\r\n\tcalcTax(items: ItemInfo[]): number | string;\r\n\tcalcSubTotal(items: ItemInfo[]): number | string;\r\n\tcalcFinalTotal(items: ItemInfo[]): number | string;\r\n}\r\n\r\nconst helper: Helpers = {\r\n\t/**\r\n\t * Item total price calculation.\r\n\t *\r\n\t * @param {Object} item.\r\n\t * @returns {number} total.\r\n\t * @since 1.0.0\r\n\t */\r\n\tcalcItemTotal: function (item: ItemInfo): string {\r\n\t\tconst price = item.price || 0;\r\n\t\tconst quantity = item.quantity || 1;\r\n\t\treturn (price * quantity).toFixed(2);\r\n\t},\r\n\r\n\t/**\r\n\t * Calculate subtotal.\r\n\t *\r\n\t * @param {Object} items.\r\n\t * @returns {number} total.\r\n\t * @since 1.0.0\r\n\t */\r\n\tcalcSubTotal: function (items: ItemInfo[]): number | string {\r\n\t\tif (items.length === 0) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\tlet total = 0;\r\n\r\n\t\titems.forEach((item) => {\r\n\t\t\ttotal += Number(this.calcItemTotal(item));\r\n\t\t});\r\n\r\n\t\treturn total.toFixed(2);\r\n\t},\r\n\r\n\t/**\r\n\t * Calculate tax.\r\n\t *\r\n\t * @param {Object} items.\r\n\t * @returns {number} total.\r\n\t * @since 1.0.0\r\n\t */\r\n\tcalcTax: function (items: ItemInfo[]): number | string {\r\n\t\tif (items.length === 0) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\tlet total = 0;\r\n\r\n\t\titems.forEach((item) => {\r\n\t\t\tconst price = item.price;\r\n\t\t\tconst quantity = item.quantity;\r\n\t\t\tconst tax = item.tax || 0;\r\n\r\n\t\t\ttotal += (price * quantity * tax) / 100;\r\n\t\t});\r\n\r\n\t\treturn total.toFixed(2);\r\n\t},\r\n\r\n\t/**\r\n\t * Calculate total final price.\r\n\t *\r\n\t * @param {Object} items.\r\n\t * @returns {number} total.\r\n\t * @since 1.0.0\r\n\t */\r\n\tcalcFinalTotal: function (items: ItemInfo[]): number | string {\r\n\t\tif (items.length === 0) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\tconst subTotal = Number(this.calcSubTotal(items));\r\n\t\tconst tax = Number(this.calcTax(items));\r\n\r\n\t\treturn (subTotal + tax).toFixed(2);\r\n\t},\r\n};\r\n\r\nmodule.exports = helper;\r\n","/**\r\n * Holds the default configuration.\r\n *\r\n * @returns {Object} config.\r\n * @since 1.0.7\r\n */\r\nconst defaultConfig = {\r\n\tstring: {\r\n\t\tinvoice: \"I N V O I C E\",\r\n\t\trefNumber: \"Ref no: #\",\r\n\t\tdate: \"Date:\",\r\n\t\tdueDate: \"Due Date:\",\r\n\t\tstatus: \"Status:\",\r\n\t\tbillTo: \"Bill To\",\r\n\t\titem: \"Item\",\r\n\t\tquantity: \"Qty\",\r\n\t\tprice: \"Price\",\r\n\t\ttax: \"Tax\",\r\n\t\ttotal: \"Total\",\r\n\t\tsubTotal: \"Subtotal\",\r\n\t\ttotalTax: \"Total Tax\",\r\n\t},\r\n\tfont: {\r\n\t\thelvetica: {\r\n\t\t\tnormal: \"Helvetica\",\r\n\t\t\tbold: \"Helvetica-Bold\",\r\n\t\t\titalics: \"Helvetica-Oblique\",\r\n\t\t\tbolditalics: \"Helvetica-BoldOblique\",\r\n\t\t},\r\n noto: {\r\n \r\n }\r\n\t},\r\n};\r\n\r\nmodule.exports = defaultConfig;\r\n","const fs = require(\"fs\");\r\nconst path = require(\"path\");\r\nconst invoiceMaker = require(\"pdfmake\");\r\nconst helper = require(\"../utils/helper\");\r\nconst defaultConfig = require(\"../utils/config\");\r\n\r\nimport type {\r\n\tCompanyInfo,\r\n\tCustomerInfo,\r\n\tInvoiceInfo,\r\n\tItemInfo,\r\n\tQRInfo,\r\n\tNotes,\r\n\tInvoicePayLoad,\r\n\tSimplePDFInvoice,\r\n\tConfiguration,\r\n} from \"../../global\";\r\n\r\nexport class PDFInvoice implements SimplePDFInvoice {\r\n\tpayload: InvoicePayLoad;\r\n\tcompany: CompanyInfo;\r\n\tinvoice: InvoiceInfo;\r\n\tcustomer: CustomerInfo;\r\n\titems: ItemInfo[];\r\n\tcurrency: string;\r\n\tpath: string;\r\n\tqr: QRInfo;\r\n\tnote: Notes;\r\n\tdate: string;\r\n\tconfig: Configuration;\r\n\tconstructor(\r\n\t\tpayload: InvoicePayLoad,\r\n\t\tconfig: Configuration = defaultConfig\r\n\t) {\r\n\t\tthis.payload = payload;\r\n\r\n\t\t// Invoice content section.\r\n\t\tthis.company = payload.company;\r\n\t\tthis.customer = payload.customer;\r\n\t\tthis.invoice = payload.invoice;\r\n\t\tthis.items = payload.items;\r\n\t\tthis.qr = payload.qr;\r\n\t\tthis.note = payload.note;\r\n\r\n\t\t// Invoice currency.\r\n\t\tthis.currency = this.invoice.currency || \"$\";\r\n\r\n\t\t// Path.\r\n\t\tthis.path = path.resolve(this.invoice.path) || \"./invoice.pdf\";\r\n\r\n\t\t// Invoice information.\r\n\t\tthis.date = new Date().toLocaleDateString(\"en-US\", {\r\n\t\t\tyear: \"numeric\",\r\n\t\t\tmonth: \"numeric\",\r\n\t\t\tday: \"numeric\",\r\n\t\t});\r\n\r\n\t\t// Configuration.\r\n\t\tthis.config = config;\r\n\t}\r\n\r\n\t/**\r\n\t * Create a PDF invoice.\r\n\t *\r\n\t * @returns {void}\r\n\t * @since 1.0.0\r\n\t */\r\n\tasync create(): Promise {\r\n\t\tconst printer = new invoiceMaker(this.fonts());\r\n\r\n\t\tconst docDefinition = {\r\n\t\t\tpageSize: \"A4\",\r\n\t\t\torientation: \"portrait\",\r\n\t\t\tpageMargins: [40, 40, 40, 40],\r\n\t\t\tinfo: this.meta(),\r\n\t\t\tcontent: this.content(),\r\n\t\t\tdefaultStyle: this.defaultStyle(),\r\n\t\t\tstyles: this.styles(),\r\n\t\t};\r\n\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tconst doc = printer.createPdfKitDocument(docDefinition);\r\n\t\t\tconst stream = fs.createWriteStream(this.path);\r\n\r\n\t\t\tdoc.pipe(stream);\r\n\r\n\t\t\tdoc.on(\"end\", () => {\r\n\t\t\t\tresolve(this.path);\r\n\t\t\t});\r\n\r\n\t\t\tdoc.on(\"error\", (err: any) => {\r\n\t\t\t\treject(err);\r\n\t\t\t});\r\n\r\n\t\t\tdoc.end();\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Fonts.\r\n\t *\r\n\t * @returns {Object} font.\r\n\t * @since 1.0.0\r\n\t */\r\n\tfonts(): any {\r\n\t\tconst fonts = {\r\n\t\t\tHelvetica: {\r\n\t\t\t\tnormal: \"Helvetica\",\r\n\t\t\t\tbold: \"Helvetica-Bold\",\r\n\t\t\t\titalics: \"Helvetica-Oblique\",\r\n\t\t\t\tbolditalics: \"Helvetica-BoldOblique\",\r\n\t\t\t},\r\n\t\t};\r\n\r\n\t\treturn fonts;\r\n\t}\r\n\r\n\t/**\r\n\t * Doc meta.\r\n\t *\r\n\t * @returns {Object} meta.\r\n\t * @since 1.0.0\r\n\t */\r\n\tmeta(): any {\r\n\t\tconst meta = {\r\n\t\t\ttitle: \"Invoice - #\" + this.invoice.number,\r\n\t\t\tauthor: this.company.name,\r\n\t\t\tsubject: \"Invoice - \" + this.customer.name,\r\n\t\t\tkeywords: \"invoice\",\r\n\t\t};\r\n\r\n\t\treturn meta;\r\n\t}\r\n\r\n\t/**\r\n\t * Default invoice styles.\r\n\t *\r\n\t * @returns {Object} defaults.\r\n\t * @since 1.0.0\r\n\t */\r\n\tdefaultStyle(): any {\r\n\t\tconst defaults = {\r\n\t\t\tfontSize: 10,\r\n\t\t\tlineHeight: 1.8,\r\n\t\t\tbold: false,\r\n\t\t\tfont: \"Helvetica\",\r\n\t\t\tcolor: \"#222222\",\r\n\t\t\tcolumnGap: 30,\r\n\t\t};\r\n\t\treturn defaults;\r\n\t}\r\n\r\n\t/**\r\n\t * Invoice styles.\r\n\t *\r\n\t * @returns {Object} defaults.\r\n\t * @since 1.0.0\r\n\t */\r\n\tstyles(): any {\r\n\t\tconst styles = {\r\n\t\t\th1: {\r\n\t\t\t\tfontSize: 18,\r\n\t\t\t\tbold: true,\r\n\t\t\t},\r\n\t\t\th2: {\r\n\t\t\t\tfontSize: 16,\r\n\t\t\t\tbold: true,\r\n\t\t\t},\r\n\t\t\th3: {\r\n\t\t\t\tfontSize: 14,\r\n\t\t\t\tbold: true,\r\n\t\t\t},\r\n\t\t\ttext: {\r\n\t\t\t\tfontSize: 10,\r\n\t\t\t\tbold: false,\r\n\t\t\t},\r\n\t\t\ttextBold: {\r\n\t\t\t\tfontSize: 10,\r\n\t\t\t\tbold: true,\r\n\t\t\t},\r\n\t\t};\r\n\t\treturn styles;\r\n\t}\r\n\r\n\t/**\r\n\t * Return the invoice layout.\r\n\t *\r\n\t * @returns {Object} layout.\r\n\t * @since 1.0.0\r\n\t */\r\n\tcontent(): any {\r\n\t\tconst sections = [];\r\n\r\n\t\t/**\r\n\t\t * Left: Company section.\r\n\t\t * Right: Invoice section.\r\n\t\t *\r\n\t\t * @since 1.0.0\r\n\t\t */\r\n\t\tconst sectionCompany = {\r\n\t\t\tcolumns: [\r\n\t\t\t\t{\r\n\t\t\t\t\twidth: \"70%\",\r\n\t\t\t\t\tstack: [] as any,\r\n\t\t\t\t\tstyle: \"text\",\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\twidth: \"30%\",\r\n\t\t\t\t\tstack: [] as any,\r\n\t\t\t\t\tstyle: \"text\",\r\n\t\t\t\t},\r\n\t\t\t],\r\n\t\t};\r\n\r\n\t\tif (this.company.logo) {\r\n\t\t\tif (!this.company.logo.startsWith(\" 0) {\r\n\t\t\tthis.items.forEach((item) => {\r\n\t\t\t\tconst totalPrice = helper.calcItemTotal(item);\r\n\r\n\t\t\t\tsectionItems.table.body.push([\r\n\t\t\t\t\t`\\n ${item.name}`,\r\n\t\t\t\t\t`\\n ${item.quantity}`,\r\n\t\t\t\t\t`\\n ${this.currency}${item.price}`,\r\n\t\t\t\t\t`\\n ${item.tax || 0}%`,\r\n\t\t\t\t\t`\\n ${this.currency}${totalPrice}`,\r\n\t\t\t\t]);\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tsections.push(sectionItems);\r\n\r\n\t\t/**\r\n\t\t * Right: Total section.\r\n\t\t *\r\n\t\t * @since 1.0.0\r\n\t\t */\r\n\t\tconst sectionTotal = {\r\n\t\t\tmargin: [0, 20, 0, 0],\r\n\t\t\tcolumns: [\r\n\t\t\t\t{\r\n\t\t\t\t\twidth: \"*\",\r\n\t\t\t\t\tstack: [\" \"],\r\n\t\t\t\t\tstyle: \"text\",\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\twidth: 200,\r\n\t\t\t\t\tlineHeight: 1.5,\r\n\t\t\t\t\tstyle: \"textBold\",\r\n\t\t\t\t\ttable: {\r\n\t\t\t\t\t\twidths: [80, \"*\"],\r\n\t\t\t\t\t\theaderRows: 1,\r\n\t\t\t\t\t\tlineHeight: 1.5,\r\n\t\t\t\t\t\tbody: [\r\n\t\t\t\t\t\t\t[\r\n\t\t\t\t\t\t\t\t`\\n ${this.config.string.subTotal}`,\r\n\t\t\t\t\t\t\t\t`\\n ${this.currency}${helper.calcSubTotal(\r\n\t\t\t\t\t\t\t\t\tthis.items\r\n\t\t\t\t\t\t\t\t)}`,\r\n\t\t\t\t\t\t\t],\r\n\t\t\t\t\t\t\t[\r\n\t\t\t\t\t\t\t\t`\\n ${this.config.string.totalTax}`,\r\n\t\t\t\t\t\t\t\t`\\n ${this.currency}${helper.calcTax(\r\n\t\t\t\t\t\t\t\t\tthis.items\r\n\t\t\t\t\t\t\t\t)}`,\r\n\t\t\t\t\t\t\t],\r\n\t\t\t\t\t\t\t[\r\n\t\t\t\t\t\t\t\t`\\n ${this.config.string.total}`,\r\n\t\t\t\t\t\t\t\t`\\n ${this.currency}${helper.calcFinalTotal(\r\n\t\t\t\t\t\t\t\t\tthis.items\r\n\t\t\t\t\t\t\t\t)}`,\r\n\t\t\t\t\t\t\t],\r\n\t\t\t\t\t\t],\r\n\t\t\t\t\t},\r\n\t\t\t\t},\r\n\t\t\t],\r\n\t\t};\r\n\r\n\t\tsections.push(sectionTotal);\r\n\r\n\t\t/**\r\n\t\t * Left: QR section.\r\n\t\t *\r\n\t\t * @since 1.0.0\r\n\t\t */\r\n\t\tif (this.payload.qr) {\r\n\t\t\tconst sectionQR = {\r\n\t\t\t\tmargin: [0, 50, 0, 0],\r\n\t\t\t\tqr: this.payload.qr.data,\r\n\t\t\t\tfit: this.payload.qr.width || \"50\",\r\n\t\t\t};\r\n\r\n\t\t\tsections.push(sectionQR);\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Left: Notes section.\r\n\t\t *\r\n\t\t * @since 1.0.0\r\n\t\t */\r\n\t\tif (this.payload.note) {\r\n\t\t\tconst sectionNote = {\r\n\t\t\t\tmargin: [0, this.payload.qr ? 20 : 50, 0, 0],\r\n\t\t\t\ttext: this.payload.note,\r\n\t\t\t\titalics: true,\r\n\t\t\t};\r\n\r\n\t\t\tsections.push(sectionNote);\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Return the invoice sections.\r\n\t\t *\r\n\t\t * @since 1.0.0\r\n\t\t */\r\n\t\treturn sections;\r\n\t}\r\n}\r\n"]} \ No newline at end of file diff --git a/dist/class/invoice.mjs b/dist/class/invoice.mjs index 90c8cff..c66fc7f 100644 --- a/dist/class/invoice.mjs +++ b/dist/class/invoice.mjs @@ -1,21 +1,21 @@ -var h=(s=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(s,{get:(t,e)=>(typeof require<"u"?require:t)[e]}):s)(function(s){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+s+'" is not supported')});var m=(s,t)=>()=>(t||s((t={exports:{}}).exports,t),t.exports);var y=m((w,f)=>{var I={calcItemTotal:function(s){let t=s.price||0,e=s.quantity||1;return (t*e).toFixed(2)},calcSubTotal:function(s){if(s.length===0)return 0;let t=0;return s.forEach(e=>{t+=Number(this.calcItemTotal(e));}),t.toFixed(2)},calcTax:function(s){if(s.length===0)return 0;let t=0;return s.forEach(e=>{let a=e.price,c=e.quantity,o=e.tax||0;t+=a*c*o/100;}),t.toFixed(2)},calcFinalTotal:function(s){if(s.length===0)return 0;let t=Number(this.calcSubTotal(s)),e=Number(this.calcTax(s));return (t+e).toFixed(2)}};f.exports=I;});var d=m((C,p)=>{var v={label:{invoice:"I N V O I C E",refNumber:"Ref no: #",date:"Date:",dueDate:"Due Date:",status:"Status:",billTo:"Bill To",item:"Item",quantity:"Qty",price:"Price",tax:"Tax",total:"Total",subTotal:"Subtotal",totalTax:"Total Tax"}};p.exports=v;});var T=h("fs"),k=h("path"),q=h("pdfmake"),l=y(),S=d(),x=class{payload;company;invoice;customer;items;currency;path;qr;note;date;config;constructor(t,e=S){this.payload=t,this.company=t.company,this.customer=t.customer,this.invoice=t.invoice,this.items=t.items,this.qr=t.qr,this.note=t.note,this.currency=this.invoice.currency||"$",this.path=k.resolve(this.invoice.path)||"./invoice.pdf",this.date=new Date().toLocaleDateString("en-US",{year:"numeric",month:"numeric",day:"numeric"}),this.config=e;}async create(){let t=new q(this.fonts()),e={pageSize:"A4",orientation:"portrait",pageMargins:[40,40,40,40],info:this.meta(),content:this.content(),defaultStyle:this.defaultStyle(),styles:this.styles()};return new Promise((a,c)=>{let o=t.createPdfKitDocument(e),r=T.createWriteStream(this.path);o.pipe(r),o.on("end",()=>{a(this.path);}),o.on("error",n=>{c(n);}),o.end();})}fonts(){return {Helvetica:{normal:"Helvetica",bold:"Helvetica-Bold",italics:"Helvetica-Oblique",bolditalics:"Helvetica-BoldOblique"}}}meta(){return {title:"Invoice - #"+this.invoice.number,author:this.company.name,subject:"Invoice - "+this.customer.name,keywords:"invoice"}}defaultStyle(){return {fontSize:10,lineHeight:1.8,bold:!1,font:"Helvetica",color:"#222222",columnGap:30}}styles(){return {h1:{fontSize:18,bold:!0},h2:{fontSize:16,bold:!0},h3:{fontSize:14,bold:!0},text:{fontSize:10,bold:!1},textBold:{fontSize:10,bold:!0}}}content(){let t=[],e={columns:[{width:"70%",stack:[],style:"text"},{width:"30%",stack:[],style:"text"}]};if(this.company.logo){if(!this.company.logo.startsWith("0&&this.items.forEach(i=>{let g=l.calcItemTotal(i);u.table.body.push([` +var u=(s=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(s,{get:(t,e)=>(typeof require<"u"?require:t)[e]}):s)(function(s){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+s+'" is not supported')});var m=(s,t)=>()=>(t||s((t={exports:{}}).exports,t),t.exports);var y=m((w,f)=>{var I={calcItemTotal:function(s){let t=s.price||0,e=s.quantity||1;return (t*e).toFixed(2)},calcSubTotal:function(s){if(s.length===0)return 0;let t=0;return s.forEach(e=>{t+=Number(this.calcItemTotal(e));}),t.toFixed(2)},calcTax:function(s){if(s.length===0)return 0;let t=0;return s.forEach(e=>{let c=e.price,a=e.quantity,o=e.tax||0;t+=c*a*o/100;}),t.toFixed(2)},calcFinalTotal:function(s){if(s.length===0)return 0;let t=Number(this.calcSubTotal(s)),e=Number(this.calcTax(s));return (t+e).toFixed(2)}};f.exports=I;});var d=m((H,p)=>{var v={string:{invoice:"I N V O I C E",refNumber:"Ref no: #",date:"Date:",dueDate:"Due Date:",status:"Status:",billTo:"Bill To",item:"Item",quantity:"Qty",price:"Price",tax:"Tax",total:"Total",subTotal:"Subtotal",totalTax:"Total Tax"},font:{helvetica:{normal:"Helvetica",bold:"Helvetica-Bold",italics:"Helvetica-Oblique",bolditalics:"Helvetica-BoldOblique"},noto:{}}};p.exports=v;});var T=u("fs"),k=u("path"),q=u("pdfmake"),l=y(),S=d(),g=class{payload;company;invoice;customer;items;currency;path;qr;note;date;config;constructor(t,e=S){this.payload=t,this.company=t.company,this.customer=t.customer,this.invoice=t.invoice,this.items=t.items,this.qr=t.qr,this.note=t.note,this.currency=this.invoice.currency||"$",this.path=k.resolve(this.invoice.path)||"./invoice.pdf",this.date=new Date().toLocaleDateString("en-US",{year:"numeric",month:"numeric",day:"numeric"}),this.config=e;}async create(){let t=new q(this.fonts()),e={pageSize:"A4",orientation:"portrait",pageMargins:[40,40,40,40],info:this.meta(),content:this.content(),defaultStyle:this.defaultStyle(),styles:this.styles()};return new Promise((c,a)=>{let o=t.createPdfKitDocument(e),r=T.createWriteStream(this.path);o.pipe(r),o.on("end",()=>{c(this.path);}),o.on("error",n=>{a(n);}),o.end();})}fonts(){return {Helvetica:{normal:"Helvetica",bold:"Helvetica-Bold",italics:"Helvetica-Oblique",bolditalics:"Helvetica-BoldOblique"}}}meta(){return {title:"Invoice - #"+this.invoice.number,author:this.company.name,subject:"Invoice - "+this.customer.name,keywords:"invoice"}}defaultStyle(){return {fontSize:10,lineHeight:1.8,bold:!1,font:"Helvetica",color:"#222222",columnGap:30}}styles(){return {h1:{fontSize:18,bold:!0},h2:{fontSize:16,bold:!0},h3:{fontSize:14,bold:!0},text:{fontSize:10,bold:!1},textBold:{fontSize:10,bold:!0}}}content(){let t=[],e={columns:[{width:"70%",stack:[],style:"text"},{width:"30%",stack:[],style:"text"}]};if(this.company.logo){if(!this.company.logo.startsWith("0&&this.items.forEach(i=>{let b=l.calcItemTotal(i);h.table.body.push([` ${i.name}`,` ${i.quantity}`,` ${this.currency}${i.price}`,` ${i.tax||0}%`,` - ${this.currency}${g}`]);}),t.push(u);let b={margin:[0,20,0,0],columns:[{width:"*",stack:[" "],style:"text"},{width:200,lineHeight:1.5,style:"textBold",table:{widths:[80,"*"],headerRows:1,lineHeight:1.5,body:[[` - ${this.config.label.subTotal}`,` + ${this.currency}${b}`]);}),t.push(h);let x={margin:[0,20,0,0],columns:[{width:"*",stack:[" "],style:"text"},{width:200,lineHeight:1.5,style:"textBold",table:{widths:[80,"*"],headerRows:1,lineHeight:1.5,body:[[` + ${this.config.string.subTotal}`,` ${this.currency}${l.calcSubTotal(this.items)}`],[` - ${this.config.label.totalTax}`,` + ${this.config.string.totalTax}`,` ${this.currency}${l.calcTax(this.items)}`],[` - ${this.config.label.total}`,` - ${this.currency}${l.calcFinalTotal(this.items)}`]]}}]};if(t.push(b),this.payload.qr){let i={margin:[0,50,0,0],qr:this.payload.qr.data,fit:this.payload.qr.width||"50"};t.push(i);}if(this.payload.note){let i={margin:[0,this.payload.qr?20:50,0,0],text:this.payload.note,italics:!0};t.push(i);}return t}}; + ${this.config.string.total}`,` + ${this.currency}${l.calcFinalTotal(this.items)}`]]}}]};if(t.push(x),this.payload.qr){let i={margin:[0,50,0,0],qr:this.payload.qr.data,fit:this.payload.qr.width||"50"};t.push(i);}if(this.payload.note){let i={margin:[0,this.payload.qr?20:50,0,0],text:this.payload.note,italics:!0};t.push(i);}return t}}; -export { x as PDFInvoice }; +export { g as PDFInvoice }; //# sourceMappingURL=out.js.map //# sourceMappingURL=invoice.mjs.map \ No newline at end of file diff --git a/dist/class/invoice.mjs.map b/dist/class/invoice.mjs.map index d081430..238425b 100644 --- a/dist/class/invoice.mjs.map +++ b/dist/class/invoice.mjs.map @@ -1 +1 @@ -{"version":3,"sources":["../../src/utils/helper.ts","../../src/utils/config.ts","../../src/class/invoice.ts"],"names":["require_helper","__commonJSMin","exports","module","helper","item","price","quantity","items","total","tax","subTotal","require_config","defaultConfig","fs","path","invoiceMaker","PDFInvoice","payload","config","printer","docDefinition","resolve","reject","doc","stream","err","sections","sectionCompany","refLabel","dateLabel","dueDateLabel","statusLabel","sectionCustomer","sectionItems","totalPrice","sectionTotal","sectionQR","sectionNote"],"mappings":"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","sourcesContent":["import type { ItemInfo } from \"../../global\";\r\n\r\ninterface Helpers {\r\n\tcalcItemTotal(item: ItemInfo): number | string;\r\n\tcalcTax(items: ItemInfo[]): number | string;\r\n\tcalcSubTotal(items: ItemInfo[]): number | string;\r\n\tcalcFinalTotal(items: ItemInfo[]): number | string;\r\n}\r\n\r\nconst helper: Helpers = {\r\n\t/**\r\n\t * Item total price calculation.\r\n\t *\r\n\t * @param {Object} item.\r\n\t * @returns {number} total.\r\n\t * @since 1.0.0\r\n\t */\r\n\tcalcItemTotal: function (item: ItemInfo): string {\r\n\t\tconst price = item.price || 0;\r\n\t\tconst quantity = item.quantity || 1;\r\n\t\treturn (price * quantity).toFixed(2);\r\n\t},\r\n\r\n\t/**\r\n\t * Calculate subtotal.\r\n\t *\r\n\t * @param {Object} items.\r\n\t * @returns {number} total.\r\n\t * @since 1.0.0\r\n\t */\r\n\tcalcSubTotal: function (items: ItemInfo[]): number | string {\r\n\t\tif (items.length === 0) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\tlet total = 0;\r\n\r\n\t\titems.forEach((item) => {\r\n\t\t\ttotal += Number(this.calcItemTotal(item));\r\n\t\t});\r\n\r\n\t\treturn total.toFixed(2);\r\n\t},\r\n\r\n\t/**\r\n\t * Calculate tax.\r\n\t *\r\n\t * @param {Object} items.\r\n\t * @returns {number} total.\r\n\t * @since 1.0.0\r\n\t */\r\n\tcalcTax: function (items: ItemInfo[]): number | string {\r\n\t\tif (items.length === 0) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\tlet total = 0;\r\n\r\n\t\titems.forEach((item) => {\r\n\t\t\tconst price = item.price;\r\n\t\t\tconst quantity = item.quantity;\r\n\t\t\tconst tax = item.tax || 0;\r\n\r\n\t\t\ttotal += (price * quantity * tax) / 100;\r\n\t\t});\r\n\r\n\t\treturn total.toFixed(2);\r\n\t},\r\n\r\n\t/**\r\n\t * Calculate total final price.\r\n\t *\r\n\t * @param {Object} items.\r\n\t * @returns {number} total.\r\n\t * @since 1.0.0\r\n\t */\r\n\tcalcFinalTotal: function (items: ItemInfo[]): number | string {\r\n\t\tif (items.length === 0) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\tconst subTotal = Number(this.calcSubTotal(items));\r\n\t\tconst tax = Number(this.calcTax(items));\r\n\r\n\t\treturn (subTotal + tax).toFixed(2);\r\n\t},\r\n};\r\n\r\nmodule.exports = helper;\r\n","/**\r\n * Holds the default configuration.\r\n *\r\n * @returns {Object} config.\r\n * @since 1.0.7\r\n */\r\nconst defaultConfig = {\r\n\tlabel: {\r\n\t\tinvoice: \"I N V O I C E\",\r\n\t\trefNumber: \"Ref no: #\",\r\n\t\tdate: \"Date:\",\r\n\t\tdueDate: \"Due Date:\",\r\n\t\tstatus: \"Status:\",\r\n\t\tbillTo: \"Bill To\",\r\n\t\titem: \"Item\",\r\n\t\tquantity: \"Qty\",\r\n\t\tprice: \"Price\",\r\n\t\ttax: \"Tax\",\r\n\t\ttotal: \"Total\",\r\n\t\tsubTotal: \"Subtotal\",\r\n\t\ttotalTax: \"Total Tax\",\r\n\t},\r\n};\r\n\r\nmodule.exports = defaultConfig;\r\n","const fs = require(\"fs\");\r\nconst path = require(\"path\");\r\nconst invoiceMaker = require(\"pdfmake\");\r\nconst helper = require(\"../utils/helper\");\r\nconst defaultConfig = require(\"../utils/config\");\r\n\r\nimport type {\r\n\tCompanyInfo,\r\n\tCustomerInfo,\r\n\tInvoiceInfo,\r\n\tItemInfo,\r\n\tQRInfo,\r\n\tNotes,\r\n\tInvoicePayLoad,\r\n\tSimplePDFInvoice,\r\n\tConfiguration,\r\n} from \"../../global\";\r\n\r\nexport class PDFInvoice implements SimplePDFInvoice {\r\n\tpayload: InvoicePayLoad;\r\n\tcompany: CompanyInfo;\r\n\tinvoice: InvoiceInfo;\r\n\tcustomer: CustomerInfo;\r\n\titems: ItemInfo[];\r\n\tcurrency: string;\r\n\tpath: string;\r\n\tqr: QRInfo;\r\n\tnote: Notes;\r\n\tdate: string;\r\n\tconfig: Configuration;\r\n\tconstructor(\r\n\t\tpayload: InvoicePayLoad,\r\n\t\tconfig: Configuration = defaultConfig\r\n\t) {\r\n\t\tthis.payload = payload;\r\n\r\n\t\t// Invoice content section.\r\n\t\tthis.company = payload.company;\r\n\t\tthis.customer = payload.customer;\r\n\t\tthis.invoice = payload.invoice;\r\n\t\tthis.items = payload.items;\r\n\t\tthis.qr = payload.qr;\r\n\t\tthis.note = payload.note;\r\n\r\n\t\t// Invoice currency.\r\n\t\tthis.currency = this.invoice.currency || \"$\";\r\n\r\n\t\t// Path.\r\n\t\tthis.path = path.resolve(this.invoice.path) || \"./invoice.pdf\";\r\n\r\n\t\t// Invoice information.\r\n\t\tthis.date = new Date().toLocaleDateString(\"en-US\", {\r\n\t\t\tyear: \"numeric\",\r\n\t\t\tmonth: \"numeric\",\r\n\t\t\tday: \"numeric\",\r\n\t\t});\r\n\r\n\t\t// Configuration.\r\n\t\tthis.config = config;\r\n\t}\r\n\r\n\t/**\r\n\t * Create a PDF invoice.\r\n\t *\r\n\t * @returns {void}\r\n\t * @since 1.0.0\r\n\t */\r\n\tasync create(): Promise {\r\n\t\tconst printer = new invoiceMaker(this.fonts());\r\n\r\n\t\tconst docDefinition = {\r\n\t\t\tpageSize: \"A4\",\r\n\t\t\torientation: \"portrait\",\r\n\t\t\tpageMargins: [40, 40, 40, 40],\r\n\t\t\tinfo: this.meta(),\r\n\t\t\tcontent: this.content(),\r\n\t\t\tdefaultStyle: this.defaultStyle(),\r\n\t\t\tstyles: this.styles(),\r\n\t\t};\r\n\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tconst doc = printer.createPdfKitDocument(docDefinition);\r\n\t\t\tconst stream = fs.createWriteStream(this.path);\r\n\r\n\t\t\tdoc.pipe(stream);\r\n\r\n\t\t\tdoc.on(\"end\", () => {\r\n\t\t\t\tresolve(this.path);\r\n\t\t\t});\r\n\r\n\t\t\tdoc.on(\"error\", (err: any) => {\r\n\t\t\t\treject(err);\r\n\t\t\t});\r\n\r\n\t\t\tdoc.end();\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Fonts.\r\n\t *\r\n\t * @returns {Object} font.\r\n\t * @since 1.0.0\r\n\t */\r\n\tfonts(): any {\r\n\t\tconst fonts = {\r\n\t\t\tHelvetica: {\r\n\t\t\t\tnormal: \"Helvetica\",\r\n\t\t\t\tbold: \"Helvetica-Bold\",\r\n\t\t\t\titalics: \"Helvetica-Oblique\",\r\n\t\t\t\tbolditalics: \"Helvetica-BoldOblique\",\r\n\t\t\t},\r\n\t\t};\r\n\r\n\t\treturn fonts;\r\n\t}\r\n\r\n\t/**\r\n\t * Doc meta.\r\n\t *\r\n\t * @returns {Object} meta.\r\n\t * @since 1.0.0\r\n\t */\r\n\tmeta(): any {\r\n\t\tconst meta = {\r\n\t\t\ttitle: \"Invoice - #\" + this.invoice.number,\r\n\t\t\tauthor: this.company.name,\r\n\t\t\tsubject: \"Invoice - \" + this.customer.name,\r\n\t\t\tkeywords: \"invoice\",\r\n\t\t};\r\n\r\n\t\treturn meta;\r\n\t}\r\n\r\n\t/**\r\n\t * Default invoice styles.\r\n\t *\r\n\t * @returns {Object} defaults.\r\n\t * @since 1.0.0\r\n\t */\r\n\tdefaultStyle(): any {\r\n\t\tconst defaults = {\r\n\t\t\tfontSize: 10,\r\n\t\t\tlineHeight: 1.8,\r\n\t\t\tbold: false,\r\n\t\t\tfont: \"Helvetica\",\r\n\t\t\tcolor: \"#222222\",\r\n\t\t\tcolumnGap: 30,\r\n\t\t};\r\n\t\treturn defaults;\r\n\t}\r\n\r\n\t/**\r\n\t * Invoice styles.\r\n\t *\r\n\t * @returns {Object} defaults.\r\n\t * @since 1.0.0\r\n\t */\r\n\tstyles(): any {\r\n\t\tconst styles = {\r\n\t\t\th1: {\r\n\t\t\t\tfontSize: 18,\r\n\t\t\t\tbold: true,\r\n\t\t\t},\r\n\t\t\th2: {\r\n\t\t\t\tfontSize: 16,\r\n\t\t\t\tbold: true,\r\n\t\t\t},\r\n\t\t\th3: {\r\n\t\t\t\tfontSize: 14,\r\n\t\t\t\tbold: true,\r\n\t\t\t},\r\n\t\t\ttext: {\r\n\t\t\t\tfontSize: 10,\r\n\t\t\t\tbold: false,\r\n\t\t\t},\r\n\t\t\ttextBold: {\r\n\t\t\t\tfontSize: 10,\r\n\t\t\t\tbold: true,\r\n\t\t\t},\r\n\t\t};\r\n\t\treturn styles;\r\n\t}\r\n\r\n\t/**\r\n\t * Return the invoice layout.\r\n\t *\r\n\t * @returns {Object} layout.\r\n\t * @since 1.0.0\r\n\t */\r\n\tcontent(): any {\r\n\t\tconst sections = [];\r\n\r\n\t\t/**\r\n\t\t * Left: Company section.\r\n\t\t * Right: Invoice section.\r\n\t\t *\r\n\t\t * @since 1.0.0\r\n\t\t */\r\n\t\tconst sectionCompany = {\r\n\t\t\tcolumns: [\r\n\t\t\t\t{\r\n\t\t\t\t\twidth: \"70%\",\r\n\t\t\t\t\tstack: [] as any,\r\n\t\t\t\t\tstyle: \"text\",\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\twidth: \"30%\",\r\n\t\t\t\t\tstack: [] as any,\r\n\t\t\t\t\tstyle: \"text\",\r\n\t\t\t\t},\r\n\t\t\t],\r\n\t\t};\r\n\r\n\t\tif (this.company.logo) {\r\n\t\t\tif (!this.company.logo.startsWith(\" 0) {\r\n\t\t\tthis.items.forEach((item) => {\r\n\t\t\t\tconst totalPrice = helper.calcItemTotal(item);\r\n\r\n\t\t\t\tsectionItems.table.body.push([\r\n\t\t\t\t\t`\\n ${item.name}`,\r\n\t\t\t\t\t`\\n ${item.quantity}`,\r\n\t\t\t\t\t`\\n ${this.currency}${item.price}`,\r\n\t\t\t\t\t`\\n ${item.tax || 0}%`,\r\n\t\t\t\t\t`\\n ${this.currency}${totalPrice}`,\r\n\t\t\t\t]);\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tsections.push(sectionItems);\r\n\r\n\t\t/**\r\n\t\t * Right: Total section.\r\n\t\t *\r\n\t\t * @since 1.0.0\r\n\t\t */\r\n\t\tconst sectionTotal = {\r\n\t\t\tmargin: [0, 20, 0, 0],\r\n\t\t\tcolumns: [\r\n\t\t\t\t{\r\n\t\t\t\t\twidth: \"*\",\r\n\t\t\t\t\tstack: [\" \"],\r\n\t\t\t\t\tstyle: \"text\",\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\twidth: 200,\r\n\t\t\t\t\tlineHeight: 1.5,\r\n\t\t\t\t\tstyle: \"textBold\",\r\n\t\t\t\t\ttable: {\r\n\t\t\t\t\t\twidths: [80, \"*\"],\r\n\t\t\t\t\t\theaderRows: 1,\r\n\t\t\t\t\t\tlineHeight: 1.5,\r\n\t\t\t\t\t\tbody: [\r\n\t\t\t\t\t\t\t[\r\n\t\t\t\t\t\t\t\t`\\n ${this.config.label.subTotal}`,\r\n\t\t\t\t\t\t\t\t`\\n ${this.currency}${helper.calcSubTotal(\r\n\t\t\t\t\t\t\t\t\tthis.items\r\n\t\t\t\t\t\t\t\t)}`,\r\n\t\t\t\t\t\t\t],\r\n\t\t\t\t\t\t\t[\r\n\t\t\t\t\t\t\t\t`\\n ${this.config.label.totalTax}`,\r\n\t\t\t\t\t\t\t\t`\\n ${this.currency}${helper.calcTax(\r\n\t\t\t\t\t\t\t\t\tthis.items\r\n\t\t\t\t\t\t\t\t)}`,\r\n\t\t\t\t\t\t\t],\r\n\t\t\t\t\t\t\t[\r\n\t\t\t\t\t\t\t\t`\\n ${this.config.label.total}`,\r\n\t\t\t\t\t\t\t\t`\\n ${this.currency}${helper.calcFinalTotal(\r\n\t\t\t\t\t\t\t\t\tthis.items\r\n\t\t\t\t\t\t\t\t)}`,\r\n\t\t\t\t\t\t\t],\r\n\t\t\t\t\t\t],\r\n\t\t\t\t\t},\r\n\t\t\t\t},\r\n\t\t\t],\r\n\t\t};\r\n\r\n\t\tsections.push(sectionTotal);\r\n\r\n\t\t/**\r\n\t\t * Left: QR section.\r\n\t\t *\r\n\t\t * @since 1.0.0\r\n\t\t */\r\n\t\tif (this.payload.qr) {\r\n\t\t\tconst sectionQR = {\r\n\t\t\t\tmargin: [0, 50, 0, 0],\r\n\t\t\t\tqr: this.payload.qr.data,\r\n\t\t\t\tfit: this.payload.qr.width || \"50\",\r\n\t\t\t};\r\n\r\n\t\t\tsections.push(sectionQR);\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Left: Notes section.\r\n\t\t *\r\n\t\t * @since 1.0.0\r\n\t\t */\r\n\t\tif (this.payload.note) {\r\n\t\t\tconst sectionNote = {\r\n\t\t\t\tmargin: [0, this.payload.qr ? 20 : 50, 0, 0],\r\n\t\t\t\ttext: this.payload.note,\r\n\t\t\t\titalics: true,\r\n\t\t\t};\r\n\r\n\t\t\tsections.push(sectionNote);\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Return the invoice sections.\r\n\t\t *\r\n\t\t * @since 1.0.0\r\n\t\t */\r\n\t\treturn sections;\r\n\t}\r\n}\r\n"]} \ No newline at end of file +{"version":3,"sources":["../../src/utils/helper.ts","../../src/utils/config.ts","../../src/class/invoice.ts"],"names":["require_helper","__commonJSMin","exports","module","helper","item","price","quantity","items","total","tax","subTotal","require_config","defaultConfig","fs","path","invoiceMaker","PDFInvoice","payload","config","printer","docDefinition","resolve","reject","doc","stream","err","sections","sectionCompany","refLabel","dateLabel","dueDateLabel","statusLabel","sectionCustomer","sectionItems","totalPrice","sectionTotal","sectionQR","sectionNote"],"mappings":"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","sourcesContent":["import type { ItemInfo } from \"../../global\";\r\n\r\ninterface Helpers {\r\n\tcalcItemTotal(item: ItemInfo): number | string;\r\n\tcalcTax(items: ItemInfo[]): number | string;\r\n\tcalcSubTotal(items: ItemInfo[]): number | string;\r\n\tcalcFinalTotal(items: ItemInfo[]): number | string;\r\n}\r\n\r\nconst helper: Helpers = {\r\n\t/**\r\n\t * Item total price calculation.\r\n\t *\r\n\t * @param {Object} item.\r\n\t * @returns {number} total.\r\n\t * @since 1.0.0\r\n\t */\r\n\tcalcItemTotal: function (item: ItemInfo): string {\r\n\t\tconst price = item.price || 0;\r\n\t\tconst quantity = item.quantity || 1;\r\n\t\treturn (price * quantity).toFixed(2);\r\n\t},\r\n\r\n\t/**\r\n\t * Calculate subtotal.\r\n\t *\r\n\t * @param {Object} items.\r\n\t * @returns {number} total.\r\n\t * @since 1.0.0\r\n\t */\r\n\tcalcSubTotal: function (items: ItemInfo[]): number | string {\r\n\t\tif (items.length === 0) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\tlet total = 0;\r\n\r\n\t\titems.forEach((item) => {\r\n\t\t\ttotal += Number(this.calcItemTotal(item));\r\n\t\t});\r\n\r\n\t\treturn total.toFixed(2);\r\n\t},\r\n\r\n\t/**\r\n\t * Calculate tax.\r\n\t *\r\n\t * @param {Object} items.\r\n\t * @returns {number} total.\r\n\t * @since 1.0.0\r\n\t */\r\n\tcalcTax: function (items: ItemInfo[]): number | string {\r\n\t\tif (items.length === 0) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\tlet total = 0;\r\n\r\n\t\titems.forEach((item) => {\r\n\t\t\tconst price = item.price;\r\n\t\t\tconst quantity = item.quantity;\r\n\t\t\tconst tax = item.tax || 0;\r\n\r\n\t\t\ttotal += (price * quantity * tax) / 100;\r\n\t\t});\r\n\r\n\t\treturn total.toFixed(2);\r\n\t},\r\n\r\n\t/**\r\n\t * Calculate total final price.\r\n\t *\r\n\t * @param {Object} items.\r\n\t * @returns {number} total.\r\n\t * @since 1.0.0\r\n\t */\r\n\tcalcFinalTotal: function (items: ItemInfo[]): number | string {\r\n\t\tif (items.length === 0) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\tconst subTotal = Number(this.calcSubTotal(items));\r\n\t\tconst tax = Number(this.calcTax(items));\r\n\r\n\t\treturn (subTotal + tax).toFixed(2);\r\n\t},\r\n};\r\n\r\nmodule.exports = helper;\r\n","/**\r\n * Holds the default configuration.\r\n *\r\n * @returns {Object} config.\r\n * @since 1.0.7\r\n */\r\nconst defaultConfig = {\r\n\tstring: {\r\n\t\tinvoice: \"I N V O I C E\",\r\n\t\trefNumber: \"Ref no: #\",\r\n\t\tdate: \"Date:\",\r\n\t\tdueDate: \"Due Date:\",\r\n\t\tstatus: \"Status:\",\r\n\t\tbillTo: \"Bill To\",\r\n\t\titem: \"Item\",\r\n\t\tquantity: \"Qty\",\r\n\t\tprice: \"Price\",\r\n\t\ttax: \"Tax\",\r\n\t\ttotal: \"Total\",\r\n\t\tsubTotal: \"Subtotal\",\r\n\t\ttotalTax: \"Total Tax\",\r\n\t},\r\n\tfont: {\r\n\t\thelvetica: {\r\n\t\t\tnormal: \"Helvetica\",\r\n\t\t\tbold: \"Helvetica-Bold\",\r\n\t\t\titalics: \"Helvetica-Oblique\",\r\n\t\t\tbolditalics: \"Helvetica-BoldOblique\",\r\n\t\t},\r\n noto: {\r\n \r\n }\r\n\t},\r\n};\r\n\r\nmodule.exports = defaultConfig;\r\n","const fs = require(\"fs\");\r\nconst path = require(\"path\");\r\nconst invoiceMaker = require(\"pdfmake\");\r\nconst helper = require(\"../utils/helper\");\r\nconst defaultConfig = require(\"../utils/config\");\r\n\r\nimport type {\r\n\tCompanyInfo,\r\n\tCustomerInfo,\r\n\tInvoiceInfo,\r\n\tItemInfo,\r\n\tQRInfo,\r\n\tNotes,\r\n\tInvoicePayLoad,\r\n\tSimplePDFInvoice,\r\n\tConfiguration,\r\n} from \"../../global\";\r\n\r\nexport class PDFInvoice implements SimplePDFInvoice {\r\n\tpayload: InvoicePayLoad;\r\n\tcompany: CompanyInfo;\r\n\tinvoice: InvoiceInfo;\r\n\tcustomer: CustomerInfo;\r\n\titems: ItemInfo[];\r\n\tcurrency: string;\r\n\tpath: string;\r\n\tqr: QRInfo;\r\n\tnote: Notes;\r\n\tdate: string;\r\n\tconfig: Configuration;\r\n\tconstructor(\r\n\t\tpayload: InvoicePayLoad,\r\n\t\tconfig: Configuration = defaultConfig\r\n\t) {\r\n\t\tthis.payload = payload;\r\n\r\n\t\t// Invoice content section.\r\n\t\tthis.company = payload.company;\r\n\t\tthis.customer = payload.customer;\r\n\t\tthis.invoice = payload.invoice;\r\n\t\tthis.items = payload.items;\r\n\t\tthis.qr = payload.qr;\r\n\t\tthis.note = payload.note;\r\n\r\n\t\t// Invoice currency.\r\n\t\tthis.currency = this.invoice.currency || \"$\";\r\n\r\n\t\t// Path.\r\n\t\tthis.path = path.resolve(this.invoice.path) || \"./invoice.pdf\";\r\n\r\n\t\t// Invoice information.\r\n\t\tthis.date = new Date().toLocaleDateString(\"en-US\", {\r\n\t\t\tyear: \"numeric\",\r\n\t\t\tmonth: \"numeric\",\r\n\t\t\tday: \"numeric\",\r\n\t\t});\r\n\r\n\t\t// Configuration.\r\n\t\tthis.config = config;\r\n\t}\r\n\r\n\t/**\r\n\t * Create a PDF invoice.\r\n\t *\r\n\t * @returns {void}\r\n\t * @since 1.0.0\r\n\t */\r\n\tasync create(): Promise {\r\n\t\tconst printer = new invoiceMaker(this.fonts());\r\n\r\n\t\tconst docDefinition = {\r\n\t\t\tpageSize: \"A4\",\r\n\t\t\torientation: \"portrait\",\r\n\t\t\tpageMargins: [40, 40, 40, 40],\r\n\t\t\tinfo: this.meta(),\r\n\t\t\tcontent: this.content(),\r\n\t\t\tdefaultStyle: this.defaultStyle(),\r\n\t\t\tstyles: this.styles(),\r\n\t\t};\r\n\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tconst doc = printer.createPdfKitDocument(docDefinition);\r\n\t\t\tconst stream = fs.createWriteStream(this.path);\r\n\r\n\t\t\tdoc.pipe(stream);\r\n\r\n\t\t\tdoc.on(\"end\", () => {\r\n\t\t\t\tresolve(this.path);\r\n\t\t\t});\r\n\r\n\t\t\tdoc.on(\"error\", (err: any) => {\r\n\t\t\t\treject(err);\r\n\t\t\t});\r\n\r\n\t\t\tdoc.end();\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Fonts.\r\n\t *\r\n\t * @returns {Object} font.\r\n\t * @since 1.0.0\r\n\t */\r\n\tfonts(): any {\r\n\t\tconst fonts = {\r\n\t\t\tHelvetica: {\r\n\t\t\t\tnormal: \"Helvetica\",\r\n\t\t\t\tbold: \"Helvetica-Bold\",\r\n\t\t\t\titalics: \"Helvetica-Oblique\",\r\n\t\t\t\tbolditalics: \"Helvetica-BoldOblique\",\r\n\t\t\t},\r\n\t\t};\r\n\r\n\t\treturn fonts;\r\n\t}\r\n\r\n\t/**\r\n\t * Doc meta.\r\n\t *\r\n\t * @returns {Object} meta.\r\n\t * @since 1.0.0\r\n\t */\r\n\tmeta(): any {\r\n\t\tconst meta = {\r\n\t\t\ttitle: \"Invoice - #\" + this.invoice.number,\r\n\t\t\tauthor: this.company.name,\r\n\t\t\tsubject: \"Invoice - \" + this.customer.name,\r\n\t\t\tkeywords: \"invoice\",\r\n\t\t};\r\n\r\n\t\treturn meta;\r\n\t}\r\n\r\n\t/**\r\n\t * Default invoice styles.\r\n\t *\r\n\t * @returns {Object} defaults.\r\n\t * @since 1.0.0\r\n\t */\r\n\tdefaultStyle(): any {\r\n\t\tconst defaults = {\r\n\t\t\tfontSize: 10,\r\n\t\t\tlineHeight: 1.8,\r\n\t\t\tbold: false,\r\n\t\t\tfont: \"Helvetica\",\r\n\t\t\tcolor: \"#222222\",\r\n\t\t\tcolumnGap: 30,\r\n\t\t};\r\n\t\treturn defaults;\r\n\t}\r\n\r\n\t/**\r\n\t * Invoice styles.\r\n\t *\r\n\t * @returns {Object} defaults.\r\n\t * @since 1.0.0\r\n\t */\r\n\tstyles(): any {\r\n\t\tconst styles = {\r\n\t\t\th1: {\r\n\t\t\t\tfontSize: 18,\r\n\t\t\t\tbold: true,\r\n\t\t\t},\r\n\t\t\th2: {\r\n\t\t\t\tfontSize: 16,\r\n\t\t\t\tbold: true,\r\n\t\t\t},\r\n\t\t\th3: {\r\n\t\t\t\tfontSize: 14,\r\n\t\t\t\tbold: true,\r\n\t\t\t},\r\n\t\t\ttext: {\r\n\t\t\t\tfontSize: 10,\r\n\t\t\t\tbold: false,\r\n\t\t\t},\r\n\t\t\ttextBold: {\r\n\t\t\t\tfontSize: 10,\r\n\t\t\t\tbold: true,\r\n\t\t\t},\r\n\t\t};\r\n\t\treturn styles;\r\n\t}\r\n\r\n\t/**\r\n\t * Return the invoice layout.\r\n\t *\r\n\t * @returns {Object} layout.\r\n\t * @since 1.0.0\r\n\t */\r\n\tcontent(): any {\r\n\t\tconst sections = [];\r\n\r\n\t\t/**\r\n\t\t * Left: Company section.\r\n\t\t * Right: Invoice section.\r\n\t\t *\r\n\t\t * @since 1.0.0\r\n\t\t */\r\n\t\tconst sectionCompany = {\r\n\t\t\tcolumns: [\r\n\t\t\t\t{\r\n\t\t\t\t\twidth: \"70%\",\r\n\t\t\t\t\tstack: [] as any,\r\n\t\t\t\t\tstyle: \"text\",\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\twidth: \"30%\",\r\n\t\t\t\t\tstack: [] as any,\r\n\t\t\t\t\tstyle: \"text\",\r\n\t\t\t\t},\r\n\t\t\t],\r\n\t\t};\r\n\r\n\t\tif (this.company.logo) {\r\n\t\t\tif (!this.company.logo.startsWith(\" 0) {\r\n\t\t\tthis.items.forEach((item) => {\r\n\t\t\t\tconst totalPrice = helper.calcItemTotal(item);\r\n\r\n\t\t\t\tsectionItems.table.body.push([\r\n\t\t\t\t\t`\\n ${item.name}`,\r\n\t\t\t\t\t`\\n ${item.quantity}`,\r\n\t\t\t\t\t`\\n ${this.currency}${item.price}`,\r\n\t\t\t\t\t`\\n ${item.tax || 0}%`,\r\n\t\t\t\t\t`\\n ${this.currency}${totalPrice}`,\r\n\t\t\t\t]);\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tsections.push(sectionItems);\r\n\r\n\t\t/**\r\n\t\t * Right: Total section.\r\n\t\t *\r\n\t\t * @since 1.0.0\r\n\t\t */\r\n\t\tconst sectionTotal = {\r\n\t\t\tmargin: [0, 20, 0, 0],\r\n\t\t\tcolumns: [\r\n\t\t\t\t{\r\n\t\t\t\t\twidth: \"*\",\r\n\t\t\t\t\tstack: [\" \"],\r\n\t\t\t\t\tstyle: \"text\",\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\twidth: 200,\r\n\t\t\t\t\tlineHeight: 1.5,\r\n\t\t\t\t\tstyle: \"textBold\",\r\n\t\t\t\t\ttable: {\r\n\t\t\t\t\t\twidths: [80, \"*\"],\r\n\t\t\t\t\t\theaderRows: 1,\r\n\t\t\t\t\t\tlineHeight: 1.5,\r\n\t\t\t\t\t\tbody: [\r\n\t\t\t\t\t\t\t[\r\n\t\t\t\t\t\t\t\t`\\n ${this.config.string.subTotal}`,\r\n\t\t\t\t\t\t\t\t`\\n ${this.currency}${helper.calcSubTotal(\r\n\t\t\t\t\t\t\t\t\tthis.items\r\n\t\t\t\t\t\t\t\t)}`,\r\n\t\t\t\t\t\t\t],\r\n\t\t\t\t\t\t\t[\r\n\t\t\t\t\t\t\t\t`\\n ${this.config.string.totalTax}`,\r\n\t\t\t\t\t\t\t\t`\\n ${this.currency}${helper.calcTax(\r\n\t\t\t\t\t\t\t\t\tthis.items\r\n\t\t\t\t\t\t\t\t)}`,\r\n\t\t\t\t\t\t\t],\r\n\t\t\t\t\t\t\t[\r\n\t\t\t\t\t\t\t\t`\\n ${this.config.string.total}`,\r\n\t\t\t\t\t\t\t\t`\\n ${this.currency}${helper.calcFinalTotal(\r\n\t\t\t\t\t\t\t\t\tthis.items\r\n\t\t\t\t\t\t\t\t)}`,\r\n\t\t\t\t\t\t\t],\r\n\t\t\t\t\t\t],\r\n\t\t\t\t\t},\r\n\t\t\t\t},\r\n\t\t\t],\r\n\t\t};\r\n\r\n\t\tsections.push(sectionTotal);\r\n\r\n\t\t/**\r\n\t\t * Left: QR section.\r\n\t\t *\r\n\t\t * @since 1.0.0\r\n\t\t */\r\n\t\tif (this.payload.qr) {\r\n\t\t\tconst sectionQR = {\r\n\t\t\t\tmargin: [0, 50, 0, 0],\r\n\t\t\t\tqr: this.payload.qr.data,\r\n\t\t\t\tfit: this.payload.qr.width || \"50\",\r\n\t\t\t};\r\n\r\n\t\t\tsections.push(sectionQR);\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Left: Notes section.\r\n\t\t *\r\n\t\t * @since 1.0.0\r\n\t\t */\r\n\t\tif (this.payload.note) {\r\n\t\t\tconst sectionNote = {\r\n\t\t\t\tmargin: [0, this.payload.qr ? 20 : 50, 0, 0],\r\n\t\t\t\ttext: this.payload.note,\r\n\t\t\t\titalics: true,\r\n\t\t\t};\r\n\r\n\t\t\tsections.push(sectionNote);\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Return the invoice sections.\r\n\t\t *\r\n\t\t * @since 1.0.0\r\n\t\t */\r\n\t\treturn sections;\r\n\t}\r\n}\r\n"]} \ No newline at end of file diff --git a/dist/index.js b/dist/index.js index 47e3e0e..2adddb5 100644 --- a/dist/index.js +++ b/dist/index.js @@ -1,23 +1,23 @@ 'use strict'; -var h=(s=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(s,{get:(t,e)=>(typeof require<"u"?require:t)[e]}):s)(function(s){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+s+'" is not supported')});var f=(s,t)=>()=>(t||s((t={exports:{}}).exports,t),t.exports);var p=f((w,y)=>{var I={calcItemTotal:function(s){let t=s.price||0,e=s.quantity||1;return (t*e).toFixed(2)},calcSubTotal:function(s){if(s.length===0)return 0;let t=0;return s.forEach(e=>{t+=Number(this.calcItemTotal(e));}),t.toFixed(2)},calcTax:function(s){if(s.length===0)return 0;let t=0;return s.forEach(e=>{let a=e.price,c=e.quantity,o=e.tax||0;t+=a*c*o/100;}),t.toFixed(2)},calcFinalTotal:function(s){if(s.length===0)return 0;let t=Number(this.calcSubTotal(s)),e=Number(this.calcTax(s));return (t+e).toFixed(2)}};y.exports=I;});var x=f((C,d)=>{var v={label:{invoice:"I N V O I C E",refNumber:"Ref no: #",date:"Date:",dueDate:"Due Date:",status:"Status:",billTo:"Bill To",item:"Item",quantity:"Qty",price:"Price",tax:"Tax",total:"Total",subTotal:"Subtotal",totalTax:"Total Tax"}};d.exports=v;});var T=h("fs"),k=h("path"),q=h("pdfmake"),l=p(),S=x(),u=class{payload;company;invoice;customer;items;currency;path;qr;note;date;config;constructor(t,e=S){this.payload=t,this.company=t.company,this.customer=t.customer,this.invoice=t.invoice,this.items=t.items,this.qr=t.qr,this.note=t.note,this.currency=this.invoice.currency||"$",this.path=k.resolve(this.invoice.path)||"./invoice.pdf",this.date=new Date().toLocaleDateString("en-US",{year:"numeric",month:"numeric",day:"numeric"}),this.config=e;}async create(){let t=new q(this.fonts()),e={pageSize:"A4",orientation:"portrait",pageMargins:[40,40,40,40],info:this.meta(),content:this.content(),defaultStyle:this.defaultStyle(),styles:this.styles()};return new Promise((a,c)=>{let o=t.createPdfKitDocument(e),r=T.createWriteStream(this.path);o.pipe(r),o.on("end",()=>{a(this.path);}),o.on("error",n=>{c(n);}),o.end();})}fonts(){return {Helvetica:{normal:"Helvetica",bold:"Helvetica-Bold",italics:"Helvetica-Oblique",bolditalics:"Helvetica-BoldOblique"}}}meta(){return {title:"Invoice - #"+this.invoice.number,author:this.company.name,subject:"Invoice - "+this.customer.name,keywords:"invoice"}}defaultStyle(){return {fontSize:10,lineHeight:1.8,bold:!1,font:"Helvetica",color:"#222222",columnGap:30}}styles(){return {h1:{fontSize:18,bold:!0},h2:{fontSize:16,bold:!0},h3:{fontSize:14,bold:!0},text:{fontSize:10,bold:!1},textBold:{fontSize:10,bold:!0}}}content(){let t=[],e={columns:[{width:"70%",stack:[],style:"text"},{width:"30%",stack:[],style:"text"}]};if(this.company.logo){if(!this.company.logo.startsWith("0&&this.items.forEach(i=>{let g=l.calcItemTotal(i);m.table.body.push([` +var u=(s=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(s,{get:(t,e)=>(typeof require<"u"?require:t)[e]}):s)(function(s){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+s+'" is not supported')});var f=(s,t)=>()=>(t||s((t={exports:{}}).exports,t),t.exports);var p=f((w,y)=>{var I={calcItemTotal:function(s){let t=s.price||0,e=s.quantity||1;return (t*e).toFixed(2)},calcSubTotal:function(s){if(s.length===0)return 0;let t=0;return s.forEach(e=>{t+=Number(this.calcItemTotal(e));}),t.toFixed(2)},calcTax:function(s){if(s.length===0)return 0;let t=0;return s.forEach(e=>{let c=e.price,a=e.quantity,o=e.tax||0;t+=c*a*o/100;}),t.toFixed(2)},calcFinalTotal:function(s){if(s.length===0)return 0;let t=Number(this.calcSubTotal(s)),e=Number(this.calcTax(s));return (t+e).toFixed(2)}};y.exports=I;});var g=f((H,d)=>{var v={string:{invoice:"I N V O I C E",refNumber:"Ref no: #",date:"Date:",dueDate:"Due Date:",status:"Status:",billTo:"Bill To",item:"Item",quantity:"Qty",price:"Price",tax:"Tax",total:"Total",subTotal:"Subtotal",totalTax:"Total Tax"},font:{helvetica:{normal:"Helvetica",bold:"Helvetica-Bold",italics:"Helvetica-Oblique",bolditalics:"Helvetica-BoldOblique"},noto:{}}};d.exports=v;});var T=u("fs"),k=u("path"),q=u("pdfmake"),l=p(),S=g(),h=class{payload;company;invoice;customer;items;currency;path;qr;note;date;config;constructor(t,e=S){this.payload=t,this.company=t.company,this.customer=t.customer,this.invoice=t.invoice,this.items=t.items,this.qr=t.qr,this.note=t.note,this.currency=this.invoice.currency||"$",this.path=k.resolve(this.invoice.path)||"./invoice.pdf",this.date=new Date().toLocaleDateString("en-US",{year:"numeric",month:"numeric",day:"numeric"}),this.config=e;}async create(){let t=new q(this.fonts()),e={pageSize:"A4",orientation:"portrait",pageMargins:[40,40,40,40],info:this.meta(),content:this.content(),defaultStyle:this.defaultStyle(),styles:this.styles()};return new Promise((c,a)=>{let o=t.createPdfKitDocument(e),r=T.createWriteStream(this.path);o.pipe(r),o.on("end",()=>{c(this.path);}),o.on("error",n=>{a(n);}),o.end();})}fonts(){return {Helvetica:{normal:"Helvetica",bold:"Helvetica-Bold",italics:"Helvetica-Oblique",bolditalics:"Helvetica-BoldOblique"}}}meta(){return {title:"Invoice - #"+this.invoice.number,author:this.company.name,subject:"Invoice - "+this.customer.name,keywords:"invoice"}}defaultStyle(){return {fontSize:10,lineHeight:1.8,bold:!1,font:"Helvetica",color:"#222222",columnGap:30}}styles(){return {h1:{fontSize:18,bold:!0},h2:{fontSize:16,bold:!0},h3:{fontSize:14,bold:!0},text:{fontSize:10,bold:!1},textBold:{fontSize:10,bold:!0}}}content(){let t=[],e={columns:[{width:"70%",stack:[],style:"text"},{width:"30%",stack:[],style:"text"}]};if(this.company.logo){if(!this.company.logo.startsWith("0&&this.items.forEach(i=>{let b=l.calcItemTotal(i);m.table.body.push([` ${i.name}`,` ${i.quantity}`,` ${this.currency}${i.price}`,` ${i.tax||0}%`,` - ${this.currency}${g}`]);}),t.push(m);let b={margin:[0,20,0,0],columns:[{width:"*",stack:[" "],style:"text"},{width:200,lineHeight:1.5,style:"textBold",table:{widths:[80,"*"],headerRows:1,lineHeight:1.5,body:[[` - ${this.config.label.subTotal}`,` + ${this.currency}${b}`]);}),t.push(m);let x={margin:[0,20,0,0],columns:[{width:"*",stack:[" "],style:"text"},{width:200,lineHeight:1.5,style:"textBold",table:{widths:[80,"*"],headerRows:1,lineHeight:1.5,body:[[` + ${this.config.string.subTotal}`,` ${this.currency}${l.calcSubTotal(this.items)}`],[` - ${this.config.label.totalTax}`,` + ${this.config.string.totalTax}`,` ${this.currency}${l.calcTax(this.items)}`],[` - ${this.config.label.total}`,` - ${this.currency}${l.calcFinalTotal(this.items)}`]]}}]};if(t.push(b),this.payload.qr){let i={margin:[0,50,0,0],qr:this.payload.qr.data,fit:this.payload.qr.width||"50"};t.push(i);}if(this.payload.note){let i={margin:[0,this.payload.qr?20:50,0,0],text:this.payload.note,italics:!0};t.push(i);}return t}}; + ${this.config.string.total}`,` + ${this.currency}${l.calcFinalTotal(this.items)}`]]}}]};if(t.push(x),this.payload.qr){let i={margin:[0,50,0,0],qr:this.payload.qr.data,fit:this.payload.qr.width||"50"};t.push(i);}if(this.payload.note){let i={margin:[0,this.payload.qr?20:50,0,0],text:this.payload.note,italics:!0};t.push(i);}return t}}; -exports.PDFInvoice = u; +exports.PDFInvoice = h; //# sourceMappingURL=out.js.map //# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/dist/index.js.map b/dist/index.js.map index caadcc5..b90852c 100644 --- a/dist/index.js.map +++ b/dist/index.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/utils/helper.ts","../src/utils/config.ts","../src/class/invoice.ts"],"names":["require_helper","__commonJSMin","exports","module","helper","item","price","quantity","items","total","tax","subTotal","require_config","defaultConfig","fs","path","invoiceMaker","PDFInvoice","payload","config","printer","docDefinition","resolve","reject","doc","stream","err","sections","sectionCompany","refLabel","dateLabel","dueDateLabel","statusLabel","sectionCustomer","sectionItems","totalPrice","sectionTotal","sectionQR","sectionNote"],"mappings":"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","sourcesContent":["import type { ItemInfo } from \"../../global\";\r\n\r\ninterface Helpers {\r\n\tcalcItemTotal(item: ItemInfo): number | string;\r\n\tcalcTax(items: ItemInfo[]): number | string;\r\n\tcalcSubTotal(items: ItemInfo[]): number | string;\r\n\tcalcFinalTotal(items: ItemInfo[]): number | string;\r\n}\r\n\r\nconst helper: Helpers = {\r\n\t/**\r\n\t * Item total price calculation.\r\n\t *\r\n\t * @param {Object} item.\r\n\t * @returns {number} total.\r\n\t * @since 1.0.0\r\n\t */\r\n\tcalcItemTotal: function (item: ItemInfo): string {\r\n\t\tconst price = item.price || 0;\r\n\t\tconst quantity = item.quantity || 1;\r\n\t\treturn (price * quantity).toFixed(2);\r\n\t},\r\n\r\n\t/**\r\n\t * Calculate subtotal.\r\n\t *\r\n\t * @param {Object} items.\r\n\t * @returns {number} total.\r\n\t * @since 1.0.0\r\n\t */\r\n\tcalcSubTotal: function (items: ItemInfo[]): number | string {\r\n\t\tif (items.length === 0) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\tlet total = 0;\r\n\r\n\t\titems.forEach((item) => {\r\n\t\t\ttotal += Number(this.calcItemTotal(item));\r\n\t\t});\r\n\r\n\t\treturn total.toFixed(2);\r\n\t},\r\n\r\n\t/**\r\n\t * Calculate tax.\r\n\t *\r\n\t * @param {Object} items.\r\n\t * @returns {number} total.\r\n\t * @since 1.0.0\r\n\t */\r\n\tcalcTax: function (items: ItemInfo[]): number | string {\r\n\t\tif (items.length === 0) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\tlet total = 0;\r\n\r\n\t\titems.forEach((item) => {\r\n\t\t\tconst price = item.price;\r\n\t\t\tconst quantity = item.quantity;\r\n\t\t\tconst tax = item.tax || 0;\r\n\r\n\t\t\ttotal += (price * quantity * tax) / 100;\r\n\t\t});\r\n\r\n\t\treturn total.toFixed(2);\r\n\t},\r\n\r\n\t/**\r\n\t * Calculate total final price.\r\n\t *\r\n\t * @param {Object} items.\r\n\t * @returns {number} total.\r\n\t * @since 1.0.0\r\n\t */\r\n\tcalcFinalTotal: function (items: ItemInfo[]): number | string {\r\n\t\tif (items.length === 0) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\tconst subTotal = Number(this.calcSubTotal(items));\r\n\t\tconst tax = Number(this.calcTax(items));\r\n\r\n\t\treturn (subTotal + tax).toFixed(2);\r\n\t},\r\n};\r\n\r\nmodule.exports = helper;\r\n","/**\r\n * Holds the default configuration.\r\n *\r\n * @returns {Object} config.\r\n * @since 1.0.7\r\n */\r\nconst defaultConfig = {\r\n\tlabel: {\r\n\t\tinvoice: \"I N V O I C E\",\r\n\t\trefNumber: \"Ref no: #\",\r\n\t\tdate: \"Date:\",\r\n\t\tdueDate: \"Due Date:\",\r\n\t\tstatus: \"Status:\",\r\n\t\tbillTo: \"Bill To\",\r\n\t\titem: \"Item\",\r\n\t\tquantity: \"Qty\",\r\n\t\tprice: \"Price\",\r\n\t\ttax: \"Tax\",\r\n\t\ttotal: \"Total\",\r\n\t\tsubTotal: \"Subtotal\",\r\n\t\ttotalTax: \"Total Tax\",\r\n\t},\r\n};\r\n\r\nmodule.exports = defaultConfig;\r\n","const fs = require(\"fs\");\r\nconst path = require(\"path\");\r\nconst invoiceMaker = require(\"pdfmake\");\r\nconst helper = require(\"../utils/helper\");\r\nconst defaultConfig = require(\"../utils/config\");\r\n\r\nimport type {\r\n\tCompanyInfo,\r\n\tCustomerInfo,\r\n\tInvoiceInfo,\r\n\tItemInfo,\r\n\tQRInfo,\r\n\tNotes,\r\n\tInvoicePayLoad,\r\n\tSimplePDFInvoice,\r\n\tConfiguration,\r\n} from \"../../global\";\r\n\r\nexport class PDFInvoice implements SimplePDFInvoice {\r\n\tpayload: InvoicePayLoad;\r\n\tcompany: CompanyInfo;\r\n\tinvoice: InvoiceInfo;\r\n\tcustomer: CustomerInfo;\r\n\titems: ItemInfo[];\r\n\tcurrency: string;\r\n\tpath: string;\r\n\tqr: QRInfo;\r\n\tnote: Notes;\r\n\tdate: string;\r\n\tconfig: Configuration;\r\n\tconstructor(\r\n\t\tpayload: InvoicePayLoad,\r\n\t\tconfig: Configuration = defaultConfig\r\n\t) {\r\n\t\tthis.payload = payload;\r\n\r\n\t\t// Invoice content section.\r\n\t\tthis.company = payload.company;\r\n\t\tthis.customer = payload.customer;\r\n\t\tthis.invoice = payload.invoice;\r\n\t\tthis.items = payload.items;\r\n\t\tthis.qr = payload.qr;\r\n\t\tthis.note = payload.note;\r\n\r\n\t\t// Invoice currency.\r\n\t\tthis.currency = this.invoice.currency || \"$\";\r\n\r\n\t\t// Path.\r\n\t\tthis.path = path.resolve(this.invoice.path) || \"./invoice.pdf\";\r\n\r\n\t\t// Invoice information.\r\n\t\tthis.date = new Date().toLocaleDateString(\"en-US\", {\r\n\t\t\tyear: \"numeric\",\r\n\t\t\tmonth: \"numeric\",\r\n\t\t\tday: \"numeric\",\r\n\t\t});\r\n\r\n\t\t// Configuration.\r\n\t\tthis.config = config;\r\n\t}\r\n\r\n\t/**\r\n\t * Create a PDF invoice.\r\n\t *\r\n\t * @returns {void}\r\n\t * @since 1.0.0\r\n\t */\r\n\tasync create(): Promise {\r\n\t\tconst printer = new invoiceMaker(this.fonts());\r\n\r\n\t\tconst docDefinition = {\r\n\t\t\tpageSize: \"A4\",\r\n\t\t\torientation: \"portrait\",\r\n\t\t\tpageMargins: [40, 40, 40, 40],\r\n\t\t\tinfo: this.meta(),\r\n\t\t\tcontent: this.content(),\r\n\t\t\tdefaultStyle: this.defaultStyle(),\r\n\t\t\tstyles: this.styles(),\r\n\t\t};\r\n\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tconst doc = printer.createPdfKitDocument(docDefinition);\r\n\t\t\tconst stream = fs.createWriteStream(this.path);\r\n\r\n\t\t\tdoc.pipe(stream);\r\n\r\n\t\t\tdoc.on(\"end\", () => {\r\n\t\t\t\tresolve(this.path);\r\n\t\t\t});\r\n\r\n\t\t\tdoc.on(\"error\", (err: any) => {\r\n\t\t\t\treject(err);\r\n\t\t\t});\r\n\r\n\t\t\tdoc.end();\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Fonts.\r\n\t *\r\n\t * @returns {Object} font.\r\n\t * @since 1.0.0\r\n\t */\r\n\tfonts(): any {\r\n\t\tconst fonts = {\r\n\t\t\tHelvetica: {\r\n\t\t\t\tnormal: \"Helvetica\",\r\n\t\t\t\tbold: \"Helvetica-Bold\",\r\n\t\t\t\titalics: \"Helvetica-Oblique\",\r\n\t\t\t\tbolditalics: \"Helvetica-BoldOblique\",\r\n\t\t\t},\r\n\t\t};\r\n\r\n\t\treturn fonts;\r\n\t}\r\n\r\n\t/**\r\n\t * Doc meta.\r\n\t *\r\n\t * @returns {Object} meta.\r\n\t * @since 1.0.0\r\n\t */\r\n\tmeta(): any {\r\n\t\tconst meta = {\r\n\t\t\ttitle: \"Invoice - #\" + this.invoice.number,\r\n\t\t\tauthor: this.company.name,\r\n\t\t\tsubject: \"Invoice - \" + this.customer.name,\r\n\t\t\tkeywords: \"invoice\",\r\n\t\t};\r\n\r\n\t\treturn meta;\r\n\t}\r\n\r\n\t/**\r\n\t * Default invoice styles.\r\n\t *\r\n\t * @returns {Object} defaults.\r\n\t * @since 1.0.0\r\n\t */\r\n\tdefaultStyle(): any {\r\n\t\tconst defaults = {\r\n\t\t\tfontSize: 10,\r\n\t\t\tlineHeight: 1.8,\r\n\t\t\tbold: false,\r\n\t\t\tfont: \"Helvetica\",\r\n\t\t\tcolor: \"#222222\",\r\n\t\t\tcolumnGap: 30,\r\n\t\t};\r\n\t\treturn defaults;\r\n\t}\r\n\r\n\t/**\r\n\t * Invoice styles.\r\n\t *\r\n\t * @returns {Object} defaults.\r\n\t * @since 1.0.0\r\n\t */\r\n\tstyles(): any {\r\n\t\tconst styles = {\r\n\t\t\th1: {\r\n\t\t\t\tfontSize: 18,\r\n\t\t\t\tbold: true,\r\n\t\t\t},\r\n\t\t\th2: {\r\n\t\t\t\tfontSize: 16,\r\n\t\t\t\tbold: true,\r\n\t\t\t},\r\n\t\t\th3: {\r\n\t\t\t\tfontSize: 14,\r\n\t\t\t\tbold: true,\r\n\t\t\t},\r\n\t\t\ttext: {\r\n\t\t\t\tfontSize: 10,\r\n\t\t\t\tbold: false,\r\n\t\t\t},\r\n\t\t\ttextBold: {\r\n\t\t\t\tfontSize: 10,\r\n\t\t\t\tbold: true,\r\n\t\t\t},\r\n\t\t};\r\n\t\treturn styles;\r\n\t}\r\n\r\n\t/**\r\n\t * Return the invoice layout.\r\n\t *\r\n\t * @returns {Object} layout.\r\n\t * @since 1.0.0\r\n\t */\r\n\tcontent(): any {\r\n\t\tconst sections = [];\r\n\r\n\t\t/**\r\n\t\t * Left: Company section.\r\n\t\t * Right: Invoice section.\r\n\t\t *\r\n\t\t * @since 1.0.0\r\n\t\t */\r\n\t\tconst sectionCompany = {\r\n\t\t\tcolumns: [\r\n\t\t\t\t{\r\n\t\t\t\t\twidth: \"70%\",\r\n\t\t\t\t\tstack: [] as any,\r\n\t\t\t\t\tstyle: \"text\",\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\twidth: \"30%\",\r\n\t\t\t\t\tstack: [] as any,\r\n\t\t\t\t\tstyle: \"text\",\r\n\t\t\t\t},\r\n\t\t\t],\r\n\t\t};\r\n\r\n\t\tif (this.company.logo) {\r\n\t\t\tif (!this.company.logo.startsWith(\" 0) {\r\n\t\t\tthis.items.forEach((item) => {\r\n\t\t\t\tconst totalPrice = helper.calcItemTotal(item);\r\n\r\n\t\t\t\tsectionItems.table.body.push([\r\n\t\t\t\t\t`\\n ${item.name}`,\r\n\t\t\t\t\t`\\n ${item.quantity}`,\r\n\t\t\t\t\t`\\n ${this.currency}${item.price}`,\r\n\t\t\t\t\t`\\n ${item.tax || 0}%`,\r\n\t\t\t\t\t`\\n ${this.currency}${totalPrice}`,\r\n\t\t\t\t]);\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tsections.push(sectionItems);\r\n\r\n\t\t/**\r\n\t\t * Right: Total section.\r\n\t\t *\r\n\t\t * @since 1.0.0\r\n\t\t */\r\n\t\tconst sectionTotal = {\r\n\t\t\tmargin: [0, 20, 0, 0],\r\n\t\t\tcolumns: [\r\n\t\t\t\t{\r\n\t\t\t\t\twidth: \"*\",\r\n\t\t\t\t\tstack: [\" \"],\r\n\t\t\t\t\tstyle: \"text\",\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\twidth: 200,\r\n\t\t\t\t\tlineHeight: 1.5,\r\n\t\t\t\t\tstyle: \"textBold\",\r\n\t\t\t\t\ttable: {\r\n\t\t\t\t\t\twidths: [80, \"*\"],\r\n\t\t\t\t\t\theaderRows: 1,\r\n\t\t\t\t\t\tlineHeight: 1.5,\r\n\t\t\t\t\t\tbody: [\r\n\t\t\t\t\t\t\t[\r\n\t\t\t\t\t\t\t\t`\\n ${this.config.label.subTotal}`,\r\n\t\t\t\t\t\t\t\t`\\n ${this.currency}${helper.calcSubTotal(\r\n\t\t\t\t\t\t\t\t\tthis.items\r\n\t\t\t\t\t\t\t\t)}`,\r\n\t\t\t\t\t\t\t],\r\n\t\t\t\t\t\t\t[\r\n\t\t\t\t\t\t\t\t`\\n ${this.config.label.totalTax}`,\r\n\t\t\t\t\t\t\t\t`\\n ${this.currency}${helper.calcTax(\r\n\t\t\t\t\t\t\t\t\tthis.items\r\n\t\t\t\t\t\t\t\t)}`,\r\n\t\t\t\t\t\t\t],\r\n\t\t\t\t\t\t\t[\r\n\t\t\t\t\t\t\t\t`\\n ${this.config.label.total}`,\r\n\t\t\t\t\t\t\t\t`\\n ${this.currency}${helper.calcFinalTotal(\r\n\t\t\t\t\t\t\t\t\tthis.items\r\n\t\t\t\t\t\t\t\t)}`,\r\n\t\t\t\t\t\t\t],\r\n\t\t\t\t\t\t],\r\n\t\t\t\t\t},\r\n\t\t\t\t},\r\n\t\t\t],\r\n\t\t};\r\n\r\n\t\tsections.push(sectionTotal);\r\n\r\n\t\t/**\r\n\t\t * Left: QR section.\r\n\t\t *\r\n\t\t * @since 1.0.0\r\n\t\t */\r\n\t\tif (this.payload.qr) {\r\n\t\t\tconst sectionQR = {\r\n\t\t\t\tmargin: [0, 50, 0, 0],\r\n\t\t\t\tqr: this.payload.qr.data,\r\n\t\t\t\tfit: this.payload.qr.width || \"50\",\r\n\t\t\t};\r\n\r\n\t\t\tsections.push(sectionQR);\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Left: Notes section.\r\n\t\t *\r\n\t\t * @since 1.0.0\r\n\t\t */\r\n\t\tif (this.payload.note) {\r\n\t\t\tconst sectionNote = {\r\n\t\t\t\tmargin: [0, this.payload.qr ? 20 : 50, 0, 0],\r\n\t\t\t\ttext: this.payload.note,\r\n\t\t\t\titalics: true,\r\n\t\t\t};\r\n\r\n\t\t\tsections.push(sectionNote);\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Return the invoice sections.\r\n\t\t *\r\n\t\t * @since 1.0.0\r\n\t\t */\r\n\t\treturn sections;\r\n\t}\r\n}\r\n"]} \ No newline at end of file +{"version":3,"sources":["../src/utils/helper.ts","../src/utils/config.ts","../src/class/invoice.ts"],"names":["require_helper","__commonJSMin","exports","module","helper","item","price","quantity","items","total","tax","subTotal","require_config","defaultConfig","fs","path","invoiceMaker","PDFInvoice","payload","config","printer","docDefinition","resolve","reject","doc","stream","err","sections","sectionCompany","refLabel","dateLabel","dueDateLabel","statusLabel","sectionCustomer","sectionItems","totalPrice","sectionTotal","sectionQR","sectionNote"],"mappings":"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","sourcesContent":["import type { ItemInfo } from \"../../global\";\r\n\r\ninterface Helpers {\r\n\tcalcItemTotal(item: ItemInfo): number | string;\r\n\tcalcTax(items: ItemInfo[]): number | string;\r\n\tcalcSubTotal(items: ItemInfo[]): number | string;\r\n\tcalcFinalTotal(items: ItemInfo[]): number | string;\r\n}\r\n\r\nconst helper: Helpers = {\r\n\t/**\r\n\t * Item total price calculation.\r\n\t *\r\n\t * @param {Object} item.\r\n\t * @returns {number} total.\r\n\t * @since 1.0.0\r\n\t */\r\n\tcalcItemTotal: function (item: ItemInfo): string {\r\n\t\tconst price = item.price || 0;\r\n\t\tconst quantity = item.quantity || 1;\r\n\t\treturn (price * quantity).toFixed(2);\r\n\t},\r\n\r\n\t/**\r\n\t * Calculate subtotal.\r\n\t *\r\n\t * @param {Object} items.\r\n\t * @returns {number} total.\r\n\t * @since 1.0.0\r\n\t */\r\n\tcalcSubTotal: function (items: ItemInfo[]): number | string {\r\n\t\tif (items.length === 0) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\tlet total = 0;\r\n\r\n\t\titems.forEach((item) => {\r\n\t\t\ttotal += Number(this.calcItemTotal(item));\r\n\t\t});\r\n\r\n\t\treturn total.toFixed(2);\r\n\t},\r\n\r\n\t/**\r\n\t * Calculate tax.\r\n\t *\r\n\t * @param {Object} items.\r\n\t * @returns {number} total.\r\n\t * @since 1.0.0\r\n\t */\r\n\tcalcTax: function (items: ItemInfo[]): number | string {\r\n\t\tif (items.length === 0) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\tlet total = 0;\r\n\r\n\t\titems.forEach((item) => {\r\n\t\t\tconst price = item.price;\r\n\t\t\tconst quantity = item.quantity;\r\n\t\t\tconst tax = item.tax || 0;\r\n\r\n\t\t\ttotal += (price * quantity * tax) / 100;\r\n\t\t});\r\n\r\n\t\treturn total.toFixed(2);\r\n\t},\r\n\r\n\t/**\r\n\t * Calculate total final price.\r\n\t *\r\n\t * @param {Object} items.\r\n\t * @returns {number} total.\r\n\t * @since 1.0.0\r\n\t */\r\n\tcalcFinalTotal: function (items: ItemInfo[]): number | string {\r\n\t\tif (items.length === 0) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\tconst subTotal = Number(this.calcSubTotal(items));\r\n\t\tconst tax = Number(this.calcTax(items));\r\n\r\n\t\treturn (subTotal + tax).toFixed(2);\r\n\t},\r\n};\r\n\r\nmodule.exports = helper;\r\n","/**\r\n * Holds the default configuration.\r\n *\r\n * @returns {Object} config.\r\n * @since 1.0.7\r\n */\r\nconst defaultConfig = {\r\n\tstring: {\r\n\t\tinvoice: \"I N V O I C E\",\r\n\t\trefNumber: \"Ref no: #\",\r\n\t\tdate: \"Date:\",\r\n\t\tdueDate: \"Due Date:\",\r\n\t\tstatus: \"Status:\",\r\n\t\tbillTo: \"Bill To\",\r\n\t\titem: \"Item\",\r\n\t\tquantity: \"Qty\",\r\n\t\tprice: \"Price\",\r\n\t\ttax: \"Tax\",\r\n\t\ttotal: \"Total\",\r\n\t\tsubTotal: \"Subtotal\",\r\n\t\ttotalTax: \"Total Tax\",\r\n\t},\r\n\tfont: {\r\n\t\thelvetica: {\r\n\t\t\tnormal: \"Helvetica\",\r\n\t\t\tbold: \"Helvetica-Bold\",\r\n\t\t\titalics: \"Helvetica-Oblique\",\r\n\t\t\tbolditalics: \"Helvetica-BoldOblique\",\r\n\t\t},\r\n noto: {\r\n \r\n }\r\n\t},\r\n};\r\n\r\nmodule.exports = defaultConfig;\r\n","const fs = require(\"fs\");\r\nconst path = require(\"path\");\r\nconst invoiceMaker = require(\"pdfmake\");\r\nconst helper = require(\"../utils/helper\");\r\nconst defaultConfig = require(\"../utils/config\");\r\n\r\nimport type {\r\n\tCompanyInfo,\r\n\tCustomerInfo,\r\n\tInvoiceInfo,\r\n\tItemInfo,\r\n\tQRInfo,\r\n\tNotes,\r\n\tInvoicePayLoad,\r\n\tSimplePDFInvoice,\r\n\tConfiguration,\r\n} from \"../../global\";\r\n\r\nexport class PDFInvoice implements SimplePDFInvoice {\r\n\tpayload: InvoicePayLoad;\r\n\tcompany: CompanyInfo;\r\n\tinvoice: InvoiceInfo;\r\n\tcustomer: CustomerInfo;\r\n\titems: ItemInfo[];\r\n\tcurrency: string;\r\n\tpath: string;\r\n\tqr: QRInfo;\r\n\tnote: Notes;\r\n\tdate: string;\r\n\tconfig: Configuration;\r\n\tconstructor(\r\n\t\tpayload: InvoicePayLoad,\r\n\t\tconfig: Configuration = defaultConfig\r\n\t) {\r\n\t\tthis.payload = payload;\r\n\r\n\t\t// Invoice content section.\r\n\t\tthis.company = payload.company;\r\n\t\tthis.customer = payload.customer;\r\n\t\tthis.invoice = payload.invoice;\r\n\t\tthis.items = payload.items;\r\n\t\tthis.qr = payload.qr;\r\n\t\tthis.note = payload.note;\r\n\r\n\t\t// Invoice currency.\r\n\t\tthis.currency = this.invoice.currency || \"$\";\r\n\r\n\t\t// Path.\r\n\t\tthis.path = path.resolve(this.invoice.path) || \"./invoice.pdf\";\r\n\r\n\t\t// Invoice information.\r\n\t\tthis.date = new Date().toLocaleDateString(\"en-US\", {\r\n\t\t\tyear: \"numeric\",\r\n\t\t\tmonth: \"numeric\",\r\n\t\t\tday: \"numeric\",\r\n\t\t});\r\n\r\n\t\t// Configuration.\r\n\t\tthis.config = config;\r\n\t}\r\n\r\n\t/**\r\n\t * Create a PDF invoice.\r\n\t *\r\n\t * @returns {void}\r\n\t * @since 1.0.0\r\n\t */\r\n\tasync create(): Promise {\r\n\t\tconst printer = new invoiceMaker(this.fonts());\r\n\r\n\t\tconst docDefinition = {\r\n\t\t\tpageSize: \"A4\",\r\n\t\t\torientation: \"portrait\",\r\n\t\t\tpageMargins: [40, 40, 40, 40],\r\n\t\t\tinfo: this.meta(),\r\n\t\t\tcontent: this.content(),\r\n\t\t\tdefaultStyle: this.defaultStyle(),\r\n\t\t\tstyles: this.styles(),\r\n\t\t};\r\n\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tconst doc = printer.createPdfKitDocument(docDefinition);\r\n\t\t\tconst stream = fs.createWriteStream(this.path);\r\n\r\n\t\t\tdoc.pipe(stream);\r\n\r\n\t\t\tdoc.on(\"end\", () => {\r\n\t\t\t\tresolve(this.path);\r\n\t\t\t});\r\n\r\n\t\t\tdoc.on(\"error\", (err: any) => {\r\n\t\t\t\treject(err);\r\n\t\t\t});\r\n\r\n\t\t\tdoc.end();\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Fonts.\r\n\t *\r\n\t * @returns {Object} font.\r\n\t * @since 1.0.0\r\n\t */\r\n\tfonts(): any {\r\n\t\tconst fonts = {\r\n\t\t\tHelvetica: {\r\n\t\t\t\tnormal: \"Helvetica\",\r\n\t\t\t\tbold: \"Helvetica-Bold\",\r\n\t\t\t\titalics: \"Helvetica-Oblique\",\r\n\t\t\t\tbolditalics: \"Helvetica-BoldOblique\",\r\n\t\t\t},\r\n\t\t};\r\n\r\n\t\treturn fonts;\r\n\t}\r\n\r\n\t/**\r\n\t * Doc meta.\r\n\t *\r\n\t * @returns {Object} meta.\r\n\t * @since 1.0.0\r\n\t */\r\n\tmeta(): any {\r\n\t\tconst meta = {\r\n\t\t\ttitle: \"Invoice - #\" + this.invoice.number,\r\n\t\t\tauthor: this.company.name,\r\n\t\t\tsubject: \"Invoice - \" + this.customer.name,\r\n\t\t\tkeywords: \"invoice\",\r\n\t\t};\r\n\r\n\t\treturn meta;\r\n\t}\r\n\r\n\t/**\r\n\t * Default invoice styles.\r\n\t *\r\n\t * @returns {Object} defaults.\r\n\t * @since 1.0.0\r\n\t */\r\n\tdefaultStyle(): any {\r\n\t\tconst defaults = {\r\n\t\t\tfontSize: 10,\r\n\t\t\tlineHeight: 1.8,\r\n\t\t\tbold: false,\r\n\t\t\tfont: \"Helvetica\",\r\n\t\t\tcolor: \"#222222\",\r\n\t\t\tcolumnGap: 30,\r\n\t\t};\r\n\t\treturn defaults;\r\n\t}\r\n\r\n\t/**\r\n\t * Invoice styles.\r\n\t *\r\n\t * @returns {Object} defaults.\r\n\t * @since 1.0.0\r\n\t */\r\n\tstyles(): any {\r\n\t\tconst styles = {\r\n\t\t\th1: {\r\n\t\t\t\tfontSize: 18,\r\n\t\t\t\tbold: true,\r\n\t\t\t},\r\n\t\t\th2: {\r\n\t\t\t\tfontSize: 16,\r\n\t\t\t\tbold: true,\r\n\t\t\t},\r\n\t\t\th3: {\r\n\t\t\t\tfontSize: 14,\r\n\t\t\t\tbold: true,\r\n\t\t\t},\r\n\t\t\ttext: {\r\n\t\t\t\tfontSize: 10,\r\n\t\t\t\tbold: false,\r\n\t\t\t},\r\n\t\t\ttextBold: {\r\n\t\t\t\tfontSize: 10,\r\n\t\t\t\tbold: true,\r\n\t\t\t},\r\n\t\t};\r\n\t\treturn styles;\r\n\t}\r\n\r\n\t/**\r\n\t * Return the invoice layout.\r\n\t *\r\n\t * @returns {Object} layout.\r\n\t * @since 1.0.0\r\n\t */\r\n\tcontent(): any {\r\n\t\tconst sections = [];\r\n\r\n\t\t/**\r\n\t\t * Left: Company section.\r\n\t\t * Right: Invoice section.\r\n\t\t *\r\n\t\t * @since 1.0.0\r\n\t\t */\r\n\t\tconst sectionCompany = {\r\n\t\t\tcolumns: [\r\n\t\t\t\t{\r\n\t\t\t\t\twidth: \"70%\",\r\n\t\t\t\t\tstack: [] as any,\r\n\t\t\t\t\tstyle: \"text\",\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\twidth: \"30%\",\r\n\t\t\t\t\tstack: [] as any,\r\n\t\t\t\t\tstyle: \"text\",\r\n\t\t\t\t},\r\n\t\t\t],\r\n\t\t};\r\n\r\n\t\tif (this.company.logo) {\r\n\t\t\tif (!this.company.logo.startsWith(\" 0) {\r\n\t\t\tthis.items.forEach((item) => {\r\n\t\t\t\tconst totalPrice = helper.calcItemTotal(item);\r\n\r\n\t\t\t\tsectionItems.table.body.push([\r\n\t\t\t\t\t`\\n ${item.name}`,\r\n\t\t\t\t\t`\\n ${item.quantity}`,\r\n\t\t\t\t\t`\\n ${this.currency}${item.price}`,\r\n\t\t\t\t\t`\\n ${item.tax || 0}%`,\r\n\t\t\t\t\t`\\n ${this.currency}${totalPrice}`,\r\n\t\t\t\t]);\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tsections.push(sectionItems);\r\n\r\n\t\t/**\r\n\t\t * Right: Total section.\r\n\t\t *\r\n\t\t * @since 1.0.0\r\n\t\t */\r\n\t\tconst sectionTotal = {\r\n\t\t\tmargin: [0, 20, 0, 0],\r\n\t\t\tcolumns: [\r\n\t\t\t\t{\r\n\t\t\t\t\twidth: \"*\",\r\n\t\t\t\t\tstack: [\" \"],\r\n\t\t\t\t\tstyle: \"text\",\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\twidth: 200,\r\n\t\t\t\t\tlineHeight: 1.5,\r\n\t\t\t\t\tstyle: \"textBold\",\r\n\t\t\t\t\ttable: {\r\n\t\t\t\t\t\twidths: [80, \"*\"],\r\n\t\t\t\t\t\theaderRows: 1,\r\n\t\t\t\t\t\tlineHeight: 1.5,\r\n\t\t\t\t\t\tbody: [\r\n\t\t\t\t\t\t\t[\r\n\t\t\t\t\t\t\t\t`\\n ${this.config.string.subTotal}`,\r\n\t\t\t\t\t\t\t\t`\\n ${this.currency}${helper.calcSubTotal(\r\n\t\t\t\t\t\t\t\t\tthis.items\r\n\t\t\t\t\t\t\t\t)}`,\r\n\t\t\t\t\t\t\t],\r\n\t\t\t\t\t\t\t[\r\n\t\t\t\t\t\t\t\t`\\n ${this.config.string.totalTax}`,\r\n\t\t\t\t\t\t\t\t`\\n ${this.currency}${helper.calcTax(\r\n\t\t\t\t\t\t\t\t\tthis.items\r\n\t\t\t\t\t\t\t\t)}`,\r\n\t\t\t\t\t\t\t],\r\n\t\t\t\t\t\t\t[\r\n\t\t\t\t\t\t\t\t`\\n ${this.config.string.total}`,\r\n\t\t\t\t\t\t\t\t`\\n ${this.currency}${helper.calcFinalTotal(\r\n\t\t\t\t\t\t\t\t\tthis.items\r\n\t\t\t\t\t\t\t\t)}`,\r\n\t\t\t\t\t\t\t],\r\n\t\t\t\t\t\t],\r\n\t\t\t\t\t},\r\n\t\t\t\t},\r\n\t\t\t],\r\n\t\t};\r\n\r\n\t\tsections.push(sectionTotal);\r\n\r\n\t\t/**\r\n\t\t * Left: QR section.\r\n\t\t *\r\n\t\t * @since 1.0.0\r\n\t\t */\r\n\t\tif (this.payload.qr) {\r\n\t\t\tconst sectionQR = {\r\n\t\t\t\tmargin: [0, 50, 0, 0],\r\n\t\t\t\tqr: this.payload.qr.data,\r\n\t\t\t\tfit: this.payload.qr.width || \"50\",\r\n\t\t\t};\r\n\r\n\t\t\tsections.push(sectionQR);\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Left: Notes section.\r\n\t\t *\r\n\t\t * @since 1.0.0\r\n\t\t */\r\n\t\tif (this.payload.note) {\r\n\t\t\tconst sectionNote = {\r\n\t\t\t\tmargin: [0, this.payload.qr ? 20 : 50, 0, 0],\r\n\t\t\t\ttext: this.payload.note,\r\n\t\t\t\titalics: true,\r\n\t\t\t};\r\n\r\n\t\t\tsections.push(sectionNote);\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Return the invoice sections.\r\n\t\t *\r\n\t\t * @since 1.0.0\r\n\t\t */\r\n\t\treturn sections;\r\n\t}\r\n}\r\n"]} \ No newline at end of file diff --git a/dist/index.mjs b/dist/index.mjs index 68c5f3c..3b8f549 100644 --- a/dist/index.mjs +++ b/dist/index.mjs @@ -1,21 +1,21 @@ -var h=(s=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(s,{get:(t,e)=>(typeof require<"u"?require:t)[e]}):s)(function(s){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+s+'" is not supported')});var f=(s,t)=>()=>(t||s((t={exports:{}}).exports,t),t.exports);var p=f((w,y)=>{var I={calcItemTotal:function(s){let t=s.price||0,e=s.quantity||1;return (t*e).toFixed(2)},calcSubTotal:function(s){if(s.length===0)return 0;let t=0;return s.forEach(e=>{t+=Number(this.calcItemTotal(e));}),t.toFixed(2)},calcTax:function(s){if(s.length===0)return 0;let t=0;return s.forEach(e=>{let a=e.price,c=e.quantity,o=e.tax||0;t+=a*c*o/100;}),t.toFixed(2)},calcFinalTotal:function(s){if(s.length===0)return 0;let t=Number(this.calcSubTotal(s)),e=Number(this.calcTax(s));return (t+e).toFixed(2)}};y.exports=I;});var x=f((C,d)=>{var v={label:{invoice:"I N V O I C E",refNumber:"Ref no: #",date:"Date:",dueDate:"Due Date:",status:"Status:",billTo:"Bill To",item:"Item",quantity:"Qty",price:"Price",tax:"Tax",total:"Total",subTotal:"Subtotal",totalTax:"Total Tax"}};d.exports=v;});var T=h("fs"),k=h("path"),q=h("pdfmake"),l=p(),S=x(),u=class{payload;company;invoice;customer;items;currency;path;qr;note;date;config;constructor(t,e=S){this.payload=t,this.company=t.company,this.customer=t.customer,this.invoice=t.invoice,this.items=t.items,this.qr=t.qr,this.note=t.note,this.currency=this.invoice.currency||"$",this.path=k.resolve(this.invoice.path)||"./invoice.pdf",this.date=new Date().toLocaleDateString("en-US",{year:"numeric",month:"numeric",day:"numeric"}),this.config=e;}async create(){let t=new q(this.fonts()),e={pageSize:"A4",orientation:"portrait",pageMargins:[40,40,40,40],info:this.meta(),content:this.content(),defaultStyle:this.defaultStyle(),styles:this.styles()};return new Promise((a,c)=>{let o=t.createPdfKitDocument(e),r=T.createWriteStream(this.path);o.pipe(r),o.on("end",()=>{a(this.path);}),o.on("error",n=>{c(n);}),o.end();})}fonts(){return {Helvetica:{normal:"Helvetica",bold:"Helvetica-Bold",italics:"Helvetica-Oblique",bolditalics:"Helvetica-BoldOblique"}}}meta(){return {title:"Invoice - #"+this.invoice.number,author:this.company.name,subject:"Invoice - "+this.customer.name,keywords:"invoice"}}defaultStyle(){return {fontSize:10,lineHeight:1.8,bold:!1,font:"Helvetica",color:"#222222",columnGap:30}}styles(){return {h1:{fontSize:18,bold:!0},h2:{fontSize:16,bold:!0},h3:{fontSize:14,bold:!0},text:{fontSize:10,bold:!1},textBold:{fontSize:10,bold:!0}}}content(){let t=[],e={columns:[{width:"70%",stack:[],style:"text"},{width:"30%",stack:[],style:"text"}]};if(this.company.logo){if(!this.company.logo.startsWith("0&&this.items.forEach(i=>{let g=l.calcItemTotal(i);m.table.body.push([` +var u=(s=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(s,{get:(t,e)=>(typeof require<"u"?require:t)[e]}):s)(function(s){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+s+'" is not supported')});var f=(s,t)=>()=>(t||s((t={exports:{}}).exports,t),t.exports);var p=f((w,y)=>{var I={calcItemTotal:function(s){let t=s.price||0,e=s.quantity||1;return (t*e).toFixed(2)},calcSubTotal:function(s){if(s.length===0)return 0;let t=0;return s.forEach(e=>{t+=Number(this.calcItemTotal(e));}),t.toFixed(2)},calcTax:function(s){if(s.length===0)return 0;let t=0;return s.forEach(e=>{let c=e.price,a=e.quantity,o=e.tax||0;t+=c*a*o/100;}),t.toFixed(2)},calcFinalTotal:function(s){if(s.length===0)return 0;let t=Number(this.calcSubTotal(s)),e=Number(this.calcTax(s));return (t+e).toFixed(2)}};y.exports=I;});var g=f((H,d)=>{var v={string:{invoice:"I N V O I C E",refNumber:"Ref no: #",date:"Date:",dueDate:"Due Date:",status:"Status:",billTo:"Bill To",item:"Item",quantity:"Qty",price:"Price",tax:"Tax",total:"Total",subTotal:"Subtotal",totalTax:"Total Tax"},font:{helvetica:{normal:"Helvetica",bold:"Helvetica-Bold",italics:"Helvetica-Oblique",bolditalics:"Helvetica-BoldOblique"},noto:{}}};d.exports=v;});var T=u("fs"),k=u("path"),q=u("pdfmake"),l=p(),S=g(),h=class{payload;company;invoice;customer;items;currency;path;qr;note;date;config;constructor(t,e=S){this.payload=t,this.company=t.company,this.customer=t.customer,this.invoice=t.invoice,this.items=t.items,this.qr=t.qr,this.note=t.note,this.currency=this.invoice.currency||"$",this.path=k.resolve(this.invoice.path)||"./invoice.pdf",this.date=new Date().toLocaleDateString("en-US",{year:"numeric",month:"numeric",day:"numeric"}),this.config=e;}async create(){let t=new q(this.fonts()),e={pageSize:"A4",orientation:"portrait",pageMargins:[40,40,40,40],info:this.meta(),content:this.content(),defaultStyle:this.defaultStyle(),styles:this.styles()};return new Promise((c,a)=>{let o=t.createPdfKitDocument(e),r=T.createWriteStream(this.path);o.pipe(r),o.on("end",()=>{c(this.path);}),o.on("error",n=>{a(n);}),o.end();})}fonts(){return {Helvetica:{normal:"Helvetica",bold:"Helvetica-Bold",italics:"Helvetica-Oblique",bolditalics:"Helvetica-BoldOblique"}}}meta(){return {title:"Invoice - #"+this.invoice.number,author:this.company.name,subject:"Invoice - "+this.customer.name,keywords:"invoice"}}defaultStyle(){return {fontSize:10,lineHeight:1.8,bold:!1,font:"Helvetica",color:"#222222",columnGap:30}}styles(){return {h1:{fontSize:18,bold:!0},h2:{fontSize:16,bold:!0},h3:{fontSize:14,bold:!0},text:{fontSize:10,bold:!1},textBold:{fontSize:10,bold:!0}}}content(){let t=[],e={columns:[{width:"70%",stack:[],style:"text"},{width:"30%",stack:[],style:"text"}]};if(this.company.logo){if(!this.company.logo.startsWith("0&&this.items.forEach(i=>{let b=l.calcItemTotal(i);m.table.body.push([` ${i.name}`,` ${i.quantity}`,` ${this.currency}${i.price}`,` ${i.tax||0}%`,` - ${this.currency}${g}`]);}),t.push(m);let b={margin:[0,20,0,0],columns:[{width:"*",stack:[" "],style:"text"},{width:200,lineHeight:1.5,style:"textBold",table:{widths:[80,"*"],headerRows:1,lineHeight:1.5,body:[[` - ${this.config.label.subTotal}`,` + ${this.currency}${b}`]);}),t.push(m);let x={margin:[0,20,0,0],columns:[{width:"*",stack:[" "],style:"text"},{width:200,lineHeight:1.5,style:"textBold",table:{widths:[80,"*"],headerRows:1,lineHeight:1.5,body:[[` + ${this.config.string.subTotal}`,` ${this.currency}${l.calcSubTotal(this.items)}`],[` - ${this.config.label.totalTax}`,` + ${this.config.string.totalTax}`,` ${this.currency}${l.calcTax(this.items)}`],[` - ${this.config.label.total}`,` - ${this.currency}${l.calcFinalTotal(this.items)}`]]}}]};if(t.push(b),this.payload.qr){let i={margin:[0,50,0,0],qr:this.payload.qr.data,fit:this.payload.qr.width||"50"};t.push(i);}if(this.payload.note){let i={margin:[0,this.payload.qr?20:50,0,0],text:this.payload.note,italics:!0};t.push(i);}return t}}; + ${this.config.string.total}`,` + ${this.currency}${l.calcFinalTotal(this.items)}`]]}}]};if(t.push(x),this.payload.qr){let i={margin:[0,50,0,0],qr:this.payload.qr.data,fit:this.payload.qr.width||"50"};t.push(i);}if(this.payload.note){let i={margin:[0,this.payload.qr?20:50,0,0],text:this.payload.note,italics:!0};t.push(i);}return t}}; -export { u as PDFInvoice }; +export { h as PDFInvoice }; //# sourceMappingURL=out.js.map //# sourceMappingURL=index.mjs.map \ No newline at end of file diff --git a/dist/index.mjs.map b/dist/index.mjs.map index caadcc5..b90852c 100644 --- a/dist/index.mjs.map +++ b/dist/index.mjs.map @@ -1 +1 @@ -{"version":3,"sources":["../src/utils/helper.ts","../src/utils/config.ts","../src/class/invoice.ts"],"names":["require_helper","__commonJSMin","exports","module","helper","item","price","quantity","items","total","tax","subTotal","require_config","defaultConfig","fs","path","invoiceMaker","PDFInvoice","payload","config","printer","docDefinition","resolve","reject","doc","stream","err","sections","sectionCompany","refLabel","dateLabel","dueDateLabel","statusLabel","sectionCustomer","sectionItems","totalPrice","sectionTotal","sectionQR","sectionNote"],"mappings":"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","sourcesContent":["import type { ItemInfo } from \"../../global\";\r\n\r\ninterface Helpers {\r\n\tcalcItemTotal(item: ItemInfo): number | string;\r\n\tcalcTax(items: ItemInfo[]): number | string;\r\n\tcalcSubTotal(items: ItemInfo[]): number | string;\r\n\tcalcFinalTotal(items: ItemInfo[]): number | string;\r\n}\r\n\r\nconst helper: Helpers = {\r\n\t/**\r\n\t * Item total price calculation.\r\n\t *\r\n\t * @param {Object} item.\r\n\t * @returns {number} total.\r\n\t * @since 1.0.0\r\n\t */\r\n\tcalcItemTotal: function (item: ItemInfo): string {\r\n\t\tconst price = item.price || 0;\r\n\t\tconst quantity = item.quantity || 1;\r\n\t\treturn (price * quantity).toFixed(2);\r\n\t},\r\n\r\n\t/**\r\n\t * Calculate subtotal.\r\n\t *\r\n\t * @param {Object} items.\r\n\t * @returns {number} total.\r\n\t * @since 1.0.0\r\n\t */\r\n\tcalcSubTotal: function (items: ItemInfo[]): number | string {\r\n\t\tif (items.length === 0) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\tlet total = 0;\r\n\r\n\t\titems.forEach((item) => {\r\n\t\t\ttotal += Number(this.calcItemTotal(item));\r\n\t\t});\r\n\r\n\t\treturn total.toFixed(2);\r\n\t},\r\n\r\n\t/**\r\n\t * Calculate tax.\r\n\t *\r\n\t * @param {Object} items.\r\n\t * @returns {number} total.\r\n\t * @since 1.0.0\r\n\t */\r\n\tcalcTax: function (items: ItemInfo[]): number | string {\r\n\t\tif (items.length === 0) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\tlet total = 0;\r\n\r\n\t\titems.forEach((item) => {\r\n\t\t\tconst price = item.price;\r\n\t\t\tconst quantity = item.quantity;\r\n\t\t\tconst tax = item.tax || 0;\r\n\r\n\t\t\ttotal += (price * quantity * tax) / 100;\r\n\t\t});\r\n\r\n\t\treturn total.toFixed(2);\r\n\t},\r\n\r\n\t/**\r\n\t * Calculate total final price.\r\n\t *\r\n\t * @param {Object} items.\r\n\t * @returns {number} total.\r\n\t * @since 1.0.0\r\n\t */\r\n\tcalcFinalTotal: function (items: ItemInfo[]): number | string {\r\n\t\tif (items.length === 0) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\tconst subTotal = Number(this.calcSubTotal(items));\r\n\t\tconst tax = Number(this.calcTax(items));\r\n\r\n\t\treturn (subTotal + tax).toFixed(2);\r\n\t},\r\n};\r\n\r\nmodule.exports = helper;\r\n","/**\r\n * Holds the default configuration.\r\n *\r\n * @returns {Object} config.\r\n * @since 1.0.7\r\n */\r\nconst defaultConfig = {\r\n\tlabel: {\r\n\t\tinvoice: \"I N V O I C E\",\r\n\t\trefNumber: \"Ref no: #\",\r\n\t\tdate: \"Date:\",\r\n\t\tdueDate: \"Due Date:\",\r\n\t\tstatus: \"Status:\",\r\n\t\tbillTo: \"Bill To\",\r\n\t\titem: \"Item\",\r\n\t\tquantity: \"Qty\",\r\n\t\tprice: \"Price\",\r\n\t\ttax: \"Tax\",\r\n\t\ttotal: \"Total\",\r\n\t\tsubTotal: \"Subtotal\",\r\n\t\ttotalTax: \"Total Tax\",\r\n\t},\r\n};\r\n\r\nmodule.exports = defaultConfig;\r\n","const fs = require(\"fs\");\r\nconst path = require(\"path\");\r\nconst invoiceMaker = require(\"pdfmake\");\r\nconst helper = require(\"../utils/helper\");\r\nconst defaultConfig = require(\"../utils/config\");\r\n\r\nimport type {\r\n\tCompanyInfo,\r\n\tCustomerInfo,\r\n\tInvoiceInfo,\r\n\tItemInfo,\r\n\tQRInfo,\r\n\tNotes,\r\n\tInvoicePayLoad,\r\n\tSimplePDFInvoice,\r\n\tConfiguration,\r\n} from \"../../global\";\r\n\r\nexport class PDFInvoice implements SimplePDFInvoice {\r\n\tpayload: InvoicePayLoad;\r\n\tcompany: CompanyInfo;\r\n\tinvoice: InvoiceInfo;\r\n\tcustomer: CustomerInfo;\r\n\titems: ItemInfo[];\r\n\tcurrency: string;\r\n\tpath: string;\r\n\tqr: QRInfo;\r\n\tnote: Notes;\r\n\tdate: string;\r\n\tconfig: Configuration;\r\n\tconstructor(\r\n\t\tpayload: InvoicePayLoad,\r\n\t\tconfig: Configuration = defaultConfig\r\n\t) {\r\n\t\tthis.payload = payload;\r\n\r\n\t\t// Invoice content section.\r\n\t\tthis.company = payload.company;\r\n\t\tthis.customer = payload.customer;\r\n\t\tthis.invoice = payload.invoice;\r\n\t\tthis.items = payload.items;\r\n\t\tthis.qr = payload.qr;\r\n\t\tthis.note = payload.note;\r\n\r\n\t\t// Invoice currency.\r\n\t\tthis.currency = this.invoice.currency || \"$\";\r\n\r\n\t\t// Path.\r\n\t\tthis.path = path.resolve(this.invoice.path) || \"./invoice.pdf\";\r\n\r\n\t\t// Invoice information.\r\n\t\tthis.date = new Date().toLocaleDateString(\"en-US\", {\r\n\t\t\tyear: \"numeric\",\r\n\t\t\tmonth: \"numeric\",\r\n\t\t\tday: \"numeric\",\r\n\t\t});\r\n\r\n\t\t// Configuration.\r\n\t\tthis.config = config;\r\n\t}\r\n\r\n\t/**\r\n\t * Create a PDF invoice.\r\n\t *\r\n\t * @returns {void}\r\n\t * @since 1.0.0\r\n\t */\r\n\tasync create(): Promise {\r\n\t\tconst printer = new invoiceMaker(this.fonts());\r\n\r\n\t\tconst docDefinition = {\r\n\t\t\tpageSize: \"A4\",\r\n\t\t\torientation: \"portrait\",\r\n\t\t\tpageMargins: [40, 40, 40, 40],\r\n\t\t\tinfo: this.meta(),\r\n\t\t\tcontent: this.content(),\r\n\t\t\tdefaultStyle: this.defaultStyle(),\r\n\t\t\tstyles: this.styles(),\r\n\t\t};\r\n\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tconst doc = printer.createPdfKitDocument(docDefinition);\r\n\t\t\tconst stream = fs.createWriteStream(this.path);\r\n\r\n\t\t\tdoc.pipe(stream);\r\n\r\n\t\t\tdoc.on(\"end\", () => {\r\n\t\t\t\tresolve(this.path);\r\n\t\t\t});\r\n\r\n\t\t\tdoc.on(\"error\", (err: any) => {\r\n\t\t\t\treject(err);\r\n\t\t\t});\r\n\r\n\t\t\tdoc.end();\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Fonts.\r\n\t *\r\n\t * @returns {Object} font.\r\n\t * @since 1.0.0\r\n\t */\r\n\tfonts(): any {\r\n\t\tconst fonts = {\r\n\t\t\tHelvetica: {\r\n\t\t\t\tnormal: \"Helvetica\",\r\n\t\t\t\tbold: \"Helvetica-Bold\",\r\n\t\t\t\titalics: \"Helvetica-Oblique\",\r\n\t\t\t\tbolditalics: \"Helvetica-BoldOblique\",\r\n\t\t\t},\r\n\t\t};\r\n\r\n\t\treturn fonts;\r\n\t}\r\n\r\n\t/**\r\n\t * Doc meta.\r\n\t *\r\n\t * @returns {Object} meta.\r\n\t * @since 1.0.0\r\n\t */\r\n\tmeta(): any {\r\n\t\tconst meta = {\r\n\t\t\ttitle: \"Invoice - #\" + this.invoice.number,\r\n\t\t\tauthor: this.company.name,\r\n\t\t\tsubject: \"Invoice - \" + this.customer.name,\r\n\t\t\tkeywords: \"invoice\",\r\n\t\t};\r\n\r\n\t\treturn meta;\r\n\t}\r\n\r\n\t/**\r\n\t * Default invoice styles.\r\n\t *\r\n\t * @returns {Object} defaults.\r\n\t * @since 1.0.0\r\n\t */\r\n\tdefaultStyle(): any {\r\n\t\tconst defaults = {\r\n\t\t\tfontSize: 10,\r\n\t\t\tlineHeight: 1.8,\r\n\t\t\tbold: false,\r\n\t\t\tfont: \"Helvetica\",\r\n\t\t\tcolor: \"#222222\",\r\n\t\t\tcolumnGap: 30,\r\n\t\t};\r\n\t\treturn defaults;\r\n\t}\r\n\r\n\t/**\r\n\t * Invoice styles.\r\n\t *\r\n\t * @returns {Object} defaults.\r\n\t * @since 1.0.0\r\n\t */\r\n\tstyles(): any {\r\n\t\tconst styles = {\r\n\t\t\th1: {\r\n\t\t\t\tfontSize: 18,\r\n\t\t\t\tbold: true,\r\n\t\t\t},\r\n\t\t\th2: {\r\n\t\t\t\tfontSize: 16,\r\n\t\t\t\tbold: true,\r\n\t\t\t},\r\n\t\t\th3: {\r\n\t\t\t\tfontSize: 14,\r\n\t\t\t\tbold: true,\r\n\t\t\t},\r\n\t\t\ttext: {\r\n\t\t\t\tfontSize: 10,\r\n\t\t\t\tbold: false,\r\n\t\t\t},\r\n\t\t\ttextBold: {\r\n\t\t\t\tfontSize: 10,\r\n\t\t\t\tbold: true,\r\n\t\t\t},\r\n\t\t};\r\n\t\treturn styles;\r\n\t}\r\n\r\n\t/**\r\n\t * Return the invoice layout.\r\n\t *\r\n\t * @returns {Object} layout.\r\n\t * @since 1.0.0\r\n\t */\r\n\tcontent(): any {\r\n\t\tconst sections = [];\r\n\r\n\t\t/**\r\n\t\t * Left: Company section.\r\n\t\t * Right: Invoice section.\r\n\t\t *\r\n\t\t * @since 1.0.0\r\n\t\t */\r\n\t\tconst sectionCompany = {\r\n\t\t\tcolumns: [\r\n\t\t\t\t{\r\n\t\t\t\t\twidth: \"70%\",\r\n\t\t\t\t\tstack: [] as any,\r\n\t\t\t\t\tstyle: \"text\",\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\twidth: \"30%\",\r\n\t\t\t\t\tstack: [] as any,\r\n\t\t\t\t\tstyle: \"text\",\r\n\t\t\t\t},\r\n\t\t\t],\r\n\t\t};\r\n\r\n\t\tif (this.company.logo) {\r\n\t\t\tif (!this.company.logo.startsWith(\" 0) {\r\n\t\t\tthis.items.forEach((item) => {\r\n\t\t\t\tconst totalPrice = helper.calcItemTotal(item);\r\n\r\n\t\t\t\tsectionItems.table.body.push([\r\n\t\t\t\t\t`\\n ${item.name}`,\r\n\t\t\t\t\t`\\n ${item.quantity}`,\r\n\t\t\t\t\t`\\n ${this.currency}${item.price}`,\r\n\t\t\t\t\t`\\n ${item.tax || 0}%`,\r\n\t\t\t\t\t`\\n ${this.currency}${totalPrice}`,\r\n\t\t\t\t]);\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tsections.push(sectionItems);\r\n\r\n\t\t/**\r\n\t\t * Right: Total section.\r\n\t\t *\r\n\t\t * @since 1.0.0\r\n\t\t */\r\n\t\tconst sectionTotal = {\r\n\t\t\tmargin: [0, 20, 0, 0],\r\n\t\t\tcolumns: [\r\n\t\t\t\t{\r\n\t\t\t\t\twidth: \"*\",\r\n\t\t\t\t\tstack: [\" \"],\r\n\t\t\t\t\tstyle: \"text\",\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\twidth: 200,\r\n\t\t\t\t\tlineHeight: 1.5,\r\n\t\t\t\t\tstyle: \"textBold\",\r\n\t\t\t\t\ttable: {\r\n\t\t\t\t\t\twidths: [80, \"*\"],\r\n\t\t\t\t\t\theaderRows: 1,\r\n\t\t\t\t\t\tlineHeight: 1.5,\r\n\t\t\t\t\t\tbody: [\r\n\t\t\t\t\t\t\t[\r\n\t\t\t\t\t\t\t\t`\\n ${this.config.label.subTotal}`,\r\n\t\t\t\t\t\t\t\t`\\n ${this.currency}${helper.calcSubTotal(\r\n\t\t\t\t\t\t\t\t\tthis.items\r\n\t\t\t\t\t\t\t\t)}`,\r\n\t\t\t\t\t\t\t],\r\n\t\t\t\t\t\t\t[\r\n\t\t\t\t\t\t\t\t`\\n ${this.config.label.totalTax}`,\r\n\t\t\t\t\t\t\t\t`\\n ${this.currency}${helper.calcTax(\r\n\t\t\t\t\t\t\t\t\tthis.items\r\n\t\t\t\t\t\t\t\t)}`,\r\n\t\t\t\t\t\t\t],\r\n\t\t\t\t\t\t\t[\r\n\t\t\t\t\t\t\t\t`\\n ${this.config.label.total}`,\r\n\t\t\t\t\t\t\t\t`\\n ${this.currency}${helper.calcFinalTotal(\r\n\t\t\t\t\t\t\t\t\tthis.items\r\n\t\t\t\t\t\t\t\t)}`,\r\n\t\t\t\t\t\t\t],\r\n\t\t\t\t\t\t],\r\n\t\t\t\t\t},\r\n\t\t\t\t},\r\n\t\t\t],\r\n\t\t};\r\n\r\n\t\tsections.push(sectionTotal);\r\n\r\n\t\t/**\r\n\t\t * Left: QR section.\r\n\t\t *\r\n\t\t * @since 1.0.0\r\n\t\t */\r\n\t\tif (this.payload.qr) {\r\n\t\t\tconst sectionQR = {\r\n\t\t\t\tmargin: [0, 50, 0, 0],\r\n\t\t\t\tqr: this.payload.qr.data,\r\n\t\t\t\tfit: this.payload.qr.width || \"50\",\r\n\t\t\t};\r\n\r\n\t\t\tsections.push(sectionQR);\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Left: Notes section.\r\n\t\t *\r\n\t\t * @since 1.0.0\r\n\t\t */\r\n\t\tif (this.payload.note) {\r\n\t\t\tconst sectionNote = {\r\n\t\t\t\tmargin: [0, this.payload.qr ? 20 : 50, 0, 0],\r\n\t\t\t\ttext: this.payload.note,\r\n\t\t\t\titalics: true,\r\n\t\t\t};\r\n\r\n\t\t\tsections.push(sectionNote);\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Return the invoice sections.\r\n\t\t *\r\n\t\t * @since 1.0.0\r\n\t\t */\r\n\t\treturn sections;\r\n\t}\r\n}\r\n"]} \ No newline at end of file +{"version":3,"sources":["../src/utils/helper.ts","../src/utils/config.ts","../src/class/invoice.ts"],"names":["require_helper","__commonJSMin","exports","module","helper","item","price","quantity","items","total","tax","subTotal","require_config","defaultConfig","fs","path","invoiceMaker","PDFInvoice","payload","config","printer","docDefinition","resolve","reject","doc","stream","err","sections","sectionCompany","refLabel","dateLabel","dueDateLabel","statusLabel","sectionCustomer","sectionItems","totalPrice","sectionTotal","sectionQR","sectionNote"],"mappings":"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","sourcesContent":["import type { ItemInfo } from \"../../global\";\r\n\r\ninterface Helpers {\r\n\tcalcItemTotal(item: ItemInfo): number | string;\r\n\tcalcTax(items: ItemInfo[]): number | string;\r\n\tcalcSubTotal(items: ItemInfo[]): number | string;\r\n\tcalcFinalTotal(items: ItemInfo[]): number | string;\r\n}\r\n\r\nconst helper: Helpers = {\r\n\t/**\r\n\t * Item total price calculation.\r\n\t *\r\n\t * @param {Object} item.\r\n\t * @returns {number} total.\r\n\t * @since 1.0.0\r\n\t */\r\n\tcalcItemTotal: function (item: ItemInfo): string {\r\n\t\tconst price = item.price || 0;\r\n\t\tconst quantity = item.quantity || 1;\r\n\t\treturn (price * quantity).toFixed(2);\r\n\t},\r\n\r\n\t/**\r\n\t * Calculate subtotal.\r\n\t *\r\n\t * @param {Object} items.\r\n\t * @returns {number} total.\r\n\t * @since 1.0.0\r\n\t */\r\n\tcalcSubTotal: function (items: ItemInfo[]): number | string {\r\n\t\tif (items.length === 0) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\tlet total = 0;\r\n\r\n\t\titems.forEach((item) => {\r\n\t\t\ttotal += Number(this.calcItemTotal(item));\r\n\t\t});\r\n\r\n\t\treturn total.toFixed(2);\r\n\t},\r\n\r\n\t/**\r\n\t * Calculate tax.\r\n\t *\r\n\t * @param {Object} items.\r\n\t * @returns {number} total.\r\n\t * @since 1.0.0\r\n\t */\r\n\tcalcTax: function (items: ItemInfo[]): number | string {\r\n\t\tif (items.length === 0) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\tlet total = 0;\r\n\r\n\t\titems.forEach((item) => {\r\n\t\t\tconst price = item.price;\r\n\t\t\tconst quantity = item.quantity;\r\n\t\t\tconst tax = item.tax || 0;\r\n\r\n\t\t\ttotal += (price * quantity * tax) / 100;\r\n\t\t});\r\n\r\n\t\treturn total.toFixed(2);\r\n\t},\r\n\r\n\t/**\r\n\t * Calculate total final price.\r\n\t *\r\n\t * @param {Object} items.\r\n\t * @returns {number} total.\r\n\t * @since 1.0.0\r\n\t */\r\n\tcalcFinalTotal: function (items: ItemInfo[]): number | string {\r\n\t\tif (items.length === 0) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\tconst subTotal = Number(this.calcSubTotal(items));\r\n\t\tconst tax = Number(this.calcTax(items));\r\n\r\n\t\treturn (subTotal + tax).toFixed(2);\r\n\t},\r\n};\r\n\r\nmodule.exports = helper;\r\n","/**\r\n * Holds the default configuration.\r\n *\r\n * @returns {Object} config.\r\n * @since 1.0.7\r\n */\r\nconst defaultConfig = {\r\n\tstring: {\r\n\t\tinvoice: \"I N V O I C E\",\r\n\t\trefNumber: \"Ref no: #\",\r\n\t\tdate: \"Date:\",\r\n\t\tdueDate: \"Due Date:\",\r\n\t\tstatus: \"Status:\",\r\n\t\tbillTo: \"Bill To\",\r\n\t\titem: \"Item\",\r\n\t\tquantity: \"Qty\",\r\n\t\tprice: \"Price\",\r\n\t\ttax: \"Tax\",\r\n\t\ttotal: \"Total\",\r\n\t\tsubTotal: \"Subtotal\",\r\n\t\ttotalTax: \"Total Tax\",\r\n\t},\r\n\tfont: {\r\n\t\thelvetica: {\r\n\t\t\tnormal: \"Helvetica\",\r\n\t\t\tbold: \"Helvetica-Bold\",\r\n\t\t\titalics: \"Helvetica-Oblique\",\r\n\t\t\tbolditalics: \"Helvetica-BoldOblique\",\r\n\t\t},\r\n noto: {\r\n \r\n }\r\n\t},\r\n};\r\n\r\nmodule.exports = defaultConfig;\r\n","const fs = require(\"fs\");\r\nconst path = require(\"path\");\r\nconst invoiceMaker = require(\"pdfmake\");\r\nconst helper = require(\"../utils/helper\");\r\nconst defaultConfig = require(\"../utils/config\");\r\n\r\nimport type {\r\n\tCompanyInfo,\r\n\tCustomerInfo,\r\n\tInvoiceInfo,\r\n\tItemInfo,\r\n\tQRInfo,\r\n\tNotes,\r\n\tInvoicePayLoad,\r\n\tSimplePDFInvoice,\r\n\tConfiguration,\r\n} from \"../../global\";\r\n\r\nexport class PDFInvoice implements SimplePDFInvoice {\r\n\tpayload: InvoicePayLoad;\r\n\tcompany: CompanyInfo;\r\n\tinvoice: InvoiceInfo;\r\n\tcustomer: CustomerInfo;\r\n\titems: ItemInfo[];\r\n\tcurrency: string;\r\n\tpath: string;\r\n\tqr: QRInfo;\r\n\tnote: Notes;\r\n\tdate: string;\r\n\tconfig: Configuration;\r\n\tconstructor(\r\n\t\tpayload: InvoicePayLoad,\r\n\t\tconfig: Configuration = defaultConfig\r\n\t) {\r\n\t\tthis.payload = payload;\r\n\r\n\t\t// Invoice content section.\r\n\t\tthis.company = payload.company;\r\n\t\tthis.customer = payload.customer;\r\n\t\tthis.invoice = payload.invoice;\r\n\t\tthis.items = payload.items;\r\n\t\tthis.qr = payload.qr;\r\n\t\tthis.note = payload.note;\r\n\r\n\t\t// Invoice currency.\r\n\t\tthis.currency = this.invoice.currency || \"$\";\r\n\r\n\t\t// Path.\r\n\t\tthis.path = path.resolve(this.invoice.path) || \"./invoice.pdf\";\r\n\r\n\t\t// Invoice information.\r\n\t\tthis.date = new Date().toLocaleDateString(\"en-US\", {\r\n\t\t\tyear: \"numeric\",\r\n\t\t\tmonth: \"numeric\",\r\n\t\t\tday: \"numeric\",\r\n\t\t});\r\n\r\n\t\t// Configuration.\r\n\t\tthis.config = config;\r\n\t}\r\n\r\n\t/**\r\n\t * Create a PDF invoice.\r\n\t *\r\n\t * @returns {void}\r\n\t * @since 1.0.0\r\n\t */\r\n\tasync create(): Promise {\r\n\t\tconst printer = new invoiceMaker(this.fonts());\r\n\r\n\t\tconst docDefinition = {\r\n\t\t\tpageSize: \"A4\",\r\n\t\t\torientation: \"portrait\",\r\n\t\t\tpageMargins: [40, 40, 40, 40],\r\n\t\t\tinfo: this.meta(),\r\n\t\t\tcontent: this.content(),\r\n\t\t\tdefaultStyle: this.defaultStyle(),\r\n\t\t\tstyles: this.styles(),\r\n\t\t};\r\n\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tconst doc = printer.createPdfKitDocument(docDefinition);\r\n\t\t\tconst stream = fs.createWriteStream(this.path);\r\n\r\n\t\t\tdoc.pipe(stream);\r\n\r\n\t\t\tdoc.on(\"end\", () => {\r\n\t\t\t\tresolve(this.path);\r\n\t\t\t});\r\n\r\n\t\t\tdoc.on(\"error\", (err: any) => {\r\n\t\t\t\treject(err);\r\n\t\t\t});\r\n\r\n\t\t\tdoc.end();\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Fonts.\r\n\t *\r\n\t * @returns {Object} font.\r\n\t * @since 1.0.0\r\n\t */\r\n\tfonts(): any {\r\n\t\tconst fonts = {\r\n\t\t\tHelvetica: {\r\n\t\t\t\tnormal: \"Helvetica\",\r\n\t\t\t\tbold: \"Helvetica-Bold\",\r\n\t\t\t\titalics: \"Helvetica-Oblique\",\r\n\t\t\t\tbolditalics: \"Helvetica-BoldOblique\",\r\n\t\t\t},\r\n\t\t};\r\n\r\n\t\treturn fonts;\r\n\t}\r\n\r\n\t/**\r\n\t * Doc meta.\r\n\t *\r\n\t * @returns {Object} meta.\r\n\t * @since 1.0.0\r\n\t */\r\n\tmeta(): any {\r\n\t\tconst meta = {\r\n\t\t\ttitle: \"Invoice - #\" + this.invoice.number,\r\n\t\t\tauthor: this.company.name,\r\n\t\t\tsubject: \"Invoice - \" + this.customer.name,\r\n\t\t\tkeywords: \"invoice\",\r\n\t\t};\r\n\r\n\t\treturn meta;\r\n\t}\r\n\r\n\t/**\r\n\t * Default invoice styles.\r\n\t *\r\n\t * @returns {Object} defaults.\r\n\t * @since 1.0.0\r\n\t */\r\n\tdefaultStyle(): any {\r\n\t\tconst defaults = {\r\n\t\t\tfontSize: 10,\r\n\t\t\tlineHeight: 1.8,\r\n\t\t\tbold: false,\r\n\t\t\tfont: \"Helvetica\",\r\n\t\t\tcolor: \"#222222\",\r\n\t\t\tcolumnGap: 30,\r\n\t\t};\r\n\t\treturn defaults;\r\n\t}\r\n\r\n\t/**\r\n\t * Invoice styles.\r\n\t *\r\n\t * @returns {Object} defaults.\r\n\t * @since 1.0.0\r\n\t */\r\n\tstyles(): any {\r\n\t\tconst styles = {\r\n\t\t\th1: {\r\n\t\t\t\tfontSize: 18,\r\n\t\t\t\tbold: true,\r\n\t\t\t},\r\n\t\t\th2: {\r\n\t\t\t\tfontSize: 16,\r\n\t\t\t\tbold: true,\r\n\t\t\t},\r\n\t\t\th3: {\r\n\t\t\t\tfontSize: 14,\r\n\t\t\t\tbold: true,\r\n\t\t\t},\r\n\t\t\ttext: {\r\n\t\t\t\tfontSize: 10,\r\n\t\t\t\tbold: false,\r\n\t\t\t},\r\n\t\t\ttextBold: {\r\n\t\t\t\tfontSize: 10,\r\n\t\t\t\tbold: true,\r\n\t\t\t},\r\n\t\t};\r\n\t\treturn styles;\r\n\t}\r\n\r\n\t/**\r\n\t * Return the invoice layout.\r\n\t *\r\n\t * @returns {Object} layout.\r\n\t * @since 1.0.0\r\n\t */\r\n\tcontent(): any {\r\n\t\tconst sections = [];\r\n\r\n\t\t/**\r\n\t\t * Left: Company section.\r\n\t\t * Right: Invoice section.\r\n\t\t *\r\n\t\t * @since 1.0.0\r\n\t\t */\r\n\t\tconst sectionCompany = {\r\n\t\t\tcolumns: [\r\n\t\t\t\t{\r\n\t\t\t\t\twidth: \"70%\",\r\n\t\t\t\t\tstack: [] as any,\r\n\t\t\t\t\tstyle: \"text\",\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\twidth: \"30%\",\r\n\t\t\t\t\tstack: [] as any,\r\n\t\t\t\t\tstyle: \"text\",\r\n\t\t\t\t},\r\n\t\t\t],\r\n\t\t};\r\n\r\n\t\tif (this.company.logo) {\r\n\t\t\tif (!this.company.logo.startsWith(\" 0) {\r\n\t\t\tthis.items.forEach((item) => {\r\n\t\t\t\tconst totalPrice = helper.calcItemTotal(item);\r\n\r\n\t\t\t\tsectionItems.table.body.push([\r\n\t\t\t\t\t`\\n ${item.name}`,\r\n\t\t\t\t\t`\\n ${item.quantity}`,\r\n\t\t\t\t\t`\\n ${this.currency}${item.price}`,\r\n\t\t\t\t\t`\\n ${item.tax || 0}%`,\r\n\t\t\t\t\t`\\n ${this.currency}${totalPrice}`,\r\n\t\t\t\t]);\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tsections.push(sectionItems);\r\n\r\n\t\t/**\r\n\t\t * Right: Total section.\r\n\t\t *\r\n\t\t * @since 1.0.0\r\n\t\t */\r\n\t\tconst sectionTotal = {\r\n\t\t\tmargin: [0, 20, 0, 0],\r\n\t\t\tcolumns: [\r\n\t\t\t\t{\r\n\t\t\t\t\twidth: \"*\",\r\n\t\t\t\t\tstack: [\" \"],\r\n\t\t\t\t\tstyle: \"text\",\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\twidth: 200,\r\n\t\t\t\t\tlineHeight: 1.5,\r\n\t\t\t\t\tstyle: \"textBold\",\r\n\t\t\t\t\ttable: {\r\n\t\t\t\t\t\twidths: [80, \"*\"],\r\n\t\t\t\t\t\theaderRows: 1,\r\n\t\t\t\t\t\tlineHeight: 1.5,\r\n\t\t\t\t\t\tbody: [\r\n\t\t\t\t\t\t\t[\r\n\t\t\t\t\t\t\t\t`\\n ${this.config.string.subTotal}`,\r\n\t\t\t\t\t\t\t\t`\\n ${this.currency}${helper.calcSubTotal(\r\n\t\t\t\t\t\t\t\t\tthis.items\r\n\t\t\t\t\t\t\t\t)}`,\r\n\t\t\t\t\t\t\t],\r\n\t\t\t\t\t\t\t[\r\n\t\t\t\t\t\t\t\t`\\n ${this.config.string.totalTax}`,\r\n\t\t\t\t\t\t\t\t`\\n ${this.currency}${helper.calcTax(\r\n\t\t\t\t\t\t\t\t\tthis.items\r\n\t\t\t\t\t\t\t\t)}`,\r\n\t\t\t\t\t\t\t],\r\n\t\t\t\t\t\t\t[\r\n\t\t\t\t\t\t\t\t`\\n ${this.config.string.total}`,\r\n\t\t\t\t\t\t\t\t`\\n ${this.currency}${helper.calcFinalTotal(\r\n\t\t\t\t\t\t\t\t\tthis.items\r\n\t\t\t\t\t\t\t\t)}`,\r\n\t\t\t\t\t\t\t],\r\n\t\t\t\t\t\t],\r\n\t\t\t\t\t},\r\n\t\t\t\t},\r\n\t\t\t],\r\n\t\t};\r\n\r\n\t\tsections.push(sectionTotal);\r\n\r\n\t\t/**\r\n\t\t * Left: QR section.\r\n\t\t *\r\n\t\t * @since 1.0.0\r\n\t\t */\r\n\t\tif (this.payload.qr) {\r\n\t\t\tconst sectionQR = {\r\n\t\t\t\tmargin: [0, 50, 0, 0],\r\n\t\t\t\tqr: this.payload.qr.data,\r\n\t\t\t\tfit: this.payload.qr.width || \"50\",\r\n\t\t\t};\r\n\r\n\t\t\tsections.push(sectionQR);\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Left: Notes section.\r\n\t\t *\r\n\t\t * @since 1.0.0\r\n\t\t */\r\n\t\tif (this.payload.note) {\r\n\t\t\tconst sectionNote = {\r\n\t\t\t\tmargin: [0, this.payload.qr ? 20 : 50, 0, 0],\r\n\t\t\t\ttext: this.payload.note,\r\n\t\t\t\titalics: true,\r\n\t\t\t};\r\n\r\n\t\t\tsections.push(sectionNote);\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Return the invoice sections.\r\n\t\t *\r\n\t\t * @since 1.0.0\r\n\t\t */\r\n\t\treturn sections;\r\n\t}\r\n}\r\n"]} \ No newline at end of file diff --git a/dist/utils/config.js b/dist/utils/config.js index 0869fa7..0f51e9f 100644 --- a/dist/utils/config.js +++ b/dist/utils/config.js @@ -1,6 +1,6 @@ 'use strict'; -var l=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var i=l((T,a)=>{var o={label:{invoice:"I N V O I C E",refNumber:"Ref no: #",date:"Date:",dueDate:"Due Date:",status:"Status:",billTo:"Bill To",item:"Item",quantity:"Qty",price:"Price",tax:"Tax",total:"Total",subTotal:"Subtotal",totalTax:"Total Tax"}};a.exports=o;});var config = i(); +var l=(a,t)=>()=>(t||a((t={exports:{}}).exports,t),t.exports);var o=l((u,e)=>{var i={string:{invoice:"I N V O I C E",refNumber:"Ref no: #",date:"Date:",dueDate:"Due Date:",status:"Status:",billTo:"Bill To",item:"Item",quantity:"Qty",price:"Price",tax:"Tax",total:"Total",subTotal:"Subtotal",totalTax:"Total Tax"},font:{helvetica:{normal:"Helvetica",bold:"Helvetica-Bold",italics:"Helvetica-Oblique",bolditalics:"Helvetica-BoldOblique"},noto:{}}};e.exports=i;});var config = o(); module.exports = config; //# sourceMappingURL=out.js.map diff --git a/dist/utils/config.js.map b/dist/utils/config.js.map index 5607e90..bdf3a93 100644 --- a/dist/utils/config.js.map +++ b/dist/utils/config.js.map @@ -1 +1 @@ -{"version":3,"sources":["../../src/utils/config.ts"],"names":["require_config","__commonJSMin","exports","module","defaultConfig"],"mappings":"8DAAA,IAAAA,EAAAC,EAAA,CAAAC,EAAAC,IAAA,CAMA,IAAMC,EAAgB,CACrB,MAAO,CACN,QAAS,gBACT,UAAW,YACX,KAAM,QACN,QAAS,YACT,OAAQ,UACR,OAAQ,UACR,KAAM,OACN,SAAU,MACV,MAAO,QACP,IAAK,MACL,MAAO,QACP,SAAU,WACV,SAAU,WACX,CACD,EAEAD,EAAO,QAAUC","sourcesContent":["/**\r\n * Holds the default configuration.\r\n *\r\n * @returns {Object} config.\r\n * @since 1.0.7\r\n */\r\nconst defaultConfig = {\r\n\tlabel: {\r\n\t\tinvoice: \"I N V O I C E\",\r\n\t\trefNumber: \"Ref no: #\",\r\n\t\tdate: \"Date:\",\r\n\t\tdueDate: \"Due Date:\",\r\n\t\tstatus: \"Status:\",\r\n\t\tbillTo: \"Bill To\",\r\n\t\titem: \"Item\",\r\n\t\tquantity: \"Qty\",\r\n\t\tprice: \"Price\",\r\n\t\ttax: \"Tax\",\r\n\t\ttotal: \"Total\",\r\n\t\tsubTotal: \"Subtotal\",\r\n\t\ttotalTax: \"Total Tax\",\r\n\t},\r\n};\r\n\r\nmodule.exports = defaultConfig;\r\n"]} \ No newline at end of file +{"version":3,"sources":["../../src/utils/config.ts"],"names":["require_config","__commonJSMin","exports","module","defaultConfig"],"mappings":"8DAAA,IAAAA,EAAAC,EAAA,CAAAC,EAAAC,IAAA,CAMA,IAAMC,EAAgB,CACrB,OAAQ,CACP,QAAS,gBACT,UAAW,YACX,KAAM,QACN,QAAS,YACT,OAAQ,UACR,OAAQ,UACR,KAAM,OACN,SAAU,MACV,MAAO,QACP,IAAK,MACL,MAAO,QACP,SAAU,WACV,SAAU,WACX,EACA,KAAM,CACL,UAAW,CACV,OAAQ,YACR,KAAM,iBACN,QAAS,oBACT,YAAa,uBACd,EACM,KAAM,CAEN,CACP,CACD,EAEAD,EAAO,QAAUC","sourcesContent":["/**\r\n * Holds the default configuration.\r\n *\r\n * @returns {Object} config.\r\n * @since 1.0.7\r\n */\r\nconst defaultConfig = {\r\n\tstring: {\r\n\t\tinvoice: \"I N V O I C E\",\r\n\t\trefNumber: \"Ref no: #\",\r\n\t\tdate: \"Date:\",\r\n\t\tdueDate: \"Due Date:\",\r\n\t\tstatus: \"Status:\",\r\n\t\tbillTo: \"Bill To\",\r\n\t\titem: \"Item\",\r\n\t\tquantity: \"Qty\",\r\n\t\tprice: \"Price\",\r\n\t\ttax: \"Tax\",\r\n\t\ttotal: \"Total\",\r\n\t\tsubTotal: \"Subtotal\",\r\n\t\ttotalTax: \"Total Tax\",\r\n\t},\r\n\tfont: {\r\n\t\thelvetica: {\r\n\t\t\tnormal: \"Helvetica\",\r\n\t\t\tbold: \"Helvetica-Bold\",\r\n\t\t\titalics: \"Helvetica-Oblique\",\r\n\t\t\tbolditalics: \"Helvetica-BoldOblique\",\r\n\t\t},\r\n noto: {\r\n \r\n }\r\n\t},\r\n};\r\n\r\nmodule.exports = defaultConfig;\r\n"]} \ No newline at end of file diff --git a/dist/utils/config.mjs b/dist/utils/config.mjs index 473ccdb..0d05ca6 100644 --- a/dist/utils/config.mjs +++ b/dist/utils/config.mjs @@ -1,4 +1,4 @@ -var l=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var i=l((T,a)=>{var o={label:{invoice:"I N V O I C E",refNumber:"Ref no: #",date:"Date:",dueDate:"Due Date:",status:"Status:",billTo:"Bill To",item:"Item",quantity:"Qty",price:"Price",tax:"Tax",total:"Total",subTotal:"Subtotal",totalTax:"Total Tax"}};a.exports=o;});var config = i(); +var l=(a,t)=>()=>(t||a((t={exports:{}}).exports,t),t.exports);var o=l((u,e)=>{var i={string:{invoice:"I N V O I C E",refNumber:"Ref no: #",date:"Date:",dueDate:"Due Date:",status:"Status:",billTo:"Bill To",item:"Item",quantity:"Qty",price:"Price",tax:"Tax",total:"Total",subTotal:"Subtotal",totalTax:"Total Tax"},font:{helvetica:{normal:"Helvetica",bold:"Helvetica-Bold",italics:"Helvetica-Oblique",bolditalics:"Helvetica-BoldOblique"},noto:{}}};e.exports=i;});var config = o(); export { config as default }; //# sourceMappingURL=out.js.map diff --git a/dist/utils/config.mjs.map b/dist/utils/config.mjs.map index 5607e90..bdf3a93 100644 --- a/dist/utils/config.mjs.map +++ b/dist/utils/config.mjs.map @@ -1 +1 @@ -{"version":3,"sources":["../../src/utils/config.ts"],"names":["require_config","__commonJSMin","exports","module","defaultConfig"],"mappings":"8DAAA,IAAAA,EAAAC,EAAA,CAAAC,EAAAC,IAAA,CAMA,IAAMC,EAAgB,CACrB,MAAO,CACN,QAAS,gBACT,UAAW,YACX,KAAM,QACN,QAAS,YACT,OAAQ,UACR,OAAQ,UACR,KAAM,OACN,SAAU,MACV,MAAO,QACP,IAAK,MACL,MAAO,QACP,SAAU,WACV,SAAU,WACX,CACD,EAEAD,EAAO,QAAUC","sourcesContent":["/**\r\n * Holds the default configuration.\r\n *\r\n * @returns {Object} config.\r\n * @since 1.0.7\r\n */\r\nconst defaultConfig = {\r\n\tlabel: {\r\n\t\tinvoice: \"I N V O I C E\",\r\n\t\trefNumber: \"Ref no: #\",\r\n\t\tdate: \"Date:\",\r\n\t\tdueDate: \"Due Date:\",\r\n\t\tstatus: \"Status:\",\r\n\t\tbillTo: \"Bill To\",\r\n\t\titem: \"Item\",\r\n\t\tquantity: \"Qty\",\r\n\t\tprice: \"Price\",\r\n\t\ttax: \"Tax\",\r\n\t\ttotal: \"Total\",\r\n\t\tsubTotal: \"Subtotal\",\r\n\t\ttotalTax: \"Total Tax\",\r\n\t},\r\n};\r\n\r\nmodule.exports = defaultConfig;\r\n"]} \ No newline at end of file +{"version":3,"sources":["../../src/utils/config.ts"],"names":["require_config","__commonJSMin","exports","module","defaultConfig"],"mappings":"8DAAA,IAAAA,EAAAC,EAAA,CAAAC,EAAAC,IAAA,CAMA,IAAMC,EAAgB,CACrB,OAAQ,CACP,QAAS,gBACT,UAAW,YACX,KAAM,QACN,QAAS,YACT,OAAQ,UACR,OAAQ,UACR,KAAM,OACN,SAAU,MACV,MAAO,QACP,IAAK,MACL,MAAO,QACP,SAAU,WACV,SAAU,WACX,EACA,KAAM,CACL,UAAW,CACV,OAAQ,YACR,KAAM,iBACN,QAAS,oBACT,YAAa,uBACd,EACM,KAAM,CAEN,CACP,CACD,EAEAD,EAAO,QAAUC","sourcesContent":["/**\r\n * Holds the default configuration.\r\n *\r\n * @returns {Object} config.\r\n * @since 1.0.7\r\n */\r\nconst defaultConfig = {\r\n\tstring: {\r\n\t\tinvoice: \"I N V O I C E\",\r\n\t\trefNumber: \"Ref no: #\",\r\n\t\tdate: \"Date:\",\r\n\t\tdueDate: \"Due Date:\",\r\n\t\tstatus: \"Status:\",\r\n\t\tbillTo: \"Bill To\",\r\n\t\titem: \"Item\",\r\n\t\tquantity: \"Qty\",\r\n\t\tprice: \"Price\",\r\n\t\ttax: \"Tax\",\r\n\t\ttotal: \"Total\",\r\n\t\tsubTotal: \"Subtotal\",\r\n\t\ttotalTax: \"Total Tax\",\r\n\t},\r\n\tfont: {\r\n\t\thelvetica: {\r\n\t\t\tnormal: \"Helvetica\",\r\n\t\t\tbold: \"Helvetica-Bold\",\r\n\t\t\titalics: \"Helvetica-Oblique\",\r\n\t\t\tbolditalics: \"Helvetica-BoldOblique\",\r\n\t\t},\r\n noto: {\r\n \r\n }\r\n\t},\r\n};\r\n\r\nmodule.exports = defaultConfig;\r\n"]} \ No newline at end of file diff --git a/examples/example.ts b/examples/example.ts index 0740448..d5781db 100644 --- a/examples/example.ts +++ b/examples/example.ts @@ -58,9 +58,9 @@ const payload = { Optional: Config -------------------------------------------------------------------------- */ const config = { - label: { + string: { invoice: "F A C T U A", - refNumber: "Referencia #", + refNumber: "Referencia", date: "Fecha", dueDate: "Fecha de vencimiento", status: "Estado", diff --git a/examples/invoice.pdf b/examples/invoice.pdf index b9e8172c4035c7864521c6b25e2d8bbe534b239b..7948e080461f9a02b46de368fcf7f3898788642b 100644 GIT binary patch delta 9006 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 delta 8997 zcmaiV1x#FR*DdbubP5bstQ2>5Xz^0K#Rm7{I@sXD;O<`B9g0gSPH~sw?p7{+zk6@K zv?JnID&3e&^ zlIBpy`h^U7@(MB!WckZfL6Ac0X5w2dEi znVaCSMnnu*k7te92XU%>SXNWtIZiYG7oxW>!Mj7Z?>CYo_O)IdmTrRuRjbQ-;d(0I zZqHTe4|%WF;Ffb`T2N>){H;0mySP^UG?^RQ+^K-r`kEr0yv7wc*j0^TUR2S1Vt{2S zyN`Ywjs7sQ@x*<6TfA>d+xUE;b?#5?Nn5?Hj zq~aLYsM<`1)TZJtmU+KzfsWP;$kW4JfTzfYjTM%tz9*kb{!Z{wzysgHP z5$%hA$U{oKBlrkn*U6GCJ4yI9VyeiO}6>{|C_=N3PYPSI?KqljJb|_cX zq}3M*_gG$s`7LuB^1#yS(?5$Gvu?p(1GTKlS?$dlm=f$fcn-1BL-$8;>WKkv-<>RV z<0ebsOamsX4HF{9;FqMlzQyN*qgIY3IP`r2SrAhQ?fPV}RT;30VZHhSU{i#Q>$;RC$8d;(_iJ5CLj(Ce@@MA&9Fa5*`FGzljavhG{B*v{-z(J|5+Y zUA2#0BBT4|H9OQeXQ)dA7(fw4W0=*(Sg)ak{A)}5QR1reWG^@&Ja7lxqhyV!(74)c zF*5HGbhwDr$6at#-oI>plJ=hZgE1B_a{**%hQ_31QW544;}91RPj3lPS+s?d)!jLyj2%b6-YOu;+%4Zm|+_w)lnMA}-GYvt8U zY1affLTNwwtPX3vC0sZ#p9{~!HqDbf-`mMyzrYRV|Ngcazanw2AGb;(aG^~Q#hA-) z-BRtBn_);DdzDHPV0W7AY|F4Sk4*jvVTD1PNR_4d;fMgSN=K?Hn#?dQc-$Rn5MMrp zn4FN>{&#_ZuW}J64^O96pxneTo-%G7jS8(*CU^W5@GDLn8v1LnTkluz#ghzt%h!l2 zKcdIwK=?RGYIlP)>Dd>4X}iDCND6B>nvDUt?6GJe1zYEaR<|k44(0@oeqIEQSgO6> zzF=xCwbJyWZ5g@7C?GSraIZ*FsPfK27^tu{!{o&_9NB-fCMn!t+qk`r)p*yt!FPH$ zRB-8fBXp@|Ut8YB>Vt)L_CAf&YqA9F@tdw)7b=A%6_6G0c1l6S0qatk)LuN5%$1={!RFSqNh zf5Giuh(D3wBgRZo?m(Nrf*w!^=hxuok6#ac%oRG9+IVO$lGUA(mZdw32}n zjS~^AFrPrM?<;u|uCneq5`O~p_u|2BkV4aT; znhJXb<&xcZYwA{|neK%XM{E46#rFE*WwnMt)a}MNASOQ;`uXvebkoJlH6Q9B>|dD%%4 z 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 IQIW;?Kl&W& Date: Sat, 20 Jan 2024 23:29:19 +0545 Subject: [PATCH 3/5] :newspaper: Updated doc. - :newspaper: Updated doc. --- README.md | 50 ++++++++++++++++++++++++++++++++++++++++++- examples/invoice.pdf | Bin 11645 -> 11645 bytes src/utils/config.ts | 3 --- 3 files changed, 49 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 0a90440..d9a16aa 100644 --- a/README.md +++ b/README.md @@ -268,6 +268,50 @@ handleInvoice(); Once you call the `create` method, it will return a promise. You can either use `async/await` or `.then()` to handle the promise. The `create` method will return the path to the PDF file if the PDF is generated successfully. Otherwise, it will throw an error. +## Configuration + +If required you can change the configuration of the invoice. It is an object with the following structure: + +```js +const { PDFInvoice } = require('@h1dd3nsn1p3r/pdf-invoice'); + +const create = async(): Promise => { + + const payload = { + // .... + }; + + const config = { + // Custom labels. + string: { + invoice: "F A C T U A", + refNumber: "Referencia", + date: "Fecha", + dueDate: "Fecha de vencimiento", + status: "Estado", + billTo: "Facturar a", + item: "Artículo", + quantity: "Cantidad", + price: "Precio", + tax: "Impuesto", + total: "Total", + subTotal: "Subtotal", + totalTax: "Total Impuesto", + }, + }; + + // Create the invoice. + const invoice = new PDFInvoice(payload, config); + const pdf = await invoice.create(); + + console.log(pdf); +} +``` + +### Config limitations: + +For now only `latin` characters are supported. It seems like a limitation of `Helvetica` font. I'll be adding support for other languages soon. + ## Types This library is written in TypeScript. If you need to import the types, then you can import them from `global.d.ts` file. Refer to [Global types](https://github.com/h1dd3nsn1p3r/pdf-invoice/blob/stable/global.d.ts) file for more information. @@ -282,8 +326,12 @@ import type { CompanyInfo, CustomerInfo, InvoiceInfo, ItemInfo, QRInfo, InvoiceP Refer to [releases](https://github.com/h1dd3nsn1p3r/pdf-invoice/releases) section for more information. +## Contributing + +Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change. + ## Todo - [ ] Add design/style options. -- [ ] Add configuration options. +- [ ] Add configuration options - (Strings, Fonts, Styles, etc.) - [ ] Add support for multi-language. diff --git a/examples/invoice.pdf b/examples/invoice.pdf index 7948e080461f9a02b46de368fcf7f3898788642b..57999ec060924ed720ff14b0f91e942e0d948b84 100644 GIT binary patch delta 88 zcmewx^*3t6Idv8jLqo&Om(+b&oh(h$l1$Cb(@av6%~Q<{3{uV0QcR3Z4AYVg%neLZ PE$kF*2q>AHpeqXi0|^?R delta 88 zcmewx^*3t6Idv8zb3^0Jm(+b&oeYx_4Gb(&%+gGfOf1qYO%lx#lhVvBO)SkUOiYp! PE$kF*2q>AHpeqXi0t_0X diff --git a/src/utils/config.ts b/src/utils/config.ts index fc78e89..1bdbdec 100644 --- a/src/utils/config.ts +++ b/src/utils/config.ts @@ -27,9 +27,6 @@ const defaultConfig = { italics: "Helvetica-Oblique", bolditalics: "Helvetica-BoldOblique", }, - //noto: { - - //} }, }; From 010ccf2fd4e94e4feb0101f0f68edd4d7de4a0b1 Mon Sep 17 00:00:00 2001 From: Anuj Subedi Date: Sat, 20 Jan 2024 23:47:09 +0545 Subject: [PATCH 4/5] :bug: Fix: Default labels. - :bug: Fix: Default labels. --- dist/class/invoice.js | 2 +- dist/class/invoice.js.map | 2 +- dist/class/invoice.mjs | 2 +- dist/class/invoice.mjs.map | 2 +- dist/index.js | 2 +- dist/index.js.map | 2 +- dist/index.mjs | 2 +- dist/index.mjs.map | 2 +- dist/utils/config.js | 2 +- dist/utils/config.js.map | 2 +- dist/utils/config.mjs | 2 +- dist/utils/config.mjs.map | 2 +- examples/invoice.pdf | Bin 11645 -> 11645 bytes src/utils/config.ts | 8 ++++---- 14 files changed, 16 insertions(+), 16 deletions(-) diff --git a/dist/class/invoice.js b/dist/class/invoice.js index 9a958b5..fff5b12 100644 --- a/dist/class/invoice.js +++ b/dist/class/invoice.js @@ -1,6 +1,6 @@ 'use strict'; -var u=(s=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(s,{get:(t,e)=>(typeof require<"u"?require:t)[e]}):s)(function(s){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+s+'" is not supported')});var m=(s,t)=>()=>(t||s((t={exports:{}}).exports,t),t.exports);var y=m((w,f)=>{var I={calcItemTotal:function(s){let t=s.price||0,e=s.quantity||1;return (t*e).toFixed(2)},calcSubTotal:function(s){if(s.length===0)return 0;let t=0;return s.forEach(e=>{t+=Number(this.calcItemTotal(e));}),t.toFixed(2)},calcTax:function(s){if(s.length===0)return 0;let t=0;return s.forEach(e=>{let c=e.price,a=e.quantity,o=e.tax||0;t+=c*a*o/100;}),t.toFixed(2)},calcFinalTotal:function(s){if(s.length===0)return 0;let t=Number(this.calcSubTotal(s)),e=Number(this.calcTax(s));return (t+e).toFixed(2)}};f.exports=I;});var d=m((H,p)=>{var v={string:{invoice:"I N V O I C E",refNumber:"Ref no: #",date:"Date:",dueDate:"Due Date:",status:"Status:",billTo:"Bill To",item:"Item",quantity:"Qty",price:"Price",tax:"Tax",total:"Total",subTotal:"Subtotal",totalTax:"Total Tax"},font:{helvetica:{normal:"Helvetica",bold:"Helvetica-Bold",italics:"Helvetica-Oblique",bolditalics:"Helvetica-BoldOblique"},noto:{}}};p.exports=v;});var T=u("fs"),k=u("path"),q=u("pdfmake"),l=y(),S=d(),g=class{payload;company;invoice;customer;items;currency;path;qr;note;date;config;constructor(t,e=S){this.payload=t,this.company=t.company,this.customer=t.customer,this.invoice=t.invoice,this.items=t.items,this.qr=t.qr,this.note=t.note,this.currency=this.invoice.currency||"$",this.path=k.resolve(this.invoice.path)||"./invoice.pdf",this.date=new Date().toLocaleDateString("en-US",{year:"numeric",month:"numeric",day:"numeric"}),this.config=e;}async create(){let t=new q(this.fonts()),e={pageSize:"A4",orientation:"portrait",pageMargins:[40,40,40,40],info:this.meta(),content:this.content(),defaultStyle:this.defaultStyle(),styles:this.styles()};return new Promise((c,a)=>{let o=t.createPdfKitDocument(e),r=T.createWriteStream(this.path);o.pipe(r),o.on("end",()=>{c(this.path);}),o.on("error",n=>{a(n);}),o.end();})}fonts(){return {Helvetica:{normal:"Helvetica",bold:"Helvetica-Bold",italics:"Helvetica-Oblique",bolditalics:"Helvetica-BoldOblique"}}}meta(){return {title:"Invoice - #"+this.invoice.number,author:this.company.name,subject:"Invoice - "+this.customer.name,keywords:"invoice"}}defaultStyle(){return {fontSize:10,lineHeight:1.8,bold:!1,font:"Helvetica",color:"#222222",columnGap:30}}styles(){return {h1:{fontSize:18,bold:!0},h2:{fontSize:16,bold:!0},h3:{fontSize:14,bold:!0},text:{fontSize:10,bold:!1},textBold:{fontSize:10,bold:!0}}}content(){let t=[],e={columns:[{width:"70%",stack:[],style:"text"},{width:"30%",stack:[],style:"text"}]};if(this.company.logo){if(!this.company.logo.startsWith("typeof require<"u"?require:typeof Proxy<"u"?new Proxy(s,{get:(t,e)=>(typeof require<"u"?require:t)[e]}):s)(function(s){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+s+'" is not supported')});var m=(s,t)=>()=>(t||s((t={exports:{}}).exports,t),t.exports);var y=m((w,f)=>{var I={calcItemTotal:function(s){let t=s.price||0,e=s.quantity||1;return (t*e).toFixed(2)},calcSubTotal:function(s){if(s.length===0)return 0;let t=0;return s.forEach(e=>{t+=Number(this.calcItemTotal(e));}),t.toFixed(2)},calcTax:function(s){if(s.length===0)return 0;let t=0;return s.forEach(e=>{let c=e.price,a=e.quantity,o=e.tax||0;t+=c*a*o/100;}),t.toFixed(2)},calcFinalTotal:function(s){if(s.length===0)return 0;let t=Number(this.calcSubTotal(s)),e=Number(this.calcTax(s));return (t+e).toFixed(2)}};f.exports=I;});var d=m((H,p)=>{var v={string:{invoice:"I N V O I C E",refNumber:"Ref no",date:"Date",dueDate:"Due Date",status:"Status",billTo:"Bill To",item:"Item",quantity:"Qty",price:"Price",tax:"Tax",total:"Total",subTotal:"Subtotal",totalTax:"Total Tax"},font:{helvetica:{normal:"Helvetica",bold:"Helvetica-Bold",italics:"Helvetica-Oblique",bolditalics:"Helvetica-BoldOblique"}}};p.exports=v;});var T=u("fs"),k=u("path"),q=u("pdfmake"),l=y(),S=d(),g=class{payload;company;invoice;customer;items;currency;path;qr;note;date;config;constructor(t,e=S){this.payload=t,this.company=t.company,this.customer=t.customer,this.invoice=t.invoice,this.items=t.items,this.qr=t.qr,this.note=t.note,this.currency=this.invoice.currency||"$",this.path=k.resolve(this.invoice.path)||"./invoice.pdf",this.date=new Date().toLocaleDateString("en-US",{year:"numeric",month:"numeric",day:"numeric"}),this.config=e;}async create(){let t=new q(this.fonts()),e={pageSize:"A4",orientation:"portrait",pageMargins:[40,40,40,40],info:this.meta(),content:this.content(),defaultStyle:this.defaultStyle(),styles:this.styles()};return new Promise((c,a)=>{let o=t.createPdfKitDocument(e),r=T.createWriteStream(this.path);o.pipe(r),o.on("end",()=>{c(this.path);}),o.on("error",n=>{a(n);}),o.end();})}fonts(){return {Helvetica:{normal:"Helvetica",bold:"Helvetica-Bold",italics:"Helvetica-Oblique",bolditalics:"Helvetica-BoldOblique"}}}meta(){return {title:"Invoice - #"+this.invoice.number,author:this.company.name,subject:"Invoice - "+this.customer.name,keywords:"invoice"}}defaultStyle(){return {fontSize:10,lineHeight:1.8,bold:!1,font:"Helvetica",color:"#222222",columnGap:30}}styles(){return {h1:{fontSize:18,bold:!0},h2:{fontSize:16,bold:!0},h3:{fontSize:14,bold:!0},text:{fontSize:10,bold:!1},textBold:{fontSize:10,bold:!0}}}content(){let t=[],e={columns:[{width:"70%",stack:[],style:"text"},{width:"30%",stack:[],style:"text"}]};if(this.company.logo){if(!this.company.logo.startsWith(" {\r\n\t\t\ttotal += Number(this.calcItemTotal(item));\r\n\t\t});\r\n\r\n\t\treturn total.toFixed(2);\r\n\t},\r\n\r\n\t/**\r\n\t * Calculate tax.\r\n\t *\r\n\t * @param {Object} items.\r\n\t * @returns {number} total.\r\n\t * @since 1.0.0\r\n\t */\r\n\tcalcTax: function (items: ItemInfo[]): number | string {\r\n\t\tif (items.length === 0) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\tlet total = 0;\r\n\r\n\t\titems.forEach((item) => {\r\n\t\t\tconst price = item.price;\r\n\t\t\tconst quantity = item.quantity;\r\n\t\t\tconst tax = item.tax || 0;\r\n\r\n\t\t\ttotal += (price * quantity * tax) / 100;\r\n\t\t});\r\n\r\n\t\treturn total.toFixed(2);\r\n\t},\r\n\r\n\t/**\r\n\t * Calculate total final price.\r\n\t *\r\n\t * @param {Object} items.\r\n\t * @returns {number} total.\r\n\t * @since 1.0.0\r\n\t */\r\n\tcalcFinalTotal: function (items: ItemInfo[]): number | string {\r\n\t\tif (items.length === 0) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\tconst subTotal = Number(this.calcSubTotal(items));\r\n\t\tconst tax = Number(this.calcTax(items));\r\n\r\n\t\treturn (subTotal + tax).toFixed(2);\r\n\t},\r\n};\r\n\r\nmodule.exports = helper;\r\n","/**\r\n * Holds the default configuration.\r\n *\r\n * @returns {Object} config.\r\n * @since 1.0.7\r\n */\r\nconst defaultConfig = {\r\n\tstring: {\r\n\t\tinvoice: \"I N V O I C E\",\r\n\t\trefNumber: \"Ref no: #\",\r\n\t\tdate: \"Date:\",\r\n\t\tdueDate: \"Due Date:\",\r\n\t\tstatus: \"Status:\",\r\n\t\tbillTo: \"Bill To\",\r\n\t\titem: \"Item\",\r\n\t\tquantity: \"Qty\",\r\n\t\tprice: \"Price\",\r\n\t\ttax: \"Tax\",\r\n\t\ttotal: \"Total\",\r\n\t\tsubTotal: \"Subtotal\",\r\n\t\ttotalTax: \"Total Tax\",\r\n\t},\r\n\tfont: {\r\n\t\thelvetica: {\r\n\t\t\tnormal: \"Helvetica\",\r\n\t\t\tbold: \"Helvetica-Bold\",\r\n\t\t\titalics: \"Helvetica-Oblique\",\r\n\t\t\tbolditalics: \"Helvetica-BoldOblique\",\r\n\t\t},\r\n noto: {\r\n \r\n }\r\n\t},\r\n};\r\n\r\nmodule.exports = defaultConfig;\r\n","const fs = require(\"fs\");\r\nconst path = require(\"path\");\r\nconst invoiceMaker = require(\"pdfmake\");\r\nconst helper = require(\"../utils/helper\");\r\nconst defaultConfig = require(\"../utils/config\");\r\n\r\nimport type {\r\n\tCompanyInfo,\r\n\tCustomerInfo,\r\n\tInvoiceInfo,\r\n\tItemInfo,\r\n\tQRInfo,\r\n\tNotes,\r\n\tInvoicePayLoad,\r\n\tSimplePDFInvoice,\r\n\tConfiguration,\r\n} from \"../../global\";\r\n\r\nexport class PDFInvoice implements SimplePDFInvoice {\r\n\tpayload: InvoicePayLoad;\r\n\tcompany: CompanyInfo;\r\n\tinvoice: InvoiceInfo;\r\n\tcustomer: CustomerInfo;\r\n\titems: ItemInfo[];\r\n\tcurrency: string;\r\n\tpath: string;\r\n\tqr: QRInfo;\r\n\tnote: Notes;\r\n\tdate: string;\r\n\tconfig: Configuration;\r\n\tconstructor(\r\n\t\tpayload: InvoicePayLoad,\r\n\t\tconfig: Configuration = defaultConfig\r\n\t) {\r\n\t\tthis.payload = payload;\r\n\r\n\t\t// Invoice content section.\r\n\t\tthis.company = payload.company;\r\n\t\tthis.customer = payload.customer;\r\n\t\tthis.invoice = payload.invoice;\r\n\t\tthis.items = payload.items;\r\n\t\tthis.qr = payload.qr;\r\n\t\tthis.note = payload.note;\r\n\r\n\t\t// Invoice currency.\r\n\t\tthis.currency = this.invoice.currency || \"$\";\r\n\r\n\t\t// Path.\r\n\t\tthis.path = path.resolve(this.invoice.path) || \"./invoice.pdf\";\r\n\r\n\t\t// Invoice information.\r\n\t\tthis.date = new Date().toLocaleDateString(\"en-US\", {\r\n\t\t\tyear: \"numeric\",\r\n\t\t\tmonth: \"numeric\",\r\n\t\t\tday: \"numeric\",\r\n\t\t});\r\n\r\n\t\t// Configuration.\r\n\t\tthis.config = config;\r\n\t}\r\n\r\n\t/**\r\n\t * Create a PDF invoice.\r\n\t *\r\n\t * @returns {void}\r\n\t * @since 1.0.0\r\n\t */\r\n\tasync create(): Promise {\r\n\t\tconst printer = new invoiceMaker(this.fonts());\r\n\r\n\t\tconst docDefinition = {\r\n\t\t\tpageSize: \"A4\",\r\n\t\t\torientation: \"portrait\",\r\n\t\t\tpageMargins: [40, 40, 40, 40],\r\n\t\t\tinfo: this.meta(),\r\n\t\t\tcontent: this.content(),\r\n\t\t\tdefaultStyle: this.defaultStyle(),\r\n\t\t\tstyles: this.styles(),\r\n\t\t};\r\n\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tconst doc = printer.createPdfKitDocument(docDefinition);\r\n\t\t\tconst stream = fs.createWriteStream(this.path);\r\n\r\n\t\t\tdoc.pipe(stream);\r\n\r\n\t\t\tdoc.on(\"end\", () => {\r\n\t\t\t\tresolve(this.path);\r\n\t\t\t});\r\n\r\n\t\t\tdoc.on(\"error\", (err: any) => {\r\n\t\t\t\treject(err);\r\n\t\t\t});\r\n\r\n\t\t\tdoc.end();\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Fonts.\r\n\t *\r\n\t * @returns {Object} font.\r\n\t * @since 1.0.0\r\n\t */\r\n\tfonts(): any {\r\n\t\tconst fonts = {\r\n\t\t\tHelvetica: {\r\n\t\t\t\tnormal: \"Helvetica\",\r\n\t\t\t\tbold: \"Helvetica-Bold\",\r\n\t\t\t\titalics: \"Helvetica-Oblique\",\r\n\t\t\t\tbolditalics: \"Helvetica-BoldOblique\",\r\n\t\t\t},\r\n\t\t};\r\n\r\n\t\treturn fonts;\r\n\t}\r\n\r\n\t/**\r\n\t * Doc meta.\r\n\t *\r\n\t * @returns {Object} meta.\r\n\t * @since 1.0.0\r\n\t */\r\n\tmeta(): any {\r\n\t\tconst meta = {\r\n\t\t\ttitle: \"Invoice - #\" + this.invoice.number,\r\n\t\t\tauthor: this.company.name,\r\n\t\t\tsubject: \"Invoice - \" + this.customer.name,\r\n\t\t\tkeywords: \"invoice\",\r\n\t\t};\r\n\r\n\t\treturn meta;\r\n\t}\r\n\r\n\t/**\r\n\t * Default invoice styles.\r\n\t *\r\n\t * @returns {Object} defaults.\r\n\t * @since 1.0.0\r\n\t */\r\n\tdefaultStyle(): any {\r\n\t\tconst defaults = {\r\n\t\t\tfontSize: 10,\r\n\t\t\tlineHeight: 1.8,\r\n\t\t\tbold: false,\r\n\t\t\tfont: \"Helvetica\",\r\n\t\t\tcolor: \"#222222\",\r\n\t\t\tcolumnGap: 30,\r\n\t\t};\r\n\t\treturn defaults;\r\n\t}\r\n\r\n\t/**\r\n\t * Invoice styles.\r\n\t *\r\n\t * @returns {Object} defaults.\r\n\t * @since 1.0.0\r\n\t */\r\n\tstyles(): any {\r\n\t\tconst styles = {\r\n\t\t\th1: {\r\n\t\t\t\tfontSize: 18,\r\n\t\t\t\tbold: true,\r\n\t\t\t},\r\n\t\t\th2: {\r\n\t\t\t\tfontSize: 16,\r\n\t\t\t\tbold: true,\r\n\t\t\t},\r\n\t\t\th3: {\r\n\t\t\t\tfontSize: 14,\r\n\t\t\t\tbold: true,\r\n\t\t\t},\r\n\t\t\ttext: {\r\n\t\t\t\tfontSize: 10,\r\n\t\t\t\tbold: false,\r\n\t\t\t},\r\n\t\t\ttextBold: {\r\n\t\t\t\tfontSize: 10,\r\n\t\t\t\tbold: true,\r\n\t\t\t},\r\n\t\t};\r\n\t\treturn styles;\r\n\t}\r\n\r\n\t/**\r\n\t * Return the invoice layout.\r\n\t *\r\n\t * @returns {Object} layout.\r\n\t * @since 1.0.0\r\n\t */\r\n\tcontent(): any {\r\n\t\tconst sections = [];\r\n\r\n\t\t/**\r\n\t\t * Left: Company section.\r\n\t\t * Right: Invoice section.\r\n\t\t *\r\n\t\t * @since 1.0.0\r\n\t\t */\r\n\t\tconst sectionCompany = {\r\n\t\t\tcolumns: [\r\n\t\t\t\t{\r\n\t\t\t\t\twidth: \"70%\",\r\n\t\t\t\t\tstack: [] as any,\r\n\t\t\t\t\tstyle: \"text\",\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\twidth: \"30%\",\r\n\t\t\t\t\tstack: [] as any,\r\n\t\t\t\t\tstyle: \"text\",\r\n\t\t\t\t},\r\n\t\t\t],\r\n\t\t};\r\n\r\n\t\tif (this.company.logo) {\r\n\t\t\tif (!this.company.logo.startsWith(\" 0) {\r\n\t\t\tthis.items.forEach((item) => {\r\n\t\t\t\tconst totalPrice = helper.calcItemTotal(item);\r\n\r\n\t\t\t\tsectionItems.table.body.push([\r\n\t\t\t\t\t`\\n ${item.name}`,\r\n\t\t\t\t\t`\\n ${item.quantity}`,\r\n\t\t\t\t\t`\\n ${this.currency}${item.price}`,\r\n\t\t\t\t\t`\\n ${item.tax || 0}%`,\r\n\t\t\t\t\t`\\n ${this.currency}${totalPrice}`,\r\n\t\t\t\t]);\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tsections.push(sectionItems);\r\n\r\n\t\t/**\r\n\t\t * Right: Total section.\r\n\t\t *\r\n\t\t * @since 1.0.0\r\n\t\t */\r\n\t\tconst sectionTotal = {\r\n\t\t\tmargin: [0, 20, 0, 0],\r\n\t\t\tcolumns: [\r\n\t\t\t\t{\r\n\t\t\t\t\twidth: \"*\",\r\n\t\t\t\t\tstack: [\" \"],\r\n\t\t\t\t\tstyle: \"text\",\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\twidth: 200,\r\n\t\t\t\t\tlineHeight: 1.5,\r\n\t\t\t\t\tstyle: \"textBold\",\r\n\t\t\t\t\ttable: {\r\n\t\t\t\t\t\twidths: [80, \"*\"],\r\n\t\t\t\t\t\theaderRows: 1,\r\n\t\t\t\t\t\tlineHeight: 1.5,\r\n\t\t\t\t\t\tbody: [\r\n\t\t\t\t\t\t\t[\r\n\t\t\t\t\t\t\t\t`\\n ${this.config.string.subTotal}`,\r\n\t\t\t\t\t\t\t\t`\\n ${this.currency}${helper.calcSubTotal(\r\n\t\t\t\t\t\t\t\t\tthis.items\r\n\t\t\t\t\t\t\t\t)}`,\r\n\t\t\t\t\t\t\t],\r\n\t\t\t\t\t\t\t[\r\n\t\t\t\t\t\t\t\t`\\n ${this.config.string.totalTax}`,\r\n\t\t\t\t\t\t\t\t`\\n ${this.currency}${helper.calcTax(\r\n\t\t\t\t\t\t\t\t\tthis.items\r\n\t\t\t\t\t\t\t\t)}`,\r\n\t\t\t\t\t\t\t],\r\n\t\t\t\t\t\t\t[\r\n\t\t\t\t\t\t\t\t`\\n ${this.config.string.total}`,\r\n\t\t\t\t\t\t\t\t`\\n ${this.currency}${helper.calcFinalTotal(\r\n\t\t\t\t\t\t\t\t\tthis.items\r\n\t\t\t\t\t\t\t\t)}`,\r\n\t\t\t\t\t\t\t],\r\n\t\t\t\t\t\t],\r\n\t\t\t\t\t},\r\n\t\t\t\t},\r\n\t\t\t],\r\n\t\t};\r\n\r\n\t\tsections.push(sectionTotal);\r\n\r\n\t\t/**\r\n\t\t * Left: QR section.\r\n\t\t *\r\n\t\t * @since 1.0.0\r\n\t\t */\r\n\t\tif (this.payload.qr) {\r\n\t\t\tconst sectionQR = {\r\n\t\t\t\tmargin: [0, 50, 0, 0],\r\n\t\t\t\tqr: this.payload.qr.data,\r\n\t\t\t\tfit: this.payload.qr.width || \"50\",\r\n\t\t\t};\r\n\r\n\t\t\tsections.push(sectionQR);\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Left: Notes section.\r\n\t\t *\r\n\t\t * @since 1.0.0\r\n\t\t */\r\n\t\tif (this.payload.note) {\r\n\t\t\tconst sectionNote = {\r\n\t\t\t\tmargin: [0, this.payload.qr ? 20 : 50, 0, 0],\r\n\t\t\t\ttext: this.payload.note,\r\n\t\t\t\titalics: true,\r\n\t\t\t};\r\n\r\n\t\t\tsections.push(sectionNote);\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Return the invoice sections.\r\n\t\t *\r\n\t\t * @since 1.0.0\r\n\t\t */\r\n\t\treturn sections;\r\n\t}\r\n}\r\n"]} \ No newline at end of file +{"version":3,"sources":["../../src/utils/helper.ts","../../src/utils/config.ts","../../src/class/invoice.ts"],"names":["require_helper","__commonJSMin","exports","module","helper","item","price","quantity","items","total","tax","subTotal","require_config","defaultConfig","fs","path","invoiceMaker","PDFInvoice","payload","config","printer","docDefinition","resolve","reject","doc","stream","err","sections","sectionCompany","refLabel","dateLabel","dueDateLabel","statusLabel","sectionCustomer","sectionItems","totalPrice","sectionTotal","sectionQR","sectionNote"],"mappings":"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","sourcesContent":["import type { ItemInfo } from \"../../global\";\r\n\r\ninterface Helpers {\r\n\tcalcItemTotal(item: ItemInfo): number | string;\r\n\tcalcTax(items: ItemInfo[]): number | string;\r\n\tcalcSubTotal(items: ItemInfo[]): number | string;\r\n\tcalcFinalTotal(items: ItemInfo[]): number | string;\r\n}\r\n\r\nconst helper: Helpers = {\r\n\t/**\r\n\t * Item total price calculation.\r\n\t *\r\n\t * @param {Object} item.\r\n\t * @returns {number} total.\r\n\t * @since 1.0.0\r\n\t */\r\n\tcalcItemTotal: function (item: ItemInfo): string {\r\n\t\tconst price = item.price || 0;\r\n\t\tconst quantity = item.quantity || 1;\r\n\t\treturn (price * quantity).toFixed(2);\r\n\t},\r\n\r\n\t/**\r\n\t * Calculate subtotal.\r\n\t *\r\n\t * @param {Object} items.\r\n\t * @returns {number} total.\r\n\t * @since 1.0.0\r\n\t */\r\n\tcalcSubTotal: function (items: ItemInfo[]): number | string {\r\n\t\tif (items.length === 0) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\tlet total = 0;\r\n\r\n\t\titems.forEach((item) => {\r\n\t\t\ttotal += Number(this.calcItemTotal(item));\r\n\t\t});\r\n\r\n\t\treturn total.toFixed(2);\r\n\t},\r\n\r\n\t/**\r\n\t * Calculate tax.\r\n\t *\r\n\t * @param {Object} items.\r\n\t * @returns {number} total.\r\n\t * @since 1.0.0\r\n\t */\r\n\tcalcTax: function (items: ItemInfo[]): number | string {\r\n\t\tif (items.length === 0) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\tlet total = 0;\r\n\r\n\t\titems.forEach((item) => {\r\n\t\t\tconst price = item.price;\r\n\t\t\tconst quantity = item.quantity;\r\n\t\t\tconst tax = item.tax || 0;\r\n\r\n\t\t\ttotal += (price * quantity * tax) / 100;\r\n\t\t});\r\n\r\n\t\treturn total.toFixed(2);\r\n\t},\r\n\r\n\t/**\r\n\t * Calculate total final price.\r\n\t *\r\n\t * @param {Object} items.\r\n\t * @returns {number} total.\r\n\t * @since 1.0.0\r\n\t */\r\n\tcalcFinalTotal: function (items: ItemInfo[]): number | string {\r\n\t\tif (items.length === 0) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\tconst subTotal = Number(this.calcSubTotal(items));\r\n\t\tconst tax = Number(this.calcTax(items));\r\n\r\n\t\treturn (subTotal + tax).toFixed(2);\r\n\t},\r\n};\r\n\r\nmodule.exports = helper;\r\n","/**\r\n * Holds the default configuration.\r\n *\r\n * @returns {Object} config.\r\n * @since 1.0.7\r\n */\r\nconst defaultConfig = {\r\n\tstring: {\r\n\t\tinvoice: \"I N V O I C E\",\r\n\t\trefNumber: \"Ref no\",\r\n\t\tdate: \"Date\",\r\n\t\tdueDate: \"Due Date\",\r\n\t\tstatus: \"Status\",\r\n\t\tbillTo: \"Bill To\",\r\n\t\titem: \"Item\",\r\n\t\tquantity: \"Qty\",\r\n\t\tprice: \"Price\",\r\n\t\ttax: \"Tax\",\r\n\t\ttotal: \"Total\",\r\n\t\tsubTotal: \"Subtotal\",\r\n\t\ttotalTax: \"Total Tax\",\r\n\t},\r\n\tfont: {\r\n\t\thelvetica: {\r\n\t\t\tnormal: \"Helvetica\",\r\n\t\t\tbold: \"Helvetica-Bold\",\r\n\t\t\titalics: \"Helvetica-Oblique\",\r\n\t\t\tbolditalics: \"Helvetica-BoldOblique\",\r\n\t\t},\r\n\t},\r\n};\r\n\r\nmodule.exports = defaultConfig;\r\n","const fs = require(\"fs\");\r\nconst path = require(\"path\");\r\nconst invoiceMaker = require(\"pdfmake\");\r\nconst helper = require(\"../utils/helper\");\r\nconst defaultConfig = require(\"../utils/config\");\r\n\r\nimport type {\r\n\tCompanyInfo,\r\n\tCustomerInfo,\r\n\tInvoiceInfo,\r\n\tItemInfo,\r\n\tQRInfo,\r\n\tNotes,\r\n\tInvoicePayLoad,\r\n\tSimplePDFInvoice,\r\n\tConfiguration,\r\n} from \"../../global\";\r\n\r\nexport class PDFInvoice implements SimplePDFInvoice {\r\n\tpayload: InvoicePayLoad;\r\n\tcompany: CompanyInfo;\r\n\tinvoice: InvoiceInfo;\r\n\tcustomer: CustomerInfo;\r\n\titems: ItemInfo[];\r\n\tcurrency: string;\r\n\tpath: string;\r\n\tqr: QRInfo;\r\n\tnote: Notes;\r\n\tdate: string;\r\n\tconfig: Configuration;\r\n\tconstructor(\r\n\t\tpayload: InvoicePayLoad,\r\n\t\tconfig: Configuration = defaultConfig\r\n\t) {\r\n\t\tthis.payload = payload;\r\n\r\n\t\t// Invoice content section.\r\n\t\tthis.company = payload.company;\r\n\t\tthis.customer = payload.customer;\r\n\t\tthis.invoice = payload.invoice;\r\n\t\tthis.items = payload.items;\r\n\t\tthis.qr = payload.qr;\r\n\t\tthis.note = payload.note;\r\n\r\n\t\t// Invoice currency.\r\n\t\tthis.currency = this.invoice.currency || \"$\";\r\n\r\n\t\t// Path.\r\n\t\tthis.path = path.resolve(this.invoice.path) || \"./invoice.pdf\";\r\n\r\n\t\t// Invoice information.\r\n\t\tthis.date = new Date().toLocaleDateString(\"en-US\", {\r\n\t\t\tyear: \"numeric\",\r\n\t\t\tmonth: \"numeric\",\r\n\t\t\tday: \"numeric\",\r\n\t\t});\r\n\r\n\t\t// Configuration.\r\n\t\tthis.config = config;\r\n\t}\r\n\r\n\t/**\r\n\t * Create a PDF invoice.\r\n\t *\r\n\t * @returns {void}\r\n\t * @since 1.0.0\r\n\t */\r\n\tasync create(): Promise {\r\n\t\tconst printer = new invoiceMaker(this.fonts());\r\n\r\n\t\tconst docDefinition = {\r\n\t\t\tpageSize: \"A4\",\r\n\t\t\torientation: \"portrait\",\r\n\t\t\tpageMargins: [40, 40, 40, 40],\r\n\t\t\tinfo: this.meta(),\r\n\t\t\tcontent: this.content(),\r\n\t\t\tdefaultStyle: this.defaultStyle(),\r\n\t\t\tstyles: this.styles(),\r\n\t\t};\r\n\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tconst doc = printer.createPdfKitDocument(docDefinition);\r\n\t\t\tconst stream = fs.createWriteStream(this.path);\r\n\r\n\t\t\tdoc.pipe(stream);\r\n\r\n\t\t\tdoc.on(\"end\", () => {\r\n\t\t\t\tresolve(this.path);\r\n\t\t\t});\r\n\r\n\t\t\tdoc.on(\"error\", (err: any) => {\r\n\t\t\t\treject(err);\r\n\t\t\t});\r\n\r\n\t\t\tdoc.end();\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Fonts.\r\n\t *\r\n\t * @returns {Object} font.\r\n\t * @since 1.0.0\r\n\t */\r\n\tfonts(): any {\r\n\t\tconst fonts = {\r\n\t\t\tHelvetica: {\r\n\t\t\t\tnormal: \"Helvetica\",\r\n\t\t\t\tbold: \"Helvetica-Bold\",\r\n\t\t\t\titalics: \"Helvetica-Oblique\",\r\n\t\t\t\tbolditalics: \"Helvetica-BoldOblique\",\r\n\t\t\t},\r\n\t\t};\r\n\r\n\t\treturn fonts;\r\n\t}\r\n\r\n\t/**\r\n\t * Doc meta.\r\n\t *\r\n\t * @returns {Object} meta.\r\n\t * @since 1.0.0\r\n\t */\r\n\tmeta(): any {\r\n\t\tconst meta = {\r\n\t\t\ttitle: \"Invoice - #\" + this.invoice.number,\r\n\t\t\tauthor: this.company.name,\r\n\t\t\tsubject: \"Invoice - \" + this.customer.name,\r\n\t\t\tkeywords: \"invoice\",\r\n\t\t};\r\n\r\n\t\treturn meta;\r\n\t}\r\n\r\n\t/**\r\n\t * Default invoice styles.\r\n\t *\r\n\t * @returns {Object} defaults.\r\n\t * @since 1.0.0\r\n\t */\r\n\tdefaultStyle(): any {\r\n\t\tconst defaults = {\r\n\t\t\tfontSize: 10,\r\n\t\t\tlineHeight: 1.8,\r\n\t\t\tbold: false,\r\n\t\t\tfont: \"Helvetica\",\r\n\t\t\tcolor: \"#222222\",\r\n\t\t\tcolumnGap: 30,\r\n\t\t};\r\n\t\treturn defaults;\r\n\t}\r\n\r\n\t/**\r\n\t * Invoice styles.\r\n\t *\r\n\t * @returns {Object} defaults.\r\n\t * @since 1.0.0\r\n\t */\r\n\tstyles(): any {\r\n\t\tconst styles = {\r\n\t\t\th1: {\r\n\t\t\t\tfontSize: 18,\r\n\t\t\t\tbold: true,\r\n\t\t\t},\r\n\t\t\th2: {\r\n\t\t\t\tfontSize: 16,\r\n\t\t\t\tbold: true,\r\n\t\t\t},\r\n\t\t\th3: {\r\n\t\t\t\tfontSize: 14,\r\n\t\t\t\tbold: true,\r\n\t\t\t},\r\n\t\t\ttext: {\r\n\t\t\t\tfontSize: 10,\r\n\t\t\t\tbold: false,\r\n\t\t\t},\r\n\t\t\ttextBold: {\r\n\t\t\t\tfontSize: 10,\r\n\t\t\t\tbold: true,\r\n\t\t\t},\r\n\t\t};\r\n\t\treturn styles;\r\n\t}\r\n\r\n\t/**\r\n\t * Return the invoice layout.\r\n\t *\r\n\t * @returns {Object} layout.\r\n\t * @since 1.0.0\r\n\t */\r\n\tcontent(): any {\r\n\t\tconst sections = [];\r\n\r\n\t\t/**\r\n\t\t * Left: Company section.\r\n\t\t * Right: Invoice section.\r\n\t\t *\r\n\t\t * @since 1.0.0\r\n\t\t */\r\n\t\tconst sectionCompany = {\r\n\t\t\tcolumns: [\r\n\t\t\t\t{\r\n\t\t\t\t\twidth: \"70%\",\r\n\t\t\t\t\tstack: [] as any,\r\n\t\t\t\t\tstyle: \"text\",\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\twidth: \"30%\",\r\n\t\t\t\t\tstack: [] as any,\r\n\t\t\t\t\tstyle: \"text\",\r\n\t\t\t\t},\r\n\t\t\t],\r\n\t\t};\r\n\r\n\t\tif (this.company.logo) {\r\n\t\t\tif (!this.company.logo.startsWith(\" 0) {\r\n\t\t\tthis.items.forEach((item) => {\r\n\t\t\t\tconst totalPrice = helper.calcItemTotal(item);\r\n\r\n\t\t\t\tsectionItems.table.body.push([\r\n\t\t\t\t\t`\\n ${item.name}`,\r\n\t\t\t\t\t`\\n ${item.quantity}`,\r\n\t\t\t\t\t`\\n ${this.currency}${item.price}`,\r\n\t\t\t\t\t`\\n ${item.tax || 0}%`,\r\n\t\t\t\t\t`\\n ${this.currency}${totalPrice}`,\r\n\t\t\t\t]);\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tsections.push(sectionItems);\r\n\r\n\t\t/**\r\n\t\t * Right: Total section.\r\n\t\t *\r\n\t\t * @since 1.0.0\r\n\t\t */\r\n\t\tconst sectionTotal = {\r\n\t\t\tmargin: [0, 20, 0, 0],\r\n\t\t\tcolumns: [\r\n\t\t\t\t{\r\n\t\t\t\t\twidth: \"*\",\r\n\t\t\t\t\tstack: [\" \"],\r\n\t\t\t\t\tstyle: \"text\",\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\twidth: 200,\r\n\t\t\t\t\tlineHeight: 1.5,\r\n\t\t\t\t\tstyle: \"textBold\",\r\n\t\t\t\t\ttable: {\r\n\t\t\t\t\t\twidths: [80, \"*\"],\r\n\t\t\t\t\t\theaderRows: 1,\r\n\t\t\t\t\t\tlineHeight: 1.5,\r\n\t\t\t\t\t\tbody: [\r\n\t\t\t\t\t\t\t[\r\n\t\t\t\t\t\t\t\t`\\n ${this.config.string.subTotal}`,\r\n\t\t\t\t\t\t\t\t`\\n ${this.currency}${helper.calcSubTotal(\r\n\t\t\t\t\t\t\t\t\tthis.items\r\n\t\t\t\t\t\t\t\t)}`,\r\n\t\t\t\t\t\t\t],\r\n\t\t\t\t\t\t\t[\r\n\t\t\t\t\t\t\t\t`\\n ${this.config.string.totalTax}`,\r\n\t\t\t\t\t\t\t\t`\\n ${this.currency}${helper.calcTax(\r\n\t\t\t\t\t\t\t\t\tthis.items\r\n\t\t\t\t\t\t\t\t)}`,\r\n\t\t\t\t\t\t\t],\r\n\t\t\t\t\t\t\t[\r\n\t\t\t\t\t\t\t\t`\\n ${this.config.string.total}`,\r\n\t\t\t\t\t\t\t\t`\\n ${this.currency}${helper.calcFinalTotal(\r\n\t\t\t\t\t\t\t\t\tthis.items\r\n\t\t\t\t\t\t\t\t)}`,\r\n\t\t\t\t\t\t\t],\r\n\t\t\t\t\t\t],\r\n\t\t\t\t\t},\r\n\t\t\t\t},\r\n\t\t\t],\r\n\t\t};\r\n\r\n\t\tsections.push(sectionTotal);\r\n\r\n\t\t/**\r\n\t\t * Left: QR section.\r\n\t\t *\r\n\t\t * @since 1.0.0\r\n\t\t */\r\n\t\tif (this.payload.qr) {\r\n\t\t\tconst sectionQR = {\r\n\t\t\t\tmargin: [0, 50, 0, 0],\r\n\t\t\t\tqr: this.payload.qr.data,\r\n\t\t\t\tfit: this.payload.qr.width || \"50\",\r\n\t\t\t};\r\n\r\n\t\t\tsections.push(sectionQR);\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Left: Notes section.\r\n\t\t *\r\n\t\t * @since 1.0.0\r\n\t\t */\r\n\t\tif (this.payload.note) {\r\n\t\t\tconst sectionNote = {\r\n\t\t\t\tmargin: [0, this.payload.qr ? 20 : 50, 0, 0],\r\n\t\t\t\ttext: this.payload.note,\r\n\t\t\t\titalics: true,\r\n\t\t\t};\r\n\r\n\t\t\tsections.push(sectionNote);\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Return the invoice sections.\r\n\t\t *\r\n\t\t * @since 1.0.0\r\n\t\t */\r\n\t\treturn sections;\r\n\t}\r\n}\r\n"]} \ No newline at end of file diff --git a/dist/class/invoice.mjs b/dist/class/invoice.mjs index c66fc7f..4352851 100644 --- a/dist/class/invoice.mjs +++ b/dist/class/invoice.mjs @@ -1,4 +1,4 @@ -var u=(s=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(s,{get:(t,e)=>(typeof require<"u"?require:t)[e]}):s)(function(s){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+s+'" is not supported')});var m=(s,t)=>()=>(t||s((t={exports:{}}).exports,t),t.exports);var y=m((w,f)=>{var I={calcItemTotal:function(s){let t=s.price||0,e=s.quantity||1;return (t*e).toFixed(2)},calcSubTotal:function(s){if(s.length===0)return 0;let t=0;return s.forEach(e=>{t+=Number(this.calcItemTotal(e));}),t.toFixed(2)},calcTax:function(s){if(s.length===0)return 0;let t=0;return s.forEach(e=>{let c=e.price,a=e.quantity,o=e.tax||0;t+=c*a*o/100;}),t.toFixed(2)},calcFinalTotal:function(s){if(s.length===0)return 0;let t=Number(this.calcSubTotal(s)),e=Number(this.calcTax(s));return (t+e).toFixed(2)}};f.exports=I;});var d=m((H,p)=>{var v={string:{invoice:"I N V O I C E",refNumber:"Ref no: #",date:"Date:",dueDate:"Due Date:",status:"Status:",billTo:"Bill To",item:"Item",quantity:"Qty",price:"Price",tax:"Tax",total:"Total",subTotal:"Subtotal",totalTax:"Total Tax"},font:{helvetica:{normal:"Helvetica",bold:"Helvetica-Bold",italics:"Helvetica-Oblique",bolditalics:"Helvetica-BoldOblique"},noto:{}}};p.exports=v;});var T=u("fs"),k=u("path"),q=u("pdfmake"),l=y(),S=d(),g=class{payload;company;invoice;customer;items;currency;path;qr;note;date;config;constructor(t,e=S){this.payload=t,this.company=t.company,this.customer=t.customer,this.invoice=t.invoice,this.items=t.items,this.qr=t.qr,this.note=t.note,this.currency=this.invoice.currency||"$",this.path=k.resolve(this.invoice.path)||"./invoice.pdf",this.date=new Date().toLocaleDateString("en-US",{year:"numeric",month:"numeric",day:"numeric"}),this.config=e;}async create(){let t=new q(this.fonts()),e={pageSize:"A4",orientation:"portrait",pageMargins:[40,40,40,40],info:this.meta(),content:this.content(),defaultStyle:this.defaultStyle(),styles:this.styles()};return new Promise((c,a)=>{let o=t.createPdfKitDocument(e),r=T.createWriteStream(this.path);o.pipe(r),o.on("end",()=>{c(this.path);}),o.on("error",n=>{a(n);}),o.end();})}fonts(){return {Helvetica:{normal:"Helvetica",bold:"Helvetica-Bold",italics:"Helvetica-Oblique",bolditalics:"Helvetica-BoldOblique"}}}meta(){return {title:"Invoice - #"+this.invoice.number,author:this.company.name,subject:"Invoice - "+this.customer.name,keywords:"invoice"}}defaultStyle(){return {fontSize:10,lineHeight:1.8,bold:!1,font:"Helvetica",color:"#222222",columnGap:30}}styles(){return {h1:{fontSize:18,bold:!0},h2:{fontSize:16,bold:!0},h3:{fontSize:14,bold:!0},text:{fontSize:10,bold:!1},textBold:{fontSize:10,bold:!0}}}content(){let t=[],e={columns:[{width:"70%",stack:[],style:"text"},{width:"30%",stack:[],style:"text"}]};if(this.company.logo){if(!this.company.logo.startsWith("typeof require<"u"?require:typeof Proxy<"u"?new Proxy(s,{get:(t,e)=>(typeof require<"u"?require:t)[e]}):s)(function(s){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+s+'" is not supported')});var m=(s,t)=>()=>(t||s((t={exports:{}}).exports,t),t.exports);var y=m((w,f)=>{var I={calcItemTotal:function(s){let t=s.price||0,e=s.quantity||1;return (t*e).toFixed(2)},calcSubTotal:function(s){if(s.length===0)return 0;let t=0;return s.forEach(e=>{t+=Number(this.calcItemTotal(e));}),t.toFixed(2)},calcTax:function(s){if(s.length===0)return 0;let t=0;return s.forEach(e=>{let c=e.price,a=e.quantity,o=e.tax||0;t+=c*a*o/100;}),t.toFixed(2)},calcFinalTotal:function(s){if(s.length===0)return 0;let t=Number(this.calcSubTotal(s)),e=Number(this.calcTax(s));return (t+e).toFixed(2)}};f.exports=I;});var d=m((H,p)=>{var v={string:{invoice:"I N V O I C E",refNumber:"Ref no",date:"Date",dueDate:"Due Date",status:"Status",billTo:"Bill To",item:"Item",quantity:"Qty",price:"Price",tax:"Tax",total:"Total",subTotal:"Subtotal",totalTax:"Total Tax"},font:{helvetica:{normal:"Helvetica",bold:"Helvetica-Bold",italics:"Helvetica-Oblique",bolditalics:"Helvetica-BoldOblique"}}};p.exports=v;});var T=u("fs"),k=u("path"),q=u("pdfmake"),l=y(),S=d(),g=class{payload;company;invoice;customer;items;currency;path;qr;note;date;config;constructor(t,e=S){this.payload=t,this.company=t.company,this.customer=t.customer,this.invoice=t.invoice,this.items=t.items,this.qr=t.qr,this.note=t.note,this.currency=this.invoice.currency||"$",this.path=k.resolve(this.invoice.path)||"./invoice.pdf",this.date=new Date().toLocaleDateString("en-US",{year:"numeric",month:"numeric",day:"numeric"}),this.config=e;}async create(){let t=new q(this.fonts()),e={pageSize:"A4",orientation:"portrait",pageMargins:[40,40,40,40],info:this.meta(),content:this.content(),defaultStyle:this.defaultStyle(),styles:this.styles()};return new Promise((c,a)=>{let o=t.createPdfKitDocument(e),r=T.createWriteStream(this.path);o.pipe(r),o.on("end",()=>{c(this.path);}),o.on("error",n=>{a(n);}),o.end();})}fonts(){return {Helvetica:{normal:"Helvetica",bold:"Helvetica-Bold",italics:"Helvetica-Oblique",bolditalics:"Helvetica-BoldOblique"}}}meta(){return {title:"Invoice - #"+this.invoice.number,author:this.company.name,subject:"Invoice - "+this.customer.name,keywords:"invoice"}}defaultStyle(){return {fontSize:10,lineHeight:1.8,bold:!1,font:"Helvetica",color:"#222222",columnGap:30}}styles(){return {h1:{fontSize:18,bold:!0},h2:{fontSize:16,bold:!0},h3:{fontSize:14,bold:!0},text:{fontSize:10,bold:!1},textBold:{fontSize:10,bold:!0}}}content(){let t=[],e={columns:[{width:"70%",stack:[],style:"text"},{width:"30%",stack:[],style:"text"}]};if(this.company.logo){if(!this.company.logo.startsWith(" {\r\n\t\t\ttotal += Number(this.calcItemTotal(item));\r\n\t\t});\r\n\r\n\t\treturn total.toFixed(2);\r\n\t},\r\n\r\n\t/**\r\n\t * Calculate tax.\r\n\t *\r\n\t * @param {Object} items.\r\n\t * @returns {number} total.\r\n\t * @since 1.0.0\r\n\t */\r\n\tcalcTax: function (items: ItemInfo[]): number | string {\r\n\t\tif (items.length === 0) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\tlet total = 0;\r\n\r\n\t\titems.forEach((item) => {\r\n\t\t\tconst price = item.price;\r\n\t\t\tconst quantity = item.quantity;\r\n\t\t\tconst tax = item.tax || 0;\r\n\r\n\t\t\ttotal += (price * quantity * tax) / 100;\r\n\t\t});\r\n\r\n\t\treturn total.toFixed(2);\r\n\t},\r\n\r\n\t/**\r\n\t * Calculate total final price.\r\n\t *\r\n\t * @param {Object} items.\r\n\t * @returns {number} total.\r\n\t * @since 1.0.0\r\n\t */\r\n\tcalcFinalTotal: function (items: ItemInfo[]): number | string {\r\n\t\tif (items.length === 0) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\tconst subTotal = Number(this.calcSubTotal(items));\r\n\t\tconst tax = Number(this.calcTax(items));\r\n\r\n\t\treturn (subTotal + tax).toFixed(2);\r\n\t},\r\n};\r\n\r\nmodule.exports = helper;\r\n","/**\r\n * Holds the default configuration.\r\n *\r\n * @returns {Object} config.\r\n * @since 1.0.7\r\n */\r\nconst defaultConfig = {\r\n\tstring: {\r\n\t\tinvoice: \"I N V O I C E\",\r\n\t\trefNumber: \"Ref no: #\",\r\n\t\tdate: \"Date:\",\r\n\t\tdueDate: \"Due Date:\",\r\n\t\tstatus: \"Status:\",\r\n\t\tbillTo: \"Bill To\",\r\n\t\titem: \"Item\",\r\n\t\tquantity: \"Qty\",\r\n\t\tprice: \"Price\",\r\n\t\ttax: \"Tax\",\r\n\t\ttotal: \"Total\",\r\n\t\tsubTotal: \"Subtotal\",\r\n\t\ttotalTax: \"Total Tax\",\r\n\t},\r\n\tfont: {\r\n\t\thelvetica: {\r\n\t\t\tnormal: \"Helvetica\",\r\n\t\t\tbold: \"Helvetica-Bold\",\r\n\t\t\titalics: \"Helvetica-Oblique\",\r\n\t\t\tbolditalics: \"Helvetica-BoldOblique\",\r\n\t\t},\r\n noto: {\r\n \r\n }\r\n\t},\r\n};\r\n\r\nmodule.exports = defaultConfig;\r\n","const fs = require(\"fs\");\r\nconst path = require(\"path\");\r\nconst invoiceMaker = require(\"pdfmake\");\r\nconst helper = require(\"../utils/helper\");\r\nconst defaultConfig = require(\"../utils/config\");\r\n\r\nimport type {\r\n\tCompanyInfo,\r\n\tCustomerInfo,\r\n\tInvoiceInfo,\r\n\tItemInfo,\r\n\tQRInfo,\r\n\tNotes,\r\n\tInvoicePayLoad,\r\n\tSimplePDFInvoice,\r\n\tConfiguration,\r\n} from \"../../global\";\r\n\r\nexport class PDFInvoice implements SimplePDFInvoice {\r\n\tpayload: InvoicePayLoad;\r\n\tcompany: CompanyInfo;\r\n\tinvoice: InvoiceInfo;\r\n\tcustomer: CustomerInfo;\r\n\titems: ItemInfo[];\r\n\tcurrency: string;\r\n\tpath: string;\r\n\tqr: QRInfo;\r\n\tnote: Notes;\r\n\tdate: string;\r\n\tconfig: Configuration;\r\n\tconstructor(\r\n\t\tpayload: InvoicePayLoad,\r\n\t\tconfig: Configuration = defaultConfig\r\n\t) {\r\n\t\tthis.payload = payload;\r\n\r\n\t\t// Invoice content section.\r\n\t\tthis.company = payload.company;\r\n\t\tthis.customer = payload.customer;\r\n\t\tthis.invoice = payload.invoice;\r\n\t\tthis.items = payload.items;\r\n\t\tthis.qr = payload.qr;\r\n\t\tthis.note = payload.note;\r\n\r\n\t\t// Invoice currency.\r\n\t\tthis.currency = this.invoice.currency || \"$\";\r\n\r\n\t\t// Path.\r\n\t\tthis.path = path.resolve(this.invoice.path) || \"./invoice.pdf\";\r\n\r\n\t\t// Invoice information.\r\n\t\tthis.date = new Date().toLocaleDateString(\"en-US\", {\r\n\t\t\tyear: \"numeric\",\r\n\t\t\tmonth: \"numeric\",\r\n\t\t\tday: \"numeric\",\r\n\t\t});\r\n\r\n\t\t// Configuration.\r\n\t\tthis.config = config;\r\n\t}\r\n\r\n\t/**\r\n\t * Create a PDF invoice.\r\n\t *\r\n\t * @returns {void}\r\n\t * @since 1.0.0\r\n\t */\r\n\tasync create(): Promise {\r\n\t\tconst printer = new invoiceMaker(this.fonts());\r\n\r\n\t\tconst docDefinition = {\r\n\t\t\tpageSize: \"A4\",\r\n\t\t\torientation: \"portrait\",\r\n\t\t\tpageMargins: [40, 40, 40, 40],\r\n\t\t\tinfo: this.meta(),\r\n\t\t\tcontent: this.content(),\r\n\t\t\tdefaultStyle: this.defaultStyle(),\r\n\t\t\tstyles: this.styles(),\r\n\t\t};\r\n\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tconst doc = printer.createPdfKitDocument(docDefinition);\r\n\t\t\tconst stream = fs.createWriteStream(this.path);\r\n\r\n\t\t\tdoc.pipe(stream);\r\n\r\n\t\t\tdoc.on(\"end\", () => {\r\n\t\t\t\tresolve(this.path);\r\n\t\t\t});\r\n\r\n\t\t\tdoc.on(\"error\", (err: any) => {\r\n\t\t\t\treject(err);\r\n\t\t\t});\r\n\r\n\t\t\tdoc.end();\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Fonts.\r\n\t *\r\n\t * @returns {Object} font.\r\n\t * @since 1.0.0\r\n\t */\r\n\tfonts(): any {\r\n\t\tconst fonts = {\r\n\t\t\tHelvetica: {\r\n\t\t\t\tnormal: \"Helvetica\",\r\n\t\t\t\tbold: \"Helvetica-Bold\",\r\n\t\t\t\titalics: \"Helvetica-Oblique\",\r\n\t\t\t\tbolditalics: \"Helvetica-BoldOblique\",\r\n\t\t\t},\r\n\t\t};\r\n\r\n\t\treturn fonts;\r\n\t}\r\n\r\n\t/**\r\n\t * Doc meta.\r\n\t *\r\n\t * @returns {Object} meta.\r\n\t * @since 1.0.0\r\n\t */\r\n\tmeta(): any {\r\n\t\tconst meta = {\r\n\t\t\ttitle: \"Invoice - #\" + this.invoice.number,\r\n\t\t\tauthor: this.company.name,\r\n\t\t\tsubject: \"Invoice - \" + this.customer.name,\r\n\t\t\tkeywords: \"invoice\",\r\n\t\t};\r\n\r\n\t\treturn meta;\r\n\t}\r\n\r\n\t/**\r\n\t * Default invoice styles.\r\n\t *\r\n\t * @returns {Object} defaults.\r\n\t * @since 1.0.0\r\n\t */\r\n\tdefaultStyle(): any {\r\n\t\tconst defaults = {\r\n\t\t\tfontSize: 10,\r\n\t\t\tlineHeight: 1.8,\r\n\t\t\tbold: false,\r\n\t\t\tfont: \"Helvetica\",\r\n\t\t\tcolor: \"#222222\",\r\n\t\t\tcolumnGap: 30,\r\n\t\t};\r\n\t\treturn defaults;\r\n\t}\r\n\r\n\t/**\r\n\t * Invoice styles.\r\n\t *\r\n\t * @returns {Object} defaults.\r\n\t * @since 1.0.0\r\n\t */\r\n\tstyles(): any {\r\n\t\tconst styles = {\r\n\t\t\th1: {\r\n\t\t\t\tfontSize: 18,\r\n\t\t\t\tbold: true,\r\n\t\t\t},\r\n\t\t\th2: {\r\n\t\t\t\tfontSize: 16,\r\n\t\t\t\tbold: true,\r\n\t\t\t},\r\n\t\t\th3: {\r\n\t\t\t\tfontSize: 14,\r\n\t\t\t\tbold: true,\r\n\t\t\t},\r\n\t\t\ttext: {\r\n\t\t\t\tfontSize: 10,\r\n\t\t\t\tbold: false,\r\n\t\t\t},\r\n\t\t\ttextBold: {\r\n\t\t\t\tfontSize: 10,\r\n\t\t\t\tbold: true,\r\n\t\t\t},\r\n\t\t};\r\n\t\treturn styles;\r\n\t}\r\n\r\n\t/**\r\n\t * Return the invoice layout.\r\n\t *\r\n\t * @returns {Object} layout.\r\n\t * @since 1.0.0\r\n\t */\r\n\tcontent(): any {\r\n\t\tconst sections = [];\r\n\r\n\t\t/**\r\n\t\t * Left: Company section.\r\n\t\t * Right: Invoice section.\r\n\t\t *\r\n\t\t * @since 1.0.0\r\n\t\t */\r\n\t\tconst sectionCompany = {\r\n\t\t\tcolumns: [\r\n\t\t\t\t{\r\n\t\t\t\t\twidth: \"70%\",\r\n\t\t\t\t\tstack: [] as any,\r\n\t\t\t\t\tstyle: \"text\",\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\twidth: \"30%\",\r\n\t\t\t\t\tstack: [] as any,\r\n\t\t\t\t\tstyle: \"text\",\r\n\t\t\t\t},\r\n\t\t\t],\r\n\t\t};\r\n\r\n\t\tif (this.company.logo) {\r\n\t\t\tif (!this.company.logo.startsWith(\" 0) {\r\n\t\t\tthis.items.forEach((item) => {\r\n\t\t\t\tconst totalPrice = helper.calcItemTotal(item);\r\n\r\n\t\t\t\tsectionItems.table.body.push([\r\n\t\t\t\t\t`\\n ${item.name}`,\r\n\t\t\t\t\t`\\n ${item.quantity}`,\r\n\t\t\t\t\t`\\n ${this.currency}${item.price}`,\r\n\t\t\t\t\t`\\n ${item.tax || 0}%`,\r\n\t\t\t\t\t`\\n ${this.currency}${totalPrice}`,\r\n\t\t\t\t]);\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tsections.push(sectionItems);\r\n\r\n\t\t/**\r\n\t\t * Right: Total section.\r\n\t\t *\r\n\t\t * @since 1.0.0\r\n\t\t */\r\n\t\tconst sectionTotal = {\r\n\t\t\tmargin: [0, 20, 0, 0],\r\n\t\t\tcolumns: [\r\n\t\t\t\t{\r\n\t\t\t\t\twidth: \"*\",\r\n\t\t\t\t\tstack: [\" \"],\r\n\t\t\t\t\tstyle: \"text\",\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\twidth: 200,\r\n\t\t\t\t\tlineHeight: 1.5,\r\n\t\t\t\t\tstyle: \"textBold\",\r\n\t\t\t\t\ttable: {\r\n\t\t\t\t\t\twidths: [80, \"*\"],\r\n\t\t\t\t\t\theaderRows: 1,\r\n\t\t\t\t\t\tlineHeight: 1.5,\r\n\t\t\t\t\t\tbody: [\r\n\t\t\t\t\t\t\t[\r\n\t\t\t\t\t\t\t\t`\\n ${this.config.string.subTotal}`,\r\n\t\t\t\t\t\t\t\t`\\n ${this.currency}${helper.calcSubTotal(\r\n\t\t\t\t\t\t\t\t\tthis.items\r\n\t\t\t\t\t\t\t\t)}`,\r\n\t\t\t\t\t\t\t],\r\n\t\t\t\t\t\t\t[\r\n\t\t\t\t\t\t\t\t`\\n ${this.config.string.totalTax}`,\r\n\t\t\t\t\t\t\t\t`\\n ${this.currency}${helper.calcTax(\r\n\t\t\t\t\t\t\t\t\tthis.items\r\n\t\t\t\t\t\t\t\t)}`,\r\n\t\t\t\t\t\t\t],\r\n\t\t\t\t\t\t\t[\r\n\t\t\t\t\t\t\t\t`\\n ${this.config.string.total}`,\r\n\t\t\t\t\t\t\t\t`\\n ${this.currency}${helper.calcFinalTotal(\r\n\t\t\t\t\t\t\t\t\tthis.items\r\n\t\t\t\t\t\t\t\t)}`,\r\n\t\t\t\t\t\t\t],\r\n\t\t\t\t\t\t],\r\n\t\t\t\t\t},\r\n\t\t\t\t},\r\n\t\t\t],\r\n\t\t};\r\n\r\n\t\tsections.push(sectionTotal);\r\n\r\n\t\t/**\r\n\t\t * Left: QR section.\r\n\t\t *\r\n\t\t * @since 1.0.0\r\n\t\t */\r\n\t\tif (this.payload.qr) {\r\n\t\t\tconst sectionQR = {\r\n\t\t\t\tmargin: [0, 50, 0, 0],\r\n\t\t\t\tqr: this.payload.qr.data,\r\n\t\t\t\tfit: this.payload.qr.width || \"50\",\r\n\t\t\t};\r\n\r\n\t\t\tsections.push(sectionQR);\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Left: Notes section.\r\n\t\t *\r\n\t\t * @since 1.0.0\r\n\t\t */\r\n\t\tif (this.payload.note) {\r\n\t\t\tconst sectionNote = {\r\n\t\t\t\tmargin: [0, this.payload.qr ? 20 : 50, 0, 0],\r\n\t\t\t\ttext: this.payload.note,\r\n\t\t\t\titalics: true,\r\n\t\t\t};\r\n\r\n\t\t\tsections.push(sectionNote);\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Return the invoice sections.\r\n\t\t *\r\n\t\t * @since 1.0.0\r\n\t\t */\r\n\t\treturn sections;\r\n\t}\r\n}\r\n"]} \ No newline at end of file +{"version":3,"sources":["../../src/utils/helper.ts","../../src/utils/config.ts","../../src/class/invoice.ts"],"names":["require_helper","__commonJSMin","exports","module","helper","item","price","quantity","items","total","tax","subTotal","require_config","defaultConfig","fs","path","invoiceMaker","PDFInvoice","payload","config","printer","docDefinition","resolve","reject","doc","stream","err","sections","sectionCompany","refLabel","dateLabel","dueDateLabel","statusLabel","sectionCustomer","sectionItems","totalPrice","sectionTotal","sectionQR","sectionNote"],"mappings":"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","sourcesContent":["import type { ItemInfo } from \"../../global\";\r\n\r\ninterface Helpers {\r\n\tcalcItemTotal(item: ItemInfo): number | string;\r\n\tcalcTax(items: ItemInfo[]): number | string;\r\n\tcalcSubTotal(items: ItemInfo[]): number | string;\r\n\tcalcFinalTotal(items: ItemInfo[]): number | string;\r\n}\r\n\r\nconst helper: Helpers = {\r\n\t/**\r\n\t * Item total price calculation.\r\n\t *\r\n\t * @param {Object} item.\r\n\t * @returns {number} total.\r\n\t * @since 1.0.0\r\n\t */\r\n\tcalcItemTotal: function (item: ItemInfo): string {\r\n\t\tconst price = item.price || 0;\r\n\t\tconst quantity = item.quantity || 1;\r\n\t\treturn (price * quantity).toFixed(2);\r\n\t},\r\n\r\n\t/**\r\n\t * Calculate subtotal.\r\n\t *\r\n\t * @param {Object} items.\r\n\t * @returns {number} total.\r\n\t * @since 1.0.0\r\n\t */\r\n\tcalcSubTotal: function (items: ItemInfo[]): number | string {\r\n\t\tif (items.length === 0) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\tlet total = 0;\r\n\r\n\t\titems.forEach((item) => {\r\n\t\t\ttotal += Number(this.calcItemTotal(item));\r\n\t\t});\r\n\r\n\t\treturn total.toFixed(2);\r\n\t},\r\n\r\n\t/**\r\n\t * Calculate tax.\r\n\t *\r\n\t * @param {Object} items.\r\n\t * @returns {number} total.\r\n\t * @since 1.0.0\r\n\t */\r\n\tcalcTax: function (items: ItemInfo[]): number | string {\r\n\t\tif (items.length === 0) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\tlet total = 0;\r\n\r\n\t\titems.forEach((item) => {\r\n\t\t\tconst price = item.price;\r\n\t\t\tconst quantity = item.quantity;\r\n\t\t\tconst tax = item.tax || 0;\r\n\r\n\t\t\ttotal += (price * quantity * tax) / 100;\r\n\t\t});\r\n\r\n\t\treturn total.toFixed(2);\r\n\t},\r\n\r\n\t/**\r\n\t * Calculate total final price.\r\n\t *\r\n\t * @param {Object} items.\r\n\t * @returns {number} total.\r\n\t * @since 1.0.0\r\n\t */\r\n\tcalcFinalTotal: function (items: ItemInfo[]): number | string {\r\n\t\tif (items.length === 0) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\tconst subTotal = Number(this.calcSubTotal(items));\r\n\t\tconst tax = Number(this.calcTax(items));\r\n\r\n\t\treturn (subTotal + tax).toFixed(2);\r\n\t},\r\n};\r\n\r\nmodule.exports = helper;\r\n","/**\r\n * Holds the default configuration.\r\n *\r\n * @returns {Object} config.\r\n * @since 1.0.7\r\n */\r\nconst defaultConfig = {\r\n\tstring: {\r\n\t\tinvoice: \"I N V O I C E\",\r\n\t\trefNumber: \"Ref no\",\r\n\t\tdate: \"Date\",\r\n\t\tdueDate: \"Due Date\",\r\n\t\tstatus: \"Status\",\r\n\t\tbillTo: \"Bill To\",\r\n\t\titem: \"Item\",\r\n\t\tquantity: \"Qty\",\r\n\t\tprice: \"Price\",\r\n\t\ttax: \"Tax\",\r\n\t\ttotal: \"Total\",\r\n\t\tsubTotal: \"Subtotal\",\r\n\t\ttotalTax: \"Total Tax\",\r\n\t},\r\n\tfont: {\r\n\t\thelvetica: {\r\n\t\t\tnormal: \"Helvetica\",\r\n\t\t\tbold: \"Helvetica-Bold\",\r\n\t\t\titalics: \"Helvetica-Oblique\",\r\n\t\t\tbolditalics: \"Helvetica-BoldOblique\",\r\n\t\t},\r\n\t},\r\n};\r\n\r\nmodule.exports = defaultConfig;\r\n","const fs = require(\"fs\");\r\nconst path = require(\"path\");\r\nconst invoiceMaker = require(\"pdfmake\");\r\nconst helper = require(\"../utils/helper\");\r\nconst defaultConfig = require(\"../utils/config\");\r\n\r\nimport type {\r\n\tCompanyInfo,\r\n\tCustomerInfo,\r\n\tInvoiceInfo,\r\n\tItemInfo,\r\n\tQRInfo,\r\n\tNotes,\r\n\tInvoicePayLoad,\r\n\tSimplePDFInvoice,\r\n\tConfiguration,\r\n} from \"../../global\";\r\n\r\nexport class PDFInvoice implements SimplePDFInvoice {\r\n\tpayload: InvoicePayLoad;\r\n\tcompany: CompanyInfo;\r\n\tinvoice: InvoiceInfo;\r\n\tcustomer: CustomerInfo;\r\n\titems: ItemInfo[];\r\n\tcurrency: string;\r\n\tpath: string;\r\n\tqr: QRInfo;\r\n\tnote: Notes;\r\n\tdate: string;\r\n\tconfig: Configuration;\r\n\tconstructor(\r\n\t\tpayload: InvoicePayLoad,\r\n\t\tconfig: Configuration = defaultConfig\r\n\t) {\r\n\t\tthis.payload = payload;\r\n\r\n\t\t// Invoice content section.\r\n\t\tthis.company = payload.company;\r\n\t\tthis.customer = payload.customer;\r\n\t\tthis.invoice = payload.invoice;\r\n\t\tthis.items = payload.items;\r\n\t\tthis.qr = payload.qr;\r\n\t\tthis.note = payload.note;\r\n\r\n\t\t// Invoice currency.\r\n\t\tthis.currency = this.invoice.currency || \"$\";\r\n\r\n\t\t// Path.\r\n\t\tthis.path = path.resolve(this.invoice.path) || \"./invoice.pdf\";\r\n\r\n\t\t// Invoice information.\r\n\t\tthis.date = new Date().toLocaleDateString(\"en-US\", {\r\n\t\t\tyear: \"numeric\",\r\n\t\t\tmonth: \"numeric\",\r\n\t\t\tday: \"numeric\",\r\n\t\t});\r\n\r\n\t\t// Configuration.\r\n\t\tthis.config = config;\r\n\t}\r\n\r\n\t/**\r\n\t * Create a PDF invoice.\r\n\t *\r\n\t * @returns {void}\r\n\t * @since 1.0.0\r\n\t */\r\n\tasync create(): Promise {\r\n\t\tconst printer = new invoiceMaker(this.fonts());\r\n\r\n\t\tconst docDefinition = {\r\n\t\t\tpageSize: \"A4\",\r\n\t\t\torientation: \"portrait\",\r\n\t\t\tpageMargins: [40, 40, 40, 40],\r\n\t\t\tinfo: this.meta(),\r\n\t\t\tcontent: this.content(),\r\n\t\t\tdefaultStyle: this.defaultStyle(),\r\n\t\t\tstyles: this.styles(),\r\n\t\t};\r\n\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tconst doc = printer.createPdfKitDocument(docDefinition);\r\n\t\t\tconst stream = fs.createWriteStream(this.path);\r\n\r\n\t\t\tdoc.pipe(stream);\r\n\r\n\t\t\tdoc.on(\"end\", () => {\r\n\t\t\t\tresolve(this.path);\r\n\t\t\t});\r\n\r\n\t\t\tdoc.on(\"error\", (err: any) => {\r\n\t\t\t\treject(err);\r\n\t\t\t});\r\n\r\n\t\t\tdoc.end();\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Fonts.\r\n\t *\r\n\t * @returns {Object} font.\r\n\t * @since 1.0.0\r\n\t */\r\n\tfonts(): any {\r\n\t\tconst fonts = {\r\n\t\t\tHelvetica: {\r\n\t\t\t\tnormal: \"Helvetica\",\r\n\t\t\t\tbold: \"Helvetica-Bold\",\r\n\t\t\t\titalics: \"Helvetica-Oblique\",\r\n\t\t\t\tbolditalics: \"Helvetica-BoldOblique\",\r\n\t\t\t},\r\n\t\t};\r\n\r\n\t\treturn fonts;\r\n\t}\r\n\r\n\t/**\r\n\t * Doc meta.\r\n\t *\r\n\t * @returns {Object} meta.\r\n\t * @since 1.0.0\r\n\t */\r\n\tmeta(): any {\r\n\t\tconst meta = {\r\n\t\t\ttitle: \"Invoice - #\" + this.invoice.number,\r\n\t\t\tauthor: this.company.name,\r\n\t\t\tsubject: \"Invoice - \" + this.customer.name,\r\n\t\t\tkeywords: \"invoice\",\r\n\t\t};\r\n\r\n\t\treturn meta;\r\n\t}\r\n\r\n\t/**\r\n\t * Default invoice styles.\r\n\t *\r\n\t * @returns {Object} defaults.\r\n\t * @since 1.0.0\r\n\t */\r\n\tdefaultStyle(): any {\r\n\t\tconst defaults = {\r\n\t\t\tfontSize: 10,\r\n\t\t\tlineHeight: 1.8,\r\n\t\t\tbold: false,\r\n\t\t\tfont: \"Helvetica\",\r\n\t\t\tcolor: \"#222222\",\r\n\t\t\tcolumnGap: 30,\r\n\t\t};\r\n\t\treturn defaults;\r\n\t}\r\n\r\n\t/**\r\n\t * Invoice styles.\r\n\t *\r\n\t * @returns {Object} defaults.\r\n\t * @since 1.0.0\r\n\t */\r\n\tstyles(): any {\r\n\t\tconst styles = {\r\n\t\t\th1: {\r\n\t\t\t\tfontSize: 18,\r\n\t\t\t\tbold: true,\r\n\t\t\t},\r\n\t\t\th2: {\r\n\t\t\t\tfontSize: 16,\r\n\t\t\t\tbold: true,\r\n\t\t\t},\r\n\t\t\th3: {\r\n\t\t\t\tfontSize: 14,\r\n\t\t\t\tbold: true,\r\n\t\t\t},\r\n\t\t\ttext: {\r\n\t\t\t\tfontSize: 10,\r\n\t\t\t\tbold: false,\r\n\t\t\t},\r\n\t\t\ttextBold: {\r\n\t\t\t\tfontSize: 10,\r\n\t\t\t\tbold: true,\r\n\t\t\t},\r\n\t\t};\r\n\t\treturn styles;\r\n\t}\r\n\r\n\t/**\r\n\t * Return the invoice layout.\r\n\t *\r\n\t * @returns {Object} layout.\r\n\t * @since 1.0.0\r\n\t */\r\n\tcontent(): any {\r\n\t\tconst sections = [];\r\n\r\n\t\t/**\r\n\t\t * Left: Company section.\r\n\t\t * Right: Invoice section.\r\n\t\t *\r\n\t\t * @since 1.0.0\r\n\t\t */\r\n\t\tconst sectionCompany = {\r\n\t\t\tcolumns: [\r\n\t\t\t\t{\r\n\t\t\t\t\twidth: \"70%\",\r\n\t\t\t\t\tstack: [] as any,\r\n\t\t\t\t\tstyle: \"text\",\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\twidth: \"30%\",\r\n\t\t\t\t\tstack: [] as any,\r\n\t\t\t\t\tstyle: \"text\",\r\n\t\t\t\t},\r\n\t\t\t],\r\n\t\t};\r\n\r\n\t\tif (this.company.logo) {\r\n\t\t\tif (!this.company.logo.startsWith(\" 0) {\r\n\t\t\tthis.items.forEach((item) => {\r\n\t\t\t\tconst totalPrice = helper.calcItemTotal(item);\r\n\r\n\t\t\t\tsectionItems.table.body.push([\r\n\t\t\t\t\t`\\n ${item.name}`,\r\n\t\t\t\t\t`\\n ${item.quantity}`,\r\n\t\t\t\t\t`\\n ${this.currency}${item.price}`,\r\n\t\t\t\t\t`\\n ${item.tax || 0}%`,\r\n\t\t\t\t\t`\\n ${this.currency}${totalPrice}`,\r\n\t\t\t\t]);\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tsections.push(sectionItems);\r\n\r\n\t\t/**\r\n\t\t * Right: Total section.\r\n\t\t *\r\n\t\t * @since 1.0.0\r\n\t\t */\r\n\t\tconst sectionTotal = {\r\n\t\t\tmargin: [0, 20, 0, 0],\r\n\t\t\tcolumns: [\r\n\t\t\t\t{\r\n\t\t\t\t\twidth: \"*\",\r\n\t\t\t\t\tstack: [\" \"],\r\n\t\t\t\t\tstyle: \"text\",\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\twidth: 200,\r\n\t\t\t\t\tlineHeight: 1.5,\r\n\t\t\t\t\tstyle: \"textBold\",\r\n\t\t\t\t\ttable: {\r\n\t\t\t\t\t\twidths: [80, \"*\"],\r\n\t\t\t\t\t\theaderRows: 1,\r\n\t\t\t\t\t\tlineHeight: 1.5,\r\n\t\t\t\t\t\tbody: [\r\n\t\t\t\t\t\t\t[\r\n\t\t\t\t\t\t\t\t`\\n ${this.config.string.subTotal}`,\r\n\t\t\t\t\t\t\t\t`\\n ${this.currency}${helper.calcSubTotal(\r\n\t\t\t\t\t\t\t\t\tthis.items\r\n\t\t\t\t\t\t\t\t)}`,\r\n\t\t\t\t\t\t\t],\r\n\t\t\t\t\t\t\t[\r\n\t\t\t\t\t\t\t\t`\\n ${this.config.string.totalTax}`,\r\n\t\t\t\t\t\t\t\t`\\n ${this.currency}${helper.calcTax(\r\n\t\t\t\t\t\t\t\t\tthis.items\r\n\t\t\t\t\t\t\t\t)}`,\r\n\t\t\t\t\t\t\t],\r\n\t\t\t\t\t\t\t[\r\n\t\t\t\t\t\t\t\t`\\n ${this.config.string.total}`,\r\n\t\t\t\t\t\t\t\t`\\n ${this.currency}${helper.calcFinalTotal(\r\n\t\t\t\t\t\t\t\t\tthis.items\r\n\t\t\t\t\t\t\t\t)}`,\r\n\t\t\t\t\t\t\t],\r\n\t\t\t\t\t\t],\r\n\t\t\t\t\t},\r\n\t\t\t\t},\r\n\t\t\t],\r\n\t\t};\r\n\r\n\t\tsections.push(sectionTotal);\r\n\r\n\t\t/**\r\n\t\t * Left: QR section.\r\n\t\t *\r\n\t\t * @since 1.0.0\r\n\t\t */\r\n\t\tif (this.payload.qr) {\r\n\t\t\tconst sectionQR = {\r\n\t\t\t\tmargin: [0, 50, 0, 0],\r\n\t\t\t\tqr: this.payload.qr.data,\r\n\t\t\t\tfit: this.payload.qr.width || \"50\",\r\n\t\t\t};\r\n\r\n\t\t\tsections.push(sectionQR);\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Left: Notes section.\r\n\t\t *\r\n\t\t * @since 1.0.0\r\n\t\t */\r\n\t\tif (this.payload.note) {\r\n\t\t\tconst sectionNote = {\r\n\t\t\t\tmargin: [0, this.payload.qr ? 20 : 50, 0, 0],\r\n\t\t\t\ttext: this.payload.note,\r\n\t\t\t\titalics: true,\r\n\t\t\t};\r\n\r\n\t\t\tsections.push(sectionNote);\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Return the invoice sections.\r\n\t\t *\r\n\t\t * @since 1.0.0\r\n\t\t */\r\n\t\treturn sections;\r\n\t}\r\n}\r\n"]} \ No newline at end of file diff --git a/dist/index.js b/dist/index.js index 2adddb5..35a5c18 100644 --- a/dist/index.js +++ b/dist/index.js @@ -1,6 +1,6 @@ 'use strict'; -var u=(s=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(s,{get:(t,e)=>(typeof require<"u"?require:t)[e]}):s)(function(s){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+s+'" is not supported')});var f=(s,t)=>()=>(t||s((t={exports:{}}).exports,t),t.exports);var p=f((w,y)=>{var I={calcItemTotal:function(s){let t=s.price||0,e=s.quantity||1;return (t*e).toFixed(2)},calcSubTotal:function(s){if(s.length===0)return 0;let t=0;return s.forEach(e=>{t+=Number(this.calcItemTotal(e));}),t.toFixed(2)},calcTax:function(s){if(s.length===0)return 0;let t=0;return s.forEach(e=>{let c=e.price,a=e.quantity,o=e.tax||0;t+=c*a*o/100;}),t.toFixed(2)},calcFinalTotal:function(s){if(s.length===0)return 0;let t=Number(this.calcSubTotal(s)),e=Number(this.calcTax(s));return (t+e).toFixed(2)}};y.exports=I;});var g=f((H,d)=>{var v={string:{invoice:"I N V O I C E",refNumber:"Ref no: #",date:"Date:",dueDate:"Due Date:",status:"Status:",billTo:"Bill To",item:"Item",quantity:"Qty",price:"Price",tax:"Tax",total:"Total",subTotal:"Subtotal",totalTax:"Total Tax"},font:{helvetica:{normal:"Helvetica",bold:"Helvetica-Bold",italics:"Helvetica-Oblique",bolditalics:"Helvetica-BoldOblique"},noto:{}}};d.exports=v;});var T=u("fs"),k=u("path"),q=u("pdfmake"),l=p(),S=g(),h=class{payload;company;invoice;customer;items;currency;path;qr;note;date;config;constructor(t,e=S){this.payload=t,this.company=t.company,this.customer=t.customer,this.invoice=t.invoice,this.items=t.items,this.qr=t.qr,this.note=t.note,this.currency=this.invoice.currency||"$",this.path=k.resolve(this.invoice.path)||"./invoice.pdf",this.date=new Date().toLocaleDateString("en-US",{year:"numeric",month:"numeric",day:"numeric"}),this.config=e;}async create(){let t=new q(this.fonts()),e={pageSize:"A4",orientation:"portrait",pageMargins:[40,40,40,40],info:this.meta(),content:this.content(),defaultStyle:this.defaultStyle(),styles:this.styles()};return new Promise((c,a)=>{let o=t.createPdfKitDocument(e),r=T.createWriteStream(this.path);o.pipe(r),o.on("end",()=>{c(this.path);}),o.on("error",n=>{a(n);}),o.end();})}fonts(){return {Helvetica:{normal:"Helvetica",bold:"Helvetica-Bold",italics:"Helvetica-Oblique",bolditalics:"Helvetica-BoldOblique"}}}meta(){return {title:"Invoice - #"+this.invoice.number,author:this.company.name,subject:"Invoice - "+this.customer.name,keywords:"invoice"}}defaultStyle(){return {fontSize:10,lineHeight:1.8,bold:!1,font:"Helvetica",color:"#222222",columnGap:30}}styles(){return {h1:{fontSize:18,bold:!0},h2:{fontSize:16,bold:!0},h3:{fontSize:14,bold:!0},text:{fontSize:10,bold:!1},textBold:{fontSize:10,bold:!0}}}content(){let t=[],e={columns:[{width:"70%",stack:[],style:"text"},{width:"30%",stack:[],style:"text"}]};if(this.company.logo){if(!this.company.logo.startsWith("typeof require<"u"?require:typeof Proxy<"u"?new Proxy(s,{get:(t,e)=>(typeof require<"u"?require:t)[e]}):s)(function(s){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+s+'" is not supported')});var f=(s,t)=>()=>(t||s((t={exports:{}}).exports,t),t.exports);var p=f((w,y)=>{var I={calcItemTotal:function(s){let t=s.price||0,e=s.quantity||1;return (t*e).toFixed(2)},calcSubTotal:function(s){if(s.length===0)return 0;let t=0;return s.forEach(e=>{t+=Number(this.calcItemTotal(e));}),t.toFixed(2)},calcTax:function(s){if(s.length===0)return 0;let t=0;return s.forEach(e=>{let c=e.price,a=e.quantity,o=e.tax||0;t+=c*a*o/100;}),t.toFixed(2)},calcFinalTotal:function(s){if(s.length===0)return 0;let t=Number(this.calcSubTotal(s)),e=Number(this.calcTax(s));return (t+e).toFixed(2)}};y.exports=I;});var g=f((H,d)=>{var v={string:{invoice:"I N V O I C E",refNumber:"Ref no",date:"Date",dueDate:"Due Date",status:"Status",billTo:"Bill To",item:"Item",quantity:"Qty",price:"Price",tax:"Tax",total:"Total",subTotal:"Subtotal",totalTax:"Total Tax"},font:{helvetica:{normal:"Helvetica",bold:"Helvetica-Bold",italics:"Helvetica-Oblique",bolditalics:"Helvetica-BoldOblique"}}};d.exports=v;});var T=u("fs"),k=u("path"),q=u("pdfmake"),l=p(),S=g(),h=class{payload;company;invoice;customer;items;currency;path;qr;note;date;config;constructor(t,e=S){this.payload=t,this.company=t.company,this.customer=t.customer,this.invoice=t.invoice,this.items=t.items,this.qr=t.qr,this.note=t.note,this.currency=this.invoice.currency||"$",this.path=k.resolve(this.invoice.path)||"./invoice.pdf",this.date=new Date().toLocaleDateString("en-US",{year:"numeric",month:"numeric",day:"numeric"}),this.config=e;}async create(){let t=new q(this.fonts()),e={pageSize:"A4",orientation:"portrait",pageMargins:[40,40,40,40],info:this.meta(),content:this.content(),defaultStyle:this.defaultStyle(),styles:this.styles()};return new Promise((c,a)=>{let o=t.createPdfKitDocument(e),r=T.createWriteStream(this.path);o.pipe(r),o.on("end",()=>{c(this.path);}),o.on("error",n=>{a(n);}),o.end();})}fonts(){return {Helvetica:{normal:"Helvetica",bold:"Helvetica-Bold",italics:"Helvetica-Oblique",bolditalics:"Helvetica-BoldOblique"}}}meta(){return {title:"Invoice - #"+this.invoice.number,author:this.company.name,subject:"Invoice - "+this.customer.name,keywords:"invoice"}}defaultStyle(){return {fontSize:10,lineHeight:1.8,bold:!1,font:"Helvetica",color:"#222222",columnGap:30}}styles(){return {h1:{fontSize:18,bold:!0},h2:{fontSize:16,bold:!0},h3:{fontSize:14,bold:!0},text:{fontSize:10,bold:!1},textBold:{fontSize:10,bold:!0}}}content(){let t=[],e={columns:[{width:"70%",stack:[],style:"text"},{width:"30%",stack:[],style:"text"}]};if(this.company.logo){if(!this.company.logo.startsWith(" {\r\n\t\t\ttotal += Number(this.calcItemTotal(item));\r\n\t\t});\r\n\r\n\t\treturn total.toFixed(2);\r\n\t},\r\n\r\n\t/**\r\n\t * Calculate tax.\r\n\t *\r\n\t * @param {Object} items.\r\n\t * @returns {number} total.\r\n\t * @since 1.0.0\r\n\t */\r\n\tcalcTax: function (items: ItemInfo[]): number | string {\r\n\t\tif (items.length === 0) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\tlet total = 0;\r\n\r\n\t\titems.forEach((item) => {\r\n\t\t\tconst price = item.price;\r\n\t\t\tconst quantity = item.quantity;\r\n\t\t\tconst tax = item.tax || 0;\r\n\r\n\t\t\ttotal += (price * quantity * tax) / 100;\r\n\t\t});\r\n\r\n\t\treturn total.toFixed(2);\r\n\t},\r\n\r\n\t/**\r\n\t * Calculate total final price.\r\n\t *\r\n\t * @param {Object} items.\r\n\t * @returns {number} total.\r\n\t * @since 1.0.0\r\n\t */\r\n\tcalcFinalTotal: function (items: ItemInfo[]): number | string {\r\n\t\tif (items.length === 0) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\tconst subTotal = Number(this.calcSubTotal(items));\r\n\t\tconst tax = Number(this.calcTax(items));\r\n\r\n\t\treturn (subTotal + tax).toFixed(2);\r\n\t},\r\n};\r\n\r\nmodule.exports = helper;\r\n","/**\r\n * Holds the default configuration.\r\n *\r\n * @returns {Object} config.\r\n * @since 1.0.7\r\n */\r\nconst defaultConfig = {\r\n\tstring: {\r\n\t\tinvoice: \"I N V O I C E\",\r\n\t\trefNumber: \"Ref no: #\",\r\n\t\tdate: \"Date:\",\r\n\t\tdueDate: \"Due Date:\",\r\n\t\tstatus: \"Status:\",\r\n\t\tbillTo: \"Bill To\",\r\n\t\titem: \"Item\",\r\n\t\tquantity: \"Qty\",\r\n\t\tprice: \"Price\",\r\n\t\ttax: \"Tax\",\r\n\t\ttotal: \"Total\",\r\n\t\tsubTotal: \"Subtotal\",\r\n\t\ttotalTax: \"Total Tax\",\r\n\t},\r\n\tfont: {\r\n\t\thelvetica: {\r\n\t\t\tnormal: \"Helvetica\",\r\n\t\t\tbold: \"Helvetica-Bold\",\r\n\t\t\titalics: \"Helvetica-Oblique\",\r\n\t\t\tbolditalics: \"Helvetica-BoldOblique\",\r\n\t\t},\r\n noto: {\r\n \r\n }\r\n\t},\r\n};\r\n\r\nmodule.exports = defaultConfig;\r\n","const fs = require(\"fs\");\r\nconst path = require(\"path\");\r\nconst invoiceMaker = require(\"pdfmake\");\r\nconst helper = require(\"../utils/helper\");\r\nconst defaultConfig = require(\"../utils/config\");\r\n\r\nimport type {\r\n\tCompanyInfo,\r\n\tCustomerInfo,\r\n\tInvoiceInfo,\r\n\tItemInfo,\r\n\tQRInfo,\r\n\tNotes,\r\n\tInvoicePayLoad,\r\n\tSimplePDFInvoice,\r\n\tConfiguration,\r\n} from \"../../global\";\r\n\r\nexport class PDFInvoice implements SimplePDFInvoice {\r\n\tpayload: InvoicePayLoad;\r\n\tcompany: CompanyInfo;\r\n\tinvoice: InvoiceInfo;\r\n\tcustomer: CustomerInfo;\r\n\titems: ItemInfo[];\r\n\tcurrency: string;\r\n\tpath: string;\r\n\tqr: QRInfo;\r\n\tnote: Notes;\r\n\tdate: string;\r\n\tconfig: Configuration;\r\n\tconstructor(\r\n\t\tpayload: InvoicePayLoad,\r\n\t\tconfig: Configuration = defaultConfig\r\n\t) {\r\n\t\tthis.payload = payload;\r\n\r\n\t\t// Invoice content section.\r\n\t\tthis.company = payload.company;\r\n\t\tthis.customer = payload.customer;\r\n\t\tthis.invoice = payload.invoice;\r\n\t\tthis.items = payload.items;\r\n\t\tthis.qr = payload.qr;\r\n\t\tthis.note = payload.note;\r\n\r\n\t\t// Invoice currency.\r\n\t\tthis.currency = this.invoice.currency || \"$\";\r\n\r\n\t\t// Path.\r\n\t\tthis.path = path.resolve(this.invoice.path) || \"./invoice.pdf\";\r\n\r\n\t\t// Invoice information.\r\n\t\tthis.date = new Date().toLocaleDateString(\"en-US\", {\r\n\t\t\tyear: \"numeric\",\r\n\t\t\tmonth: \"numeric\",\r\n\t\t\tday: \"numeric\",\r\n\t\t});\r\n\r\n\t\t// Configuration.\r\n\t\tthis.config = config;\r\n\t}\r\n\r\n\t/**\r\n\t * Create a PDF invoice.\r\n\t *\r\n\t * @returns {void}\r\n\t * @since 1.0.0\r\n\t */\r\n\tasync create(): Promise {\r\n\t\tconst printer = new invoiceMaker(this.fonts());\r\n\r\n\t\tconst docDefinition = {\r\n\t\t\tpageSize: \"A4\",\r\n\t\t\torientation: \"portrait\",\r\n\t\t\tpageMargins: [40, 40, 40, 40],\r\n\t\t\tinfo: this.meta(),\r\n\t\t\tcontent: this.content(),\r\n\t\t\tdefaultStyle: this.defaultStyle(),\r\n\t\t\tstyles: this.styles(),\r\n\t\t};\r\n\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tconst doc = printer.createPdfKitDocument(docDefinition);\r\n\t\t\tconst stream = fs.createWriteStream(this.path);\r\n\r\n\t\t\tdoc.pipe(stream);\r\n\r\n\t\t\tdoc.on(\"end\", () => {\r\n\t\t\t\tresolve(this.path);\r\n\t\t\t});\r\n\r\n\t\t\tdoc.on(\"error\", (err: any) => {\r\n\t\t\t\treject(err);\r\n\t\t\t});\r\n\r\n\t\t\tdoc.end();\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Fonts.\r\n\t *\r\n\t * @returns {Object} font.\r\n\t * @since 1.0.0\r\n\t */\r\n\tfonts(): any {\r\n\t\tconst fonts = {\r\n\t\t\tHelvetica: {\r\n\t\t\t\tnormal: \"Helvetica\",\r\n\t\t\t\tbold: \"Helvetica-Bold\",\r\n\t\t\t\titalics: \"Helvetica-Oblique\",\r\n\t\t\t\tbolditalics: \"Helvetica-BoldOblique\",\r\n\t\t\t},\r\n\t\t};\r\n\r\n\t\treturn fonts;\r\n\t}\r\n\r\n\t/**\r\n\t * Doc meta.\r\n\t *\r\n\t * @returns {Object} meta.\r\n\t * @since 1.0.0\r\n\t */\r\n\tmeta(): any {\r\n\t\tconst meta = {\r\n\t\t\ttitle: \"Invoice - #\" + this.invoice.number,\r\n\t\t\tauthor: this.company.name,\r\n\t\t\tsubject: \"Invoice - \" + this.customer.name,\r\n\t\t\tkeywords: \"invoice\",\r\n\t\t};\r\n\r\n\t\treturn meta;\r\n\t}\r\n\r\n\t/**\r\n\t * Default invoice styles.\r\n\t *\r\n\t * @returns {Object} defaults.\r\n\t * @since 1.0.0\r\n\t */\r\n\tdefaultStyle(): any {\r\n\t\tconst defaults = {\r\n\t\t\tfontSize: 10,\r\n\t\t\tlineHeight: 1.8,\r\n\t\t\tbold: false,\r\n\t\t\tfont: \"Helvetica\",\r\n\t\t\tcolor: \"#222222\",\r\n\t\t\tcolumnGap: 30,\r\n\t\t};\r\n\t\treturn defaults;\r\n\t}\r\n\r\n\t/**\r\n\t * Invoice styles.\r\n\t *\r\n\t * @returns {Object} defaults.\r\n\t * @since 1.0.0\r\n\t */\r\n\tstyles(): any {\r\n\t\tconst styles = {\r\n\t\t\th1: {\r\n\t\t\t\tfontSize: 18,\r\n\t\t\t\tbold: true,\r\n\t\t\t},\r\n\t\t\th2: {\r\n\t\t\t\tfontSize: 16,\r\n\t\t\t\tbold: true,\r\n\t\t\t},\r\n\t\t\th3: {\r\n\t\t\t\tfontSize: 14,\r\n\t\t\t\tbold: true,\r\n\t\t\t},\r\n\t\t\ttext: {\r\n\t\t\t\tfontSize: 10,\r\n\t\t\t\tbold: false,\r\n\t\t\t},\r\n\t\t\ttextBold: {\r\n\t\t\t\tfontSize: 10,\r\n\t\t\t\tbold: true,\r\n\t\t\t},\r\n\t\t};\r\n\t\treturn styles;\r\n\t}\r\n\r\n\t/**\r\n\t * Return the invoice layout.\r\n\t *\r\n\t * @returns {Object} layout.\r\n\t * @since 1.0.0\r\n\t */\r\n\tcontent(): any {\r\n\t\tconst sections = [];\r\n\r\n\t\t/**\r\n\t\t * Left: Company section.\r\n\t\t * Right: Invoice section.\r\n\t\t *\r\n\t\t * @since 1.0.0\r\n\t\t */\r\n\t\tconst sectionCompany = {\r\n\t\t\tcolumns: [\r\n\t\t\t\t{\r\n\t\t\t\t\twidth: \"70%\",\r\n\t\t\t\t\tstack: [] as any,\r\n\t\t\t\t\tstyle: \"text\",\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\twidth: \"30%\",\r\n\t\t\t\t\tstack: [] as any,\r\n\t\t\t\t\tstyle: \"text\",\r\n\t\t\t\t},\r\n\t\t\t],\r\n\t\t};\r\n\r\n\t\tif (this.company.logo) {\r\n\t\t\tif (!this.company.logo.startsWith(\" 0) {\r\n\t\t\tthis.items.forEach((item) => {\r\n\t\t\t\tconst totalPrice = helper.calcItemTotal(item);\r\n\r\n\t\t\t\tsectionItems.table.body.push([\r\n\t\t\t\t\t`\\n ${item.name}`,\r\n\t\t\t\t\t`\\n ${item.quantity}`,\r\n\t\t\t\t\t`\\n ${this.currency}${item.price}`,\r\n\t\t\t\t\t`\\n ${item.tax || 0}%`,\r\n\t\t\t\t\t`\\n ${this.currency}${totalPrice}`,\r\n\t\t\t\t]);\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tsections.push(sectionItems);\r\n\r\n\t\t/**\r\n\t\t * Right: Total section.\r\n\t\t *\r\n\t\t * @since 1.0.0\r\n\t\t */\r\n\t\tconst sectionTotal = {\r\n\t\t\tmargin: [0, 20, 0, 0],\r\n\t\t\tcolumns: [\r\n\t\t\t\t{\r\n\t\t\t\t\twidth: \"*\",\r\n\t\t\t\t\tstack: [\" \"],\r\n\t\t\t\t\tstyle: \"text\",\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\twidth: 200,\r\n\t\t\t\t\tlineHeight: 1.5,\r\n\t\t\t\t\tstyle: \"textBold\",\r\n\t\t\t\t\ttable: {\r\n\t\t\t\t\t\twidths: [80, \"*\"],\r\n\t\t\t\t\t\theaderRows: 1,\r\n\t\t\t\t\t\tlineHeight: 1.5,\r\n\t\t\t\t\t\tbody: [\r\n\t\t\t\t\t\t\t[\r\n\t\t\t\t\t\t\t\t`\\n ${this.config.string.subTotal}`,\r\n\t\t\t\t\t\t\t\t`\\n ${this.currency}${helper.calcSubTotal(\r\n\t\t\t\t\t\t\t\t\tthis.items\r\n\t\t\t\t\t\t\t\t)}`,\r\n\t\t\t\t\t\t\t],\r\n\t\t\t\t\t\t\t[\r\n\t\t\t\t\t\t\t\t`\\n ${this.config.string.totalTax}`,\r\n\t\t\t\t\t\t\t\t`\\n ${this.currency}${helper.calcTax(\r\n\t\t\t\t\t\t\t\t\tthis.items\r\n\t\t\t\t\t\t\t\t)}`,\r\n\t\t\t\t\t\t\t],\r\n\t\t\t\t\t\t\t[\r\n\t\t\t\t\t\t\t\t`\\n ${this.config.string.total}`,\r\n\t\t\t\t\t\t\t\t`\\n ${this.currency}${helper.calcFinalTotal(\r\n\t\t\t\t\t\t\t\t\tthis.items\r\n\t\t\t\t\t\t\t\t)}`,\r\n\t\t\t\t\t\t\t],\r\n\t\t\t\t\t\t],\r\n\t\t\t\t\t},\r\n\t\t\t\t},\r\n\t\t\t],\r\n\t\t};\r\n\r\n\t\tsections.push(sectionTotal);\r\n\r\n\t\t/**\r\n\t\t * Left: QR section.\r\n\t\t *\r\n\t\t * @since 1.0.0\r\n\t\t */\r\n\t\tif (this.payload.qr) {\r\n\t\t\tconst sectionQR = {\r\n\t\t\t\tmargin: [0, 50, 0, 0],\r\n\t\t\t\tqr: this.payload.qr.data,\r\n\t\t\t\tfit: this.payload.qr.width || \"50\",\r\n\t\t\t};\r\n\r\n\t\t\tsections.push(sectionQR);\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Left: Notes section.\r\n\t\t *\r\n\t\t * @since 1.0.0\r\n\t\t */\r\n\t\tif (this.payload.note) {\r\n\t\t\tconst sectionNote = {\r\n\t\t\t\tmargin: [0, this.payload.qr ? 20 : 50, 0, 0],\r\n\t\t\t\ttext: this.payload.note,\r\n\t\t\t\titalics: true,\r\n\t\t\t};\r\n\r\n\t\t\tsections.push(sectionNote);\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Return the invoice sections.\r\n\t\t *\r\n\t\t * @since 1.0.0\r\n\t\t */\r\n\t\treturn sections;\r\n\t}\r\n}\r\n"]} \ No newline at end of file +{"version":3,"sources":["../src/utils/helper.ts","../src/utils/config.ts","../src/class/invoice.ts"],"names":["require_helper","__commonJSMin","exports","module","helper","item","price","quantity","items","total","tax","subTotal","require_config","defaultConfig","fs","path","invoiceMaker","PDFInvoice","payload","config","printer","docDefinition","resolve","reject","doc","stream","err","sections","sectionCompany","refLabel","dateLabel","dueDateLabel","statusLabel","sectionCustomer","sectionItems","totalPrice","sectionTotal","sectionQR","sectionNote"],"mappings":"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","sourcesContent":["import type { ItemInfo } from \"../../global\";\r\n\r\ninterface Helpers {\r\n\tcalcItemTotal(item: ItemInfo): number | string;\r\n\tcalcTax(items: ItemInfo[]): number | string;\r\n\tcalcSubTotal(items: ItemInfo[]): number | string;\r\n\tcalcFinalTotal(items: ItemInfo[]): number | string;\r\n}\r\n\r\nconst helper: Helpers = {\r\n\t/**\r\n\t * Item total price calculation.\r\n\t *\r\n\t * @param {Object} item.\r\n\t * @returns {number} total.\r\n\t * @since 1.0.0\r\n\t */\r\n\tcalcItemTotal: function (item: ItemInfo): string {\r\n\t\tconst price = item.price || 0;\r\n\t\tconst quantity = item.quantity || 1;\r\n\t\treturn (price * quantity).toFixed(2);\r\n\t},\r\n\r\n\t/**\r\n\t * Calculate subtotal.\r\n\t *\r\n\t * @param {Object} items.\r\n\t * @returns {number} total.\r\n\t * @since 1.0.0\r\n\t */\r\n\tcalcSubTotal: function (items: ItemInfo[]): number | string {\r\n\t\tif (items.length === 0) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\tlet total = 0;\r\n\r\n\t\titems.forEach((item) => {\r\n\t\t\ttotal += Number(this.calcItemTotal(item));\r\n\t\t});\r\n\r\n\t\treturn total.toFixed(2);\r\n\t},\r\n\r\n\t/**\r\n\t * Calculate tax.\r\n\t *\r\n\t * @param {Object} items.\r\n\t * @returns {number} total.\r\n\t * @since 1.0.0\r\n\t */\r\n\tcalcTax: function (items: ItemInfo[]): number | string {\r\n\t\tif (items.length === 0) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\tlet total = 0;\r\n\r\n\t\titems.forEach((item) => {\r\n\t\t\tconst price = item.price;\r\n\t\t\tconst quantity = item.quantity;\r\n\t\t\tconst tax = item.tax || 0;\r\n\r\n\t\t\ttotal += (price * quantity * tax) / 100;\r\n\t\t});\r\n\r\n\t\treturn total.toFixed(2);\r\n\t},\r\n\r\n\t/**\r\n\t * Calculate total final price.\r\n\t *\r\n\t * @param {Object} items.\r\n\t * @returns {number} total.\r\n\t * @since 1.0.0\r\n\t */\r\n\tcalcFinalTotal: function (items: ItemInfo[]): number | string {\r\n\t\tif (items.length === 0) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\tconst subTotal = Number(this.calcSubTotal(items));\r\n\t\tconst tax = Number(this.calcTax(items));\r\n\r\n\t\treturn (subTotal + tax).toFixed(2);\r\n\t},\r\n};\r\n\r\nmodule.exports = helper;\r\n","/**\r\n * Holds the default configuration.\r\n *\r\n * @returns {Object} config.\r\n * @since 1.0.7\r\n */\r\nconst defaultConfig = {\r\n\tstring: {\r\n\t\tinvoice: \"I N V O I C E\",\r\n\t\trefNumber: \"Ref no\",\r\n\t\tdate: \"Date\",\r\n\t\tdueDate: \"Due Date\",\r\n\t\tstatus: \"Status\",\r\n\t\tbillTo: \"Bill To\",\r\n\t\titem: \"Item\",\r\n\t\tquantity: \"Qty\",\r\n\t\tprice: \"Price\",\r\n\t\ttax: \"Tax\",\r\n\t\ttotal: \"Total\",\r\n\t\tsubTotal: \"Subtotal\",\r\n\t\ttotalTax: \"Total Tax\",\r\n\t},\r\n\tfont: {\r\n\t\thelvetica: {\r\n\t\t\tnormal: \"Helvetica\",\r\n\t\t\tbold: \"Helvetica-Bold\",\r\n\t\t\titalics: \"Helvetica-Oblique\",\r\n\t\t\tbolditalics: \"Helvetica-BoldOblique\",\r\n\t\t},\r\n\t},\r\n};\r\n\r\nmodule.exports = defaultConfig;\r\n","const fs = require(\"fs\");\r\nconst path = require(\"path\");\r\nconst invoiceMaker = require(\"pdfmake\");\r\nconst helper = require(\"../utils/helper\");\r\nconst defaultConfig = require(\"../utils/config\");\r\n\r\nimport type {\r\n\tCompanyInfo,\r\n\tCustomerInfo,\r\n\tInvoiceInfo,\r\n\tItemInfo,\r\n\tQRInfo,\r\n\tNotes,\r\n\tInvoicePayLoad,\r\n\tSimplePDFInvoice,\r\n\tConfiguration,\r\n} from \"../../global\";\r\n\r\nexport class PDFInvoice implements SimplePDFInvoice {\r\n\tpayload: InvoicePayLoad;\r\n\tcompany: CompanyInfo;\r\n\tinvoice: InvoiceInfo;\r\n\tcustomer: CustomerInfo;\r\n\titems: ItemInfo[];\r\n\tcurrency: string;\r\n\tpath: string;\r\n\tqr: QRInfo;\r\n\tnote: Notes;\r\n\tdate: string;\r\n\tconfig: Configuration;\r\n\tconstructor(\r\n\t\tpayload: InvoicePayLoad,\r\n\t\tconfig: Configuration = defaultConfig\r\n\t) {\r\n\t\tthis.payload = payload;\r\n\r\n\t\t// Invoice content section.\r\n\t\tthis.company = payload.company;\r\n\t\tthis.customer = payload.customer;\r\n\t\tthis.invoice = payload.invoice;\r\n\t\tthis.items = payload.items;\r\n\t\tthis.qr = payload.qr;\r\n\t\tthis.note = payload.note;\r\n\r\n\t\t// Invoice currency.\r\n\t\tthis.currency = this.invoice.currency || \"$\";\r\n\r\n\t\t// Path.\r\n\t\tthis.path = path.resolve(this.invoice.path) || \"./invoice.pdf\";\r\n\r\n\t\t// Invoice information.\r\n\t\tthis.date = new Date().toLocaleDateString(\"en-US\", {\r\n\t\t\tyear: \"numeric\",\r\n\t\t\tmonth: \"numeric\",\r\n\t\t\tday: \"numeric\",\r\n\t\t});\r\n\r\n\t\t// Configuration.\r\n\t\tthis.config = config;\r\n\t}\r\n\r\n\t/**\r\n\t * Create a PDF invoice.\r\n\t *\r\n\t * @returns {void}\r\n\t * @since 1.0.0\r\n\t */\r\n\tasync create(): Promise {\r\n\t\tconst printer = new invoiceMaker(this.fonts());\r\n\r\n\t\tconst docDefinition = {\r\n\t\t\tpageSize: \"A4\",\r\n\t\t\torientation: \"portrait\",\r\n\t\t\tpageMargins: [40, 40, 40, 40],\r\n\t\t\tinfo: this.meta(),\r\n\t\t\tcontent: this.content(),\r\n\t\t\tdefaultStyle: this.defaultStyle(),\r\n\t\t\tstyles: this.styles(),\r\n\t\t};\r\n\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tconst doc = printer.createPdfKitDocument(docDefinition);\r\n\t\t\tconst stream = fs.createWriteStream(this.path);\r\n\r\n\t\t\tdoc.pipe(stream);\r\n\r\n\t\t\tdoc.on(\"end\", () => {\r\n\t\t\t\tresolve(this.path);\r\n\t\t\t});\r\n\r\n\t\t\tdoc.on(\"error\", (err: any) => {\r\n\t\t\t\treject(err);\r\n\t\t\t});\r\n\r\n\t\t\tdoc.end();\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Fonts.\r\n\t *\r\n\t * @returns {Object} font.\r\n\t * @since 1.0.0\r\n\t */\r\n\tfonts(): any {\r\n\t\tconst fonts = {\r\n\t\t\tHelvetica: {\r\n\t\t\t\tnormal: \"Helvetica\",\r\n\t\t\t\tbold: \"Helvetica-Bold\",\r\n\t\t\t\titalics: \"Helvetica-Oblique\",\r\n\t\t\t\tbolditalics: \"Helvetica-BoldOblique\",\r\n\t\t\t},\r\n\t\t};\r\n\r\n\t\treturn fonts;\r\n\t}\r\n\r\n\t/**\r\n\t * Doc meta.\r\n\t *\r\n\t * @returns {Object} meta.\r\n\t * @since 1.0.0\r\n\t */\r\n\tmeta(): any {\r\n\t\tconst meta = {\r\n\t\t\ttitle: \"Invoice - #\" + this.invoice.number,\r\n\t\t\tauthor: this.company.name,\r\n\t\t\tsubject: \"Invoice - \" + this.customer.name,\r\n\t\t\tkeywords: \"invoice\",\r\n\t\t};\r\n\r\n\t\treturn meta;\r\n\t}\r\n\r\n\t/**\r\n\t * Default invoice styles.\r\n\t *\r\n\t * @returns {Object} defaults.\r\n\t * @since 1.0.0\r\n\t */\r\n\tdefaultStyle(): any {\r\n\t\tconst defaults = {\r\n\t\t\tfontSize: 10,\r\n\t\t\tlineHeight: 1.8,\r\n\t\t\tbold: false,\r\n\t\t\tfont: \"Helvetica\",\r\n\t\t\tcolor: \"#222222\",\r\n\t\t\tcolumnGap: 30,\r\n\t\t};\r\n\t\treturn defaults;\r\n\t}\r\n\r\n\t/**\r\n\t * Invoice styles.\r\n\t *\r\n\t * @returns {Object} defaults.\r\n\t * @since 1.0.0\r\n\t */\r\n\tstyles(): any {\r\n\t\tconst styles = {\r\n\t\t\th1: {\r\n\t\t\t\tfontSize: 18,\r\n\t\t\t\tbold: true,\r\n\t\t\t},\r\n\t\t\th2: {\r\n\t\t\t\tfontSize: 16,\r\n\t\t\t\tbold: true,\r\n\t\t\t},\r\n\t\t\th3: {\r\n\t\t\t\tfontSize: 14,\r\n\t\t\t\tbold: true,\r\n\t\t\t},\r\n\t\t\ttext: {\r\n\t\t\t\tfontSize: 10,\r\n\t\t\t\tbold: false,\r\n\t\t\t},\r\n\t\t\ttextBold: {\r\n\t\t\t\tfontSize: 10,\r\n\t\t\t\tbold: true,\r\n\t\t\t},\r\n\t\t};\r\n\t\treturn styles;\r\n\t}\r\n\r\n\t/**\r\n\t * Return the invoice layout.\r\n\t *\r\n\t * @returns {Object} layout.\r\n\t * @since 1.0.0\r\n\t */\r\n\tcontent(): any {\r\n\t\tconst sections = [];\r\n\r\n\t\t/**\r\n\t\t * Left: Company section.\r\n\t\t * Right: Invoice section.\r\n\t\t *\r\n\t\t * @since 1.0.0\r\n\t\t */\r\n\t\tconst sectionCompany = {\r\n\t\t\tcolumns: [\r\n\t\t\t\t{\r\n\t\t\t\t\twidth: \"70%\",\r\n\t\t\t\t\tstack: [] as any,\r\n\t\t\t\t\tstyle: \"text\",\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\twidth: \"30%\",\r\n\t\t\t\t\tstack: [] as any,\r\n\t\t\t\t\tstyle: \"text\",\r\n\t\t\t\t},\r\n\t\t\t],\r\n\t\t};\r\n\r\n\t\tif (this.company.logo) {\r\n\t\t\tif (!this.company.logo.startsWith(\" 0) {\r\n\t\t\tthis.items.forEach((item) => {\r\n\t\t\t\tconst totalPrice = helper.calcItemTotal(item);\r\n\r\n\t\t\t\tsectionItems.table.body.push([\r\n\t\t\t\t\t`\\n ${item.name}`,\r\n\t\t\t\t\t`\\n ${item.quantity}`,\r\n\t\t\t\t\t`\\n ${this.currency}${item.price}`,\r\n\t\t\t\t\t`\\n ${item.tax || 0}%`,\r\n\t\t\t\t\t`\\n ${this.currency}${totalPrice}`,\r\n\t\t\t\t]);\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tsections.push(sectionItems);\r\n\r\n\t\t/**\r\n\t\t * Right: Total section.\r\n\t\t *\r\n\t\t * @since 1.0.0\r\n\t\t */\r\n\t\tconst sectionTotal = {\r\n\t\t\tmargin: [0, 20, 0, 0],\r\n\t\t\tcolumns: [\r\n\t\t\t\t{\r\n\t\t\t\t\twidth: \"*\",\r\n\t\t\t\t\tstack: [\" \"],\r\n\t\t\t\t\tstyle: \"text\",\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\twidth: 200,\r\n\t\t\t\t\tlineHeight: 1.5,\r\n\t\t\t\t\tstyle: \"textBold\",\r\n\t\t\t\t\ttable: {\r\n\t\t\t\t\t\twidths: [80, \"*\"],\r\n\t\t\t\t\t\theaderRows: 1,\r\n\t\t\t\t\t\tlineHeight: 1.5,\r\n\t\t\t\t\t\tbody: [\r\n\t\t\t\t\t\t\t[\r\n\t\t\t\t\t\t\t\t`\\n ${this.config.string.subTotal}`,\r\n\t\t\t\t\t\t\t\t`\\n ${this.currency}${helper.calcSubTotal(\r\n\t\t\t\t\t\t\t\t\tthis.items\r\n\t\t\t\t\t\t\t\t)}`,\r\n\t\t\t\t\t\t\t],\r\n\t\t\t\t\t\t\t[\r\n\t\t\t\t\t\t\t\t`\\n ${this.config.string.totalTax}`,\r\n\t\t\t\t\t\t\t\t`\\n ${this.currency}${helper.calcTax(\r\n\t\t\t\t\t\t\t\t\tthis.items\r\n\t\t\t\t\t\t\t\t)}`,\r\n\t\t\t\t\t\t\t],\r\n\t\t\t\t\t\t\t[\r\n\t\t\t\t\t\t\t\t`\\n ${this.config.string.total}`,\r\n\t\t\t\t\t\t\t\t`\\n ${this.currency}${helper.calcFinalTotal(\r\n\t\t\t\t\t\t\t\t\tthis.items\r\n\t\t\t\t\t\t\t\t)}`,\r\n\t\t\t\t\t\t\t],\r\n\t\t\t\t\t\t],\r\n\t\t\t\t\t},\r\n\t\t\t\t},\r\n\t\t\t],\r\n\t\t};\r\n\r\n\t\tsections.push(sectionTotal);\r\n\r\n\t\t/**\r\n\t\t * Left: QR section.\r\n\t\t *\r\n\t\t * @since 1.0.0\r\n\t\t */\r\n\t\tif (this.payload.qr) {\r\n\t\t\tconst sectionQR = {\r\n\t\t\t\tmargin: [0, 50, 0, 0],\r\n\t\t\t\tqr: this.payload.qr.data,\r\n\t\t\t\tfit: this.payload.qr.width || \"50\",\r\n\t\t\t};\r\n\r\n\t\t\tsections.push(sectionQR);\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Left: Notes section.\r\n\t\t *\r\n\t\t * @since 1.0.0\r\n\t\t */\r\n\t\tif (this.payload.note) {\r\n\t\t\tconst sectionNote = {\r\n\t\t\t\tmargin: [0, this.payload.qr ? 20 : 50, 0, 0],\r\n\t\t\t\ttext: this.payload.note,\r\n\t\t\t\titalics: true,\r\n\t\t\t};\r\n\r\n\t\t\tsections.push(sectionNote);\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Return the invoice sections.\r\n\t\t *\r\n\t\t * @since 1.0.0\r\n\t\t */\r\n\t\treturn sections;\r\n\t}\r\n}\r\n"]} \ No newline at end of file diff --git a/dist/index.mjs b/dist/index.mjs index 3b8f549..e2e35c3 100644 --- a/dist/index.mjs +++ b/dist/index.mjs @@ -1,4 +1,4 @@ -var u=(s=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(s,{get:(t,e)=>(typeof require<"u"?require:t)[e]}):s)(function(s){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+s+'" is not supported')});var f=(s,t)=>()=>(t||s((t={exports:{}}).exports,t),t.exports);var p=f((w,y)=>{var I={calcItemTotal:function(s){let t=s.price||0,e=s.quantity||1;return (t*e).toFixed(2)},calcSubTotal:function(s){if(s.length===0)return 0;let t=0;return s.forEach(e=>{t+=Number(this.calcItemTotal(e));}),t.toFixed(2)},calcTax:function(s){if(s.length===0)return 0;let t=0;return s.forEach(e=>{let c=e.price,a=e.quantity,o=e.tax||0;t+=c*a*o/100;}),t.toFixed(2)},calcFinalTotal:function(s){if(s.length===0)return 0;let t=Number(this.calcSubTotal(s)),e=Number(this.calcTax(s));return (t+e).toFixed(2)}};y.exports=I;});var g=f((H,d)=>{var v={string:{invoice:"I N V O I C E",refNumber:"Ref no: #",date:"Date:",dueDate:"Due Date:",status:"Status:",billTo:"Bill To",item:"Item",quantity:"Qty",price:"Price",tax:"Tax",total:"Total",subTotal:"Subtotal",totalTax:"Total Tax"},font:{helvetica:{normal:"Helvetica",bold:"Helvetica-Bold",italics:"Helvetica-Oblique",bolditalics:"Helvetica-BoldOblique"},noto:{}}};d.exports=v;});var T=u("fs"),k=u("path"),q=u("pdfmake"),l=p(),S=g(),h=class{payload;company;invoice;customer;items;currency;path;qr;note;date;config;constructor(t,e=S){this.payload=t,this.company=t.company,this.customer=t.customer,this.invoice=t.invoice,this.items=t.items,this.qr=t.qr,this.note=t.note,this.currency=this.invoice.currency||"$",this.path=k.resolve(this.invoice.path)||"./invoice.pdf",this.date=new Date().toLocaleDateString("en-US",{year:"numeric",month:"numeric",day:"numeric"}),this.config=e;}async create(){let t=new q(this.fonts()),e={pageSize:"A4",orientation:"portrait",pageMargins:[40,40,40,40],info:this.meta(),content:this.content(),defaultStyle:this.defaultStyle(),styles:this.styles()};return new Promise((c,a)=>{let o=t.createPdfKitDocument(e),r=T.createWriteStream(this.path);o.pipe(r),o.on("end",()=>{c(this.path);}),o.on("error",n=>{a(n);}),o.end();})}fonts(){return {Helvetica:{normal:"Helvetica",bold:"Helvetica-Bold",italics:"Helvetica-Oblique",bolditalics:"Helvetica-BoldOblique"}}}meta(){return {title:"Invoice - #"+this.invoice.number,author:this.company.name,subject:"Invoice - "+this.customer.name,keywords:"invoice"}}defaultStyle(){return {fontSize:10,lineHeight:1.8,bold:!1,font:"Helvetica",color:"#222222",columnGap:30}}styles(){return {h1:{fontSize:18,bold:!0},h2:{fontSize:16,bold:!0},h3:{fontSize:14,bold:!0},text:{fontSize:10,bold:!1},textBold:{fontSize:10,bold:!0}}}content(){let t=[],e={columns:[{width:"70%",stack:[],style:"text"},{width:"30%",stack:[],style:"text"}]};if(this.company.logo){if(!this.company.logo.startsWith("typeof require<"u"?require:typeof Proxy<"u"?new Proxy(s,{get:(t,e)=>(typeof require<"u"?require:t)[e]}):s)(function(s){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+s+'" is not supported')});var f=(s,t)=>()=>(t||s((t={exports:{}}).exports,t),t.exports);var p=f((w,y)=>{var I={calcItemTotal:function(s){let t=s.price||0,e=s.quantity||1;return (t*e).toFixed(2)},calcSubTotal:function(s){if(s.length===0)return 0;let t=0;return s.forEach(e=>{t+=Number(this.calcItemTotal(e));}),t.toFixed(2)},calcTax:function(s){if(s.length===0)return 0;let t=0;return s.forEach(e=>{let c=e.price,a=e.quantity,o=e.tax||0;t+=c*a*o/100;}),t.toFixed(2)},calcFinalTotal:function(s){if(s.length===0)return 0;let t=Number(this.calcSubTotal(s)),e=Number(this.calcTax(s));return (t+e).toFixed(2)}};y.exports=I;});var g=f((H,d)=>{var v={string:{invoice:"I N V O I C E",refNumber:"Ref no",date:"Date",dueDate:"Due Date",status:"Status",billTo:"Bill To",item:"Item",quantity:"Qty",price:"Price",tax:"Tax",total:"Total",subTotal:"Subtotal",totalTax:"Total Tax"},font:{helvetica:{normal:"Helvetica",bold:"Helvetica-Bold",italics:"Helvetica-Oblique",bolditalics:"Helvetica-BoldOblique"}}};d.exports=v;});var T=u("fs"),k=u("path"),q=u("pdfmake"),l=p(),S=g(),h=class{payload;company;invoice;customer;items;currency;path;qr;note;date;config;constructor(t,e=S){this.payload=t,this.company=t.company,this.customer=t.customer,this.invoice=t.invoice,this.items=t.items,this.qr=t.qr,this.note=t.note,this.currency=this.invoice.currency||"$",this.path=k.resolve(this.invoice.path)||"./invoice.pdf",this.date=new Date().toLocaleDateString("en-US",{year:"numeric",month:"numeric",day:"numeric"}),this.config=e;}async create(){let t=new q(this.fonts()),e={pageSize:"A4",orientation:"portrait",pageMargins:[40,40,40,40],info:this.meta(),content:this.content(),defaultStyle:this.defaultStyle(),styles:this.styles()};return new Promise((c,a)=>{let o=t.createPdfKitDocument(e),r=T.createWriteStream(this.path);o.pipe(r),o.on("end",()=>{c(this.path);}),o.on("error",n=>{a(n);}),o.end();})}fonts(){return {Helvetica:{normal:"Helvetica",bold:"Helvetica-Bold",italics:"Helvetica-Oblique",bolditalics:"Helvetica-BoldOblique"}}}meta(){return {title:"Invoice - #"+this.invoice.number,author:this.company.name,subject:"Invoice - "+this.customer.name,keywords:"invoice"}}defaultStyle(){return {fontSize:10,lineHeight:1.8,bold:!1,font:"Helvetica",color:"#222222",columnGap:30}}styles(){return {h1:{fontSize:18,bold:!0},h2:{fontSize:16,bold:!0},h3:{fontSize:14,bold:!0},text:{fontSize:10,bold:!1},textBold:{fontSize:10,bold:!0}}}content(){let t=[],e={columns:[{width:"70%",stack:[],style:"text"},{width:"30%",stack:[],style:"text"}]};if(this.company.logo){if(!this.company.logo.startsWith(" {\r\n\t\t\ttotal += Number(this.calcItemTotal(item));\r\n\t\t});\r\n\r\n\t\treturn total.toFixed(2);\r\n\t},\r\n\r\n\t/**\r\n\t * Calculate tax.\r\n\t *\r\n\t * @param {Object} items.\r\n\t * @returns {number} total.\r\n\t * @since 1.0.0\r\n\t */\r\n\tcalcTax: function (items: ItemInfo[]): number | string {\r\n\t\tif (items.length === 0) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\tlet total = 0;\r\n\r\n\t\titems.forEach((item) => {\r\n\t\t\tconst price = item.price;\r\n\t\t\tconst quantity = item.quantity;\r\n\t\t\tconst tax = item.tax || 0;\r\n\r\n\t\t\ttotal += (price * quantity * tax) / 100;\r\n\t\t});\r\n\r\n\t\treturn total.toFixed(2);\r\n\t},\r\n\r\n\t/**\r\n\t * Calculate total final price.\r\n\t *\r\n\t * @param {Object} items.\r\n\t * @returns {number} total.\r\n\t * @since 1.0.0\r\n\t */\r\n\tcalcFinalTotal: function (items: ItemInfo[]): number | string {\r\n\t\tif (items.length === 0) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\tconst subTotal = Number(this.calcSubTotal(items));\r\n\t\tconst tax = Number(this.calcTax(items));\r\n\r\n\t\treturn (subTotal + tax).toFixed(2);\r\n\t},\r\n};\r\n\r\nmodule.exports = helper;\r\n","/**\r\n * Holds the default configuration.\r\n *\r\n * @returns {Object} config.\r\n * @since 1.0.7\r\n */\r\nconst defaultConfig = {\r\n\tstring: {\r\n\t\tinvoice: \"I N V O I C E\",\r\n\t\trefNumber: \"Ref no: #\",\r\n\t\tdate: \"Date:\",\r\n\t\tdueDate: \"Due Date:\",\r\n\t\tstatus: \"Status:\",\r\n\t\tbillTo: \"Bill To\",\r\n\t\titem: \"Item\",\r\n\t\tquantity: \"Qty\",\r\n\t\tprice: \"Price\",\r\n\t\ttax: \"Tax\",\r\n\t\ttotal: \"Total\",\r\n\t\tsubTotal: \"Subtotal\",\r\n\t\ttotalTax: \"Total Tax\",\r\n\t},\r\n\tfont: {\r\n\t\thelvetica: {\r\n\t\t\tnormal: \"Helvetica\",\r\n\t\t\tbold: \"Helvetica-Bold\",\r\n\t\t\titalics: \"Helvetica-Oblique\",\r\n\t\t\tbolditalics: \"Helvetica-BoldOblique\",\r\n\t\t},\r\n noto: {\r\n \r\n }\r\n\t},\r\n};\r\n\r\nmodule.exports = defaultConfig;\r\n","const fs = require(\"fs\");\r\nconst path = require(\"path\");\r\nconst invoiceMaker = require(\"pdfmake\");\r\nconst helper = require(\"../utils/helper\");\r\nconst defaultConfig = require(\"../utils/config\");\r\n\r\nimport type {\r\n\tCompanyInfo,\r\n\tCustomerInfo,\r\n\tInvoiceInfo,\r\n\tItemInfo,\r\n\tQRInfo,\r\n\tNotes,\r\n\tInvoicePayLoad,\r\n\tSimplePDFInvoice,\r\n\tConfiguration,\r\n} from \"../../global\";\r\n\r\nexport class PDFInvoice implements SimplePDFInvoice {\r\n\tpayload: InvoicePayLoad;\r\n\tcompany: CompanyInfo;\r\n\tinvoice: InvoiceInfo;\r\n\tcustomer: CustomerInfo;\r\n\titems: ItemInfo[];\r\n\tcurrency: string;\r\n\tpath: string;\r\n\tqr: QRInfo;\r\n\tnote: Notes;\r\n\tdate: string;\r\n\tconfig: Configuration;\r\n\tconstructor(\r\n\t\tpayload: InvoicePayLoad,\r\n\t\tconfig: Configuration = defaultConfig\r\n\t) {\r\n\t\tthis.payload = payload;\r\n\r\n\t\t// Invoice content section.\r\n\t\tthis.company = payload.company;\r\n\t\tthis.customer = payload.customer;\r\n\t\tthis.invoice = payload.invoice;\r\n\t\tthis.items = payload.items;\r\n\t\tthis.qr = payload.qr;\r\n\t\tthis.note = payload.note;\r\n\r\n\t\t// Invoice currency.\r\n\t\tthis.currency = this.invoice.currency || \"$\";\r\n\r\n\t\t// Path.\r\n\t\tthis.path = path.resolve(this.invoice.path) || \"./invoice.pdf\";\r\n\r\n\t\t// Invoice information.\r\n\t\tthis.date = new Date().toLocaleDateString(\"en-US\", {\r\n\t\t\tyear: \"numeric\",\r\n\t\t\tmonth: \"numeric\",\r\n\t\t\tday: \"numeric\",\r\n\t\t});\r\n\r\n\t\t// Configuration.\r\n\t\tthis.config = config;\r\n\t}\r\n\r\n\t/**\r\n\t * Create a PDF invoice.\r\n\t *\r\n\t * @returns {void}\r\n\t * @since 1.0.0\r\n\t */\r\n\tasync create(): Promise {\r\n\t\tconst printer = new invoiceMaker(this.fonts());\r\n\r\n\t\tconst docDefinition = {\r\n\t\t\tpageSize: \"A4\",\r\n\t\t\torientation: \"portrait\",\r\n\t\t\tpageMargins: [40, 40, 40, 40],\r\n\t\t\tinfo: this.meta(),\r\n\t\t\tcontent: this.content(),\r\n\t\t\tdefaultStyle: this.defaultStyle(),\r\n\t\t\tstyles: this.styles(),\r\n\t\t};\r\n\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tconst doc = printer.createPdfKitDocument(docDefinition);\r\n\t\t\tconst stream = fs.createWriteStream(this.path);\r\n\r\n\t\t\tdoc.pipe(stream);\r\n\r\n\t\t\tdoc.on(\"end\", () => {\r\n\t\t\t\tresolve(this.path);\r\n\t\t\t});\r\n\r\n\t\t\tdoc.on(\"error\", (err: any) => {\r\n\t\t\t\treject(err);\r\n\t\t\t});\r\n\r\n\t\t\tdoc.end();\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Fonts.\r\n\t *\r\n\t * @returns {Object} font.\r\n\t * @since 1.0.0\r\n\t */\r\n\tfonts(): any {\r\n\t\tconst fonts = {\r\n\t\t\tHelvetica: {\r\n\t\t\t\tnormal: \"Helvetica\",\r\n\t\t\t\tbold: \"Helvetica-Bold\",\r\n\t\t\t\titalics: \"Helvetica-Oblique\",\r\n\t\t\t\tbolditalics: \"Helvetica-BoldOblique\",\r\n\t\t\t},\r\n\t\t};\r\n\r\n\t\treturn fonts;\r\n\t}\r\n\r\n\t/**\r\n\t * Doc meta.\r\n\t *\r\n\t * @returns {Object} meta.\r\n\t * @since 1.0.0\r\n\t */\r\n\tmeta(): any {\r\n\t\tconst meta = {\r\n\t\t\ttitle: \"Invoice - #\" + this.invoice.number,\r\n\t\t\tauthor: this.company.name,\r\n\t\t\tsubject: \"Invoice - \" + this.customer.name,\r\n\t\t\tkeywords: \"invoice\",\r\n\t\t};\r\n\r\n\t\treturn meta;\r\n\t}\r\n\r\n\t/**\r\n\t * Default invoice styles.\r\n\t *\r\n\t * @returns {Object} defaults.\r\n\t * @since 1.0.0\r\n\t */\r\n\tdefaultStyle(): any {\r\n\t\tconst defaults = {\r\n\t\t\tfontSize: 10,\r\n\t\t\tlineHeight: 1.8,\r\n\t\t\tbold: false,\r\n\t\t\tfont: \"Helvetica\",\r\n\t\t\tcolor: \"#222222\",\r\n\t\t\tcolumnGap: 30,\r\n\t\t};\r\n\t\treturn defaults;\r\n\t}\r\n\r\n\t/**\r\n\t * Invoice styles.\r\n\t *\r\n\t * @returns {Object} defaults.\r\n\t * @since 1.0.0\r\n\t */\r\n\tstyles(): any {\r\n\t\tconst styles = {\r\n\t\t\th1: {\r\n\t\t\t\tfontSize: 18,\r\n\t\t\t\tbold: true,\r\n\t\t\t},\r\n\t\t\th2: {\r\n\t\t\t\tfontSize: 16,\r\n\t\t\t\tbold: true,\r\n\t\t\t},\r\n\t\t\th3: {\r\n\t\t\t\tfontSize: 14,\r\n\t\t\t\tbold: true,\r\n\t\t\t},\r\n\t\t\ttext: {\r\n\t\t\t\tfontSize: 10,\r\n\t\t\t\tbold: false,\r\n\t\t\t},\r\n\t\t\ttextBold: {\r\n\t\t\t\tfontSize: 10,\r\n\t\t\t\tbold: true,\r\n\t\t\t},\r\n\t\t};\r\n\t\treturn styles;\r\n\t}\r\n\r\n\t/**\r\n\t * Return the invoice layout.\r\n\t *\r\n\t * @returns {Object} layout.\r\n\t * @since 1.0.0\r\n\t */\r\n\tcontent(): any {\r\n\t\tconst sections = [];\r\n\r\n\t\t/**\r\n\t\t * Left: Company section.\r\n\t\t * Right: Invoice section.\r\n\t\t *\r\n\t\t * @since 1.0.0\r\n\t\t */\r\n\t\tconst sectionCompany = {\r\n\t\t\tcolumns: [\r\n\t\t\t\t{\r\n\t\t\t\t\twidth: \"70%\",\r\n\t\t\t\t\tstack: [] as any,\r\n\t\t\t\t\tstyle: \"text\",\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\twidth: \"30%\",\r\n\t\t\t\t\tstack: [] as any,\r\n\t\t\t\t\tstyle: \"text\",\r\n\t\t\t\t},\r\n\t\t\t],\r\n\t\t};\r\n\r\n\t\tif (this.company.logo) {\r\n\t\t\tif (!this.company.logo.startsWith(\" 0) {\r\n\t\t\tthis.items.forEach((item) => {\r\n\t\t\t\tconst totalPrice = helper.calcItemTotal(item);\r\n\r\n\t\t\t\tsectionItems.table.body.push([\r\n\t\t\t\t\t`\\n ${item.name}`,\r\n\t\t\t\t\t`\\n ${item.quantity}`,\r\n\t\t\t\t\t`\\n ${this.currency}${item.price}`,\r\n\t\t\t\t\t`\\n ${item.tax || 0}%`,\r\n\t\t\t\t\t`\\n ${this.currency}${totalPrice}`,\r\n\t\t\t\t]);\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tsections.push(sectionItems);\r\n\r\n\t\t/**\r\n\t\t * Right: Total section.\r\n\t\t *\r\n\t\t * @since 1.0.0\r\n\t\t */\r\n\t\tconst sectionTotal = {\r\n\t\t\tmargin: [0, 20, 0, 0],\r\n\t\t\tcolumns: [\r\n\t\t\t\t{\r\n\t\t\t\t\twidth: \"*\",\r\n\t\t\t\t\tstack: [\" \"],\r\n\t\t\t\t\tstyle: \"text\",\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\twidth: 200,\r\n\t\t\t\t\tlineHeight: 1.5,\r\n\t\t\t\t\tstyle: \"textBold\",\r\n\t\t\t\t\ttable: {\r\n\t\t\t\t\t\twidths: [80, \"*\"],\r\n\t\t\t\t\t\theaderRows: 1,\r\n\t\t\t\t\t\tlineHeight: 1.5,\r\n\t\t\t\t\t\tbody: [\r\n\t\t\t\t\t\t\t[\r\n\t\t\t\t\t\t\t\t`\\n ${this.config.string.subTotal}`,\r\n\t\t\t\t\t\t\t\t`\\n ${this.currency}${helper.calcSubTotal(\r\n\t\t\t\t\t\t\t\t\tthis.items\r\n\t\t\t\t\t\t\t\t)}`,\r\n\t\t\t\t\t\t\t],\r\n\t\t\t\t\t\t\t[\r\n\t\t\t\t\t\t\t\t`\\n ${this.config.string.totalTax}`,\r\n\t\t\t\t\t\t\t\t`\\n ${this.currency}${helper.calcTax(\r\n\t\t\t\t\t\t\t\t\tthis.items\r\n\t\t\t\t\t\t\t\t)}`,\r\n\t\t\t\t\t\t\t],\r\n\t\t\t\t\t\t\t[\r\n\t\t\t\t\t\t\t\t`\\n ${this.config.string.total}`,\r\n\t\t\t\t\t\t\t\t`\\n ${this.currency}${helper.calcFinalTotal(\r\n\t\t\t\t\t\t\t\t\tthis.items\r\n\t\t\t\t\t\t\t\t)}`,\r\n\t\t\t\t\t\t\t],\r\n\t\t\t\t\t\t],\r\n\t\t\t\t\t},\r\n\t\t\t\t},\r\n\t\t\t],\r\n\t\t};\r\n\r\n\t\tsections.push(sectionTotal);\r\n\r\n\t\t/**\r\n\t\t * Left: QR section.\r\n\t\t *\r\n\t\t * @since 1.0.0\r\n\t\t */\r\n\t\tif (this.payload.qr) {\r\n\t\t\tconst sectionQR = {\r\n\t\t\t\tmargin: [0, 50, 0, 0],\r\n\t\t\t\tqr: this.payload.qr.data,\r\n\t\t\t\tfit: this.payload.qr.width || \"50\",\r\n\t\t\t};\r\n\r\n\t\t\tsections.push(sectionQR);\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Left: Notes section.\r\n\t\t *\r\n\t\t * @since 1.0.0\r\n\t\t */\r\n\t\tif (this.payload.note) {\r\n\t\t\tconst sectionNote = {\r\n\t\t\t\tmargin: [0, this.payload.qr ? 20 : 50, 0, 0],\r\n\t\t\t\ttext: this.payload.note,\r\n\t\t\t\titalics: true,\r\n\t\t\t};\r\n\r\n\t\t\tsections.push(sectionNote);\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Return the invoice sections.\r\n\t\t *\r\n\t\t * @since 1.0.0\r\n\t\t */\r\n\t\treturn sections;\r\n\t}\r\n}\r\n"]} \ No newline at end of file +{"version":3,"sources":["../src/utils/helper.ts","../src/utils/config.ts","../src/class/invoice.ts"],"names":["require_helper","__commonJSMin","exports","module","helper","item","price","quantity","items","total","tax","subTotal","require_config","defaultConfig","fs","path","invoiceMaker","PDFInvoice","payload","config","printer","docDefinition","resolve","reject","doc","stream","err","sections","sectionCompany","refLabel","dateLabel","dueDateLabel","statusLabel","sectionCustomer","sectionItems","totalPrice","sectionTotal","sectionQR","sectionNote"],"mappings":"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","sourcesContent":["import type { ItemInfo } from \"../../global\";\r\n\r\ninterface Helpers {\r\n\tcalcItemTotal(item: ItemInfo): number | string;\r\n\tcalcTax(items: ItemInfo[]): number | string;\r\n\tcalcSubTotal(items: ItemInfo[]): number | string;\r\n\tcalcFinalTotal(items: ItemInfo[]): number | string;\r\n}\r\n\r\nconst helper: Helpers = {\r\n\t/**\r\n\t * Item total price calculation.\r\n\t *\r\n\t * @param {Object} item.\r\n\t * @returns {number} total.\r\n\t * @since 1.0.0\r\n\t */\r\n\tcalcItemTotal: function (item: ItemInfo): string {\r\n\t\tconst price = item.price || 0;\r\n\t\tconst quantity = item.quantity || 1;\r\n\t\treturn (price * quantity).toFixed(2);\r\n\t},\r\n\r\n\t/**\r\n\t * Calculate subtotal.\r\n\t *\r\n\t * @param {Object} items.\r\n\t * @returns {number} total.\r\n\t * @since 1.0.0\r\n\t */\r\n\tcalcSubTotal: function (items: ItemInfo[]): number | string {\r\n\t\tif (items.length === 0) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\tlet total = 0;\r\n\r\n\t\titems.forEach((item) => {\r\n\t\t\ttotal += Number(this.calcItemTotal(item));\r\n\t\t});\r\n\r\n\t\treturn total.toFixed(2);\r\n\t},\r\n\r\n\t/**\r\n\t * Calculate tax.\r\n\t *\r\n\t * @param {Object} items.\r\n\t * @returns {number} total.\r\n\t * @since 1.0.0\r\n\t */\r\n\tcalcTax: function (items: ItemInfo[]): number | string {\r\n\t\tif (items.length === 0) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\tlet total = 0;\r\n\r\n\t\titems.forEach((item) => {\r\n\t\t\tconst price = item.price;\r\n\t\t\tconst quantity = item.quantity;\r\n\t\t\tconst tax = item.tax || 0;\r\n\r\n\t\t\ttotal += (price * quantity * tax) / 100;\r\n\t\t});\r\n\r\n\t\treturn total.toFixed(2);\r\n\t},\r\n\r\n\t/**\r\n\t * Calculate total final price.\r\n\t *\r\n\t * @param {Object} items.\r\n\t * @returns {number} total.\r\n\t * @since 1.0.0\r\n\t */\r\n\tcalcFinalTotal: function (items: ItemInfo[]): number | string {\r\n\t\tif (items.length === 0) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\tconst subTotal = Number(this.calcSubTotal(items));\r\n\t\tconst tax = Number(this.calcTax(items));\r\n\r\n\t\treturn (subTotal + tax).toFixed(2);\r\n\t},\r\n};\r\n\r\nmodule.exports = helper;\r\n","/**\r\n * Holds the default configuration.\r\n *\r\n * @returns {Object} config.\r\n * @since 1.0.7\r\n */\r\nconst defaultConfig = {\r\n\tstring: {\r\n\t\tinvoice: \"I N V O I C E\",\r\n\t\trefNumber: \"Ref no\",\r\n\t\tdate: \"Date\",\r\n\t\tdueDate: \"Due Date\",\r\n\t\tstatus: \"Status\",\r\n\t\tbillTo: \"Bill To\",\r\n\t\titem: \"Item\",\r\n\t\tquantity: \"Qty\",\r\n\t\tprice: \"Price\",\r\n\t\ttax: \"Tax\",\r\n\t\ttotal: \"Total\",\r\n\t\tsubTotal: \"Subtotal\",\r\n\t\ttotalTax: \"Total Tax\",\r\n\t},\r\n\tfont: {\r\n\t\thelvetica: {\r\n\t\t\tnormal: \"Helvetica\",\r\n\t\t\tbold: \"Helvetica-Bold\",\r\n\t\t\titalics: \"Helvetica-Oblique\",\r\n\t\t\tbolditalics: \"Helvetica-BoldOblique\",\r\n\t\t},\r\n\t},\r\n};\r\n\r\nmodule.exports = defaultConfig;\r\n","const fs = require(\"fs\");\r\nconst path = require(\"path\");\r\nconst invoiceMaker = require(\"pdfmake\");\r\nconst helper = require(\"../utils/helper\");\r\nconst defaultConfig = require(\"../utils/config\");\r\n\r\nimport type {\r\n\tCompanyInfo,\r\n\tCustomerInfo,\r\n\tInvoiceInfo,\r\n\tItemInfo,\r\n\tQRInfo,\r\n\tNotes,\r\n\tInvoicePayLoad,\r\n\tSimplePDFInvoice,\r\n\tConfiguration,\r\n} from \"../../global\";\r\n\r\nexport class PDFInvoice implements SimplePDFInvoice {\r\n\tpayload: InvoicePayLoad;\r\n\tcompany: CompanyInfo;\r\n\tinvoice: InvoiceInfo;\r\n\tcustomer: CustomerInfo;\r\n\titems: ItemInfo[];\r\n\tcurrency: string;\r\n\tpath: string;\r\n\tqr: QRInfo;\r\n\tnote: Notes;\r\n\tdate: string;\r\n\tconfig: Configuration;\r\n\tconstructor(\r\n\t\tpayload: InvoicePayLoad,\r\n\t\tconfig: Configuration = defaultConfig\r\n\t) {\r\n\t\tthis.payload = payload;\r\n\r\n\t\t// Invoice content section.\r\n\t\tthis.company = payload.company;\r\n\t\tthis.customer = payload.customer;\r\n\t\tthis.invoice = payload.invoice;\r\n\t\tthis.items = payload.items;\r\n\t\tthis.qr = payload.qr;\r\n\t\tthis.note = payload.note;\r\n\r\n\t\t// Invoice currency.\r\n\t\tthis.currency = this.invoice.currency || \"$\";\r\n\r\n\t\t// Path.\r\n\t\tthis.path = path.resolve(this.invoice.path) || \"./invoice.pdf\";\r\n\r\n\t\t// Invoice information.\r\n\t\tthis.date = new Date().toLocaleDateString(\"en-US\", {\r\n\t\t\tyear: \"numeric\",\r\n\t\t\tmonth: \"numeric\",\r\n\t\t\tday: \"numeric\",\r\n\t\t});\r\n\r\n\t\t// Configuration.\r\n\t\tthis.config = config;\r\n\t}\r\n\r\n\t/**\r\n\t * Create a PDF invoice.\r\n\t *\r\n\t * @returns {void}\r\n\t * @since 1.0.0\r\n\t */\r\n\tasync create(): Promise {\r\n\t\tconst printer = new invoiceMaker(this.fonts());\r\n\r\n\t\tconst docDefinition = {\r\n\t\t\tpageSize: \"A4\",\r\n\t\t\torientation: \"portrait\",\r\n\t\t\tpageMargins: [40, 40, 40, 40],\r\n\t\t\tinfo: this.meta(),\r\n\t\t\tcontent: this.content(),\r\n\t\t\tdefaultStyle: this.defaultStyle(),\r\n\t\t\tstyles: this.styles(),\r\n\t\t};\r\n\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tconst doc = printer.createPdfKitDocument(docDefinition);\r\n\t\t\tconst stream = fs.createWriteStream(this.path);\r\n\r\n\t\t\tdoc.pipe(stream);\r\n\r\n\t\t\tdoc.on(\"end\", () => {\r\n\t\t\t\tresolve(this.path);\r\n\t\t\t});\r\n\r\n\t\t\tdoc.on(\"error\", (err: any) => {\r\n\t\t\t\treject(err);\r\n\t\t\t});\r\n\r\n\t\t\tdoc.end();\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Fonts.\r\n\t *\r\n\t * @returns {Object} font.\r\n\t * @since 1.0.0\r\n\t */\r\n\tfonts(): any {\r\n\t\tconst fonts = {\r\n\t\t\tHelvetica: {\r\n\t\t\t\tnormal: \"Helvetica\",\r\n\t\t\t\tbold: \"Helvetica-Bold\",\r\n\t\t\t\titalics: \"Helvetica-Oblique\",\r\n\t\t\t\tbolditalics: \"Helvetica-BoldOblique\",\r\n\t\t\t},\r\n\t\t};\r\n\r\n\t\treturn fonts;\r\n\t}\r\n\r\n\t/**\r\n\t * Doc meta.\r\n\t *\r\n\t * @returns {Object} meta.\r\n\t * @since 1.0.0\r\n\t */\r\n\tmeta(): any {\r\n\t\tconst meta = {\r\n\t\t\ttitle: \"Invoice - #\" + this.invoice.number,\r\n\t\t\tauthor: this.company.name,\r\n\t\t\tsubject: \"Invoice - \" + this.customer.name,\r\n\t\t\tkeywords: \"invoice\",\r\n\t\t};\r\n\r\n\t\treturn meta;\r\n\t}\r\n\r\n\t/**\r\n\t * Default invoice styles.\r\n\t *\r\n\t * @returns {Object} defaults.\r\n\t * @since 1.0.0\r\n\t */\r\n\tdefaultStyle(): any {\r\n\t\tconst defaults = {\r\n\t\t\tfontSize: 10,\r\n\t\t\tlineHeight: 1.8,\r\n\t\t\tbold: false,\r\n\t\t\tfont: \"Helvetica\",\r\n\t\t\tcolor: \"#222222\",\r\n\t\t\tcolumnGap: 30,\r\n\t\t};\r\n\t\treturn defaults;\r\n\t}\r\n\r\n\t/**\r\n\t * Invoice styles.\r\n\t *\r\n\t * @returns {Object} defaults.\r\n\t * @since 1.0.0\r\n\t */\r\n\tstyles(): any {\r\n\t\tconst styles = {\r\n\t\t\th1: {\r\n\t\t\t\tfontSize: 18,\r\n\t\t\t\tbold: true,\r\n\t\t\t},\r\n\t\t\th2: {\r\n\t\t\t\tfontSize: 16,\r\n\t\t\t\tbold: true,\r\n\t\t\t},\r\n\t\t\th3: {\r\n\t\t\t\tfontSize: 14,\r\n\t\t\t\tbold: true,\r\n\t\t\t},\r\n\t\t\ttext: {\r\n\t\t\t\tfontSize: 10,\r\n\t\t\t\tbold: false,\r\n\t\t\t},\r\n\t\t\ttextBold: {\r\n\t\t\t\tfontSize: 10,\r\n\t\t\t\tbold: true,\r\n\t\t\t},\r\n\t\t};\r\n\t\treturn styles;\r\n\t}\r\n\r\n\t/**\r\n\t * Return the invoice layout.\r\n\t *\r\n\t * @returns {Object} layout.\r\n\t * @since 1.0.0\r\n\t */\r\n\tcontent(): any {\r\n\t\tconst sections = [];\r\n\r\n\t\t/**\r\n\t\t * Left: Company section.\r\n\t\t * Right: Invoice section.\r\n\t\t *\r\n\t\t * @since 1.0.0\r\n\t\t */\r\n\t\tconst sectionCompany = {\r\n\t\t\tcolumns: [\r\n\t\t\t\t{\r\n\t\t\t\t\twidth: \"70%\",\r\n\t\t\t\t\tstack: [] as any,\r\n\t\t\t\t\tstyle: \"text\",\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\twidth: \"30%\",\r\n\t\t\t\t\tstack: [] as any,\r\n\t\t\t\t\tstyle: \"text\",\r\n\t\t\t\t},\r\n\t\t\t],\r\n\t\t};\r\n\r\n\t\tif (this.company.logo) {\r\n\t\t\tif (!this.company.logo.startsWith(\" 0) {\r\n\t\t\tthis.items.forEach((item) => {\r\n\t\t\t\tconst totalPrice = helper.calcItemTotal(item);\r\n\r\n\t\t\t\tsectionItems.table.body.push([\r\n\t\t\t\t\t`\\n ${item.name}`,\r\n\t\t\t\t\t`\\n ${item.quantity}`,\r\n\t\t\t\t\t`\\n ${this.currency}${item.price}`,\r\n\t\t\t\t\t`\\n ${item.tax || 0}%`,\r\n\t\t\t\t\t`\\n ${this.currency}${totalPrice}`,\r\n\t\t\t\t]);\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tsections.push(sectionItems);\r\n\r\n\t\t/**\r\n\t\t * Right: Total section.\r\n\t\t *\r\n\t\t * @since 1.0.0\r\n\t\t */\r\n\t\tconst sectionTotal = {\r\n\t\t\tmargin: [0, 20, 0, 0],\r\n\t\t\tcolumns: [\r\n\t\t\t\t{\r\n\t\t\t\t\twidth: \"*\",\r\n\t\t\t\t\tstack: [\" \"],\r\n\t\t\t\t\tstyle: \"text\",\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\twidth: 200,\r\n\t\t\t\t\tlineHeight: 1.5,\r\n\t\t\t\t\tstyle: \"textBold\",\r\n\t\t\t\t\ttable: {\r\n\t\t\t\t\t\twidths: [80, \"*\"],\r\n\t\t\t\t\t\theaderRows: 1,\r\n\t\t\t\t\t\tlineHeight: 1.5,\r\n\t\t\t\t\t\tbody: [\r\n\t\t\t\t\t\t\t[\r\n\t\t\t\t\t\t\t\t`\\n ${this.config.string.subTotal}`,\r\n\t\t\t\t\t\t\t\t`\\n ${this.currency}${helper.calcSubTotal(\r\n\t\t\t\t\t\t\t\t\tthis.items\r\n\t\t\t\t\t\t\t\t)}`,\r\n\t\t\t\t\t\t\t],\r\n\t\t\t\t\t\t\t[\r\n\t\t\t\t\t\t\t\t`\\n ${this.config.string.totalTax}`,\r\n\t\t\t\t\t\t\t\t`\\n ${this.currency}${helper.calcTax(\r\n\t\t\t\t\t\t\t\t\tthis.items\r\n\t\t\t\t\t\t\t\t)}`,\r\n\t\t\t\t\t\t\t],\r\n\t\t\t\t\t\t\t[\r\n\t\t\t\t\t\t\t\t`\\n ${this.config.string.total}`,\r\n\t\t\t\t\t\t\t\t`\\n ${this.currency}${helper.calcFinalTotal(\r\n\t\t\t\t\t\t\t\t\tthis.items\r\n\t\t\t\t\t\t\t\t)}`,\r\n\t\t\t\t\t\t\t],\r\n\t\t\t\t\t\t],\r\n\t\t\t\t\t},\r\n\t\t\t\t},\r\n\t\t\t],\r\n\t\t};\r\n\r\n\t\tsections.push(sectionTotal);\r\n\r\n\t\t/**\r\n\t\t * Left: QR section.\r\n\t\t *\r\n\t\t * @since 1.0.0\r\n\t\t */\r\n\t\tif (this.payload.qr) {\r\n\t\t\tconst sectionQR = {\r\n\t\t\t\tmargin: [0, 50, 0, 0],\r\n\t\t\t\tqr: this.payload.qr.data,\r\n\t\t\t\tfit: this.payload.qr.width || \"50\",\r\n\t\t\t};\r\n\r\n\t\t\tsections.push(sectionQR);\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Left: Notes section.\r\n\t\t *\r\n\t\t * @since 1.0.0\r\n\t\t */\r\n\t\tif (this.payload.note) {\r\n\t\t\tconst sectionNote = {\r\n\t\t\t\tmargin: [0, this.payload.qr ? 20 : 50, 0, 0],\r\n\t\t\t\ttext: this.payload.note,\r\n\t\t\t\titalics: true,\r\n\t\t\t};\r\n\r\n\t\t\tsections.push(sectionNote);\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Return the invoice sections.\r\n\t\t *\r\n\t\t * @since 1.0.0\r\n\t\t */\r\n\t\treturn sections;\r\n\t}\r\n}\r\n"]} \ No newline at end of file diff --git a/dist/utils/config.js b/dist/utils/config.js index 0f51e9f..2e5c46d 100644 --- a/dist/utils/config.js +++ b/dist/utils/config.js @@ -1,6 +1,6 @@ 'use strict'; -var l=(a,t)=>()=>(t||a((t={exports:{}}).exports,t),t.exports);var o=l((u,e)=>{var i={string:{invoice:"I N V O I C E",refNumber:"Ref no: #",date:"Date:",dueDate:"Due Date:",status:"Status:",billTo:"Bill To",item:"Item",quantity:"Qty",price:"Price",tax:"Tax",total:"Total",subTotal:"Subtotal",totalTax:"Total Tax"},font:{helvetica:{normal:"Helvetica",bold:"Helvetica-Bold",italics:"Helvetica-Oblique",bolditalics:"Helvetica-BoldOblique"},noto:{}}};e.exports=i;});var config = o(); +var l=(a,t)=>()=>(t||a((t={exports:{}}).exports,t),t.exports);var o=l((u,e)=>{var i={string:{invoice:"I N V O I C E",refNumber:"Ref no",date:"Date",dueDate:"Due Date",status:"Status",billTo:"Bill To",item:"Item",quantity:"Qty",price:"Price",tax:"Tax",total:"Total",subTotal:"Subtotal",totalTax:"Total Tax"},font:{helvetica:{normal:"Helvetica",bold:"Helvetica-Bold",italics:"Helvetica-Oblique",bolditalics:"Helvetica-BoldOblique"}}};e.exports=i;});var config = o(); module.exports = config; //# sourceMappingURL=out.js.map diff --git a/dist/utils/config.js.map b/dist/utils/config.js.map index bdf3a93..d1eb91f 100644 --- a/dist/utils/config.js.map +++ b/dist/utils/config.js.map @@ -1 +1 @@ -{"version":3,"sources":["../../src/utils/config.ts"],"names":["require_config","__commonJSMin","exports","module","defaultConfig"],"mappings":"8DAAA,IAAAA,EAAAC,EAAA,CAAAC,EAAAC,IAAA,CAMA,IAAMC,EAAgB,CACrB,OAAQ,CACP,QAAS,gBACT,UAAW,YACX,KAAM,QACN,QAAS,YACT,OAAQ,UACR,OAAQ,UACR,KAAM,OACN,SAAU,MACV,MAAO,QACP,IAAK,MACL,MAAO,QACP,SAAU,WACV,SAAU,WACX,EACA,KAAM,CACL,UAAW,CACV,OAAQ,YACR,KAAM,iBACN,QAAS,oBACT,YAAa,uBACd,EACM,KAAM,CAEN,CACP,CACD,EAEAD,EAAO,QAAUC","sourcesContent":["/**\r\n * Holds the default configuration.\r\n *\r\n * @returns {Object} config.\r\n * @since 1.0.7\r\n */\r\nconst defaultConfig = {\r\n\tstring: {\r\n\t\tinvoice: \"I N V O I C E\",\r\n\t\trefNumber: \"Ref no: #\",\r\n\t\tdate: \"Date:\",\r\n\t\tdueDate: \"Due Date:\",\r\n\t\tstatus: \"Status:\",\r\n\t\tbillTo: \"Bill To\",\r\n\t\titem: \"Item\",\r\n\t\tquantity: \"Qty\",\r\n\t\tprice: \"Price\",\r\n\t\ttax: \"Tax\",\r\n\t\ttotal: \"Total\",\r\n\t\tsubTotal: \"Subtotal\",\r\n\t\ttotalTax: \"Total Tax\",\r\n\t},\r\n\tfont: {\r\n\t\thelvetica: {\r\n\t\t\tnormal: \"Helvetica\",\r\n\t\t\tbold: \"Helvetica-Bold\",\r\n\t\t\titalics: \"Helvetica-Oblique\",\r\n\t\t\tbolditalics: \"Helvetica-BoldOblique\",\r\n\t\t},\r\n noto: {\r\n \r\n }\r\n\t},\r\n};\r\n\r\nmodule.exports = defaultConfig;\r\n"]} \ No newline at end of file +{"version":3,"sources":["../../src/utils/config.ts"],"names":["require_config","__commonJSMin","exports","module","defaultConfig"],"mappings":"8DAAA,IAAAA,EAAAC,EAAA,CAAAC,EAAAC,IAAA,CAMA,IAAMC,EAAgB,CACrB,OAAQ,CACP,QAAS,gBACT,UAAW,SACX,KAAM,OACN,QAAS,WACT,OAAQ,SACR,OAAQ,UACR,KAAM,OACN,SAAU,MACV,MAAO,QACP,IAAK,MACL,MAAO,QACP,SAAU,WACV,SAAU,WACX,EACA,KAAM,CACL,UAAW,CACV,OAAQ,YACR,KAAM,iBACN,QAAS,oBACT,YAAa,uBACd,CACD,CACD,EAEAD,EAAO,QAAUC","sourcesContent":["/**\r\n * Holds the default configuration.\r\n *\r\n * @returns {Object} config.\r\n * @since 1.0.7\r\n */\r\nconst defaultConfig = {\r\n\tstring: {\r\n\t\tinvoice: \"I N V O I C E\",\r\n\t\trefNumber: \"Ref no\",\r\n\t\tdate: \"Date\",\r\n\t\tdueDate: \"Due Date\",\r\n\t\tstatus: \"Status\",\r\n\t\tbillTo: \"Bill To\",\r\n\t\titem: \"Item\",\r\n\t\tquantity: \"Qty\",\r\n\t\tprice: \"Price\",\r\n\t\ttax: \"Tax\",\r\n\t\ttotal: \"Total\",\r\n\t\tsubTotal: \"Subtotal\",\r\n\t\ttotalTax: \"Total Tax\",\r\n\t},\r\n\tfont: {\r\n\t\thelvetica: {\r\n\t\t\tnormal: \"Helvetica\",\r\n\t\t\tbold: \"Helvetica-Bold\",\r\n\t\t\titalics: \"Helvetica-Oblique\",\r\n\t\t\tbolditalics: \"Helvetica-BoldOblique\",\r\n\t\t},\r\n\t},\r\n};\r\n\r\nmodule.exports = defaultConfig;\r\n"]} \ No newline at end of file diff --git a/dist/utils/config.mjs b/dist/utils/config.mjs index 0d05ca6..6493a67 100644 --- a/dist/utils/config.mjs +++ b/dist/utils/config.mjs @@ -1,4 +1,4 @@ -var l=(a,t)=>()=>(t||a((t={exports:{}}).exports,t),t.exports);var o=l((u,e)=>{var i={string:{invoice:"I N V O I C E",refNumber:"Ref no: #",date:"Date:",dueDate:"Due Date:",status:"Status:",billTo:"Bill To",item:"Item",quantity:"Qty",price:"Price",tax:"Tax",total:"Total",subTotal:"Subtotal",totalTax:"Total Tax"},font:{helvetica:{normal:"Helvetica",bold:"Helvetica-Bold",italics:"Helvetica-Oblique",bolditalics:"Helvetica-BoldOblique"},noto:{}}};e.exports=i;});var config = o(); +var l=(a,t)=>()=>(t||a((t={exports:{}}).exports,t),t.exports);var o=l((u,e)=>{var i={string:{invoice:"I N V O I C E",refNumber:"Ref no",date:"Date",dueDate:"Due Date",status:"Status",billTo:"Bill To",item:"Item",quantity:"Qty",price:"Price",tax:"Tax",total:"Total",subTotal:"Subtotal",totalTax:"Total Tax"},font:{helvetica:{normal:"Helvetica",bold:"Helvetica-Bold",italics:"Helvetica-Oblique",bolditalics:"Helvetica-BoldOblique"}}};e.exports=i;});var config = o(); export { config as default }; //# sourceMappingURL=out.js.map diff --git a/dist/utils/config.mjs.map b/dist/utils/config.mjs.map index bdf3a93..d1eb91f 100644 --- a/dist/utils/config.mjs.map +++ b/dist/utils/config.mjs.map @@ -1 +1 @@ -{"version":3,"sources":["../../src/utils/config.ts"],"names":["require_config","__commonJSMin","exports","module","defaultConfig"],"mappings":"8DAAA,IAAAA,EAAAC,EAAA,CAAAC,EAAAC,IAAA,CAMA,IAAMC,EAAgB,CACrB,OAAQ,CACP,QAAS,gBACT,UAAW,YACX,KAAM,QACN,QAAS,YACT,OAAQ,UACR,OAAQ,UACR,KAAM,OACN,SAAU,MACV,MAAO,QACP,IAAK,MACL,MAAO,QACP,SAAU,WACV,SAAU,WACX,EACA,KAAM,CACL,UAAW,CACV,OAAQ,YACR,KAAM,iBACN,QAAS,oBACT,YAAa,uBACd,EACM,KAAM,CAEN,CACP,CACD,EAEAD,EAAO,QAAUC","sourcesContent":["/**\r\n * Holds the default configuration.\r\n *\r\n * @returns {Object} config.\r\n * @since 1.0.7\r\n */\r\nconst defaultConfig = {\r\n\tstring: {\r\n\t\tinvoice: \"I N V O I C E\",\r\n\t\trefNumber: \"Ref no: #\",\r\n\t\tdate: \"Date:\",\r\n\t\tdueDate: \"Due Date:\",\r\n\t\tstatus: \"Status:\",\r\n\t\tbillTo: \"Bill To\",\r\n\t\titem: \"Item\",\r\n\t\tquantity: \"Qty\",\r\n\t\tprice: \"Price\",\r\n\t\ttax: \"Tax\",\r\n\t\ttotal: \"Total\",\r\n\t\tsubTotal: \"Subtotal\",\r\n\t\ttotalTax: \"Total Tax\",\r\n\t},\r\n\tfont: {\r\n\t\thelvetica: {\r\n\t\t\tnormal: \"Helvetica\",\r\n\t\t\tbold: \"Helvetica-Bold\",\r\n\t\t\titalics: \"Helvetica-Oblique\",\r\n\t\t\tbolditalics: \"Helvetica-BoldOblique\",\r\n\t\t},\r\n noto: {\r\n \r\n }\r\n\t},\r\n};\r\n\r\nmodule.exports = defaultConfig;\r\n"]} \ No newline at end of file +{"version":3,"sources":["../../src/utils/config.ts"],"names":["require_config","__commonJSMin","exports","module","defaultConfig"],"mappings":"8DAAA,IAAAA,EAAAC,EAAA,CAAAC,EAAAC,IAAA,CAMA,IAAMC,EAAgB,CACrB,OAAQ,CACP,QAAS,gBACT,UAAW,SACX,KAAM,OACN,QAAS,WACT,OAAQ,SACR,OAAQ,UACR,KAAM,OACN,SAAU,MACV,MAAO,QACP,IAAK,MACL,MAAO,QACP,SAAU,WACV,SAAU,WACX,EACA,KAAM,CACL,UAAW,CACV,OAAQ,YACR,KAAM,iBACN,QAAS,oBACT,YAAa,uBACd,CACD,CACD,EAEAD,EAAO,QAAUC","sourcesContent":["/**\r\n * Holds the default configuration.\r\n *\r\n * @returns {Object} config.\r\n * @since 1.0.7\r\n */\r\nconst defaultConfig = {\r\n\tstring: {\r\n\t\tinvoice: \"I N V O I C E\",\r\n\t\trefNumber: \"Ref no\",\r\n\t\tdate: \"Date\",\r\n\t\tdueDate: \"Due Date\",\r\n\t\tstatus: \"Status\",\r\n\t\tbillTo: \"Bill To\",\r\n\t\titem: \"Item\",\r\n\t\tquantity: \"Qty\",\r\n\t\tprice: \"Price\",\r\n\t\ttax: \"Tax\",\r\n\t\ttotal: \"Total\",\r\n\t\tsubTotal: \"Subtotal\",\r\n\t\ttotalTax: \"Total Tax\",\r\n\t},\r\n\tfont: {\r\n\t\thelvetica: {\r\n\t\t\tnormal: \"Helvetica\",\r\n\t\t\tbold: \"Helvetica-Bold\",\r\n\t\t\titalics: \"Helvetica-Oblique\",\r\n\t\t\tbolditalics: \"Helvetica-BoldOblique\",\r\n\t\t},\r\n\t},\r\n};\r\n\r\nmodule.exports = defaultConfig;\r\n"]} \ No newline at end of file diff --git a/examples/invoice.pdf b/examples/invoice.pdf index 57999ec060924ed720ff14b0f91e942e0d948b84..2eafc659aa358540f7ab44abf27cc901f33049db 100644 GIT binary patch delta 90 zcmewx^*3t6S#?$m14AQ&&6m`DSe=bbEK>}PERB*<49v_e4NZZBk)?q_nyI;gVOo-f Ov7LeqAtjR&b!7n3@EE=T delta 90 zcmewx^*3t6S#?%(6GKD8&6m`DSe-3R(~?Zh&C^U$lg(4j4GdDv(^5=~O$^hL4a^Np QQZ4KhYzQftoTw`U05icG4*&oF diff --git a/src/utils/config.ts b/src/utils/config.ts index 1bdbdec..6e19df9 100644 --- a/src/utils/config.ts +++ b/src/utils/config.ts @@ -7,10 +7,10 @@ const defaultConfig = { string: { invoice: "I N V O I C E", - refNumber: "Ref no: #", - date: "Date:", - dueDate: "Due Date:", - status: "Status:", + refNumber: "Ref no", + date: "Date", + dueDate: "Due Date", + status: "Status", billTo: "Bill To", item: "Item", quantity: "Qty", From 8c25f0e495244b82f158c445996bad24d06c1141 Mon Sep 17 00:00:00 2001 From: Anuj Subedi Date: Sat, 20 Jan 2024 23:48:36 +0545 Subject: [PATCH 5/5] :fire: Updated: version in package.json. - :fire: Updated: version in package.json. --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 4551f90..949a102 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@h1dd3nsn1p3r/pdf-invoice", - "version": "1.0.6", + "version": "1.0.7", "author": "h1dd3nsn1p3r", "description": "Simple yet powerful node JS library that generates PDF invoice on the fly.", "license": "MIT",