Example #1
0
        public bool SetETLBusinessObjectStatus(Session session, Guid jobId, Guid RefId, short rowstatus)
        {
            bool result = true;

            try
            {
                BusinessObjectBO businessObjectBO = new BusinessObjectBO();
                BusinessObject   businessObject   = businessObjectBO.GetBusinessObjectByRefId(session, RefId);
                if (businessObjectBO == null)
                {
                    return(false);
                }
                ETLBusinessObject etlBusinessObject = GetETLBusinessObject(session, jobId, businessObject.BusinessObjectId);
                if (etlBusinessObject == null)
                {
                    result = false;
                    return(result);
                }
                etlBusinessObject.RowStatus = rowstatus;
                etlBusinessObject.Save();
            }
            catch (Exception)
            {
                return(result);
            }
            return(result);
        }
Example #2
0
        public Guid ETLGetNextProcessObject(Session session, Guid jobId, List <int> objectType)
        {
            Guid result = Guid.Empty;
            ETLEntryObjectHistoryBO entryHistoryBO   = new ETLEntryObjectHistoryBO();
            BusinessObjectBO        businessObjectBO = new BusinessObjectBO();
            ObjectEntryLogBO        objectEntryLogBO = new ObjectEntryLogBO();
            ETLLogBO etlLogBO = new ETLLogBO();

            try
            {
                #region Logic
                BusinessObject businessObject = businessObjectBO.GetOldestUnprocessedObject(session, jobId, objectType);
                if (businessObject == null)
                {
                    return(result);
                }
                result = businessObject.RefId;
                etlLogBO.CreateETLBusinessObject(session, jobId, businessObject.BusinessObjectId);
                entryHistoryBO.CreatETLEntryObjectHistory(session, jobId, businessObject.BusinessObjectId, 0);
                XPCollection <ETLBusinessObject> etlBusinessObjectCollection = etlLogBO.GetNewerETLBusinessObject(session, jobId, businessObject.BusinessObjectId);
                foreach (ETLBusinessObject etlBO in etlBusinessObjectCollection)
                {
                    etlBO.RowStatus = Utility.Constant.ROWSTATUS_DELETED;
                    etlBO.Save();
                }
                #endregion
            }
            catch (Exception)
            {
                return(result);
            }
            return(result);
        }
Example #3
0
        public bool SetETLEntryObjectHistoryStatus(Session session, Guid jobId, Guid RefId, short rowstatus)
        {
            bool result = true;

            try
            {
                BusinessObjectBO businessObjectBO = new BusinessObjectBO();
                BusinessObject   businessObject   = businessObjectBO.GetBusinessObjectByRefId(session, RefId);
                if (businessObjectBO == null)
                {
                    return(false);
                }
                ETLEntryObjectHistory etlEntryObjectHistory = GetETLEntryObjectHistory(session, jobId, businessObject.BusinessObjectId);
                if (etlEntryObjectHistory == null)
                {
                    result = false;
                    return(result);
                }
                etlEntryObjectHistory.RowStatus    = rowstatus;
                etlEntryObjectHistory.RowTimeStamp = DateTime.Now;
                etlEntryObjectHistory.Save();
            }
            catch (Exception)
            {
                return(result);
            }
            return(result);
        }
Example #4
0
        public void Load()
        {
            //if (Stop == true) return;
            //Console.WriteLine("Load");
            ETLEntryObjectHistoryBO _ETLEntryObjectHistoryBO = new ETLEntryObjectHistoryBO();
            ObjectEntryLogBO        _ObjectEntryLogBO        = new ObjectEntryLogBO();
            ETLJobBO         _ETLJobBO         = new ETLJobBO();
            ETLLogBO         _ETLLogBO         = new ETLLogBO();
            BusinessObjectBO _BusinessObjectBO = new BusinessObjectBO();

            if (RefId != Guid.Empty)
            {
                _ETLLogBO.JobLog(session, JobId, "State1", "Status1");
                _ETLLogBO.SetETLBusinessObjectStatus(session, JobId, RefId, 1);
                _ETLEntryObjectHistoryBO.SetETLEntryObjectHistoryStatus(session, JobId, RefId, 1);
            }
        }
