return $result;
}
- public function calculateFullGoalChainWeighted(array $filters): array
- {
- $datePlan = $filters['plan_date'];
- $dateFromForCategory = (new \DateTime($datePlan))->modify('-12 months')->format('Y-m-d');
- $dateFrom = (new \DateTime($datePlan))->modify('-3 months')->format('Y-m-d');
-
- $monthCategoryShare = $this->getMonthCategoryShareOrWriteOffWeighted($datePlan, $filters, null, $filters['type']);
- $monthCategoryGoal = $this->getMonthCategoryGoal($monthCategoryShare, $datePlan, $filters);
- $monthSubcategoryShare = $this->getMonthSubcategoryShareOrWriteOffWeighted($datePlan, $filters, null, $filters['type']);
- $monthSubcategoryGoal = $this->getMonthSubcategoryGoal($monthSubcategoryShare, $monthCategoryGoal);
-
- if ($filters['type'] === 'writeOffs') {
- $salesSubShare = $this->getMonthSubcategoryShareOrWriteOffWeighted($datePlan, $filters, null, 'sales');
- $salesSubGoal = $this->getMonthSubcategoryGoal($salesSubShare, $monthCategoryGoal);
-
- $catGoalMap = [];
- foreach ($monthCategoryGoal as $row) {
- $catGoalMap[$row['category']] = $row['goal'];
- }
- $salesSubGoalMap = [];
- foreach ($salesSubGoal as $row) {
- $salesSubGoalMap[$row['category']][$row['subcategory']] = $row['goal'];
- }
-
-
- foreach ($monthSubcategoryShare as &$row) {
- $cat = $row['category'];
- $sub = $row['subcategory'];
-
- $writeShare = $row['percent_of_month'];
-
- $writeGoal = ($catGoalMap[$cat] ?? 0) * $writeShare;
- $saleGoal = $salesSubGoalMap[$cat][$sub] ?? 0;
-
- if ($saleGoal > 0 && $writeGoal > 0.1 * $saleGoal) {
- $row['share'] = 0.1;
- }
- }
- unset($row);
- $monthSubcategoryGoal = $this->getMonthSubcategoryGoal($monthSubcategoryShare, $monthCategoryGoal);
- }
-
- $monthSpeciesShare = $this->getMonthSpeciesShareOrWriteOffWeighted($datePlan, $datePlan, $filters, null, $filters['type']);
- $monthSpeciesGoal = $this->getMonthSpeciesGoalDirty($monthSpeciesShare, $monthSubcategoryGoal);
- if ($filters['type'] === 'writeOffs') {
- $salesSpecShare = $this->getMonthSpeciesShareOrWriteOffWeighted($datePlan, $datePlan, $filters, null, 'sales');
- $salesSpecGoal = $this->getMonthSpeciesGoalDirty($salesSpecShare, $monthSubcategoryGoal);
-
- $subGoalMap = [];
- foreach ($monthSubcategoryGoal as $row) {
- $subGoalMap[$row['category']][$row['subcategory']] = $row['goal'];
- }
- $salesSpecGoalMap = [];
- foreach ($salesSpecGoal as $row) {
- $salesSpecGoalMap[$row['category']][$row['subcategory']][$row['species']] = $row['goal'];
- }
- foreach ($monthSpeciesShare as &$row) {
- $cat = $row['category'];
- $sub = $row['subcategory'];
- $spec = $row['species'];
-
- $writeShare = $row['percent_of_month'];
- $writeGoal = ($subGoalMap[$cat][$sub] ?? 0) * $writeShare;
- $saleGoal = $salesSpecGoalMap[$cat][$sub][$spec] ?? 0;
-
- if ($saleGoal > 0 && $writeGoal > 0.1 * $saleGoal) {
- $row['share'] = 0.1;
- }
- }
- unset($row);
-
- $monthSpeciesGoal = $this->getMonthSpeciesGoalDirty($monthSpeciesShare, $monthSubcategoryGoal);
- }
- // var_dump($monthSpeciesGoal);
- // die();
- $filtered = array_filter($monthSpeciesGoal, function ($row) use ($filters) {
- foreach ($filters as $key => $value) {
- if ($value === null || $value === '') {
- continue;
- }
-
- if (!array_key_exists($key, $row)) {
- continue;
- }
-
- if (is_numeric($row[$key]) && is_numeric($value)) {
- if ((float)$row[$key] !== (float)$value) {
- return false;
- }
- } else {
- if (stripos((string)$row[$key], (string)$value) === false) {
- return false;
- }
- }
- }
- return true;
- });
-
- return array_values($filtered);
- }
}
+ public function calculateFullGoalChainWeighted(array $filters): array
+ {
+ $datePlan = $filters['plan_date'];
+ $dateFromForCategory = (new \DateTime($datePlan))->modify('-12 months')->format('Y-m-d');
+ $dateFrom = (new \DateTime($datePlan))->modify('-3 months')->format('Y-m-d');
+
+ $monthCategoryShare = $this->getMonthCategoryShareOrWriteOffWeighted($datePlan, $filters, null, $filters['type']);
+ $monthCategoryGoal = $this->getMonthCategoryGoal($monthCategoryShare, $datePlan, $filters);
+ $monthSubcategoryShare = $this->getMonthSubcategoryShareOrWriteOffWeighted($datePlan, $filters, null, $filters['type']);
+ $monthSubcategoryGoal = $this->getMonthSubcategoryGoal($monthSubcategoryShare, $monthCategoryGoal);
+
+ if ($filters['type'] === 'writeOffs') {
+ $salesSubShare = $this->getMonthSubcategoryShareOrWriteOffWeighted($datePlan, $filters, null, 'sales');
+ $salesSubGoal = $this->getMonthSubcategoryGoal($salesSubShare, $monthCategoryGoal);
+
+ $catGoalMap = [];
+ foreach ($monthCategoryGoal as $row) {
+ $catGoalMap[$row['category']] = $row['goal'];
+ }
+ $salesSubGoalMap = [];
+ foreach ($salesSubGoal as $row) {
+ $salesSubGoalMap[$row['category']][$row['subcategory']] = $row['goal'];
+ }
+
+
+ foreach ($monthSubcategoryShare as &$row) {
+ $cat = $row['category'];
+ $sub = $row['subcategory'];
+
+ $writeShare = $row['percent_of_month'];
+
+ $writeGoal = ($catGoalMap[$cat] ?? 0) * $writeShare;
+ $saleGoal = $salesSubGoalMap[$cat][$sub] ?? 0;
+
+ if ($saleGoal > 0 && $writeGoal > 0.1 * $saleGoal) {
+ $row['share'] = 0.1;
+ }
+ }
+ unset($row);
+ $monthSubcategoryGoal = $this->getMonthSubcategoryGoal($monthSubcategoryShare, $monthCategoryGoal);
+ }
+
+ $monthSpeciesShare = $this->getMonthSpeciesShareOrWriteOffWeighted($datePlan, $datePlan, $filters, null, $filters['type']);
+ $monthSpeciesGoal = $this->getMonthSpeciesGoalDirty($monthSpeciesShare, $monthSubcategoryGoal);
+ if ($filters['type'] === 'writeOffs') {
+ $salesSpecShare = $this->getMonthSpeciesShareOrWriteOffWeighted($datePlan, $datePlan, $filters, null, 'sales');
+ $salesSpecGoal = $this->getMonthSpeciesGoalDirty($salesSpecShare, $monthSubcategoryGoal);
+
+ $subGoalMap = [];
+ foreach ($monthSubcategoryGoal as $row) {
+ $subGoalMap[$row['category']][$row['subcategory']] = $row['goal'];
+ }
+ $salesSpecGoalMap = [];
+ foreach ($salesSpecGoal as $row) {
+ $salesSpecGoalMap[$row['category']][$row['subcategory']][$row['species']] = $row['goal'];
+ }
+ foreach ($monthSpeciesShare as &$row) {
+ $cat = $row['category'];
+ $sub = $row['subcategory'];
+ $spec = $row['species'];
+
+ $writeShare = $row['percent_of_month'];
+ $writeGoal = ($subGoalMap[$cat][$sub] ?? 0) * $writeShare;
+ $saleGoal = $salesSpecGoalMap[$cat][$sub][$spec] ?? 0;
+
+ if ($saleGoal > 0 && $writeGoal > 0.1 * $saleGoal) {
+ $row['share'] = 0.1;
+ }
+ }
+ unset($row);
+
+ $monthSpeciesGoal = $this->getMonthSpeciesGoalDirty($monthSpeciesShare, $monthSubcategoryGoal);
+ }
+ // var_dump($monthSpeciesGoal);
+ // die();
+ $filtered = array_filter($monthSpeciesGoal, function ($row) use ($filters) {
+ foreach ($filters as $key => $value) {
+ if ($value === null || $value === '') {
+ continue;
+ }
+
+ if (!array_key_exists($key, $row)) {
+ continue;
+ }
+
+ if (is_numeric($row[$key]) && is_numeric($value)) {
+ if ((float)$row[$key] !== (float)$value) {
+ return false;
+ }
+ } else {
+ if (stripos((string)$row[$key], (string)$value) === false) {
+ return false;
+ }
+ }
+ }
+ return true;
+ });
+
+ return array_values($filtered);
+ }
}