Ejemplo n.º 1
0
        public int SetStatus(int userId, int paymentNoteID, int statusID, int paymentNoteTypeID, out Library.DTO.Notification notification)
        {
            notification = new Library.DTO.Notification()
            {
                Type = Library.DTO.NotificationType.Success
            };
            try
            {
                Module.Framework.BLL fwBLL = new Framework.BLL();
                using (var context = CreateContext())
                {
                    int?dbstatusID = context.PaymentNote.Where(o => o.PaymentNoteID == paymentNoteID).Select(o => o.StatusID).FirstOrDefault();

                    if (fwBLL.CanPerformAction(userId, "PaymentNoteMng", Library.DTO.ModuleAction.CanReset))
                    {
                        if (statusID == 1 && dbstatusID == 2) //Confirm 2 Open
                        {
                            if (paymentNoteTypeID == 1)
                            {
                                ValidatePayment(paymentNoteID, 1);
                            }
                            PaymentNote dbPaymentNote = context.PaymentNote.Where(o => o.PaymentNoteID == paymentNoteID).FirstOrDefault();
                            dbPaymentNote.StatusID = 1;
                            context.SaveChanges();
                        }
                        else if (statusID <= dbstatusID)
                        {
                            string newStatusNM = null;
                            if (statusID == 1)
                            {
                                newStatusNM = "Open";
                            }
                            else if (statusID == 2)
                            {
                                newStatusNM = "Confirm";
                            }
                            else
                            {
                                newStatusNM = "Cancel";
                            };

                            string dbStatusNM = null;
                            if (dbstatusID == 1)
                            {
                                dbStatusNM = "Open";
                            }
                            else if (dbstatusID == 2)
                            {
                                dbStatusNM = "Confirm";
                            }
                            else
                            {
                                dbStatusNM = "Cancel";
                            };

                            throw new Exception("Can not set status from " + dbStatusNM + " to " + newStatusNM);
                        }
                    }
                    else
                    {
                        if (statusID <= dbstatusID)
                        {
                            string newStatusNM = null;
                            if (statusID == 1)
                            {
                                newStatusNM = "Open";
                            }
                            else if (statusID == 2)
                            {
                                newStatusNM = "Confirm";
                            }
                            else
                            {
                                newStatusNM = "Cancel";
                            };

                            string dbStatusNM = null;
                            if (dbstatusID == 1)
                            {
                                dbStatusNM = "Open";
                            }
                            else if (dbstatusID == 2)
                            {
                                dbStatusNM = "Confirm";
                            }
                            else
                            {
                                dbStatusNM = "Cancel";
                            };

                            throw new Exception("Can not set status from " + dbStatusNM + " to " + newStatusNM);
                        }
                    }


                    if (statusID == 2) //Confirm
                    {
                        if (paymentNoteTypeID == 1)
                        {
                            ValidatePayment(paymentNoteID, 2);
                        }
                        PaymentNote dbPaymentNote = context.PaymentNote.Where(o => o.PaymentNoteID == paymentNoteID).FirstOrDefault();
                        dbPaymentNote.StatusID   = 2;
                        dbPaymentNote.UpdateBy   = userId;
                        dbPaymentNote.UpdateDate = DateTime.Now;

                        context.SaveChanges();

                        var listPurchaseInvoice = context.PaymentNoteInvoice.Where(o => o.PaymentNoteID == paymentNoteID).GroupBy(o => o.PurchaseInvoiceID).ToList();

                        foreach (IGrouping <int?, PaymentNoteInvoice> PurchaseInvoice in listPurchaseInvoice)
                        {
                            foreach (var item in PurchaseInvoice)
                            {
                                var checkFinish = context.PaymentNoteMng_PurchaseInvoiceCheckRemain_View.Where(o => o.PurchaseInvoiceID == item.PurchaseInvoiceID).FirstOrDefault();
                                if (checkFinish.Remain <= 0)
                                {
                                    var PurchaseInvoiceData = context.PurchaseInvoice.Where(o => o.PurchaseInvoiceID == item.PurchaseInvoiceID).FirstOrDefault();
                                    PurchaseInvoiceData.PurchaseInvoiceStatusID = 5;
                                    context.SaveChanges();
                                }
                            }
                        }
                        ////Update Supplier Deposit table
                        //if(dbPaymentNote.PaymentNoteSupplier.Count > 0)
                        //{
                        //    var year = dbPaymentNote.PostingDate.Value.Year.ToString();
                        //    foreach(var item in dbPaymentNote.PaymentNoteSupplier)
                        //    {
                        //        var deposit = context.SupplierDeposit.FirstOrDefault(o => o.FactoryRawMaterialID == item.FactoryRawMaterialID && o.Currency == dbPaymentNote.Currency && o.Year == year);
                        //        if(deposit != null)
                        //        {
                        //            deposit.Amount = deposit.Amount + item.Amount;
                        //        }
                        //        else
                        //        {
                        //            SupplierDeposit supplierDeposit = new SupplierDeposit();
                        //            supplierDeposit.Amount = item.Amount;
                        //            supplierDeposit.Currency = dbPaymentNote.Currency;
                        //            supplierDeposit.FactoryRawMaterialID = item.FactoryRawMaterialID;
                        //            supplierDeposit.Year = year;
                        //            context.SupplierDeposit.Add(supplierDeposit);
                        //        }
                        //    }
                        //    context.SaveChanges();
                        //}
                    }
                    if (statusID == 3) //Cancel
                    {
                        PaymentNote dbPaymentNote = context.PaymentNote.Where(o => o.PaymentNoteID == paymentNoteID).FirstOrDefault();

                        if (paymentNoteTypeID == 1)
                        {
                            var dbpaymentNoteInvoice = context.PaymentNoteInvoice.Where(o => o.PaymentNoteID == dbPaymentNote.PaymentNoteID).ToList();
                            foreach (var item in dbpaymentNoteInvoice.ToList())
                            {
                                PurchaseInvoice dbPurchaseInvoice = context.PurchaseInvoice.Where(o => o.PurchaseInvoiceID == item.PurchaseInvoiceID).FirstOrDefault();
                                if (dbPurchaseInvoice != null && dbPurchaseInvoice.PurchaseInvoiceStatusID == 3)
                                {
                                    dbPurchaseInvoice.PurchaseInvoiceStatusID = 2;
                                    dbPurchaseInvoice.SetStatusDate           = DateTime.Now;
                                    dbPurchaseInvoice.FinishDate = null;
                                }
                            }
                        }
                        dbPaymentNote.StatusID   = 3;
                        dbPaymentNote.UpdateBy   = userId;
                        dbPaymentNote.UpdateDate = DateTime.Now;

                        context.SaveChanges();
                    }
                }
                return(paymentNoteID);
            }
            catch (Exception ex)
            {
                notification.Type    = Library.DTO.NotificationType.Error;
                notification.Message = Library.Helper.GetInnerException(ex).Message;
                return(paymentNoteID);
            }
        }