Example #5
0
        public void Transform()
        {
            //if (Stop == true) return;
            //Console.WriteLine("Transform");
            if (RefId == Guid.Empty)
            {
                return;
            }
            ETLEntryObjectHistoryBO _ETLEntryObjectHistoryBO = new ETLEntryObjectHistoryBO();
            ObjectEntryLogBO        _ObjectEntryLogBO        = new ObjectEntryLogBO();
            ETLJobBO         _ETLJobBO         = new ETLJobBO();
            ETLLogBO         _ETLLogBO         = new ETLLogBO();
            BusinessObjectBO _BusinessObjectBO = new BusinessObjectBO();

            _ETLLogBO.JobLog(session, JobId, "Running", "Status1");
            ETLInventoryBO etlBO = new ETLInventoryBO();

            etlBO.RepairCOGSByTransaction(session, RefId);
            //etlBO.RepairCOGS(session, RefId);
        }
Example #6
0
        public double GetAccountingBalanceAtTime(Session session, Guid AccountingId, Guid CurrencyId, DateTime time)
        {
            double result = 0;

            try
            {
                Currency         currentCurrency = session.GetObjectByKey <Currency>(CurrencyId);
                CriteriaOperator criteria_0      = new BinaryOperator("RowStatus", Utility.Constant.ROWSTATUS_ACTIVE, BinaryOperatorType.GreaterOrEqual);
                CriteriaOperator criteria_1;
                criteria_1 = new BinaryOperator("TransactionId.IssueDate", time, BinaryOperatorType.LessOrEqual);
                CriteriaOperator             criteria_2 = new BinaryOperator("AccountId!Key", AccountingId, BinaryOperatorType.Equal);
                CriteriaOperator             criteria_3 = new BinaryOperator("CurrencyId.CurrencyTypeId", currentCurrency.CurrencyTypeId, BinaryOperatorType.Equal);
                CriteriaOperator             criteria   = new GroupOperator(GroupOperatorType.And, criteria_0, criteria_1, criteria_2, criteria_3);
                XPCollection <GeneralLedger> ledgerList = new XPCollection <GeneralLedger>(session, criteria);
                if (ledgerList == null || ledgerList.Count == 0)
                {
                    return(0);
                }
                ledgerList.Sorting.Add(new SortProperty("IssuedDate", SortingDirection.Descending));
                ledgerList.Sorting.Add(new SortProperty("CreateDate", SortingDirection.Descending));
                result = ledgerList.FirstOrDefault().Balance;
                foreach (GeneralLedger ledger in ledgerList)
                {
                    Util             util             = new Util();
                    BusinessObjectBO businessObjectBO = new BusinessObjectBO();
                    BusinessObject   businessObject   = util.GetXpoObjectByFieldName <BusinessObject, Guid>(session, "RefId", ledger.TransactionId.TransactionId, BinaryOperatorType.Equal);
                    ETLJob           etlJob           = util.GetXpoObjectByFieldName <ETLJob, string>(session, "Code", "GeneralJournalToGeneralLedgerJob", BinaryOperatorType.Equal);
                    //Console.WriteLine("Test:" + businessObject.BusinessObjectId + " " + ledger.TransactionId.TransactionId);
                    if (!businessObjectBO.NeedToBeProcessed(session, businessObject.BusinessObjectId, etlJob.ETLJobId))
                    {
                        result = ledger.Balance;
                        return(result);
                    }
                }
            }
            catch (Exception)
            {
                throw;
            }
            return(result);
        }
