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