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; } }
/// <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); }
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); }
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); }
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); }
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); }
/// <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(); }
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); }
//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()); } }