Example #1
0
        private static void FillCollectionToFull(ParamsCalculateKpi paramsCalculateKpi, List <PreciseDelivery> _all, PreciseDelivery result)
        {
            DateTime _startDate = new DateTime(paramsCalculateKpi.RangeDate.Start.Year,
                                               paramsCalculateKpi.RangeDate.Start.Month, 1);
            DateTime _endDate = new DateTime(paramsCalculateKpi.RangeDate.End.Year,
                                             paramsCalculateKpi.RangeDate.End.Month, 1);

            for (DateTime startDate = _startDate;
                 startDate <= _endDate;
                 startDate = startDate.AddMonths(1))
            {
                if (_all.FindAll(e => e.Month != -1).Any(e => e.Month == startDate.Month && e.Year == startDate.Year))
                {
                    var date = startDate;
                    result?.Detail?.Add(_all.Find(e => e.Month == date.Month && e.Year == date.Year));
                }
                else
                {
                    PreciseDelivery delivery = new PreciseDelivery();
                    if (result != null)
                    {
                        delivery.Description = result.Description;
                        delivery.Deviation   = 0;
                        delivery.Fact        = 0;
                        delivery.Target      = 0;
                        delivery.Trend       = 0;
                        delivery.CountOrder  = 0;
                        delivery.Year        = startDate.Year;
                        delivery.Month       = startDate.Month;
                        result?.Detail?.Add(delivery);
                    }
                }
            }
        }
Example #2
0
        public void ListKpiByCustomer()
        {
            MssqlDataServiceImpl impl     = new MssqlDataServiceImpl();
            Customer             customer = new Customer();

            customer.Code = "K009154";
            customer.Name = "САВУШКИН ПРОДУКТ ОАО";
            customer.Seq  = 0;

            DateRange dateRange = new DateRange();

            dateRange.Start = DateTime.Parse("2018-07-01");
            dateRange.End   = DateTime.Parse("2018-09-30");
            List <KpiHelper> helpers = new List <KpiHelper>();

            helpers.Add(new KpiHelper(KpiConst.PRECISEDELIVERYBYAMOUNT));
            helpers.Add(new KpiHelper(KpiConst.PRECISEENTERSTORAGE));

            ParamsCalculateKpi paramsCalculateKpi = new ParamsCalculateKpi();

            paramsCalculateKpi.Enterprise       = "ГОТЭК";
            paramsCalculateKpi.Customer         = customer;
            paramsCalculateKpi.RangeDate        = dateRange;
            paramsCalculateKpi.SelectKpi        = helpers;
            paramsCalculateKpi.TypeCustomer     = new List <string>();
            paramsCalculateKpi.CustomerDelivery = customer;

            // PreciseDelivery delivery = impl.GetPreciseDeliveryByEnterprise("ГОТЭК",customer);
            impl.ListKpiByCustomers(paramsCalculateKpi);
        }
Example #3
0
        public ActionResult CalculateKpi([FromBody] ParamsCalculateKpi data)
        {
            List <PreciseDelivery> preciseDeliveries = new List <PreciseDelivery>();

            List <PreciseDelivery> preciseDelivery = _dataService.CalculateKpi(data);

            preciseDeliveries.AddRange(preciseDelivery);
            return(Ok(preciseDeliveries));
        }
Example #4
0
 public List <KpiHelper> ListKpiSelected(ParamsCalculateKpi paramsCalculateKpi)
 {
     if (paramsCalculateKpi.SelectKpi.Any(e => e.Name.Equals(KpiConst.ALL)))
     {
         return(ListKpis().FindAll(k => !k.Name.Equals(KpiConst.ALL)));
     }
     else
     {
         return(paramsCalculateKpi.SelectKpi.FindAll(k => !k.Name.Equals(KpiConst.ALL)));
     }
 }
Example #5
0
        public static string CreateInSectionForCust_Seq_By_C(ParamsCalculateKpi paramsCalculateKpi)
        {
            string result = "";

            if (!paramsCalculateKpi.CustomerDelivery.Name.Equals(KpiConst.ALL))
            {
                result = string.Format(" and c.cust_seq = {0} ", paramsCalculateKpi.CustomerDelivery.Seq);
            }

            return(result);
        }
Example #6
0
        public static List <KpiHelper> GetSelectedKpi(ParamsCalculateKpi paramsCalculateKpi)
        {
            List <KpiHelper> _selectedKpi;

            if (paramsCalculateKpi.SelectKpi.Any(e => e.Name.Equals(KpiConst.ALL)))
            {
                _selectedKpi = GetKpiHelpers().FindAll(k => !k.Name.Equals(KpiConst.ALL));
            }
            else
            {
                _selectedKpi = paramsCalculateKpi.SelectKpi.FindAll(k => !k.Name.Equals(KpiConst.ALL));
            }

            return(_selectedKpi);
        }
