Esempio n. 1
0
        private decimal?PartnerLoadInternal(PartnerWrapper item, ICollection <AddressBook> wmsaddresscol, List <ErrorWrapper> retMessage, IBaseManager <Partner> mgr, IUnitOfWork uow)
        {
            var partner = new Partner();

            partner = MapTo(item, partner);

            if (string.IsNullOrEmpty(partner.PartnerName) && string.IsNullOrEmpty(partner.PartnerFullName))
            {
                const string message = "Партнер не создан. Наименование партнера не может быть пустым.";
                retMessage.Add(new ErrorWrapper
                {
                    ERRORCODE    = MessageHelper.WarningCode.ToString(),
                    ERRORMESSAGE = message
                });
                Log.Info(message);
                return(null);
            }

            AddOrUpdatePartnerAddress(partner, wmsaddresscol, item.DONOTUPDATELEGALADDRESS > 0);

            SetXmlIgnore(partner, false);
            mgr.Insert(ref partner);
            Log.InfoFormat("Загружен партнер «{0}» с ID = {1}", item.PARTNERNAME, partner.PartnerId);

            var ewr = new ErrorWrapper
            {
                ERRORCODE    = MessageHelper.SuccessCode.ToString(),
                ERRORMESSAGE = string.Format("Загружен партнер «{0}»", item.PARTNERNAME)
            };

            retMessage.Add(ewr);

            if (item.GPVs != null)
            {
                using (var gpvMgr = IoC.Instance.Resolve <IBaseManager <PartnerGpv> >())
                {
                    gpvMgr.SetUnitOfWork(uow);
                    foreach (var gpvObj in item.GPVs)
                    {
                        var gpv = new PartnerGpv();
                        gpv = MapTo(gpvObj, gpv);
                        gpv.GParamValKey = partner.PartnerId.To <decimal>();
                        SetXmlIgnore(gpv, false);
                        gpvMgr.Insert(ref gpv);
                        Log.InfoFormat("Загружена GPV {0} (ID = {1})", gpv.GlobalParamCode_R, gpv.GParamID);
                    }
                }
            }

            return(partner.PartnerId);
        }
Esempio n. 2
0
        public override void DoTest()
        {
            //double el = 0.5;
            //var roundel1 = Math.Round(el, 2, MidpointRounding.AwayFromZero);
            //var roundel2 = Math.Round(el, 2, MidpointRounding.ToEven);

            var si         = new IntegrationService();
            var item       = new PartnerWrapper();
            var path       = @"Data\PartnerWrapper.xml";
            var serialiser = new XmlSerializer(typeof(PartnerWrapper));

            using (TextReader reader = new StreamReader(path))
            {
                item = (PartnerWrapper)serialiser.Deserialize(reader);
                reader.Close();
            }

            var result = si.PartnerLoad(item);
        }
Esempio n. 3
0
 public void AddPartnerWrapper(int tax = 0)
 {
     PartnerInfo = new PartnerWrapper(this, tax);
 }
