Пример #1
0
        public static CashInVm GetCashReceiptForPartners(string receiptType, int receiptId = 0)
        {
            CashInVm cashVm;

            if (receiptId != 0)
            {
                cashVm = CashOutHelper.FillCashVmForReceiptView(receiptId);
                return(cashVm);
            }
            cashVm = new CashInVm();

            if (receiptType == "out")
            {
                cashVm.CashType = "cashout";
            }
            else
            {
                cashVm.CashType = "cashin";
            }

            cashVm.ReceiptCode = AdminHelper.GeneratePrefixCode(PrefixForEnum.CashOut, false);
            //cashVm.PaymentTermId = 1;
            //cashVm.CurrencyId = 1;
            CashInCheckVm cashCheckVm = new CashInCheckVm();

            cashVm.CashInReceiptChecks.Add(cashCheckVm);

            return(cashVm);
        }
Пример #2
0
        /// <summary>
        /// Get Cash Receipt info for Agent Note ..Not like invoices ..
        /// Will allow only to collect from one agent note only .. not for all notes for that agent
        /// </summary>
        /// <param name="agNoteId"></param>
        /// <param name="cashVm"></param>
        private static void FillCashVmForAgNote(int agNoteId, ref CashInVm cashVm)
        {
            AccountingEntities     db             = new AccountingEntities();
            List <CashInInvoiceVm> cashAgNoteList = new List <CashInInvoiceVm>();
            List <AgentNoteView>   agNoteList     = new List <AgentNoteView>();

            agNoteList = db.AgentNoteViews
                         .Where(x => x.AgentNoteId == agNoteId && (x.InvStatusId != 4 && x.InvStatusId != 1)).ToList();
            Mapper.CreateMap <AgentNoteView, CashInInvoiceVm>().IgnoreAllNonExisting();
            Mapper.Map(agNoteList, cashAgNoteList);

            cashVm.CashInReceiptInvs = cashAgNoteList;

            List <int> invIds    = agNoteList.Select(x => x.AgentNoteId).ToList();
            var        cashInvDb = db.CashOutReceiptAgNotes
                                   .Where(x => invIds.Contains(x.AgentNoteId))
                                   .GroupBy(x => x.AgentNoteId)
                                   .ToList();

            foreach (var item in cashVm.CashInReceiptInvs)
            {
                item.CollectedAmount = cashInvDb.Where(x => x.Key == item.AgentNoteId)
                                       .Select(x => x.Sum(y => y.PaidAmount)).FirstOrDefault();
                item.AmountDue = item.TotalAmount - item.CollectedAmount;
            }
            cashVm.CashType = "cashout";
        }
Пример #3
0
        public static CashInVm GetCashReceiptInfo(int cashReceiptId = 0)
        {
            CashInVm           cashVm = new CashInVm();
            AccountingEntities db     = new AccountingEntities();

            var cashReceiptObj = db.ArCashDepositViews.Where(x => x.ReceiptId == cashReceiptId).FirstOrDefault();

            Mapper.CreateMap <ArCashDepositView, CashInVm>()
            .ForMember(x => x.CashInReceiptChecks, y => y.Ignore())
            .ForMember(x => x.CashInReceiptInvs, y => y.Ignore())
            .ForMember(x => x.PaymentTermName, y => y.MapFrom(u => u.PaymentTermEn));

            Mapper.Map(cashReceiptObj, cashVm);

            cashVm.CustomerName = string.IsNullOrEmpty(cashReceiptObj.ShipperNameEn) ? cashReceiptObj.ConsigneeNameEn : cashReceiptObj.ShipperNameEn;

            //for bank
            if (cashVm.PaymentTermId == (byte)PaymentTermEnum.BankCashDeposit)
            {
                int bankAccId = cashVm.BankAccId.Value;
                var bankInfo  = db.BankAccounts.Include("Bank").Where(x => x.BankAccId == bankAccId).FirstOrDefault();
                cashVm.BankDetailsVm = new BankDetailsVm()
                {
                    AccountName   = bankInfo.AccountName,
                    AccountNumber = bankInfo.AccountNumber,
                    BankNameEn    = bankInfo.Bank.BankNameEn,
                    BankAddressEn = bankInfo.Bank.BankAddressEn
                };
            }

            return(cashVm);
        }