Example #7
0
        static void Main(string[] args)
        {
            try
            {
                ETLUtils etlUtil = new ETLUtils();
                //etlUtil.logs("d:/logs/history.txt", "Start");
                string FilePath = Application.StartupPath + "\\";
                session = Utility.ETL.DatabaseHelper.GetNewSession(etlUtil.GetValFromXML(FilePath + "dbConfig.xml", "ID"), etlUtil.GetValFromXML(FilePath + "dbConfig.xml", "DBName"));
                //session = Utility.ETL.DatabaseHelper.GetNewSession(etlUtil.GetValFromXML("../../dbConfig.xml", "ID"), etlUtil.GetValFromXML("../../dbConfig.xml", "DBName"));
                //session = Utility.ETL.DatabaseHelper.GetNewSession("192.168.1.150","ERPCore_Vuong");
                ProcessHelper processHelper = new ProcessHelper();
                ETLUtils      util          = new ETLUtils();
                Util          ETLUtil       = new Util();
                Util.Populate(session);
                //etlUtil.logs("d:/logs/history.txt", "Start Launch");

                #region TestLogic

                #endregion

                #region Init TempData For Testing

                #endregion
                #region InitBO
                ETLEntryObjectHistoryBO _ETLEntryObjectHistoryBO = new ETLEntryObjectHistoryBO();
                ObjectEntryLogBO        _ObjectEntryLogBO        = new ObjectEntryLogBO();
                ETLJobBO         _ETLJobBO         = new ETLJobBO();
                ETLLogBO         _ETLLogBO         = new ETLLogBO();
                BusinessObjectBO _BusinessObjectBO = new BusinessObjectBO();
                ETL_DiaryJournal _ETL_DiaryJournal = new ETL_DiaryJournal();
                #endregion
                #region TestETL

                //FinancialSupplierLiabilityBO bo = new FinancialSupplierLiabilityBO();
                //ETLAccountingBO bo1 = new ETLAccountingBO();
                //ETLInventoryBO inventoryBO = new ETLInventoryBO();

                //double crbl = bo1.GetAccountingBalanceAtTime(session, Guid.Parse("11000000-0000-0000-0000-000000000001"), Guid.Parse("00110000-0000-0000-0000-000000000001"), DateTime.Parse("2014-01-03 12:00:00"));
                //COGS cogs = inventoryBO.GetPreviousCOGS(session, Guid.Parse("12300000-0000-0000-0000-000000000002"));
                //InventoryLedger crledger = session.GetObjectByKey<InventoryLedger>(Guid.Parse("e6be6f9a-a661-498a-a389-471945bde8c6"));
                //InventoryLedger preledger;
                //XPQuery<COGS> COGSQuery = new XPQuery<COGS>(session);
                //IQueryable<COGS> COGSCol = (from c in COGSQuery
                //                            where c.InventoryTransactionId.RowStatus >= Constant.ROWSTATUS_ACTIVE
                //                            select c);

                //preledger = inventoryBO.GetPreviousInventoryLedger(session, crledger);
                //XPQuery<InventoryLedger> ledgerQuery = new XPQuery<InventoryLedger>(session);
                //var TransactionList = (from r in ledgerQuery
                //                       select r.InventoryTransactionId).Distinct();

                //ETL_Transaction tran = bo1.ExtractTransaction(session, Guid.Parse("5cbaa5b8-9e7c-48ed-b2a7-7353f4a15fc4"),"131");
                //List<ETL_FinnancialSupplierLiabilityDetail> detail = bo.TransformTransactionToSupplierLiabilityDetail(session, tran, "131");
                //bo.LoadFinancialSupplierLiabilityDetail(session, detail, "131");
                //List<ETL_GeneralJournal> jl = new List<ETL_GeneralJournal>();
                //ETL_GeneralJournal jo1 = new ETL_GeneralJournal();
                //ETL_GeneralJournal jo2 = new ETL_GeneralJournal();
                //ETL_GeneralJournal jo3 = new ETL_GeneralJournal();
                //ETL_GeneralJournal jo4 = new ETL_GeneralJournal();

                //jo1.AccountId = Guid.Parse("2B7F3BA9-4AE4-42E7-8568-F5D5B8A009EB");//111
                //jo1.CreateDate = DateTime.Now;
                //jo1.Credit = 100;
                //jo1.Debit = 0;
                //jo1.Description = "111";
                //jo1.JournalType = 'C';
                //jl.Add(jo1);

                //jo2.AccountId = Guid.Parse("B107C675-2895-40B6-BD33-B4D501BBB0D9");//331
                //jo2.CreateDate = DateTime.Now;
                //jo2.Credit = 100;
                //jo2.Debit = 0;
                //jo2.Description = "331";
                //jo2.JournalType = 'C';
                //jl.Add(jo2);

                //jo3.AccountId = Guid.Parse("BDEF51E0-5318-42AA-BA2C-D5F713EA0711");//121
                //jo3.CreateDate = DateTime.Now;
                //jo3.Credit = 400;
                //jo3.Debit = 0;
                //jo3.Description = "121";
                //jo3.JournalType = 'C';
                //jl.Add(jo3);

                //jo4.AccountId = Guid.Parse("E573B446-D70D-46A3-9AE3-9E7F8A3C71C7");//521
                //jo4.CreateDate = DateTime.Now;
                //jo4.Credit = 0;
                //jo4.Debit = 600;
                //jo4.Description = "521";
                //jo4.JournalType = 'C';
                //jl.Add(jo4);
                //List<ETL_GeneralJournal> rs = _ETL_DiaryJournal.JoinJournalList(session, jl);
                //ETL_Transaction transaction = new ETL_Transaction();
                //transaction.Amount = 0;
                //transaction.Code = "ABC";
                //transaction.CreateDate = DateTime.Now;
                //transaction.Description = "Description";
                //transaction.GeneralJournalList = rs;
                //transaction.IsBalanceForward = false;
                //transaction.IssuedDate = DateTime.Now;
                //transaction.OwnerOrgId = Guid.Empty;
                //transaction.TransactionId = Guid.NewGuid();
                //List<DJ_Fact> djList = _ETL_DiaryJournal.TransformToDiaryJournal(session, transaction);
                //List<ETL_GeneralJournal> rs = bo.JoinJournal(session, jl);
                //List<ETL_GeneralJournal> rs1 = bo.ClearJournalList(session, rs, Guid.Parse("C32268A6-5843-4199-A840-F6042B66686A"));
                //List<int> BusinessObjectTypeId = new List<int> { Constant.BusinessObjectType_Transaction,
                //                       Constant.BusinessObjectType_FinancialTransaction,
                //                       Constant.BusinessObjectType_InputInventoryCommandFinancialTransaction,
                //                       Constant.BusinessObjectType_OutputInventoryCommandFinancialTransaction,
                //                       Constant.BusinessObjectType_PaymentVoucherTransaction,
                //                       Constant.BusinessObjectType_PurcharseFinancialTransaction,
                //                       Constant.BusinessObjectType_ReceiptVoucherTransaction,
                //                       Constant.BusinessObjectType_SalesFinancialTransaction };

                //Guid refid = _ETLJobBO.ETLGetNextProcessObject(session, Guid.Parse("7688b739-f90e-43ac-8ccb-5c0663e30d0b"), BusinessObjectTypeId);
                #endregion

                bool checkDependency = true;
                bool checkService    = true;
                checkService = processHelper.IsExistMutex(Utility.Constant.Process_Running_Mutex_Name_ETLService);
                //Check service running
                //if (!checkService)
                //{
                //    Console.WriteLine("You can't start NAS_ETLMaster without ETLService.\n2s to close...");
                //    //Thread.Sleep(2000);
                //    return;
                //}

                checkDependency = processHelper.IsExistMutex(Utility.Constant.Process_Running_Mutex_Name_ETLMaster);
                if (checkDependency)
                {
                    Console.WriteLine("Another NAS_ETLMaster Process Is Running.\nCan't open more than one NAS_ETLMaster Process...\n2s to close");
                    return;
                }
                Mutex ETLMasterMutex = new Mutex(true, Utility.Constant.Process_Running_Mutex_Name_ETLMaster);
                Console.WriteLine("ETLMaster Running");
                bool running        = true;
                bool processRunning = false;
                do
                {
                    for (int i = 0; i < processName.Length; i++)
                    {
                        if (run[i])
                        {
                            processRunning = processHelper.IsExistMutex(Utility.Constant.Process_Running_Mutex_Name_ETLProcess + "_" + processName[i]);
                            if (!processRunning)
                            {
                                Console.WriteLine("Calling {0}", processName[i]);
                                CallProcess(processName[i]);
                            }
                        }
                    }
                    checkService = processHelper.IsExistMutex(Utility.Constant.Process_Running_Mutex_Name_ETLService);
                    running      = !processHelper.IsExistMutex(Utility.Constant.Process_Stop_Mutex_Name_ETLMaster) && running;// && checkService;
                    Thread.Sleep(10000);
                }while (running);

                ETLMasterMutex.Dispose();
                ETLMasterMutex.Close();
            }
            catch (Exception ex)
            {
                ETLUtils etlUtil = new ETLUtils();
                etlUtil.logs("d:/logs/history.txt", DateTime.Now.ToString() + " : Master Error:" + ex.Message);
                //Console.WriteLine(ex.ToString());
            }
            finally
            {
            }
        }
