Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
Total | |
0.00% |
0 / 1 |
|
0.00% |
0 / 12 |
CRAP | |
0.00% |
0 / 242 |
ValuationMethodService | |
0.00% |
0 / 1 |
|
0.00% |
0 / 12 |
2862.00 | |
0.00% |
0 / 242 |
__construct | |
0.00% |
0 / 1 |
2.00 | |
0.00% |
0 / 2 |
|||
saveValuationMethod | |
0.00% |
0 / 1 |
56.00 | |
0.00% |
0 / 25 |
|||
validateSaveValuationMethodRequest | |
0.00% |
0 / 1 |
6.00 | |
0.00% |
0 / 4 |
|||
insertValuationMethod | |
0.00% |
0 / 1 |
30.00 | |
0.00% |
0 / 16 |
|||
updateValuationMethod | |
0.00% |
0 / 1 |
20.00 | |
0.00% |
0 / 18 |
|||
deleteValuationMethod | |
0.00% |
0 / 1 |
12.00 | |
0.00% |
0 / 15 |
|||
trashValuationMethod | |
0.00% |
0 / 1 |
12.00 | |
0.00% |
0 / 19 |
|||
restoreValuationMethod | |
0.00% |
0 / 1 |
12.00 | |
0.00% |
0 / 19 |
|||
searchValuationMethod | |
0.00% |
0 / 1 |
156.00 | |
0.00% |
0 / 53 |
|||
deleteValuationMethodIdentityContext | |
0.00% |
0 / 1 |
20.00 | |
0.00% |
0 / 21 |
|||
deleteValuationMethodByIdetifiyingContext | |
0.00% |
0 / 1 |
30.00 | |
0.00% |
0 / 20 |
|||
getValuationMethodIdentityContext | |
0.00% |
0 / 1 |
20.00 | |
0.00% |
0 / 30 |
<?php | |
namespace com\linways\core\ams\professional\service\academic; | |
use com\linways\base\util\SecurityUtils; | |
use com\linways\base\util\MakeSingletonTrait; | |
use com\linways\core\ams\professional\service\BaseService; | |
use com\linways\core\ams\professional\mapper\academic\ValuationMethodServiceMapper; | |
use com\linways\core\ams\professional\request\academic\SearchValuationMethodRequest; | |
use com\linways\core\ams\professional\constant\academic\ValuationMethodTypeConstant; | |
use com\linways\core\ams\professional\constant\academic\StatusConstants; | |
use com\linways\core\ams\professional\exception\ProfessionalException; | |
use com\linways\core\ams\professional\dto\api\ValuationMethod; | |
class ValuationMethodService extends BaseService | |
{ | |
use MakeSingletonTrait; | |
private function __construct() { | |
$this->mapper = ValuationMethodServiceMapper::getInstance()->getMapper(); | |
} | |
/** | |
* Save valuationMethod | |
* @param ValuationMethod $valuationMethod | |
* @return String $id | |
*/ | |
public function saveValuationMethod (ValuationMethod $valuationMethod) | |
{ | |
$valuationMethod = $this->realEscapeObject($valuationMethod); | |
$valuationMethod->createdBy = $GLOBALS['userId'] ?? $valuationMethod->createdBy; | |
$valuationMethod->updatedBy = $GLOBALS['userId'] ?? $valuationMethod->updatedBy; | |
try{ | |
$this->validateSaveValuationMethodRequest($valuationMethod); | |
if(!empty($valuationMethod->id)) | |
{ | |
$valuationMethod->id = $this->updateValuationMethod($valuationMethod); | |
} | |
else | |
{ | |
$valuationMethod->id = $this->insertValuationMethod($valuationMethod); | |
} | |
}catch(\Exception $e) { | |
if($e->getCode() !== ProfessionalException::INVALID_PARAMETERS && $e->getCode() !== ProfessionalException::EMPTY_PARAMETERS && $e->getCode() !== ProfessionalException::DUPLICATE_ENTRY) { | |
throw new ProfessionalException($e->getCode(),"Failed to save valuation method! Please try again"); | |
} else if ($e->getCode() === ProfessionalException::DUPLICATE_ENTRY) { | |
throw new ProfessionalException (ProfessionalException::DUPLICATE_ENTRY,"Cannot create valuation method.".$valuationMethod->name." already exists!"); | |
} else { | |
throw new ProfessionalException ($e->getCode(),$e->getMessage()); | |
} | |
} | |
return $valuationMethod->id; | |
} | |
/** | |
* Validate ValuationMethod Request Before Saving | |
* @param ValuationMethod $valuationMethod | |
* @return NULL | |
*/ | |
private function validateSaveValuationMethodRequest($valuationMethod) | |
{ | |
if(empty($valuationMethod->type)) | |
throw new ProfessionalException(ProfessionalException::EMPTY_PARAMETERS,"Valuation method type is empty! Please enter a type for valuation method"); | |
//TODO: Validate type if updating | |
} | |
/** | |
* Insert valuationMethod | |
* @param ValuationMethod $valuationMethod | |
* @return String $id | |
*/ | |
private function insertValuationMethod(ValuationMethod $valuationMethod) | |
{ | |
$name = !empty($valuationMethod->name) ? "'".$valuationMethod->name."'" : "NULL"; | |
$properties = !empty($valuationMethod->properties) ? "'".json_encode($valuationMethod->properties)."'" : "'{}'"; | |
$identifyingContext = !empty($valuationMethod->identifyingContext) ? "'" . json_encode($valuationMethod->identifyingContext) . "'" : "NULL"; | |
$id = SecurityUtils::getRandomString(); | |
$query = "INSERT INTO `valuation_method` | |
(`id`,`identifying_context`,`type`,`name`,`properties`,`created_by`,`updated_by`) | |
VALUES | |
('$id',$identifyingContext,'$valuationMethod->type',$name,$properties,'$valuationMethod->createdBy','$valuationMethod->updatedBy')"; | |
try { | |
$this->executeQuery($query); | |
return $id; | |
} catch (\Exception $e) { | |
throw new ProfessionalException($e->getCode(),$e->getMessage()); | |
} | |
} | |
/** | |
* Update ValuationMethod | |
* @param ValuationMethod $valuationMethod | |
* @return NULL | |
*/ | |
private function updateValuationMethod(ValuationMethod $valuationMethod) | |
{ | |
$properties = !empty($valuationMethod->properties) ? "'".json_encode($valuationMethod->properties)."'" : "NULL"; | |
$query = "UPDATE | |
`valuation_method` | |
SET | |
`name` = ".(!empty($valuationMethod->name) ? "'".$valuationMethod->name."'" : "name").", | |
`type` = '$valuationMethod->type', | |
`properties` = $properties, | |
`updated_by` = '$valuationMethod->updatedBy' | |
WHERE | |
`id` = '$valuationMethod->id'"; | |
try { | |
$this->executeQuery($query); | |
return $valuationMethod->id; | |
} catch (\Exception $e) { | |
throw new ProfessionalException($e->getCode(), $e->getMessage()); | |
} | |
} | |
/** | |
* Delete ValuationMethod | |
* @param String $id | |
* @return NULL | |
*/ | |
public function deleteValuationMethod($id) | |
{ | |
$id = $this->realEscapeString($id); | |
if(empty($id)) { | |
throw new ProfessionalException(ProfessionalException::EMPTY_PARAMETERS,"No valuation method selected! Please select a valuationMethod to delete"); | |
} | |
$query = "DELETE FROM | |
`valuation_method` | |
WHERE | |
`id` = '$id'"; | |
try { | |
$this->executeQuery($query); | |
} catch (\Exception $e) { | |
throw new ProfessionalException($e->getCode(),"Error deleting valuation method! Please try again"); | |
} | |
} | |
/** | |
* Trash ValuationMethod (Soft Delete) | |
* @param String $id | |
* @return NULL | |
*/ | |
public function trashValuationMethod($id) | |
{ | |
$id = $this->realEscapeString($id); | |
$updatedBy = $GLOBALS['userId']; | |
if(empty($id)) { | |
throw new ProfessionalException(ProfessionalException::EMPTY_PARAMETERS,"No valuation method selected! Please select a valuationMethod to delete"); | |
} | |
//TODO: Do validation before deleting | |
$query = "UPDATE | |
`valuation_method` | |
SET | |
`trashed` = UTC_TIMESTAMP(), | |
`updated_by` = '$updatedBy' | |
WHERE | |
`id` = '$id'"; | |
try { | |
$this->executeQuery($query); | |
} catch (\Exception $e) { | |
throw new ProfessionalException($e->getCode(),"Error deleting valuation method! Please try again"); | |
} | |
} | |
/** | |
* Restore ValuationMethod | |
* @param String $id | |
* @return NULL | |
*/ | |
public function restoreValuationMethod($id) | |
{ | |
$id = $this->realEscapeString($id); | |
$updatedBy = $GLOBALS['userId']; | |
if(empty($id)) { | |
throw new ProfessionalException(ProfessionalException::EMPTY_PARAMETERS,"No valuation method selected! Please select a valuationMethod to restore"); | |
} | |
$query = "UPDATE | |
`valuation_method` | |
SET | |
`trashed` = NULL, | |
`updated_by` = '$updatedBy' | |
WHERE | |
`id` = '$id'"; | |
try { | |
$this->executeQuery($query); | |
} catch (\Exception $e) { | |
throw new ProfessionalException($e->getCode(),"Error restoring valuation method! Please try again"); | |
} | |
} | |
/** | |
* Search ValuationMethod Details | |
* @param SearchValuationMethodRequest $request | |
* @return ValuationMethod | |
*/ | |
public function searchValuationMethod(SearchValuationMethodRequest $request) | |
{ | |
$request = $this->realEscapeObject($request); | |
$whereQuery = ""; | |
$limitQuery = ""; | |
if($request->trashed === StatusConstants::ACTIVE) { | |
$whereQuery .= ""; | |
} | |
if($request->trashed === StatusConstants::TRASHED) { | |
$whereQuery .= ""; | |
} | |
if(!empty($request->id)) { | |
$whereQuery .= " AND vm.id='$request->id' "; | |
} | |
if(!empty($request->name)) { | |
$whereQuery .= " AND vm.name LIKE '%$request->name%' "; | |
} | |
if(!empty($request->identifyingContext)) { | |
$identifyingContext = is_object($request->identifyingContext) | |
? "'" . json_encode($request->identifyingContext) . "'" | |
: is_string($request->identifyingContext) | |
? "'$request->identifyingContext'" | |
: "'{}'"; | |
$whereQuery .= " AND JSON_CONTAINS(vm.identifying_context, $identifyingContext, '$') "; | |
if ($request->identifyingContext == FilterModeConstants::STRICT) { | |
$whereQuery .= " AND CAST(vm.identifying_context AS JSON) = CAST($identifyingContext AS JSON) "; | |
} | |
} | |
if($request->startIndex !== "" && $request->endIndex !== "") | |
{ | |
$limitQuery .= " LIMIT $request->startIndex,$request->endIndex"; | |
} | |
$query = "SELECT | |
vm.id, | |
vm.identifying_context, | |
vm.type, | |
vm.name, | |
vm.properties, | |
vm.trashed, | |
vm.created_by, | |
vm.created_date, | |
vm.updated_by, | |
vm.updated_date | |
FROM | |
`valuation_method` vm | |
WHERE | |
1 = 1"; | |
try { | |
$valuationMethods = $this->executeQueryForList($query.$whereQuery.$limitQuery,$this->mapper[ValuationMethodServiceMapper::SEARCH_VALUATION_METHOD]); | |
} catch (\Exception $e) { | |
throw new ProfessionalException(ProfessionalException::ERROR_FETCHING,"Cannot fetch valuation method details! Please try again"); | |
} | |
return $valuationMethods; | |
} | |
/** | |
* Delete Valuation Method By identity context | |
* @param String $type | |
* @param Array $properties | |
* @return NULL | |
*/ | |
public function deleteValuationMethodIdentityContext($type,$properties) | |
{ | |
$type = $this->realEscapeString($type); | |
$properties = $this->realEscapeArray($properties); | |
if(empty($type)) { | |
throw new ProfessionalException(ProfessionalException::EMPTY_PARAMETERS,"Please set an evaluation type"); | |
} | |
if(!count($properties)) { | |
throw new ProfessionalException(ProfessionalException::EMPTY_PARAMETERS,"Please set atleast one property"); | |
} | |
$query = "DELETE FROM | |
`valuation_method` | |
WHERE | |
`type` = '$type' "; | |
$query .= " and ".implode(" and ",array_map(function($property) { | |
return " identifying_context->>'$.$property->name' = '$property->value' "; | |
},$properties)); | |
try { | |
$this->executeQuery($query); | |
} catch (\Exception $e) { | |
throw new ProfessionalException($e->getCode(),"Error deleting valuation method! Please try again"); | |
} | |
} | |
/** | |
* Delete ValuationMethod | |
* @param String $id | |
* @return NULL | |
*/ | |
public function deleteValuationMethodByIdetifiyingContext($context,$value,$type) | |
{ | |
$context = $this->realEscapeString($context); | |
$value = $this->realEscapeString($value); | |
if(empty($context)) { | |
throw new ProfessionalException(ProfessionalException::EMPTY_PARAMETERS,"No valuation method selected! Please specify the context"); | |
} | |
if(empty($value)) { | |
throw new ProfessionalException(ProfessionalException::EMPTY_PARAMETERS,"No valuation method selected! Please specify the value"); | |
} | |
if(empty($type)) { | |
throw new ProfessionalException(ProfessionalException::EMPTY_PARAMETERS,"No valuation method selected! Please specify the value"); | |
} | |
$query = "DELETE FROM `valuation_method` | |
WHERE identifying_context->>'$.$context' = '$value' AND type = '$type';"; | |
try { | |
$this->executeQuery($query); | |
} catch (\Exception $e) { | |
throw new ProfessionalException($e->getCode(),"Error deleting valuation method! Please try again"); | |
} | |
} | |
/** | |
* Get Valuation Method By identity context | |
* @param String $type | |
* @param Array $properties | |
* @return NULL | |
*/ | |
public function getValuationMethodIdentityContext($type,$properties) | |
{ | |
$type = $this->realEscapeString($type); | |
$properties = $this->realEscapeArray($properties); | |
if(empty($type)) { | |
throw new ProfessionalException(ProfessionalException::EMPTY_PARAMETERS,"Please set an evaluation type"); | |
} | |
if(!count($properties)) { | |
throw new ProfessionalException(ProfessionalException::EMPTY_PARAMETERS,"Please set atleast one property"); | |
} | |
$query = "SELECT vm.id, | |
vm.identifying_context, | |
vm.type, | |
vm.name, | |
vm.properties, | |
vm.trashed, | |
vm.created_by, | |
vm.created_date, | |
vm.updated_by, | |
vm.updated_date FROM | |
`valuation_method` vm | |
WHERE | |
vm.type = '$type' "; | |
$query .= " and ".implode(" and ",array_map(function($property) { | |
return " vm.identifying_context->>'$.$property->name' = '$property->value' "; | |
},$properties)); | |
try { | |
return $this->executeQueryForList($query,$this->mapper[ValuationMethodServiceMapper::SEARCH_VALUATION_METHOD])[0]; | |
} catch (\Exception $e) { | |
throw new ProfessionalException($e->getCode(),"Error while fetching valuation method! Please try again"); | |
} | |
} | |
} |