Пример #4
0
        private static void AddExpenseReceiptToTrans(CashInVm cashInVmObj)
        {
            string creditAccId = AccountingChartHelper.GetAccountIdByPkAndTbName(cashInVmObj.CurrencyId, "Currency", "CurrencyId");

            if (string.IsNullOrEmpty(creditAccId))
            {
                string parentAccountId = ((int)AccountingChartEnum.Cash).ToString();
                //Add new accountId to the chart
                creditAccId = AccountingChartHelper
                              .AddAccountToChart(cashInVmObj.CurrencySign, cashInVmObj.CurrencySign, parentAccountId);
                AccountingChartHelper.AddAccountIdToObj(creditAccId, "Currency", cashInVmObj.CurrencyId, "CurrencyId");
            }


            AccTransactionVm accTrans = new AccTransactionVm()
            {
                CreateDate        = DateTime.Now,
                CreateBy          = EasyFreight.DAL.AdminHelper.GetCurrentUserId(),
                TransactionName   = "Cash Out Receipt Number " + cashInVmObj.ReceiptCode,
                TransactionNameAr = "ايصال صرف نقدية رقم " + cashInVmObj.ReceiptCode
            };

            AccountingEntities db = new AccountingEntities();
            var expensesLibList   = db.ExpenseLibs.Select(x => new { x.ExpenseId, x.AccountId }).ToList();

            AccTransactionDetailVm accTransDetDebit;

            //Loop through expenses for debit accounts
            foreach (var item in cashInVmObj.CashOutReceiptExpenses)
            {
                string debitAccId = expensesLibList.Where(x => x.ExpenseId == item.ExpenseId).FirstOrDefault().AccountId;
                accTransDetDebit = new AccTransactionDetailVm()
                {
                    AccountId    = debitAccId,
                    DebitAmount  = item.PaidAmount.Value,
                    CurrencyId   = cashInVmObj.CurrencyId,
                    CreditAmount = 0
                };
                accTrans.AccTransactionDetails.Add(accTransDetDebit);
            }

            // Add Cash as credit
            AccTransactionDetailVm accTransDetCredit = new AccTransactionDetailVm()
            {
                AccountId    = creditAccId,
                CreditAmount = cashInVmObj.ReceiptAmount.Value,
                CurrencyId   = cashInVmObj.CurrencyId,
                DebitAmount  = 0
            };

            accTrans.AccTransactionDetails.Add(accTransDetCredit);



            int transId = AccountingHelper.AddTransaction(accTrans);

            //Update TransId in invoice table
            AccountingChartHelper.AddTransIdToObj(transId, "CashOutReceipt", cashInVmObj.ReceiptId, "ReceiptId");
        }
Пример #5
0
        public ActionResult PrintCashInV(int id)
        {
            CashInVm invObj = CashDepositHelper.GetCashReceiptInfo(id);

            invObj.CashType = "cashin";
            return(View(invObj));
            // return View("~/Views/CashManagement/PrintCashInV.cshtml", invObj);
        }
Пример #6
0
        public ActionResult ViewCashInPartial(int id)
        {
            Session["receiptId"] = id;
            CashInVm invObj = CashDepositHelper.GetCashReceiptInfo(id);

            invObj.CashType = "cashin";
            return(PartialView("~/Views/CashManagement/_ViewCashInReceipt.cshtml", invObj));
        }
Пример #7
0
        public static string SaveTransfer(CashBankTransferVm currVm)
        {
            string result = "true";
            //create cash In object


            CashInVm cashIn = new CashInVm();

            cashIn.CashType      = "cashin";
            cashIn.CreateBy      = CurrentUserId;
            cashIn.CreateDate    = DateTime.Now;
            cashIn.CurrencyId    = currVm.CurrentCurrencyId;
            cashIn.Notes         = currVm.Notes;
            cashIn.PaymentTermId = currVm.IsCashToBank ? (byte)PaymentTermEnum.CashToBank : (byte)PaymentTermEnum.BankToCash;
            cashIn.ReceiptAmount = currVm.CurrentAmount;
            cashIn.ReceiptDate   = DateTime.Now;

            var bankAcc = BankHelper.GetBankAccountInfo(currVm.BankAccId);

            cashIn.BankId    = bankAcc.BankId;
            cashIn.BankAccId = bankAcc.BankAccId;

            using (TransactionScope transaction = new TransactionScope())
            {
                try
                {
                    int cashInReceiptId, cashOutReceiptId;
                    CashHelper.AddEditCashReceipt(cashIn, out cashInReceiptId, false);
                    cashIn.CashType      = "cashout";
                    cashIn.CurrencyId    = currVm.CurrentCurrencyId;
                    cashIn.ReceiptAmount = currVm.CurrentAmount;
                    cashIn.ReceiptId     = 0;
                    cashIn.ReceiptCode   = "";
                    cashIn.BankId        = null;
                    cashIn.BankAccId     = null;
                    CashOutHelper.AddEditCashReceipt(cashIn, out cashOutReceiptId, false);

                    AddReceiptToTransTableTransfer(currVm, cashInReceiptId, cashOutReceiptId);

                    transaction.Complete();
                }
                catch (DbEntityValidationException e)
                {
                    result = "false " + e.Message;
                }
                catch (Exception e)
                {
                    result = "false " + e.Message;
                }
            }


            return(result);
        }
Пример #8
0
        public ActionResult CCCashSettlement(int operationId, decimal receiptAmount = 0)
        {
            ViewBag.PaymentTerm = ListCommonHelper.GetPaymentTerm("en")
                                  .Where(x => x.Key == 1)
                                  .ToDictionary(x => x.Key, x => x.Value);
            ViewBag.CurrencyList = ListCommonHelper.GetCurrencyList();
            ViewBag.BankList     = ListCommonHelper.GetBankList();

            CashInVm cashReceiptObj = CashHelper.GetCashReceiptInfoForSettlement(operationId, receiptAmount);

            ViewBag.CashRecTitle = "Custom Clearance Cash Settlement (In) For Operation " + cashReceiptObj.OperationCode;

            return(View("~/Views/CashManagement/CashInReceipt.cshtml", cashReceiptObj));
        }
