예제 #1
0
        //Update Zone
        public void DTO2DB_Update(DTO.PaymentNoteEditResult dtoItem, ref PaymentNote dbItem, int userId)
        {
            //From Invoce
            if (dtoItem.PaymentNoteTypeID == 1)
            {
                if (dtoItem.paymentNoteInvoiceResults != null)
                {
                    //remove
                    foreach (var item in dbItem.PaymentNoteInvoice.ToArray())
                    {
                        if (!dtoItem.paymentNoteInvoiceResults.Select(o => o.PaymentNoteInvoiceID).Contains(item.PaymentNoteInvoiceID))
                        {
                            dbItem.PaymentNoteInvoice.Remove(item);
                        }
                    }

                    //Checking And Map
                    foreach (var dtoItemInvoice in dtoItem.paymentNoteInvoiceResults)
                    {
                        PaymentNoteInvoice dbInvoice = new PaymentNoteInvoice();
                        if (dtoItemInvoice.PaymentNoteInvoiceID < 0)
                        {
                            dbItem.PaymentNoteInvoice.Add(dbInvoice);
                        }
                        else
                        {
                            dbInvoice = dbItem.PaymentNoteInvoice.Where(o => o.PaymentNoteInvoiceID == dtoItemInvoice.PaymentNoteInvoiceID).FirstOrDefault();
                        }
                        if (dbInvoice != null)
                        {
                            foreach (var item in dtoItemInvoice.paymentNotePODepositResults)
                            {
                                PaymentNotePODeposit notePODeposit = new PaymentNotePODeposit();
                                if (item.PaymentNotePODepositID < 0)
                                {
                                    dbInvoice.PaymentNotePODeposit.Add(notePODeposit);
                                }
                                else
                                {
                                    PaymentNoteInvoice itemData = dbItem.PaymentNoteInvoice.FirstOrDefault(o => o.PaymentNoteInvoiceID == dtoItemInvoice.PaymentNoteInvoiceID);
                                    if (itemData != null)
                                    {
                                        notePODeposit = itemData.PaymentNotePODeposit.Where(o => o.PaymentNotePODepositID == item.PaymentNotePODepositID).FirstOrDefault();
                                    }
                                }
                                if (notePODeposit != null)
                                {
                                    AutoMapper.Mapper.Map <DTO.PaymentNotePODepositResult, PaymentNotePODeposit>(item, notePODeposit);
                                }
                            }

                            AutoMapper.Mapper.Map <DTO.PaymentNoteInvoiceResult, PaymentNoteInvoice>(dtoItemInvoice, dbInvoice);
                        }
                    }
                }
            }

            //From Supplier
            if (dtoItem.PaymentNoteTypeID == 2)
            {
                if (dtoItem.paymentNoteSupplierResults != null)
                {
                    //remove
                    foreach (var item in dbItem.PaymentNoteSupplier.ToArray())
                    {
                        if (!dtoItem.paymentNoteSupplierResults.Select(o => o.PaymentNoteSupplierID).Contains(item.PaymentNoteSupplierID))
                        {
                            dbItem.PaymentNoteSupplier.Remove(item);
                        }
                    }

                    //Checking And Map
                    foreach (var dtoItemSupplier in dtoItem.paymentNoteSupplierResults)
                    {
                        PaymentNoteSupplier dbClient = new PaymentNoteSupplier();
                        if (dtoItemSupplier.PaymentNoteSupplierID < 0)
                        {
                            dbItem.PaymentNoteSupplier.Add(dbClient);
                        }
                        else
                        {
                            dbClient = dbItem.PaymentNoteSupplier.Where(o => o.PaymentNoteSupplierID == dtoItemSupplier.PaymentNoteSupplierID).FirstOrDefault();
                        }
                        if (dbClient != null)
                        {
                            AutoMapper.Mapper.Map <DTO.PaymentNoteSupplierResult, PaymentNoteSupplier>(dtoItemSupplier, dbClient);
                        }
                    }
                }
            }

            //From other
            if (dtoItem.PaymentNoteTypeID == 3)
            {
                if (dtoItem.paymentNoteOtherResults != null)
                {
                    //remove
                    foreach (var item in dbItem.PaymentNoteOther.ToArray())
                    {
                        if (!dtoItem.paymentNoteOtherResults.Select(o => o.PaymentNoteOtherID).Contains(item.PaymentNoteOtherID))
                        {
                            dbItem.PaymentNoteOther.Remove(item);
                        }
                    }

                    //Checking And Map
                    foreach (var dtoItemOther in dtoItem.paymentNoteOtherResults)
                    {
                        PaymentNoteOther dbOther = new PaymentNoteOther();
                        if (dtoItemOther.PaymentNoteOtherID < 0)
                        {
                            dbItem.PaymentNoteOther.Add(dbOther);
                        }
                        else
                        {
                            dbOther = dbItem.PaymentNoteOther.Where(o => o.PaymentNoteOtherID == dtoItemOther.PaymentNoteOtherID).FirstOrDefault();
                        }
                        if (dbOther != null)
                        {
                            AutoMapper.Mapper.Map <DTO.PaymentNoteOtherResult, PaymentNoteOther>(dtoItemOther, dbOther);
                        }
                    }
                }
            }

            AutoMapper.Mapper.Map <DTO.PaymentNoteEditResult, PaymentNote>(dtoItem, dbItem);

            //Manual mapping
            dbItem.PostingDate     = dtoItem.PostingDate.ConvertStringToDateTime();
            dbItem.PaymentNoteDate = dtoItem.PaymentNoteDate.ConvertStringToDateTime();
        }
