public override void BeforeApplyChanges(EntityDbHelper dbHelper, Entity entity) { base.BeforeApplyChanges(dbHelper, entity); if (entity.ChangeStatus.IsIn(EntityChangeTypes.Add, EntityChangeTypes.Modify)) { if (entity.GetFieldValue <Guid?>("FinancialGroup") == null) { throw new AfwException("FinancialGroup is not set.(Check in OrgzanizationUnitSetting)"); } ValidateOpDate(entity); } if (entity.ChangeStatus != EntityChangeTypes.None) { Guid financialDocTypeID = Guid.Empty; if (entity.FieldExists("FinancialDocType")) { financialDocTypeID = entity.GetFieldValue <Guid>("FinancialDocType"); } else if (entity.FieldExists("FinancialGroup")) { financialDocTypeID = dbHelper.FetchSingleByID("cmn.FinancialGroup", entity.GetFieldValue <Guid>("FinancialGroup"), null) .GetFieldValue <Guid>("FinancialDocType"); } acc.Instance.CheckFinalDocExistsAtDates(entity.GetFieldValue <Guid>("FinancialYear"), financialDocTypeID, entity.GetFieldValue <DateTime>(GetOpDateFieldName()), (_OldEntity != null ? _OldEntity.GetFieldValue <DateTime>(GetOpDateFieldName()) : null as DateTime?)); } }
public override void AfterApplyChanges(EntityDbHelper dbHelper, Entity entity) { base.AfterApplyChanges(dbHelper, entity); //DebugHelper.Break(); if (entity.ChangeStatus.IsIn(EntityChangeTypes.Add, EntityChangeTypes.Modify)) { CreateGhabzOrHavale(entity, "Havale", entity.ChangeStatus); CreateGhabzOrHavale(entity, "Ghabz", entity.ChangeStatus); } if (entity.ChangeStatus != EntityChangeTypes.Delete) { if (entity.FieldExists("StuffStatusChangeAndTransferItems") && entity.GetFieldValue <EntityList>("StuffStatusChangeAndTransferItems") != null) { dbHelper.ApplyChanges(entity.GetFieldValue <EntityList>("StuffStatusChangeAndTransferItems")); } var stuffStatusChangeAndTransferType = dbHelper.FetchSingleByID("wm.StuffStatusChangeAndTransferType", entity.GetFieldValue <Guid>("StuffStatusChangeAndTransferType"), null); if (stuffStatusChangeAndTransferType.GetFieldValue <bool>("AccDocIssuing")) { CreateStuffStatusChangeAndTransferAccDoc(entity); } } if (entity.ChangeStatus == EntityChangeTypes.Delete) { //acc.Instance.DeleteAccDocMaster(entity.GetFieldValue<Guid?>("AccDoc"), "wm.StuffStatusChangeAndTransfer", invoiceID); } }
public virtual void BeforeApplyChanges(EntityDbHelper dbHelper, Entity entity) { _OldEntity = null; if (entity.EntityDefID == null) throw new AfwException("entity.EntityDefID is not set."); if (entity.ChangeStatus.IsIn(EntityChangeTypes.Modify, EntityChangeTypes.Delete)) { if (LoadOldEntityOnBeforeApplyChanges) _OldEntity = dbHelper.FetchSingleByID((Guid)entity.EntityDefID, entity.GetFieldValue<Guid>("ID"), null); } if (entity.FieldExists("IssueDate") && entity.FieldExists("FinancialYear")) CheckIssueDateAndFinancialYearConsistency(entity); }
public override void AfterApplyChanges(EntityDbHelper dbHelper, Entity entity) { base.AfterApplyChanges(dbHelper, entity); if (entity.ChangeStatus.IsIn(EntityChangeTypes.Add, EntityChangeTypes.Modify)) { if (entity.GetFieldValue <Guid>("OpType") == OptionSetHelper.GetOptionSetItemID("wm.MontageOrDemontage", "Montage")) { //حواله مونتاژ CreateGhabzOrHavale(entity, "HavaleAmaliateMontage"); //رسید مونتاژ CreateGhabzOrHavale(entity, "ResideAmaliateMontage"); } else if (entity.GetFieldValue <Guid>("OpType") == OptionSetHelper.GetOptionSetItemID("wm.MontageOrDemontage", "Demontage")) { //حواله دمونتاژ CreateGhabzOrHavale(entity, "HavaleAmaliateDemontage"); //رسید دمونتاژ CreateGhabzOrHavale(entity, "ResideAmaliateDemontage"); } } if (entity.ChangeStatus != EntityChangeTypes.Delete) { if (entity.FieldExists("StuffComponents") && entity.GetFieldValue <EntityList>("StuffComponents") != null) { dbHelper.ApplyChanges(entity.GetFieldValue <EntityList>("StuffComponents")); } } }
public override void AfterApplyChanges(EntityDbHelper dbHelper, Entity entity) { base.AfterApplyChanges(dbHelper, entity); if (entity.ChangeStatus.IsIn(EntityChangeTypes.Add, EntityChangeTypes.Modify)) { //حواله تغییر وضعیت کالای قطعه برداری شده CreateGhabzOrHavale(entity, "Havale", "HavaleTaghirVaziateKalayeGhetehBardariShodeh"); //رسید تغییر وضعیت کالای قطعه برداری شده CreateGhabzOrHavale(entity, "Ghabz", "GhabzeTaghirVaziateKalayeGhetehBardariShodeh"); //رسید قطعه برداری CreateGhabzOrHavale(entity, "Ghabz", "GhabzeKalahayeGhetehBardariShodeh"); //حواله اصلاح ارزش کالای قطعه برداری شده CreateGhabzOrHavale(entity, "Havale", "HavaleKaheshArzesheKalayeGhetehBardariShodeh"); } if (entity.ChangeStatus != EntityChangeTypes.Delete) { if (entity.FieldExists("GhetehBardariAzKalaItems") && entity.GetFieldValue <EntityList>("GhetehBardariAzKalaItems") != null) { dbHelper.ApplyChanges(entity.GetFieldValue <EntityList>("GhetehBardariAzKalaItems")); } } }
private void FetchPersonRoleInfoFields(Entity person) { var dbHelper = CoreComponent.Instance.MainDbHelper; var personRoles = GetPersonRoles(); List <Entity> personRoleRelations = null; if (person.FieldExists("PersonRoleRelations") && person.GetFieldValue <EntityList>("PersonRoleRelations") != null) { personRoleRelations = person.GetFieldValue <EntityList>("PersonRoleRelations").Entities; } else { personRoleRelations = dbHelper.FetchMultiple("cmn.PersonRoleRelation", string.Format("Person = '{0}'", person.GetFieldValue <Guid>("ID")), null, null, null, null).Entities; } foreach (var personRoleRelation in personRoleRelations) { var roleName = personRoles.First(o => o.GetFieldValue <Guid>("ID") == personRoleRelation.GetFieldValue <Guid>("PersonRole")).GetFieldValue <string>("Name"); var roleInfo = dbHelper.FetchSingle(string.Format("cmn.Person_{0}Info", roleName), string.Format("Person = '{0}'", person.GetFieldValue <Guid>("ID")), null); person.AddField(roleName + "Info", roleInfo); } }
public override void AfterApplyChanges(EntityDbHelper dbHelper, Entity entity) { base.AfterApplyChanges(dbHelper, entity); var id = entity.GetFieldValue <Guid>("ID"); if (entity.ChangeStatus != EntityChangeTypes.Delete) { if (entity.FieldExists("StuffItems") && entity.GetFieldValue <EntityList>("StuffItems") != null) { SaveItems(entity.GetFieldValue <EntityList>("StuffItems")); } if (!HasItem(id)) { throw new AfwException("فاکتور آیتم ندارد ."); } CreateBuyInvoiceAccDoc(entity); } if (entity.ChangeStatus == EntityChangeTypes.Delete) { acc.Instance.DeleteAccDocMaster(entity.GetFieldValue <Guid?>("AccDoc"), "ps.BuyInvoice", id); } }
private void CheckRoleRelations(Entity person) { var roles = GetPersonRoles(); EntityList personRoleRelations = new EntityList(); if (person.FieldExists("PersonRoleRelations")) { personRoleRelations = person.GetFieldValue <EntityList>("PersonRoleRelations"); } foreach (var role in roles) { var roleID = role.GetFieldValue <Guid>("ID"); var roleName = role.GetFieldValue <string>("Name"); Entity roleRelationEntity = personRoleRelations.Entities.FirstOrDefault( o => o.GetFieldValue <Guid>("PersonRole") == roleID); Entity roleInfoEntity = null; if (person.FieldExists(roleName + "Info")) { roleInfoEntity = person.GetFieldValue <Entity>(roleName + "Info"); } if (roleRelationEntity != null && roleRelationEntity.ChangeStatus != EntityChangeTypes.Delete) { if (roleInfoEntity == null || roleInfoEntity.ChangeStatus == EntityChangeTypes.Delete) { throw new AfwException(roleName + "Info not exists in person entity but RoleRelation exists."); } } if (roleInfoEntity != null && roleInfoEntity.ChangeStatus != EntityChangeTypes.Delete) { if (roleRelationEntity == null || roleRelationEntity.ChangeStatus == EntityChangeTypes.Delete) { throw new AfwException(roleName + "Info exists in person entity but RoleRelation not exists."); } } } }
public List <string> GetChangedFieldsName(Entity oldEntity, Entity entity, string[] ignoredFieldNames) { var changedFields = new List <string>(); foreach (var fieldName in entity.FieldValues.Keys) { if (ignoredFieldNames.Contains(fieldName)) { continue; } if (!entity.FieldExists(fieldName)) { throw new AfwException("Error in GetChangedFieldValues:\r\nError compairing field '{0}'. field does not exist in entity.", fieldName); } if (!oldEntity.FieldExists(fieldName)) { throw new AfwException("Error in GetChangedFieldValues:\r\nError compairing field '{0}'. field does not exist in entity.", fieldName); } var entityFieldValue = entity.FieldValues[fieldName]; var oldEntityFieldValue = oldEntity.FieldValues[fieldName]; string entityFieldTypeName = null; string oldEntityFieldTypeName = null; if (entityFieldValue != null) { entityFieldTypeName = entityFieldValue.GetType().Name; if (entityFieldTypeName.IsIn("Entity", "EntityList")) { throw new AfwException("Error in GetChangedFieldValues:\r\nError compairing field '{0}'. field of type '{1}' not supported.", fieldName, entityFieldTypeName); } } if (oldEntityFieldValue != null) { oldEntityFieldTypeName = oldEntityFieldValue.GetType().Name; if (oldEntityFieldTypeName.IsIn("Entity", "EntityList")) { throw new AfwException("Error in GetChangedFieldValues:\r\nError compairing field '{0}'. field of type '{1}' not supported.", fieldName, oldEntityFieldTypeName); } } if (ConvertFieldValueToString(entityFieldValue) != ConvertFieldValueToString(oldEntityFieldValue)) { changedFields.Add(fieldName); } } return(changedFields); }
public override void BeforeApplyChanges(EntityDbHelper dbHelper, Entity entity) { if (wm.Instance.IsRunningUnvaluation) { LoadOldEntityOnBeforeApplyChanges = false; } base.BeforeApplyChanges(dbHelper, entity); if (wm.Instance.IsRunningUnvaluation) { return; } if (entity.ChangeStatus.IsIn(EntityChangeTypes.Add, EntityChangeTypes.Modify)) { var ghabzOrHavale = dbHelper.FetchSingleByID("wm.GhabzOrHavale", entity.GetFieldValue <Guid>("GhabzOrHavale"), null); var ghabzOrHavaleTypeEntity = wm.Instance.GetGhabzOrHavaleTypeEntity(ghabzOrHavale.GetFieldValue <Guid>("GhabzOrHavaleType")); var warehouseDocName = OptionSetHelper.GetOptionSetItemName(ghabzOrHavaleTypeEntity.GetFieldValue <Guid>("WarehouseDocType")); var stuffLocationID = ghabzOrHavale.GetFieldValue <Guid?>("StuffLocation"); var stuffLocation = dbHelper.FetchSingleByID("cmn.StuffLocation", (Guid)stuffLocationID, null); var stuff = dbHelper.FetchSingleByID("cmn.Stuff", entity.GetFieldValue <Guid>("Stuff"), null); if (entity.FieldExists("Stuff_Entity")) { entity.RemoveField("Stuff_Entity"); } if (entity.GetFieldValue <int>("Quantity") < 0) { throw new AfwException("تعداد کالای وارد شده در سطر {0} مجاز نمی باشد.", entity.GetFieldValue <int>("RowNumber")); } else if (entity.GetFieldValue <int>("Quantity") == 0) { //تنها در رسید و حواله تغییر ارزش تعداد 0 مجاز است و در این حالت هم نباید شماره بچ و وضعیت وارد شود if (!string.IsNullOrEmpty(entity.GetFieldValue <string>("BatchNumber")) || entity.GetFieldValue <Guid?>("StuffStatus") != null) { throw new AfwException("تعداد کالای وارد شده در سطر {0} مجاز نمی باشد.", entity.GetFieldValue <int>("RowNumber")); } } if (!dbHelper.EntityExists("cmn.StuffPossibleLocation", string.Format("StuffDef = '{0}' and StuffLocation = '{1}'", stuff.GetFieldValue <Guid>("StuffDef"), stuffLocationID))) { throw new AfwException("در تعریف کالای سطر {0}، {1} بعنوان انبار مجاز انتخاب نشده است.", entity.GetFieldValue <int>("RowNumber"), stuffLocation.GetFieldValue <string>("Name")); } new GhabzOrHavaleItemBL().ValidateBatchNumbers(entity); } }
private void DeserializeList(Entity entity, IListProperty listProperty, JArray jArray) { //构造 List 对象 EntityList list = null; if (entity.FieldExists(listProperty) || entity.IsNew) { list = entity.GetLazyList(listProperty); } else { if (_creationMode == UpdatedEntityCreationMode.RequeryFromRepository) { list = entity.GetLazyList(listProperty); } else { var listRepository = RepositoryFactoryHost.Factory.FindByEntity(listProperty.ListEntityType); list = listRepository.NewList(); entity.LoadProperty(listProperty, list); } } //反序列化其中的每一个元素。 if (entity.IsNew) { var listRepository = list.GetRepository(); foreach (JObject jChild in jArray) { var child = listRepository.New(); DeserializeProperties(jChild, child); list.Add(child); } } else { //这里会发起查询,获取当前在数据库中的实体。 for (int i = 0, c = jArray.Count; i < c; i++) { var jChild = jArray[i] as JObject; var child = FindOrCreate(list, jChild); DeserializeProperties(jChild, child); } } }
public override void AfterApplyChanges(EntityDbHelper dbHelper, Entity entity) { base.AfterApplyChanges(dbHelper, entity); //DebugHelper.Break(); if (entity.ChangeStatus != EntityChangeTypes.Delete) { if (entity.FieldExists("StuffItems")) { var StuffItems = entity.GetFieldValue <EntityList>("StuffItems"); StuffItems.Entities.RemoveAll( o => o.ChangeStatus == EntityChangeTypes.Add && o.GetFieldValue <Guid?>("Stuff") == null); dbHelper.ApplyChanges(StuffItems); } } }
private void ApplyItemSerialNumbersChanges(Entity ghabzOrHavale, Entity ghabzOrHavaleItem) { var dbHelper = CoreComponent.Instance.MainDbHelper; EntityList stuffsSerialNumbers = null; if (ghabzOrHavaleItem.ChangeStatus != EntityChangeTypes.Delete) { var ghabzOrHavaleTypeEntity = wm.Instance.GetGhabzOrHavaleTypeEntity(ghabzOrHavale.GetFieldValue <Guid>("GhabzOrHavaleType")); //اگر عملیات (قطعه برداری) و (تغییر وضعیت و انتقال) و (عملیات ترکیبی) نبود if (ghabzOrHavale.GetFieldValue <Guid?>("RefDoc_GhetehBardariAzKala") == null && ghabzOrHavale.GetFieldValue <Guid?>("RefDoc_StuffStatusChangeAndTransfer") == null && ghabzOrHavale.GetFieldValue <Guid?>("RefDoc_WarehouseHybridOperation") == null) { if (ghabzOrHavaleItem.FieldExists("StuffsSerialNumbers")) { stuffsSerialNumbers = ghabzOrHavaleItem.GetFieldValue <EntityList>("StuffsSerialNumbers"); } if (stuffsSerialNumbers != null) { wm.Instance.SaveStuffSerialNumbers(stuffsSerialNumbers); } var serialSerialNumbersAreSet = CalculateSerialNumbersAreSet(ghabzOrHavaleItem, ghabzOrHavaleTypeEntity); dbHelper.AdoDbHelper.ExecuteNonQuery(string.Format(@" update wm_GhabzOrHavaleha set SerialNumbersAreSet = {0} where ID = '{1}'", serialSerialNumbersAreSet == true ? 1 : 0, ghabzOrHavale.GetFieldValue <Guid>("ID"))); } } else { if (stuffsSerialNumbers != null) { foreach (var entity in stuffsSerialNumbers.Entities) { dbHelper.DeleteEntity(entity); } } } }
public override void AfterApplyChanges(EntityDbHelper dbHelper, Entity entity) { base.AfterApplyChanges(dbHelper, entity); //DebugHelper.Break(); var id = entity.GetFieldValue <Guid>("ID"); if (entity.ChangeStatus != EntityChangeTypes.Delete) { if (entity.FieldExists("SefareshItems")) { var sefareshItems = entity.GetFieldValue <EntityList>("SefareshItems").Entities; new SefareshItemBL().SaveItems(sefareshItems); } if (!HasItem(id)) { throw new AfwException("سفارش آیتم ندارد ."); } } }
public override void AfterApplyChanges(EntityDbHelper dbHelper, Entity entity) { base.AfterApplyChanges(dbHelper, entity); var invoiceID = entity.GetFieldValue <Guid>("ID"); if (entity.ChangeStatus != EntityChangeTypes.Delete) { if (entity.FieldExists("StuffItems")) { var stuffItems = entity.GetFieldValue <EntityList>("StuffItems").Entities; SaveItems(stuffItems); } if (!HasItem(invoiceID)) { throw new AfwException("فاکتور آیتم ندارد ."); } if (entity.GetFieldValue <Guid?>("BuyInvoice") != null) { var invalidBuyInvoiceItem = GetBuyInvoiceItemsWithRemainedQty(entity.GetFieldValue <Guid>("BuyInvoice")) .Entities.FirstOrDefault(o => o.GetFieldValue <int>("RemainedQuantity") < 0); if (invalidBuyInvoiceItem != null) { throw new AfwException("تعداد کالا در سطر {0} بیشتر از حد مجاز است.", invalidBuyInvoiceItem.GetFieldValue <int>("RowNumber")); } } CreateReturnFromBuyAccDoc(entity); } if (entity.ChangeStatus == EntityChangeTypes.Delete) { acc.Instance.DeleteAccDocMaster(entity.GetFieldValue <Guid?>("AccDoc"), "ps.ReturnFromBuy", entity.GetFieldValue <Guid>("ID")); } }
public override void AfterApplyChanges(EntityDbHelper dbHelper, Entity entity) { base.AfterApplyChanges(dbHelper, entity); var id = entity.GetFieldValue <Guid>("ID"); if (entity.ChangeStatus != EntityChangeTypes.Delete) { if (entity.FieldExists("WarehouseHybridOperationItems") && entity.GetFieldValue <EntityList>("WarehouseHybridOperationItems") != null) { dbHelper.ApplyChanges(entity.GetFieldValue <EntityList>("WarehouseHybridOperationItems")); } if (!HasItem(id)) { throw new AfwException("عملیات ترکیبی هیچ آیتمی ندارد ."); } } if (entity.ChangeStatus.IsIn(EntityChangeTypes.Add, EntityChangeTypes.Modify)) { CreateWarehouseDocs(entity); } }
public void SaveQuickSettelmentEntity(Entity receiveReceiptEntity, Entity fileSettlementEntity, bool isWorkShift) { var dbHelper = CoreComponent.Instance.MainDbHelper; var organizationUnitID = receiveReceiptEntity.GetFieldValue <Guid>("OrganizationUnit"); if (receiveReceiptEntity.ChangeStatus == EntityChangeTypes.Delete) { throw new AfwException("receiveReceiptEntity is in Deleted status."); } using (var tranManager = new DbTransactionManager(dbHelper)) { dbHelper.ApplyChanges(receiveReceiptEntity); try { if (receiveReceiptEntity.FieldExists("Items")) { var itemsEntityList = receiveReceiptEntity.GetFieldValue <EntityList>("Items"); decimal totalAmount = 0; foreach (Entity itemEntity in itemsEntityList.Entities) { var innerItem = itemEntity.GetFieldValue <Entity>("InnerItem"); var itemAmount = innerItem.GetFieldValue <decimal?>("Amount"); if (innerItem.FieldExists("ShomareHavale")) { var lastShomareHavale = cmn.Instance.GetFieldMaxIntValue("ShomareHavale", "rp_HavaleDaryafti", string.Format(@"ID in ( select FinancialItem_Havale from rp_ReceiveReceiptItems where ReceiveReceipt = '{0}' and FinancialItem_Havale is not null)", receiveReceiptEntity.GetFieldValue <Guid>("ID"))); if (lastShomareHavale == 0) { lastShomareHavale = Convert.ToInt32(receiveReceiptEntity.GetFieldValue <Int64>("ReceiptNumber").ToString() + "100"); } else { lastShomareHavale++; } innerItem.SetFieldValue("ShomareHavale", lastShomareHavale); } if (isWorkShift) { var openedWorkShift = dbHelper.FetchSingle("krf.WorkShift", string.Format("IsOpen = 1 and OrganizationUnit = '{0}'", organizationUnitID), null); if (openedWorkShift != null) { var workShiftStatusChange = dbHelper.FetchSingle("krf.WorkShiftStatusChange", string.Format("WorkShift = '{0}' and CloseDateTime is null", openedWorkShift.GetFieldValue <Guid>("ID")), null); itemEntity.SetFieldValue("Krf_WorkShiftStatusChange", workShiftStatusChange.GetFieldValue <Guid>("ID")); itemEntity.SetFieldValue("Debtor_Project", openedWorkShift.GetFieldValue <Guid>("Project")); } } if (itemAmount == null || itemAmount == 0) { itemEntity.ChangeStatus = EntityChangeTypes.None; } else { totalAmount += (decimal)itemAmount; } } dbHelper.ApplyChanges(itemsEntityList); if (fileSettlementEntity != null) { if (fileSettlementEntity.FieldExists("TotalAmount")) { if (fileSettlementEntity.ChangeStatus == EntityChangeTypes.Add) { fileSettlementEntity.SetFieldValue("FirstAmount", totalAmount); } fileSettlementEntity.SetFieldValue("TotalAmount", totalAmount); } dbHelper.ApplyChanges(fileSettlementEntity); } } tranManager.Commit(); } catch (Exception ex) { throw new AfwException("خطا در ثبت..\r\n {0}", ex.Message); } } }
/// <summary> /// 删除不必要的对象,只留下需要保存的“脏”数据 /// </summary> /// <param name="diffEntity">The difference entity.</param> /// <param name="entityInfo">The entity information.</param> protected virtual void ClearDataCore(Entity diffEntity, EntityMeta entityInfo) { foreach (var item in entityInfo.ChildrenProperties) { var mp = item.ManagedProperty; //如果是懒加载属性,并且没有加载数据时,不需要遍历此属性值 if (!diffEntity.FieldExists(mp)) continue; var children = diffEntity.GetProperty(mp) as EntityList; if (children == null) continue; for (int i = children.Count - 1; i >= 0; i--) { var child = children[i]; if (!child.IsDirty) { children.Remove(child); children.DeletedList.Remove(child); } else { this.ClearData(child); } } } }
/// <summary> /// 清除子对象集合 /// </summary> /// <param name="oldEntity">The old entity.</param> /// <param name="entityInfo">The entity information.</param> protected virtual void MakeSavedCore(Entity oldEntity, EntityMeta entityInfo) { foreach (var item in entityInfo.ChildrenProperties) { var mp = item.ManagedProperty as IListProperty; //如果是懒加载属性,并且没有加载数据时,不需要遍历此属性值 if (!oldEntity.FieldExists(mp)) continue; var children = oldEntity.GetProperty(mp) as EntityList; if (children == null) continue; //清除已删除数据 children.CastTo<EntityList>().DeletedList.Clear(); //所有子对象,都标记为已保存 for (int i = children.Count - 1; i >= 0; i--) { var child = children[i] as Entity; if (child.IsDirty || child.IsNew) MakeSaved(child); } } oldEntity.MarkSaved(); }
internal int Update(IDbAccesser dba, Entity item) { EnsureMappingTable(); var parameters = new List<object>(10); string updateSql = null; //是否有需要更新的 lob 字段。 bool hasUpdatedLOBColumns = false; List<RdbColumn> lobColumns = null; if (_hasLOB) { lobColumns = new List<RdbColumn>(); for (int i = 0, c = _columns.Count; i < c; i++) { var column = _columns[i]; //如果一个 lob 属性的值存在,则表示需要更新。 //(可能被设置了,也可能只是简单地读取了一下,没有变更值。这时也简单地处理。) if (column.IsLOB && item.FieldExists(column.Info.Property)) { lobColumns.Add(column); hasUpdatedLOBColumns = true; } } } if (!hasUpdatedLOBColumns) { //如果没有 LOB,则直接缓存上更新语句。 if (_updateSQL == null) { _updateSQL = this.GenerateUpdateSQL(null); } updateSql = _updateSQL; } else { updateSql = this.GenerateUpdateSQL(lobColumns); } //更新所有非 lob 的字段 for (int i = 0, c = _columns.Count; i < c; i++) { var column = _columns[i]; if (!column.Info.IsPrimaryKey && !column.IsLOB) { var value = column.ReadParameterValue(item); parameters.Add(value); } } //更新需要更新的 lob 字段 if (hasUpdatedLOBColumns) { for (int i = 0, c = lobColumns.Count; i < c; i++) { var column = lobColumns[i]; if (!column.Info.IsPrimaryKey) { var value = column.ReadParameterValue(item); parameters.Add(value); } } } //Id 最后加入 parameters.Add(item.Id); int res = dba.ExecuteText(updateSql, parameters.ToArray()); return res; }
public void SavePerson(Entity person) { //DebugHelper.Break(); var dbHelper = CoreComponent.Instance.MainDbHelper; var personID = person.GetFieldValue <Guid>("ID"); EntityList personRoleRelations = new EntityList(); if (person.FieldExists("PersonRoleRelations")) { personRoleRelations = person.GetFieldValue <EntityList>("PersonRoleRelations"); } EntityList personGroupRelations = null; if (person.FieldExists("PersonGroupRelations")) { personGroupRelations = person.GetFieldValue <EntityList>("PersonGroupRelations"); } CheckRoleRelations(person); using (var tranManager = new DbTransactionManager(dbHelper)) { var roleInfoEntities = new List <Entity>(); foreach (var role in GetPersonRoles()) { var roleName = role.GetFieldValue <string>("Name"); if (person.FieldExists(roleName + "Info")) { var roleInfoEntity = person.GetFieldValue <Entity>(roleName + "Info"); if (roleInfoEntity.GetFieldValue <string>("PersonCode") == null) { roleInfoEntity.SetFieldValue("PersonCode", GetNewPersonCode(roleName)); } roleInfoEntities.Add(roleInfoEntity); if (role.GetFieldValue <bool>("HasFinancialAccount") && string.IsNullOrEmpty(person.GetFieldValue <string>("FinancialAccountCode"))) { person.SetFieldValue("FinancialAccountCode", GetNewFinancialAccountCode()); } person.FieldValues.Remove(roleName + "Info"); } } dbHelper.ApplyChanges(person); foreach (Entity personRoleRelationEntity in personRoleRelations.Entities) { dbHelper.ApplyChanges(personRoleRelationEntity); } foreach (var roleInfoEntity in roleInfoEntities) { dbHelper.ApplyChanges(roleInfoEntity); } if (personGroupRelations != null) { foreach (Entity personGroupRelationEntity in personGroupRelations.Entities) { dbHelper.ApplyChanges(personGroupRelationEntity); } } if (PersonHasRole(personID, "PotentialCustomer") && PersonHasRole(personID, "Customer")) { SetPotentialCustomerGroupingToCustomer(personID); DeletePotentialCustomerRole(person); } tranManager.Commit(); } }
public virtual int Update(IDbAccesser dba, Entity item) { EnsureMappingTable(); var parameters = new List <object>(10); string updateSql = null; //是否有需要更新的 lob 字段。 bool hasUpdatedLOBColumns = false; List <RdbColumn> lobColumns = null; if (_hasLOB) { lobColumns = new List <RdbColumn>(); for (int i = 0, c = _columns.Count; i < c; i++) { var column = _columns[i]; //如果一个 lob 属性的值存在,则表示需要更新。 //(可能被设置了,也可能只是简单地读取了一下,没有变更值。这时也简单地处理。) if (column.IsLOB && item.FieldExists(column.Info.Property)) { lobColumns.Add(column); hasUpdatedLOBColumns = true; } } } if (!hasUpdatedLOBColumns) { //如果没有 LOB,则直接缓存上更新语句。 updateSql = _updateSQL.Value; } else { updateSql = this.GenerateUpdateSQL(lobColumns); } //更新所有非 lob 的字段 for (int i = 0, c = _columns.Count; i < c; i++) { var column = _columns[i]; if (!column.Info.IsPrimaryKey && !column.IsLOB) { var value = column.ReadDbParameterValue(item); parameters.Add(value); } } //更新需要更新的 lob 字段 if (hasUpdatedLOBColumns) { for (int i = 0, c = lobColumns.Count; i < c; i++) { var column = lobColumns[i]; if (!column.Info.IsPrimaryKey) { var value = column.ReadDbParameterValue(item); parameters.Add(value); } } } //Id 最后加入 parameters.Add(item.Id); int res = dba.ExecuteText(updateSql, parameters.ToArray()); return(res); }
public void SaveSalesCase(Entity salesCase) { //DebugHelper.Break(); var core = CoreComponent.Instance; var dbHelper = CoreComponent.Instance.MainDbHelper; using (var tranManager = new DbTransactionManager(dbHelper)) { if (salesCase.FieldExists("SalesCaseLoseInfo") && salesCase.ChangeStatus == EntityChangeTypes.Modify) { var salesCaseLoseInfo = salesCase.GetFieldValue <Entity>("SalesCaseLoseInfo"); salesCaseLoseInfo.ChangeStatus = EntityChangeTypes.Modify; dbHelper.ApplyChanges(salesCaseLoseInfo); salesCase.FieldValues.Remove("SalesCaseLoseInfo"); } salesCase.FieldValues["LastActionTime"] = core.GetServerDateTime(); if (salesCase.ChangeStatus == EntityChangeTypes.Modify) { var oldSaleCaseEntity = dbHelper.FetchSingle("crm.SalesCase", string.Format("ID = '{0}'", salesCase.GetFieldValue <Guid>("ID")), null); if (oldSaleCaseEntity.GetFieldValue <Guid?>("SalesCaseStage") != salesCase.GetFieldValue <Guid?>("SalesCaseStage")) { SaveSalesCaseStageChangeHistory(salesCase); } if (oldSaleCaseEntity.GetFieldValue <Guid?>("OwnerUser") != salesCase.GetFieldValue <Guid?>("OwnerUser")) { SaveSalesCaseOwnerUserChangeHistory(salesCase); } if (oldSaleCaseEntity.GetFieldValue <Guid?>("Status") != salesCase.GetFieldValue <Guid?>("Status")) { SaveSalesCaseStatusChangeHistory(salesCase); } dbHelper.ApplyChanges(salesCase); } else if (salesCase.ChangeStatus == EntityChangeTypes.Add) { dbHelper.ApplyChanges(salesCase); SaveSalesCaseStageChangeHistory(salesCase); SaveSalesCaseOwnerUserChangeHistory(salesCase); SaveSalesCaseStatusChangeHistory(salesCase); } else { throw new AfwException("Invalid ChangeStatus for SaveSalesCase."); } SetCustomerRole(salesCase); if (salesCase.GetFieldValue <Guid?>("MainConnectedPerson") != null) { SetMainConnectedPersonRole(salesCase); AddMainConnectedPersonToConnectedPersonsIfNot(salesCase); } if (salesCase.GetFieldValue <Guid?>("IntroducerPerson") != null) { SetIntroducerPersonRole(salesCase); } tranManager.Commit(); } }
public void CheckStuffStock(Entity item, Guid?stuffLocationID, DateTime?issueDate, DateTime?creationTime, Guid?salesInvoiceID) { var dbHelper = CoreComponent.Instance.MainDbHelper; var stuffID = item.GetFieldValue <Guid?>("Stuff"); if (stuffID == null) { throw new AfwException("Error in CheckStuffStock: Field 'Stuff' is null."); } var rowNumber = item.GetFieldValue <int?>("RowNumber"); Guid? stuffStatusID = null; string batchNumber = null; //چون رزرو موجودی برای کالا در پیش فاکتور فروش انجام می شود //پس فقط زمانی رزرو موجودی برای کالا چک می شود که عملیات مرتبط پیش فاکتور فروش باشد int?reservedStockInProformas = null; int?reservedStockInWarehouseInventoryReserveList = null; if (salesInvoiceID != null) { var psConfig = dbHelper.FetchSingle("ps.Config", null, null); if (psConfig.GetFieldValue <Guid?>("VaziateKalayeGhabeleForosh") == null) { throw new AfwException("وضعیت کالای قابل فروش در تنظیمات سیستم خرید و فروش انتخاب نشده است."); } stuffStatusID = psConfig.GetFieldValue <Guid>("VaziateKalayeGhabeleForosh"); reservedStockInProformas = GetStuffReservedStockInProformas((Guid)stuffID); reservedStockInWarehouseInventoryReserveList = GetWarehouseInventoryReserveQuantity((Guid)stuffID); } if (item.FieldExists("StuffStatus")) { stuffStatusID = item.GetFieldValue <Guid?>("StuffStatus"); } if (item.FieldExists("BatchNumber")) { batchNumber = item.GetFieldValue <string>("BatchNumber"); } var realStock = wm.Instance.GetStuffRealStock((Guid)stuffID, stuffLocationID, stuffStatusID, batchNumber, issueDate, creationTime); if (reservedStockInProformas == null) { reservedStockInProformas = 0; } if (reservedStockInWarehouseInventoryReserveList == null) { reservedStockInWarehouseInventoryReserveList = 0; } var mojodiGhabeleEraee = realStock - (reservedStockInWarehouseInventoryReserveList + reservedStockInProformas); if (mojodiGhabeleEraee < 0) { var stuffTitle = dbHelper.FetchSingleByID("cmn.Stuff", (Guid)stuffID, new string[] { "StuffDef" }) .GetFieldValue <Entity>("StuffDef_Entity").GetFieldValue <string>("Name"); var stuffLocationName = stuffLocationID == null? "" : " " + dbHelper.FetchSingleByID("cmn.StuffLocation", (Guid)stuffLocationID, null).GetFieldValue <string>("Name"); throw new AfwException("مقدار '{0}' بیشتر از موجودی قابل ارائه{2} ({3}) می باشد.", stuffTitle, rowNumber, stuffLocationName, mojodiGhabeleEraee); } }
public override void AfterApplyChanges(EntityDbHelper dbHelper, Entity entity) { base.AfterApplyChanges(dbHelper, entity); if (wm.Instance.IsRunningUnvaluation) { return; } var ghabzOrHavaleTypeEntity = dbHelper.FetchSingleByID("wm.GhabzOrHavaleType", entity.GetFieldValue <Guid>("GhabzOrHavaleType"), null); var vazeyatRiali_SanadShodeID = OptionSetHelper.GetOptionSetItemID("wm.VaziyatRialiAsnadAnbar", "SanadShode"); var id = entity.GetFieldValue <Guid>("ID"); var warehouseDocType = ghabzOrHavaleTypeEntity.GetFieldValue <Guid>("WarehouseDocType"); if (entity.ChangeStatus == EntityChangeTypes.Add) { if (dbHelper.AdoDbHelper.ExistsRow(string.Format(@" select 1 from wm_GhabzOrHavaleha GhabzOrHavaleh inner join wm_GhabzOrHavaleTypes GhabzOrHavaleType on GhabzOrHavaleType.ID = GhabzOrHavaleh.GhabzOrHavaleType where GhabzOrHavaleType.WarehouseDocType = '{0}' and GhabzOrHavaleh.StuffLocation = '{1}' and GhabzOrHavaleh.GhabzOrHavaleNumber = {2} and GhabzOrHavaleh.ID <> '{3}'", warehouseDocType, entity.GetFieldValue <Guid>("StuffLocation"), entity.GetFieldValue <decimal>("GhabzOrHavaleNumber"), id))) { throw new AfwException(string.Format("{0} دیگری با این شماره ثبت شده است.", OptionSetHelper.GetOptionSetItemTitle(warehouseDocType))); } if (entity.GetFieldValue <Guid?>("RefDoc_SalesInvoice") != null) { var refDoc_SalesInvoiceID = entity.GetFieldValue <Guid>("RefDoc_SalesInvoice"); var salesProformaInvoice = dbHelper.FetchSingleByID("ps.SalesInvoice", refDoc_SalesInvoiceID, null); salesProformaInvoice.SetFieldValue("HavaleIssuingStatus", OptionSetHelper.GetOptionSetItemID("cmn.HavaleIssuingStatus", "HavaleShodeh")); dbHelper.UpdateEntity(salesProformaInvoice); } } if (entity.ChangeStatus == EntityChangeTypes.Delete) { if (entity.GetFieldValue <Guid?>("RefDoc_SalesInvoice") != null) { var proformaID = entity.GetFieldValue <Guid>("RefDoc_SalesInvoice"); if (dbHelper.EntityExists("ps.SalesInvoice", string.Format("IsProforma = 0 and SourceProforma = '{0}'", proformaID))) { throw new AfwException(string.Format("بدلیل صدور فاکتور امکان حذف حواله وجود ندارد.")); } var proforma = dbHelper.FetchSingleByID("ps.SalesInvoice", proformaID, null); proforma.SetFieldValue("HavaleIssuingStatus", OptionSetHelper.GetOptionSetItemID("cmn.HavaleIssuingStatus", "HavaleNashodeh")); dbHelper.UpdateEntity(proforma); } } if (entity.ChangeStatus != EntityChangeTypes.Delete) { if (entity.FieldExists("GhabzOrHavaleItems") && entity.GetFieldValue <EntityList>("GhabzOrHavaleItems") != null) { SaveItems(entity, entity.GetFieldValue <EntityList>("GhabzOrHavaleItems"), ghabzOrHavaleTypeEntity); } if (!HasItem(id)) { throw new AfwException("سند انبار فاقد آیتم است."); } } if (!wm.Instance.IsEvaluatingDocsForValuation && !wm.Instance.IsRunningValuation && !wm.Instance.IsRunningUnvaluation && entity.GetFieldValue <Guid>("VazeyatRialiShodan") != vazeyatRiali_SanadShodeID) { if (wm.Instance.InventoryValuationBL.ValuatedDocExistsAfter( entity.GetFieldValue <DateTime>("IssueDate"), entity.GetFieldValue <DateTime>("CreationTime"))) { throw new AfwException("سند انبار ریالی شده بعد از این سند انبار موجود است.\r\n" + " ابتدا رسید /حواله های بعد از این سند انبار را به وضعیت ریالی نشده منتقل کنید."); } } }
public void CompareRefDocItemsWithGhabzOrHavaleItems(Entity ghabzOrHavale) { //در صورتی که یک سند انبار مدرک رفرنس (عملیات مرتبط) دارد، تمام کالاهای موجود در عملیات مرتبط //باید با همان تعداد در سند انبار وجود داشته باشند //اما این که سند انبار کالاهای اضافه دیگری غیر از کالاهایی که در مدرک رفرنس وجود دارند داشته باشد مجاز است. var dbHelper = CoreComponent.Instance.MainDbHelper; var ghabzOrHavaleTypeEntity = wm.Instance.GetGhabzOrHavaleTypeEntity(ghabzOrHavale.GetFieldValue <Guid>("GhabzOrHavaleType")); if (!ghabzOrHavaleTypeEntity.GetFieldValue <string>("Name").IsIn( "SalesProfomaHavale", "ReturnFromSalesGhabz", "AmaniSalesProfomaHavale", "ReturnFromAmaniGhabz", "ResideKharideDakheli", "ResideKharideKhareji", "ReturnFromBuyHavale")) { return; } var refDocTypeEntity = dbHelper.FetchSingleByID("wm.ReferenceDocType", ghabzOrHavaleTypeEntity.GetFieldValue <Guid>("ReferenceDocType"), null); var refDocFieldName = refDocTypeEntity.GetFieldValue <string>("RefDocFieldName"); if (string.IsNullOrEmpty(refDocFieldName)) { return; } //برای برخی اسناد انبار ایمپورت شده ممکن است عملیات مرجع ست نشده باشد: if (ghabzOrHavale.GetFieldValue <Guid?>(refDocFieldName) == null) { return; } EntityList ghabzOrHavaleItems = null; if (ghabzOrHavale.FieldExists("GhabzOrHavaleItems") && ghabzOrHavale.GetFieldValue <EntityList>("GhabzOrHavaleItems") != null) { ghabzOrHavaleItems = ghabzOrHavale.GetFieldValue <EntityList>("GhabzOrHavaleItems"); } else { ghabzOrHavaleItems = dbHelper.FetchMultiple("wm.GhabzOrHavaleItem", string.Format("GhabzOrHavale = '{0}'", ghabzOrHavale.GetFieldValue <Guid>("ID")), null, null, null, null); } var getRefDocItemsSqlQuery = string.Format(@" select RefDocItem.Stuff, sum(RefDocItem.Quantity) Quantity from {0} RefDocItem left join {1} RefDoc on RefDoc.ID = RefDocItem.{2} where RefDoc.ID = '{3}' and RefDocItem.Stuff is not null group by RefDocItem.Stuff", refDocTypeEntity.GetFieldValue <string>("RefDocItemTableName"), refDocTypeEntity.GetFieldValue <string>("RefDocTableName"), refDocFieldName.Replace("RefDoc_", ""), ghabzOrHavale.GetFieldValue <Guid>(refDocFieldName)); var refDocItems = dbHelper.FetchMultipleBySqlQuery(getRefDocItemsSqlQuery).Entities; foreach (var refDocItem in refDocItems) { var stuffID = refDocItem.GetFieldValue <Guid>("Stuff"); bool stuffExists = false; int ghabzOrHavaleItemStuffQuantity = 0; foreach (var ghabzOrHavaleItem in ghabzOrHavaleItems.Entities.Where(o => o.ChangeStatus != EntityChangeTypes.Delete)) { if (stuffID == ghabzOrHavaleItem.GetFieldValue <Guid>("Stuff")) { ghabzOrHavaleItemStuffQuantity += ghabzOrHavaleItem.GetFieldValue <int>("Quantity"); stuffExists = true; } } if (!stuffExists) { throw new AfwException("کالاها با کالاهای عملیات مرتبط همخوانی ندارند: '{0}' در سند انبار ثبت نشده است.", cmn.Instance.GetStuffTitle(stuffID)); } if (refDocItem.GetFieldValue <int>("Quantity") != ghabzOrHavaleItemStuffQuantity) { throw new AfwException("تعداد '{0}' در سند انبار با تعداد آن در عملیات مرتبط برابر نیست.", cmn.Instance.GetStuffTitle(stuffID)); } } }
public void DetectCallPerson(Entity receivedCall) { //DebugHelper.Break(); var dbHelper = CoreComponent.Instance.MainDbHelper; var callNumber = receivedCall.GetFieldValue <string>("CallNumber"); Guid?foundPersonID = null; if (callNumber.Substring(0, 2) == "00") { callNumber = callNumber.Substring(2, callNumber.Length - 2); if (callNumber.Substring(0, 3) == "989") { callNumber = callNumber.Substring(2, callNumber.Length - 2); } else if (callNumber.Substring(0, 2) == "98") { callNumber = callNumber.Substring(4, callNumber.Length - 4); } else if (callNumber.Substring(0, 1) != "9") { callNumber = callNumber.Substring(2, callNumber.Length - 2); } } else if (callNumber.Substring(0, 1) == "0") { callNumber = callNumber.Substring(1, callNumber.Length - 1); if (callNumber.Substring(0, 3) == "989") { callNumber = callNumber.Substring(2, callNumber.Length - 2); } else if (callNumber.Substring(0, 2) == "98") { callNumber = callNumber.Substring(4, callNumber.Length - 4); } else if (callNumber.Substring(0, 1) != "9") { callNumber = callNumber.Substring(2, callNumber.Length - 2); } } foundPersonID = dbHelper.AdoDbHelper.ExecuteScalar <Guid?>(string.Format(@" select P.ID from cmn_Persons P left join cmn_PhoneNumbers Phones on Phones.Person = P.ID where P.TelNumber1 like '%{0}%' or P.WorkPhoneNumber like '%{0}%' or P.MobilePhoneNumber1 like '%{0}%' or Phones.Phone like '%{0}%'", callNumber)); if (foundPersonID != null) { receivedCall.ChangeStatus = "Modify"; receivedCall.SetFieldValue("CallPerson", foundPersonID); var person_CustomerInfoEntity = dbHelper.FetchSingle("cmn.Person_CustomerInfo", string.Format("Person = '{0}'", foundPersonID), null); if (person_CustomerInfoEntity == null) { var salesCasesConnectedPerson = dbHelper.FetchMultipleBySqlQuery(@" select SC.ID, SC.Customer, SCCP.ConnectedPerson from crm_SalesCases SC inner join crm_SalesCaseConnectedPersons SCCP on SCCP.SalesCase = SC.ID order by SC.LastActionTime Desc" ).Entities.FirstOrDefault(); if (salesCasesConnectedPerson != null) { if (receivedCall.GetFieldValue <Guid?>("SalesCase") == null) { receivedCall.SetFieldValue("SalesCase", salesCasesConnectedPerson.GetFieldValue <Guid>("ID")); } if (receivedCall.GetFieldValue <Guid?>("DetectedCustomer") == null) { receivedCall.SetFieldValue("DetectedCustomer", salesCasesConnectedPerson.GetFieldValue <Guid>("Customer")); } } } else { var salesCase = dbHelper.FetchMultiple("crm.SalesCase", string.Format("Customer = '{0}'", foundPersonID), "LastActionTime Desc", null, null, null).Entities.FirstOrDefault(); if (salesCase != null) { if (receivedCall.GetFieldValue <Guid?>("SalesCase") == null) { receivedCall.SetFieldValue("SalesCase", salesCase.GetFieldValue <Guid>("ID")); } if (receivedCall.GetFieldValue <Guid?>("DetectedCustomer") == null) { receivedCall.SetFieldValue("DetectedCustomer", salesCase.GetFieldValue <Guid>("Customer")); } } } if (receivedCall.FieldExists("_PagingRowNumber")) { receivedCall.FieldValues.Remove("_PagingRowNumber"); dbHelper.ApplyChanges(receivedCall); } } }