////// Creates load based on Excel file /// ////// - Mod 018 Load creation import /// using DocumentFormat.OpenXml.Packaging; using DocumentFormat.OpenXml.Spreadsheet; class ANSARILoadCreationService { ////// Creates load based on Excel file /// /// Location of Excel file /// Site to create load for /// Location to create load for /// Template for load ////// Jan 30, 2019 - BLue Horseshoe Solutions, Inc. /// - Search for item based on ItemId or NameAlias /// public void process( str _fileUrl, InventSiteId _siteId, InventLocationId _locationId, WHSLoadTemplateId _loadTemplateId, ANSARIWHSASNLicensePlateId _licensePlateId) //03/14/2024 - - BUG 255602 - CR 303 - Add license plate field for manual load creation import { container con, errorList; int i, curLine, purchLineNum; boolean hasError = false; Set purchRecIdSet = new Set(Types::AnyType); PurchId purchId, nextPurchId; ItemId itemId; WHSLoadTable whsLoadTable; WHSLoadLine whsLoadLine; PurchLine purchLine, validatePurchLine; PurchTable purchTable; WHSShipmentTable whsShipmentTable; WHSParameters whsParameters = WHSParameters::find(); WHSUOMStructure whsUOMStructure; //03/14/2024 - - BUG 255602 - CR 303 - Add license plate field for manual load creation import ttsbegin; // Build Header whsLoadTable.LoadId = NumberSeq::newGetNum(NumberSeqReference::findReference(extendedTypeNum(WHSLoadId))).num(); whsLoadTable.InventSiteId = _siteId; whsLoadTable.InventLocationId = _locationId; whsLoadTable.initFromloadTemplateId(_loadTemplateId); whsLoadTable.LoadDirection = WHSLoadDirection::Inbound; whsLoadTable.LoadStatus = WHSLoadStatus::Open; whsLoadTable.loadTemplateId = _loadTemplateId; whsLoadTable.CarrierCode = whsParameters.ANSARILoadCreationShippingCarrier; whsLoadTable.CarrierServiceCode = whsParameters.ANSARILoadCreationCarrierService; whsLoadTable.ModeCode = whsParameters.ANSARILoadCreationMode; whsLoadTable.ANSARIEDIASNLicensePlateId = _licensePlateId; //04/12/2024 - - BUG 255602 - CR 303 - Add license plate field for manual load creation import whsLoadTable.insert(); // Read excel file System.Byte[] byteArray; System.IO.Stream stream; stream = File::UseFileFromURL(_fileUrl); con = this.readExcelData(stream); curLine = 1; purchLineNum = 1; for (i=1; i <= conLen(con); i++) { purchId = conPeek(conPeek(con, curLine), 1); nextPurchId = conPeek(conPeek(con, curLine - 1), 1); itemId = conPeek(conPeek(con, curLine), 2); purchTable = PurchTable::find(purchId); if (PurchTable::exist(purchId)) { if (purchId != nextPurchId) { // Create ShipmentId whsShipmentTable.clear(); whsShipmentTable.ShipmentId = whsShipmentTable.getShipmentId(); whsShipmentTable.LoadId = whsLoadTable.LoadId; whsShipmentTable.WorkTransType = WHSWorkTransType::Purch; whsShipmentTable.OrderNum = purchTable.PurchId; whsShipmentTable.AccountNum = purchTable.OrderAccount; whsShipmentTable.DeliveryName = purchTable.DeliveryName; whsShipmentTable.DeliveryPostalAddress = purchTable.DeliveryPostalAddress; whsShipmentTable.CountryRegionISOCode = purchTable.CountyOrigDest; whsShipmentTable.DlvTermId = purchTable.DlvTerm; whsShipmentTable.InventSiteId = _siteId; whsShipmentTable.InventLocationId = _locationId; whsShipmentTable.CarrierCode = whsLoadTable.CarrierCode; whsShipmentTable.CarrierServiceCode = whsLoadTable.CarrierServiceCode; whsShipmentTable.CarrierGroupCode = whsLoadTable.CarrierGroupCode; whsShipmentTable.LoadDirection = WHSLoadDirection::Inbound; whsShipmentTable.CustomerRef = purchTable.VendorRef; whsShipmentTable.insert(); //03/14/2024 - - BUG 255602 - CR 303 - Add license plate field for manual load creation import - START whsUOMStructure.clear(); whsUOMStructure.LoadId = whsShipmentTable.LoadId; whsUOMStructure.ShipmentId = whsShipmentTable.ShipmentId; whsUOMStructure.Module = WHSModule::Purch; whsUOMStructure.LicensePlateId = _licensePlateId; whsUOMStructure.insert(); //03/14/2024 - - BUG 255602 - CR 303 - Add license plate field for manual load creation import - END } InventTable inventTable; // Search for item based on ItemId or Search Name select firstonly ItemId from inventTable where inventTable.ItemId == itemId exists join validatePurchLine where validatePurchLine.PurchId == purchTable.PurchId && validatePurchLine.ItemId == inventTable.ItemId; if (!inventTable.ItemId) { select firstonly ItemId from inventTable where inventTable.NameAlias == itemId exists join validatePurchLine where validatePurchLine.PurchId == purchTable.PurchId && validatePurchLine.ItemId == inventTable.ItemId; if (inventTable.ItemId) { itemId = inventTable.ItemId; } else { errorList += strFmt("@ANSARI:LoadPOError" + '\n', purchId, itemId); curLine++; hasError = true; continue; } } select firstonly purchLine where purchLine.PurchId == purchId && purchLine.ItemId == itemId; if (!purchRecIdSet.in(purchLine.RecId)) { // Build load lines whsLoadLine.clear(); whsLoadLine.initFromPurchLine(purchLine); whsLoadLine.LoadId = whsLoadTable.LoadId; whsLoadLine.InventTransType = InventTransType::Purch; whsLoadLine.LoadDirection = WHSLoadDirection::Inbound; whsLoadLine.OrderNum = purchLine.PurchId; whsLoadLine.ItemId = purchLine.ItemId; whsLoadLine.Qty = conPeek(conPeek(con, curLine), 3); whsLoadLine.UOM = conPeek(conPeek(con, curLine), 4); whsLoadLine.PackingQty = WHSInventTable::getDefaultPackingQty(whsLoadLine.ItemId, purchLine.InventDimId); whsLoadLine.ShipmentId = whsShipmentTable.ShipmentId; whsLoadLine.insert(); } if (curLine == i) { curLine++; } purchRecIdSet.add(purchLine.RecId); } else { throw error(strFmt("@ANSARI:LoadPOError", purchId, itemId)); } } if (hasError == true) { container shipments = whsLoadTable.getShipmentIds(); if (shipments != conNull()) { info(con2Str(errorList, '\n')); } else { throw error(con2Str(errorList, '\n')); } } info(strFmt("@ANSARI:LoadCreated", whsLoadTable.LoadId)); ttscommit; } ////// Reads data from Excel sheet /// /// Stream of Excel file ///Two dimensional container hold Excel data ////// Jan 30, 2019 - BLue Horseshoe Solutions, Inc. - Mod 018 Load creation import /// public container readExcelData(System.IO.Stream _stream) { OfficeOpenXml.ExcelWorksheet worksheet; OfficeOpenXml.ExcelPackage package = new OfficeOpenXml.ExcelPackage(_stream); int iRowCount,iCellCount; anytype anyData; container conRow,ret; WHSParameters whsParameters = WHSParameters::find(); try { if (package) { worksheet = package.get_Workbook().get_Worksheets().Copy(whsParameters.ANSARILoadExcelSheet, whsParameters.ANSARILoadExcelJournal); var cells = worksheet.get_Cells(); iRowCount = worksheet.get_Dimension().get_End().get_Row(); iCellCount = worksheet.get_Dimension().get_End().get_Column(); // Start at row 2 to allow for headers in Excel for (int i=2;i<=iRowCount;i++) { conRow = conNull(); for (int j=1;j<=iCellCount;j++) { anyData= cells.get_Item(i, j).get_Value(); if (!anyData && j ==1) { break; } if (anyData) { conRow += anyData; } else { conRow += ""; } } if (conRow) { conRow += iRowCount; ret = conIns(ret,i,conRow); } } } } catch (Exception::CLRError) { throw error("@SYS135884"); } return ret; } }
class ANSARIInventTransRegisterFormEventHandler { /// /// /// /// [PostHandlerFor(formStr(InventTransRegister), formMethodStr(InventTransRegister, autoTmpCreate))] public static void InventTransRegister_Post_autoTmpCreate(XppPrePostArgs args) { FormRun form = args.getThis(); FormDataSource tmpInventDim_DS = form.dataSource(formDataSourceStr(InventTransRegister, TmpInventDim)) as FormDataSource; FormDataSource inventTransOriginMovement_DS = form.dataSource(formDataSourceStr(InventTransRegister, InventTransOriginMovement)) as FormDataSource; InventDim inventDim = tmpInventDim_DS.cursor(); InventTransOrigin inventTransOrigin = inventTransOriginMovement_DS.cursor(); SalesTable salesTable; SalesLine salesLine; ReturnReasonCode returnReasonCode; ReturnReasonCodeGroup returnReasonCodeGroup; str licensePlateId; select firstonly salesTable where salesTable.SalesId == inventTransOrigin.ReferenceId; select firstonly returnReasonCode where returnReasonCode.ReasonCodeId == salesTable.ReturnReasonCodeId; select firstonly returnReasonCodeGroup where returnReasonCodeGroup.ReasonCodeGroupId == returnReasonCode.ReasonCodeGroupId; select firstonly LineNum from salesLine where salesLine.SalesId == inventTransOrigin.ReferenceId && salesLine.InventTransId == inventTransOrigin.InventTransId ; LineNum lineNum = salesLine.LineNum; if(returnReasonCodeGroup.ANSARIAllowAutoGenLicensePlate == NoYes::Yes){ if(salesTable.ANSARIClaimNumber != "") { licensePlateId = salesTable.ReturnItemNum+"_"+salesTable.ANSARIClaimNumber+"_"+int2Str(real2int(lineNum)); } else { licensePlateId = salesTable.ReturnItemNum+"_"+strDel(salesTable.ReturnItemNum, 1, 3)+"_"+int2Str(real2int(lineNum)); } } inventDim.LicensePlateId = licensePlateId; } }