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);
        }
예제 #3
0
        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;
            }
        }
예제 #4
0
        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;
            }
        }