コード例 #1
0
        /// <summary>
        /// Add Agent To The Accounting chart ..
        /// If note type = 1 "Debit" add under A/R .. else 2 "Credit" addd under A/P
        /// </summary>
        /// <param name="agentId">Agent Id</param>
        /// <param name="agentType">Agent Note Type</param>
        /// <returns></returns>
        public static string AddAgentToChart(int agentId, byte agentType)
        {
            string parentAccountId = "", accountId;

            if (agentType == 1) //Debit Note .. A/R
            {
                parentAccountId = ((int)AccountingChartEnum.Agents).ToString();
            }
            else
            {
                parentAccountId = ((int)AccountingChartEnum.Agents).ToString();
            }

            AgentVm agentObj  = AgentHelper.GetAgentInfo(agentId);
            string  accNameEn = agentObj.AgentNameEn;
            string  accNameAr = string.IsNullOrEmpty(agentObj.AgentNameAr) ? agentObj.AgentNameEn : agentObj.AgentNameAr;

            //Add new accountId to the chart
            accountId = AccountingChartHelper
                        .AddAccountToChart(accNameEn, accNameEn, parentAccountId);

            AccountingChartHelper.AddAccountIdToObj(accountId, "Agent", agentId, "AgentId");

            return(accountId);
        }
コード例 #2
0
ファイル: AgentNoteHelper.cs プロジェクト: amorsi/EasyFreight
        private static void AddAgentToTransTable(string agentAccId, AgentNoteVm agentNoteVm)
        {
            AccTransactionVm accTrans = new AccTransactionVm()
            {
                CreateDate        = DateTime.Now,
                CreateBy          = EasyFreight.DAL.AdminHelper.GetCurrentUserId(),
                TransactionName   = "Agent Note Number " + agentNoteVm.AgentNoteCode,
                TransactionNameAr = "فاتورة agent رقم " + agentNoteVm.AgentNoteCode
            };

            AccTransactionDetailVm accTransDetDebit;
            AccTransactionDetailVm accTransDetCredit;

            if (agentNoteVm.AgentNoteType == 1) // Debit .. A/R deb-- SoldServices cr .. same like invoice
            {
                accTransDetDebit = new AccTransactionDetailVm()
                {
                    AccountId    = agentAccId,
                    CreditAmount = 0,
                    CurrencyId   = agentNoteVm.CurrencyId,
                    DebitAmount  = agentNoteVm.TotalAmount
                };
                accTrans.AccTransactionDetails.Add(accTransDetDebit);

                accTransDetCredit = new AccTransactionDetailVm()
                {
                    AccountId    = ((int)AccountingChartEnum.SoldServices).ToString(),
                    CreditAmount = agentNoteVm.TotalAmount,
                    CurrencyId   = agentNoteVm.CurrencyId,
                    DebitAmount  = 0
                };
                accTrans.AccTransactionDetails.Add(accTransDetCredit);
            }
            else //Credit not .. CarrierCostOfSales deb -- A/P cr
            {
                accTransDetDebit = new AccTransactionDetailVm()
                {
                    AccountId    = ((int)AccountingChartEnum.CarrierCostOfSales).ToString(),
                    CreditAmount = 0,
                    CurrencyId   = agentNoteVm.CurrencyId,
                    DebitAmount  = agentNoteVm.TotalAmount
                };
                accTrans.AccTransactionDetails.Add(accTransDetDebit);

                accTransDetCredit = new AccTransactionDetailVm()
                {
                    AccountId    = agentAccId,
                    CreditAmount = agentNoteVm.TotalAmount,
                    CurrencyId   = agentNoteVm.CurrencyId,
                    DebitAmount  = 0
                };
                accTrans.AccTransactionDetails.Add(accTransDetCredit);
            }

            int transId = AccountingHelper.AddTransaction(accTrans);

            //Update TransId in invoice table
            AccountingChartHelper.AddTransIdToObj(transId, "AgentNote", agentNoteVm.AgentNoteId, "AgentNoteId");
        }
コード例 #3
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");
        }
コード例 #4
0
        private static void AddAPInvToTransTable(string creditAccountId, InvoiceVm invoiceVm)
        {
            string debitAccId = "";
            byte   invFor     = invoiceVm.InvoiceType;

            if (invFor == 1) //carrier
            {
                debitAccId = ((int)AccountingChartEnum.CarrierCostOfSales).ToString();
            }
            else if (invFor == 2) //Contractor
            {
                debitAccId = ((int)AccountingChartEnum.TruckingCostOfSales).ToString();
            }
            else if (invFor == 3) //Custom Clearance
            {
                debitAccId = ((int)AccountingChartEnum.CCCostOfSales).ToString();
            }


            AccTransactionVm accTrans = new AccTransactionVm()
            {
                CreateDate        = DateTime.Now,
                CreateBy          = EasyFreight.DAL.AdminHelper.GetCurrentUserId(),
                TransactionName   = "Invoice Number " + invoiceVm.InvoiceCode,
                TransactionNameAr = "فاتورة رقم " + invoiceVm.InvoiceCode
            };


            AccTransactionDetailVm accTransDetDebit = new AccTransactionDetailVm()
            {
                AccountId    = debitAccId,
                CreditAmount = 0,
                CurrencyId   = invoiceVm.InvCurrencyId,
                DebitAmount  = invoiceVm.InvoiceTotals.FirstOrDefault().TotalAmount
            };

            accTrans.AccTransactionDetails.Add(accTransDetDebit);

            AccTransactionDetailVm accTransDetCredit = new AccTransactionDetailVm()
            {
                AccountId    = creditAccountId,
                CreditAmount = invoiceVm.InvoiceTotals.FirstOrDefault().TotalAmount,
                CurrencyId   = invoiceVm.InvCurrencyId,
                DebitAmount  = 0
            };

            accTrans.AccTransactionDetails.Add(accTransDetCredit);

            int transId = AccountingHelper.AddTransaction(accTrans);

            //Update TransId in invoice table
            AccountingChartHelper.AddTransIdToObj(transId, "InvoiceAP", invoiceVm.InvoiceId, "InvoiceId");
        }