Example #7
0
 private static void CorrectResultForSpeedReclaim(ParamsCalculateKpi paramsCalculateKpi, PreciseDelivery result)
 {
     if (result.Description.Equals(KpiConst.SPEEDCLAIM))
     {
         result.Fact      = Math.Round(result.Fact);
         result.Deviation = Math.Round(result.Deviation);
         result.Detail.ForEach(d =>
         {
             d.Fact       = Math.Round(d.Fact);
             d.CountOrder = 0;
             d.Target     = 0;
             d.Deviation  = Math.Round(d.Deviation);
             d.Trend      = 0;
         });
     }
 }
Example #8
0
        public async Task <ActionResult> DownloadReportKpi([FromBody] ParamsCalculateKpi data)
        {
            string sFileName    = @"driveorder.xlsx";
            var    streamResult = await _utilService.KpiXLSFileStreamResult(data);

            streamResult.Position = 0;
            var result = File(streamResult,
                              "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", sFileName);

            Response.Headers["Content-Disposition"] = new ContentDispositionHeaderValue("attachment")
            {
                FileName = sFileName
            }.ToString();


            return(result);
        }
Example #9
0
        /*
         * TODO select for get number car
         * left join sl_gotek.dbo.gtk_car_zayhdr zh on h.cust_num = zh.CustNum and h.cust_seq = zh.CustSeq and h.ShipZayNum = zh.ZayNum
         * left join sl_gotek.dbo.gtk_car_sprav s on zh.IdList = s.idList
         */


        public async Task <List <DeliveryRecord> > GetDeliveryRecordsAsync(ParamsCalculateKpi paramsCalculateKpi)
        {
            List <DeliveryRecord> _listAll;

            string _selectCustomer =
                Utils.CreateInSectionForAllCustomer(paramsCalculateKpi.Customer, paramsCalculateKpi.TypeCustomer);
            string _selectSeqCustomer = Utils.CreateInSectionForCust_Seq(paramsCalculateKpi);

            string excludeSelfTake = Utils.ExcludeSelfTakeWhere(paramsCalculateKpi);  //Убирать ли самовывоз?

            string query = string.Format(" SELECT site,s.cust_num as custNum,s.cust_seq as custSeq," +
                                         " RTRIM(COALESCE(ca.name,ca.RUSExtName)) as nameCustomer, " +
                                         "  dbo.GTKFormatAddress(s.cust_num,s.cust_seq,'custaddr') as addressCustomer," +
                                         " s.co_num as coNum, " +
                                         " s.co_line as coLine,CAST(s.DateZay AS DATE) AS datezay,s.MerchZayNum ," +
                                         " s.ShipZayNum,CAST(s.DateMFGPlan AS DATE) AS  DateMFGPlan," +
                                         " CAST(s.DateMFGFact AS DATE)  AS DateMFGFact,CAST(s.DateWHSPlan AS DATE) AS DateWHSPlan, " +
                                         " CAST(s.DateWHSFact AS DATE) as DateWHSFact , CAST(s.DateShipPlan AS DATE) AS DateShipPlan, " +
                                         " CAST(s.DateShipZay AS DATE) AS DateShipZay , CAST(s.DateShipFact AS DATE) AS DateShipFact ," +
                                         " CAST(s.DateDostPlan AS DATE) as DateDostPlan,CAST(s.DateDostPor AS DATE) as DateDostPor," +
                                         " CAST(s.DateDostFact AS DATE) AS DateDostFact,s.Stat_Row as StatRow,s.StatMFG ,s.DayMFG ,s.StatShip ,s.DayShip ," +
                                         " s.StatDost,s.DayDost ,s.KPI_stat as kpiStat,s.CreatedBy,s.CreateDate,s.distance,s.KPI_whse as kpiWhse, s.plant_ship as plantShip," +
                                         " s.po_num as poNum, s.job as job, s.vidotgr as vidOtgr, s.stat_kpi_list as inList" +
                                         " FROM gtk_group_report.dbo.gtk_kpi_ship s " +
                                         "    CROSS APPLY (SELECT a.name,a.RUSExtName,a.cust_seq,a.cust_num AS code " +
                                         " FROM dbo.custaddr a WHERE s.cust_num = a.cust_num AND a.cust_seq = 0) AS ca" +
                                         " where site = '{0}'  and s.cust_num  {1} and s.DateDostFact between '{2}' and '{3} '" +
                                         " {4} {5}" +
                                         " order by nameCustomer"

                                         , DataConnection.GetNameDbInGotekGroup(paramsCalculateKpi.Enterprise)
                                         , _selectCustomer
                                         , paramsCalculateKpi.RangeDate.Start.ToString("yyyyMMdd")
                                         , paramsCalculateKpi.RangeDate.End.ToString("yyyyMMdd")
                                         , _selectSeqCustomer, excludeSelfTake
                                         );

            using (var connection =
                       new SqlConnection(DataConnection.GetConnectionString(paramsCalculateKpi.Enterprise)))
            {
                _listAll = (await connection.QueryAsync <DeliveryRecord>(query)).ToList();
            }

            return(_listAll);
        }