Пример #9
0
        public static string AddArCashDeposit(CashInVm cashInVm)
        {
            string             isSaved       = "true";
            AccountingEntities db            = new AccountingEntities();
            ArCashDeposit      arCashDeposit = new ArCashDeposit();

            Mapper.CreateMap <CashInVm, ArCashDeposit>()
            .IgnoreAllNonExisting();
            Mapper.Map(cashInVm, arCashDeposit);

            using (TransactionScope transaction = new TransactionScope())
            {
                try
                {
                    arCashDeposit.ReceiptCode = AdminHelper.GeneratePrefixCode(PrefixForEnum.CashIn, true);
                    db.ArCashDeposits.Add(arCashDeposit);

                    db.SaveChanges();



                    cashInVm.ReceiptId   = arCashDeposit.ReceiptId;
                    cashInVm.ReceiptCode = arCashDeposit.ReceiptCode;

                    string creditAccountId = ((int)AccountingChartEnum.DepositRevenues).ToString();

                    //Add invoice to accounting transactions table
                    CashHelper.AddReceiptToTransTable(creditAccountId, cashInVm, "ArCashDeposit");

                    //Add or update deposit balance for this client
                    CashDepositBalanceHelper.AddEditArDepBalance(cashInVm.ShipperId, cashInVm.ConsigneeId,
                                                                 cashInVm.CurrencyId, cashInVm.ReceiptAmount.Value, db);

                    transaction.Complete();
                }
                catch (DbEntityValidationException e)
                {
                    isSaved = "false " + e.Message;
                }
                catch (Exception e)
                {
                    isSaved = "false " + e.Message;
                }
            }


            return(isSaved);
        }
Пример #10
0
        public ActionResult AddEditCashReceipt(CashInVm cashVmObj)
        {
            string isSaved = "false";
            int    receiptId;

            if (cashVmObj.CashType == "cashin")
            {
                isSaved = CashHelper.AddEditCashReceipt(cashVmObj, out receiptId);
            }
            else //Cash Out Receipt or CC cash deposit
            {
                isSaved = CashOutHelper.AddEditCashReceipt(cashVmObj, out receiptId);
            }


            return(Json(isSaved + "_" + receiptId));
        }
Пример #11
0
        public static string SaveCurrencyExchange(CurrencyExchangeVm currVm)
        {
            string result = "true";
            //create cash In object
            CashInVm cashIn = new CashInVm();

            cashIn.CashType      = "cashin";
            cashIn.CreateBy      = CurrentUserId;
            cashIn.CreateDate    = DateTime.Now;
            cashIn.CurrencyId    = currVm.NewCurrencyId;
            cashIn.Notes         = currVm.Notes;
            cashIn.PaymentTermId = (byte)PaymentTermEnum.CurrencyExchange; //CurrencyExchange
            cashIn.ReceiptAmount = currVm.NewAmount;
            cashIn.ReceiptDate   = DateTime.Now;

            using (TransactionScope transaction = new TransactionScope())
            {
                try
                {
                    int cashInReceiptId, cashOutReceiptId;
                    CashHelper.AddEditCashReceipt(cashIn, out cashInReceiptId, false);
                    cashIn.CashType      = "cashout";
                    cashIn.CurrencyId    = currVm.CurrentCurrencyId;
                    cashIn.ReceiptAmount = currVm.CurrentAmount;
                    cashIn.ReceiptId     = 0;
                    cashIn.ReceiptCode   = "";
                    CashOutHelper.AddEditCashReceipt(cashIn, out cashOutReceiptId, false);

                    AddReceiptToTransTable(currVm, cashInReceiptId, cashOutReceiptId);

                    transaction.Complete();
                }
                catch (DbEntityValidationException e)
                {
                    result = "false " + e.Message;
                }
                catch (Exception e)
                {
                    result = "false " + e.Message;
                }
            }
            return(result);
        }
Пример #12
0
        public static CashInVm GetCashReceiptForExpense(int receiptId = 0)
        {
            CashInVm cashVm;

            if (receiptId != 0)
            {
                cashVm = CashOutHelper.FillCashVmForReceiptView(receiptId);
                return(cashVm);
            }
            cashVm               = new CashInVm();
            cashVm.CashType      = "cashout";
            cashVm.ReceiptCode   = AdminHelper.GeneratePrefixCode(PrefixForEnum.CashOut, false);
            cashVm.PaymentTermId = 1;
            cashVm.CurrencyId    = 1;

            CashOutExpense cashOutExpense = new CashOutExpense();

            cashVm.CashOutReceiptExpenses.Add(cashOutExpense);


            return(cashVm);
        }
