コード例 #1
0
 public static void GetCCCashDepositCostList(int operationId)
 {
     var operCostObj                 = AccountingHelper.GetOperationCost(operationId, 0);
     var operCostList                = operCostObj.OperationCostAccVms;
     var operCostTotalList           = operCostObj.OperationCostTotalAccVms;
     Dictionary <int, string> ccCost = ListCommonHelper.GetCustClearCostList();
 }
コード例 #2
0
        internal static List <InvoiceLightVm> GetInvListForHb(int hbId)
        {
            AccountingEntities db2 = new AccountingEntities();

            var invList = db2.Invoices.Where(x => x.HouseBillId == hbId)
                          .Select(x => new InvoiceLightVm
            {
                InvoiceCode = x.InvoiceCode,
                InvoiceId   = x.InvoiceId,
                InvoiceDate = x.InvoiceDate,
                InvoiceType = x.InvoiceType,
                HouseBillId = x.HouseBillId
            })
                          .ToList();

            //Get Cost list
            var operCostObj = AccountingHelper.GetOperationCost(0, hbId);

            var operCostList = operCostObj.OperationCostAccVms;


            foreach (var item in invList)
            {
                var operCostTotalList = operCostObj.OperationCostTotalAccVms;
                GetHbInvTotal(item.InvoiceType, ref operCostList, ref operCostTotalList);
                item.OperationCostTotalAccVms = operCostTotalList;
            }
            return(invList);
        }
コード例 #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
ファイル: 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");
        }
コード例 #5
0
        internal static string Delete(int invId, string deleteReason)
        {
            string isSaved = "false";

            if (invId == 0)
            {
                return(isSaved);
            }

            AccountingEntities db = new AccountingEntities();

            InvoiceAP invDb = new InvoiceAP();

            invDb = db.InvoiceAPs
                    .Where(x => x.InvoiceId == invId).FirstOrDefault();

            int?transID = null;

            if (invDb.TransId != null)
            {
                transID = invDb.TransId.Value;
            }

            if (invDb.InvStatusId == 1 || invDb.InvStatusId == 2)
            {
                invDb.IsDeleted    = true;
                invDb.DeleteReason = deleteReason;
                invDb.DeletedBy    = EasyFreight.DAL.AdminHelper.GetCurrentUserId();
                invDb.TransId      = null;

                // invoice total
                var invTotal = db.InvoiceTotalAPs.Where(x => x.InvoiceId == invId).FirstOrDefault();

                try
                {
                    db.SaveChanges();

                    db.InvoiceTotalAPs.Remove(invTotal);

                    if (transID.HasValue)
                    {
                        AccountingHelper.DeleteTransaction(transID.Value);
                    }


                    isSaved = "true";
                }
                catch
                {
                    isSaved = "false";
                }
            }

            return(isSaved);
        }
コード例 #6
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");
        }
コード例 #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
        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");
        }
コード例 #9
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");
        }