Example #10
0
        private static string GetStringPreciseWhse(ParamsCalculateKpi paramsCalculateKpi, string nameKpi, int order)
        {
            string _selectCustomer =
                Utils.CreateInSectionForAllCustomer(paramsCalculateKpi.Customer, paramsCalculateKpi.TypeCustomer);
            string _selectSeqCustomer = Utils.CreateInSectionForCust_Seq_By_C(paramsCalculateKpi);
            string excludeSelfTake    = Utils.ExcludeSelfTakeWhere(paramsCalculateKpi); //Убирать ли самовывоз?

            /*string query = string.Format(
             *  $" select customer.name as customername,max(kpi_description) as description, max(t.Kpi_target) as target, avg(s.KPI_whse) as fact, " +
             *  " (avg(s.KPI_whse)  - max(t.Kpi_target)) as deviation, count(*) as countorder, {6} as order_  from gtk_group_report.dbo.gtk_kpi_ship s " +
             *  " join (select * from dbo.gtk_cust_kpi_lns where  kpi_description = '{4}') as t on t.cust_num = s.cust_num " +
             *  " join  ( SELECT name,code,cust_seq FROM ( SELECT  c.cust_num AS code, RTRIM(COALESCE(ca.name,ca.RUSExtName)) as name, " +
             *  "  CASE WHEN uf_strategcust = '1'  THEN 'СК' WHEN uf_strategprospect = '1' THEN 'СП' WHEN (uf_strategcust IS NULL AND uf_strategprospect IS NULL)  " +
             *  "  THEN 'ПР' ELSE 'ПР' END AS type, c.cust_seq FROM dbo.customer c  " +
             *  " JOIN dbo.custaddr ca ON ca.cust_num = c.cust_num AND ca.cust_seq = 0 join dbo.gtk_cust_kpi_hdr h on ca.cust_num = h.cust_num  " +
             *  " WHERE 1 = 1  {3}  AND RTRIM(COALESCE(ca.name,ca.RUSExtName)) IS NOT NULL ) as customer    " +
             *  " where 1 = 1    AND customer.code  {0}) customer  on customer.code = s.cust_num  and customer.cust_seq = s.cust_seq " +
             *  "  where s.DateWHSFact between '{1}' and '{2}'  and s.site = '{5}' group by customer.name",
             *   _selectCustomer,
             *   paramsCalculateKpi.RangeDate.Start.ToString("yyyyMMdd"),
             *   paramsCalculateKpi.RangeDate.End.ToString("yyyyMMdd"), _selectSeqCustomer, nameKpi,
             *   DataConnection.GetNameDbInGotekGroup(paramsCalculateKpi.Enterprise) ,order);
             */

            string query = string.Format(
                $"select customer.name as customername,MAX(kpi_description) as description, MONTH(s.DateWHSFact) AS month,YEAR(s.DateWHSFact) AS year," +
                $" AVG(t.Kpi_target) as target, SUM(t.KPI_Target) AS targetSumma,COUNT(t.KPI_Target) AS targetCount,AVG(s.KPI_whse) as fact, " +
                " SUM(s.KPI_whse) AS factSumma,COUNT(s.KPI_whse) AS factCount,AVG(s.KPI_whse  - t.Kpi_target) as deviation, count(*) as countorder ,{6} as order_ " +
                " from gtk_group_report.dbo.gtk_kpi_ship s " +
                " join (select * from dbo.gtk_cust_kpi_lns where  kpi_description = '{4}') as t  on t.cust_num = s.cust_num " +
                " CROSS APPLY  (SELECT a.name,a.RUSExtName,a.cust_seq, a.cust_num AS code FROM dbo.custaddr a WHERE s.cust_num = a.cust_num AND a.cust_seq = 0)  as customer" +
                " where s.cust_num  {0} and s.DateWHSFact between '{1}' and '{2}' and s.site = '{5}' {7} " +
                " group by   customer.name,MONTH(s.DateWHSFact),YEAR(s.DateWHSFact)", _selectCustomer,
                paramsCalculateKpi.RangeDate.Start.ToString("yyyyMMdd"),
                paramsCalculateKpi.RangeDate.End.ToString("yyyyMMdd"), _selectSeqCustomer,
                nameKpi,
                DataConnection.GetNameDbInGotekGroup(paramsCalculateKpi.Enterprise), order, excludeSelfTake);



            return(query);
        }
