| Current Path : /var/www/html/tax/api/controller/ |
| Current File : /var/www/html/tax/api/controller/book.php |
<?php
class book extends pdocrudhandler{
private $startUpConfig;
private $baseUrl;
public function __construct(){
$this->_pdo = $this->connect();
if (session_status() == PHP_SESSION_NONE) {
session_start();
}
}
public function getBookTypes($data){
$companyId = (isset($_SESSION['companyid'])) ? $_SESSION['companyid'] : $data['b_company_id'];
$userId = (isset($_SESSION['userid'])) ? $_SESSION['userid'] : $data['b_user_id'];
$response = $this->select($this->getTable('booktype'),["*"], "WHERE idCompany = ? and isActive = ?", [$companyId, 1]);
return $response;
}
public function getBooks($data){
$companyId = (isset($_SESSION['companyid'])) ? $_SESSION['companyid'] : $data['b_company_id'];
$userId = (isset($_SESSION['userid'])) ? $_SESSION['userid'] : $data['b_user_id'];
$qry = "SELECT
b.issuedBy as idIssuedBy,
u.userName as issuedBy,
b.idBook,
b.name,
b.description,
b.pageCount,
b.serialStart,
b.serialEnd,
b.serialActive,
b.status,
bt.type as bookType,
b.idBookType as idBookType,
us.userName as issuedTo,
b.issuedTo as idIssuedTo,
b.parentIdBook,
CASE
WHEN bn.name is null THEN 'N/A'
ELSE bn.name
END AS parentBookName,
CASE
WHEN b.parentIdBook is null THEN -1
ELSE b.parentIdBook
END AS parentIdBook
FROM billing.book b
inner join user u on u.idUser = issuedBy
inner join user us on us.idUser = issuedTo
inner join booktype bt on bt.idBookType = b.idBookType
LEFT join book bn on bn.idBook = b.parentIdBook
WHERE b.idCompany = ? and b.isActive = ?";
if($data['source'] == "payment"){
$qry .= " and b.status != ?";
$whereParams = [$companyId, 1, "Closed"];
}else if($data['source'] == "book"){
$whereParams = [$companyId, 1];
}
$response = $this->customSelect($qry, $whereParams);
return $response;
}
public function deleteBook($data){
$response = [];
$companyId = (isset($_SESSION['companyid'])) ? $_SESSION['companyid'] : $data['b_company_id'];
$userId = (isset($_SESSION['userid'])) ? $_SESSION['userid'] : $data['b_user_id'];
$res = $this->delete($this->getTable('book'), "WHERE idBook = ? and idCompany = ? and status = ?", [$data['b_id'], $companyId, "New"]);
if($res['rowsAffected'] == 1){
$response = [
"status" => "success",
"msg" => "Book has been deleted successfully",
];
}else{
$response = [
"status" => "failed",
"msg" => "Book can't be deleted, either its not found or status active",
];
}
return $response;
}
public function checkBookStatus($data){
$response = [];
$companyId = (isset($_SESSION['companyid'])) ? $_SESSION['companyid'] : $data['b_company_id'];
$userId = (isset($_SESSION['userid'])) ? $_SESSION['userid'] : $data['b_user_id'];
if(isset($data['b_id']) && $data['b_id'] > 0){
$res = $this->select($this->getTable('book'), ["*"], "WHERE idBook = ? and idCompany = ? and isActive = ?", [$data['b_id'], $companyId, 1]);
if($res['rowsAffected'] == 1){
$response = [
"status" => "info",
"bookStatus" => $res['result'][0]->status,
"msg" => "Book cannot be updated as its already in use",
];
}else{
$response = [
"status" => "false",
"bookStatus" => "",
"msg" => "No book found",
];
}
}else{
$response = [
"status" => "false",
"bookStatus" => "",
"msg" => "b_id(Book Id) is required",
];
}
return $response;
}
public function checkIfBookNameExist($data){
$response = [];
$companyId = (isset($_SESSION['companyid'])) ? $_SESSION['companyid'] : $data['b_company_id'];
$userId = (isset($_SESSION['userid'])) ? $_SESSION['userid'] : $data['b_user_id'];
$res = $this->select($this->getTable('book'), ["*"], "WHERE name = ? and idBookType = ? and idCompany = ?", [$data['b_name'], $data['b_type'], $companyId]);
if($res['rowsAffected'] == 1){
$response = [
"status" => "info",
"bookExists" => true,
"msg" => "Book with the same name already exists, please use different name"
];
}else{
$response = [
"status" => "info",
"bookExists" => false,
"msg" => "No book found with the similar name"
];
}
return $response;
}
public function createBook($data){
$book = [];
$response = [];
$companyId = (isset($_SESSION['companyid'])) ? $_SESSION['companyid'] : $data['b_company_id'];
$userId = (isset($_SESSION['userid'])) ? $_SESSION['userid'] : $data['b_user_id'];
$bookStatus = $this->checkBookStatus($data);
if($bookStatus['status'] == "info" && $bookStatus['bookStatus'] != "New"){
$response = $bookStatus;
return $response;
}
$bookNameExists = $this->checkIfBookNameExist($data);
if($bookNameExists['bookExists'] == true){
$response = $bookNameExists;
return $response;
}else{
$book = [
"name" => $data['b_name'],
"description" => ((isset($data['b_description']))) ? $data['b_description'] : "",
"idBookType" => $data['b_type'],
"pageCount" => $data['b_page_count'],
"status" => "New",
"hasParent" => $data['b_has_parent'],
"issuedBy" => $data['b_issued_by'],
"issuedTo" => $data['b_issued_to'],
"idCompany" => $companyId,
"idUser" => $userId,
];
if($data['b_has_parent'] == 0){
$serialStart = 1;
$serialEnd = $data['b_page_count'];
$additionalFields = [
"serialStart" => $serialStart,
"serialEnd" => $serialEnd,
"serialActive" => $serialStart,
];
$book = array_merge($book, $additionalFields);
if(isset($data['b_id']) && intval($data['b_id']) > 0){
$response = $this->update($this->getTable('book'), $book, "WHERE idBook = ? and idCompany = ?", [$data['b_id'], $companyId]);
}else{
$response = $this->insert($this->getTable('book'), $book);
}
}else if($data['b_has_parent'] == 1 && is_numeric($data['b_parent_book_id'])){
$res = $this->select($this->getTable('book'), ["*"], "WHERE idBook = ? and idCompany = ? and isActive = ?", [$data['b_parent_book_id'], $companyId, 1]);
if($res['rowsAffected'] == 1){
$serialStart = $res['result'][0]->serialEnd + 1;
$serialEnd = $serialStart + $data['b_page_count'] - 1;
$additionalFields = [
"serialStart" => $serialStart,
"serialEnd" => $serialEnd,
"serialActive" => $serialStart,
"parentIdBook" => $data['b_parent_book_id'],
];
$book = array_merge($book, $additionalFields);
if(isset($data['b_id']) && intval($data['b_id']) > 0){
$response = $this->update($this->getTable('book'), $book, "WHERE idBook = ? and idCompany = ?", [$data['b_id'], $companyId]);
}else{
$response = $this->insert($this->getTable('book'), $book);
}
}else{
$response = [
"status" => "false",
"msg" => "invalid b_parent_book_id, no record found",
];
}
}else if(!is_numeric($data['b_parent_book_id'])){
$response = [
"status" => "false",
"msg" => "valid b_parent_book_id is required when has_parent is 1",
];
}
}
return $response;
}
public function addBookTransaction($data){
$response = [];
$book = $this->select($this->getTable('book'),["*"],"where idBook = ? and status != ?", [$data['book_id'], "Closed"]);
if($book['status'] == "success" && $book['rowsAffected'] == 1 && $book['result'][0]->serialActive < $book['result'][0]->serialEnd){
$udpatedBook = [
"serialActive" => $book['result'][0]->serialActive + 1,
"status" => "Active"
];
$bookUpdateRes = $this->update($this->getTable('book'), $udpatedBook, "where idBook =? ", [$data['book_id']]);
$bookUpdateRes['serial'] = $udpatedBook["serialActive"];
$response = $udpatedBook;
}else if($book['rowsAffected'] == 1 && $book['result'][0]->serialActive == $book['result'][0]->serialEnd){
$udpatedBook = [
"status" => "Closed",
"name" => $book['result'][0]->name." - Closed"
];
$bookUpdateRes = $this->update($this->getTable('book'), $udpatedBook, "where idBook =? ", [$data['book_id']]);
$response = [
"status" => "info",
"code" => "book_closed",
"msg" => "Book: <u>".$book['result'][0]->name. "</u> has been closed as there are no more pages left in it, you cannot generate more payments against this book, please create new book."
];
}else{
$response = [
"status" => "info",
"code" => "book_closed",
"msg" => "Book has been closed. Please create new one!"
];
}
return $response;
}
public function validateRequestsParams(){
$this->mendetoryParamsAgainstEachMethod = [
'getBooks' => [],
'deleteBook' => ["b_id"],
'getBookTypes' => [],
'createBook' => [
"b_name",
"b_type",
"b_page_count",
"b_has_parent",
"b_issued_by",
"b_issued_to"
],
'updateBook' => [
"b_name",
"b_description",
"b_type",
"b_page_count",
"b_has_parent",
"b_issued_by",
"b_issued_to",
"b_id"
],
];
return $this->mendetoryParamsAgainstEachMethod;
}
}
?>