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)); } }
public IHttpActionResult Put(int?id, [FromBody] SalesViewInterfaceModel value) { return(StatusCode(HttpStatusCode.MethodNotAllowed)); }
public IHttpActionResult SetSalesViews([FromBody] SalesViewInterfaceModel item) { return(StatusCode(HttpStatusCode.MethodNotAllowed)); }
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; } }
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; } }
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; } }