예제 #2
0
        public override bool UpdateData(int userId, int id, ref object dtoItem, out Notification notification)
        {
            notification = new Library.DTO.Notification()
            {
                Type = Library.DTO.NotificationType.Success
            };
            DTO.PaymentNoteEditResult dtoPayment = ((Newtonsoft.Json.Linq.JObject)dtoItem).ToObject <DTO.PaymentNoteEditResult>();
            try
            {
                //get companyID
                Module.Framework.DAL.DataFactory fw_factory = new Framework.DAL.DataFactory();
                int?companyID = fw_factory.GetCompanyID(userId);
                using (var context = CreateContext())
                {
                    if (dtoPayment.PaymentNoteTypeID == 3)
                    {
                        foreach (var item in dtoPayment.paymentNoteOtherResults)
                        {
                            if (item.FactoryRawMaterialID == null)
                            {
                                throw new Exception("missing Suppiler !!!");
                            }
                        }
                    }
                    if (dtoPayment.PaymentNoteTypeID == 1)
                    {
                        foreach (var item in dtoPayment.paymentNoteInvoiceResults)
                        {
                            decimal?totalDpsAmount = 0;

                            if (dtoPayment.Currency == "USD" && item.Currency == "VND")
                            {
                                totalDpsAmount = (item.Amount == null ? 0 : item.Amount * dtoPayment.ExchangeRate);
                            }
                            else if (dtoPayment.Currency == "VND" && item.Currency == "USD")
                            {
                                totalDpsAmount = (item.Amount == null ? 0 : item.Amount / dtoPayment.ExchangeRate);
                            }
                            else
                            {
                                totalDpsAmount = (item.Amount == null ? 0 : item.Amount);
                            }
                            if (item.Remain < totalDpsAmount)
                            {
                                throw new Exception("Amount more than over remain " + item.PurchaseInvoiceUD);
                            }
                        }
                    }
                    ///
                    if (dtoPayment.PaymentNoteTypeID == 2)
                    {
                        foreach (var item in dtoPayment.paymentNoteSupplierResults)
                        {
                            var itemx = context.PaymentNoteMng_CheckingCurrencySupplier_View.FirstOrDefault(o => o.PurchaseOrderID == item.PurchaseOrderID);
                            if (itemx != null && itemx.Currency != dtoPayment.Currency)
                            {
                                throw new Exception("There are differences between the two currencies " + item.PurchaseOrderUD);
                            }
                        }
                    }

                    #region Convert
                    //if (dtoPayment.paymentNoteInvoiceResults != null && dtoPayment.PaymentNoteTypeID == 1)
                    //{
                    //    decimal? totalByCurrency = 0;
                    //    foreach (var dtoItemInvoice in dtoPayment.paymentNoteInvoiceResults)
                    //    {
                    //        string currency = context.PaymentNoteMng_PurchaseInvoiceCurrency_View.Where(o => o.PurchaseInvoiceID == dtoItemInvoice.PurchaseInvoiceID).Select(s => s.Currency).FirstOrDefault();
                    //        //If Purchase Invoice null Currency Throw
                    //        if (string.IsNullOrEmpty(currency))
                    //        {
                    //            string purchaseUD = context.PaymentNoteMng_PurchaseInvoiceCurrency_View.Where(o => o.PurchaseInvoiceID == dtoItemInvoice.PurchaseInvoiceID).Select(s => s.PurchaseInvoiceUD).FirstOrDefault();
                    //            throw new Exception("Missing Currency for Invoice " + purchaseUD);
                    //        }
                    //        //Convert USD => VND or
                    //        if (dtoPayment.Currency == "VND")
                    //        {
                    //            if (currency == "VND")
                    //            {
                    //                dtoItemInvoice.Amount = dtoItemInvoice.AmountByCurrency + dtoItemInvoice.Deposit;
                    //            }
                    //            else
                    //            {
                    //                dtoItemInvoice.Amount = ((dtoItemInvoice.AmountByCurrency == null ? 0 : dtoItemInvoice.AmountByCurrency) + (dtoItemInvoice.Deposit == null ? 0 : dtoItemInvoice.Deposit)) / dtoPayment.ExchangeRate;
                    //            }
                    //            totalByCurrency += (dtoItemInvoice.Deposit == null ? 0 : dtoItemInvoice.Deposit);
                    //        }
                    //        else if (dtoPayment.Currency == "USD")
                    //        {
                    //            if (currency == "VND")
                    //            {
                    //                dtoItemInvoice.Amount = (dtoItemInvoice.AmountByCurrency == null ? 0 : dtoItemInvoice.AmountByCurrency) * dtoPayment.ExchangeRate;
                    //            }
                    //            else
                    //            {
                    //                dtoItemInvoice.Amount = dtoItemInvoice.AmountByCurrency + dtoItemInvoice.Deposit;
                    //            }
                    //            totalByCurrency += ((dtoItemInvoice.Deposit == null ? 0 : dtoItemInvoice.Deposit) + (dtoItemInvoice.Deposit == null ? 0 : dtoItemInvoice.Deposit));
                    //        }
                    //    }
                    //    dtoPayment.TotalByCurrency = totalByCurrency;
                    //}
                    #endregion

                    PaymentNote dbItem = null;

                    if (id == 0)
                    {
                        if (dtoPayment.StatusID == 2 || dtoPayment.StatusID == 3)
                        {
                            throw new Exception("Set Status open to Save !!!");
                        }

                        dbItem = new PaymentNote();
                        context.PaymentNote.Add(dbItem);

                        //Automatically generate code
                        if (dtoPayment.PaymentTypeID == 1)// Payment type Cash
                        {
                            int    year            = DateTime.Now.Year;
                            string month           = DateTime.Now.Month.ToString().PadLeft(2, '0');
                            string receipt_pattern = "PC" + "_" + year.ToString().Substring(2) + month;
                            var    db_receiptNo    = context.PaymentNote.Where(o => o.PaymentNoteNo.Substring(0, 7) == receipt_pattern).OrderByDescending(o => o.PaymentNoteNo);
                            if (db_receiptNo.ToList().Count() == 0)
                            {
                                dtoPayment.PaymentNoteNo = receipt_pattern + "_" + "001";
                            }
                            else
                            {
                                var select_receipt = db_receiptNo.FirstOrDefault();
                                int iNo            = Convert.ToInt32(select_receipt.PaymentNoteNo.Substring(8, 3)) + 1;
                                dtoPayment.PaymentNoteNo = select_receipt.PaymentNoteNo.Substring(0, 7) + "_" + iNo.ToString().PadLeft(3, '0');
                            }
                        }
                        else if (dtoPayment.PaymentTypeID == 2)// Payment type Bank
                        {
                            int    year            = DateTime.Now.Year;
                            string month           = DateTime.Now.Month.ToString().PadLeft(2, '0');
                            string receipt_pattern = "BN" + "_" + year.ToString().Substring(2) + month;
                            var    db_receiptNo    = context.PaymentNote.Where(o => o.PaymentNoteNo.Substring(0, 7) == receipt_pattern).OrderByDescending(o => o.PaymentNoteNo);
                            if (db_receiptNo.ToList().Count() == 0)
                            {
                                dtoPayment.PaymentNoteNo = receipt_pattern + "_" + "001";
                            }
                            else
                            {
                                var select_receipt = db_receiptNo.FirstOrDefault();
                                int iNo            = Convert.ToInt32(select_receipt.PaymentNoteNo.Substring(8, 3)) + 1;
                                dtoPayment.PaymentNoteNo = select_receipt.PaymentNoteNo.Substring(0, 7) + "_" + iNo.ToString().PadLeft(3, '0');
                            }
                        }
                    }
                    else
                    {
                        dbItem = context.PaymentNote.Where(o => o.PaymentNoteID == id).FirstOrDefault();

                        if (dbItem.PaymentNoteTypeID != dtoPayment.PaymentNoteTypeID)
                        {
                            throw new Exception("Can't change Payment Note type !!!");
                        }
                    }
                    if (dbItem == null)
                    {
                        notification.Message = "data not found!";
                        return(false);
                    }
                    else
                    {
                        //check  status

                        /*
                         *  WorkOrderStatusID :
                         *      1 : Open
                         *      2 : Confimred
                         */

                        if (dbItem.StatusID == 2 || dbItem.StatusID == 3)
                        {
                            throw new Exception("Can't Update because Payment Comfirmed or Cancel !!!");
                        }
                        if (dtoPayment.StatusID == 2 && dtoPayment.PaymentNoteTypeID == 1)
                        {
                            ValidatePayment(dbItem.PaymentNoteID, 2);
                        }

                        //convert dto to db
                        converter.DTO2DB_Update(dtoPayment, ref dbItem, userId);

                        //upload file
                        Module.Framework.DAL.DataFactory fwFactory = new Module.Framework.DAL.DataFactory();
                        string tempFolder = FrameworkSetting.Setting.AbsoluteUserTempFolder + userId.ToString() + @"\";
                        if (dtoPayment.File_HasChange.HasValue && dtoPayment.File_HasChange.Value)
                        {
                            dbItem.AttachedFile = fwFactory.CreateFilePointer(tempFolder, dtoPayment.File_NewFile, dtoPayment.AttachedFile, dtoPayment.FriendlyName);
                        }

                        if (id == 0)
                        {
                            dbItem.CreateDate = DateTime.Now;
                            dbItem.CreateBy   = userId;
                        }
                        else
                        {
                            dbItem.UpdateDate = DateTime.Now;
                            dbItem.UpdateBy   = userId;
                        }

                        //remove orphan
                        context.PaymentNoteSupplier.Local.Where(o => o.PaymentNote == null).ToList().ForEach(o => context.PaymentNoteSupplier.Remove(o));
                        context.PaymentNoteInvoice.Local.Where(o => o.PaymentNote == null).ToList().ForEach(o => context.PaymentNoteInvoice.Remove(o));
                        context.PaymentNoteOther.Local.Where(o => o.PaymentNote == null).ToList().ForEach(o => context.PaymentNoteOther.Remove(o));
                        context.PaymentNotePODeposit.Local.Where(o => o.PaymentNoteInvoice == null).ToList().ForEach(o => context.PaymentNotePODeposit.Remove(o));

                        //save data
                        context.SaveChanges();
                        dtoItem = GetData(userId, dbItem.PaymentNoteID, null, out notification).Data;
                        return(true);
                    }
                }
            }
            catch (Exception ex)
            {
                notification.Type    = Library.DTO.NotificationType.Error;
                notification.Message = Library.Helper.GetInnerException(ex).Message;
                return(false);
            }
        }