/// <summary> /// Download Xlsx file /// </summary> /// <param name="timeStart"></param> /// <param name="timeEnd"></param> /// <param name="GroupId"></param> /// <param name="ContractTypeId"></param> /// <param name="checkSalesType"></param> /// <param name="tabId"></param> /// <returns></returns> public ActionResult DownloadXlsxFileSales(string timeStart, string timeEnd, string GroupId, string ContractTypeId, string checkSalesType, string tabId) { PMS11003ListViewModel dataSales = new PMS11003ListViewModel(); PMS11003ListViewModelPlus dataProfit = new PMS11003ListViewModelPlus(); if (Session["SalesBudgetData" + tabId] != null) { dataSales = Session["SalesBudgetData" + tabId] as PMS11003ListViewModel; } else { dataSales = CreateSalesBudgetModel(timeStart, timeEnd, GroupId, ContractTypeId, checkSalesType); } if (Session["SalesBudgetData" + tabId] != null) { dataProfit = Session["ProfitBudgetData" + tabId] as PMS11003ListViewModelPlus; } else { dataProfit = CreateProfitBudgetModel(timeStart, timeEnd, GroupId, ContractTypeId, checkSalesType); } DataSalesProfitExport data = new DataSalesProfitExport(); data.data_sale = dataSales; data.data_profit = dataProfit; Utility.DownloadXlsxFile(this, data, "所属別予実一覧.xlsx", "所属別予実一覧.xlsx"); return(new EmptyResult()); }
/// <summary> /// Create Profit Budget Model /// </summary> /// <param name="timeStart"></param> /// <param name="timeEnd"></param> /// <param name="GroupId"></param> /// <param name="ContractTypeId"></param> /// <param name="checkSalesType"></param> /// <returns></returns> public PMS11003ListViewModelPlus CreateProfitBudgetModel(string timeStart, string timeEnd, string GroupId, string ContractTypeId, string checkSalesType) { var model = new PMS11003ListViewModelPlus(); var currentUser = GetLoginUser(); model.Condition.Year = DateTime.Now.Year.ToString(); model.TimeStart = timeStart; model.TimeEnd = timeEnd; if (!string.IsNullOrEmpty(GroupId)) { model.Condition.GroupId = GroupId; } if (!string.IsNullOrEmpty(ContractTypeId)) { model.Condition.ContractTypeId = ContractTypeId; } model.Condition.List_Contract = mainService.GetListContractTypeBySearch(ContractTypeId, GetLoginUser().CompanyCode).OrderBy(m => m.display_order).ThenBy(m => m.contract_type_id).ToList(); model.Condition.List_Group = mainService.GetListGroupBySearch(GroupId, GetLoginUser().CompanyCode).OrderBy(m => m.display_order).ThenBy(m => m.group_id).ToList(); #region Get profit data var listProfitBudget = mainService.GetListProfitBudget(timeStart, timeEnd, currentUser.CompanyCode, ContractTypeId, GroupId); var listCost = mainService.GetListCost(timeStart, timeEnd, currentUser.CompanyCode, ContractTypeId, GroupId, checkSalesType); var listSalesActual = mainService.GetListSaleActual(timeStart, timeEnd, currentUser.CompanyCode, ContractTypeId, GroupId, checkSalesType); var profitDataList = new List <ProfitData>(); CountChargePersonNullProfit(timeStart, timeEnd, currentUser.CompanyCode, ContractTypeId, GroupId, ref listSalesActual, checkSalesType); var profitData = (from pb in listProfitBudget join c in listCost on new { target_year = pb.target_year, target_month = pb.target_month, group_id = pb.group_id, contract_type_id = pb.contract_type_id } equals new { target_year = c.target_year, target_month = c.target_month, group_id = c.group_id, contract_type_id = c.contract_type_id } into joinC from c in joinC.DefaultIfEmpty() join sa in listSalesActual on new { target_year = pb.target_year, target_month = pb.target_month, group_id = pb.group_id, contract_type_id = pb.contract_type_id } equals new { target_year = sa.target_year, target_month = sa.target_month, group_id = sa.group_id, contract_type_id = sa.contract_type_id } into joinSa from sa in joinSa.DefaultIfEmpty() select new ProfitData() { target_year = pb.target_year, target_month = pb.target_month, group_id = pb.group_id, contract_type_id = pb.contract_type_id, group_name = pb.group_name, contract_type = pb.contract_type, profit_budget = (pb == null) ? 0 : pb.profit_budget, cost_price = (c == null) ? 0 : c.cost_price, sales_price = (sa == null) ? 0 : sa.total_sales, contract_type_display_order = (sa == null) ? 0: sa.contract_type_display_order, group_display_order = (sa == null) ? 0 : sa.group_display_order } ).ToList(); foreach (var profit in profitData) { profit.profit_actual = profit.sales_price - profit.cost_price; profit.tgrProfitRate = (profit.sales_price != 0) ? ((profit.profit_actual / profit.sales_price) * 100).ToString() : "-"; profit.tgrSuccessRate = (profit.profit_budget != 0) ? ((profit.profit_actual / profit.profit_budget) * 100).ToString() : "-"; } var profitTotalGroup = profitData.GroupBy(l => new { l.target_year, l.target_month, l.group_id }) .Select(cl => new TotalGroupProfit { target_year = cl.First().target_year, target_month = cl.First().target_month, group_id = cl.First().group_id.ToString(), tgrProfitBudget = cl.Sum(c => c.profit_budget), tgrCost = cl.Sum(c => c.cost_price), tgrSaleActual = cl.Sum(c => c.sales_price), tgrProfitActual = cl.Sum(c => c.sales_price) - cl.Sum(c => c.cost_price), tgrProfitRate = (cl.Sum(c => c.sales_price) != 0) ? ((cl.Sum(c => c.sales_price) - cl.Sum(c => c.cost_price)) / cl.Sum(c => c.sales_price) * 100).ToString() : "-", tgrSuccessRate = (cl.Sum(c => c.profit_budget) != 0) ? ((cl.Sum(c => c.sales_price) - cl.Sum(c => c.cost_price)) / cl.Sum(c => c.profit_budget) * 100).ToString() : "-", }).ToList(); var profitCT = profitData.GroupBy(l => new { l.target_year, l.target_month, l.contract_type_id }) .Select(cl => new TotalContractTypeProfit { target_year = cl.First().target_year, target_month = cl.First().target_month, contract_type_id = cl.First().contract_type_id.ToString(), tgrProfitBudget = cl.Sum(c => c.profit_budget), tgrCost = cl.Sum(c => c.cost_price), tgrSaleActual = cl.Sum(c => c.sales_price), tgrProfitActual = cl.Sum(c => c.sales_price) - cl.Sum(c => c.cost_price), tgrProfitRate = (cl.Sum(c => c.sales_price) != 0) ? ((cl.Sum(c => c.sales_price) - cl.Sum(c => c.cost_price)) / cl.Sum(c => c.sales_price) * 100).ToString() : "-", tgrSuccessRate = (cl.Sum(c => c.profit_budget) != 0) ? ((cl.Sum(c => c.sales_price) - cl.Sum(c => c.cost_price)) / cl.Sum(c => c.profit_budget) * 100).ToString() : "-", }).ToList(); var profitTotalMonth = profitData.GroupBy(l => new { l.target_year, l.target_month }) .Select(cl => new TotalGrAllProfit { target_year = cl.First().target_year, target_month = cl.First().target_month, tgrProfitBudget = cl.Sum(c => c.profit_budget), tgrCost = cl.Sum(c => c.cost_price), tgrSaleActual = cl.Sum(c => c.sales_price), tgrProfitActual = cl.Sum(c => c.sales_price) - cl.Sum(c => c.cost_price), tgrProfitRate = (cl.Sum(c => c.sales_price) != 0) ? ((cl.Sum(c => c.sales_price) - cl.Sum(c => c.cost_price)) / cl.Sum(c => c.sales_price) * 100).ToString() : "-", tgrSuccessRate = (cl.Sum(c => c.profit_budget) != 0) ? ((cl.Sum(c => c.sales_price) - cl.Sum(c => c.cost_price)) / cl.Sum(c => c.profit_budget) * 100).ToString() : "-", }).ToList(); var profitTotalGroupAll = profitData.GroupBy(l => new { l.group_id }) .Select(cl => new TotalGrAllProfit { group_id = cl.First().group_id.ToString(), tgrProfitBudget = cl.Sum(c => c.profit_budget), tgrCost = cl.Sum(c => c.cost_price), tgrSaleActual = cl.Sum(c => c.sales_price), tgrProfitActual = cl.Sum(c => c.sales_price) - cl.Sum(c => c.cost_price), tgrProfitRate = (cl.Sum(c => c.sales_price) != 0) ? ((cl.Sum(c => c.sales_price) - cl.Sum(c => c.cost_price)) / cl.Sum(c => c.sales_price) * 100).ToString() : "-", tgrSuccessRate = (cl.Sum(c => c.profit_budget) != 0) ? ((cl.Sum(c => c.sales_price) - cl.Sum(c => c.cost_price)) / cl.Sum(c => c.profit_budget) * 100).ToString() : "-", }).ToList(); var profitDataTemp = new List <ProfitData>(); if (profitData != null && profitData.Count > 0) { foreach (var item in profitData) { profitDataTemp.Add(item); } } var groupListProfit = new List <Group>(); var contractTypeListProfit = new List <ContractType>(); var timeListProfit = new List <TimeList>(); for (int i = 0; i < profitDataTemp.Count; i++) { var grItem = new Group(); grItem.display_name = profitDataTemp[i].group_name ?? mainService.GetGroupName(currentUser.CompanyCode, profitDataTemp[i].group_id); grItem.group_id = Convert.ToInt32(profitDataTemp[i].group_id); grItem.display_order = Convert.ToInt32(profitDataTemp[i].group_display_order); var chk = true; for (int j = 0; j < groupListProfit.Count; j++) { if (groupListProfit[j].display_name == grItem.display_name && groupListProfit[j].group_id == grItem.group_id) { chk = false; break; } } if (chk) { groupListProfit.Add(grItem); } var ctItem = new ContractType(); ctItem.contract_type = profitDataTemp[i].contract_type ?? mainService.GetContractTypeName(currentUser.CompanyCode, profitDataTemp[i].contract_type_id); ctItem.contract_type_id = profitDataTemp[i].contract_type_id; ctItem.display_order = Convert.ToInt32(profitDataTemp[i].contract_type_display_order); chk = true; for (int j = 0; j < contractTypeListProfit.Count; j++) { if (contractTypeListProfit[j].contract_type == ctItem.contract_type && contractTypeListProfit[j].contract_type_id == ctItem.contract_type_id) { chk = false; break; } } if (chk) { contractTypeListProfit.Add(ctItem); } var tlItem = new TimeList(); tlItem.year = profitDataTemp[i].target_year.ToString(); tlItem.month = profitDataTemp[i].target_month.ToString(); chk = true; for (int j = 0; j < timeListProfit.Count; j++) { if (timeListProfit[j].month == tlItem.month && timeListProfit[j].year == tlItem.year) { chk = false; break; } } if (chk) { timeListProfit.Add(tlItem); } } model.GroupListProfit = groupListProfit.OrderBy(m => m.display_order).ThenBy(m => m.group_id).ToList(); model.ContractTypeListProfit = contractTypeListProfit.OrderBy(m => m.display_order).ThenBy(m => m.contract_type_id).ToList(); model.DataProfitBudget = profitData; model.TimeListProfit = timeListProfit; model.TotalGroupProfit = profitTotalGroup; model.TotalCTProfit = profitCT; model.TotalMonthProfit = profitTotalMonth; model.TotalGrYearListProfit = profitTotalGroupAll; model.CheckSalesType = checkSalesType; return(model); }