예제 #1
0
 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);
     }
 }
예제 #2
0
 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) { }
 }