Example #8
0
        /// <summary>
        /// Ghi sổ tài chính phiếu kho
        /// </summary>
        /// <param name="_InventoryCommand"></param>
        public void BookFinancialEntriesOfInventoryCommand(Guid _InventoryCommand)
        {
            UnitOfWork uow = null;

            try
            {
                uow = XpoHelper.GetNewUnitOfWork();
                NAS.BO.Accounting.Journal.TransactionBOBase transactionBOBase = new TransactionBOBase();
                InventoryCommand command = uow.GetObjectByKey <InventoryCommand>(_InventoryCommand);
                if (command == null)
                {
                    throw new Exception("The InventoryCommand is not exist in system");
                }

                InventoryCommandBO CheckBO = new InventoryCommandBO();

                if (CheckBO.IsBookedEntriesForInventoryCommand(uow, _InventoryCommand))
                {
                    throw new Exception(string.Format("Không thể tiến hành vì Phiếu '{0}' đã hạch toán từ trước!", command.Code));
                }

                int  objectFinacialType = int.MinValue;
                int  objectItemType     = int.MinValue;
                Bill billArtifact       = GetSourceArtifactFromInventoryCommand(uow, command.InventoryCommandId);

                if (command.CommandType == INVENTORY_COMMAND_TYPE.IN)
                {
                    objectFinacialType = Utility.Constant.BusinessObjectType_InputInventoryCommandFinancialTransaction;
                    objectItemType     = Utility.Constant.BusinessObjectType_InputInventoryCommandItemTransaction;
                }
                else if (command.CommandType == INVENTORY_COMMAND_TYPE.OUT)
                {
                    objectFinacialType = Utility.Constant.BusinessObjectType_OutputInventoryCommandFinancialTransaction;
                    objectItemType     = Utility.Constant.BusinessObjectType_OutputInventoryCommandItemTransaction;
                }

                if (command.InventoryCommandFinancialTransactions != null && command.InventoryCommandFinancialTransactions.Count > 0)
                {
                    foreach (InventoryCommandFinancialTransaction t in command.InventoryCommandFinancialTransactions)
                    {
                        if (t.RowStatus != Utility.Constant.ROWSTATUS_BOOKED_ENTRY && t.RowStatus != Utility.Constant.ROWSTATUS_ACTIVE)
                        {
                            continue;
                        }

                        CanBookingEntryReturnValue rs = transactionBOBase.CanBookingEntry(t.TransactionId, true);
                        if (rs == CanBookingEntryReturnValue.DEBIT_CREDIT_ZERO)
                        {
                            throw new Exception(string.Format("Bút toán '{0}' không hợp lệ! Nợ = Có = 0", t.Code));
                        }
                        else if (rs == CanBookingEntryReturnValue.HAVE_NO_JOURNAL)
                        {
                            throw new Exception(string.Format("Bút toán '{0}' không chưa nhập định khoản", t.Code));
                        }
                        else if (rs == CanBookingEntryReturnValue.INVALID_TRANSACTION_STATUS)
                        {
                            throw new Exception(string.Format("Bút toán '{0}' có trạng thái không hợp lệ", t.Code));
                        }
                        else if (rs == CanBookingEntryReturnValue.MANY_SIDE)
                        {
                            throw new Exception(string.Format("Bút toán '{0}' không hợp lệ vì có nhiều tài khoản nợ và nhiều tài khoản có", t.Code));
                        }
                        else if (rs == CanBookingEntryReturnValue.NOT_BALANCED)
                        {
                            throw new Exception(string.Format("Bút toán '{0}' chưa cân bằng", t.Code));
                        }
                    }
                }

                foreach (InventoryCommandFinancialTransaction t in command.InventoryCommandFinancialTransactions)
                {
                    if (t.RowStatus != Utility.Constant.ROWSTATUS_BOOKED_ENTRY && t.RowStatus != Utility.Constant.ROWSTATUS_ACTIVE)
                    {
                        continue;
                    }

                    if (!transactionBOBase.BookEntry(uow, t.TransactionId))
                    {
                        throw new Exception("Xử lý ghi sổ phát sinh lỗi");
                    }
                    t.AccountingPeriodId = AccountingPeriodBO.GetAccountingPeriod(uow, t.IssueDate);
                    uow.FlushChanges();
                }

                foreach (InventoryTransaction t in command.InventoryCommandItemTransactions)
                {
                    if (t.RowStatus != Utility.Constant.ROWSTATUS_BOOKED_ENTRY && t.RowStatus != Utility.Constant.ROWSTATUS_ACTIVE)
                    {
                        continue;
                    }

                    if (billArtifact != null)
                    {
                        CurrencyBO      currencyBO             = new CurrencyBO();
                        COGSBO          CogsBO                 = new COGSBO();
                        COGSBussinessBO COGSInventoryCommandBO = new COGSBussinessBO();

                        foreach (InventoryJournal j in t.InventoryJournals)
                        {
                            #region setting COGS
                            if (command.CommandType == INVENTORY_COMMAND_TYPE.IN)
                            {
                                if (j.JournalType.Equals('A') && j.Debit > 0 && j.Credit == 0)
                                {
                                    BillItem billItem = billArtifact.BillItems.Where(
                                        i => i.RowStatus == Utility.Constant.ROWSTATUS_ACTIVE &&
                                        i.ItemUnitId == j.ItemUnitId).FirstOrDefault();

                                    if (billItem == null)
                                    {
                                        throw new Exception("The ItemUnit is not exist in Bill");
                                    }

                                    COGSInventoryCommandBO.CreateCOGS(
                                        uow,
                                        0,
                                        j.Debit,
                                        DateTime.Now,
                                        billItem.Price,
                                        t.IssueDate,
                                        t.InventoryTransactionId,
                                        command.RelevantInventoryId.InventoryId,
                                        j.ItemUnitId.ItemUnitId,
                                        currencyBO.GetDefaultCurrency(uow).CurrencyId);
                                }
                            }
                            else if (command.CommandType == INVENTORY_COMMAND_TYPE.OUT)
                            {
                                if (!j.JournalType.Equals('A') && j.Debit == 0 && j.Credit > 0)
                                {
                                    COGS LastCogs =
                                        CogsBO.GetLastCOGS(
                                            uow,
                                            j.ItemUnitId.ItemUnitId,
                                            currencyBO.GetDefaultCurrency(uow).CurrencyId,
                                            command.RelevantInventoryId.InventoryId);

                                    COGSInventoryCommandBO.CreateCOGS(
                                        uow,
                                        j.Credit,
                                        0,
                                        DateTime.Now,
                                        LastCogs == null ? 0 : LastCogs.COGSPrice,
                                        t.IssueDate,
                                        t.InventoryTransactionId,
                                        command.RelevantInventoryId.InventoryId,
                                        j.ItemUnitId.ItemUnitId,
                                        currencyBO.GetDefaultCurrency(uow).CurrencyId);
                                }
                            }
                            #endregion
                            //j.RowStatus = Utility.Constant.ROWSTATUS_BOOKED_ENTRY;
                        }
                        uow.FlushChanges();
                    }
                    t.AccountingPeriodId = AccountingPeriodBO.GetAccountingPeriod(uow, t.IssueDate);
                    t.RowStatus          = Utility.Constant.ROWSTATUS_BOOKED_ENTRY;
                }

                command.RowStatus = Utility.Constant.ROWSTATUS_BOOKED_ENTRY;

                foreach (InventoryTransaction t in command.InventoryCommandItemTransactions)
                {
                    if (t.RowStatus != Utility.Constant.ROWSTATUS_BOOKED_ENTRY && t.RowStatus != Utility.Constant.ROWSTATUS_ACTIVE)
                    {
                        continue;
                    }

                    BusinessObjectBO.CreateBusinessObject(uow,
                                                          objectItemType,
                                                          t.InventoryTransactionId,
                                                          t.IssueDate);
                }

                foreach (InventoryCommandFinancialTransaction tf in command.InventoryCommandFinancialTransactions)
                {
                    if (tf.RowStatus != Utility.Constant.ROWSTATUS_BOOKED_ENTRY && tf.RowStatus != Utility.Constant.ROWSTATUS_ACTIVE)
                    {
                        continue;
                    }

                    BusinessObjectBO.CreateBusinessObject(uow,
                                                          objectFinacialType,
                                                          tf.TransactionId,
                                                          tf.IssueDate);
                }
                uow.CommitChanges();
            }
            catch (Exception)
            {
                throw;
            }
            finally
            {
                if (uow != null)
                {
                    uow.Dispose();
                }
            }
        }