Example #11
0
        private static string GetStringKpiByName(ParamsCalculateKpi paramsCalculateKpi, string nameKpi, int order)
        {
            string _selectCustomer =
                Utils.CreateInSectionForAllCustomer(paramsCalculateKpi.Customer, paramsCalculateKpi.TypeCustomer);

            /*string query = string.Format($"select customer.name as customername, max(s.kpi_description) as description, max(t.Kpi_target) as target, avg(s.KPI_Fact) as fact," +
             *                              " (avg(s.KPI_Fact)  - max(t.Kpi_target)) as deviation, sum(s.KPI_Qty) as countorder,{5} as order_  from gtk_group_report.dbo.gtk_site_cust_kpi s   " +
             *                              "  join (select * from dbo.gtk_cust_kpi_lns where  kpi_description = '{3}') as t on t.cust_num = s.cust_num " +
             *                              "  join ( SELECT name,code,cust_seq FROM ( SELECT  c.cust_num AS code, RTRIM(COALESCE(ca.name,ca.RUSExtName)) as name,  " +
             *                              "          CASE WHEN uf_strategcust = '1'  THEN 'СК'       WHEN uf_strategprospect = '1' THEN 'СП'       " +
             *                              "              WHEN (uf_strategcust IS NULL AND uf_strategprospect IS NULL)  THEN 'ПР'       ELSE 'ПР' END AS type," +
             *                              "          c.cust_seq  " +
             *                              "         FROM dbo.customer c  " +
             *                              "         JOIN dbo.custaddr ca ON ca.cust_num = c.cust_num AND ca.cust_seq = 0 " +
             *                              "          join dbo.gtk_cust_kpi_hdr h on ca.cust_num = h.cust_num  " +
             *                              "         WHERE ca.cust_seq = 0  AND RTRIM(COALESCE(ca.name,ca.RUSExtName)) IS NOT NULL ) as customer    " +
             *                              "       where 1 = 1    AND customer.code  {0}) customer on customer.code = s.cust_num  and customer.cust_seq = 0 " +
             *                              " where s.Date_Calc between '{1}' and '{2}' and s.site = '{4}'  and s.KPI_description = t.KPI_description group by customer.name",
             *                              _selectCustomer,
             *                              paramsCalculateKpi.RangeDate.Start.ToString("yyyyMMdd"),
             *                              paramsCalculateKpi.RangeDate.End.ToString("yyyyMMdd"), nameKpi,
             *                              DataConnection.GetNameDbInGotekGroup(paramsCalculateKpi.Enterprise),order);
             */
            string query = string.Format(
                $"select customer.name as customername,MAX(s.kpi_description) as description, MONTH(s.Date_Calc) AS month,YEAR(s.Date_Calc) AS year," +
                $" AVG(t.Kpi_target) as target, SUM(t.KPI_Target) AS targetSumma,COUNT(t.KPI_Target) AS targetCount,AVG(s.KPI_Fact) as fact, " +
                " SUM(s.KPI_Fact) AS factSumma,COUNT(s.KPI_Fact) AS factCount,AVG(s.KPI_Fact  - t.Kpi_target) as deviation, count(s.KPI_Qty) as countorder ,{6} as order_ " +
                " from gtk_group_report.dbo.gtk_site_cust_kpi s " +
                " join (select * from dbo.gtk_cust_kpi_lns where  kpi_description = '{4}') as t  on t.cust_num = s.cust_num  and s.KPI_description = '{4}'" +
                " CROSS APPLY  (SELECT a.name,a.RUSExtName,a.cust_seq, a.cust_num AS code FROM dbo.custaddr a WHERE s.cust_num = a.cust_num AND a.cust_seq = 0)  as customer" +
                " where s.cust_num  {0} and s.Date_Calc between '{1}' and '{2}' and s.site = '{5}'  " +
                " group by   customer.name,MONTH(s.Date_Calc),YEAR(s.Date_Calc)",
                _selectCustomer,
                paramsCalculateKpi.RangeDate.Start.ToString("yyyyMMdd"),
                paramsCalculateKpi.RangeDate.End.ToString("yyyyMMdd"), "",
                nameKpi,
                DataConnection.GetNameDbInGotekGroup(paramsCalculateKpi.Enterprise), order);


            return(query);
        }