コード例 #10
0
ファイル: AgentNoteHelper.cs プロジェクト: amorsi/EasyFreight
        public static AgentNoteVm GetAgentNoteInfo(int operId, byte noteType, int agNoteId = 0, bool forEdit = true)
        {
            AgentNoteVm        agNoteVm = new AgentNoteVm(noteType);
            OperationsEntities db1      = new OperationsEntities();


            AccountingEntities db = new AccountingEntities();

            AgentNote agNoteDb;

            if (agNoteId != 0)
            {
                agNoteDb = db.AgentNotes.Where(x => x.AgentNoteId == agNoteId).FirstOrDefault();
                Mapper.CreateMap <AgentNote, AgentNoteVm>().IgnoreAllNonExisting();
                Mapper.CreateMap <AgentNoteDetail, AgentNoteDetailVm>().IgnoreAllNonExisting();
                Mapper.Map(agNoteDb, agNoteVm);

                operId = agNoteDb.OperationId;

                //agNoteVm.FromPort = operationInfo.FromPort;
                //agNoteVm.ToPort = operationInfo.ToPort;
            }
            else
            {
                agNoteDb = new AgentNote();
                agNoteVm.AgentNoteCode = AdminHelper.GeneratePrefixCode(PrefixForEnum.AgentNote, false);
            }

            var operationInfo = db1.OperationViews.Where(x => x.OperationId == operId).FirstOrDefault();

            Mapper.CreateMap <OperationView, AgentNoteVm>()
            .ForMember(x => x.CreateBy, y => y.Ignore())
            .ForMember(x => x.CreateDate, y => y.Ignore())
            .IgnoreAllNonExisting();
            Mapper.Map(operationInfo, agNoteVm);

            if (operationInfo.OrderFrom == 1)
            {
                agNoteVm.CustomerName = operationInfo.ShipperNameEn;
            }
            else
            {
                agNoteVm.CustomerName = operationInfo.ConsigneeNameEn;
            }

            agNoteVm.AgentName = operationInfo.AgentNameEn;

            var operCostObj = AccountingHelper.GetOperationCost(agNoteVm.OperationId, 0);

            var agentCostList      = operCostObj.OperationCostAccVms.Where(x => x.IsAgent).ToList();
            var agentCostTotalList = operCostObj.OperationCostTotalAccVms.Where(x => x.TotalAgentRate != 0).ToList();

            var operCostList = db1.OperationCosts.Include("OperationCostLib").Include("Currency")
                               .Where(x => x.OperationId == operId && x.IsAgentCost == true).ToList();

            agNoteVm.ContainerSummary = operCostObj.ContainerSummary;

            agNoteVm.OperationCostAccVms      = agentCostList;
            agNoteVm.OperationCostTotalAccVms = agentCostTotalList;
            agNoteVm.HouseBillId = agentCostList.FirstOrDefault().HouseBillId;
            if (agentCostList.Count > 0)
            {
                agNoteVm.CurrencyId   = agentCostList.FirstOrDefault().CurrencyId;
                agNoteVm.CurrencySign = agentCostList.FirstOrDefault().CurrencySign;
            }


            if (forEdit)
            {
                //Get prev agent note details for this operation
                List <int> usedCost = db.AgentNoteDetails
                                      .Where(x => x.AgentNote.OperationId == operId)
                                      .Select(x => x.OperCostId)
                                      .ToList();
                var newCosts = operCostList.Where(x => !usedCost.Contains(x.OperCostId)).ToList();

                AgentNoteDetailVm agentNoteDetailVm;
                foreach (var item in newCosts)
                {
                    agentNoteDetailVm = new AgentNoteDetailVm()
                    {
                        AgentNoteDetailId = 0,
                        CostName          = item.OperationCostLib.OperCostNameEn,
                        CurrencyId        = item.CurrencyId,
                        CurrencySign      = item.Currency.CurrencySign,
                        ExchangeRate      = 1,
                        MainAmount        = agNoteVm.AgentNoteType == 1 ? item.OperationCostSelling : item.OperationCostNet,
                        MainCurrencyId    = item.CurrencyId,
                        MainCurrencySign  = item.Currency.CurrencySign,
                        OperCostId        = item.OperCostId,
                        OperCostLibId     = item.OperCostLibId
                    };

                    agNoteVm.AgentNoteDetails.Add(agentNoteDetailVm);
                }
            }
            else
            {
                foreach (var item in agNoteVm.AgentNoteDetails)
                {
                    item.CostName = operCostList
                                    .Where(x => x.OperCostId == item.OperCostId).FirstOrDefault().OperationCostLib.OperCostNameEn;
                }
            }
            return(agNoteVm);
        }
コード例 #11
0
        internal static string Delete(int invId, string deleteReason)
        {
            string isSaved = "false";

            if (invId == 0)
            {
                return(isSaved);
            }

            AccountingEntities db = new AccountingEntities();

            Invoice invDb = new Invoice();

            invDb = db.Invoices
                    .Where(x => x.InvoiceId == invId).FirstOrDefault();

            int?transID = null;

            if (invDb.TransId != null)
            {
                transID = invDb.TransId.Value;
            }

            if (invDb.InvStatusId == 1 || invDb.InvStatusId == 2)
            {
                invDb.IsDeleted    = true;
                invDb.DeleteReason = deleteReason;
                invDb.DeletedBy    = EasyFreight.DAL.AdminHelper.GetCurrentUserId();
                invDb.TransId      = null;

                // invoice total
                var invTotal = db.InvoiceTotals.Where(x => x.InvoiceId == invId).FirstOrDefault();

                try
                {
                    db.SaveChanges();

                    db.InvoiceTotals.Remove(invTotal);

                    if (transID.HasValue)
                    {
                        AccountingHelper.DeleteTransaction(transID.Value);
                    }

                    #region Update Operation Status...
                    try
                    {
                        var provInvs = db.Invoices
                                       .Where(x => x.OperationId == invDb.OperationId && x.IsDeleted == null && x.InvoiceId != invDb.InvoiceId).ToList();
                        if (provInvs.Count == 0)
                        {
                            OperationsEntities opdb = new OperationsEntities();
                            var operation           = opdb.Operations.Where(z => z.OperationId == invDb.OperationId).FirstOrDefault();
                            operation.StatusId = 3;
                            opdb.SaveChanges();
                        }
                    }
                    catch { }
                    #endregion

                    isSaved = "true";
                }
                catch
                {
                    isSaved = "false";
                }
            }

            return(isSaved);
        }
