import * as XLSX from 'xlsx'; import { TrUtils } from '../../../../utils/tr-utils'; export class StockXlsxFileService { static wb: any = {}; static Row: any = 2; static MergeArray: any[] = []; static range = { s: { c: 0, r: 0 }, e: { c: 0, r: 0 } }; static ws: any = {}; static GetStockInfoExcelData(MainData: any, isSale: boolean, isHC: any, HeaderName: any, EntitySettings: any) { this.wb = {}; this.ws = {}; this.Row = 0; this.range = { s: { c: 0, r: 0 }, e: { c: 0, r: 0 } }; this.MergeArray = []; let ws_name = HeaderName; this.wb.Sheets = {}; this.wb.Props = {}; this.wb.SSF = {}; this.wb.SheetNames = []; // MainData = this.GetTotals(MainData, WOTypes); // let showSearch: any = []; // for (const key in searchValue) { // if (!TrUtils.IsNull(searchValue[key]) && key !== 'Date' && key !== 'DescCntrlId') { // showSearch.push([{ // text: (key === 'StDate') ? 'Start Date' : (key === 'EnDate') ? 'End Date' : (key === 'DescCntrl') ? 'Item' : key, // ColRange: 1, // bold: true, // ChildHeadings: [ // // { text: 'Central Tax', ColRange: 1 }, // // { text: 'State Tax', ColRange: 1 }, // // { text: 'IGST Tax', ColRange: 1 }, // ], // }, { // text: (key === 'StDate') ? MyDate.ConvertUTCDateToReadable(searchValue[key]) : (key === 'EnDate') ? MyDate.ConvertUTCDateToReadable(searchValue[key]) : searchValue[key], // ColRange: 7, // bold: true, // ChildHeadings: [ // // { text: 'Central Tax', ColRange: 1 }, // // { text: 'State Tax', ColRange: 1 }, // // { text: 'IGST Tax', ColRange: 1 }, // ], // }]); // } // // console.log(`${key}: ${searchValue[key]}`); // } this.setHeadingInCell(HeaderName, isHC); this.setInvoiceDetailsInCell(MainData, isHC, EntitySettings.DecimalsNumber); this.ws['!ref'] = XLSX.utils.encode_range(this.range); this.ws['!merges'] = this.MergeArray; if (isHC === 'HC') { this.ws["!cols"] = [{ wch: 10 }, { wch: 50 }, { wch: 15 }, { wch: 15 }, { wch: 15 }, { wch: 15 }]; } else { this.ws["!cols"] = [{ wch: 10 }, { wch: 15 }, { wch: 50 }, { wch: 15 }, { wch: 15 }, { wch: 15 }, { wch: 15 }]; } this.wb.SheetNames.push(ws_name); this.wb.Sheets[ws_name] = this.ws; return this.wb; } // static GetTotals(MainData: any, WOTypes: any) { // MainData.forEach((InvoiceInfo: any) => { // if (InvoiceInfo.VIN == null) { // InvoiceInfo.VIN = ''; // } // if (InvoiceInfo.Name == null) { // InvoiceInfo.Name = ''; // } // if (InvoiceInfo.TeNa == null) { // InvoiceInfo.TeNa = ''; // } // // if (InvoiceInfo.Type == null) { // // InvoiceInfo.TypeName = ''; // // } else { // // InvoiceInfo.TypeName = this.GetWOTypeName(InvoiceInfo.Type, WOTypes); // // } // // InvoiceInfo.GSTAmount = // // InvoiceInfo.ItemsCGST + InvoiceInfo.ItemsSGST + InvoiceInfo.ItemsIGST; // // InvoiceInfo.TotalAmount = InvoiceInfo.GSTAmount + InvoiceInfo.ItemsNetAmt; // // InvoiceInfo.OpsGSTAmount = // // InvoiceInfo.OpsCGST + InvoiceInfo.OpsSGST + InvoiceInfo.OpsIGST; // // InvoiceInfo.TotalOpsAmount = // // InvoiceInfo.OpsGSTAmount + InvoiceInfo.OpsNetAmt; // }); // return MainData; // } // static GetWOTypeName(Type: any, WOTypes: any) { // let Index: any = WOTypes.findIndex((wotype: any) => { // return Type === wotype._id; // }); // if (Index !== -1) { // return WOTypes[Index].Name; // } else { // return ''; // } // } static setHeadingInCell(HeaderName: any, isHC: any) { let MainHeadings: any[] = [ { text: 'SNo', ColRange: 1, bold: true, ChildHeadings: [], }, { text: 'Item Name', ColRange: 1, bold: true, ChildHeadings: [], }, { text: 'Sale Price', ColRange: 1, bold: true, ChildHeadings: [], }, { text: 'Stock On Hand', ColRange: 1, bold: true, ChildHeadings: [ // { text: 'Central Tax', ColRange: 1 }, // { text: 'State Tax', ColRange: 1 }, // { text: 'IGST Tax', ColRange: 1 }, ], }, { text: 'Reserved Qty', ColRange: 1, bold: true, ChildHeadings: [ // { text: 'Central Tax', ColRange: 1 }, // { text: 'State Tax', ColRange: 1 }, // { text: 'IGST Tax', ColRange: 1 }, ], }, { text: 'Available For Sale', ColRange: 1, bold: true, ChildHeadings: [ // { text: 'Central Tax', ColRange: 1 }, // { text: 'State Tax', ColRange: 1 }, // { text: 'IGST Tax', ColRange: 1 }, ], }, ]; if (isHC !== 'HC') { MainHeadings.splice(1, 0, { text: 'MPN', ColRange: 1, bold: true, ChildHeadings: [], }) } this.SetDataInCell(HeaderName, 0, this.Row); // this.MergeArray.push({ // s: { r: this.Row, c: 0 }, // e: { r: this.Row, c: 0 + 8 - 1 }, // }); // this.Row += 2; // showSearch.forEach((search: any) => { // let ColStart: any = 0; // // console.log('search', search, ColStart); // search.forEach((item: any) => { // // console.log('text', oyo.text, ColStart); // this.SetDataInCell(item.text, ColStart, this.Row); // this.MergeArray.push({ // s: { r: this.Row, c: ColStart }, // e: { r: this.Row, c: ColStart + item.ColRange - 1 }, // }); // ColStart += item.ColRange; // }); // this.Row += 1; // }); // this.Row += 1; let MainColStart: any = 0; MainHeadings.forEach((MainHeader: any) => { this.SetDataInCell(MainHeader.text, MainColStart, this.Row); this.MergeArray.push({ s: { r: this.Row, c: MainColStart }, e: { r: this.Row, c: MainColStart + MainHeader.ColRange - 1 }, }); MainColStart += MainHeader.ColRange; }); this.Row += 2; } static setInvoiceDetailsInCell(MainData: any, isHC: any, DecimalsNumber: number) { MainData.forEach((InvoiceList: any, index: any) => { this.SetInvoiceDataInExcel(InvoiceList, index, isHC, DecimalsNumber); }); } static SetInvoiceDataInExcel(InvoiceInfo: any, index: any, isHC: any, DecimalsNumber: number) { let InvoiceData: any = [ { text: index + 1, ColRange: 1, IsString: true }, { text: InvoiceInfo.Name, ColRange: 1, IsString: true }, { text: InvoiceInfo.Sale?.Price, ColRange: 1, IsString: false }, { text: InvoiceInfo.Qty, ColRange: 1, IsString: false }, { text: InvoiceInfo.RQty, ColRange: 1, IsString: false }, { text: (TrUtils.SetValueToZeroIfNull(InvoiceInfo.Qty) - TrUtils.SetValueToZeroIfNull(InvoiceInfo.RQty)), ColRange: 1, IsString: false }, ]; if (isHC !== 'HC') { InvoiceData.splice(1, 0, { text: InvoiceInfo.MPN, ColRange: 1, IsString: true }); } let ColStart: any = 0; InvoiceData.forEach((InvData: any) => { InvData.text = this.ConvertToString(InvData.text, InvData.IsString, DecimalsNumber); this.SetDataInCell(InvData.text, ColStart, this.Row); this.MergeArray.push({ s: { r: this.Row, c: ColStart }, e: { r: this.Row, c: ColStart + InvData.ColRange - 1 }, }); ColStart += InvData.ColRange; }); this.Row += 1; } static ConvertToString(Text: any, IsString: any, DecimalsNumber: any) { if (IsString) { if (Text == null) { Text = ''; } } else { if (Text == null) { Text = 0; } } if (typeof Text === 'number') { return Number(TrUtils.FixedTo(Text, DecimalsNumber)); } else { return Text; } } static SetDataInCell(Data: any, ColRange: number, RowNum: any) { var cell = { v: Data }; var cell_ref = XLSX.utils.encode_cell({ c: ColRange, r: RowNum }); if (this.range.e.c < ColRange) { this.range.e.c = ColRange; } if (this.range.e.r < RowNum) { this.range.e.r = RowNum; } cell = this.getcelltype(cell); this.ws[cell_ref] = cell; } static getcelltype(cell: any) { if (typeof cell.v === 'number') cell.t = 'n'; else if (typeof cell.v === 'boolean') cell.t = 'b'; else cell.t = 's'; return cell; } // static ConvertDateToReadableFormat(DateObject: any) { // if (!TrUtils.IsEmpty(DateObject)) { // let date: any = new Date(DateObject); // let Month: any; // let Day: any; // let MonthName = new Array(); // MonthName[0] = 'Jan'; // MonthName[1] = 'Feb'; // MonthName[2] = 'Mar'; // MonthName[3] = 'Apr'; // MonthName[4] = 'May'; // MonthName[5] = 'Jun'; // MonthName[6] = 'Jul'; // MonthName[7] = 'Aug'; // MonthName[8] = 'Sept'; // MonthName[9] = 'Oct'; // MonthName[10] = 'Nov'; // MonthName[11] = 'Dec'; // Month = MonthName[date.getMonth()]; // if (date.getDate() < 10) { // Day = '0' + date.getDate(); // } else { // Day = date.getDate(); // } // date = Day + '-' + Month + '-' + date.getFullYear(); // return date; // } else { // return null; // } // } }