Esempio n. 4
0
        private bool ProcessPartnerGroup(PartnerWrapper item, decimal partnerId, IUnitOfWork uow)
        {
            if (string.IsNullOrEmpty(item.PARTNERGROUPCODE) && string.IsNullOrEmpty(item.PARTNERGROUPHOSTREF))
            {
                return(false);
            }

            var partnergrouphostrefisnotempty = !string.IsNullOrEmpty(item.PARTNERGROUPHOSTREF);
            var partnerGroupType = typeof(PartnerGroup);
            var pgFilter         = string.Format("{0} = '{1}' or {2} = '{3}'",
                                                 SourceNameHelper.Instance.GetPropertySourceName(partnerGroupType,
                                                                                                 PartnerGroup.PARTNERGROUPNAMEPropertyName), item.PARTNERGROUPCODE,
                                                 SourceNameHelper.Instance.GetPropertySourceName(partnerGroupType,
                                                                                                 PartnerGroup.PARTNERGROUPHOSTREFPropertyName), item.PARTNERGROUPHOSTREF);

            PartnerGroup[] pgs;
            using (var pgMgr = IoC.Instance.Resolve <IBaseManager <PartnerGroup> >())
            {
                if (uow != null)
                {
                    pgMgr.SetUnitOfWork(uow);
                }
                pgs = pgMgr.GetFiltered(pgFilter, GetModeEnum.Partial).ToArray();
            }

            if (pgs.Length == 0)
            {
                if (partnergrouphostrefisnotempty)
                {
                    throw new IntegrationLogicalException(
                              string.Format("Группа партнёров с хост-идентификатором '{0}' не найдена.", item.PARTNERGROUPHOSTREF));
                }

                Log.DebugFormat("Не существует группа партнеров с PARTNERGROUPCODE '{0}'.", item.PARTNERGROUPCODE);
            }
            else
            {
                if (pgs.Length > 1 && partnergrouphostrefisnotempty)
                {
                    throw new IntegrationLogicalException(
                              string.Format("Найдено несколько групп партнёров с хост-идентификатором '{0}'.", item.PARTNERGROUPHOSTREF));
                }

                var partner2GroupType = typeof(Partner2Group);
                var p2GFilter         = string.Format("{0} = {1} and {2} = {3}",
                                                      SourceNameHelper.Instance.GetPropertySourceName(partner2GroupType,
                                                                                                      Partner2Group.PARTNERGROUPIDPropertyName), pgs[0].PartnerGroupId,
                                                      SourceNameHelper.Instance.GetPropertySourceName(partner2GroupType,
                                                                                                      Partner2Group.PARTNERIDPropertyName), partnerId);

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

                    var p2Gs = p2GMgr.GetFiltered(p2GFilter, GetModeEnum.Partial).ToArray();

                    if (p2Gs.Length == 0)
                    {
                        var p2GObj = new Partner2Group
                        {
                            PartnerGroupId = pgs[0].PartnerGroupId,
                            PartnerId      = partnerId
                        };

                        SetXmlIgnore(p2GObj, true);
                        p2GMgr.Insert(ref p2GObj);

                        Log.InfoFormat("Создана привязка к группе партнеров ид. '{0}'", p2GObj.PartnerGroupId);
                    }
                    else
                    {
                        Log.DebugFormat("Существует привязка к группе партнеров {0}", item.PARTNERGROUPCODE);
                    }

                    if (partnergrouphostrefisnotempty)
                    {
                        //Проверяем, связан ли партнёр с другой группой, имеющей не пустой хостидентификатор
                        p2GFilter = string.Format(
                            "wmspartner2group.PARTNERGROUPID_R in (select distinct(g.PARTNERGROUPID) from wmspartnergroup g where G.PARTNERGROUPHOSTREF is not null" +
                            " and G.PARTNERGROUPHOSTREF <> '{0}')" +
                            " and WMSPARTNER2GROUP.PARTNERID_R = {1}", item.PARTNERGROUPHOSTREF, partnerId);

                        p2Gs = p2GMgr.GetFiltered(p2GFilter, GetModeEnum.Partial).ToArray();
                        if (p2Gs.Length > 0)
                        {
                            p2GMgr.Delete(p2Gs);
                            Log.DebugFormat("Удалены следующие привязки партнера '{0}' к группе: {1}", partnerId,
                                            string.Join(",", p2Gs.Select(p => string.Format("'{0}'", p.PartnerGroupId))));
                        }
                    }
                }
            }

            return(true);
        }
