Exemple #1
0
        public static bool IsExistCOGS(Session session, ItemUnit itemUnit, CurrencyType currencyType)
        {
            bool result = false;

            try
            {
                CriteriaOperator criteria_0 = new BinaryOperator("ItemUnitId", itemUnit, BinaryOperatorType.Equal);
                CriteriaOperator criteria_1 = new BinaryOperator("CurrencyId.CurrencyTypeId.CurrencyTypeId", currencyType.CurrencyTypeId, BinaryOperatorType.Equal);
                CriteriaOperator criteria   = new GroupOperator(GroupOperatorType.And, criteria_0, criteria_1);
                COGS             cogs       = session.FindObject <COGS>(criteria);
                if (cogs == null)
                {
                    result = false;
                }
                else
                {
                    result = true;
                }
            }
            catch (Exception)
            {
                return(result);
            }
            return(result);
        }
Exemple #2
0
        public COGS GetLastCOGSByIssueDate(Session session, Guid ItemUnitId, Guid CurrencyId, Guid InventoryId, DateTime IssueDate)
        {
            COGS result = null;

            try
            {
                CriteriaOperator filter = CriteriaOperator.And(
                    new BinaryOperator("ItemUnitId!Key", ItemUnitId),
                    new BinaryOperator("CurrencyId!Key", CurrencyId),
                    new BinaryOperator("InventoryId!Key", InventoryId),
                    new BinaryOperator("IssueDate", IssueDate, BinaryOperatorType.LessOrEqual));
                XPCollection <COGS> COGSList = new XPCollection <COGS>(session, filter);
                COGSList.Sorting.Add(new SortProperty("IssueDate", SortingDirection.Descending));
                COGSList.Sorting.Add(new SortProperty("CreateDate", SortingDirection.Descending));
                result = COGSList.FirstOrDefault();
                /////////////////////////////////////////
                if (result == null)
                {
                    filter = CriteriaOperator.And(
                        new BinaryOperator("ItemUnitId!Key", ItemUnitId),
                        new BinaryOperator("InventoryId!Key", InventoryId));
                    COGSList = new XPCollection <COGS>(session, filter);
                    COGSList.Sorting.Add(new SortProperty("IssuedDate", SortingDirection.Descending));
                    COGSList.Sorting.Add(new SortProperty("CreateDate", SortingDirection.Descending));
                    result = COGSList.FirstOrDefault();
                }
                /////////////////////////////////////////
            }
            catch (Exception)
            {
                return(result);
            }
            return(result);
        }
Exemple #3
0
        //public RuleExceptionSupplier(string textFormat) : this(textFormat, null)
        //{
        //}

        //public RuleExceptionSupplier(string textFormat, object defaultValue)
        //{
        //    //DefaultValueText = "Supplier";
        //    //TextFormat = textFormat;
        //    Value = defaultValue;
        //}

        public override bool Evaluate(object o)
        {
            if (o != null)
            {
                COGS cogs = o as COGS;
                List <DataGrdSupplierListSelection> condition = Value as List <DataGrdSupplierListSelection>;

                if (condition != null && condition.Count == 1 &&
                    condition[0].Code.Equals(Utility.Constant.NAAN_DEFAULT_CODE_SELECTEDALL))
                {
                    return(false);
                }

                foreach (DataGrdSupplierListSelection d in condition)
                {
                    foreach (ItemSupplier IS in cogs.ItemUnitId.ItemId.ItemSuppliers)
                    {
                        if (IS.SupplierOrgId.OrganizationId.Equals(d.OrganizationId))
                        {
                            return(false);
                        }
                    }
                }
            }
            return(true);
        }
Exemple #4
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="uow"></param>
        /// <param name="credit"></param>
        /// <param name="debit"></param>
        /// <param name="createDate"></param>
        /// <param name="price"></param>
        /// <param name="issueDate"></param>
        /// <param name="inventoryTransactionId"></param>
        /// <param name="inventoryId"></param>
        /// <param name="itemUnitId"></param>
        /// <param name="CurrencyId"></param>
        public void CreateCOGS(
            Session session,
            double credit,
            double debit,
            DateTime createDate,
            double price,
            DateTime issueDate,
            Guid inventoryTransactionId,
            Guid inventoryId,
            Guid itemUnitId,
            Guid currencyId)
        {
            InventoryTransaction transaction = session.GetObjectByKey <InventoryTransaction>(inventoryTransactionId);

            if (transaction == null)
            {
                throw new Exception("The InventoryTransaction is not exist in system");
            }

            NAS.DAL.Nomenclature.Inventory.Inventory inventory =
                session.GetObjectByKey <NAS.DAL.Nomenclature.Inventory.Inventory>(inventoryId);
            if (inventory == null)
            {
                throw new Exception("The Inventory is not exist in system");
            }

            ItemUnit itemUnit = session.GetObjectByKey <ItemUnit>(itemUnitId);

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

            Currency currency = session.GetObjectByKey <Currency>(currencyId);

            if (currency == null)
            {
                throw new Exception("The Currency is not exist in system");
            }

            COGS cogs = new COGS(session);

            cogs.Balance                = 0;
            cogs.Total                  = 0;
            cogs.Credit                 = credit;
            cogs.Debit                  = debit;
            cogs.CreateDate             = createDate;
            cogs.UpdateDate             = createDate;
            cogs.Price                  = price;
            cogs.Assumption             = 1;
            cogs.IssueDate              = issueDate;
            cogs.InventoryTransactionId = transaction;
            cogs.InventoryId            = inventory;
            cogs.ItemUnitId             = itemUnit;
            cogs.CurrencyId             = currency;
            cogs.Save();
        }
