public Error SendPickToWarehouse(PickHeaderModel pickM) { var error = new Error(); var pickH = db.FindPickHeader(pickM.Id); if (pickH == null) { error.SetRecordError("PickHeader", pickM.Id); } else { var location = pickH.Location ?? new Location { Id = 0, LocationName = "[Unknown]" }; var transferConfig = DataTransferService.FindFileTransferConfigurationModel(location.Id, FileTransferType.Send, FileTransferDataType.WarehousePick); if (transferConfig == null) { error.SetError(EvolutionResources.errCannotDropOrderNoDataTransfer, pickH.Id.ToString(), location.LocationName); } else { error = processPick(pickM, transferConfig); } } return(error); }
public Error CreatePicks(CompanyModel company, List <SalesOrderHeaderModel> sohList, bool bCombine, List <PickHeaderModel> pickHeaders) { // Given a list of SalesOrderHeaders and a flag indicating whether to create // individual picks or a single combined pick, creates the required pick(s) // in the PickHeader and PickDetail database tables. // If successful, it then creates the CSV pick data files. var error = new Error(); if (sohList != null) { bool bFirst = true; PickHeaderModel pickHeader = null; foreach (var soh in sohList) { if (bFirst || !bCombine) { pickHeader = new PickHeaderModel(); error = createPick(company, soh, ref pickHeader); } if (!error.IsError) { error = addPickDetails(pickHeader, soh.SalesOrderDetails); if (bCombine) { // If combined, we only save the first pick header because there will only be one if (bFirst) { pickHeaders.Add(pickHeader); } bFirst = false; } else { // If not combined, save every pick header pickHeaders.Add(pickHeader); // Create a pick CSV file for this sale error = createPickDataFile(pickHeader); } } if (error.IsError) { break; } } // If no errors and combined, create the CSV for the combined sales if (!error.IsError && bCombine) { error = createPickDataFile(pickHeader); } } return(error); }
public void SetPickSentToWarehouseDate(PickHeaderModel pick, DateTimeOffset dt) { var p = db.FindPickHeader(pick.Id); if (p != null) { pick.STWDate = p.STWDate = dt; db.InsertOrUpdatePickHeader(p); } }
private Error processPick(PickHeaderModel pickH, FileTransferConfigurationModel template) { var error = new Error(); // Load the template configuration file var configFile = getTemplateFileName(template); XElement doc = XElement.Load(configFile); var file = doc.Element("File"); var extn = file.Attribute("DataFileExtension").Value; var tempFile = Path.GetTempPath() + pickH.Id + ".CSV"; // extn; var zipFile = ""; // Check if the pick's files are to be compressed and sent in a ZIP. // A pick can be a single CSV file or a CSV with onr or more PDF's. // A single file can optionally be compressed whereas multiple files must be compressed // as a package of files. // The requirement is that a single file is dropped for FTP. bool bCompress = file.Attribute("CompressFile").Value.ParseBool(); if (bCompress || pickH.PickFiles.Count() > 1) { // File(s) are to be compressed/combined zipFile = tempFile.ChangeExtension(".zip"); error = Zip.ZipFiles(pickH.PickFiles, zipFile); if (error.IsError) { FileManagerService.FileManagerService.DeleteFile(zipFile); } else { tempFile = zipFile; } } if (!error.IsError) { if (file.Attribute("FTPFile").Value.ParseBool()) { // Copy the file to the FTP pickup folder error = moveFileToFTPFolder(tempFile, template.SourceFolder, DataTransferService.GetTargetFileName(template, tempFile, pickH.Id)); } } FileManagerService.FileManagerService.DeleteFile(tempFile); return(error); }
public List <PickDetailModel> FindPickDetailListModel(CompanyModel company, PickHeaderModel pickHeader) { var model = new List <PickDetailModel>(); foreach (var item in db.FindPickDetails(company.Id, pickHeader.Id)) { model.Add(mapToModel(item)); } return(model); }
private void mapToModel(PickHeader pickH, PickHeaderModel pickModel) { Mapper.Map <PickHeader, PickHeaderModel>(pickH, pickModel); if (pickH.Location != null) { pickModel.LocationName = pickH.Location.LocationName; } if (pickH.Country != null) { pickModel.ShipCountry = pickH.Country.CountryName; } }
private Error createPickDataFile(PickHeaderModel pickH) { // Create a pick data file var error = new Error(); // Get the file transfer for the pick var location = db.FindLocation(pickH.LocationId ?? 0); if (location == null) { location = new Location(); } var transferConfig = db.FindFileTransferConfiguration(location.Id, FileTransferType.Send, FileTransferDataType.WarehousePick); if (transferConfig == null) { error.SetError(EvolutionResources.errCannotDropOrderNoDataTransfer, "", pickH.InvoiceNumber.ToString(), location.LocationName); } else { // Load the template configuration file string configFile = getTemplateFileName(transferConfig), tempFile = ""; XElement doc = XElement.Load(configFile); var file = doc.Element("File"); error = createPickDataFile(pickH, file, ref tempFile); if (!error.IsError) { pickH.PickFiles.Add(tempFile); pickH.PickDropFolder = transferConfig.SourceFolder; } } return(error); }
public PickHeaderModel mapToModel(PickHeader pick) { PickHeaderModel newItem = Mapper.Map <PickHeader, PickHeaderModel>(pick); if (pick.Customer != null) { newItem.CustomerName = pick.Customer.Name; } if (pick.PickStatusId != null) { newItem.Status = db.FindPickStatus(pick.PickStatusId.Value).StatusName; } if (pick.LocationId != null) { newItem.LocationName = db.FindLocation(pick.LocationId.Value).LocationName; } if (pick.ShipCountryId != null) { newItem.ShipCountry = db.FindCountry(pick.ShipCountryId.Value).CountryName; } return(newItem); }
private Error addPickDetails(PickHeaderModel pickHeader, List <SalesOrderDetailModel> sodList) { // Adds detail lines to a pick. var error = new Error(); foreach (var item in sodList) { var pickD = new PickDetail { CompanyId = pickHeader.CompanyId.Value, PickHeaderId = pickHeader.Id, ProductId = item.ProductId, QtyToPick = item.PickQty, QtyPicked = 0, PickDetailStatusId = (int)PickDetailStatus.ToBePicked, SalesOrderDetailId = item.Id, PickLocationId = pickHeader.LocationId, IsReportedToWebsite = false }; db.InsertOrUpdatePickDetail(pickD); pickHeader.PickDetails.Add(mapToModel(pickD)); } return(error); }
public Error CreatePickDocumentPdf(PickHeaderModel pickHeader, DocumentTemplateModel template, string pdfFile, bool showCancelledItems, ref string outputFile, int maxItems = Int32.MaxValue) { var error = new Error(); string tempFile = MediaService.MediaService.GetTempFile(".html"); if (string.IsNullOrEmpty(pdfFile)) { outputFile = MediaService.MediaService.GetTempFile().FolderName() + "\\" + pickHeader.Id + "_" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".pdf"; } else { outputFile = pdfFile; } decimal subTotal = 0; var company = CompanyService.FindCompanyModel(pickHeader.CompanyId == null ? 0 : pickHeader.CompanyId.Value); var customer = CustomerService.FindCustomerModel(pickHeader.CustomerId == null ? 0 : pickHeader.CustomerId.Value, company); var paymentTerms = LookupService.FindPaymentTermModel(pickHeader.TermsID == null ? 0 : pickHeader.TermsID.Value); var taxCode = LookupService.FindTaxCodeModel(customer.TaxCodeId); var currency = LookupService.FindCurrencyModel(company.DefaultCurrencyID == null ? 0 : company.DefaultCurrencyID.Value); Dictionary <string, string> headerProps = new Dictionary <string, string>(); List <Dictionary <string, string> > records = new List <Dictionary <string, string> >(); AddCompanyInformation(company, headerProps); var pickDetailListModel = PickService.FindPickDetailListModel(company, pickHeader).FirstOrDefault(); var sod = FindSalesOrderDetailModel(pickDetailListModel.SalesOrderDetailId); var soh = FindSalesOrderHeaderModel(sod.SalesOrderHeaderId, company); // RETAIL INVOICE/PACKING SLIP headerProps.AddProperty("ORDERDATE", formatDate(soh.OrderDate, company.DateFormat)); headerProps.AddProperty("OURREF", soh.OrderNumber); // STANDARD PACKING SLIP headerProps.AddProperty("REFERENCENUMBER", soh.OrderNumber); headerProps.AddProperty("INVOICENUMBER", pickHeader.InvoiceNumber); headerProps.AddProperty("SALESDATE", formatDate(soh.OrderDate, company.DateFormat)); headerProps.AddProperty("TERMS", paymentTerms.TermText); // ?? headerProps.AddProperty("CUSTOMERCONTACT", pickHeader.CustomerContact); var address = pickHeader.ShipAddress1 + "<br/>"; address += (!string.IsNullOrWhiteSpace(pickHeader.ShipAddress2)) ? pickHeader.ShipAddress2 + "<br/>" : ""; address += (!string.IsNullOrWhiteSpace(pickHeader.ShipAddress3)) ? pickHeader.ShipAddress3 + "<br/>" : ""; address += (!string.IsNullOrWhiteSpace(pickHeader.ShipAddress4)) ? pickHeader.ShipAddress4 + "<br/>" : ""; address += pickHeader.ShipSuburb + " " + pickHeader.ShipState + " " + pickHeader.ShipPostcode + "<br/>"; address += pickHeader.ShipCountry; headerProps.AddProperty("DELIVERYADDRESS", address); headerProps.AddProperty("ORDERNUMBER", soh.OrderNumber); headerProps.AddProperty("PURCHASEORDERNUMBER", soh.CustPO); // Add items int itemCount = 1; foreach (var pickDetail in PickService.FindPickDetailListModel(company, pickHeader)) { var product = ProductService.FindProductModel(pickDetail.ProductId.Value, null, company, false); Dictionary <string, string> line = new Dictionary <string, string>(); line.AddProperty("ORDERQTY", pickDetail.QtyToPick); // Correct? line.AddProperty("ITEMNUMBER", product.ItemNumber); line.AddProperty("DESCRIPTION", itemCount.ToString() + " " + sod.ProductDescription); // RETAIL INVOICE/PACKING SLIP var unitPriceExTax = sod.UnitPriceExTax.Value; var discountPc = sod.DiscountPercent.Value; var linePrice = (pickDetail.QtyToPick * unitPriceExTax - ((pickDetail.QtyToPick * unitPriceExTax) / 100 * discountPc)).Value; sod = FindSalesOrderDetailModel(pickDetail.SalesOrderDetailId); string allocated = AllocationService.GetExpectedShipdate(sod); if (allocated.Count() > 5) { allocated = DateTimeOffset.Parse(allocated).ToString(company.DateFormat); } line.AddProperty("EXPSHIPDATE", allocated); line.AddProperty("LINEPRICE", sod.UnitPriceExTax.Value.ToString("#,##0.00")); subTotal += linePrice; records.Add(line); itemCount++; // STILL TO SHIP: TODO } // RETAIL INVOICE/PACKING SLIP headerProps.AddProperty("CURRENCYSYMBOL", currency.CurrencySymbol); headerProps.AddProperty("SALEAMOUNTEX", subTotal.ToString("#,##0.00")); headerProps.AddProperty("FREIGHT", pickHeader.FreightCost ?? 0); subTotal += Convert.ToDecimal(pickHeader.FreightCost); var subTotalIncGst = subTotal + (taxCode.TaxPercentageRate == null ? 0 : (subTotal / 100 * taxCode.TaxPercentageRate.Value)); headerProps.AddProperty("SALEAMOUNTINC", subTotal.ToString("#,##0.00")); headerProps.AddProperty("GST", (subTotalIncGst - subTotal).ToString("#,##0.00")); headerProps.AddProperty("TAXNAME", taxCode.TaxCode); return(DocumentService.CreateDocumentPdf(headerProps, records, template.QualTemplateFile, outputFile, maxItems)); }
public void DeletePick(PickHeaderModel pick) { db.DeletePickHeader(pick.Id); // Also deletes the details }
private Error createPick(CompanyModel company, SalesOrderHeaderModel soh, ref PickHeaderModel pickHeader) { // Creates a pick in the pick database tables. // This method does not create any files. var error = new Error(); if (soh.SalesOrderDetails == null || soh.SalesOrderDetails.Count == 0) { error.SetError(EvolutionResources.errCannotCreatePickWithNoItems, "", soh.OrderNumber.ToString()); } else { LookupService.LookupService lookupService = new LookupService.LookupService(db); var pickH = new PickHeader { CompanyId = soh.CompanyId, CustomerId = soh.CustomerId, //public DateTimeOffset? PickDate { set; get; } //public int? PickStatusId { set; get; } LocationId = soh.LocationId, //public DateTimeOffset? STWDate { set; get; } //public DateTimeOffset? PickComplete { set; get; } //public DateTimeOffset? PackComplete { set; get; } ShipAddress1 = soh.ShipAddress1, ShipAddress2 = soh.ShipAddress2, ShipAddress3 = soh.ShipAddress3, ShipAddress4 = soh.ShipAddress4, ShipSuburb = soh.ShipSuburb, ShipState = soh.ShipState, ShipPostcode = soh.ShipPostcode, //public DateTimeOffset? InvoiceDate { set; get; } InvoiceNumber = Convert.ToInt32(lookupService.GetNextSequenceNumber(company, SequenceNumberType.InvoiceNumber)), //public bool InvoiceFinalised { set; get; } ShipMethodId = soh.ShippingMethodId, SalesPersonId = soh.SalespersonId, //public DateTimeOffset? ShipDate { set; get; } //public string TrackingNumber { set; get; } //public int? BoxCount { set; get; } //public int? PickPriority { set; get; } //public int? PickedById { set; get; } //public int? PackedById { set; get; } //public DateTimeOffset? ReadyForShippingDate { set; get; } //public int? ShippingDocumentId { set; get; } //public DateTimeOffset? AddedToShipManifestDate { set; get; } //public bool DocumentPrinted { set; get; } CustPO = soh.CustPO, //public string SecretComment { set; get; } //public string PickComment { set; get; } //public string ShipMethodAccount { set; get; } //public double? FreightCost { set; get; } DeliveryInstructions = soh.DeliveryInstructions, //public string CustomerContact { set; get; } IsManualFreight = soh.IsManualFreight, ShipCountryId = soh.ShipCountryId, //public decimal? OurFreightCost { set; get; } //public string EnteredBy { set; get; } WarehouseInstructions = soh.WarehouseInstructions, EndUserName = soh.EndUserName, CreditCardId = soh.CreditCardId, //public bool IsRetailPick { set; get; } //public bool IsUploadedToWarehouse { set; get; } TermsID = soh.TermsId, //public string UnregisteredFreightCarrier { set; get; } //public DateTimeOffset? DateCreditCardCharged { set; get; } OrderTypeId = soh.OrderTypeId }; db.InsertOrUpdatePickHeader(pickH); mapToModel(pickH, pickHeader); } return(error); }
private Error createPickDataFile(PickHeaderModel pickH, XElement file, ref string tempFile) { var error = new Error(); try { Dictionary <string, string> data = new Dictionary <string, string>(); // Create the CSV writer List <CSVFormat> formats = new List <CSVFormat>(); // Read the formatting configuration from the XML file foreach (var formatElement in file.Elements("Formats").Elements()) { // Read the formatting options CSVFormat fileFormat = new CSVFormat { DataFieldDelimiter = doReplacements(formatElement.Attribute("DataFieldDelimiter").Value), DataFieldDelimiterUsage = (CSVDelimiterUsage)Enum.Parse(typeof(CSVDelimiterUsage), formatElement.Attribute("DataFieldDelimiterUsage").Value), DataFieldSeparator = doReplacements(formatElement.Attribute("DataFieldSeparator").Value), HeaderFieldDelimiter = doReplacements(formatElement.Attribute("HeaderFieldDelimiter").Value), HeaderFieldSeparator = doReplacements(formatElement.Attribute("HeaderFieldSeparator").Value) }; // Now read the fields foreach (var fieldElement in formatElement.Elements("Fields").Elements()) { CSVField fieldFormat = new CSVField { FieldName = fieldElement.Attribute("Name").Value, FieldType = (CSVFieldType)Enum.Parse(typeof(CSVFieldType), fieldElement.Attribute("Type").Value) }; fileFormat.Fields.Add(fieldFormat); } formats.Add(fileFormat); } // Create a temp file var extn = file.Attribute("DataFileExtension").Value; tempFile = Path.GetTempPath() + pickH.Id.ToString() + ".CSV"; // extn; // Create the CSV writer CSVWriter sw = new CSVWriter(); sw.CreateFile(tempFile, formats); // Write the header lines for (int i = 0; i < sw.Formats.Count(); i++) { sw.CurrentFormat = i; sw.WriteHeaderLine(); } var customer = db.FindCustomer(pickH.CustomerId.Value); var country = db.FindCountry(pickH.ShipCountryId.Value); int idx = 0; if (sw.Formats.Count > 1) { // Now write the first data line sw.CurrentFormat = idx++; data.AddProperty("PickID", pickH.Id.ToString()); data.AddProperty("HeaderLabel", "H"); data.AddProperty("CustomerName", customer.Name); data.AddProperty("CustomerOrderNumber", pickH.CustPO); data.AddProperty("ShipAddress1", pickH.ShipAddress1); data.AddProperty("ShipAddress2", pickH.ShipAddress2); data.AddProperty("ShipAddress3", pickH.ShipAddress3); data.AddProperty("ShipSuburb", pickH.ShipSuburb); data.AddProperty("ShipState", pickH.ShipState); data.AddProperty("ShipPostcode", pickH.ShipPostcode); data.AddProperty("ShipCountry", country.CountryName); data.AddProperty("OnforwarderName", ""); data.AddProperty("OnforwarderAddress", ""); data.AddProperty("OnForwarderSuburb", ""); data.AddProperty("OnForwarderPostcode", ""); data.AddProperty("OnForwarderState", ""); data.AddProperty("OnForwarderCode", ""); data.AddProperty("CarrierCode", ""); data.AddProperty("CustomerID", pickH.CustomerId); data.AddProperty("DeliveryInstructions", pickH.DeliveryInstructions); data.AddProperty("CustomerContact", ""); data.AddProperty("PartnerEDI", ""); sw.WriteLine(data); } // Now write the second and subsequent data lines sw.CurrentFormat = idx; foreach (var pickD in pickH.PickDetails) { data = new Dictionary <string, string>(); // Properties for Warehouse and common var product = db.FindProduct(pickD.ProductId.Value); data.AddProperty("PickID", pickH.Id); data.AddProperty("DetailLabel", "I"); data.AddProperty("PickQty", pickD.QtyToPick); data.AddProperty("ItemNumber", product.ItemNumber); data.AddProperty("PickLineID", pickD.Id); sw.WriteLine(data); } sw.Close(); } catch (Exception ex) { error.SetError(ex); } return(error); }