示例#1
0
        public void Execute(IServiceProvider serviceProvider)
        {
            try
            {
                IPluginExecutionContext     context        = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext));
                IOrganizationServiceFactory serviceFactory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory));
                IOrganizationService        service        = serviceFactory.CreateOrganizationService(context.UserId);

                if (context.PrimaryEntityName != new_monitoring.EntityLogicalName)
                {
                    return;
                }

                Entity entity = null;
                if (context.MessageName.ToLower() == "create")
                {
                    entity = (Entity)context.InputParameters["Target"];
                }
                else if (context.MessageName.ToLower() == "update")
                {
                    entity = (Entity)context.PostEntityImages["Post"];
                }
                else
                {
                    return;
                }

                var correnctEntity = entity.ToEntity <new_monitoring>();
                if (!isTrust(correnctEntity.new_accountid, service))
                {
                    return;
                }

                if (correnctEntity.new_cropid == null)
                {
                    return;
                }

                /* if (DateTime.Now < DateTime.Now.Date.AddHours(11).AddMinutes(05))*/
                using (var orgContext = new OrganizationServiceContext(service))
                {
                    var          haveAprove = CheckaprovedEntity(orgContext, correnctEntity.new_cropid.Id);
                    var          currency   = getCurrency(orgContext) ?? 0;
                    new_constant cons       = getConstanta(orgContext);

                    if (cons == null)
                    {
                        throw new InvalidPluginExecutionException("Створіть запис константи");
                    }

                    var    margin         = cons.new_purchase_margin ?? new Money(0);
                    var    coefficient    = cons.GetAttributeValue <double?>("new_vat_return_coefficient") ?? 1;
                    double nikolaevUSD    = 0;
                    Money  nikolaevRec    = new Money(0);
                    double odesaUSD       = 0;
                    Money  odesaRec       = new Money(0);
                    double odesaRecUSD    = 0;
                    double nikolaevRecUSD = 0;

                    if (correnctEntity.new_purchase_price_nikolaev != null &&
                        correnctEntity.new_purchase_price_nikolaev.Value != 0)
                    {
                        nikolaevUSD    = ((double)correnctEntity.new_purchase_price_nikolaev?.Value / currency) * coefficient;
                        nikolaevRec    = new Money(correnctEntity.new_purchase_price_nikolaev.Value - margin.Value);
                        nikolaevRecUSD = ((double)nikolaevRec.Value / currency) * coefficient;
                    }
                    if (correnctEntity.new_purchase_price_odessa != null &&
                        correnctEntity.new_purchase_price_odessa.Value != 0)
                    {
                        odesaUSD    = ((double)correnctEntity.new_purchase_price_odessa?.Value / currency) * coefficient;
                        odesaRec    = new Money(correnctEntity.new_purchase_price_odessa.Value - margin.Value);
                        odesaRecUSD = ((double)odesaRec.Value / currency) * coefficient;
                    }

                    if (haveAprove == null)
                    {
                        var checkPurchase = (from i in orgContext.CreateQuery <new_aprove_price>()
                                             where i.CreatedOn >= DateTime.Now.Date.ToUniversalTime() &&
                                             i.CreatedOn <= DateTime.Now.AddDays(1).Date.ToUniversalTime() &&
                                             i.new_cropid.Id == correnctEntity.new_cropid.Id &&
                                             i.new_aproved != new OptionSetValue(100000002)
                                             select i).FirstOrDefault();

                        if (checkPurchase == null)
                        {
                            new_aprove_price CreateRecord = new new_aprove_price()
                            {
                                new_max_purchase_price_odessa   = correnctEntity.new_purchase_price_odessa,
                                new_max_purchase_price_nikolaev = correnctEntity.new_purchase_price_nikolaev,
                                new_cropid            = correnctEntity.new_cropid,
                                new_aproved           = new OptionSetValue(100000001),
                                new_trader_Odesaid    = correnctEntity.new_accountid,
                                new_trader_Mykolaivid = correnctEntity.new_accountid,

                                new_dollar_rate = currency,
                                new_max_purchase_mykolaiv_usd      = nikolaevUSD,
                                new_dollar_purchase_price_nikolaev = nikolaevRecUSD,
                                new_recom_purchase_price_nikolaev  = nikolaevRec,
                                new_recom_purchase_price_odessa    = odesaRec,
                                new_max_purchase_odesa_usd         = odesaUSD,
                                new_dollar_purchase_price_odessa   = odesaRecUSD,
                                new_purchase_margin = margin
                            };
                            service.Create(CreateRecord);
                        }
                        else
                        {
                            new_aprove_price UpdateRecord = new new_aprove_price();
                            UpdateRecord.Id = checkPurchase.Id;
                            bool flag = false;

                            if (checkPurchase.new_max_purchase_price_odessa?.Value < correnctEntity.new_purchase_price_odessa?.Value)
                            {
                                UpdateRecord.new_max_purchase_price_odessa = correnctEntity.new_purchase_price_odessa;
                                UpdateRecord.new_trader_Odesaid            = correnctEntity.new_accountid;
                                UpdateRecord.new_aproved        = new OptionSetValue(100000001);
                                UpdateRecord.new_trader_Odesaid = correnctEntity.new_accountid;
                                UpdateRecord.new_recom_purchase_price_odessa  = odesaRec;
                                UpdateRecord.new_max_purchase_odesa_usd       = odesaUSD;
                                UpdateRecord.new_dollar_purchase_price_odessa = odesaRecUSD;
                                UpdateRecord.new_purchase_margin = margin;
                                UpdateRecord.new_dollar_rate     = currency;
                                flag = true;
                            }

                            /* else
                             * {
                             *   UpdateRecord.new_max_purchase_price_odessa = checkPurchase.new_max_purchase_price_odessa;
                             *   UpdateRecord.new_trader_Odesaid = checkPurchase.new_trader_Odesaid;
                             *   UpdateRecord.new_dollar_rate = checkPurchase.new_dollar_rate;
                             *   UpdateRecord.new_max_purchase_odesa_usd = checkPurchase.new_max_purchase_mykolaiv_usd;
                             *   UpdateRecord.new_dollar_purchase_price_odessa = checkPurchase.new_dollar_purchase_price_nikolaev;
                             *   UpdateRecord.new_recom_purchase_price_odessa = checkPurchase.new_recom_purchase_price_nikolaev;
                             *   UpdateRecord.new_purchase_margin = checkPurchase.new_purchase_margin;
                             * }*/

                            if (checkPurchase.new_max_purchase_price_nikolaev?.Value < correnctEntity.new_purchase_price_nikolaev?.Value)
                            {
                                UpdateRecord.new_max_purchase_price_nikolaev = correnctEntity.new_purchase_price_nikolaev;
                                UpdateRecord.new_trader_Mykolaivid           = correnctEntity.new_accountid;
                                UpdateRecord.new_aproved                        = new OptionSetValue(100000001);
                                UpdateRecord.new_trader_Mykolaivid              = correnctEntity.new_accountid;
                                UpdateRecord.new_dollar_rate                    = currency;
                                UpdateRecord.new_max_purchase_mykolaiv_usd      = nikolaevUSD;
                                UpdateRecord.new_dollar_purchase_price_nikolaev = nikolaevRecUSD;
                                UpdateRecord.new_recom_purchase_price_nikolaev  = nikolaevRec;
                                UpdateRecord.new_purchase_margin                = margin;
                                flag = true;
                            }

                            /* else
                             * {
                             *   UpdateRecord.new_max_purchase_price_nikolaev = checkPurchase.new_max_purchase_price_nikolaev;
                             *   UpdateRecord.new_trader_Mykolaivid = checkPurchase.new_trader_Mykolaivid;
                             *   UpdateRecord.new_dollar_rate = checkPurchase.new_dollar_rate;
                             *   UpdateRecord.new_max_purchase_mykolaiv_usd = checkPurchase.new_max_purchase_mykolaiv_usd;
                             *   UpdateRecord.new_dollar_purchase_price_nikolaev = checkPurchase.new_dollar_purchase_price_nikolaev;
                             *   UpdateRecord.new_recom_purchase_price_nikolaev = checkPurchase.new_recom_purchase_price_nikolaev;
                             *   UpdateRecord.new_purchase_margin = checkPurchase.new_purchase_margin;
                             * }*/
                            if (flag)
                            {
                                service.Update(UpdateRecord);
                            }
                        }
                    }
                    else
                    {
                        new_aprove_price CreateRecord = new new_aprove_price();
                        bool             flag         = false;

                        if (haveAprove.new_max_purchase_price_odessa?.Value < correnctEntity.new_purchase_price_odessa?.Value)
                        {
                            CreateRecord.new_max_purchase_price_odessa = correnctEntity.new_purchase_price_odessa;
                            CreateRecord.new_trader_Odesaid            = correnctEntity.new_accountid;
                            CreateRecord.new_aproved                      = new OptionSetValue(100000001);
                            CreateRecord.new_cropid                       = correnctEntity.new_cropid;
                            CreateRecord.new_dollar_rate                  = currency;
                            CreateRecord.new_max_purchase_odesa_usd       = odesaUSD;
                            CreateRecord.new_recom_purchase_price_odessa  = odesaRec;
                            CreateRecord.new_dollar_purchase_price_odessa = odesaRecUSD;
                            CreateRecord.new_purchase_margin              = margin;
                            flag = true;
                        }
                        else
                        {
                            CreateRecord.new_max_purchase_price_odessa = haveAprove.new_max_purchase_price_odessa;
                            CreateRecord.new_trader_Odesaid            = haveAprove.new_trader_Odesaid;
                        }
                        if (haveAprove.new_max_purchase_price_nikolaev?.Value < correnctEntity.new_purchase_price_nikolaev?.Value)
                        {
                            CreateRecord.new_max_purchase_price_nikolaev = correnctEntity.new_purchase_price_nikolaev;
                            CreateRecord.new_trader_Mykolaivid           = correnctEntity.new_accountid;
                            CreateRecord.new_aproved     = new OptionSetValue(100000001);
                            CreateRecord.new_cropid      = correnctEntity.new_cropid;
                            CreateRecord.new_dollar_rate = currency;
                            CreateRecord.new_max_purchase_mykolaiv_usd      = nikolaevUSD;
                            CreateRecord.new_recom_purchase_price_nikolaev  = nikolaevRec;
                            CreateRecord.new_dollar_purchase_price_nikolaev = nikolaevRecUSD;
                            CreateRecord.new_purchase_margin = margin;
                            flag = true;
                        }
                        else
                        {
                            CreateRecord.new_max_purchase_price_nikolaev = haveAprove.new_max_purchase_price_nikolaev;
                            CreateRecord.new_trader_Mykolaivid           = haveAprove.new_trader_Mykolaivid;
                        }
                        if (flag)
                        {
                            service.Create(CreateRecord);
                            new_aprove_price updateToClose = new new_aprove_price();
                            updateToClose.Id = haveAprove.Id;
                            //updateToClose.new_aproved = new OptionSetValue(100000002);
                            service.Update(updateToClose);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                throw new InvalidPluginExecutionException(ex.Message);
            }
        }