示例#1
0
        public void DeleteInventoryPlanningJournal(Session session, Guid journalId)
        {
            try
            {
                InventoryJournal journal    = session.GetObjectByKey <InventoryJournal>(journalId);
                CriteriaOperator criteria_0 = new BinaryOperator("RowStatus", Constant.ROWSTATUS_ACTIVE, BinaryOperatorType.GreaterOrEqual);
                CriteriaOperator criteria_1 = new BinaryOperator("Debit", journal.Credit, BinaryOperatorType.Equal);
                CriteriaOperator criteria_2 = new BinaryOperator("InventoryTransactionId", journal.InventoryTransactionId, BinaryOperatorType.Equal);
                CriteriaOperator criteria_3 = new BinaryOperator("ItemUnitId", journal.ItemUnitId, BinaryOperatorType.Equal);
                CriteriaOperator criteria_4 = new BinaryOperator("LotId", journal.LotId, BinaryOperatorType.Equal);
                CriteriaOperator criteria_5 = new BinaryOperator("InventoryId", journal.InventoryId, BinaryOperatorType.Equal);
                CriteriaOperator criteria_6 = new BinaryOperator("JournalType", journal.JournalType, BinaryOperatorType.Equal);
                CriteriaOperator criteria   = new GroupOperator(GroupOperatorType.And, criteria_0, criteria_1, criteria_2, criteria_3, criteria_4, criteria_5, criteria_6);

                InventoryJournal DebitJournal = session.FindObject <InventoryJournal>(criteria);

                journal.RowStatus = Constant.ROWSTATUS_DELETED;
                journal.Save();
                if (DebitJournal != null)
                {
                    DebitJournal.RowStatus = Constant.ROWSTATUS_DELETED;
                    DebitJournal.Save();
                }
            }
            catch (Exception)
            {
                throw;
            }
        }
示例#2
0
        /// <summary>
        /// Tìm đối tượng CMS object của InventoryJournal
        /// </summary>
        /// <param name="InventoryJournalId"></param>
        /// <param name="type"></param>
        /// <returns></returns>
        public NAS.DAL.CMS.ObjectDocument.Object GetCMSInventoryJournal(
            Guid InventoryJournalId,
            ObjectTypeEnum type)
        {
            if (type != ObjectTypeEnum.INVENTORY_IN && type != ObjectTypeEnum.INVENTORY_MOVE && type != ObjectTypeEnum.INVENTORY_OUT)
            {
                throw new Exception("The Type is invalid");
            }

            if (InventoryJournalId != null && !InventoryJournalId.Equals(Guid.Empty))
            {
                NAS.DAL.CMS.ObjectDocument.Object cmsObject = null;
                using (UnitOfWork uow = XpoHelper.GetNewUnitOfWork())
                {
                    InventoryJournal       journal       = uow.GetObjectByKey <InventoryJournal>(InventoryJournalId);
                    InventoryJournalObject journalObject =
                        journal.InventoryJournalObjects.FirstOrDefault();
                    if (journalObject == null)
                    {
                        ObjectBO objectBO = new ObjectBO();
                        cmsObject = objectBO.CreateCMSObject(uow, type);
                        InventoryJournalObject newJournalObject = new InventoryJournalObject(uow)
                        {
                            ObjectId           = cmsObject,
                            InventoryJournalId = journal
                        };

                        NAS.DAL.CMS.ObjectDocument.ObjectType objectType
                            = uow.FindObject <ObjectType>(new BinaryOperator("Name", Enum.GetName(typeof(ObjectTypeEnum), type)));

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

                        InventoryJournalCustomType newJournalCustomType = new InventoryJournalCustomType(uow)
                        {
                            ObjectTypeId       = objectType,
                            InventoryJournalId = journal
                        };

                        newJournalCustomType.Save();

                        uow.CommitChanges();
                    }
                    else
                    {
                        cmsObject = journalObject.ObjectId;
                    }
                    return(cmsObject);
                }
            }
            else
            {
                return(null);
            }
        }
 private async Task InsertInventoryJournal(Product product, Shipment shipment, ShipmentItem shipmentItem)
 {
     var ij = new InventoryJournal {
         CreateDateUtc = DateTime.UtcNow,
         ObjectType    = typeof(Shipment).Name,
         ObjectId      = shipment.Id,
         PositionId    = shipmentItem.Id,
         Attributes    = shipmentItem.Attributes,
         ProductId     = product.Id,
         WarehouseId   = shipmentItem.WarehouseId,
         Reference     = shipment.ShipmentNumber.ToString(),
         Comments      = $"Shipment - {shipment.TrackingNumber}",
         OutQty        = shipmentItem.Quantity
     };
     await _inventoryJournalRepository.InsertAsync(ij);
 }