Пример #13
0
        internal static string AddEditCashReceipt(CashInVm cashInVmObj, out int savedReceiptId, bool addToTrans = true)
        {
            string isSaved = "true";

            AccountingEntities db = new AccountingEntities();
            int receiptId         = cashInVmObj.ReceiptId;

            savedReceiptId = receiptId;
            CashOutReceipt cashDbObj;

            if (receiptId == 0)
            {
                cashDbObj = new CashOutReceipt();
            }
            else
            {
                cashDbObj = db.CashOutReceipts.Include("CashOutReceiptChecks")
                            .Include("CashOutReceiptInvs")
                            .Where(x => x.ReceiptId == receiptId).FirstOrDefault();

                //Delete invoice list .. will insert it again
                var invList = cashDbObj.CashOutReceiptInvs.ToList();
                foreach (var item in invList)
                {
                    cashDbObj.CashOutReceiptInvs.Remove(item);
                }

                //Delete check list .. will insert it again
                var checkList = cashDbObj.CashOutReceiptChecks.ToList();
                foreach (var item in checkList)
                {
                    cashDbObj.CashOutReceiptChecks.Remove(item);
                }
            }

            Mapper.CreateMap <CashInVm, CashOutReceipt>()
            .ForMember(x => x.CashOutReceiptInvs, y => y.Ignore())
            .ForMember(x => x.CashOutReceiptChecks, y => y.Ignore())
            .IgnoreAllNonExisting();
            Mapper.Map(cashInVmObj, cashDbObj);

            CashOutReceiptCheck cashCheckDb;

            foreach (var item in cashInVmObj.CashInReceiptChecks)
            {
                if (!string.IsNullOrEmpty(item.CheckNumber))
                {
                    cashCheckDb = new CashOutReceiptCheck();
                    Mapper.CreateMap <CashInCheckVm, CashOutReceiptCheck>().IgnoreAllNonExisting();
                    Mapper.Map(item, cashCheckDb);

                    cashDbObj.CashOutReceiptChecks.Add(cashCheckDb);
                }
            }

            if (cashInVmObj.OperationId != null) //CC Cash Deposit
            {
                CashOutCCCashDeposit cashDeposit = new CashOutCCCashDeposit();
                cashDeposit.OperationId = cashInVmObj.OperationId.Value;
                cashDeposit.ReceiptId   = cashInVmObj.ReceiptId;
                cashDbObj.CashOutCCCashDeposits.Add(cashDeposit);
            }

            else if (cashInVmObj.AgentId == null) //Cash Receipt for invoice
            {
                //Add Receipt invoices
                CashOutReceiptInv cashInvDb;
                foreach (var item in cashInVmObj.CashInReceiptInvs)
                {
                    if (item.IsSelected)
                    {
                        cashInvDb = new CashOutReceiptInv();
                        Mapper.CreateMap <CashInInvoiceVm, CashOutReceiptInv>().IgnoreAllNonExisting();
                        item.CashInReceipt = null;
                        Mapper.Map(item, cashInvDb);

                        cashDbObj.CashOutReceiptInvs.Add(cashInvDb);
                    }
                }
            }
            else //Cash Receipt for Agent Note
            {
                //Add Receipt Agent Notes
                CashOutReceiptAgNote cashAgNoteDb;
                foreach (var item in cashInVmObj.CashInReceiptInvs)
                {
                    if (item.IsSelected)
                    {
                        cashAgNoteDb = new CashOutReceiptAgNote();
                        Mapper.CreateMap <CashInInvoiceVm, CashOutReceiptAgNote>().IgnoreAllNonExisting();
                        item.CashInReceipt = null;
                        Mapper.Map(item, cashAgNoteDb);

                        cashDbObj.CashOutReceiptAgNotes.Add(cashAgNoteDb);
                    }
                }
            }


            using (TransactionScope transaction = new TransactionScope())
            {
                try
                {
                    if (receiptId == 0)
                    {
                        cashDbObj.ReceiptCode = AdminHelper.GeneratePrefixCode(PrefixForEnum.CashOut, true);
                        db.CashOutReceipts.Add(cashDbObj);
                    }

                    db.SaveChanges();

                    cashInVmObj.ReceiptId   = cashDbObj.ReceiptId;
                    cashInVmObj.ReceiptCode = cashDbObj.ReceiptCode;

                    savedReceiptId = cashInVmObj.ReceiptId;

                    #region Add To Transaction Table
                    if (addToTrans)
                    {
                        //Add shipper or consignee to accounting chart
                        string debitAccountId = "";
                        if (cashInVmObj.OperationId != null) //CC Cash Deposit
                        {
                            debitAccountId = AccountingChartHelper.GetCCCashDepAccountId(cashInVmObj.OperationId.Value);
                            if (string.IsNullOrEmpty(debitAccountId))
                            {
                                debitAccountId = AccountingChartHelper.AddCCCashDepositToChart(cashInVmObj.OperationId.Value);
                            }
                        }
                        else if (!string.IsNullOrEmpty(cashInVmObj.PartnerAccountId)) //Partner Drawing
                        {
                            debitAccountId = cashInVmObj.PartnerAccountId;
                        }
                        else if (cashInVmObj.AgentId == null) //Cash Receipt for invoice
                        {
                            if (cashInVmObj.InvoiceType == 1) //carrier
                            {
                                debitAccountId = AccountingChartHelper
                                                 .GetAccountIdByPkAndTbName(cashInVmObj.CarrierId.Value, "Carrier", "CarrierId");
                                if (string.IsNullOrEmpty(debitAccountId))
                                {
                                    debitAccountId = AccountingChartHelper.AddCarrierToChart(cashInVmObj.CarrierId.Value);
                                }
                            }
                            else if (cashInVmObj.InvoiceType == 2) //contractor
                            {
                                debitAccountId = AccountingChartHelper
                                                 .GetAccountIdByPkAndTbName(cashInVmObj.ContractorId.Value, "Contractor", "ContractorId");
                                if (string.IsNullOrEmpty(debitAccountId))
                                {
                                    debitAccountId = AccountingChartHelper.AddContractorToChart(cashInVmObj.ContractorId.Value);
                                }
                            }
                            else if (cashInVmObj.InvoiceType == 3) //custom clearance .. 22/11/2016
                            {
                                debitAccountId = ((int)AccountingChartEnum.CustomClearanceSupplier).ToString();
                            }
                        }
                        else //Cash Receipt for Agent Note
                        {
                            debitAccountId = AccountingChartHelper.GetAccountIdByPkAndTbName(cashInVmObj.AgentId.Value, "Agent", "AgentId");
                            if (string.IsNullOrEmpty(debitAccountId))
                            {
                                debitAccountId = AccountingChartHelper.AddAgentToChart(cashInVmObj.AgentId.Value, 2); //AgentNoteType = 2 .. Credit Agent
                            }
                        }

                        if (receiptId == 0)
                        {
                            //Add invoice to accounting transactions table

                            AddReceiptToTransTable(debitAccountId, cashInVmObj);

                            foreach (var item in cashInVmObj.CashInReceiptInvs)
                            {
                                if (item.IsSelected)
                                {
                                    if (item.InvoiceId != 0) //Cash Receipt for invoice
                                    {
                                        //Change Invoice status
                                        if (item.AmountDue == 0)
                                        {
                                            InvoiceHelper.ChangeInvStatus(item.InvoiceId, InvStatusEnum.Paid, true);
                                        }
                                        else if (item.CollectedAmount != 0 && item.AmountDue != 0)
                                        {
                                            InvoiceHelper.ChangeInvStatus(item.InvoiceId, InvStatusEnum.PartiallyPaid, true);
                                        }
                                    }
                                    else //Cash Receipt for Agent Note
                                    {
                                        //Change Agent Note status
                                        if (item.AmountDue == 0)
                                        {
                                            AgentNoteHelper.ChangeAgNoteStatus(item.AgentNoteId, InvStatusEnum.Paid);
                                        }
                                        else if (item.CollectedAmount != 0 && item.AmountDue != 0)
                                        {
                                            AgentNoteHelper.ChangeAgNoteStatus(item.AgentNoteId, InvStatusEnum.PartiallyPaid);
                                        }
                                    }
                                }
                            }
                        }
                    }

                    #endregion

                    transaction.Complete();
                }
                catch (DbEntityValidationException e)
                {
                    isSaved = "false " + e.Message;

                    //AdminHelper.LastIdRemoveOne(PrefixForEnum.AccountingInvoice);
                }
                catch (Exception e)
                {
                    isSaved = "false " + e.Message;
                    //AdminHelper.LastIdRemoveOne(PrefixForEnum.AccountingInvoice);
                }
            }

            return(isSaved);
        }