Example #12
0
        public static string SelectKpiByCustomer(ParamsCalculateKpi paramsCalculateKpi, KpiHelper kpiHelper, int order)
        {
            switch (kpiHelper.Name)
            {
            case KpiConst.PRECISEDELIVERY /* "Точность поставки по времени, %"*/:
            {
                //return Utils.GetStringPreciseDelivery(paramsCalculateKpi,KpiConst.PRECISEDELIVERY,order);
                return(Utils.GetStringPreciseDeliveryWithOutGroup(paramsCalculateKpi, KpiConst.PRECISEDELIVERY, order));
            }

            case KpiConst.PRECISEENTERSTORAGE /*"Точность выхода на склад %"*/:
            {
                return(Utils.GetStringPreciseWhse(paramsCalculateKpi, KpiConst.PRECISEENTERSTORAGE, order));
            }

            default:
            {
                return(Utils.GetStringKpiByName(paramsCalculateKpi, kpiHelper.Name, order));
            }
            }
        }
Example #13
0
        public List <PreciseDelivery> CalculateKpi(ParamsCalculateKpi paramsCalculateKpi)
        {
            List <PreciseDelivery> _all = new List <PreciseDelivery>();


            if (paramsCalculateKpi.SelectKpi.Any(e => e.Name.Equals(KpiConst.ALL)))
            {
                ListKpis().FindAll(k => !k.Name.Equals(KpiConst.ALL)).ForEach(kpi =>
                {
                    SelectCalculateKpi(paramsCalculateKpi, kpi, _all);
                });
            }
            else
            {
                paramsCalculateKpi.SelectKpi.FindAll(k => !k.Name.Equals(KpiConst.ALL)).ForEach(kpi =>
                {
                    SelectCalculateKpi(paramsCalculateKpi, kpi, _all);
                });
            }


            return(_all);
        }
Example #14
0
        private static string GetStringPreciseDelivery(ParamsCalculateKpi paramsCalculateKpi, string nameKpi, int order)
        {
            string _selectCustomer =
                Utils.CreateInSectionForAllCustomer(paramsCalculateKpi.Customer, paramsCalculateKpi.TypeCustomer);
            string _selectSeqCustomer = Utils.CreateInSectionForCust_Seq_By_C(paramsCalculateKpi);

            string query = string.Format(
                $"select customer.name as customername,max(kpi_description) as description, avg(t.Kpi_target) as target, avg(s.KPI_stat) as fact, " +
                " (avg(s.KPI_stat)  - max(t.Kpi_target)) as deviation, count(*) as countorder ,{6} as order_ " +
                " from gtk_group_report.dbo.gtk_kpi_ship s join (select * from dbo.gtk_cust_kpi_lns where  kpi_description = '{4}') as t  on t.cust_num = s.cust_num " +
                " join ( SELECT name,code,cust_seq FROM ( SELECT  c.cust_num AS code, RTRIM(COALESCE(ca.name,ca.RUSExtName)) as name,  CASE WHEN uf_strategcust = '1'  THEN 'СК'  " +
                "      WHEN uf_strategprospect = '1' THEN 'СП'       WHEN (uf_strategcust IS NULL AND uf_strategprospect IS NULL)  THEN 'ПР'       ELSE 'ПР' END AS type," +
                " c.cust_seq  FROM dbo.customer c  JOIN dbo.custaddr ca ON ca.cust_num = c.cust_num AND ca.cust_seq = 0 " +
                " join dbo.gtk_cust_kpi_hdr h on ca.cust_num = h.cust_num  WHERE 1 = 1  {3}  AND " +
                " RTRIM(COALESCE(ca.name,ca.RUSExtName)) IS NOT NULL  ) as customer    where 1 = 1    AND customer.code  {0}) customer on customer.code = s.cust_num  and customer.cust_seq = s.cust_seq " +
                " where s.DateDostFact between '{1}' and '{2}' and s.site = '{5}' group by  customer.name", _selectCustomer,
                paramsCalculateKpi.RangeDate.Start.ToString("yyyyMMdd"),
                paramsCalculateKpi.RangeDate.End.ToString("yyyyMMdd"), _selectSeqCustomer,
                nameKpi,
                DataConnection.GetNameDbInGotekGroup(paramsCalculateKpi.Enterprise), order);

            return(query);
        }