示例#4
0
        public Guid CreateInventoryPlanningJournal(Session session, Guid transactionId, Guid itemUnitId, double amount, Guid lotId, Guid inventoryId, string description)
        {
            Guid result = Guid.Empty;

            try
            {
                InventoryTransaction transaction = session.GetObjectByKey <InventoryTransaction>(transactionId);
                ItemUnit             itemUnit    = session.GetObjectByKey <ItemUnit>(itemUnitId);
                Lot lot = session.GetObjectByKey <Lot>(lotId);
                NAS.DAL.Nomenclature.Inventory.Inventory inventory = session.GetObjectByKey <NAS.DAL.Nomenclature.Inventory.Inventory>(inventoryId);
                CriteriaOperator filter  = new BinaryOperator("Code", DefaultAccountEnum.OWNER_INVENTORY, BinaryOperatorType.Equal);
                Account          account = session.FindObject <Account>(filter);

                InventoryJournal creditJournal = new InventoryJournal(session);
                creditJournal.JournalType            = Constant.PLANNING_JOURNAL;
                creditJournal.InventoryTransactionId = transaction;
                creditJournal.AccountId   = account;
                creditJournal.ItemUnitId  = itemUnit;
                creditJournal.LotId       = lot;
                creditJournal.InventoryId = inventory;
                creditJournal.CreateDate  = DateTime.Now;
                creditJournal.Credit      = amount;
                creditJournal.Description = description;
                creditJournal.RowStatus   = Constant.ROWSTATUS_ACTIVE;
                creditJournal.Save();

                InventoryJournal debitJournal = new InventoryJournal(session);
                debitJournal.JournalType            = Constant.PLANNING_JOURNAL;
                debitJournal.InventoryTransactionId = transaction;
                debitJournal.AccountId   = account;
                debitJournal.ItemUnitId  = itemUnit;
                debitJournal.LotId       = lot;
                debitJournal.InventoryId = inventory;
                debitJournal.CreateDate  = DateTime.Now;
                debitJournal.Debit       = amount;
                debitJournal.Description = description;
                debitJournal.RowStatus   = Constant.ROWSTATUS_ACTIVE;
                debitJournal.Save();
            }
            catch (Exception)
            {
                throw;
            }
            return(result);
        }
示例#5
0
        public void UpdateInventoryPlanningJournal(Session session, Guid journalId, Guid itemUnitId, double amount, Guid lotId, Guid inventoryId, string description)
        {
            try
            {
                InventoryJournal journal    = session.GetObjectByKey <InventoryJournal>(journalId);
                CriteriaOperator criteria_0 = new BinaryOperator("RowStatus", Constant.ROWSTATUS_ACTIVE, BinaryOperatorType.GreaterOrEqual);
                CriteriaOperator criteria_1 = new BinaryOperator("Debit", amount, BinaryOperatorType.Equal);
                CriteriaOperator criteria_2 = new BinaryOperator("InventoryTransactionId", journal.InventoryTransactionId, BinaryOperatorType.Equal);
                CriteriaOperator criteria_3 = new BinaryOperator("ItemUnitId", journal.ItemUnitId, BinaryOperatorType.Equal);
                CriteriaOperator criteria_4 = new BinaryOperator("LotId", journal.LotId, BinaryOperatorType.Equal);
                CriteriaOperator criteria_5 = new BinaryOperator("InventoryId", journal.InventoryId, BinaryOperatorType.Equal);
                CriteriaOperator criteria_6 = new BinaryOperator("JournalType", journal.JournalType, BinaryOperatorType.Equal);
                CriteriaOperator criteria   = new GroupOperator(GroupOperatorType.And, criteria_0, criteria_1, criteria_2, criteria_3, criteria_4, criteria_5, criteria_6);

                InventoryJournal DebitJournal = session.FindObject <InventoryJournal>(criteria);

                journal.JournalType = Constant.PLANNING_JOURNAL;
                journal.InventoryId = session.GetObjectByKey <NAS.DAL.Nomenclature.Inventory.Inventory>(inventoryId);
                journal.Credit      = amount;
                journal.ItemUnitId  = session.GetObjectByKey <ItemUnit>(itemUnitId);
                journal.LotId       = session.GetObjectByKey <Lot>(lotId);
                journal.Debit       = 0;
                journal.Description = description;
                journal.Save();

                DebitJournal.JournalType = Constant.PLANNING_JOURNAL;
                DebitJournal.InventoryId = session.GetObjectByKey <NAS.DAL.Nomenclature.Inventory.Inventory>(inventoryId);
                DebitJournal.Credit      = 0;
                DebitJournal.ItemUnitId  = session.GetObjectByKey <ItemUnit>(itemUnitId);
                DebitJournal.LotId       = session.GetObjectByKey <Lot>(lotId);
                DebitJournal.Debit       = amount;
                DebitJournal.Description = description;
                DebitJournal.Save();
            }
            catch (Exception)
            {
                throw;
            }
        }
        private async Task ReverseBookedInventory(Product product, InventoryJournal inventoryJournal)
        {
            //standard manage stock
            if (product.ManageInventoryMethodId == ManageInventoryMethod.ManageStock)
            {
                if (product.UseMultipleWarehouses)
                {
                    var pwi = product.ProductWarehouseInventory.FirstOrDefault(x => x.WarehouseId == inventoryJournal.WarehouseId);
                    if (pwi == null)
                    {
                        return;
                    }

                    pwi.StockQuantity    += inventoryJournal.OutQty;
                    pwi.ReservedQuantity += inventoryJournal.OutQty;
                    if (pwi.ReservedQuantity < 0)
                    {
                        pwi.ReservedQuantity = 0;
                    }

                    await _productRepository.UpdateToSet(product.Id, x => x.ProductWarehouseInventory, z => z.Id, pwi.Id, pwi);

                    await _productRepository.UpdateField(product.Id, x => x.UpdatedOnUtc, DateTime.UtcNow);
                }
                else
                {
                    product.StockQuantity    += inventoryJournal.OutQty;
                    product.ReservedQuantity += inventoryJournal.OutQty;
                    await UpdateStockProduct(product);
                }
            }

            //manage stock by attributes
            if (product.ManageInventoryMethodId == ManageInventoryMethod.ManageStockByAttributes)
            {
                var combination = _productAttributeParser.FindProductAttributeCombination(product, inventoryJournal.Attributes);
                if (combination == null)
                {
                    return;
                }

                if (!product.UseMultipleWarehouses)
                {
                    combination.StockQuantity    += inventoryJournal.OutQty;
                    combination.ReservedQuantity += inventoryJournal.OutQty;
                    if (combination.ReservedQuantity < 0)
                    {
                        combination.ReservedQuantity = 0;
                    }

                    product.StockQuantity    = product.ProductAttributeCombinations.Sum(x => x.StockQuantity);
                    product.ReservedQuantity = product.ProductAttributeCombinations.Sum(x => x.ReservedQuantity);

                    await _productRepository.UpdateToSet(product.Id, x => x.ProductAttributeCombinations, z => z.Id, combination.Id, combination);

                    await _productRepository.UpdateField(product.Id, x => x.UpdatedOnUtc, DateTime.UtcNow);

                    await UpdateStockProduct(product);
                }
                else
                {
                    var pwi = combination.WarehouseInventory.FirstOrDefault(x => x.WarehouseId == inventoryJournal.WarehouseId);
                    if (pwi == null)
                    {
                        return;
                    }

                    pwi.StockQuantity    += inventoryJournal.OutQty;
                    pwi.ReservedQuantity += inventoryJournal.OutQty;

                    if (pwi.ReservedQuantity < 0)
                    {
                        pwi.ReservedQuantity = 0;
                    }

                    combination.StockQuantity    = combination.WarehouseInventory.Sum(x => x.StockQuantity);
                    combination.ReservedQuantity = combination.WarehouseInventory.Sum(x => x.StockQuantity);
                    product.StockQuantity        = product.ProductAttributeCombinations.Sum(x => x.StockQuantity);
                    product.ReservedQuantity     = product.ProductAttributeCombinations.Sum(x => x.ReservedQuantity);

                    await _productRepository.UpdateToSet(product.Id, x => x.ProductAttributeCombinations, z => z.Id, combination.Id, combination);

                    await _productRepository.UpdateField(product.Id, x => x.UpdatedOnUtc, DateTime.UtcNow);
                    await UpdateStockProduct(product);
                }
            }

            await _inventoryJournalRepository.DeleteAsync(inventoryJournal);
        }