Пример #14
0
        public ActionResult AddEditCashReceipt(CashInVm cashObj)
        {
            string isSaved = CashOutExpenseHelper.AddEditExpenseCashReceipt(cashObj);

            return(Json(isSaved));
        }
Пример #15
0
        public ActionResult AddArCashDeposit(CashInVm cashInVm)
        {
            string isSaved = CashDepositHelper.AddArCashDeposit(cashInVm);

            return(Json(isSaved));
        }
Пример #16
0
        internal static CashInVm FillCashVmForReceiptView(int receiptId)
        {
            CashInVm            cashVm = new CashInVm();
            AccountingEntities  db     = new AccountingEntities();
            EasyFreightEntities db1    = new EasyFreightEntities();
            var cashDb = db.CashOutReceipts
                         .Include("PaymentTerm")
                         .Include("Currency").Where(x => x.ReceiptId == receiptId).FirstOrDefault();

            Mapper.CreateMap <CashOutReceipt, CashInVm>()
            .ForMember(x => x.CashInReceiptChecks, y => y.Ignore())
            .ForMember(x => x.CashInReceiptInvs, y => y.Ignore())
            .ForMember(x => x.CashOutReceiptExpenses, y => y.Ignore())
            .IgnoreAllNonExisting();

            Mapper.Map(cashDb, cashVm);

            cashVm.CurrencySign    = cashDb.Currency.CurrencySign;
            cashVm.PaymentTermName = cashDb.PaymentTerm.PaymentTermEn;
            //Get customer Name
            int custId;

            if (cashVm.CarrierId != null)
            {
                custId = cashVm.CarrierId.Value;
                cashVm.CustomerName = db1.Carriers.Where(x => x.CarrierId == custId).FirstOrDefault().CarrierNameEn;
            }
            else if (cashVm.ContractorId != null)
            {
                custId = cashVm.ConsigneeId.Value;
                cashVm.CustomerName = db1.Contractors.Where(x => x.ContractorId == custId).FirstOrDefault().ContractorNameEn;
            }
            else if (cashVm.AgentId != null)
            {
                custId = cashVm.AgentId.Value;
                cashVm.CustomerName = db1.Agents.Where(x => x.AgentId == custId).FirstOrDefault().AgentNameEn;
            }

            //for bank
            if (cashVm.PaymentTermId == (byte)PaymentTermEnum.BankCashDeposit)
            {
                if (cashVm.BankAccId != null)
                {
                    int bankAccId = cashVm.BankAccId.Value;
                    var bankInfo  = db.BankAccounts.Include("Bank").Where(x => x.BankAccId == bankAccId).FirstOrDefault();
                    cashVm.BankDetailsVm = new BankDetailsVm()
                    {
                        AccountName   = bankInfo.AccountName,
                        AccountNumber = bankInfo.AccountNumber,
                        BankNameEn    = bankInfo.Bank.BankNameEn,
                        BankAddressEn = bankInfo.Bank.BankAddressEn
                    };
                }
            }

            else if (cashVm.PaymentTermId == (byte)PaymentTermEnum.Check)
            {
                CashInCheckVm cashCheckVm = new CashInCheckVm();
                var           cashCheckDb = db.CashOutReceiptChecks.Where(x => x.ReceiptId == receiptId).FirstOrDefault();
                Mapper.CreateMap <CashOutReceiptCheck, CashInCheckVm>().IgnoreAllNonExisting();
                Mapper.Map(cashCheckDb, cashCheckVm);
                cashVm.CashInReceiptChecks.Add(cashCheckVm);
            }

            //kamal
            else if (cashVm.PaymentTermId == (byte)PaymentTermEnum.CashToBank)
            {
                CashInCheckVm cashCheckVm = new CashInCheckVm();
                var           cashCheckDb = db.CashOutReceiptChecks.Where(x => x.ReceiptId == receiptId).FirstOrDefault();
                Mapper.CreateMap <CashOutReceiptCheck, CashInCheckVm>().IgnoreAllNonExisting();
                Mapper.Map(cashCheckDb, cashCheckVm);
                cashVm.CashInReceiptChecks.Add(cashCheckVm);
            }



            //Get Invoice or agent notes codes list
            if (cashVm.AgentId != null)
            {
            }
            else
            {
                var invlist = db.CashOutReceiptInvs.Include("InvoiceAP")
                              .Where(x => x.ReceiptId == receiptId).Select(x => x.InvoiceAP.InvoiceCode).ToArray();

                cashVm.InvCodeListString = string.Join(" - ", invlist);
            }

            //Check if for expenses
            var cashOutExp = db.CashOutReceiptExpenses.Include("ExpenseLib").Where(x => x.ReceiptId == receiptId).ToList();

            if (cashOutExp.Count() > 0)
            {
                List <CashOutExpense> cashOutExpenseList = new List <CashOutExpense>();
                CashOutExpense        cashOutExpense;
                foreach (var item in cashOutExp)
                {
                    cashOutExpense = new CashOutExpense();
                    cashOutExpense.CurrencySign = cashVm.CurrencySign;
                    cashOutExpense.ExpenseName  = item.ExpenseLib.ExpenseNameEn;
                    cashOutExpense.PaidAmount   = item.PaidAmount;

                    cashOutExpenseList.Add(cashOutExpense);
                }
                cashVm.CashOutReceiptExpenses = cashOutExpenseList;
            }

            cashVm.CashType = "cashout";
            //Get Created by user name


            return(cashVm);
        }