Example #15
0
        private void SelectCalculateKpi(ParamsCalculateKpi paramsCalculateKpi, KpiHelper kpiHelper, List <PreciseDelivery> _all)
        {
            switch (kpiHelper.Name)
            {
            case KpiConst.PRECISEDELIVERY /* "Точность поставки по времени, %"*/:
            {
                _all.Add(GetPreciseDeliveryByEnterprise(paramsCalculateKpi, KpiConst.PRECISEDELIVERY /*"Точность поставки по времени, %"*/));
                break;
            }

            case KpiConst.PRECISEENTERSTORAGE /*"Точность выхода на склад %"*/:
            {
                _all.Add(GetPreciseEnterToWhseByEnterprise(paramsCalculateKpi, KpiConst.PRECISEENTERSTORAGE /*"Точность выхода на склад %"*/));
                break;
            }

            default:
            {
                _all.Add(GetKPIByName(paramsCalculateKpi, kpiHelper.Name));
                break;
            }
            }
        }
Example #16
0
        private static string GetStringPreciseDeliveryWithOutGroup(ParamsCalculateKpi paramsCalculateKpi, string nameKpi, int order)
        {
            string _selectCustomer =
                Utils.CreateInSectionForAllCustomer(paramsCalculateKpi.Customer, paramsCalculateKpi.TypeCustomer);
            string _selectSeqCustomer = Utils.CreateInSectionForCust_Seq_By_C(paramsCalculateKpi);
            string excludeSelfTake    = Utils.ExcludeSelfTakeWhere(paramsCalculateKpi); //Убирать ли самовывоз?

            string query = string.Format(
                $"select customer.name as customername,MAX(kpi_description) as description, MONTH(s.DateDostFact) AS month,YEAR(s.DateDostFact) AS year," +
                $" AVG(t.Kpi_target) as target, SUM(t.KPI_Target) AS targetSumma,COUNT(t.KPI_Target) AS targetCount,AVG(s.KPI_stat) as fact, " +
                " SUM(s.KPI_stat) AS factSumma,COUNT(s.KPI_stat) AS factCount,AVG(s.KPI_stat  - t.Kpi_target) as deviation, count(*) as countorder ,{6} as order_ " +
                " from gtk_group_report.dbo.gtk_kpi_ship s " +
                " join (select * from dbo.gtk_cust_kpi_lns where  kpi_description = '{4}') as t  on t.cust_num = s.cust_num " +
                " CROSS APPLY  (SELECT a.name,a.RUSExtName,a.cust_seq, a.cust_num AS code FROM dbo.custaddr a WHERE s.cust_num = a.cust_num AND a.cust_seq = 0)  as customer" +
                " where s.cust_num  {0} and s.DateDostFact between '{1}' and '{2}' and s.site = '{5}' {7}" +
                " group by   customer.name,MONTH(s.DateDostFact),YEAR(s.DateDostFact)", _selectCustomer,
                paramsCalculateKpi.RangeDate.Start.ToString("yyyyMMdd"),
                paramsCalculateKpi.RangeDate.End.ToString("yyyyMMdd"), _selectSeqCustomer,
                nameKpi,
                DataConnection.GetNameDbInGotekGroup(paramsCalculateKpi.Enterprise), order, excludeSelfTake);

            return(query);
        }
