void purchaseWorker_DoWork(object sender, DoWorkEventArgs e) { PurchaseColumnModel model = (PurchaseColumnModel)e.Argument; if (model.Id == 0) { this.purchaseController.InsertPurchase(model); } else { this.purchaseController.UpdatePurchase(model); } }
private void SavePurchase() { LoadImage.Visible = true; SaveButton.Enabled = false; ClearButton.Enabled = false; List <PurchaseDetailViewModel> details = new List <PurchaseDetailViewModel>(); MapItemListToModel(details); PurchaseColumnModel model = new PurchaseColumnModel() { Id = PurchaseId, CustomerId = (int)SupplierDropdown.SelectedValue, PurchaseDate = PurchaseDate.Value, PONumber = PONumberTextbox.Text, IsDeleted = false, IsPaid = false, RecordedBy = UserInfo.UserId, InvoiceDiscount = addItemControl1.InvoiceDiscount, InvoiceDiscountPercent = addItemControl1.InvoiceDiscountPercent, VatableSale = addItemControl1.VatableSales, Vat = addItemControl1.Vat, TotalAmount = addItemControl1.TotalAmount, Type = TypeDropdown.SelectedIndex != -1 ? TypeDropdown.SelectedIndex : 0, Option = PickupRB.Checked ? "Pick-Up" : "Delivery", Comment = CommentTextbox.Text, PR = PRTextbox.Text.Trim(), PO = POTextbox.Text.Trim(), Details = details }; if (addItemControl1.NotifyAdmin) { string message = string.Format("Invoice number {0} contains items bought at a higher price.", PONumberTextbox.Text.Trim()); TY.SPIMS.Utilities.Helper.AddNotification(message); } purchaseWorker.RunWorkerAsync(model); }
public void InsertPurchase(PurchaseColumnModel model) { try { using (this.unitOfWork) { Purchase item = new Purchase() { CustomerId = model.CustomerId, PONumber = model.PONumber, Date = model.PurchaseDate, Type = model.Type, TotalAmount = model.TotalAmount, IsPaid = model.IsPaid, PurchaseOption = model.Option, Comment = model.Comment, RecordedBy = model.RecordedBy, ApprovedBy = model.ApprovedBy, IsDeleted = model.IsDeleted, Vat = model.Vat, VatableSale = model.VatableSale, InvoiceDiscount = model.InvoiceDiscount, InvoiceDiscountPercent = model.InvoiceDiscountPercent, Balance = model.TotalAmount }; foreach (PurchaseDetailViewModel detail in model.Details) { var autoPartDetail = db.AutoPartDetail.FirstOrDefault(a => a.Id == detail.AutoPartDetailId); PurchaseDetail d = new PurchaseDetail() { Purchase = item, AutoPartDetail = autoPartDetail, Quantity = detail.Quantity, Unit = detail.Unit, Price = detail.UnitPrice, TotalDiscount = detail.TotalDiscount, DiscountPercent = detail.DiscountPercent, DiscountPercent2 = detail.DiscountPercent2, DiscountPercent3 = detail.DiscountPercent3, TotalAmount = detail.TotalAmount }; //If delivered, add delivered quantity autoPartDetail.Quantity += detail.Quantity; var discountedPrice = detail.UnitPrice - detail.TotalDiscount; if (discountedPrice < autoPartDetail.BuyingPrice) { autoPartDetail.BuyingPrice = discountedPrice; } } 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.AddToPurchase(item); string action = string.Format("Added New Purchase - {0}", item.PONumber); this.actionLogController.AddToLog(action, UserInfo.UserId); this.unitOfWork.SaveChanges(); } } catch (Exception ex) { throw ex; } }
public void UpdatePurchase(PurchaseColumnModel model) { try { using (this.unitOfWork) { //Get Purchase Details var details = (from d in db.PurchaseDetail where d.PurchaseId == model.Id select d).ToList(); //Subtract the added items then delete original purchase details foreach (var d in details) { var autoPartDetail = d.AutoPartDetail; autoPartDetail.Quantity -= d.Quantity; db.DeleteObject(d); } var item = FetchPurchaseById(model.Id); if (item != null) { item.CustomerId = model.CustomerId; item.PONumber = model.PONumber; item.Date = model.PurchaseDate; item.Type = model.Type; item.Comment = model.Comment; item.PurchaseOption = model.Option; item.RecordedBy = model.RecordedBy; item.ApprovedBy = model.ApprovedBy; item.Vat = model.Vat; item.VatableSale = model.VatableSale; 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 purchase details foreach (PurchaseDetailViewModel detail in model.Details) { var autoPartDetail = db.AutoPartDetail.FirstOrDefault(a => a.Id == detail.AutoPartDetailId); PurchaseDetail d = new PurchaseDetail() { Purchase = item, AutoPartDetail = autoPartDetail, Quantity = detail.Quantity, Unit = detail.Unit, Price = detail.UnitPrice, TotalDiscount = detail.TotalDiscount, DiscountPercent = detail.DiscountPercent, DiscountPercent2 = detail.DiscountPercent2, DiscountPercent3 = detail.DiscountPercent3, TotalAmount = detail.TotalAmount }; 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 Purchase - {0}", item.PONumber); this.actionLogController.AddToLog(action, UserInfo.UserId); this.unitOfWork.SaveChanges(); } } catch (Exception ex) { throw ex; } }