void salesWorker_DoWork(object sender, DoWorkEventArgs e) { SaleColumnModel model = (SaleColumnModel)e.Argument; if (model.Id == 0) { this.saleController.InsertSale(model); } else { this.saleController.UpdateSale(model); } }
private void SaveSale() { LoadImage.Visible = true; SaveButton.Enabled = false; ClearButton.Enabled = false; List <SalesDetailViewModel> details = new List <SalesDetailViewModel>(); MapItemListToModel(details); SaleColumnModel model = new SaleColumnModel() { Id = SaleId, CustomerId = (int)CustomerDropdown.SelectedValue, Date = SaleDate.Value, InvoiceNumber = InvoiceNumberTextbox.Text.Trim(), IsDeleted = false, IsPaid = false, RecordedBy = UserInfo.UserId, VatableSale = addItemControl1.VatableSales, Vat = addItemControl1.Vat, TotalAmount = addItemControl1.TotalAmount, Type = TypeDropdown.SelectedIndex != -1 ? TypeDropdown.SelectedIndex : 0, InvoiceDiscount = addItemControl1.InvoiceDiscount, InvoiceDiscountPercent = addItemControl1.InvoiceDiscountPercent, Comment = CommentTextbox.Text.Trim(), PR = PRTextbox.Text.Trim(), PO = POTextbox.Text.Trim(), Details = details }; if (addItemControl1.NotifyAdmin) { string message = string.Format("Invoice number {0} contains items sold at a lower price.", InvoiceNumberTextbox.Text.Trim()); TY.SPIMS.Utilities.Helper.AddNotification(message); } salesWorker.RunWorkerAsync(model); }
public void InsertSale(SaleColumnModel model) { try { using (this.unitOfWork) { Sale item = new Sale() { CustomerId = model.CustomerId, InvoiceNumber = model.InvoiceNumber, Date = model.Date, Type = model.Type, VatableSale = model.VatableSale, Vat = model.Vat, TotalAmount = model.TotalAmount, IsPaid = model.IsPaid, RecordedBy = model.RecordedBy, ApprovedBy = model.ApprovedBy, Comment = model.Comment, IsDeleted = model.IsDeleted, InvoiceDiscount = model.InvoiceDiscount, InvoiceDiscountPercent = model.InvoiceDiscountPercent, Balance = model.TotalAmount }; foreach (SalesDetailViewModel detail in model.Details) { var autoPartDetail = this.autoPartController.FetchAutoPartDetailById(detail.AutoPartDetailId); SaleDetail d = new SaleDetail() { Sale = item, AutoPartDetail = autoPartDetail, Quantity = detail.Quantity, Unit = detail.Unit, SRP = detail.UnitPrice, TotalDiscount = detail.TotalDiscount, DiscountPercent = detail.DiscountPercent, DiscountPercent2 = detail.DiscountPercent2, DiscountPercent3 = detail.DiscountPercent3, TotalAmount = detail.TotalAmount }; //Subtract Sold Quantity autoPartDetail.Quantity -= detail.Quantity; } if (!string.IsNullOrWhiteSpace(model.PR)) { string[] PRs = model.PR.Split(new char[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries); foreach (string s in PRs) { PurchaseRequisition r = new PurchaseRequisition(); r.PRNumber = s; item.PurchaseRequisition.Add(r); } } if (!string.IsNullOrWhiteSpace(model.PO)) { string[] POs = model.PO.Split(new char[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries); foreach (string s in POs) { PurchaseOrder o = new PurchaseOrder(); o.PONumber = s; item.PurchaseOrder.Add(o); } } this.unitOfWork.Context.AddToSale(item); string action = string.Format("Added New Sale - {0}", item.InvoiceNumber); this.actionLogController.AddToLog(action, UserInfo.UserId); this.unitOfWork.SaveChanges(); } } catch (Exception ex) { throw ex; } }
public void UpdateSale(SaleColumnModel model) { try { using (this.unitOfWork) { //Get Sale Details var details = (from d in db.SaleDetail where d.SaleId == model.Id select d).ToList(); //Add back the subtracted items then delete original sale details foreach (var d in details) { var autoPartDetail = d.AutoPartDetail; autoPartDetail.Quantity += d.Quantity; db.DeleteObject(d); } var item = FetchSaleById(model.Id); if (item != null) { item.CustomerId = model.CustomerId; item.InvoiceNumber = model.InvoiceNumber; item.Date = model.Date; item.Type = model.Type; item.VatableSale = model.VatableSale; item.Vat = model.Vat; item.RecordedBy = model.RecordedBy; item.ApprovedBy = model.ApprovedBy; item.Comment = model.Comment; item.IsDeleted = model.IsDeleted; item.InvoiceDiscount = model.InvoiceDiscount; item.InvoiceDiscountPercent = model.InvoiceDiscountPercent; decimal?newBalance = model.TotalAmount - item.TotalAmount + item.Balance; if (newBalance.HasValue && newBalance.Value > 0) { item.Balance = newBalance.Value; item.IsPaid = false; } else { item.Balance = 0; item.IsPaid = true; } item.TotalAmount = model.TotalAmount; foreach (var po in item.PurchaseOrder.ToList()) { db.DeleteObject(po); } foreach (var pr in item.PurchaseRequisition.ToList()) { db.DeleteObject(pr); } } //Add the new sale details foreach (SalesDetailViewModel detail in model.Details) { var autoPartDetail = db.AutoPartDetail.FirstOrDefault(a => a.Id == detail.AutoPartDetailId); SaleDetail d = new SaleDetail() { Sale = item, AutoPartDetail = autoPartDetail, Quantity = detail.Quantity, Unit = detail.Unit, SRP = detail.UnitPrice, TotalDiscount = detail.TotalDiscount, DiscountPercent = detail.DiscountPercent, DiscountPercent2 = detail.DiscountPercent2, DiscountPercent3 = detail.DiscountPercent3, TotalAmount = detail.TotalAmount }; //Subtract Sold Quantity autoPartDetail.Quantity -= detail.Quantity; } if (!string.IsNullOrWhiteSpace(model.PR)) { string[] PRs = model.PR.Split(new char[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries); foreach (string s in PRs) { PurchaseRequisition r = new PurchaseRequisition(); r.PRNumber = s; item.PurchaseRequisition.Add(r); } } if (!string.IsNullOrWhiteSpace(model.PO)) { string[] POs = model.PO.Split(new char[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries); foreach (string s in POs) { PurchaseOrder o = new PurchaseOrder(); o.PONumber = s; item.PurchaseOrder.Add(o); } } string action = string.Format("Updated Sale - {0}", item.InvoiceNumber); this.actionLogController.AddToLog(action, UserInfo.UserId); this.unitOfWork.SaveChanges(); } } catch (Exception ex) { throw ex; } }