示例#7
0
        public ETL_GoodsInInventoryTransaction ExtractTransaction(Session session, Guid TransactionId, string AccountCode)
        {
            ETL_GoodsInInventoryTransaction resultTransaction = null;

            try
            {
                bool             Acceptable = false;
                CriteriaOperator criteria_RowStatus
                    = new BinaryOperator("RowStatus", Constant.ROWSTATUS_ACTIVE, BinaryOperatorType.GreaterOrEqual);
                CriteriaOperator criteria_Code = new BinaryOperator("Code", AccountCode, BinaryOperatorType.Equal);
                CriteriaOperator criteria      = CriteriaOperator.And(criteria_Code, criteria_RowStatus);
                Account          account       = session.FindObject <Account>(criteria);

                Organization defaultOrg       = Organization.GetDefault(session, OrganizationEnum.NAAN_DEFAULT);
                Organization currentDeployOrg = Organization.GetDefault(session, OrganizationEnum.QUASAPHARCO);
                Account      defaultAccount   = Account.GetDefault(session, DefaultAccountEnum.NAAN_DEFAULT);
                Transaction  transaction      = session.GetObjectByKey <Transaction>(TransactionId);
                if (transaction == null)
                {
                    return(resultTransaction);
                }

                resultTransaction = new ETL_GoodsInInventoryTransaction();
                if (currentDeployOrg != null)
                {
                    resultTransaction.OwnerOrgId = currentDeployOrg.OrganizationId;
                }
                else
                {
                    resultTransaction.OwnerOrgId = defaultOrg.OrganizationId;
                }

                resultTransaction.TransactionId      = transaction.TransactionId;
                resultTransaction.Amount             = transaction.Amount;
                resultTransaction.Code               = transaction.Code;
                resultTransaction.CreateDate         = transaction.CreateDate;
                resultTransaction.Description        = transaction.Description;
                resultTransaction.IsBalanceForward   = (transaction is BalanceForwardTransaction);
                resultTransaction.IssuedDate         = transaction.IssueDate;
                resultTransaction.UpdateDate         = transaction.UpdateDate;
                resultTransaction.GeneralJournalList = new List <ETL_GeneralJournal>();

                double           numOfItem = 0;
                InventoryCommand command   = null;
                if (transaction != null)
                {
                    InventoryJournal inventoryJournal = null;
                    try
                    {
                        inventoryJournal = transaction.InventoryJournalFinancials.FirstOrDefault().InventoryJournalId;
                        numOfItem        = inventoryJournal.Debit > 0 ? inventoryJournal.Debit : inventoryJournal.Credit;
                        command          = (inventoryJournal.InventoryTransactionId as InventoryCommandItemTransaction).InventoryCommandId;
                    }
                    catch (Exception)
                    {
                        numOfItem = 0;
                        command   = null;
                    }
                }

                resultTransaction.Quantity   = numOfItem;
                resultTransaction.ArtifactId = command == null ? Guid.Empty : command.InventoryCommandId;

                if (numOfItem != 0)
                {
                    resultTransaction.Price = (decimal)resultTransaction.Amount / (decimal)numOfItem;
                }
                else
                {
                    resultTransaction.Price = 0;
                }

                foreach (GeneralJournal journal
                         in
                         transaction.GeneralJournals.Where(i => i.RowStatus == Constant.ROWSTATUS_BOOKED_ENTRY || i.RowStatus == Constant.ROWSTATUS_ACTIVE))
                {
                    if ((journal.Debit + journal.Credit) == 0)
                    {
                        continue;
                    }

                    ETL_GeneralJournal tempJournal = new ETL_GeneralJournal();
                    if (journal.AccountId != null)
                    {
                        tempJournal.AccountId = journal.AccountId.AccountId;
                    }
                    else
                    {
                        tempJournal.AccountId = defaultAccount.AccountId;
                    }

                    tempJournal.CreateDate = journal.CreateDate;
                    tempJournal.Credit     = journal.Credit;
                    if (journal.CurrencyId == null)
                    {
                        tempJournal.CurrencyId = CurrencyBO.DefaultCurrency(session).CurrencyId;
                    }
                    else
                    {
                        tempJournal.CurrencyId = journal.CurrencyId.CurrencyId;
                    }
                    tempJournal.Debit            = journal.Debit;
                    tempJournal.Description      = journal.Description;
                    tempJournal.GeneralJournalId = journal.GeneralJournalId;
                    tempJournal.JournalType      = journal.JournalType;
                    resultTransaction.GeneralJournalList.Add(tempJournal);

                    Account tmpAccount       = session.GetObjectByKey <Account>(tempJournal.AccountId);
                    bool    flgIsLeafAccount = tmpAccount.Accounts == null || tmpAccount.Accounts.Count == 0 ? true : false;

                    if (flgIsLeafAccount &&
                        accountingBO.IsRelateAccount(session, account.AccountId, tempJournal.AccountId))
                    {
                        Acceptable = true;
                    }
                }
                if (!Acceptable)
                {
                    return(null);
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            resultTransaction.AccountCode = AccountCode;
            return(resultTransaction);
        }
示例#8
0
        private async Task ReverseBookedInventory(Product product, InventoryJournal inventoryJournal)
        {
            //standard manage stock
            if (product.ManageInventoryMethodId == ManageInventoryMethod.ManageStock)
            {
                if (product.UseMultipleWarehouses)
                {
                    var pwi = product.ProductWarehouseInventory.FirstOrDefault(x => x.WarehouseId == inventoryJournal.WarehouseId);
                    if (pwi == null)
                    {
                        return;
                    }

                    pwi.StockQuantity    += inventoryJournal.OutQty;
                    pwi.ReservedQuantity += inventoryJournal.OutQty;

                    var builder = Builders <Product> .Filter;
                    var filter  = builder.Eq(x => x.Id, product.Id);
                    filter &= builder.Where(x => x.ProductWarehouseInventory.Any(y => y.WarehouseId == pwi.WarehouseId));

                    var update = Builders <Product> .Update
                                 .Set(x => x.ProductWarehouseInventory.ElementAt(-1), pwi)
                                 .CurrentDate("UpdatedOnUtc");

                    await _productRepository.Collection.UpdateOneAsync(filter, update);
                }
                else
                {
                    product.StockQuantity    += inventoryJournal.OutQty;
                    product.ReservedQuantity += inventoryJournal.OutQty;
                    await UpdateStockProduct(product);
                }
            }

            //manage stock by attributes
            if (product.ManageInventoryMethodId == ManageInventoryMethod.ManageStockByAttributes)
            {
                var combination = _productAttributeParser.FindProductAttributeCombination(product, inventoryJournal.Attributes);
                if (combination == null)
                {
                    return;
                }

                if (!product.UseMultipleWarehouses)
                {
                    combination.StockQuantity    += inventoryJournal.OutQty;
                    combination.ReservedQuantity += inventoryJournal.OutQty;
                    product.StockQuantity         = product.ProductAttributeCombinations.Sum(x => x.StockQuantity);
                    product.ReservedQuantity      = product.ProductAttributeCombinations.Sum(x => x.ReservedQuantity);

                    var builder = Builders <Product> .Filter;
                    var filter  = builder.Eq(x => x.Id, product.Id);
                    filter &= builder.ElemMatch(x => x.ProductAttributeCombinations, y => y.Id == combination.Id);
                    var update = Builders <Product> .Update
                                 .Set(x => x.StockQuantity, product.StockQuantity)
                                 .Set(x => x.ReservedQuantity, product.ReservedQuantity)
                                 .Set("ProductAttributeCombinations.$.StockQuantity", combination.StockQuantity)
                                 .Set("ProductAttributeCombinations.$.ReservedQuantity", combination.ReservedQuantity)
                                 .CurrentDate("UpdatedOnUtc");

                    await _productRepository.Collection.UpdateManyAsync(filter, update);
                }
                else
                {
                    var pwi = combination.WarehouseInventory.FirstOrDefault(x => x.WarehouseId == inventoryJournal.WarehouseId);
                    if (pwi == null)
                    {
                        return;
                    }

                    pwi.StockQuantity    += inventoryJournal.OutQty;
                    pwi.ReservedQuantity += inventoryJournal.OutQty;

                    combination.StockQuantity    = combination.WarehouseInventory.Sum(x => x.StockQuantity);
                    combination.ReservedQuantity = combination.WarehouseInventory.Sum(x => x.StockQuantity);
                    product.StockQuantity        = product.ProductAttributeCombinations.Sum(x => x.StockQuantity);
                    product.ReservedQuantity     = product.ProductAttributeCombinations.Sum(x => x.ReservedQuantity);

                    var builder = Builders <Product> .Filter;
                    var filter  = builder.Eq(x => x.Id, product.Id);
                    filter &= builder.ElemMatch(x => x.ProductAttributeCombinations, y => y.Id == combination.Id);
                    var update = Builders <Product> .Update
                                 .Set(x => x.StockQuantity, product.StockQuantity)
                                 .Set(x => x.ReservedQuantity, product.ReservedQuantity)
                                 .Set("ProductAttributeCombinations.$.StockQuantity", combination.StockQuantity)
                                 .Set("ProductAttributeCombinations.$.ReservedQuantity", combination.ReservedQuantity)
                                 .Set("ProductAttributeCombinations.$.WarehouseInventory", combination.WarehouseInventory)
                                 .CurrentDate("UpdatedOnUtc");

                    await _productRepository.Collection.UpdateManyAsync(filter, update);
                }
            }

            await _inventoryJournalRepository.DeleteAsync(inventoryJournal);
        }
示例#9
0
        /// <summary>
        /// Tạo dữ liệu cho CMS Object Inventory
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="uow"></param>
        /// <param name="InventoryObjectId"></param>
        /// <param name="CMSObjectType"></param>
        public void PopulateCMSObjecForInventoryObject <T>(
            UnitOfWork uow,
            Guid InventoryObjectId,
            DAL.CMS.ObjectDocument.ObjectTypeEnum CMSObjectType)
        {
            ObjectBO bo = new ObjectBO();

            if (typeof(T).Equals(typeof(NAS.DAL.Inventory.Command.InventoryCommand)))
            {
                NAS.DAL.Inventory.Command.InventoryCommand inventoryObject =
                    uow.GetObjectByKey <NAS.DAL.Inventory.Command.InventoryCommand>(InventoryObjectId);
                NAS.DAL.CMS.ObjectDocument.Object o   = bo.CreateCMSObject(uow, CMSObjectType);
                InventoryCommandObject            ICO = new InventoryCommandObject(uow);
                ICO.ObjectId           = o;
                ICO.InventoryCommandId = (inventoryObject as NAS.DAL.Inventory.Command.InventoryCommand);
                ICO.Save();
                NAS.DAL.CMS.ObjectDocument.ObjectType type =
                    NAS.DAL.CMS.ObjectDocument.ObjectType.GetDefault(uow, CMSObjectType);
                if (type == null)
                {
                    throw new Exception("The ObjectType is not exist in system");
                }

                InventoryCommandCustomType ICCT = new InventoryCommandCustomType(uow);
                ICCT.ObjectTypeId       = type;
                ICCT.InventoryCommandId = (inventoryObject as NAS.DAL.Inventory.Command.InventoryCommand);
                ICCT.Save();
            }
            else if (typeof(T).Equals(typeof(NAS.DAL.Inventory.Command.InventoryCommandItemTransaction)))
            {
                InventoryCommandItemTransaction transactionObject =
                    uow.GetObjectByKey <InventoryCommandItemTransaction>(InventoryObjectId);
                NAS.DAL.CMS.ObjectDocument.Object o   = bo.CreateCMSObject(uow, CMSObjectType);
                InventoryTransactionObject        ITO = new InventoryTransactionObject(uow);
                ITO.ObjectId = o;
                ITO.InventoryTransactionId = (transactionObject as NAS.DAL.Inventory.Journal.InventoryTransaction);
                ITO.Save();

                NAS.DAL.CMS.ObjectDocument.ObjectType type =
                    NAS.DAL.CMS.ObjectDocument.ObjectType.GetDefault(uow, CMSObjectType);
                InventoryTransactionCustomType ITCT = new InventoryTransactionCustomType(uow);
                ITCT.ObjectTypeId           = type;
                ITCT.InventoryTransactionId = (transactionObject as NAS.DAL.Inventory.Journal.InventoryTransaction);
                ITCT.Save();
            }
            else if (typeof(T).Equals(typeof(NAS.DAL.Inventory.Command.InventoryCommandFinancialTransaction)))
            {
                InventoryCommandFinancialTransaction transactionObject =
                    uow.GetObjectByKey <InventoryCommandFinancialTransaction>(InventoryObjectId);
                NAS.DAL.CMS.ObjectDocument.Object o = bo.CreateCMSObject(uow, CMSObjectType);
                TransactionObject TO = new TransactionObject(uow);
                TO.ObjectId      = o;
                TO.TransactionId = (transactionObject as Transaction);
                TO.Save();
            }
            else if (typeof(T).Equals(typeof(NAS.DAL.Accounting.Journal.GeneralJournal)))
            {
                GeneralJournal journalObject =
                    uow.GetObjectByKey <GeneralJournal>(InventoryObjectId);
                NAS.DAL.CMS.ObjectDocument.Object o = bo.CreateCMSObject(uow, CMSObjectType);
                GeneralJournalObject GJO            = new GeneralJournalObject(uow);
                GJO.ObjectId         = o;
                GJO.GeneralJournalId = (journalObject as GeneralJournal);
                GJO.Save();
                NAS.DAL.CMS.ObjectDocument.ObjectType type =
                    NAS.DAL.CMS.ObjectDocument.ObjectType.GetDefault(uow, CMSObjectType);
                GeneralJournalCustomType GJCT = new GeneralJournalCustomType(uow);
                GJCT.ObjectTypeId     = type;
                GJCT.GeneralJournalId = (journalObject as GeneralJournal);
                GJCT.Save();
            }
            else if (typeof(T).Equals(typeof(NAS.DAL.Inventory.Journal.InventoryJournal)))
            {
                InventoryJournal journalObject =
                    uow.GetObjectByKey <InventoryJournal>(InventoryObjectId);
                NAS.DAL.CMS.ObjectDocument.Object o   = bo.CreateCMSObject(uow, CMSObjectType);
                InventoryJournalObject            ITO = new InventoryJournalObject(uow);
                ITO.ObjectId           = o;
                ITO.InventoryJournalId = (journalObject as InventoryJournal);
                ITO.Save();

                NAS.DAL.CMS.ObjectDocument.ObjectType type =
                    NAS.DAL.CMS.ObjectDocument.ObjectType.GetDefault(uow, CMSObjectType);
                InventoryJournalCustomType ITCT = new InventoryJournalCustomType(uow);
                ITCT.ObjectTypeId       = type;
                ITCT.InventoryJournalId = (journalObject as InventoryJournal);
                ITCT.Save();
            }
            uow.FlushChanges();
        }
示例#10
0
        public ETL_TransactionS04a6DN ExtractTransaction(Session session, Guid TransactionId, string AccountCode)
        {
            ETL_TransactionS04a6DN resultTransaction = null;

            try
            {
                bool             Acceptable             = false;
                Util             util                   = new Util();
                InventoryCommand command                = null;
                NAS.DAL.Invoice.PurchaseInvoice invoice = null;
                CriteriaOperator criteria_RowStatus     = new BinaryOperator("RowStatus", Constant.ROWSTATUS_ACTIVE, BinaryOperatorType.GreaterOrEqual);
                CriteriaOperator criteria_Code          = new BinaryOperator("Code", AccountCode, BinaryOperatorType.Equal);
                CriteriaOperator criteria               = CriteriaOperator.And(criteria_Code, criteria_RowStatus);
                Account          account                = session.FindObject <Account>(criteria);
                Organization     defaultOrg             = Organization.GetDefault(session, OrganizationEnum.NAAN_DEFAULT);
                Organization     currentDeployOrg       = Organization.GetDefault(session, OrganizationEnum.QUASAPHARCO);
                Account          defaultAccount         = Account.GetDefault(session, DefaultAccountEnum.NAAN_DEFAULT);
                Transaction      transaction            = session.GetObjectByKey <Transaction>(TransactionId);
                if (transaction == null)
                {
                    return(resultTransaction);
                }

                try
                {
                    if (transaction is InventoryCommandFinancialTransaction)
                    {
                        command = (((transaction as InventoryCommandFinancialTransaction).
                                    InventoryJournalFinancials.FirstOrDefault().InventoryJournalId.InventoryTransactionId)
                                   as InventoryCommandItemTransaction).InventoryCommandId;

                        invoice = GetAllocatedPurchaseInvoiceByInventoryCommand(session, command.InventoryCommandId);
                    }
                    else
                    {
                        command = GetAllocatedInputInventoryCommandByManualTransaction(session, transaction.TransactionId);
                        invoice = GetAllocatedPurchaseInvoiceByManualTransaction(session, transaction.TransactionId);
                    }
                }
                catch (Exception)
                {
                    command = null;
                    invoice = null;
                }

                if (command == null)
                {
                    return(null);
                }

                if (invoice == null)
                {
                    return(null);
                }

                resultTransaction = new ETL_TransactionS04a6DN();

                resultTransaction.InputInventoryCommandId = command.InventoryCommandId;
                resultTransaction.PurchaseInvoiceId       = invoice.BillId;

                if (currentDeployOrg != null)
                {
                    resultTransaction.OwnerOrgId = currentDeployOrg.OrganizationId;
                }
                else
                {
                    resultTransaction.OwnerOrgId = defaultOrg.OrganizationId;
                }

                if (resultTransaction.SupplierOrgId == Guid.Empty)
                {
                    resultTransaction.SupplierOrgId = defaultOrg.OrganizationId;
                }

                if (resultTransaction.CustomerOrgId == Guid.Empty)
                {
                    resultTransaction.CustomerOrgId = defaultOrg.OrganizationId;
                }

                resultTransaction.TransactionId    = transaction.TransactionId;
                resultTransaction.Amount           = transaction.Amount;
                resultTransaction.Code             = transaction.Code;
                resultTransaction.CreateDate       = transaction.CreateDate;
                resultTransaction.Description      = transaction.Description;
                resultTransaction.IsBalanceForward = (transaction is BalanceForwardTransaction);
                resultTransaction.IssuedDate       = transaction.IssueDate;
                resultTransaction.UpdateDate       = transaction.UpdateDate;

                double numOfItem = 0;
                if (transaction != null)
                {
                    InventoryJournal inventoryJournal = null;
                    try
                    {
                        inventoryJournal = transaction.InventoryJournalFinancials.FirstOrDefault().InventoryJournalId;
                        numOfItem        = inventoryJournal.Debit > 0 ? inventoryJournal.Debit : inventoryJournal.Credit;
                    }
                    catch (Exception)
                    {
                        numOfItem = 0;
                    }
                }
                resultTransaction.ActualPrice = resultTransaction.Amount / numOfItem;
                resultTransaction.BookedPrice = resultTransaction.ActualPrice;

                resultTransaction.GeneralJournalList = new List <ETL_GeneralJournal>();
                foreach (GeneralJournal journal in
                         transaction.GeneralJournals.Where(i => i.RowStatus == Constant.ROWSTATUS_BOOKED_ENTRY || i.RowStatus == Constant.ROWSTATUS_ACTIVE))
                {
                    ETL_GeneralJournal tempJournal = new ETL_GeneralJournal();
                    /*2014/02/20 Duc.Vo MOD START*/
                    if (journal.AccountId != null)
                    {
                        tempJournal.AccountId = journal.AccountId.AccountId;
                    }
                    else
                    {
                        tempJournal.AccountId = defaultAccount.AccountId;
                    }
                    /*2014/02/20 Duc.Vo MOD END*/
                    tempJournal.CreateDate = journal.CreateDate;
                    tempJournal.Credit     = journal.Credit;
                    if (journal.CurrencyId == null)
                    {
                        tempJournal.CurrencyId = CurrencyBO.DefaultCurrency(session).CurrencyId;
                    }
                    else
                    {
                        tempJournal.CurrencyId = journal.CurrencyId.CurrencyId;
                    }
                    tempJournal.Debit            = journal.Debit;
                    tempJournal.Description      = journal.Description;
                    tempJournal.GeneralJournalId = journal.GeneralJournalId;
                    tempJournal.JournalType      = journal.JournalType;
                    tempJournal.GeneralJournalId = journal.GeneralJournalId;

                    resultTransaction.GeneralJournalList.Add(tempJournal);
                    if (accountingBO.IsRelateAccount(session, account.AccountId, tempJournal.AccountId) && journal.Credit > 0)
                    {
                        Acceptable = true;
                    }
                }
                if (!Acceptable)
                {
                    return(null);
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return(resultTransaction);
        }
示例#11
0
        //Membuat jurnal positif di inventory journal
        private void SetReceiveInventoryJournal(Session _currSession, InventoryTransfer _inventoryTransfer)
        {
            try
            {
                XPCollection <InventoryTransferLine> _locInvTransLines = new XPCollection <InventoryTransferLine>(_currSession,
                                                                                                                  new BinaryOperator("InventoryTransfer", _inventoryTransfer));

                if (_locInvTransLines != null && _locInvTransLines.Count > 0)
                {
                    double   _locInvLineTotal = 0;
                    DateTime now = DateTime.Now;

                    foreach (InventoryTransferLine _locInvTransLine in _locInvTransLines)
                    {
                        if (_locInvTransLine.Status == Status.Progress || _locInvTransLine.Status == Status.Posted)
                        {
                            if (_locInvTransLine.DQty > 0 || _locInvTransLine.Qty > 0)
                            {
                                ItemUnitOfMeasure _locItemUOM = _currSession.FindObject <ItemUnitOfMeasure>
                                                                    (new GroupOperator(GroupOperatorType.And,
                                                                                       new BinaryOperator("Item", _locInvTransLine.Item),
                                                                                       new BinaryOperator("UOM", _locInvTransLine.UOM),
                                                                                       new BinaryOperator("DefaultUOM", _locInvTransLine.DUOM),
                                                                                       new BinaryOperator("Active", true)));
                                if (_locItemUOM != null)
                                {
                                    if (_locItemUOM.Conversion < _locItemUOM.DefaultConversion)
                                    {
                                        _locInvLineTotal = _locInvTransLine.Qty * _locItemUOM.DefaultConversion + _locInvTransLine.DQty;
                                    }
                                    else if (_locItemUOM.Conversion > _locItemUOM.DefaultConversion)
                                    {
                                        _locInvLineTotal = _locInvTransLine.Qty / _locItemUOM.Conversion + _locInvTransLine.DQty;
                                    }
                                    else if (_locItemUOM.Conversion == _locItemUOM.DefaultConversion)
                                    {
                                        _locInvLineTotal = _locInvTransLine.Qty + _locInvTransLine.DQty;
                                    }

                                    InventoryJournal _locPositifInventoryJournal = new InventoryJournal(_currSession)
                                    {
                                        DocumentType  = _inventoryTransfer.DocumentType,
                                        DocNo         = _inventoryTransfer.DocNo,
                                        Location      = _locInvTransLine.Location,
                                        BinLocation   = _locInvTransLine.BinLocation,
                                        Item          = _locInvTransLine.Item,
                                        QtyNeg        = 0,
                                        QtyPos        = _locInvLineTotal,
                                        JournalDate   = now,
                                        ProjectHeader = _inventoryTransfer.ProjectHeader
                                    };
                                    _locPositifInventoryJournal.Save();
                                    _locPositifInventoryJournal.Session.CommitTransaction();
                                }
                                else
                                {
                                    _locInvLineTotal = _locInvTransLine.Qty + _locInvTransLine.DQty;

                                    InventoryJournal _locPositifInventoryJournal = new InventoryJournal(_currSession)
                                    {
                                        DocumentType  = _inventoryTransfer.DocumentType,
                                        DocNo         = _inventoryTransfer.DocNo,
                                        Location      = _locInvTransLine.Location,
                                        BinLocation   = _locInvTransLine.BinLocation,
                                        Item          = _locInvTransLine.Item,
                                        QtyNeg        = 0,
                                        QtyPos        = _locInvLineTotal,
                                        JournalDate   = now,
                                        ProjectHeader = _inventoryTransfer.ProjectHeader
                                    };
                                    _locPositifInventoryJournal.Save();
                                    _locPositifInventoryJournal.Session.CommitTransaction();
                                }
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Tracing.Tracer.LogError("Business Object = InventoryTransfer ", ex.ToString());
            }
        }