Пример #17
0
        /*
         * internal static string DeleteCashOutReceipt(int receiptId, int invID, string deleteReason)
         * {
         *
         *  string isSaved = "false";
         *
         *  if (receiptId == 0)
         *      return isSaved;
         *
         *  AccountingEntities db = new AccountingEntities();
         *
         *  CashOutReceipt cashOutDb = new CashOutReceipt();
         *  cashOutDb = db.CashOutReceipts
         *          .Where(x => x.ReceiptId == receiptId).FirstOrDefault();
         *
         *  CashOutReceiptCheck cashOutCheckDb = new CashOutReceiptCheck();
         *  cashOutCheckDb = db.CashOutReceiptChecks
         *          .Where(x => x.ReceiptId == receiptId).FirstOrDefault();
         *
         *  CashOutReceiptInv cashOutInvkDb = new CashOutReceiptInv();
         *  cashOutInvkDb = db.CashOutReceiptInvs
         *          .Where(x => x.ReceiptId == receiptId).FirstOrDefault();
         *
         *
         *
         *  int? transID = null;
         *  if (cashOutDb.TransId != null)
         *      transID = cashOutDb.TransId.Value;
         *  cashOutDb.IsDeleted = true;
         *  cashOutDb.DeleteReason = deleteReason;
         *  cashOutDb.DeletedBy = EasyFreight.DAL.AdminHelper.GetCurrentUserId();
         *  cashOutDb.TransId = null;
         *
         *
         *  if (cashOutCheckDb != null)
         *      db.CashOutReceiptChecks.Remove(cashOutCheckDb);
         *
         *  if (cashOutInvkDb != null)
         *      db.CashOutReceiptInvs.Remove(cashOutInvkDb);
         *
         *  try
         *  {
         *      db.SaveChanges();
         *
         *      if (transID.HasValue)
         *          AccountingHelper.DeleteTransaction(transID.Value);
         *
         *      List<CashInInvoiceVm> cashOutVmObj = GetCashInvList(invID);
         *
         *      if (invID != 0)
         *      {
         *          if (cashOutVmObj.Count == 0)
         *              InvoiceHelper.ChangeInvStatus(invID, InvStatusEnum.Approved, true);
         *          else
         *          {
         *
         *              InvoiceAP invDb = db.InvoiceAPs.Where(x => x.InvoiceId == invID).FirstOrDefault();
         *
         *              decimal InvoiceTotals = invDb.InvoiceTotalAPs.Sum(s => s.TotalAmount);
         *
         *              decimal? totalPaidAmount = cashOutVmObj.Sum(s => s.PaidAmount);
         *
         *              if (totalPaidAmount == null)
         *                  InvoiceHelper.ChangeInvStatus(invID, InvStatusEnum.Approved, true);
         *              else
         *              {
         *                  if (totalPaidAmount == InvoiceTotals)
         *                      InvoiceHelper.ChangeInvStatus(invID, InvStatusEnum.Paid, true);
         *                  if (totalPaidAmount < InvoiceTotals)
         *                      InvoiceHelper.ChangeInvStatus(invID, InvStatusEnum.PartiallyPaid, true);
         *              }
         *          }
         *      }
         *
         *      isSaved = "true";
         *  }
         *  catch
         *  {
         *      isSaved = "false";
         *  }
         *
         *
         *
         *  return isSaved;
         *
         * }
         */

        internal static string AddEditOpenCashReceipt(CashInVm cashInVmObj, out int savedReceiptId, bool addToTrans = true)
        {
            string isSaved = "true";

            AccountingEntities db = new AccountingEntities();



            int receiptId = cashInVmObj.ReceiptId;

            savedReceiptId = receiptId;



            CashOutReceipt cashDbObj;

            if (receiptId == 0)
            {
                cashDbObj = new CashOutReceipt();
            }
            else
            {
                cashDbObj = db.CashOutReceipts.Include("CashOutReceiptChecks")
                            .Include("CashOutReceiptInvs")
                            .Where(x => x.ReceiptId == receiptId).FirstOrDefault();

                //Delete invoice list .. will insert it again
                var invList = cashDbObj.CashOutReceiptInvs.ToList();
                foreach (var item in invList)
                {
                    cashDbObj.CashOutReceiptInvs.Remove(item);
                }

                //Delete check list .. will insert it again
                var checkList = cashDbObj.CashOutReceiptChecks.ToList();
                foreach (var item in checkList)
                {
                    cashDbObj.CashOutReceiptChecks.Remove(item);
                }
            }

            Mapper.CreateMap <CashInVm, CashOutReceipt>()
            .ForMember(x => x.CashOutReceiptInvs, y => y.Ignore())
            .ForMember(x => x.CashOutReceiptChecks, y => y.Ignore())
            .IgnoreAllNonExisting();
            Mapper.Map(cashInVmObj, cashDbObj);

            CashOutReceiptCheck cashCheckDb;

            foreach (var item in cashInVmObj.CashInReceiptChecks)
            {
                if (!string.IsNullOrEmpty(item.CheckNumber))
                {
                    cashCheckDb = new CashOutReceiptCheck();
                    Mapper.CreateMap <CashInCheckVm, CashOutReceiptCheck>().IgnoreAllNonExisting();
                    Mapper.Map(item, cashCheckDb);

                    cashDbObj.CashOutReceiptChecks.Add(cashCheckDb);
                }
            }

            using (TransactionScope transaction = new TransactionScope())
            {
                try
                {
                    if (receiptId == 0)
                    {
                        cashDbObj.ReceiptCode = AdminHelper.GeneratePrefixCode(PrefixForEnum.CashOut, true);
                        db.CashOutReceipts.Add(cashDbObj);
                    }

                    db.SaveChanges();

                    cashInVmObj.ReceiptId   = cashDbObj.ReceiptId;
                    cashInVmObj.ReceiptCode = cashDbObj.ReceiptCode;

                    savedReceiptId = cashInVmObj.ReceiptId;

                    #region Add To Transaction Table
                    if (addToTrans)
                    {
                        string creditAccountId = "";

                        if (cashInVmObj.ShipperId != null)
                        {
                            creditAccountId = AccountingChartHelper.GetAccountIdByPkAndTbName(cashInVmObj.ShipperId.Value, "Shipper", "ShipperId");
                        }
                        if (cashInVmObj.CarrierId != null)
                        {
                            creditAccountId = AccountingChartHelper.GetAccountIdByPkAndTbName(cashInVmObj.CarrierId.Value, "Carrier", "CarrierId");
                        }
                        if (cashInVmObj.ContractorId != null)
                        {
                            creditAccountId = AccountingChartHelper.GetAccountIdByPkAndTbName(cashInVmObj.ContractorId.Value, "Contractor", "ContractorId");
                        }
                        if (cashInVmObj.AgentId != null)
                        {
                            creditAccountId = AccountingChartHelper.GetAccountIdByPkAndTbName(cashInVmObj.AgentId.Value, "Agent", "AgentId");
                        }
                        if (cashInVmObj.ConsigneeId != null)
                        {
                            creditAccountId = AccountingChartHelper.GetAccountIdByPkAndTbName(cashInVmObj.ConsigneeId.Value, "Consignee", "ConsigneeId");
                        }

                        //AccTransaction accTran = new AccTransaction()
                        //{
                        //    CreateBy = AdminHelper.GetCurrentUserId(),
                        //    CreateDate = DateTime.Now,
                        //    TransactionName = "pay open balance"
                        //};

                        //AccTransactionDetail accTranDetail = new AccTransactionDetail();

                        //accTranDetail.AccountId = creditAccountId;
                        //accTranDetail.DebitAmount = cashInVmObj.ReceiptAmount.Value;
                        //accTranDetail.CurrencyId = cashInVmObj.CurrencyId;

                        //accTran.AccTransactionDetails.Add(accTranDetail);

                        //db.AccTransactions.Add(accTran);

                        //db.SaveChanges();

                        AddReceiptToTransTable(creditAccountId, cashInVmObj, true);
                    }

                    #endregion

                    transaction.Complete();
                }
                catch (DbEntityValidationException e)
                {
                    isSaved = "false " + e.Message;

                    //AdminHelper.LastIdRemoveOne(PrefixForEnum.AccountingInvoice);
                }
                catch (Exception e)
                {
                    isSaved = "false " + e.Message;
                    //AdminHelper.LastIdRemoveOne(PrefixForEnum.AccountingInvoice);
                }
            }

            return(isSaved);
        }
