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); } }
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 !!!"); //} } } } }