예제 #1
0
        public static string[] FillCountry(ArtWrapper item, IUnitOfWork uow, ILog log)
        {
            var messages = new List <string>();
            var value    = item.COUNTRYCODE_R;

            if (string.IsNullOrEmpty(value))
            {
                return(messages.ToArray());
            }

            var iserror = false;

            using (var mgr = IoC.Instance.Resolve <IBaseManager <IsoCountry> >())
            {
                if (uow != null)
                {
                    mgr.SetUnitOfWork(uow);
                }

                switch (value.Length)
                {
                case 2:     //COUNTRYALPHA2
                    var filter = string.Format("{0} = '{1}'",
                                               SourceNameHelper.Instance.GetPropertySourceName(typeof(IsoCountry), IsoCountry.COUNTRYALPHA2PropertyName),
                                               value);
                    var counries = mgr.GetFiltered(filter, GetModeEnum.Partial).ToArray();
                    if (counries.Length == 0)
                    {
                        iserror = true;
                        break;
                    }
                    item.COUNTRYCODE_R = counries[0].GetKey <string>();
                    break;

                default:
                    var country = mgr.Get(value, GetModeEnum.Partial);
                    if (country == null)
                    {
                        iserror = true;
                    }
                    break;
                }
            }

            if (iserror)
            {
                item.COUNTRYCODE_R = null;
                var message = string.Format("Не найдена страна происхождения (COUNTRYCODE_R) '{0}' для артикула '{1}'.", value, item.ARTNAME);
                messages.Add(message);
                log.Error(message);
            }

            return(messages.ToArray());
        }
예제 #2
0
        public void TestLoadCpv()
        {
            var uowFactory = IoC.Instance.Resolve <IUnitOfWorkFactory>();

            var item = new ArtWrapper
            {
                MANDANTID      = 68,
                MandantCode    = "VGB",
                ARTCODE        = "VGB7320560620122",
                ARTNAME        = "7320560620122",
                ARTUPDATE      = 1,
                CUSTOMPARAMVAL = new List <ArtCpvWrapper>
                {
                    new ArtCpvWrapper
                    {
                        CUSTOMPARAMCODE_R_ARTCPV = "ARTProviderArtName",
                        CPVVALUE_ARTCPV          = "Привет!"
                    },

                    new ArtCpvWrapper
                    {
                        CUSTOMPARAMCODE_R_ARTCPV = "ARTPartnerHostRef",
                        CPVVALUE_ARTCPV          = @"ООО ""Рога и копыта"", Limited"
                    },

                    //new ArtCpvWrapper
                    //{
                    //     CUSTOMPARAMCODE_R_ARTCPV = "ARTPartner",
                    //     CPVVALUE_ARTCPV = @"ООО ""Рога и копыта"", Limited"
                    //}
                }
            };

            using (var uow = uowFactory.Create(false))
            {
                try
                {
                    uow.BeginChanges();
                    var result = ArtLoadHelper.LoadCpv(item: item, cpSource: null, cpTarget: null, uow: uow, log: _log);
                    uow.CommitChanges();
                    //uow.RollbackChanges();
                }
                catch
                {
                    uow.RollbackChanges();
                    throw;
                }
            }
        }