Esempio n. 5
0
        private void ProcessLoadGpv(PartnerWrapper item, decimal partnerId, IUnitOfWork uow)
        {
            using (var gpvMgr = IoC.Instance.Resolve <IBaseManager <PartnerGpv> >())
            {
                gpvMgr.SetUnitOfWork(uow);

                var valuesGpv = "'" + string.Join("','", item.GPVs.Select(i => i.GLOBALPARAMCODE_R_PARTNERGPV)) + "'";

                var gpvFilter = string.Format("{0} = '{1}' and {2} = 'PARTNER' and {3} in ({4})",
                                              SourceNameHelper.Instance.GetPropertySourceName(typeof(PartnerGpv), PartnerGpv.GParamValKeyPropertyName), partnerId,
                                              SourceNameHelper.Instance.GetPropertySourceName(typeof(PartnerGpv), PartnerGpv.GParamVal2EntityPropertyName),
                                              SourceNameHelper.Instance.GetPropertySourceName(typeof(PartnerGpv), PartnerGpv.GlobalParamCodePropertyName), valuesGpv);
                var gpvs = gpvMgr.GetFiltered(gpvFilter).ToArray();

                foreach (var gpvWrapper in item.GPVs)
                {
                    if (gpvWrapper.GPARAMVALVALUE_PARTNERGPV == "1")
                    {
                        if (gpvs.Any(i => i.GlobalParamCode_R == gpvWrapper.GLOBALPARAMCODE_R_PARTNERGPV && i.GparamValValue == "1"))
                        {
                            Log.DebugFormat("Существует требуемый GPV «{0}»", gpvWrapper.GLOBALPARAMCODE_R_PARTNERGPV);
                        }
                        else
                        {
                            var existGpv = gpvs.FirstOrDefault(i => i.GlobalParamCode_R == gpvWrapper.GLOBALPARAMCODE_R_PARTNERGPV);
                            var gpv      = new PartnerGpv();
                            if (existGpv != null)
                            {
                                gpv = existGpv;
                                gpv.GparamValValue = "1";
                                SetXmlIgnore(gpv, true);
                                gpvMgr.Update(gpv);
                                Log.InfoFormat("Обновлен GPV «{0}» (ID = {1})", gpv.GlobalParamCode_R, gpv.GParamID);
                            }
                            else
                            {
                                gpv = MapTo(gpvWrapper, gpv);
                                gpv.GParamValKey = partnerId;
                                SetXmlIgnore(gpv, false);
                                gpvMgr.Insert(ref gpv);
                                Log.InfoFormat("Загружена GPV «{0}» (ID = {1})", gpv.GlobalParamCode_R, gpv.GParamID);
                            }
                        }
                    }
                    else
                    {
                        if (gpvs.Any(i => i.GlobalParamCode_R == gpvWrapper.GLOBALPARAMCODE_R_PARTNERGPV))
                        {
                            Log.DebugFormat("Существует требуемый GPV «{0}»", gpvWrapper.GLOBALPARAMCODE_R_PARTNERGPV);
                        }
                        else
                        {
                            var gpv = new PartnerGpv();
                            gpv = MapTo(gpvWrapper, gpv);
                            gpv.GParamValKey = partnerId;
                            SetXmlIgnore(gpv, false);
                            gpvMgr.Insert(ref gpv);
                            Log.InfoFormat("Загружена GPV «{0}» (ID = {1})", gpv.GlobalParamCode_R, gpv.GParamID);
                        }
                    }
                }
            }
        }