Пример #18
0
        internal static string AddEditExpenseCashReceipt(CashInVm cashInVmObj)
        {
            string isSaved = "true";

            AccountingEntities db    = new AccountingEntities();
            int            receiptId = cashInVmObj.ReceiptId;
            CashOutReceipt cashDbObj;

            if (receiptId == 0)
            {
                cashDbObj = new CashOutReceipt();
            }
            else
            {
                cashDbObj = db.CashOutReceipts.Include("CashOutReceiptExpenses")
                            .Where(x => x.ReceiptId == receiptId).FirstOrDefault();

                //Delete expenses list .. will insert it again
                var invList = cashDbObj.CashOutReceiptExpenses.ToList();
                foreach (var item in invList)
                {
                    cashDbObj.CashOutReceiptExpenses.Remove(item);
                }
            }

            Mapper.CreateMap <CashInVm, CashOutReceipt>()
            .ForMember(x => x.CashOutReceiptInvs, y => y.Ignore())
            .ForMember(x => x.CashOutReceiptChecks, y => y.Ignore());

            Mapper.CreateMap <CashOutExpense, CashOutReceiptExpense>();
            Mapper.Map(cashInVmObj, cashDbObj);

            using (TransactionScope transaction = new TransactionScope())
            {
                try
                {
                    if (receiptId == 0)
                    {
                        cashDbObj.ReceiptCode = AdminHelper.GeneratePrefixCode(PrefixForEnum.CashOut, true);
                        db.CashOutReceipts.Add(cashDbObj);
                    }

                    db.SaveChanges();

                    cashInVmObj.ReceiptId   = cashDbObj.ReceiptId;
                    cashInVmObj.ReceiptCode = cashDbObj.ReceiptCode;

                    AddExpenseReceiptToTrans(cashInVmObj);

                    transaction.Complete();
                }
                catch (DbEntityValidationException e)
                {
                    isSaved = "false " + e.Message;

                    //AdminHelper.LastIdRemoveOne(PrefixForEnum.AccountingInvoice);
                }
                catch (Exception e)
                {
                    isSaved = "false " + e.Message;
                    //AdminHelper.LastIdRemoveOne(PrefixForEnum.AccountingInvoice);
                }
            }

            return(isSaved);
        }
