protected void gridMain_DetailTableDataBind(object sender, GridDetailTableDataBindEventArgs e) { if (e.DetailTableView.Name == "Details") { GridTableView detailtabl = (GridTableView)e.DetailTableView; int recSkip = detailtabl.CurrentPageIndex * gridMain.PageSize; int recTake = detailtabl.PageSize; GridDataItem parentItem = (GridDataItem)detailtabl.ParentItem; int salesID = int.Parse(parentItem.GetDataKeyValue("ID").ToString()); SalesFormulasController cont = new SalesFormulasController(); detailtabl.VirtualItemCount = cont.CountSalesFormulas(salesID); detailtabl.DataSource = cont.GetSalesFormulas(salesID, recSkip, recTake); } }
protected void gridSales_NeedDataSource(object sender, GridNeedDataSourceEventArgs e) { try { wizardData wData = readWizardSteps(); TasksController tcont = new TasksController(); SalesFormulasController sfcont = new SalesFormulasController(); List <TaskB> selectedTasks = tcont.GetTasksForInvoice(wData.CustomerID, wData.DateFrom, wData.DateTo, wData.SelectedJobs, wData.SelectedTasks).OrderBy(o => o.DateTimeStartOrder).ToList(); List <int> distinctJobsID = selectedTasks.Where(x => x.JobID != null).Select(x => x.JobID.Value).Distinct().ToList(); List <tasksTotalsPerJob> tot = new List <tasksTotalsPerJob>(); foreach (int curJobID in distinctJobsID) { List <SalesFormulaB> curSaleFormulas = new List <SalesFormulaB>(); tasksTotalsPerJob curTotal = new tasksTotalsPerJob(); curTotal.JobID = curJobID; List <TaskB> tasksForJobID = selectedTasks.Where(x => x.JobID == curJobID).ToList(); curTotal.JobName = tasksForJobID.First().Job.Name; int?salesID = tasksForJobID.First().Job.SalesID; if (salesID != null) { curSaleFormulas = sfcont.GetSalesFormulas(salesID.Value); } curTotal.TasksCount = tasksForJobID.Count(); curTotal.TasksCost = 0; curTotal.SalesCost = 0; foreach (TaskB curTask in tasksForJobID) { if (curTask.CostActual != null) { curTotal.TasksCost += curTask.CostActual.Value; if (curSaleFormulas.Count > 0) { if (curSaleFormulas.First().Sale.Type == 1) { decimal tmpKM = curTask.Distance.KM; decimal tmpKmToChk = 0; foreach (SalesFormulaB sf in curSaleFormulas) { decimal distanceValue = (sf.Distance != null ? sf.Distance.Value : 0); if (tmpKM >= distanceValue - tmpKmToChk) { curTotal.SalesCost += curTotal.TasksCost * sf.SalePercent / 100; tmpKM -= distanceValue; tmpKmToChk += distanceValue; } else { curTotal.SalesCost += curTotal.TasksCost * sf.SalePercent / 100; break; } } } else if (curSaleFormulas.First().Sale.Type == 2) { decimal salePercent = 0; if (curTask.Distance.KM > curSaleFormulas.Last().Distance) { salePercent = curSaleFormulas.Last().SalePercent; } else { foreach (SalesFormulaB sf in curSaleFormulas) { if (curTask.Distance.KM <= sf.Distance) { salePercent = sf.SalePercent; break; } } } curTotal.SalesCost += curTotal.TasksCost * salePercent / 100; } } } } tot.Add(curTotal); } gridSales.DataSource = tot; } catch (Exception) { } }