Exemple #5
0
        public void RepairCOGS(Session session, Guid COGSId)
        {
            COGS currentCOGS = session.GetObjectByKey <COGS>(COGSId);

            if (currentCOGS == null)
            {
                return;
            }
            if (currentCOGS.InventoryTransactionId is InventoryTransactionBalanceForward)
            {
                currentCOGS.Amount    = 0;
                currentCOGS.Total     = currentCOGS.Balance * currentCOGS.Price;
                currentCOGS.COGSPrice = currentCOGS.Price;
                currentCOGS.Save();
                return;
            }
            COGS previousCOGS = GetPreviousCOGS(session, COGSId);

            if (previousCOGS == null)
            {
                if (currentCOGS.Debit == 0 && currentCOGS.Credit != 0)
                {
                    currentCOGS.Balance = currentCOGS.Debit - currentCOGS.Credit;
                    currentCOGS.Save();
                    return;
                }
                else if (currentCOGS.Debit != 0 && currentCOGS.Credit == 0)
                {
                    currentCOGS.Balance   = currentCOGS.Debit - currentCOGS.Credit;
                    currentCOGS.Amount    = currentCOGS.Price * currentCOGS.Debit;
                    currentCOGS.Total     = currentCOGS.Balance * currentCOGS.Price;
                    currentCOGS.COGSPrice = currentCOGS.Price;
                    currentCOGS.Save();
                }
                else if (currentCOGS.Debit == 0 && currentCOGS.Credit == 0)
                {
                    currentCOGS.Amount    = currentCOGS.Price * currentCOGS.Balance;
                    currentCOGS.Total     = currentCOGS.Amount;
                    currentCOGS.COGSPrice = currentCOGS.Price;
                    currentCOGS.Save();
                }
            }
            else
            {
                currentCOGS.Balance = previousCOGS.Balance + currentCOGS.Debit - currentCOGS.Credit;
                if (currentCOGS.Debit == 0 && currentCOGS.Credit != 0)
                {
                    currentCOGS.Price = previousCOGS.COGSPrice;
                }
                currentCOGS.Amount    = currentCOGS.Price * (currentCOGS.Debit - currentCOGS.Credit);
                currentCOGS.Total     = previousCOGS.Total + currentCOGS.Amount;
                currentCOGS.COGSPrice = currentCOGS.Total / currentCOGS.Balance;
                currentCOGS.Save();
            }
        }
Exemple #6
0
        public COGS GetPreviousCOGS(Session session, Guid COGSId)
        {
            COGS result = null;

            try
            {
                COGS currentCOGS = session.GetObjectByKey <COGS>(COGSId);
                if (currentCOGS == null)
                {
                    return(null);
                }
                XPQuery <COGS>    COGSQuery = new XPQuery <COGS>(session);
                IQueryable <COGS> COGSCol   = (from c in COGSQuery
                                               where c.ItemUnitId == currentCOGS.ItemUnitId &&
                                               c.InventoryTransactionId.RowStatus >= 1 &&
                                               c.CurrencyId.CurrencyTypeId == currentCOGS.CurrencyId.CurrencyTypeId &&
                                               c.IssueDate == currentCOGS.IssueDate &&
                                               c.CreateDate < currentCOGS.CreateDate
                                               select c);
                if (COGSCol == null || COGSCol.Count() == 0)
                {
                    COGSCol = (from c in COGSQuery
                               where c.ItemUnitId == currentCOGS.ItemUnitId &&
                               c.InventoryTransactionId.RowStatus >= 1 &&
                               c.CurrencyId.CurrencyTypeId == currentCOGS.CurrencyId.CurrencyTypeId &&
                               c.IssueDate < currentCOGS.IssueDate
                               select c);
                    if (COGSCol == null || COGSCol.Count() == 0)
                    {
                        return(null);
                    }
                    else
                    {
                        result = COGSCol.OrderByDescending(c => c.IssueDate).FirstOrDefault();
                    }
                }
                else
                {
                    result = COGSCol.OrderByDescending(c => c.CreateDate).FirstOrDefault();
                }
            }
            catch (Exception)
            {
                return(result);
            }
            return(result);
        }
Exemple #7
0
        public COGS GetNextCOGS(Session session, Guid COGSId)
        {
            COGS result = null;

            try
            {
                XPCollection <COGS> NewerCOGSList = GetNewerCOGS(session, COGSId);
                NewerCOGSList.Sorting.Add(new SortProperty("IssuedDate", SortingDirection.Ascending));
                NewerCOGSList.Sorting.Add(new SortProperty("CreateDate", SortingDirection.Ascending));
                result = NewerCOGSList.FirstOrDefault();
            }
            catch (Exception)
            {
                return(result);
            }
            return(result);
        }
