diff --git a/api-payroll/src/application/EmployeeApplication.php b/api-payroll/src/application/EmployeeApplication.php index 206e2b3..6cf237a 100644 --- a/api-payroll/src/application/EmployeeApplication.php +++ b/api-payroll/src/application/EmployeeApplication.php @@ -1,6 +1,8 @@ pdo->prepare("SELECT + COALESCE((SELECT + idPerson + FROM + employees + WHERE + id = :idEmployee), + 0) AS id"); + + $stmt->execute(array(':idEmployee' => $idEmployee)); + $results = $stmt->fetchAll(); + if(!$results){ + exit($this->databaseSelectQueryErrorMessage); + } + $stmt = null; + + return $results[0]['id']; + } + /** * @param $code * @return mixed @@ -241,7 +267,142 @@ class EmployeeApplication{ ); return $response; + } + /** + * @param $idPerson integer + * @param $firstName binary + * @param $middleName binary + * @param $lastName binary + * @param $birthDate date + * @param $email binary + * @param $phone string + */ + function updatePerson($idPerson, $firstName, $middleName, $lastName, $birthDate, $email, $phone){ + try { + $stmt = $this->pdo->prepare("UPDATE persons + SET + firstName = :firstName, + middleName = :middleName, + lastName = :lastName, + birthDate = :birthDate, + email = :email, + phone = :phone + WHERE + id = :idPerson"); + $this->pdo->beginTransaction(); + $stmt->execute(array(':firstName' => $firstName, ':middleName' => $middleName, ':lastName' => $lastName, + ':birthDate' => $birthDate, ':email' => $email, ':phone' => $phone, ':idPerson' => $idPerson)); + $this->pdo->commit(); + + $stmt = null; + } catch( PDOExecption $e ) { + $this->pdo->rollback(); + } + } + + /** + * @param $idEmployee integer + * @param $code string + * @param $idEmployeeType integer + * @param $contractType string + */ + function updateEmployee($idEmployee, $code, $idEmployeeType, $contractType){ + try { + $stmt = $this->pdo->prepare("UPDATE employees + SET + idEmployeeType = :idEmployeeType, + code = :code, + contractType = :contractType + WHERE + id = :idEmployee"); + $this->pdo->beginTransaction(); + $stmt->execute(array(':idEmployeeType' => $idEmployeeType, ':code' => $code, ':contractType' => $contractType, + ':idEmployee' => $idEmployee)); + $this->pdo->commit(); + + $stmt = null; + } catch( PDOExecption $e ) { + $this->pdo->rollback(); + } + } + + /** + * @param $requestData object + * @return array + */ + function updateEmployeeData($requestData){ + // Getting and validating the data + $idEmployee = $requestData['idEmployee']; + $idPerson = $this->getIdPersonByIdEmployee($idEmployee); + $code = $requestData['code']; + + $firstName = $requestData['firstName']; + $this->asserts->firstName($firstName); + + $middleName = $requestData['middleName']; + $this->asserts->middleName($middleName); + + $lastName = isset($requestData['lastName']) ? $requestData['lastName'] : null; + + $birthDate = $requestData['birthDate']; + $this->asserts->birthDate($birthDate); + + $email = $requestData['email']; + $this->asserts->email($email); + + $phone = $requestData['phone']; + $this->asserts->phone($phone); + + $idEmployeeType = $requestData{'idEmployeeType'}; + $contractType = $requestData{'contractType'}; + + // Encrypting the sensitive data + $securedFirstName = $this->cryptographyService->encryptString($firstName); + $securedMiddleName = $this->cryptographyService->encryptString($middleName); + + if (isset($lastName)) { + $securedLastName = $this->cryptographyService->encryptString($lastName); + } else { + $securedLastName = null; + } + + $securedEmail = $this->cryptographyService->encryptString($email); + + // Update process + $this->updatePerson($idPerson, $securedFirstName, $securedMiddleName, $securedLastName, + $birthDate, $securedEmail, $phone); + + $this->updateEmployee($idEmployee, $code, $idEmployeeType, $contractType); + + $response = array( + "fullName" => "$firstName $middleName $lastName", + "idEmployee" => $idEmployee, + "email" => $email, + "phone" => $phone, + "birthDate" => $birthDate, + "idEmployeeType" => $idEmployeeType, + "contractType" => $contractType + ); + + return $response; + } + + function disableEmployeeRecord($idEmployee){ + try { + $stmt = $this->pdo->prepare("UPDATE employees + SET + status = 'INACTIVE' + WHERE + id = :idEmployee"); + $this->pdo->beginTransaction(); + $stmt->execute(array(':idEmployee' => $idEmployee)); + $this->pdo->commit(); + + $stmt = null; + } catch( PDOExecption $e ) { + $this->pdo->rollback(); + } } } ?> \ No newline at end of file diff --git a/api-payroll/src/routes.php b/api-payroll/src/routes.php index da1eda3..7c3337e 100644 --- a/api-payroll/src/routes.php +++ b/api-payroll/src/routes.php @@ -49,6 +49,22 @@ $app->post('/api/employee', function ($request, $response) { ->write(json_encode($this->employeeApplication->saveNewEmployee($requestData))); }); +$app->put('/api/employee', function ($request, $response) { + $requestData = $request->getParsedBody(); + + return $response->withStatus(200) + ->withHeader('Content-Type', 'application/json') + ->write(json_encode($this->employeeApplication->updateEmployeeData($requestData))); +}); + +$app->DELETE('/api/employee/{idEmployee}', function (Request $request, Response $response, array $args) { + $idEmployee = $args['idEmployee']; + + return $response->withStatus(200) + ->withHeader('Content-Type', 'application/json') + ->write(json_encode($this->employeeApplication->disableEmployeeRecord($idEmployee))); +}); + $app->get('/api/employee/type/{code}', function (Request $request, Response $response, array $args) { $code = $args['code'];