Пример #19
0
        internal static void AddReceiptToTransTable(string debitAccountId, CashInVm cashInVmObj, bool IsOpenBalancePayment = false)
        {
            //Check Payment type
            string creditAccId = "";
            byte   paymentType = cashInVmObj.PaymentTermId;

            switch (paymentType)
            {
            case 1:     //cash
                creditAccId = AccountingChartHelper.GetAccountIdByPkAndTbName(cashInVmObj.CurrencyId, "Currency", "CurrencyId");
                if (string.IsNullOrEmpty(creditAccId))
                {
                    string parentAccountId = ((int)AccountingChartEnum.Cash).ToString();
                    //Add new accountId to the chart
                    creditAccId = AccountingChartHelper
                                  .AddAccountToChart(cashInVmObj.CurrencySign, cashInVmObj.CurrencySign, parentAccountId);
                    AccountingChartHelper.AddAccountIdToObj(creditAccId, "Currency", cashInVmObj.CurrencyId, "CurrencyId");
                }
                break;

            case 3:     // Bank Cash Deposit
                int bankAccountId = cashInVmObj.BankAccId.Value;
                int bankId        = cashInVmObj.BankId.Value;
                creditAccId = AccountingChartHelper.GetAccountIdByPkAndTbName(bankAccountId, "BankAccount", "BankAccId");
                if (string.IsNullOrEmpty(creditAccId))
                {
                    creditAccId = AccountingChartHelper.AddBankAccountToChart(bankId, bankAccountId);
                }
                break;

            case 4:     //Check
                creditAccId = ((int)AccountingChartEnum.NotesPayable).ToString();
                break;

            default:
                break;
            }

            AccTransactionVm accTrans = new AccTransactionVm()
            {
                CreateDate        = DateTime.Now,
                CreateBy          = EasyFreight.DAL.AdminHelper.GetCurrentUserId(),
                TransactionName   = "Cash Out Receipt Number " + cashInVmObj.ReceiptCode + (IsOpenBalancePayment ? " pay open balance " : ""),
                TransactionNameAr = "ايصال صرف نقدية رقم " + cashInVmObj.ReceiptCode
            };

            AccTransactionDetailVm accTransDetDebit = new AccTransactionDetailVm()
            {
                AccountId    = debitAccountId,
                CreditAmount = 0,
                CurrencyId   = cashInVmObj.CurrencyId,
                DebitAmount  = cashInVmObj.ReceiptAmount.Value
            };

            accTrans.AccTransactionDetails.Add(accTransDetDebit);

            AccTransactionDetailVm accTransDetCredit = new AccTransactionDetailVm()
            {
                AccountId    = creditAccId,
                CreditAmount = cashInVmObj.ReceiptAmount.Value,
                CurrencyId   = cashInVmObj.CurrencyId,
                DebitAmount  = 0
            };

            accTrans.AccTransactionDetails.Add(accTransDetCredit);


            int transId = AccountingHelper.AddTransaction(accTrans);

            //Update TransId in invoice table
            AccountingChartHelper.AddTransIdToObj(transId, "CashOutReceipt", cashInVmObj.ReceiptId, "ReceiptId");
        }