Exemple #8
0
        public XPCollection <COGS> GetNewerCOGS(Session session, Guid COGSId)
        {
            XPCollection <COGS> result = null;

            try
            {
                COGS     currentCOGS = session.GetObjectByKey <COGS>(COGSId);
                DateTime IssueDate   = currentCOGS.IssueDate;
                DateTime CreateDate  = currentCOGS.CreateDate;
                //RowStatus >=0
                CriteriaOperator criteria_RowStatus = new BinaryOperator("RowStatus", Constant.ROWSTATUS_ACTIVE, BinaryOperatorType.GreaterOrEqual);

                //Datetime (ia>ib||(ia=ib & ca>cb))
                CriteriaOperator criteria_DateTime_0 = new BinaryOperator("IssuedDate", IssueDate, BinaryOperatorType.Greater);

                CriteriaOperator criteria_IssueDate_2 = new BinaryOperator("IssuedDate", IssueDate, BinaryOperatorType.Equal);
                CriteriaOperator criteria_CreateDate  = new BinaryOperator("CreateDate", CreateDate, BinaryOperatorType.Greater);
                CriteriaOperator criteria_DateTime_1  = new GroupOperator(GroupOperatorType.And, criteria_IssueDate_2, criteria_CreateDate);

                CriteriaOperator criteria_DateTime = new GroupOperator(GroupOperatorType.Or, criteria_DateTime_0, criteria_DateTime_1);

                //<>ID
                CriteriaOperator criteria_Id = new BinaryOperator("COGSId", currentCOGS.COGSId, BinaryOperatorType.NotEqual);

                //#ItemUnit
                CriteriaOperator criteria_ItemUnit = new BinaryOperator("ItemUnitId", currentCOGS.ItemUnitId, BinaryOperatorType.Equal);

                //#Currency
                CriteriaOperator criteria_Currency = new BinaryOperator("CurrencyId", currentCOGS.CurrencyId, BinaryOperatorType.Equal);

                //Full Criteria
                CriteriaOperator criteria = new GroupOperator(GroupOperatorType.And, criteria_RowStatus, criteria_DateTime, criteria_Id, criteria_ItemUnit, criteria_Currency);

                result = new XPCollection <COGS>(session, criteria);
            }
            catch (Exception)
            {
                return(result);
            }
            return(result);
        }
Exemple #9
0
        public void CreateInitCOGS(Session session, ItemUnit itemUnit, CurrencyType currencyType)
        {
            if (IsExistCOGS(session, itemUnit, currencyType))
            {
                return;
            }
            COGS result = new COGS(session);

            try
            {
                CriteriaOperator criteria   = new BinaryOperator("IsDefault", true, BinaryOperatorType.Equal);
                CriteriaOperator criteria_0 = new BinaryOperator("Code", "NAAN_DEFAULT", BinaryOperatorType.Equal);
                Currency         currency   = new XPCollection <Currency>(session, currencyType.Currencies, criteria).FirstOrDefault();
                if (currency != null)
                {
                    result.Amount      = 0;
                    result.Assumption  = 1;
                    result.Balance     = 0;
                    result.COGSPrice   = 0;
                    result.CreateDate  = DateTime.Now;
                    result.Credit      = 0;
                    result.CurrencyId  = currency;
                    result.Debit       = 0;
                    result.Description = "";
                    result.InventoryId = session.FindObject <NAS.DAL.Nomenclature.Inventory.Inventory>(criteria_0);
                    result.IsOriginal  = true;
                    result.IssueDate   = DateTime.Now;
                    result.ItemUnitId  = itemUnit;
                    result.Price       = 0;
                    result.Total       = 0;
                    result.UpdateDate  = DateTime.Now;
                    result.Save();
                }
            }
            catch (Exception)
            {
                return; // result;
            }
            return;     // result;
        }
Exemple #10
0
        //public RuleExceptionItemUnit(string textFormat) : this(textFormat, null)
        //{
        //}

        //public RuleExceptionItemUnit(string textFormat, object defaultValue)
        //{
        //    DefaultValueText = "ItemUnit";
        //    TextFormat = textFormat;
        //    Value = defaultValue;
        //}

        public override bool Evaluate(object o)
        {
            if (o != null)
            {
                COGS cogs = o as COGS;
                List <DataGrdItemUnitListSelection> condition = Value as List <DataGrdItemUnitListSelection>;

                if (condition != null && condition.Count == 1 &&
                    condition[0].RowStatus == Utility.Constant.ROWSTATUS_DEFAULT_SELECTEDALL)
                {
                    return(false);
                }

                foreach (DataGrdItemUnitListSelection d in condition)
                {
                    if (d.ItemUnitId.Equals(cogs.ItemUnitId.ItemUnitId))
                    {
                        return(false);
                    }
                }
            }
            return(true);
        }
Exemple #11
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();
                }
            }
        }