using System; using System.Collections.Generic; using System.Globalization; using System.Linq; using System.Web; using Common; //2016-09-29 - added additional column "Document Number" to export - maanie //2016-10-13 - removed workloadid and replaced it with the actual reference number - maanie //2017-10-03 - added Sales Rep Code to header line - maanie //2017-12-14 - added Shift to header line - maanie //20171229 - added stained item count - maanie //20180326 - use DB setting for VAT - maanie //20180516 - added Wash type - maanie public class PastelExport { public List Rows { get; private set; } public string Result { get { return string.Join("\n", Rows); } } private static string Left(string s, int i) { return s.Length <= i ? s : s.Substring(0, i - 1); } public PastelExport(int deliveryId, DateTime dateDelivered, int customerId, string referenceNumber, int documentNumber) //public PastelExport(string type, int id, int printInvoiceId) { Rows = new List(); var response = new List(); using (var db = new DataModel()) { //ini string washType = ""; string shift = ""; string salesRepCode = ""; string reference = ""; var invoiceId = 0; var invoiceDate = DateTime.Now; var customer = new Customer(); var dispatchOperator = new DispatchOperator(); var operatorLogin = new OperatorLogin(); invoiceId = deliveryId; invoiceDate = dateDelivered; customer = db.Customers.FirstOrDefault(f => f.CustomerId == customerId); //var workload = db.Workloads.FirstOrDefault(f => f.WorkloadId == workloadId); reference = string.IsNullOrEmpty(referenceNumber) ? "" : referenceNumber; if (invoiceId == 0) return; //var inventory = db.GetWorkloadInventoryForInvoice(invoiceId).ToList(); var inventory = db.GetWorkloadInventoryForDispatches(deliveryId).ToList(); if (inventory.Count <= 0) return; inventory = inventory.Where(w => w.Cost.HasValue).ToList(); if (inventory.Count <= 0) return; dispatchOperator = db.DispatchOperators.FirstOrDefault(d => d.DeliveryId == invoiceId); // get delivery operator id if (dispatchOperator != null) { operatorLogin = db.OperatorLogins.FirstOrDefault(o => o.OperatorLoginId == dispatchOperator.OperatorLoginId); // get operator for this delivery salesRepCode = operatorLogin.Username; shift = operatorLogin.OperatorShift; } //20180326 - use DB setting for VAT - maanie double vatAmount = 0.0; //var setting = db.Settings.FirstOrDefault(s => s.SettingName == "VAT Amount"); var VAT = db.VATs.FirstOrDefault(); if (VAT == null) vatAmount = 0.14; //set to 0.14 if no vat setting found else vatAmount = VAT.VAT1; //20180516 - added Wash type - maanie var dispatch = db.Dispatches.FirstOrDefault(d => d.DeliveryId == invoiceId); var invoice = db.Invoices.FirstOrDefault(i => i.InvoiceId == dispatch.InvoiceId); var workload = db.Workloads.FirstOrDefault(w => w.WorkloadId == invoice.WorkloadId); var workloadtypes = db.WorkloadTypes.FirstOrDefault(wt => wt.WorkloadTypeId == workload.WorkloadTypeId); if(workloadtypes != null) washType = workloadtypes.Type; var list = new List(); list.Add(string.Format("\"{0}\"", documentNumber)); // Document Number list.Add("\"Header\""); // Header list.Add(string.Format("\"IN{0}\"", invoiceId.ToString().PadLeft(6, '0'))); // Document Number list.Add("\" \""); // Deleted list.Add("\" \""); // Print Status list.Add(string.Format("\"{0}\"", customer.PastelCode)); // Customer Code list.Add((invoiceDate.Month + (invoiceDate.Month < 3 ? 10 : -2)).ToString()); // Period Number list.Add(string.Format("\"{0}\"", invoiceDate.ToString("dd/MM/yyyy", CultureInfo.InvariantCulture))); // Date //list.Add(string.Format("\"IN{0}\"", printInvoiceId)); // Order Number list.Add(string.Format("\"{0}\"", reference + " - " + invoiceId)); // Order Number list.Add("\"N\""); // Inc/Exc list.Add("0"); // Discount list.Add("\" \""); // Invoice Message 1-3 list.Add("\" \""); // Invoice Message 2-3 list.Add("\" \""); // Invoice Message 3-3 list.Add(string.Format("\"{0}\"", Left(customer.Name, 30))); // Delivery Address 1-5 list.Add(string.Format("\"{0}\"", Left(customer.AddressLine1, 30))); // Delivery Address 2-5 list.Add(string.Format("\"{0}\"", Left(customer.AddressLine2, 30))); // Delivery Address 3-5 list.Add(string.Format("\"{0}\"", Left(customer.AddressCity, 30))); // Delivery Address 4-5 list.Add(string.Format("\"{0}\"", Left(customer.AddressPostCode, 30))); // Delivery Address 5-5 list.Add(string.Format("\"{0}\"", salesRepCode)); // Sales Analysis Code list.Add("0"); // Settlement Terms list.Add(string.Format("\"{0}\"", DateTime.Now.ToString("dd/MM/yyyy", CultureInfo.InvariantCulture))); // Document Date list.Add("\" \""); // Telephone list.Add("\" \""); // Fax Number list.Add(string.Format("\"{0}\"", Left(customer.ContactName, 16))); // Contact Person list.Add("1"); // Exchange Rate list.Add(string.Format("\"{0}\"", washType)); // Freight Method //20180516 - added Wash type - maanie list.Add(string.Format("\"{0}\"", shift)); // Ship/Deliver list.Add("\" \""); // Additional Costs list.Add("\" \""); // Email Status response.Add(string.Join(",", list)); foreach (var item in inventory) { list = new List(); double cost = 0; double inc = 0; if (item.Cost != null) { cost = cost = (float)(item.Cost.Value) / 100; inc = cost + (cost * vatAmount); //0.14); //20180326 - use DB setting for VAT - maanie } var desc = string.IsNullOrEmpty(item.Size) ? item.ItemType : string.Format("{0} {1}", item.Size, item.ItemType); list.Add(string.Format("\"{0}\"", documentNumber)); // Document Number list.Add("\"Detail\""); // Detail list.Add("0"); // Cost Price list.Add((item.ItemCount + item.ItemCountStain).ToString()); // Quantity //list.Add(string.Format("\"{0}\"", item.ItemCount.ToString())); //20171229 - added stained item count - maanie list.Add(cost.ToString("F2").Replace(",", ".")); //list.Add(double.Parse(cost.ToString("F2"), CultureInfo.InvariantCulture).ToString()); //list.Add(string.Format("\"{0}\"", cost.ToString("F2"))); //list.Add(cost.ToString("F2")); // Unit Selling Price 2016-10-19 - removed rounding - maanie //09-11-2016 - added rounding back - maanie //20170627 - added double quotes - maanie list.Add(inc.ToString().Replace(",", ".")); //list.Add(double.Parse(inc.ToString(), CultureInfo.InvariantCulture).ToString()); //list.Add(string.Format("\"{0}\"", inc.ToString())); //list.Add(inc.ToString("F2")); // Inclusive Price 2016-10-19 - removed rounding - maanie //20170627 - added double quotes - maanie list.Add("\"Each\""); // Unit list.Add("1"); // Tax Type list.Add("1"); // Discount Type list.Add("0"); // Discount Percentage //list.Add(string.Format("\"II{0}-{1}\"", item.CustomerId.Value.ToString().PadLeft(3, '0'), item.InventoryItemTypeId.ToString().PadLeft(3, '0'))); // Code list.Add(string.Format("\"II000-{0}\"", item.InventoryItemTypeId.ToString().PadLeft(3, '0'))); // Code list.Add(string.Format("\"{0}\"", Left(desc, 40))); // Description list.Add("4"); // Line Type list.Add("\" \""); // Projects Code list.Add("\"Web\""); // Store response.Add(string.Join(",", list)); } } Rows = response; } public static List createPastelExportLog(int documentNumber, string startdDate, string endDate) { var response = new List(); using (var db = new DataModel()) { var duplicatePrelists = db.GetDuplicatePrelists(startdDate, endDate).ToList(); var list = new List(); //build number of invoices row list.Add("Total number of invoices Exported"); list.Add(string.Format("\"{0}\"", documentNumber)); list.Add(""); response.Add(string.Join("\t", list)); list = new List(); //build column headings list.Add("Pre-list number"); list.Add("Customer"); list.Add("Number of duplicates"); response.Add(string.Join("\t", list)); foreach (var preList in duplicatePrelists) { list = new List(); list.Add(preList.Reference); list.Add(preList.Name); list.Add(string.Format("\"{0}\"", preList.DuplicateCount)); response.Add(string.Join("\t", list)); } } return response; } }