Ejemplo n.º 2
0
        public void ValidatePayment(int paymentNoteID, int status)
        {
            using (var context = CreateContext())
            {
                var result = context.PaymentNoteMng_PaymentNoteInvoiceEdit_View.Where(o => o.PaymentNoteID == paymentNoteID).ToList();

                if (status == 1)//Open
                {
                    foreach (var item in result.ToList())
                    {
                        PurchaseInvoice dbPurchaseInvoice = context.PurchaseInvoice.Where(o => o.PurchaseInvoiceID == item.PurchaseInvoiceID).FirstOrDefault();
                        if (dbPurchaseInvoice != null && dbPurchaseInvoice.PurchaseInvoiceStatusID == 3)
                        {
                            dbPurchaseInvoice.PurchaseInvoiceStatusID = 2;
                            dbPurchaseInvoice.FinishDate = null;
                            context.SaveChanges();
                        }
                    }
                }
                if (status == 2)//Confirm
                {
                    foreach (var item in result.ToList())
                    {
                        decimal?stockMoney = 0;

                        stockMoney = item.Remain - item.Amount;
                        if (stockMoney < 0)
                        {
                            throw new Exception("Please check Payment for Invoice: " + item.PurchaseInvoiceUD);
                        }
                        //else
                        //{
                        //    foreach (var itemdps in item.PaymentNoteMng_PaymentNotePODeposit_View.ToList())
                        //    {
                        //        decimal? stockMoneydps = 0;
                        //        stockMoneydps = itemdps.RemainDepositAmount - itemdps.DepositAmount;

                        //        if (stockMoneydps < 0)
                        //        {
                        //            throw new Exception("Please check Payment for PO: " + itemdps.PurchaseOrderUD);
                        //        }
                        //    }
                        //}
                        if (stockMoney == 0)
                        {
                            PurchaseInvoice dbPurchaseInvoice = context.PurchaseInvoice.Where(o => o.PurchaseInvoiceID == item.PurchaseInvoiceID).FirstOrDefault();
                            dbPurchaseInvoice.PurchaseInvoiceStatusID = 3;
                            dbPurchaseInvoice.FinishDate = DateTime.Now;
                            //dbPurchaseInvoice.SetStatusBy = userId;
                            context.SaveChanges();
                        }

                        //var invoice = context.PaymentNoteMng_SupportPurchaseInvoiceSearch_View.Where(o => o.PurchaseInvoiceID == item.PurchaseInvoiceID).FirstOrDefault();
                        //if (invoice != null)
                        //{

                        //}
                        //else
                        //{
                        //    throw new Exception("Can't find Invoice !!!");
                        //}
                    }
                }
            }
        }