コード例 #5
0
        public static string AddEditExpense(int expenseId, string expenseNameEn, string expenseNameAr)
        {
            string             isSaved = "";
            AccountingEntities db      = new AccountingEntities();
            ExpenseLib         expenseLibDb;

            if (expenseId != 0)
            {
                expenseLibDb = db.ExpenseLibs.Where(x => x.ExpenseId == expenseId).FirstOrDefault();
            }
            else
            {
                expenseLibDb = new ExpenseLib();
            }

            expenseLibDb.ExpenseNameEn = expenseNameEn;
            expenseLibDb.ExpenseNameAr = expenseNameAr;

            if (expenseId == 0)
            {
                db.ExpenseLibs.Add(expenseLibDb);
            }

            using (TransactionScope transaction = new TransactionScope())
            {
                try
                {
                    db.SaveChanges();
                    if (expenseId == 0)
                    {
                        expenseId = expenseLibDb.ExpenseId;
                        string parentAccountId = ((int)AccountingChartEnum.GeneralAndAdministrativeExpenses).ToString();
                        string accountId       = AccountingChartHelper.AddAccountToChart(expenseNameEn, expenseNameAr, parentAccountId);
                        AccountingChartHelper.AddAccountIdToObj(accountId, "ExpenseLib", expenseId, "ExpenseId");

                        isSaved = expenseId.ToString();
                    }

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

            return(isSaved);
        }
コード例 #6
0
        public static string AddCashToChart(int currencyId)
        {
            string             parentAccountId = "", accountId;
            AccountingEntities db = new AccountingEntities();
            var currObj = db.CurrencyAccs.Where(x => x.CurrencyId == currencyId).FirstOrDefault();

            parentAccountId = ((int)AccountingChartEnum.Cash).ToString();
            //Add new accountId to the chart
            accountId = AccountingChartHelper
                        .AddAccountToChart(currObj.CurrencySign, currObj.CurrencySign, parentAccountId);
            AccountingChartHelper.AddAccountIdToObj(accountId, "Currency", currObj.CurrencyId, "CurrencyId");

            return(accountId);
        }
コード例 #7
0
        private static void AddReceiptToTransTableTransfer(CashBankTransferVm currVm, int cashInReceiptId, int cashOutReceiptId)
        {
            string creditAccId, debitAccId;

            creditAccId = currVm.IsCashToBank ?
                          AccountingChartHelper.GetAccountIdByPkAndTbName(currVm.CurrentCurrencyId, "Currency", "CurrencyId") :
                          currVm.AccountId;
            debitAccId = currVm.IsCashToBank ? currVm.AccountId :
                         AccountingChartHelper.GetAccountIdByPkAndTbName(currVm.CurrentCurrencyId, "Currency", "CurrencyId");

            decimal amount = currVm.CurrentAmount;



            AccTransactionVm accTrans = new AccTransactionVm()
            {
                CreateDate        = DateTime.Now,
                CreateBy          = CurrentUserId,
                TransactionName   = currVm.IsCashToBank ? "Cash to bank transfer" : "Bank to cash transfer",
                TransactionNameAr = currVm.IsCashToBank ? "تحويل من الخزينة الى البنك" : "تحويل من البنك للخزينة"
            };

            AccTransactionDetailVm accTransDetDebit = new AccTransactionDetailVm()
            {
                AccountId    = debitAccId,
                CreditAmount = 0,
                CurrencyId   = currVm.CurrentCurrencyId,
                DebitAmount  = amount
            };

            accTrans.AccTransactionDetails.Add(accTransDetDebit);

            AccTransactionDetailVm accTransDetCredit = new AccTransactionDetailVm()
            {
                AccountId    = creditAccId,
                CreditAmount = currVm.CurrentAmount,
                CurrencyId   = currVm.CurrentCurrencyId,
                DebitAmount  = 0
            };

            accTrans.AccTransactionDetails.Add(accTransDetCredit);

            int transId = AccountingHelper.AddTransaction(accTrans);

            //Update TransId in invoice table
            AccountingChartHelper.AddTransIdToObj(transId, "CashInReceipt", cashInReceiptId, "ReceiptId");

            AccountingChartHelper.AddTransIdToObj(transId, "CashOutReceipt", cashOutReceiptId, "ReceiptId");
        }
コード例 #8
0
        public static string AddShipperToChart(int shipeprId)
        {
            string parentAccountId = "", accountId;

            parentAccountId = ((int)AccountingChartEnum.AccountsRecievable).ToString();
            var carrVm = ShipperHelper.GetShipperInfo(shipeprId);

            string accNameEn = carrVm.ShipperNameEn;
            string accNameAr = string.IsNullOrEmpty(carrVm.ShipperNameAr) ? carrVm.ShipperNameAr : carrVm.ShipperNameEn;

            //Add new accountId to the chart
            accountId = AccountingChartHelper
                        .AddAccountToChart(accNameEn, accNameEn, parentAccountId);

            AccountingChartHelper.AddAccountIdToObj(accountId, "Shipper", shipeprId, "ShipperId");

            return(accountId);
        }
コード例 #9
0
        public static string AddConsigneeToChart(int consigneeId)
        {
            string parentAccountId = "", accountId;

            parentAccountId = ((int)AccountingChartEnum.AccountsRecievable).ToString();
            var carrVm = ConsigneeHelper.GetConsigneeInfo(consigneeId);

            string accNameEn = carrVm.ConsigneeNameEn;
            string accNameAr = string.IsNullOrEmpty(carrVm.ConsigneeNameAr) ? carrVm.ConsigneeNameEn : carrVm.ConsigneeNameAr;

            //Add new accountId to the chart
            accountId = AccountingChartHelper
                        .AddAccountToChart(accNameEn, accNameEn, parentAccountId);

            AccountingChartHelper.AddAccountIdToObj(accountId, "Consignee", consigneeId, "ConsigneeId");

            return(accountId);
        }
コード例 #10
0
        public static string AddContractorToChart(int contrId)
        {
            string parentAccountId = "", accountId;

            parentAccountId = ((int)AccountingChartEnum.APContractors).ToString();
            var carrVm = ContractorHelper.GetContractorInfo(contrId);

            string accNameEn = carrVm.ContractorNameEn;
            string accNameAr = string.IsNullOrEmpty(carrVm.ContractorNameAr) ? carrVm.ContractorNameEn : carrVm.ContractorNameAr;

            //Add new accountId to the chart
            accountId = AccountingChartHelper
                        .AddAccountToChart(accNameEn, accNameEn, parentAccountId);

            AccountingChartHelper.AddAccountIdToObj(accountId, "Contractor", contrId, "ContractorId");

            return(accountId);
        }
コード例 #11
0
        private static void AddReceiptToTransTable(CurrencyExchangeVm currVm, int cashInReceiptId, int cashOutReceiptId)
        {
            string creditAccId = AccountingChartHelper.GetAccountIdByPkAndTbName(currVm.CurrentCurrencyId, "Currency", "CurrencyId");
            string debitAccId  = AccountingChartHelper.GetAccountIdByPkAndTbName(currVm.NewCurrencyId, "Currency", "CurrencyId");

            decimal creditAmount = currVm.CurrentAmount;
            decimal debitAmount  = currVm.NewAmount;


            AccTransactionVm accTrans = new AccTransactionVm()
            {
                CreateDate        = DateTime.Now,
                CreateBy          = CurrentUserId,
                TransactionName   = "Currency Exchange",
                TransactionNameAr = "تحويل عملة"
            };

            AccTransactionDetailVm accTransDetDebit = new AccTransactionDetailVm()
            {
                AccountId    = debitAccId,
                CreditAmount = 0,
                CurrencyId   = currVm.NewCurrencyId,
                DebitAmount  = debitAmount
            };

            accTrans.AccTransactionDetails.Add(accTransDetDebit);

            AccTransactionDetailVm accTransDetCredit = new AccTransactionDetailVm()
            {
                AccountId    = creditAccId,
                CreditAmount = currVm.CurrentAmount,
                CurrencyId   = currVm.CurrentCurrencyId,
                DebitAmount  = 0
            };

            accTrans.AccTransactionDetails.Add(accTransDetCredit);

            int transId = AccountingHelper.AddTransaction(accTrans);

            //Update TransId in invoice table
            AccountingChartHelper.AddTransIdToObj(transId, "CashInReceipt", cashInReceiptId, "ReceiptId");

            AccountingChartHelper.AddTransIdToObj(transId, "CashOutReceipt", cashOutReceiptId, "ReceiptId");
        }
コード例 #12
0
        public static string AddCCCashDepositToChart(int operationId)
        {
            string             parentAccountId = "", accountId;
            OperationsEntities db = new OperationsEntities();
            var    operationObj = db.Operations.Where(x => x.OperationId == operationId).FirstOrDefault();
            string operationCode = operationObj.OperationCode;
            string accNameEn = "CC Cash Deposit For Operation " + operationCode;
            string accNameAr = "عهدة تخليص جمركى للعملية " + operationCode;

            parentAccountId = ((int)AccountingChartEnum.CashDepositTemp).ToString();

            //Add new accountId to the chart
            accountId = AccountingChartHelper
                        .AddAccountToChart(accNameEn, accNameAr, parentAccountId);
            operationObj.CCCashDepAccountId = accountId;
            db.SaveChanges();

            return(accountId);
        }
コード例 #13
0
        internal static string PayCheck(int receiptId)
        {
            string             isCollected = "true";
            AccountingEntities db          = new AccountingEntities();
            var receiptData = db.CashOutReceipts.Where(x => x.ReceiptId == receiptId)
                              .Select(x => new { x.ReceiptAmount, x.CurrencyId, x.ReceiptCode, x.BankAccId })
                              .FirstOrDefault();
            var receiptCheck = db.CashOutReceiptChecks.Where(x => x.ReceiptId == receiptId).FirstOrDefault();

            receiptCheck.IsCollected = true;
            receiptCheck.CollectDate = DateTime.Now;
            receiptCheck.CollectBy   = AdminHelper.GetCurrentUserId();

            using (TransactionScope transaction = new TransactionScope())
            {
                try
                {
                    db.SaveChanges();

                    //Add Transactions
                    string creditAccId = AccountingChartHelper.GetAccountIdByPkAndTbName(receiptData.BankAccId.Value, "BankAccount", "BankAccId");
                    string debitAccId  = ((int)AccountingChartEnum.NotesPayable).ToString();
                    string comment     = "Pay check number " + receiptCheck.CheckNumber + " received by cash receipt code " + receiptData.ReceiptCode;
                    string commentAr   = "دفع الشيك رقم " + receiptCheck.CheckNumber + " المستلم بموجب ايصال استلام رقم " + receiptData.ReceiptCode;
                    AddCheckActionToTransTable(debitAccId, creditAccId, receiptData.ReceiptAmount,
                                               receiptData.CurrencyId.Value, comment, commentAr, receiptId, "CashOutReceiptCheck");

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


                return(isCollected);
            }
        }
コード例 #14
0
        /// <summary>
        /// Add Bank Account to The Accounting chart
        /// </summary>
        /// <param name="bankId">Bank Id .. optional .. if 0 .. will get it in code</param>
        /// <param name="bankAccountId">Bank Account Id</param>
        /// <returns>The Accounting chart Account Number</returns>
        public static string AddBankAccountToChart(int bankId, int bankAccountId)
        {
            string debitAccId;
            string parentAccountId = ((int)AccountingChartEnum.CashInBanks).ToString();

            if (bankId == 0)
            {
                AccountingEntities db = new AccountingEntities();
                bankId = db.BankAccounts.Where(x => x.BankAccId == bankAccountId).FirstOrDefault().BankId;
            }

            BankVm        bankInfo    = BankHelper.GetBankInfo(bankId);
            BankAccountVm bankAccount = bankInfo.BankAccounts.Where(x => x.BankAccId == bankAccountId).FirstOrDefault();
            string        accNameEn   = bankAccount.AccountName + " (" + bankAccount.AccountNumber + ")";

            //Add new accountId to the chart
            debitAccId = AccountingChartHelper
                         .AddAccountToChart(accNameEn, accNameEn, parentAccountId);

            AccountingChartHelper.AddAccountIdToObj(debitAccId, "BankAccount", bankAccountId, "BankAccId");

            return(debitAccId);
        }
コード例 #15
0
        internal static string GetTaxDepositAccountId(byte orderFrom, int?shipperId, int?consigneeId)
        {
            string accountNameEn = "", accountNameAr = "", accountId = "";

            if (orderFrom == 1) //export
            {
                var shipper = ShipperHelper.GetShipperInfo(shipperId.Value);
                accountId = shipper.TaxDepositAccountId;
                if (string.IsNullOrEmpty(accountId))
                {
                    accountNameEn = shipper.ShipperNameEn + " Tax Deposit";
                    accountNameAr = string.IsNullOrEmpty(shipper.ShipperNameAr) ? accountNameEn  : shipper.ShipperNameAr + " ضريبة الخصم ";
                    string parentAccountId = ((int)AccountingChartEnum.TaxDepositDebit).ToString();
                    //Add new accountId to the chart
                    accountId = AccountingChartHelper.AddAccountToChart(accountNameEn, accountNameAr, parentAccountId);
                    //update AccountId column shipper table
                    AccountingChartHelper.AddAccountIdToObj(accountId, "shipper", shipper.ShipperId, "ShipperId", "TaxDepositAccountId");
                }
            }
            else if (orderFrom == 2) //import
            {
                var consignee = ConsigneeHelper.GetConsigneeInfo(consigneeId.Value);
                accountId = consignee.TaxDepositAccountId;
                if (string.IsNullOrEmpty(accountId))
                {
                    accountNameEn = consignee.ConsigneeNameEn + " Tax Deposit";
                    accountNameAr = string.IsNullOrEmpty(consignee.ConsigneeNameAr) ? accountNameEn + " Tax Deposit" : consignee.ConsigneeNameAr + " ضريبة الخصم ";
                    string parentAccountId = ((int)AccountingChartEnum.TaxDepositDebit).ToString();
                    //Add new accountId to the chart
                    accountId = AccountingChartHelper.AddAccountToChart(accountNameEn, accountNameAr, parentAccountId);
                    //update AccountId column shipper table
                    AccountingChartHelper.AddAccountIdToObj(accountId, "consignee", consignee.ConsigneeId, "ConsigneeId", "TaxDepositAccountId");
                }
            }

            return(accountId);
        }
コード例 #16
0
        private static void AddCheckActionToTransTable(string debitAccId, string creditAccId, decimal amount, int currencyId,
                                                       string comment, string commentAr, int receiptId, string tbName)
        {
            AccTransactionVm accTrans = new AccTransactionVm()
            {
                CreateDate        = DateTime.Now,
                CreateBy          = AdminHelper.GetCurrentUserId(),
                TransactionName   = comment,
                TransactionNameAr = commentAr
            };

            AccTransactionDetailVm accTransDetDebit = new AccTransactionDetailVm()
            {
                AccountId    = debitAccId,
                CreditAmount = 0,
                CurrencyId   = currencyId,
                DebitAmount  = amount
            };

            accTrans.AccTransactionDetails.Add(accTransDetDebit);

            AccTransactionDetailVm accTransDetCredit = new AccTransactionDetailVm()
            {
                AccountId    = creditAccId,
                CreditAmount = amount,
                CurrencyId   = currencyId,
                DebitAmount  = 0
            };

            accTrans.AccTransactionDetails.Add(accTransDetCredit);


            int transId = AccountingHelper.AddTransaction(accTrans);

            //Update TransId in invoice table
            AccountingChartHelper.AddTransIdToObj(transId, tbName, receiptId, "ReceiptId");
        }
コード例 #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
ファイル: AgentNoteHelper.cs プロジェクト: amorsi/EasyFreight
        internal static string AddEditAgentNote(AgentNoteVm agentNoteVm)
        {
            string             isSaved = "true";
            AccountingEntities db      = new AccountingEntities();
            AgentNote          agNoteDb;
            int agNoteId = agentNoteVm.AgentNoteId;

            if (agNoteId == 0)
            {
                agNoteDb = new AgentNote();
            }
            else
            {
                agNoteDb = db.AgentNotes.Where(x => x.AgentNoteId == agNoteId).FirstOrDefault();
            }

            Mapper.CreateMap <AgentNoteVm, AgentNote>()
            .ForMember(x => x.AgentNoteDetails, y => y.Ignore())
            .IgnoreAllNonExisting();

            Mapper.Map(agentNoteVm, agNoteDb);

            AgentNoteDetail agNoteDetail;

            Mapper.CreateMap <AgentNoteDetailVm, AgentNoteDetail>().IgnoreAllNonExisting();

            foreach (var item in agentNoteVm.AgentNoteDetails)
            {
                if (item.IsSelected)
                {
                    agNoteDetail = new AgentNoteDetail();
                    Mapper.Map(item, agNoteDetail);
                    agNoteDb.AgentNoteDetails.Add(agNoteDetail);
                }
            }

            using (TransactionScope transaction = new TransactionScope())
            {
                try
                {
                    string agentAccId = AccountingChartHelper.GetAccountIdByPkAndTbName(agNoteDb.AgentId, "Agent", "AgentId");
                    if (string.IsNullOrEmpty(agentAccId))
                    {
                        agentAccId = AccountingChartHelper.AddAgentToChart(agNoteDb.AgentId, agNoteDb.AgentNoteType);
                    }


                    if (agNoteId == 0)
                    {
                        agNoteDb.AgentNoteCode = AdminHelper.GeneratePrefixCode(PrefixForEnum.AgentNote, true);
                        db.AgentNotes.Add(agNoteDb);
                    }

                    db.SaveChanges();

                    if (agNoteId == 0)
                    {
                        agentNoteVm.AgentId       = agNoteDb.AgentId;
                        agentNoteVm.AgentNoteCode = agNoteDb.AgentNoteCode;
                        //Add invoice to accounting transactions table
                        AddAgentToTransTable(agentAccId, agentNoteVm);


                        OperationHelper.ChangeOperationStatus(agentNoteVm.OperationId, (byte)StatusEnum.InvoiceIssued);
                    }
                    isSaved = "true" + agNoteDb.AgentNoteId;
                    transaction.Complete();
                }
                catch (DbEntityValidationException e)
                {
                    isSaved = "false " + e.Message;
                    AdminHelper.LastIdRemoveOne(PrefixForEnum.AgentNote);
                }
                catch (Exception e)
                {
                    isSaved = "false " + e.Message;
                    AdminHelper.LastIdRemoveOne(PrefixForEnum.AgentNote);
                }
            }


            return(isSaved);
        }
コード例 #19
0
        /// <summary>
        /// Add Invoice amounts to the accounting transactions table
        /// </summary>
        /// <param name="clientAccId">shipeer/ consignee account Id</param>
        /// <param name="invVm">Invoice Vm obj</param>
        private static void AddInvToTransTable(string clientAccId, InvoiceVm invoiceVm)
        {
            AccTransactionVm accTrans = new AccTransactionVm()
            {
                CreateDate        = DateTime.Now,
                CreateBy          = EasyFreight.DAL.AdminHelper.GetCurrentUserId(),
                TransactionName   = "Invoice Number " + invoiceVm.InvoiceCode,
                TransactionNameAr = "فاتورة رقم " + invoiceVm.InvoiceCode
            };

            //Get Cost list
            //  var operCostObj = AccountingHelper.GetOperationCost(invoiceVm.OperationId, invoiceVm.HouseBillId);

            var operCostList      = invoiceVm.InvoiceDetails;
            var operCostTotalList = invoiceVm.InvoiceTotals;

            //GetHbInvTotal(invoiceVm.InvoiceType, ref operCostList, ref operCostTotalList);

            //Tax Deposit AccountId
            string taxDepositAccId = "";

            if (operCostTotalList.FirstOrDefault().TaxDepositAmount != 0)
            {
                taxDepositAccId = GetTaxDepositAccountId(invoiceVm.OrderFrom, invoiceVm.ShipperId, invoiceVm.ConsigneeId);
            }

            AccTransactionDetailVm accTransDetDebit;
            AccTransactionDetailVm accTransDetCredit;
            AccTransactionDetailVm accTransDetVAT;

            foreach (var item in operCostTotalList)
            {
                accTransDetDebit             = new AccTransactionDetailVm();
                accTransDetDebit.AccountId   = clientAccId;
                accTransDetDebit.DebitAmount = item.TotalAmount;
                accTransDetDebit.CurrencyId  = item.CurrencyId;


                accTransDetCredit              = new AccTransactionDetailVm();
                accTransDetCredit.AccountId    = ((int)AccountingChartEnum.SoldServices).ToString();
                accTransDetCredit.CreditAmount = item.TotalBeforeTax;
                accTransDetCredit.CurrencyId   = item.CurrencyId;

                accTrans.AccTransactionDetails.Add(accTransDetDebit);
                accTrans.AccTransactionDetails.Add(accTransDetCredit);

                if (item.VatTaxAmount != 0)
                {
                    accTransDetVAT              = new AccTransactionDetailVm();
                    accTransDetVAT.AccountId    = ((int)AccountingChartEnum.VAT).ToString();
                    accTransDetVAT.CreditAmount = item.VatTaxAmount;
                    accTransDetVAT.CurrencyId   = item.CurrencyId;
                    accTrans.AccTransactionDetails.Add(accTransDetVAT);
                }

                if (!string.IsNullOrEmpty(taxDepositAccId))
                {
                    AccTransactionDetailVm accTransTaxDepDebit = new AccTransactionDetailVm();
                    accTransTaxDepDebit.AccountId   = taxDepositAccId;
                    accTransTaxDepDebit.DebitAmount = item.TaxDepositAmount;
                    accTransTaxDepDebit.CurrencyId  = item.CurrencyId;
                    accTrans.AccTransactionDetails.Add(accTransTaxDepDebit);
                }
            }

            int transId = AccountingHelper.AddTransaction(accTrans);

            //Update TransId in invoice table
            AccountingChartHelper.AddTransIdToObj(transId, "Invoice", invoiceVm.InvoiceId, "InvoiceId");
        }
コード例 #20
0
        public static OpenBalanceVm GetOpenBalanceInfo(string tbName, int libId, string pkName)
        {
            OpenBalanceVm balanceVm = new OpenBalanceVm();

            balanceVm.TbName        = tbName;
            balanceVm.LibItemId     = libId;
            balanceVm.CreateDate    = DateTime.Now;
            balanceVm.IsCreditAgent = false;

            string accountId = "";

            accountId = AccountingChartHelper.GetAccountIdByPkAndTbName(libId, tbName, pkName);

            AccountingEntities db = new AccountingEntities();

            //Get Transaction details for open balance
            var accTanDet = db.AccTransactionDetails.Include("AccTransaction")
                            .Where(x => x.AccountId == accountId && x.AccTransaction.TransactionName == "open balance").ToList();

            if (accTanDet.Count > 0)
            {
                balanceVm.TransId = accTanDet.FirstOrDefault().TransId;
            }

            int?bankAccCurrId = null;

            //For bank Acc will get only the currency for this bank
            if (tbName == "BankAccount")
            {
                bankAccCurrId = db.BankAccounts.Where(x => x.BankAccId == libId).FirstOrDefault().CurrencyId;
            }
            //Get Currency List
            // Dictionary<int, string> currList = ListCommonHelper.GetCurrencyList();
            List <CurrencyAcc> currList;

            if (bankAccCurrId == null)
            {
                currList = db.CurrencyAccs.ToList();
            }
            else
            {
                currList = db.CurrencyAccs.Where(x => x.CurrencyId == bankAccCurrId).ToList();
            }
            OpenBalanceDetailVm openBalanceDet;

            foreach (var item in currList)
            {
                openBalanceDet                   = new OpenBalanceDetailVm();
                openBalanceDet.CurrencyId        = item.CurrencyId;
                openBalanceDet.CurrencySign      = item.CurrencySign;
                openBalanceDet.CurrencyAccountId = item.AccountId;
                openBalanceDet.LibItemId         = libId;
                //check if has open balance for this currency
                var openAccTran = accTanDet.Where(x => x.CurrencyId == item.CurrencyId).FirstOrDefault();
                if (openAccTran != null)
                {
                    openBalanceDet.TransDetailId = openAccTran.TransDetailId;
                    openBalanceDet.CreditAmount  = openAccTran.CreditAmount;
                    openBalanceDet.DebitAmount   = openAccTran.DebitAmount;
                    openBalanceDet.TransId       = openAccTran.TransId;
                }

                balanceVm.OpenBalanceDetails.Add(openBalanceDet);
            }

            return(balanceVm);
        }
コード例 #21
0
        internal static string AddEditInvoice(InvoiceVm invoiceVm)
        {
            string isSaved = "true";

            AccountingEntities db = new AccountingEntities();
            int  invoiceId        = invoiceVm.InvoiceId;
            byte invFor           = invoiceVm.InvoiceType;
            //  int hbId = invoiceVm.HouseBillId;

            InvoiceAP invDb;

            if (invoiceId == 0)
            {
                invDb = new InvoiceAP();
            }
            else
            {
                invDb = db.InvoiceAPs.Include("InvoiceDetailAPs").Include("InvoiceTotalAPs")
                        .Where(x => x.InvoiceId == invoiceId).FirstOrDefault();
                //Delete Invoice details and totals .. will insert it again
                var invDbTotals  = invDb.InvoiceTotalAPs;
                var invDbDetails = invDb.InvoiceDetailAPs;
                foreach (var item in invDbDetails)
                {
                    invDb.InvoiceDetailAPs.Remove(item);
                }
                foreach (var item in invDbTotals)
                {
                    invDb.InvoiceTotalAPs.Remove(item);
                }
            }


            Mapper.CreateMap <InvoiceVm, InvoiceAP>()
            .ForMember(x => x.InvoiceTotalAPs, y => y.Ignore())
            .ForMember(x => x.InvoiceDetailAPs, y => y.Ignore())
            .IgnoreAllNonExisting();
            Mapper.Map(invoiceVm, invDb);

            InvoiceDetailAP invDetail;

            Mapper.CreateMap <InvoiceDetailVm, InvoiceDetailAP>().IgnoreAllNonExisting();
            foreach (var item in invoiceVm.InvoiceDetails)
            {
                if (item.IsSelected == true)
                {
                    invDetail = new InvoiceDetailAP();
                    Mapper.Map(item, invDetail);
                    invDb.InvoiceDetailAPs.Add(invDetail);
                }
            }

            InvoiceTotalAP invTotalDb;

            foreach (var item in invoiceVm.InvoiceTotals)
            {
                invTotalDb = new InvoiceTotalAP()
                {
                    CurrencyId   = item.CurrencyId,
                    TotalAmount  = item.TotalAmount,
                    CurrencySign = item.CurrencySign
                };

                invDb.InvoiceTotalAPs.Add(invTotalDb);
            }



            using (TransactionScope transaction = new TransactionScope())
            {
                try
                {
                    //Add shipper or consignee to accounting chart
                    string creditAccountId = "";
                    if (invFor == 1) //carrier
                    {
                        creditAccountId = AccountingChartHelper
                                          .GetAccountIdByPkAndTbName(invoiceVm.CarrierId.Value, "Carrier", "CarrierId");
                        if (string.IsNullOrEmpty(creditAccountId))
                        {
                            creditAccountId = AccountingChartHelper.AddCarrierToChart(invoiceVm.CarrierId.Value);
                        }
                    }
                    else if (invFor == 2) //Contractor
                    {
                        creditAccountId = AccountingChartHelper
                                          .GetAccountIdByPkAndTbName(invoiceVm.ContractorId.Value, "Contractor", "ContractorId");
                        if (string.IsNullOrEmpty(creditAccountId))
                        {
                            creditAccountId = AccountingChartHelper.AddContractorToChart(invoiceVm.ContractorId.Value);
                        }
                    }
                    else if (invFor == 3) //Custom Clearance
                    {
                        creditAccountId = AccountingChartHelper.GetCCCashDepAccountId(invoiceVm.OperationId);

                        if (!string.IsNullOrEmpty(creditAccountId))
                        {
                            invDb.InvStatusId = 4; //paid with cash deposit
                        }
                        else // In this case there was no cash deposit paid .. I added an account to sotre
                             //any credit amount for custom clearance
                        {
                            creditAccountId = ((int)AccountingChartEnum.CustomClearanceSupplier).ToString();
                        }
                    }

                    if (invoiceId == 0)
                    {
                        invDb.InvoiceCode = AdminHelper.GeneratePrefixCode(PrefixForEnum.APInvoice, true);
                        db.InvoiceAPs.Add(invDb);
                    }

                    db.SaveChanges();

                    invoiceVm.InvoiceId   = invDb.InvoiceId;
                    invoiceVm.InvoiceCode = invDb.InvoiceCode;

                    //Change HB status
                    if (invoiceId == 0)
                    {
                        //Add invoice to accounting transactions table
                        if (!string.IsNullOrEmpty(creditAccountId))
                        {
                            AddAPInvToTransTable(creditAccountId, invoiceVm);
                        }

                        //if (invFor == 3) //Custom Clearance
                        if (invFor == 3) //will link the cash out receipts with same currency to this invoice as it is paid
                        {
                            int     operId     = invoiceVm.OperationId;
                            int     savedInvId = invoiceVm.InvoiceId;
                            int     currId     = invoiceVm.InvCurrencyId;
                            decimal invAmount  = invoiceVm.InvoiceTotals.FirstOrDefault().TotalAmount;
                            //Get cashout receiptIds
                            var cashoutReceiptIds = db.CashOutReceipts.Include("CashOutReceiptInvs")
                                                    .Where(x => x.OperationId == operId && x.CurrencyId == currId)
                                                    .ToList();

                            CashOutReceiptInv cashOutReceiptInv;
                            decimal           prevPaidFromReceipt, receiptAmount, amountToPay = 0;

                            foreach (var item in cashoutReceiptIds)
                            {
                                receiptAmount = item.ReceiptAmount;

                                //Get what paid before by this receipt
                                prevPaidFromReceipt = item.CashOutReceiptInvs.Sum(x => x.PaidAmount);
                                amountToPay         = receiptAmount - prevPaidFromReceipt;
                                if (amountToPay <= 0) //This receipt total amount is used by another invoices
                                {
                                    continue;
                                }

                                if (invAmount <= 0) //This Invoice is total paid
                                {
                                    break;
                                }

                                if (amountToPay > invAmount)
                                {
                                    amountToPay = invAmount;
                                }

                                //Add cash out receipt invoice
                                cashOutReceiptInv            = new CashOutReceiptInv();
                                cashOutReceiptInv.ReceiptId  = item.ReceiptId;
                                cashOutReceiptInv.InvoiceId  = savedInvId;
                                cashOutReceiptInv.PaidAmount = amountToPay;

                                db.CashOutReceiptInvs.Add(cashOutReceiptInv);

                                invAmount = invAmount - amountToPay;
                            }

                            db.SaveChanges();
                        }
                        // HouseBillHelper.ChangeHBStatus(invDb.HouseBillId, (byte)StatusEnum.InvoiceIssued);
                        OperationHelper.ChangeOperationStatus(invDb.OperationId, (byte)StatusEnum.InvoiceIssued);
                    }

                    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);
        }
コード例 #22
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");
        }
コード例 #23
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);
        }
コード例 #24
0
        //public static OpenBalanceVm GetOpenBalanceForCash()
        //{
        //    OpenBalanceVm balanceVm = new OpenBalanceVm();
        //    balanceVm.TbName = "Currency";
        //    balanceVm.LibItemId = 0;
        //    balanceVm.CreateDate = DateTime.Now;
        //    balanceVm.IsCreditAgent = false;

        //    AccountingEntities db = new AccountingEntities();

        //    //Get Currency List
        //    var currList = db.CurrencyAccs.ToList();
        //    OpenBalanceDetailVm openBalanceDet;

        //    foreach (var item in currList)
        //    {
        //        string accountId = AccountingChartHelper.GetAccountIdByPkAndTbName(item.CurrencyId, "Currency", "CurrencyId");
        //        //Get Transaction details for open balance
        //        var accTanDet = db.AccTransactionDetails.Include("AccTransaction")
        //            .Where(x => x.AccountId == accountId && x.AccTransaction.TransactionName == "open balance").ToList();
        //        openBalanceDet = new OpenBalanceDetailVm();
        //        openBalanceDet.CurrencyId = item.CurrencyId;
        //        openBalanceDet.CurrencySign = item.CurrencySign;
        //        openBalanceDet.CurrencyAccountId = item.AccountId;
        //        //check if has open balance for this currency
        //        var openAccTran = accTanDet.Where(x => x.CurrencyId == item.CurrencyId).FirstOrDefault();
        //        if (openAccTran != null)
        //        {
        //            openBalanceDet.TransDetailId = openAccTran.TransDetailId;
        //            openBalanceDet.CreditAmount = openAccTran.CreditAmount;
        //            openBalanceDet.DebitAmount = openAccTran.DebitAmount;
        //        }

        //        balanceVm.OpenBalanceDetails.Add(openBalanceDet);
        //    }



        //    return balanceVm;
        //}

        public static string AddEditOpenBalance(OpenBalanceVm openBalanceVm)
        {
            string isSaved = "true";

            string accountId = "";
            string tbName, pkName; int libId; bool isCreditAgent = false;

            libId  = openBalanceVm.LibItemId;
            tbName = openBalanceVm.TbName;
            pkName = openBalanceVm.PkName;
            if (openBalanceVm.IsCreditAgent != null)
            {
                isCreditAgent = openBalanceVm.IsCreditAgent.Value;
            }

            //Get AccountId
            accountId = AccountingChartHelper.GetAccountIdByPkAndTbName(libId, tbName, pkName);
            if (string.IsNullOrEmpty(accountId))
            {
                switch (tbName)
                {
                case "Agent":
                    byte agentType;
                    if (isCreditAgent == false)
                    {
                        agentType = 1;     //debit note A/R
                    }
                    else
                    {
                        agentType = 2;     //Credit note A/P
                    }
                    accountId = AccountingChartHelper.AddAgentToChart(libId, agentType);
                    break;

                case "Carrier":
                    accountId = AccountingChartHelper.AddCarrierToChart(libId);
                    break;

                case "Contractor":
                    accountId = AccountingChartHelper.AddContractorToChart(libId);
                    break;

                case "Shipper":
                    accountId = AccountingChartHelper.AddShipperToChart(libId);
                    break;

                case "Consignee":
                    accountId = AccountingChartHelper.AddConsigneeToChart(libId);
                    break;

                case "Currency":
                    accountId = AccountingChartHelper.AddCashToChart(libId);
                    break;

                case "BankAccount":
                    accountId = AccountingChartHelper.AddBankAccountToChart(0, libId);
                    break;

                case "AccountingChart":
                    accountId = AccountingChartHelper.AddBankAccountToChart(0, libId);
                    break;
                }

                AccountingChartHelper.AddAccountIdToObj(accountId, tbName, libId, pkName);
            }

            openBalanceVm.AccountId = accountId;

            int            transId = openBalanceVm.TransId;
            AccTransaction accTran;

            AccountingEntities db = new AccountingEntities();

            if (transId != 0)
            {
                accTran = db.AccTransactions.Include("AccTransactionDetails").Where(x => x.TransId == transId).FirstOrDefault();
                //delete all tran details and add it later
                foreach (var item in accTran.AccTransactionDetails.ToList())
                {
                    db.AccTransactionDetails.Remove(item);
                }
            }
            else
            {
                accTran =
                    new AccTransaction()
                {
                    CreateBy        = AdminHelper.GetCurrentUserId(),
                    CreateDate      = DateTime.Now,
                    TransactionName = "open balance"
                };
            }

            Mapper.CreateMap <OpenBalanceDetailVm, AccTransactionDetail>();
            AccTransactionDetail accTranDetail;

            foreach (var item in openBalanceVm.OpenBalanceDetails.Where(x => x.DebitAmount != null || x.CreditAmount != null))
            {
                accTranDetail = new AccTransactionDetail();

                item.AccountId = accountId;
                Mapper.Map(item, accTranDetail);
                accTran.AccTransactionDetails.Add(accTranDetail);
            }

            if (transId == 0)
            {
                db.AccTransactions.Add(accTran);
            }

            try
            {
                db.SaveChanges();
            }

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