Example #9
0
        protected void panelBookingEntriesPopup_Callback(object sender, DevExpress.Web.ASPxClasses.CallbackEventArgsBase e)
        {
            string[] args    = e.Parameter.Split('|');
            string   command = args[0];

            NAS.BO.Invoice.PurchaseInvoiceBO purchaseInvoiceBO
                = new NAS.BO.Invoice.PurchaseInvoiceBO();
            switch (command)
            {
            case "Show":
                popupBookingEntriesForm.ShowOnPageLoad = true;
                BillId = Guid.Parse(args[1]);
                BindData();
                popupBookingEntriesForm.HeaderText = String.Format("Hạch toán phiếu mua hàng - {0}",
                                                                   purchaseInvoiceBO.GetBillById(session, BillId).Code);
                break;

            case "Book":
                popupBookingEntriesForm.ShowOnPageLoad = true;
                /*2014-02-13 ERP-1417 Duc.Vo INS START*/
                BusinessObjectBO BusinessObjectBO = new BusinessObjectBO();
                int objectInventoryFinacialType   = int.MinValue;
                //int objectInventoryItemType = int.MinValue;
                int objectInvoiceFinacialType = int.MinValue;
                int objectVoucherItemType     = int.MinValue;
                /*2014-02-13 ERP-1417 Duc.Vo INS END*/
                string messages = null;

                UnitOfWork uow = null;
                try
                {
                    uow = XpoHelper.GetNewUnitOfWork();
                    Bill bill = purchaseInvoiceBO.GetBillById(uow, BillId);

                    popupBookingEntriesForm.HeaderText = String.Format("Hạch toán phiếu mua hàng - {0}", bill.Code);

                    if (bill.RowStatus.Equals(Utility.Constant.ROWSTATUS_BOOKED_ENTRY))
                    {
                        messages = String.Format("Phiếu mua hàng '{0}' đã được ghi sổ", bill.Code);
                    }
                    else
                    {
                        IEnumerable <string> temp;
                        List <string>        errorList = new List <string>();
                        bool canBookEntriesTemp;
                        bool canBookEntries = true;

                        canBookEntriesTemp = gridviewBookingEntriesForm.CanBookEntries(out temp);
                        canBookEntries     = canBookEntries & canBookEntriesTemp;
                        errorList.AddRange(temp);

                        canBookEntriesTemp = gridviewVoucherBookingEntriesForm.CanBookEntries(out temp);
                        canBookEntries     = canBookEntries & canBookEntriesTemp;
                        errorList.AddRange(temp);

                        canBookEntriesTemp = gridviewInventoryBookingEntriesForm.CanBookEntries(out temp);
                        canBookEntries     = canBookEntries & canBookEntriesTemp;
                        errorList.AddRange(temp);

                        /*2014-02-13 ERP-1417 Duc.Vo INS START*/
                        if (bill is NAS.DAL.Invoice.PurchaseInvoice)
                        {
                            objectInventoryFinacialType = Utility.Constant.BusinessObjectType_InputInventoryCommandFinancialTransaction;
                            //objectInventoryItemType = Utility.Constant.BusinessObjectType_InputInventoryCommandItemTransaction;
                            objectInvoiceFinacialType = Utility.Constant.BusinessObjectType_PurcharseFinancialTransaction;
                            objectVoucherItemType     = Utility.Constant.BusinessObjectType_PaymentVoucherTransaction;
                        }
                        else if (bill is NAS.DAL.Invoice.SalesInvoice)
                        {
                            objectInventoryFinacialType = Utility.Constant.BusinessObjectType_OutputInventoryCommandFinancialTransaction;
                            //objectInventoryItemType = Utility.Constant.BusinessObjectType_OutputInventoryCommandItemTransaction;
                            objectInvoiceFinacialType = Utility.Constant.BusinessObjectType_SalesFinancialTransaction;
                            objectVoucherItemType     = Utility.Constant.BusinessObjectType_ReceiptVoucherTransaction;
                        }
                        /*2014-02-13 ERP-1417 Duc.Vo INS END*/

                        if (canBookEntries)
                        {
                            TransactionBOBase transactionBOBase = new TransactionBOBase();

                            bill.RowStatus = Utility.Constant.ROWSTATUS_BOOKED_ENTRY;
                            //Book entries
                            //var transactions = new XPCollection<Transaction>(uow,
                            //    gridviewBookingEntriesForm.GetDataSource());

                            var transactions1 = gridviewBookingEntriesForm.GetDataSource();
                            foreach (var transaction in transactions1)
                            {
                                transactionBOBase.BookEntry(uow, transaction.TransactionId);
                            }

                            var transactions2 = gridviewVoucherBookingEntriesForm.GetDataSource();
                            foreach (var transaction in transactions2)
                            {
                                transactionBOBase.BookEntry(uow, transaction.TransactionId);
                            }

                            var transactions3 = gridviewInventoryBookingEntriesForm.GetDataSource();
                            foreach (var transaction in transactions3)
                            {
                                transactionBOBase.BookEntry(uow, transaction.TransactionId);
                            }

                            /*2014-02-13 ERP-1417 Duc.Vo INS START*/
                            foreach (var transaction in transactions1)
                            {
                                BusinessObjectBO.CreateBusinessObject(uow,
                                                                      objectInvoiceFinacialType,
                                                                      transaction.TransactionId,
                                                                      transaction.IssueDate);
                            }

                            foreach (var transaction in transactions2)
                            {
                                BusinessObjectBO.CreateBusinessObject(uow,
                                                                      objectVoucherItemType,
                                                                      transaction.TransactionId,
                                                                      transaction.IssueDate);
                            }

                            foreach (var transaction in transactions3)
                            {
                                BusinessObjectBO.CreateBusinessObject(uow,
                                                                      objectInventoryFinacialType,
                                                                      transaction.TransactionId,
                                                                      transaction.IssueDate);
                            }
                            /*2014-02-13 ERP-1417 Duc.Vo INS END*/
                        }
                        else
                        {
                            foreach (var message in errorList)
                            {
                                messages += message + "\n";
                            }
                        }
                    }

                    uow.CommitChanges();

                    BindData();
                }
                catch (Exception)
                {
                    throw;
                }
                finally
                {
                    if (uow != null)
                    {
                        uow.Dispose();
                    }

                    if (messages != null)
                    {
                        panelBookingEntriesPopup.JSProperties["cpError"] = messages;
                    }
                }
                break;

            case "Cancel":
                popupBookingEntriesForm.ShowOnPageLoad = false;
                BillId = Guid.Empty;
                panelBookingEntriesPopup.JSProperties["cpEvent"] = "Closing";
                break;

            default:
                break;
            }
        }