Пример #1
0
        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);
            }
        }
Пример #3
0
        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);
        }
Пример #4
0
        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"));
                }
            }
        }
Пример #5
0
        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"));
                }
            }
        }
Пример #6
0
        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);
            }
        }
Пример #7
0
        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);
            }
        }
Пример #8
0
        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.");
                    }
                }
            }
        }
Пример #9
0
        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);
        }
Пример #10
0
        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);
            }
        }
Пример #11
0
        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);
                }
            }
        }
Пример #12
0
        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);
                }
            }
        }
Пример #13
0
        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);
                    }
                }
            }
        }
Пример #14
0
        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("سفارش آیتم ندارد .");
                }
            }
        }
Пример #15
0
        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"));
            }
        }
Пример #16
0
        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);
            }
        }
Пример #17
0
        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);
                }
            }
        }
Пример #18
0
        /// <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);
                    }
                }
            }
        }
Пример #19
0
        /// <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();
        }
Пример #20
0
        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;
        }
Пример #21
0
        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();
            }
        }
Пример #22
0
        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);
        }
Пример #23
0
        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();
            }
        }
Пример #24
0
        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);
            }
        }
Пример #25
0
        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" +
                                           " ابتدا رسید /حواله های بعد از این سند انبار را به وضعیت ریالی نشده منتقل کنید.");
                }
            }
        }
Пример #26
0
        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));
                }
            }
        }
Пример #27
0
        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);
                }
            }
        }