Example #17
0
        private PreciseDelivery GetKPIByName(ParamsCalculateKpi paramsCalculateKpi, string nameKpi)
        {
            string _selectCustomer =
                Utils.CreateInSectionForAllCustomer(paramsCalculateKpi.Customer, paramsCalculateKpi.TypeCustomer);
            PreciseDelivery result = null;
            String          query  = string.Format($"select description,month,year,target,fact,deviation,countorder from (" +
                                                   " select max(s.kpi_description) as description, MONTH(s.Date_Calc) as month, YEAR(s.Date_Calc) as year," +
                                                   " AVG(t.Kpi_target) as target, avg(s.KPI_Fact) as fact," +
                                                   "  (avg(s.KPI_Fact)  - max(t.Kpi_target)) as deviation,sum(s.KPI_Qty) as countorder  " +
                                                   " from gtk_group_report.dbo.gtk_site_cust_kpi s  " +
                                                   " join (select * from dbo.gtk_cust_kpi_lns where " +
                                                   " kpi_description = '{3}') as t on t.cust_num = s.cust_num " +
                                                   " where s.cust_num  {0} and s.Date_Calc between '{1}' and '{2}' and s.site = '{4}' " +
                                                   " and s.KPI_description = t.KPI_description  " +
                                                   " group by MONTH(s.Date_Calc) , YEAR(s.Date_Calc)  " +
                                                   " union all " +
                                                   " select max(s.kpi_description) as description, -1 as month, MAX(YEAR(s.Date_Calc)) as year, AVG(t.Kpi_target) as target," +
                                                   " avg(s.KPI_Fact) as fact,(avg(s.KPI_Fact)  - max(t.Kpi_target)) as deviation,sum(s.KPI_Qty) as countorder " +
                                                   " from gtk_group_report.dbo.gtk_site_cust_kpi s join (select * from dbo.gtk_cust_kpi_lns " +
                                                   " where kpi_description = '{3}') as t on t.cust_num = s.cust_num" +
                                                   " where s.cust_num  {0} and s.Date_Calc between '{1}' and '{2}'   and s.site = '{4}'" +
                                                   "  and s.KPI_description = t.KPI_description  " +
                                                   " ) as t" +
                                                   " order by month", _selectCustomer,
                                                   paramsCalculateKpi.RangeDate.Start.ToString("yyyyMMdd"),
                                                   paramsCalculateKpi.RangeDate.End.ToString("yyyyMMdd"), nameKpi,
                                                   DataConnection.GetNameDbInGotekGroup(paramsCalculateKpi.Enterprise)
                                                   );

            using (var connection =
                       new SqlConnection(DataConnection.GetConnectionString(paramsCalculateKpi.Enterprise)))
            {
                List <PreciseDelivery> _all = connection.Query <PreciseDelivery>(query).AsList();
                result = _all?.Find(item => item.Month == -1);
                if (result != null)
                {
                    result.Description = nameKpi;
                }

                FillCollectionToFull(paramsCalculateKpi, _all, result);
                CorrectResultForSpeedReclaim(paramsCalculateKpi, result);

                // result?.Detail?.AddRange(_all.FindAll(e => e.Month != -1));

                if (result?.Detail?.Count > 0 && !result.Description.Equals(KpiConst.SPEEDCLAIM))
                {
                    Tuple <double, double> trend = CalculateTrend(result?.Detail);

                    result.Detail.Sort((e1, e2) => e1.Year - e2.Year);
                    int i = 1;
                    result.Detail.ForEach(e =>
                    {
                        e.Trend = trend.Item2 + i * trend.Item1;
                        i++;
                    });
                }
            }

            result.Description = nameKpi;
            return(result);
        }
Example #18
0
 public static string ExcludeSelfTakeWhere(ParamsCalculateKpi paramsCalculateKpi)
 {
     return(paramsCalculateKpi.ExcludeSelfTake ? " and s.VidOtgr <> 'Самовывоз'" : "");
 }
Example #19
0
        /*select MONTH(s.DateWHSFact), avg(KPI_whse),count(*) from gtk_group_report.dbo. gtk_kpi_ship s where cust_num = 'K009154' and DateWHSFact is not null
         * group by MONTH(DateWHSFact)*/

        private PreciseDelivery GetPreciseEnterToWhseByEnterprise(ParamsCalculateKpi paramsCalculateKpi, string nameKpi)
        {
            string _selectCustomer =
                Utils.CreateInSectionForAllCustomer(paramsCalculateKpi.Customer, paramsCalculateKpi.TypeCustomer);
            string _selectSeqCustomer = Utils.CreateInSectionForCust_Seq(paramsCalculateKpi);
            string excludeSelfTake    = Utils.ExcludeSelfTakeWhere(paramsCalculateKpi); //Убирать ли самовывоз?

            PreciseDelivery result = null;

            String query = string.Format($"select description,month,year,target,fact,deviation,countorder from (" +
                                         " select max(kpi_description) as description, MONTH(s.DateWHSFact) as month,YEAR(s.DateWHSFact) as year," +
                                         " AVG(t.Kpi_target) as target, avg(s.KPI_whse) as fact," +
                                         " (avg(s.KPI_whse)  - max(t.Kpi_target)) as deviation,count(*) as countorder " +
                                         " from gtk_group_report.dbo.gtk_kpi_ship s " +
                                         " join (select * from dbo.gtk_cust_kpi_lns where " +
                                         " kpi_description = '{4}') as t on t.cust_num = s.cust_num " +
                                         " where s.cust_num  {0} and s.DateWHSFact between '{1}' and '{2}'  and s.site = '{5}'  " +
                                         /*" and s.cust_seq = {3} " +*/
                                         " {3}  {6}" +
                                         " group by MONTH(s.DateWHSFact),YEAR(s.DateWHSFact) " +
                                         " union all " +
                                         " select max(kpi_description) as description,'-1' as month,MAX(YEAR(s.DateWHSFact)) as year, AVG(t.Kpi_target) as target," +
                                         " avg(s.KPI_whse) as fact,(avg(s.KPI_whse)  - max(t.Kpi_target)) as deviation, count(*) as countorder" +
                                         " from gtk_group_report.dbo.gtk_kpi_ship s join (select * from dbo.gtk_cust_kpi_lns " +
                                         " where kpi_description = '{4}') as t on t.cust_num = s.cust_num" +
                                         " where s.cust_num  {0} and s.DateWHSFact between '{1}' and '{2}' and s.site = '{5}'  " +
                                         /*" and s.cust_seq = {3}) as t" +*/
                                         " {3} {6}) as t" +
                                         " order by month", _selectCustomer,
                                         paramsCalculateKpi.RangeDate.Start.ToString("yyyyMMdd"),
                                         paramsCalculateKpi.RangeDate.End.ToString("yyyyMMdd"), _selectSeqCustomer, nameKpi,
                                         DataConnection.GetNameDbInGotekGroup(paramsCalculateKpi.Enterprise), excludeSelfTake
                                         );

            using (var connection =
                       new SqlConnection(DataConnection.GetConnectionString(paramsCalculateKpi.Enterprise)))
            {
                List <PreciseDelivery> _all = connection.Query <PreciseDelivery>(query).AsList();
                result = _all?.Find(item => item.Month == -1);
                if (result != null)
                {
                    result.Description = nameKpi;
                }
                //result?.Detail?.AddRange(_all.FindAll(e => e.Month != -1));
                FillCollectionToFull(paramsCalculateKpi, _all, result);



                if (result?.Detail?.Count > 0)
                {
                    Tuple <double, double> trend = CalculateTrend(result?.Detail);

                    result.Detail.Sort((e1, e2) => e1.Year - e2.Year);
                    int i = 1;
                    result.Detail.ForEach(e =>
                    {
                        e.Trend = trend.Item2 + i * trend.Item1;
                        i++;
                    });
                }
            }

            result.Description = nameKpi;
            return(result);
        }