コード例 #12
0
        public static InvoiceVm GetInvoiceInfoNew(int hbId = 0, int invId = 0, bool forEdit = true)
        {
            InvoiceVm invoiceVm = new InvoiceVm(0);


            AccountingEntities db = new AccountingEntities();

            if (invId != 0)
            {
                Invoice invDb = db.Invoices.Where(x => x.InvoiceId == invId).FirstOrDefault();
                Mapper.CreateMap <Invoice, InvoiceVm>().IgnoreAllNonExisting();
                Mapper.CreateMap <InvoiceDetail, InvoiceDetailVm>().IgnoreAllNonExisting();
                Mapper.CreateMap <InvoiceTotal, InvoiceTotalVm>().IgnoreAllNonExisting();
                Mapper.Map(invDb, invoiceVm);

                //invoiceVm.FromPort = hbInfo.FromPort;
                //invoiceVm.ToPort = hbInfo.ToPort;
                invoiceVm.PaymentTermName = invDb.PaymentTerm.PaymentTermEn;
                invoiceVm.CurrencySign    = invDb.Currency.CurrencySign;
                //invType = invDb.InvoiceType;

                //Add Tax part
                //decimal totalBeforeTax = invoiceVm.InvoiceDetails.Sum(x => x.InvoiceAmount);
                // invoiceVm.InvoiceTotals.FirstOrDefault().TotalBeforeTax = totalBeforeTax;
                // invoiceVm.InvoiceTotals.FirstOrDefault().TaxDepositAmount = totalBeforeTax - invoiceVm.InvoiceTotals.FirstOrDefault().TotalAmount;
            }
            else
            {
                invoiceVm.InvoiceCode = AdminHelper.GeneratePrefixCode(PrefixForEnum.AccountingInvoice, false);
            }

            if (hbId == 0)
            {
                hbId = invoiceVm.HouseBillId.Value;
            }

            OperationsEntities db1 = new OperationsEntities();
            var hbInfo             = db1.HouseBillViews.Where(x => x.HouseBillId == hbId).FirstOrDefault();

            Mapper.CreateMap <HouseBillView, InvoiceVm>()
            .ForMember(x => x.CreateBy, y => y.Ignore())
            .ForMember(x => x.CreateDate, y => y.Ignore())
            .IgnoreAllNonExisting();
            Mapper.Map(hbInfo, invoiceVm);

            if (hbInfo.OrderFrom == 1)
            {
                invoiceVm.CustomerName = hbInfo.ShipperNameEn;
                invoiceVm.ConsigneeId  = null;
            }
            else
            {
                invoiceVm.CustomerName = hbInfo.ConsigneeNameEn;
                invoiceVm.ShipperId    = null;
            }

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

            var operCostList      = operCostObj.OperationCostAccVms;
            var operCostTotalList = operCostObj.OperationCostTotalAccVms;

            GetHbInvTotal(0, ref operCostList, ref operCostTotalList);

            invoiceVm.OperationCostAccVms      = operCostList;
            invoiceVm.OperationCostTotalAccVms = operCostTotalList;



            if (forEdit)
            {
                //Get prev invoice details for this HB
                // adding condation  [x.Invoice.IsDeleted==null] get undeleted invoices
                var prevInvDetails = db.InvoiceDetails
                                     .Where(x => x.Invoice.HouseBillId == hbId && x.Invoice.IsDeleted == null).OrderBy(x => x.ItemOrder)
                                     .Select(x => new { x.CostFkId, x.FkType })
                                     .ToList();
                InvoiceDetailVm invDetailVm;
                //Add other costs that are not inserted in inv details table
                for (int i = 1; i < 4; i++) // loop for the three cost types
                {
                    List <int> usedCost = invoiceVm.InvoiceDetails.Where(x => x.FkType == i).Select(x => x.CostFkId).ToList();
                    usedCost.AddRange(prevInvDetails.Where(x => x.FkType == i).Select(x => x.CostFkId).ToList());
                    var newCosts = operCostList.Where(x => !usedCost.Contains(x.CostFkId) && x.FkType == i).ToList();
                    foreach (var item in newCosts)
                    {
                        invDetailVm = new InvoiceDetailVm()
                        {
                            CostFkId       = item.CostFkId,
                            CostName       = item.CostName,
                            ExchangeRate   = 1,
                            FkType         = item.FkType,
                            InvDetailId    = 0,
                            InvoiceAmount  = item.SellingRate,
                            InvoiceId      = invoiceVm.InvoiceId,
                            MainAmount     = item.SellingRate,
                            MainCurrencyId = item.CurrencyIdSelling,
                            MainCurrSign   = item.CurrencySignSelling
                        };

                        invoiceVm.InvoiceDetails.Add(invDetailVm);
                    }
                }

                if (invoiceVm.InvoiceTotals.Count == 0)
                {
                    InvoiceTotalVm invTotal = new InvoiceTotalVm()
                    {
                        CurrencyId   = invoiceVm.InvCurrencyId,
                        CurrencySign = invoiceVm.CurrencySign,
                        InvoiceId    = invoiceVm.InvoiceId,
                        TotalAmount  = 0
                    };

                    invoiceVm.InvoiceTotals.Add(invTotal);
                }
            }
            else
            {
                Dictionary <int, string> operCost  = new Dictionary <int, string>();
                Dictionary <int, string> truckCost = new Dictionary <int, string>();
                Dictionary <int, string> ccCost    = new Dictionary <int, string>();
                if (invoiceVm.InvoiceDetails.Any(x => x.FkType == (byte)CostType.OperationCost))
                {
                    operCost = ListCommonHelper.GetOperationCostList();
                }
                if (invoiceVm.InvoiceDetails.Any(x => x.FkType == (byte)CostType.TruckingCost))
                {
                    truckCost = ListCommonHelper.GetTruckingCostNameList();
                }
                if (invoiceVm.InvoiceDetails.Any(x => x.FkType == (byte)CostType.CCCost))
                {
                    ccCost = ListCommonHelper.GetCustClearCostList();
                }
                //Get cost name for invoice items
                foreach (var item in invoiceVm.InvoiceDetails)
                {
                    item.CostName = invoiceVm.OperationCostAccVms
                                    .Where(x => x.CostFkId == item.CostFkId && x.FkType == item.FkType)
                                    .FirstOrDefault().CostName;
                }
            }
            invoiceVm.InvoiceDetails = invoiceVm.InvoiceDetails.OrderBy(z => z.ItemOrder).ToList();
            return(invoiceVm);
        }
