Просмотр исходного кода

fixed Kosztorys cennik getPrice

Piotr Labudda 9 лет назад
Родитель
Сommit
145c179b0a
2 измененных файлов с 44 добавлено и 33 удалено
  1. 42 33
      SE/se-lib/ProjectKosztorysCennik.php
  2. 2 0
      SE/se-lib/Route/UrlAction/ProjektyKosztorys.php

+ 42 - 33
SE/se-lib/ProjectKosztorysCennik.php

@@ -127,6 +127,7 @@ class ProjectKosztorysCennik {
 
   public static function updatePriceProjectCennik($idType, $idProject, $price, $jednostka) {
     $item = self::getItemProjectCennik($idType, $idProject, $jednostka);
+    DBG::log($item, 'array', "item to update price '{$price}' for (\$idType: {$idType}, \$idProject: {$idProject}, \$jednostka: {$jednostka})");
     $usrLogin = User::getLogin();
     $sqlObj = array();
     $sqlObj['CRM_LISTA_ZASOBOW_ID'] = $idType;
@@ -201,46 +202,54 @@ class ProjectKosztorysCennik {
   }
   public static function getPrice($idType, $idProject = 0, $idCompany = 0, $jednostka = '') {
     $cennikRaw = self::_getPrices($idType);
+    if (empty($cennikRaw)) return 0;
     DBG::_('DBG', '>1', 'prices cennikRaw', $cennikRaw, __CLASS__, __FUNCTION__, __LINE__);
     $price = 0;
-    foreach ($cennikRaw as $item) {// fetch price from Oferta Admin
-      if (!$item['id_project'] && !$item['id_company']) {
-        if (empty($jednostka) || (!empty($jednostka) && $jednostka == $item['unit'])) {
-          $price = round($item['price'], 2);
-        }
+    $filteredCennik = $cennikRaw;
+    DBG::log($filteredCennik, 'array', "getPrice({$idType}, {$idProject}, {$idCompany}, {$jednostka}) all prices rows");
+
+    $filteredCennik = array_filter($filteredCennik, function ($item) use ($jednostka) {
+      return (empty($jednostka) || (!empty($jednostka) && $jednostka === $item['unit']));
+    });
+    DBG::log($filteredCennik, 'array', "getPrice({$idType}, {$idProject}, {$idCompany}, {$jednostka}) prices filtered by unit");
+    if (empty($filteredCennik)) return 0;
+
+    $adminCennik = array_filter($filteredCennik, function ($item) {
+      return (!$item['id_project'] && !$item['id_company']);
+    });
+    DBG::log($adminCennik, 'array', "getPrice({$idType}, {$idProject}, {$idCompany}, {$jednostka}) filtered admin prices");
+    if (!empty($adminCennik)) {
+      foreach ($adminCennik as $item) {
+        $price = round($item['price'], 2);
       }
     }
-    DBG::_('DBG', '>1', 'default cennik: price', $price, __CLASS__, __FUNCTION__, __LINE__);
-    if ($idCompany > 0) {// fetch price from Oferta Admin for given Company
-      foreach ($cennikRaw as $item) {
-        if (!$item['id_project'] && $idCompany == $item['id_company']) {
-          if (empty($jednostka) || (!empty($jednostka) && $jednostka == $item['unit'])) {
-            $price = round($item['price'], 2);
-          }
-        }
-      }
-      DBG::_('DBG', '>1', 'default company cennik: price', $price, __CLASS__, __FUNCTION__, __LINE__);
+
+    if ($idProject === 0 && $idCompany === 0) {
+      return $price; // shold be in $adminCennik
     }
-    if ($idProject > 0 && $idCompany = 0) {// fetch price from Project Kosztorys
-      foreach ($cennikRaw as $item) {
-        if ($idProject == $item['id_project'] && !$item['id_company']) {
-          if (empty($jednostka) || (!empty($jednostka) && $jednostka == $item['unit'])) {
-            $price = round($item['price'], 2);
-          }
-        }
-      }
-      DBG::_('DBG', '>1', 'project cennik: price', $price, __CLASS__, __FUNCTION__, __LINE__);
+    else if ($idProject > 0 && $idCompany === 0) {
+      $filteredCennik = array_filter($filteredCennik, function ($item) {
+        return ($item['id_project'] > 0 && !$item['id_company']);
+      });
+      DBG::log($filteredCennik, 'array', "getPrice({$idType}, {$idProject}, {$idCompany}, {$jednostka}) prices filtered by proj > 0 && com == 0");
     }
-    if ($idProject > 0 && $idCompany > 0) {// fetch price from Project Oferta for given Company
-      foreach ($cennikRaw as $item) {
-        if ($idProject == $item['id_project'] && $idCompany == $item['id_company']) {
-          if (empty($jednostka) || (!empty($jednostka) && $jednostka == $item['unit'])) {
-            $price = round($item['price'], 2);
-          }
-        }
-      }
-      DBG::_('DBG', '>1', 'project company cennik: price', $price, __CLASS__, __FUNCTION__, __LINE__);
+    else if ($idProject === 0 && $idCompany > 0) {
+      $filteredCennik = array_filter($filteredCennik, function ($item) {
+        return (!$item['id_project'] && $item['id_company'] > 0);
+      });
+      DBG::log($filteredCennik, 'array', "getPrice({$idType}, {$idProject}, {$idCompany}, {$jednostka}) prices filtered by proj == 0 && com > 0");
+    }
+    else if ($idProject > 0 && $idCompany > 0) {
+      $filteredCennik = array_filter($filteredCennik, function ($item) {
+        return ($item['id_project'] > 0 && $item['id_company'] > 0);
+      });
+      DBG::log($filteredCennik, 'array', "getPrice({$idType}, {$idProject}, {$idCompany}, {$jednostka}) prices filtered by proj > 0 && com > 0");
+    }
+    if (empty($filteredCennik)) return $price;
+    foreach ($filteredCennik as $item) {
+      $price = round($item['price'], 2);
     }
+    DBG::log("getPrice({$idType}, {$idProject}, {$idCompany}, {$jednostka}) returns '{$price}'");
     return $price;
   }
   public static function _getPrices($idType, $idProject = 0, $idCompany = 0) {

+ 2 - 0
SE/se-lib/Route/UrlAction/ProjektyKosztorys.php

@@ -102,6 +102,7 @@ class Route_UrlAction_ProjektyKosztorys extends Route_ProjektyKosztorysBase {
 		if (!empty($reqJson)) {
 			if (!array_key_exists('price', $reqJson)) throw new Exception("Missing param price");
 			$price = V::get('price', 0, $reqJson, 'float');
+			DBG::log("updating price '{$price}' for (\$idType: {$idType}, \$idProject: {$idProject}, \$jednostka: {$jednostka})");
 			ProjectKosztorysCennik::updatePriceProjectCennik($idType, $idProject, $price, $jednostka);
 		}
 		$response['id'] = $idType;
@@ -111,6 +112,7 @@ class Route_UrlAction_ProjektyKosztorys extends Route_ProjektyKosztorysBase {
 		$response['price'] = ProjectKosztorysCennik::getPrice($idType, $idProject, $idCompany = 0, $jednostka);
 		$response['msg'] = "";
 		$response['type'] = "success";
+		DBG::log($response, 'array', "response");
 		return $response;
 	}