예제 #3
0
        /// <summary>
        /// Добавление CPV.
        /// </summary>
        public static string[] LoadCpv(ArtWrapper item, string cpSource, string cpTarget, IUnitOfWork uow, ILog log)
        {
            //Внимание! Загрузка CPV в предположении, что уровень вложенности - 0, одна строка с ИП - один CPV.
            log.Debug("Загрузка CPV для артикула.");

            if (item == null)
            {
                throw new ArgumentNullException("item");
            }

            var messages       = new List <string>();
            var loadentityname = item.ARTNAME;

            if (item.CUSTOMPARAMVAL == null || item.CUSTOMPARAMVAL.Count == 0)
            {
                log.DebugFormat("Артикул '{0}' не содержит CPV", loadentityname);
                return(messages.ToArray());
            }

            if (string.IsNullOrEmpty(item.ARTCODE))
            {
                throw new DeveloperException("Свойство Artcode артикула '{0}' неопределено. Загрузка CPV невозможна.", loadentityname);
            }

            //Проверяем cpv
            var cpvwraps = item.CUSTOMPARAMVAL.Where(p => !string.IsNullOrEmpty(p.CUSTOMPARAMCODE_R_ARTCPV)).ToArray();

            if (cpvwraps.Length == 0)
            {
                var message = string.Format("Свойство CUSTOMPARAMCODE не определено в коллекции CPV артикула '{0}'.", loadentityname);
                messages.Add(message);
                log.Error(message);
                return(messages.ToArray());
            }

            //Получаем список cpv
            var cpvHelper = new CpvHelper <ArtCpv>(CpEntity, item.ARTCODE);
            var wmscpvs   = cpvHelper.GetAllCpv(uow);

            if (wmscpvs.Length == 0)
            {
                var message = string.Format("Для сущности '{0}' CP не определены.", CpEntity);
                messages.Add(message);
                log.Error(message);
                return(messages.ToArray());
            }

            Func <string, List <ArtCpv> > findCpvHandler = code =>
            {
                var findcpvs = wmscpvs.Where(p => p.CustomParamCode.EqIgnoreCase(code)).ToList();
                if (findcpvs.Count == 0)
                {
                    var message = string.Format("Не найден cpv '{0}' для артикула '{1}'.", code, loadentityname);
                    throw new OperationException(message);
                }
                return(findcpvs);
            };

            foreach (var cpvw in cpvwraps)
            {
                var customParamCode = cpvw.CUSTOMPARAMCODE_R_ARTCPV;

                //Ищем в wmscpvs параметр
                var wmscpvl            = findCpvHandler(customParamCode);
                var cpvvalue           = cpvw.CPVVALUE_ARTCPV;
                var isCpCodeArtPartner = CpCodeNameArtPartner.EqIgnoreCase(customParamCode);

                //HACK: проверяем CPV ARTPartner или ARTPartnerHostRef
                if (isCpCodeArtPartner || CpCodeNameArtPartnerHostRef.EqIgnoreCase(customParamCode))
                {
                    if (!string.IsNullOrEmpty(cpvvalue))
                    {
                        var partners = GetPartnerByMandantByNamesByHostRef(mandantid: item.MANDANTID,
                                                                           partnerName: cpvvalue, partnerHostRef: cpvvalue, partnerCode: null, partnerFullName: null,
                                                                           uow: uow);
                        if (partners.Length == 0)
                        {
                            var message = string.Format("Не найден Поставщик по значению '{0}' в cpv '{1}' для артикула '{2}'.", cpvvalue, customParamCode, loadentityname);
                            throw new IntegrationService.IntegrationLogicalException(message);
                            //messages.Add(message);
                        }

                        string spartnerid;
                        if (partners.Length == 1)
                        {
                            spartnerid = partners[0].GetKey <decimal>().ToString(CultureInfo.InvariantCulture);
                        }
                        else
                        {
                            var maxPartnerId = partners.Max(p => p.GetKey <decimal>());
                            spartnerid = partners.Select(p => p.GetKey <decimal>()).First(p => p == maxPartnerId).ToString(CultureInfo.InvariantCulture);

                            //var message = string.Format("Найдено несколько Поставщиков по значению '{0}' в cpv '{1}' для артикула '{2}'", cpvvalue, customParamCode, loadentityname);
                            //throw new IntegrationService.IntegrationLogicalException(message);
                            ////messages.Add(message);
                        }

                        //Добавляем ид. партнера в cpv 'ARTPartner'
                        if (isCpCodeArtPartner)
                        {
                            cpvvalue = spartnerid;
                        }
                        else
                        {
                            var cpvArtPartnerl = findCpvHandler(CpCodeNameArtPartner);
                            cpvArtPartnerl.ForEach(p => p.CPVValue = spartnerid);
                        }
                    }
                }

                //Обновляем значение
                wmscpvl.ForEach(p => p.CPVValue = cpvvalue);
            }

            //Сохраняем параметр
            if (wmscpvs.Any())
            {
                cpvHelper.Save(source: wmscpvs, allowUpdate: item.ARTUPDATE == 1, includeCpvWithDafaultValue: false,
                               verify: false, uow: uow);
                log.DebugFormat("Для артикула '{0}' загружены CPV.", loadentityname);
            }

            return(messages.ToArray());
        }
예제 #4
0
        public static string[] FillArtManufacturer(ArtWrapper item, IUnitOfWork uow, ILog log, int partnerNameFieldMaxLength)
        {
            var messages = new List <string>();

            var value = item.ARTMANUFACTURERCODE;

            if (string.IsNullOrEmpty(value))
            {
                return(messages.ToArray());
            }

            var partners = GetPartnerByMandantByNamesByHostRef(mandantid: item.MANDANTID, partnerName: value,
                                                               partnerHostRef: value, partnerCode: null, partnerFullName: value, uow: uow);

            if (partners.Length == 0)
            {
                if (item.CREATEMANUFACTURER.HasValue)
                {
                    //Создаём производителя
                    var partnerObj = new Partner
                    {
                        MandantId       = item.MANDANTID,
                        PartnerFullName = value
                    };
                    var name = value;
                    if (name.Length > partnerNameFieldMaxLength)
                    {
                        name = name.Substring(0, partnerNameFieldMaxLength);
                    }
                    partnerObj.PartnerName = name;

                    using (var partMgr = IoC.Instance.Resolve <IBaseManager <Partner> >())
                    {
                        if (uow != null)
                        {
                            partMgr.SetUnitOfWork(uow);
                        }
                        partMgr.Insert(ref partnerObj);
                    }

                    partners = new[] { partnerObj };
                }
                else
                {
                    var message =
                        string.Format(
                            "Не найден Производитель по значению '{0}' в ARTMANUFACTURERCODE для артикула '{1}'.", value,
                            item.ARTNAME);
                    messages.Add(message);
                    log.Error(message);
                }
            }

            if (partners.Length > 1)
            {
                var message = string.Format("Найдено несколько Производителей по значению '{0}' в ARTMANUFACTURERCODE для артикула '{1}'.", value, item.ARTNAME);
                messages.Add(message);
                log.Error(message);
            }

            item.ARTMANUFACTURER = partners.Select(p => p.GetKey <decimal?>()).FirstOrDefault();

            return(messages.ToArray());
        }