コード例 #13
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");
        }
コード例 #14
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="hbId"></param>
        /// <param name="operId"></param>
        /// <param name="invId"></param>
        /// <param name="invType">0 all currency, 1 EGP only, 2 other currency</param>
        /// <returns></returns>
        public static InvoiceVm GetInvoiceInfo(int hbId = 0, int operId = 0, int invId = 0, byte invType = 0)
        {
            InvoiceVm          invoiceVm = new InvoiceVm(invType);
            OperationsEntities db1       = new OperationsEntities();
            var hbInfo = db1.HouseBillViews.Where(x => x.HouseBillId == hbId).FirstOrDefault();

            //Get saved invoice for HB with same invoice type .. if any
            AccountingEntities db = new AccountingEntities();
            var savedInv          = db.Invoices.Where(x => x.HouseBillId == hbId && x.InvoiceType == invType).FirstOrDefault();

            if (savedInv != null)
            {
                invId = savedInv.InvoiceId;
            }

            //If invoice id != 0 ... will fill InvoiceVm from Invoice table
            if (invId != 0)
            {
                Invoice invDb = db.Invoices.Where(x => x.InvoiceId == invId).FirstOrDefault();
                Mapper.CreateMap <Invoice, InvoiceVm>().IgnoreAllNonExisting();
                Mapper.CreateMap <InvoiceTotal, InvoiceTotalVm>().IgnoreAllNonExisting();
                Mapper.Map(invDb, invoiceVm);

                invoiceVm.FromPort        = hbInfo.FromPort;
                invoiceVm.ToPort          = hbInfo.ToPort;
                invoiceVm.PaymentTermName = invDb.PaymentTerm.PaymentTermEn;
                invType = invDb.InvoiceType;
            }
            else
            {
                invoiceVm.InvoiceCode = AdminHelper.GeneratePrefixCode(PrefixForEnum.AccountingInvoice, false);
            }

            Mapper.CreateMap <HouseBillView, InvoiceVm>()
            .ForMember(x => x.CreateBy, y => y.Ignore())
            .ForMember(x => x.CreateDate, y => y.Ignore())
            .IgnoreAllNonExisting();
            Mapper.Map(hbInfo, invoiceVm);

            if (hbInfo.OrderFrom == 1)
            {
                invoiceVm.CustomerName = hbInfo.ShipperNameEn;
                invoiceVm.ConsigneeId  = null;
            }
            else
            {
                invoiceVm.CustomerName = hbInfo.ConsigneeNameEn;
                invoiceVm.ShipperId    = null;
            }

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

            var operCostList      = operCostObj.OperationCostAccVms;
            var operCostTotalList = operCostObj.OperationCostTotalAccVms;

            GetHbInvTotal(invType, ref operCostList, ref operCostTotalList);

            invoiceVm.OperationCostAccVms      = operCostList;
            invoiceVm.OperationCostTotalAccVms = operCostTotalList;

            return(invoiceVm);
        }