Esempio n. 6
0
        private decimal?PartnerUpdateInternal(PartnerWrapper item, Partner[] partners, ICollection <AddressBook> wmsaddresscol, bool isPermit, List <ErrorWrapper> retMessage, IBaseManager <Partner> mgr, IUnitOfWork uow)
        {
            var     partner   = new Partner();
            decimal partnerId = 0;
            var     isHostRef = false;
            var     donotupdatelegaladdress = item.DONOTUPDATELEGALADDRESS > 0;

            if (item.PARTNERHOSTREFNAME == 1)
            {
                var pHostRefName = partners.Where(i => i.PartnerHostRef.EqIgnoreCase(item.PARTNERHOSTREF) && i.PartnerName.EqIgnoreCase(item.PARTNERNAME)).ToArray();
                if (pHostRefName.Length > 0)
                {
                    partner = pHostRefName[0];
                    if (item.PARTNERCREATEBYHOSTREF > 1)
                    {
                        isHostRef = true;
                    }
                }
                else
                {
                    if (item.PARTNERCREATEBYHOSTREF > 1)
                    {
                        var pHostRefs = partners.Where(i => i.PartnerHostRef.EqIgnoreCase(item.PARTNERHOSTREF)).ToArray();
                        if (pHostRefs.Length > 0)
                        {
                            if (item.PARTNERCREATEBYHOSTREF == 2)
                            {
                                partner   = pHostRefs[0];
                                isHostRef = true;
                            }
                            if (item.PARTNERCREATEBYHOSTREF == 3)
                            {
                                isPermit = true;
                            }
                        }
                    }
                }
            }
            else
            {
                var pHostRefs = partners.Where(i => i.PartnerHostRef.EqIgnoreCase(item.PARTNERHOSTREF)).ToArray();
                if (pHostRefs.Length > 0)
                {
                    partner   = pHostRefs[0];
                    isHostRef = true;
                }

                if (pHostRefs.Length == 0)
                {
                    if (!item.PARTNERCREATEBYHOSTREF.HasValue || item.PARTNERCREATEBYHOSTREF == 0 || item.PARTNERCREATEBYHOSTREF == 3)
                    {
                        var pNames = partners.Where(i => i.PartnerName.ToUpper() == item.PARTNERNAME.ToUpper()).ToArray();
                        if (pNames.Length > 0)
                        {
                            partner = pNames[0];
                        }
                        Log.InfoFormat("Найден партнер «{0}» с ID = {1}", item.PARTNERNAME, partner.PartnerId);
                    }
                }
            }

            if (!isPermit)
            {
                if (isHostRef || !item.PARTNERCREATEBYHOSTREF.HasValue || item.PARTNERCREATEBYHOSTREF == 0)
                {
                    if (!string.IsNullOrEmpty(item.PARTNERNAME))
                    {
                        partner = MapTo(item, partner);
                    }

                    AddOrUpdatePartnerAddress(partner, wmsaddresscol, donotupdatelegaladdress);

                    if (partner.IsDirty)
                    {
                        SetXmlIgnore(partner, true);
                        mgr.Update(partner);

                        Log.InfoFormat("Обновлен партнер «{0}» {1}", item.PARTNERNAME, DateTime.Now.ToString("hh:mm:ss.fff"));
                        var ewr = new ErrorWrapper
                        {
                            ERRORCODE    = MessageHelper.SuccessCode.ToString(),
                            ERRORMESSAGE = string.Format("Обновлен партнер «{0}»", item.PARTNERNAME)
                        };
                        retMessage.Add(ewr);
                    }
                    else
                    {
                        Log.DebugFormat("Обновление партнера «{0}» не требуется", item.PARTNERNAME);
                        var ewr = new ErrorWrapper
                        {
                            ERRORCODE    = MessageHelper.SuccessCode.ToString(),
                            ERRORMESSAGE = string.Format("Обновление партнера «{0}» не требуется", item.PARTNERNAME)
                        };
                        retMessage.Add(ewr);
                    }
                    partnerId = partner.PartnerId.To <decimal>();
                }
                else
                {
                    partner = MapTo(item, partner);
                    AddOrUpdatePartnerAddress(partner, wmsaddresscol, donotupdatelegaladdress);
                    SetXmlIgnore(partner, false);
                    mgr.Insert(ref partner);
                    partnerId = partner.PartnerId.To <decimal>();
                    Log.InfoFormat("Загружен партнер «{0}» (код «{1}») с ID = {2}", item.PARTNERNAME, item.PARTNERHOSTREF, partnerId);
                    var ewr = new ErrorWrapper
                    {
                        ERRORCODE    = MessageHelper.SuccessCode.ToString(),
                        ERRORMESSAGE = string.Format("Загружен партнер «{0}» (код «{1}»)", item.PARTNERNAME, item.PARTNERHOSTREF)
                    };
                    retMessage.Add(ewr);
                }
            }
            else
            {
                Log.DebugFormat("Партнер «{0}» существует", item.PARTNERNAME);
                var ewr = new ErrorWrapper
                {
                    ERRORCODE    = MessageHelper.SuccessCode.ToString(),
                    ERRORMESSAGE = string.Format("Партнер «{0}» существует", item.PARTNERNAME)
                };
                retMessage.Add(ewr);
            }

            if (item.GPVs != null)
            {
                ProcessLoadGpv(item, partnerId, uow);
            }

            return(partner.PartnerId);
        }
