Your IP : 216.73.216.91


Current Path : /var/www/html/tax/api/controller/
Upload File :
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;
	}
}
?>