コード例 #15
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="operId"></param>
        /// <param name="invId"></param>
        /// <param name="invFor">if = 1  Invoice for Carrier .. if 2 invoice for Contractor .. if 3 custom clearance</param>
        /// <param name="forEdit"></param>
        /// <returns></returns>
        public static InvoiceVm GetInvoiceInfoFullOperation(int operId = 0, int invId = 0, byte invFor = 1, bool forEdit = true)
        {
            InvoiceVm          invoiceVm = new InvoiceVm(invFor);
            AccountingEntities db        = new AccountingEntities();

            if (invId != 0)
            {
                InvoiceAP invDb = db.InvoiceAPs.Include("InvoiceDetailAPs").Include("InvoiceTotalAPs")
                                  .Where(x => x.InvoiceId == invId && x.IsDeleted == null).FirstOrDefault();
                Mapper.CreateMap <InvoiceAP, InvoiceVm>()
                .IgnoreAllNonExisting();

                Mapper.Map(invDb, invoiceVm);

                Mapper.CreateMap <InvoiceDetailAP, InvoiceDetailVm>().IgnoreAllNonExisting();
                Mapper.CreateMap <InvoiceTotalAP, InvoiceTotalVm>().IgnoreAllNonExisting();

                InvoiceDetailVm invDetVm;
                foreach (var item in invDb.InvoiceDetailAPs)
                {
                    invDetVm = new InvoiceDetailVm();
                    Mapper.Map(item, invDetVm);
                    invoiceVm.InvoiceDetails.Add(invDetVm);
                }

                InvoiceTotalVm invTotalVm;
                foreach (var item in invDb.InvoiceTotalAPs)
                {
                    invTotalVm = new InvoiceTotalVm();
                    Mapper.Map(item, invTotalVm);
                    invoiceVm.InvoiceTotals.Add(invTotalVm);
                }


                invoiceVm.PaymentTermName = invDb.PaymentTerm.PaymentTermEn;
                invoiceVm.CurrencySign    = invDb.Currency.CurrencySign;
            }
            else
            {
                invoiceVm.InvoiceCode = AdminHelper.GeneratePrefixCode(PrefixForEnum.APInvoice, false);
            }

            if (operId == 0)
            {
                operId = invoiceVm.OperationId;
            }

            OperationsEntities db1 = new OperationsEntities();
            var hbInfo             = db1.OperationViews.Where(x => x.OperationId == operId).FirstOrDefault();

            Mapper.CreateMap <OperationView, InvoiceVm>()
            .ForMember(x => x.CreateBy, y => y.Ignore())
            .ForMember(x => x.CreateDate, y => y.Ignore())
            .IgnoreAllNonExisting();
            Mapper.Map(hbInfo, invoiceVm);

            if (invFor == 1) //Carrier
            {
                invoiceVm.ContractorId = null;
                invoiceVm.SupplierName = hbInfo.CarrierNameEn;
                invoiceVm.CustomerName = hbInfo.CarrierNameEn;
            }
            else if (invFor == 2)
            {
                var contractorInfo = db1.TruckingOrdersViews
                                     .Where(x => x.OperationId == operId)
                                     .Select(x => new { x.ContractorId, x.ContractorNameEn })
                                     .FirstOrDefault();
                if (contractorInfo != null)
                {
                    invoiceVm.CarrierId    = null;
                    invoiceVm.SupplierName = contractorInfo.ContractorNameEn;
                    invoiceVm.ContractorId = contractorInfo.ContractorId;
                    invoiceVm.CustomerName = contractorInfo.ContractorNameEn;
                }
            }
            else if (invFor == 3)
            {
                invoiceVm.SupplierName = "Custom Clearance";
                invoiceVm.CustomerName = "Custom Clearance";
            }

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

            var operCostList      = operCostObj.OperationCostAccVms;
            var operCostTotalList = operCostObj.OperationCostTotalAccVms;

            // GetHbInvTotal(0, ref operCostList, ref operCostTotalList);

            invoiceVm.OperationCostAccVms      = operCostList;
            invoiceVm.OperationCostTotalAccVms = operCostTotalList;

            if (forEdit)
            {
                //Get prev invoice details for this HB
                var prevInvDetails = db.InvoiceDetailAPs
                                     .Where(x => x.InvoiceAP.OperationId == operId && x.InvoiceAP.IsDeleted == null)
                                     .Select(x => new { x.CostFkId, x.FkType })
                                     .ToList();

                InvoiceDetailVm invDetailVm;
                //invFor == 1 ..get operation cost only
                //invFor == 2 ..get trucking cost only
                //invFor == 3 ..get custom clearance cost only
                List <int> usedCost = invoiceVm.InvoiceDetails.Where(x => x.FkType == invFor).Select(x => x.CostFkId).ToList();
                usedCost.AddRange(prevInvDetails.Where(x => x.FkType == invFor).Select(x => x.CostFkId).ToList());
                var newCosts = operCostList.Where(x => !usedCost.Contains(x.CostFkId) && x.FkType == invFor).ToList();

                foreach (var item in newCosts.Where(x => x.NetRate > 0))
                {
                    invDetailVm = new InvoiceDetailVm()
                    {
                        CostFkId       = item.CostFkId,
                        CostName       = item.CostName,
                        ExchangeRate   = 1,
                        FkType         = item.FkType,
                        InvDetailId    = 0,
                        InvoiceAmount  = item.NetRate,
                        InvoiceId      = invoiceVm.InvoiceId,
                        MainAmount     = item.NetRate,
                        MainCurrencyId = item.CurrencyId,
                        MainCurrSign   = item.CurrencySign
                    };

                    invoiceVm.InvoiceDetails.Add(invDetailVm);
                }

                if (invoiceVm.InvoiceTotals.Count == 0)
                {
                    InvoiceTotalVm invTotal = new InvoiceTotalVm()
                    {
                        CurrencyId   = invoiceVm.InvCurrencyId,
                        CurrencySign = invoiceVm.CurrencySign,
                        InvoiceId    = invoiceVm.InvoiceId,
                        TotalAmount  = 0
                    };

                    invoiceVm.InvoiceTotals.Add(invTotal);
                }
            }
            else
            {
                Dictionary <int, string> operCost  = new Dictionary <int, string>();
                Dictionary <int, string> truckCost = new Dictionary <int, string>();
                Dictionary <int, string> ccCost    = new Dictionary <int, string>();
                if (invoiceVm.InvoiceDetails.Any(x => x.FkType == (byte)CostType.OperationCost))
                {
                    operCost = ListCommonHelper.GetOperationCostList();
                }
                else if (invoiceVm.InvoiceDetails.Any(x => x.FkType == (byte)CostType.TruckingCost))
                {
                    truckCost = ListCommonHelper.GetTruckingCostNameList();
                }
                else if (invoiceVm.InvoiceDetails.Any(x => x.FkType == (byte)CostType.CCCost))
                {
                    ccCost = ListCommonHelper.GetCustClearCostList();
                }
                //Get cost name for invoice items
                foreach (var item in invoiceVm.InvoiceDetails)
                {
                    item.CostName = invoiceVm.OperationCostAccVms
                                    .Where(x => x.CostFkId == item.CostFkId && x.FkType == item.FkType)
                                    .FirstOrDefault().CostName;
                }
            }

            return(invoiceVm);
        }
コード例 #16
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");
        }