Esempio n. 7
0
        public ErrorWrapper[] PartnerLoad(PartnerWrapper item)
        {
            Contract.Requires(item != null);

            var retMessage = new List <ErrorWrapper>();

            Log.InfoFormat("Start of PartnerLoad");
            Log.Debug(item.DumpToXML());
            var startAllTime = DateTime.Now;

            try
            {
                IUnitOfWork uow = null;
                try
                {
                    uow = UnitOfWorkHelper.GetUnit();

                    item.MANDANTID = CheckMandant(item.MANDANTID, item.MandantCode, uow);
                    if (item.MANDANTID == null)
                    {
                        throw new NullReferenceException("MandantCode");
                    }
                    Log.DebugFormat("Мандант = {0}", item.MandantCode);

                    var isPermit = item.PARTNERLOCKED;
                    if (isPermit)
                    {
                        item.PARTNERLOCKED = false;
                    }

                    var lockobj = LockPartnerLoadPerMandant.GetOrAdd(item.MANDANTID.Value, new object());

                    lock (lockobj)
                    {
                        Log.InfoFormat("Process PartnerLoad locked = {0:hh:mm:ss.fff}", DateTime.Now);

                        uow.BeginChanges();

                        //var partner = new Partner();
                        var partnerType   = typeof(Partner);
                        var partnername   = FilterHelper.ValidateFilterString(item.PARTNERNAME);
                        var partnerFilter = string.Format("{0} = {1} AND (upper({2}) = '{3}' or upper({4}) = '{5}')",
                                                          SourceNameHelper.Instance.GetPropertySourceName(partnerType, Partner.MANDANTIDPropertyName),
                                                          item.MANDANTID,
                                                          SourceNameHelper.Instance.GetPropertySourceName(partnerType, Partner.PARTNERNAMEPropertyName),
                                                          string.IsNullOrEmpty(partnername) ? null : partnername.ToUpper(),
                                                          SourceNameHelper.Instance.GetPropertySourceName(partnerType, Partner.PARTNERHOSTREFPropertyName),
                                                          string.IsNullOrEmpty(item.PARTNERHOSTREF) ? null : item.PARTNERHOSTREF.ToUpper());

                        //Получим не пустые адреса, исключая ADR_CLIENTRECIPIENT
                        var addresstypes = AddressHelper.GetAddressTypes(AddressBookType.ADR_CLIENTRECIPIENT);
                        var wrapperaddrs = AddressHelper.GetNotEmptyAddressBookByTypes(item.ADDRESS, addresstypes);

                        //Преобразуем в wms-адреса
                        var wmsaddresscol = new List <AddressBook>();
                        if (wrapperaddrs != null && wrapperaddrs.Length > 0)
                        {
                            foreach (var ad in wrapperaddrs)
                            {
                                var wmsadr = new AddressBook();
                                MapTo(ad, wmsadr);
                                if (!AddressHelper.IsAddressEmpty(wmsadr))
                                {
                                    wmsaddresscol.Add(wmsadr);
                                }
                            }
                        }

                        using (var mgr = IoC.Instance.Resolve <IBaseManager <Partner> >())
                        {
                            mgr.SetUnitOfWork(uow);

                            var     partners = mgr.GetFiltered(partnerFilter).ToArray();
                            decimal?partnerId;
                            if (partners.Length == 0)
                            {
                                partnerId = PartnerLoadInternal(item, wmsaddresscol, retMessage, mgr, uow);
                            }
                            else
                            {
                                partnerId = PartnerUpdateInternal(item, partners, wmsaddresscol, isPermit, retMessage, mgr, uow);
                            }

                            if (partnerId.HasValue)
                            {
                                if (!ProcessPartnerGroup(item, partnerId.Value, uow))
                                {
                                    Log.DebugFormat("Для партнера «{0}» не требуется привязка к группе",
                                                    item.PARTNERNAME);
                                }
                            }
                        }
                        uow.CommitChanges();
                        Log.InfoFormat("Process PartnerLoad unlocked = {0:hh:mm:ss.fff}", DateTime.Now);
                    }
                }
                catch (IntegrationLogicalException iex)
                {
                    if (uow != null)
                    {
                        uow.RollbackChanges();
                    }

                    var message = ExceptionHelper.ExceptionToString(iex);
                    Log.Error(message, iex);

                    var ew = new ErrorWrapper {
                        ERRORCODE = MessageHelper.ErrorCode.ToString(), ERRORMESSAGE = message
                    };
                    retMessage.Add(ew);
                    throw;
                }
                catch (Exception ex)
                {
                    if (uow != null)
                    {
                        uow.RollbackChanges();
                    }

                    var message = ExceptionHelper.ExceptionToString(ex);
                    Log.Error(message, ex);

                    var ew = new ErrorWrapper {
                        ERRORCODE = MessageHelper.ErrorCode.ToString(), ERRORMESSAGE = "Системная ошибка: " + message
                    };
                    retMessage.Add(ew);
                    throw;
                }
                finally
                {
                    if (uow != null)
                    {
                        uow.Dispose();
                    }
                }
            }
            catch (Exception ex)
            {
                var message = ExceptionHelper.ExceptionToString(ex);
                Log.Error(message, ex);
                throw new FaultException <string>(message, new FaultReason(message));
            }
            finally
            {
                Log.DebugFormat("PartnerLoad - общее время загрузки {0}", (DateTime.Now - startAllTime));
                Log.InfoFormat("End of PartnerLoad");
            }
            return(retMessage.ToArray());
        }