Example #20
0
        public List <KpiByCustomer> ListKpiByCustomers(ParamsCalculateKpi paramsCalculateKpi)
        {
            List <KpiHelper> _selectedKpi = new List <KpiHelper>();


            _selectedKpi = Utils.GetSelectedKpi(paramsCalculateKpi);

            int countSelectedKpi = _selectedKpi.Count;


            StringBuilder bodyStringCTE = new StringBuilder();

            for (int i = 0; i < _selectedKpi.Count; i++)
            {
                bodyStringCTE.Append(Utils.SelectKpiByCustomer(paramsCalculateKpi, _selectedKpi[i], i));
                if (i != _selectedKpi.Count - 1)
                {
                    bodyStringCTE.Append(" union all ");
                }
            }

/*
 *          string query =
 *              string.Format($";with reduce_kpi(customername,description,target,fact,deviation,countorder,order_) as ( {bodyStringCTE.ToString()} ) " +
 *                            $"select * from reduce_kpi k order by k.customername,  order_");
 */

            string query =
                string.Format($";with reduce_kpi(customername,description,month, year,target,targetSumma,targetCount,fact,factSumma,factCount,deviation,countorder,order_) as ( {bodyStringCTE.ToString()} ) " +
                              $" select customername, description AS description,target AS target, k.targetSumma AS targetSumma,k.targetCount AS targetCount," +
                              $" fact AS fact,k.factSumma AS factSumma,k.factCount AS factCount," +
                              $" deviation AS deviation ," +
                              "countorder AS countorder,order_ AS order_  from reduce_kpi k " +
                              " order by k.customername,  order_");



            List <KpiByCustomer> kpiByCustomers = new List <KpiByCustomer>();

            using (var connection =
                       new SqlConnection(DataConnection.GetConnectionString(paramsCalculateKpi.Enterprise)))
            {
                List <Kpi> _all = connection.Query <Kpi>(query).AsList();
                ImmutableSortedDictionary <string, List <Kpi> > list = _all.GroupBy(k => k.CustomerName)
                                                                       .OrderBy(p => p.Key.ToString())
                                                                       .ToImmutableSortedDictionary(x => x.Key, x => x.ToList());

                foreach (KeyValuePair <string, List <Kpi> > kpi in list)
                {
                    if (countSelectedKpi != kpi.Value.Count)
                    {
                        List <Kpi> _kpis = new List <Kpi>(kpi.Value);
                        for (int i = 0; i < _selectedKpi.Count; i++)
                        {
                            if (kpi.Value.All(k => k.Order_ != i))
                            {
                                _kpis.Insert(i, new Kpi(kpi.Key, _selectedKpi[i].Name, 0, 0, 0, 0, i));
                            }
                        }
                        kpiByCustomers.Add(new KpiByCustomer(kpi.Key.ToString(), new List <Kpi>(_kpis)));
                        _kpis.Clear();
                    }
                    else
                    {
                        kpiByCustomers.Add(new KpiByCustomer(kpi.Key.ToString(), kpi.Value));
                    }
                }
            }


            return(kpiByCustomers);
        }