Beispiel #1
0
        public IHttpActionResult Post([FromBody] SalesViewInterfaceModel value)
        {
            try
            {
                var result = service.SetSalesView(value);

                if (result.Code != HttpStatusCode.OK)
                {
                    return(Content(result.Code, result.message));
                }

                CustomParameterModel param = new CustomParameterModel();
                param.Year  = value.SalesList.Select(x => x.detail_date).Min().Year;
                param.Year += 1;

                result = service.GetSalesViewByIdForInterface(value.Product.Id, param);
                if (result.Code != HttpStatusCode.OK)
                {
                    return(Content(result.Code, result.message));
                }
                return(Ok(result.resultData));
            }
            catch (Exception ex)
            {
                return(InternalServerError(ex));
            }
        }
Beispiel #2
0
 public IHttpActionResult Put(int?id, [FromBody] SalesViewInterfaceModel value)
 {
     return(StatusCode(HttpStatusCode.MethodNotAllowed));
 }
 public IHttpActionResult SetSalesViews([FromBody] SalesViewInterfaceModel item)
 {
     return(StatusCode(HttpStatusCode.MethodNotAllowed));
 }
Beispiel #4
0
        public RepositoryResult <IEnumerable <SalesViewInterfaceModel> > GetSalesViewsForInterface(CustomParameterModel parameter, int months = 12)
        {
            try
            {
                if (parameter.GroupId.HasValue == false && parameter.MakerId.HasValue == false)
                {
                    return(new RepositoryResult <IEnumerable <SalesViewInterfaceModel> >(HttpStatusCode.BadRequest));
                }
                if (!parameter.Year.HasValue)
                {
                    return(new RepositoryResult <IEnumerable <SalesViewInterfaceModel> >(HttpStatusCode.BadRequest));
                }

                using (DataContext dbContext = DataContext.Create())
                    using (var productRepository = new ProductRepository())
                    {
                        var products   = productRepository.GetProductsForInterface(parameter);
                        var productIds = products.Select(p => p.Id).ToList();

                        ICollection <OfficeModel> office = dbContext.OfficeModels.Where(o => o.Deleted == false).OrderBy(o => o.Code).ToList();

                        string productList = string.Join(",", productIds);
                        string sql         = ServiceResource.SelectSalesViews.Replace("@p2", productList);

                        // 全体の販売実績データ
                        List <SalesInterfaceModel> salesList;
                        DateTime startDate = DateTime.Parse((parameter.Year - 1).ToString() + "/10/1");
                        DateTime endDate   = startDate.AddMonths(months);
                        salesList = dbContext.Database.SqlQuery <SalesInterfaceModel>(sql, startDate, endDate).ToList <SalesInterfaceModel>();

                        // 事業所別
                        List <SalesOfficeInterfaceModel> salesOfficeList;
                        sql             = ServiceResource.SelectOfficesSalesViews.Replace("@p2", productList);
                        salesOfficeList = dbContext.Database.SqlQuery <SalesOfficeInterfaceModel>(sql, startDate.AddYears(-1), endDate).ToList <SalesOfficeInterfaceModel>();

                        // 返却用の準備
                        var resultData = new List <SalesViewInterfaceModel>();
                        foreach (var product in products)
                        {
                            // 在庫予測計算用に1ヶ月多めに取得(貿易のみ)
                            DateTime check = startDate.AddMonths(-1);;
                            SalesViewInterfaceModel addModel = new SalesViewInterfaceModel();
                            addModel.Product     = product;
                            addModel.SalesList   = new List <SalesInterfaceModel>();
                            addModel.OfficeSales = new List <ICollection <SalesOfficeInterfaceModel> >();

                            for (; check <= endDate; check = check.AddMonths(1))
                            {
                                var work = salesList.Where(x => x.product_id == addModel.Product.Id).Where(x => x.detail_date == check).SingleOrDefault();
                                if (work == null)
                                {
                                    var tempModel = new SalesInterfaceModel();
                                    tempModel.product_id  = addModel.Product.Id;
                                    tempModel.detail_date = check;
                                    addModel.SalesList.Add(tempModel);
                                }
                                else
                                {
                                    addModel.SalesList.Add(work);
                                }

                                var workOffice = new List <SalesOfficeInterfaceModel>();
                                foreach (var ofs in office)
                                {
                                    var ofsData = salesOfficeList.Where(x => x.product_id == addModel.Product.Id).Where(x => x.detail_date == check).Where(x => x.office_id == ofs.Id).SingleOrDefault();
                                    if (ofsData == null)
                                    {
                                        var tempModel = new SalesOfficeInterfaceModel();
                                        tempModel.product_id  = product.Id;
                                        tempModel.detail_date = check;
                                        tempModel.office_id   = ofs.Id;
                                        tempModel.office_name = ofs.Name;
                                        workOffice.Add(tempModel);
                                    }
                                    else
                                    {
                                        workOffice.Add(ofsData);
                                    }
                                }
                                addModel.OfficeSales.Add(workOffice);
                            }
                            resultData.Add(addModel);
                        }
                        return(new RepositoryResult <IEnumerable <SalesViewInterfaceModel> >(HttpStatusCode.OK, resultData));
                    }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
Beispiel #5
0
        public RepositoryResult <SalesViewInterfaceModel> SetSalesView(SalesViewInterfaceModel setSalesView)
        {
            try
            {
                if (setSalesView == null)
                {
                    return(new RepositoryResult <SalesViewInterfaceModel>(HttpStatusCode.BadRequest));
                }

                if (setSalesView.Product == null || setSalesView.Product.Id <= 0)
                {
                    return(new RepositoryResult <SalesViewInterfaceModel>(HttpStatusCode.BadRequest));
                }

                using (DataContext dbContext = DataContext.Create())
                {
                    int product_id = dbContext.ProductModels.Where(pd => pd.Id == setSalesView.Product.Id).Select(pd => pd.Id).SingleOrDefault();
                    if (product_id == 0)
                    {
                        return(new RepositoryResult <SalesViewInterfaceModel>(HttpStatusCode.BadRequest));
                    }

                    int office_id = dbContext.OfficeModels.Where(o => o.Code == ServiceResource.CompanyCode).Select(o => o.Id).SingleOrDefault();
                    if (office_id == 0)
                    {
                        return(new RepositoryResult <SalesViewInterfaceModel>(HttpStatusCode.InternalServerError));
                    }

                    // 最小日付と最大日付
                    DateTime MinDate = setSalesView.SalesList.Select(sl => sl.detail_date).Min();
                    DateTime MaxDate = setSalesView.SalesList.Select(sl => sl.detail_date).Max();

                    using (DbContextTransaction tx = dbContext.Database.BeginTransaction(System.Data.IsolationLevel.Serializable))
                    {
                        foreach (var month in setSalesView.SalesList)
                        {
                            if (month.detail_date != MinDate)
                            {
                                // 販売予算を更新
                                SalesModel sales = dbContext.SalesModels.Where(sls => sls.ProductModelId == product_id)
                                                   .Where(sls => sls.TargetDate == month.detail_date)
                                                   .Where(sls => sls.OfficeModelId == office_id).SingleOrDefault();
                                if (sales != null)
                                {
                                    // 削除データが表示される際に不整合を起こさないため
                                    if (sales.Deleted)
                                    {
                                        sales.Sales = 0;
                                    }

                                    sales.Plan    = month.sales_plan;
                                    sales.Deleted = false;
                                }
                                else
                                {
                                    if (month.sales_plan != 0)
                                    {
                                        sales = new SalesModel();
                                        sales.ProductModelId = product_id;
                                        sales.TargetDate     = month.detail_date;
                                        sales.Plan           = month.sales_plan;
                                        sales.OfficeModelId  = office_id;
                                        dbContext.SalesModels.Add(sales);
                                    }
                                }
                                dbContext.SaveChanges();

                                // 貿易
                                TradeModel trades = dbContext.TradeModels.Where(trd => trd.ProductModelId == product_id)
                                                    .Where(trd => trd.TargetDate == month.detail_date).SingleOrDefault();
                                if (trades != null)
                                {
                                    // 削除データが表示される際に不整合を起こさないため
                                    if (trades.Deleted)
                                    {
                                        trades.Order            = 0;
                                        trades.Invoice          = 0;
                                        trades.RemainingInvoice = 0;
                                    }

                                    trades.OrderPlan         = month.order_plan;
                                    trades.InvoicePlan       = month.invoice_plan;
                                    trades.AdjustmentInvoice = month.invoice_adjust;
                                    trades.Deleted           = false;
                                }
                                else
                                {
                                    trades = new TradeModel();
                                    trades.ProductModelId    = product_id;
                                    trades.TargetDate        = month.detail_date;
                                    trades.OrderPlan         = month.order_plan;
                                    trades.InvoicePlan       = month.invoice_plan;
                                    trades.AdjustmentInvoice = month.invoice_adjust;
                                    dbContext.TradeModels.Add(trades);
                                }
                                dbContext.SaveChanges();
                            }
                        }
                        tx.Commit();
                    }

                    dbContext.Database.ExecuteSqlCommand("call _recalculation_invoicedata_id(@p0,@p1,@p2)", MinDate, DateTime.Now.Date, product_id);
                    return(new RepositoryResult <SalesViewInterfaceModel>(HttpStatusCode.OK));
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
Beispiel #6
0
        public RepositoryResult <SalesViewInterfaceModel> GetSalesViewByIdForInterface(int productId, CustomParameterModel parameter, int months = 12)
        {
            try
            {
                if (productId <= 0)
                {
                    return(new RepositoryResult <SalesViewInterfaceModel>(HttpStatusCode.BadRequest));
                }
                if (!parameter.Year.HasValue)
                {
                    return(new RepositoryResult <SalesViewInterfaceModel>(HttpStatusCode.BadRequest));
                }


                using (DataContext dbContext = DataContext.Create())
                    using (var productRepository = new ProductRepository())
                    {
                        var product = productRepository.GetProductByIdForInterface(productId);
                        if (product.Code != HttpStatusCode.OK)
                        {
                            return(new RepositoryResult <SalesViewInterfaceModel>(HttpStatusCode.BadRequest));
                        }

                        // 全体の販売実績データ
                        List <SalesInterfaceModel> salesList;
                        DateTime startDate = DateTime.Parse((parameter.Year - 1).ToString() + "/10/1");
                        DateTime endDate   = startDate.AddMonths(months);
                        salesList = dbContext.Database.SqlQuery <SalesInterfaceModel>(ServiceResource.SelectSalesViews, startDate, endDate, product.resultData.Id).ToList <SalesInterfaceModel>();

                        ICollection <OfficeModel> office = dbContext.OfficeModels.Where(o => o.Deleted == false).OrderBy(o => o.Code).ToList();

                        // 事業所別
                        List <SalesOfficeInterfaceModel> salesOfficeList;
                        salesOfficeList = dbContext.Database.SqlQuery <SalesOfficeInterfaceModel>(ServiceResource.SelectOfficesSalesViews, startDate, endDate, product.resultData.Id).ToList <SalesOfficeInterfaceModel>();

                        // 在庫予測計算用に1ヶ月多めに取得(貿易のみ)
                        DateTime check = startDate.AddMonths(-1);

                        var resultData = new SalesViewInterfaceModel();
                        resultData.Product     = product.resultData;
                        resultData.SalesList   = new List <SalesInterfaceModel>();
                        resultData.OfficeSales = new List <ICollection <SalesOfficeInterfaceModel> >();

                        for (; check <= endDate; check = check.AddMonths(1))
                        {
                            var work = salesList.Where(x => x.product_id == resultData.Product.Id).Where(x => x.detail_date == check).SingleOrDefault();
                            if (work == null)
                            {
                                var tempModel = new SalesInterfaceModel();
                                tempModel.product_id  = resultData.Product.Id;
                                tempModel.detail_date = check;
                                resultData.SalesList.Add(tempModel);
                            }
                            else
                            {
                                resultData.SalesList.Add(work);
                            }

                            var workOffice = new List <SalesOfficeInterfaceModel>();
                            foreach (var value in office)
                            {
                                var ofsData = salesOfficeList.Where(x => x.product_id == resultData.Product.Id).Where(x => x.detail_date == check).Where(x => x.office_id == value.Id).SingleOrDefault();
                                if (ofsData == null)
                                {
                                    var tempModel = new SalesOfficeInterfaceModel();
                                    tempModel.product_id   = resultData.Product.Id;
                                    tempModel.detail_date  = check;
                                    tempModel.office_id    = value.Id;
                                    tempModel.office_name  = value.Name;
                                    tempModel.sales_plan   = 0;
                                    tempModel.sales_actual = 0;
                                    workOffice.Add(tempModel);
                                }
                                else
                                {
                                    workOffice.Add(ofsData);
                                }
                            }
                            resultData.OfficeSales.Add(workOffice);
                        }
                        return(new RepositoryResult <SalesViewInterfaceModel>(HttpStatusCode.OK, resultData));
                    }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }