<?php

namespace App\Controllers;

use App\DAO\Pagination\Pagination;
use App\Services\ComandaService;
use App\Services\JWT\UsuarioLogado;
use App\Services\ServiceResponse\ServiceResponseInterface;
use CodeIgniter\HTTP\Response;
use CodeIgniter\HTTP\ResponseInterface;
use Dompdf\Dompdf;
// use const False\MyClass\true;
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Style\Alignment;
use PhpOffice\PhpSpreadsheet\Style\Color;
use PhpOffice\PhpSpreadsheet\Style\Fill;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
use Exception;
use App\Services\LogService;
use App\Utils\DateUtils;

class ComandaController extends BaseController {

	public function register(): Response {

		$sqlInserirComanda = <<<SQL
		    insert into comanda (data_criada, hora_criada, criado_por, data_fechada, hora_fechada, id_cliente, id_pet, id_unidade, fechado_por)
		    values (
		        :data_criada:,
		        :hora_criada:,
		        :criado_por:,
		        :data_fechada:,
		        :hora_fechada:,
		        :id_cliente:,
		        :id_pet:,
		        :id_unidade:,
		        :fechado_por:
		    )
		SQL;
		$bindsInserirComanda = [ 
			'data_criada' => date( 'Y-m-d' ),
			'hora_criada' => date( 'H:i:s' ),
			'criado_por' => UsuarioLogado::getUsuarioId(),
			'data_fechada' => '1900-01-01',
			'hora_fechada' => '00:00:00',
			'id_cliente' => $_POST ['cliente_id'],
			'id_pet' => $_POST ['pet_id'],
			'id_unidade' => $_POST ['unidade_id'],
			'fechado_por' => null
		];
		$conn = db_connect();
		$conn->query( $sqlInserirComanda, $bindsInserirComanda );
		return $this->response->setStatusCode( 200 )
			->setJSON( [ 
			'message' => 'Operação realizada com sucesso.',
			'data' => $conn->insertID(),
			'error' => $conn->error()
		] );

	}

	public function findComandaAtivaItens() {

		$sql = <<<SQL
		    SELECT 
		        c.id as comanda_id
		        ,c.data_criada as data_criada
		        ,c.hora_criada as hora_criada
		        ,c.id_cliente as cliente_id
		        ,c.id_pet as pet_id
		        ,c.id_unidade as unidade_id
		        ,ci.id as comanda_item_id
		        ,ci.id_procedimento as procedimento_id
		        ,ci.valor as valor
		        ,ci.comanda_item_status_id as status
		        ,ci.id_requisicao_procedimento 
		        ,p.descricao as procedimento_descricao
		        ,tp.id as tipo_procedimento_id
		        ,tp.descricao as tipo_procedimento_descricao
		        ,cvnio.id  as convenio_id
		        ,cvnio.codigo as convenio_codigo
		        ,cvnio.descricao as convenio_descricao
		        ,tc.id as tipo_convenio_id
		        ,tc.descricao as tipo_convenio_descricao
		    from 
		        comanda c, comanda_item ci, requisicao_procedimento rp, procedimento p, tipo_procedimento tp
		        , convenio_procedimento cp, convenio cvnio, tipo_convenio tc
		    where
		        c.fechado_por is null
		        and c.id_pet  = :pet_id:
		        and c.id_unidade = :unidade_id:	
		        and ci.id_comanda = c.id
		        and rp.id = ci.id_requisicao_procedimento
		        and p.id = ci.id_procedimento
		        and tp.id  = p.id_tipo_procedimento
		        and cp.id = rp.id_convenio_procedimento
		        and cvnio.id = cp.id_convenio
		        and tc.id = cvnio.id_tipo_convenio
		SQL;
		$petId = $_GET ['pet_id'];
		$unidadeId = $_GET ['unidade_id'];

		if (!$petId || !$unidadeId) {
			die( 'Informe pet_id e unidade_id' );
		}

		$query = db_connect()->query( $sql, [ 
			'pet_id' => $petId,
			'unidade_id' => $unidadeId
		] )
			->getResultArray();

		return $this->response->setStatusCode( 200 )
			->setJSON( [ 
			'message' => 'Operação realizada com sucesso.',
			'data' => $query
		] );

	}

	public function findComandaItensEmAbertoByIdPet(int $petid): Response {

		$sql = <<<SQL
			select distinct
				ci.id_comanda , ci.id as comandaitem_id, ci.valor , rp.id as requisicao_id,
				rp.id_convenio_procedimento , p.descricao as procedimento,
				tc.id as tipo_convenio_id , tc.descricao as tipo_convenio,
				cp.id_unidade, u.descricao  as unidade
			from
				requisicao_procedimento rp,	convenio_procedimento cp, procedimento p,
				convenio c,	tipo_convenio tc, unidade u, comanda_item ci
			where
				rp.id_pet = :pet_id:
				and rp.id_convenio_procedimento  = cp.id
				and cp.id_convenio  = c.id
				and c.id_tipo_convenio = tc.id
				and tc.id = 2
				and cp.id_unidade = u.id
				and rp.id = ci.id_requisicao_procedimento
				and ci.comanda_item_status_id  = 1
				and ci.id_procedimento = p.id
				order by ci.id_comanda asc, ci.id asc
		SQL;

		$binds = [ 
			'pet_id' => $petid
		];
		$conn = db_connect();
		$result_array = $conn->query( $sql, $binds )
			->getResultArray();

		if (count( $result_array ) == 0) {
			return $this->response->setStatusCode( 200 )
				->setJSON( [ 
				'message' => 'Nenhum item com pagamento em aberto encontrado.',
				'data' => [ ]
			] );
		}

		return $this->response->setStatusCode( 403 )
			->setJSON( [ 
			'message' => 'Encontrados itens com pagamentos em aberto.',
			'data' => $result_array
		] );

	}

	public function findComandasByClienteId(int $clienteId): Response {

		$sql = <<<SQL
		    select 
		        c.id                             as comanda_id
		        ,c.data_criada                   as data_criada
		        ,c.hora_criada                   as hora_criada
		        ,c.id_cliente                    as cliente_id
		        ,c.id_pet                        as pet_id
		        ,c.id_unidade                    as unidade_id
				,(select sum(valor) 
					from comanda_item ci 
					where ci.id_comanda  = c.id 
					and ci.comanda_item_status_id  not in  (3)
				) as valor		        
		        ,c.data_criada                   as data_criacao
		        ,c.data_fechada                  as data_fechamento
		        ,c.hora_criada                   as hora_criacao
		        ,c.hora_fechada                  as hora_fechamento
		        ,pj.nome_fantasia                as unidade_nome_fantasia
		        ,p.nome                          as pet_nome
		        ,if (fechado_por is null, 0, 1)  as fechado
		    from 
		        comanda c ,  unidade u , pessoa_juridica pj, pet p    
		    where
		    	c.id_cliente = :cliente_id:
		        and u.id = c.id_unidade
		        and pj.id = u.id_pessoa_juridica
		        and p.id = c.id_pet
		SQL;
		$query = db_connect()->query( $sql, [ 
			'cliente_id' => $clienteId
		] )
			->getResult();
		return $this->response->setStatusCode( 200 )
			->setJSON( [ 
			'message' => 'Dados encontrados com sucesso.',
			'data' => $query
		] );

	}

	public function findComandasByClienteIdByUnidadeId(int $clienteid, int $unidadeid): Response {

		$usuarioid = UsuarioLogado::getUsuarioId();

		$comanda_service = new ComandaService();
		$comanda_service_response = $comanda_service->findComandasByClienteIdByUnidadeId( $clienteid, $unidadeid, $usuarioid );
		$response_messages = [ 
			ServiceResponseInterface::DATABASE_CONNECTION_ERROR => [ 
				'code' => ResponseInterface::HTTP_INTERNAL_SERVER_ERROR,
				'message' => 'Erro de conexão com o banco de dados.'
			],
			ServiceResponseInterface::SUCESS => [ 
				'code' => ResponseInterface::HTTP_OK,
				'message' => 'Pesquisa realizada com sucesso.'
			],
			ServiceResponseInterface::RECORD_NOT_FOUND => [ 
				'code' => ResponseInterface::HTTP_PARTIAL_CONTENT,
				'message' => 'Pesquisa realizada com sucesso. Não Foram encontardos registro.'
			],
			ServiceResponseInterface::FORBIDDEN => [ 
				'code' => ResponseInterface::HTTP_FORBIDDEN,
				'message' => 'O usuário não tem permissão para visualizar comandas da unidade informada.'
			],
			ServiceResponseInterface::VALIDATION_PARAMS_ERROR => [ 
				'code' => ResponseInterface::HTTP_BAD_REQUEST,
				'message' => 'Informe os dados corretamente.'
			],
			ServiceResponseInterface::SERVICE_INTERNAL_ERROR => [ 
				'code' => ResponseInterface::HTTP_INTERNAL_SERVER_ERROR,
				'message' => 'Erro interno do servidor.'
			]
		];

		return $this->getResponse( $comanda_service_response, $response_messages );

	}

	public function findComandasByClienteIdByPetIdByUnidadeId(int $clienteid, int $unidadeid, int $petid): Response {

		$usuarioid = UsuarioLogado::getUsuarioId();

		$comanda_service = new ComandaService();
		$comanda_service_response = $comanda_service->findComandasByClienteIdByPetIdByUnidadeId( $clienteid, $unidadeid, $usuarioid, $petid );
		$response_messages = [ 
			ServiceResponseInterface::DATABASE_CONNECTION_ERROR => [ 
				'code' => ResponseInterface::HTTP_INTERNAL_SERVER_ERROR,
				'message' => 'Erro de conexão com o banco de dados.'
			],
			ServiceResponseInterface::SUCESS => [ 
				'code' => ResponseInterface::HTTP_OK,
				'message' => 'Pesquisa realizada com sucesso.'
			],
			ServiceResponseInterface::RECORD_NOT_FOUND => [ 
				'code' => ResponseInterface::HTTP_PARTIAL_CONTENT,
				'message' => 'Pesquisa realizada com sucesso. Não Foram encontardos registro.'
			],
			ServiceResponseInterface::FORBIDDEN => [ 
				'code' => ResponseInterface::HTTP_FORBIDDEN,
				'message' => 'O usuário não tem permissão para visualizar comandas da unidade informada.'
			],
			ServiceResponseInterface::VALIDATION_PARAMS_ERROR => [ 
				'code' => ResponseInterface::HTTP_BAD_REQUEST,
				'message' => 'Informe os dados corretamente.'
			],
			ServiceResponseInterface::SERVICE_INTERNAL_ERROR => [ 
				'code' => ResponseInterface::HTTP_INTERNAL_SERVER_ERROR,
				'message' => 'Erro interno do servidor.'
			]
		];

		return $this->getResponse( $comanda_service_response, $response_messages );

	}

	public function findComandaItensEmAbertoByIdPetByUnidadeId(int $petid, int $unidadeid): Response {

		$usuarioid = UsuarioLogado::getUsuarioId();
		$comanda_service = new ComandaService();
		$comanda_service_response = $comanda_service->findComandaItensEmAbertoByIdPetByUnidadeId( $petid, $unidadeid, $usuarioid );

		$response_messages = [ 
			ServiceResponseInterface::DATABASE_CONNECTION_ERROR => [ 
				'code' => ResponseInterface::HTTP_INTERNAL_SERVER_ERROR,
				'message' => 'Erro de conexão com o banco de dados.'
			],
			ServiceResponseInterface::SUCESS => [ 
				'code' => ResponseInterface::HTTP_OK,
				'message' => 'Pesquisa realizada com sucesso.'
			],
			ServiceResponseInterface::RECORD_NOT_FOUND => [ 
				'code' => ResponseInterface::HTTP_PARTIAL_CONTENT,
				'message' => 'Pesquisa realizada com sucesso. Não Foram encontardos registro.'
			],
			ServiceResponseInterface::FORBIDDEN => [ 
				'code' => ResponseInterface::HTTP_FORBIDDEN,
				'message' => 'O usuário não tem permissão para visualizar comandas da unidade informada.'
			],
			ServiceResponseInterface::VALIDATION_PARAMS_ERROR => [ 
				'code' => ResponseInterface::HTTP_BAD_REQUEST,
				'message' => 'Informe os dados corretamente.'
			],
			ServiceResponseInterface::SERVICE_INTERNAL_ERROR => [ 
				'code' => ResponseInterface::HTTP_INTERNAL_SERVER_ERROR,
				'message' => 'Erro interno do servidor.'
			]
		];

		return $this->getResponse( $comanda_service_response, $response_messages );

	}

	public function findComandasItemByComandaId(int $comandaId): Response {

		$sql = <<<SQL
			select
				c.id as comanda_id, ci.data_criacao as data_criada,
				ci.hora_criacao as hora_criada, c.id_cliente as cliente_id,
				c.id_pet as pet_id, c.id_unidade as unidade_id,
				cis.descricao as status_descricao, ci.id as comanda_item_id,
				ci.id_procedimento as procedimento_id, ci.valor as valor,
				ci.comanda_item_status_id as status, ci.id_requisicao_procedimento,
				p.descricao as procedimento_descricao, tp.id as tipo_procedimento_id,
				tp.descricao as tipo_procedimento_descricao, cvnio.id  as convenio_id,
				cvnio.codigo as convenio_codigo, cvnio.descricao as convenio_descricao,
				tc.id as tipo_convenio_id, tc.descricao as tipo_convenio_descricao,
				rp.data_requisicao as data_requisicao, rp.hora_requisicao as hora_requisicao,
				rp.data_execucao as data_execucao, rp.hora_execucao as hora_execucao,
				ci.id_forma_pagamento, ci.data_atualizacao as data_pagamento,
				ci.hora_atualizacao as hora_pagamento,
				(select extorno_id from extorno_item 
					where comanda_item_id = ci.id ) as extorno_id
			from
				comanda c , comanda_item ci, comanda_item_status cis,
				requisicao_procedimento rp, procedimento p, tipo_procedimento tp,
				convenio_procedimento cp, convenio cvnio, tipo_convenio tc
			where
				c.id = :comanda_id:
				and ci.id_comanda = c.id
				and ci.comanda_item_status_id <> 3
				and cis.id = ci.comanda_item_status_id
				and rp.id = ci.id_requisicao_procedimento
				and p.id = ci.id_procedimento
				and tp.id = p.id_tipo_procedimento
				and cp.id = rp.id_convenio_procedimento
				and cvnio.id = cp.id_convenio
				and tc.id = cvnio.id_tipo_convenio
		SQL;
		$query = db_connect()->query( $sql, [ 
			'comanda_id' => $comandaId
		] )
			->getResult();
		return $this->response->setStatusCode( 200 )
			->setJSON( [ 
			'message' => 'Dados encontrados com sucesso.',
			'data' => $query
		] );

	}

	// public function marcarItemPago(int $comandaId, int $comandaItemId, int $idFormaPagamento, $codauth, $bandeira): Response
	// {
	// if (trim($codauth) == '0' ) {
	// $codauth = '';
	// } else {
	// $codauth = trim($codauth);
	// }
	// if (trim($bandeira) == '0' ) {
	// $bandeira = '';
	// } else {
	// $bandeira = trim($bandeira);
	// }
	// $sql = <<<SQL
	// update
	// comanda_item
	// set
	// comanda_item_status_id = 2, -- PAGO:2
	// id_forma_pagamento = :id_forma_pagamento:, -- FORMA DE PAGAMENTO
	// codauth = :autorizacao:,
	// data_atualizacao = left(now(),10),
	// hora_atualizacao = right(now(),8)
	// where 1=1
	// and id = :comanda_item_id:
	// and comanda_item_status_id = 1 -- NAO PAGO:1
	// and id_comanda = :comanda_id:
	// SQL;
	// $conn = db_connect();
	// $conn->query($sql, [
	// 'comanda_id' => $comandaId,
	// 'comanda_item_id' => $comandaItemId,
	// 'id_forma_pagamento' => $idFormaPagamento,
	// 'autorizacao' => $codauth
	// ]);
	// $affectedRows = $conn->affectedRows();
	// $error = $conn->error();
	// return $this->response->setStatusCode($affectedRows && ! $error['code'] ? 200 : 400)->setJSON([
	// 'message' => $affectedRows ? 'Operação realizada com sucesso.' : 'Falha na operação: Esse item já foi pago ou não existe.',
	// 'data' => ! ! $affectedRows && ! $error['code'],
	// 'error' => $conn->error()
	// ]);
	// }
	public function marcarItemPago(): Response {

		try {
			$usr = UsuarioLogado::getUsuarioId();
			$comandaId = intval( $_POST ['comandaId'] );
			$comandaItemId = intval( $_POST ['comandaItemId'] );
			$idFormaPagamento = intval( $_POST ['idFormaPagamento'] );
			$codauth = trim( $_POST ['codauth'] );
			$bandeira = trim( $_POST ['bandeira'] );
			$parcelas = trim( $_POST ['parcelas'] );
			$observacao = trim( $_POST ['observacao'] );

			if (trim( $codauth ) == '0') {
				$codauth = '';
			} else {
				$codauth = trim( $codauth );
			}
			if (trim( $bandeira ) == '0') {
				$bandeira = '';
			} else {
				$bandeira = trim( $bandeira );
			}
			$parcelas = intval( trim( $parcelas ) );

			$sql = <<<SQL
			    update
			        comanda_item
			    set
			        comanda_item_status_id = 2, -- PAGO:2
			        id_forma_pagamento = :id_forma_pagamento:, -- FORMA DE PAGAMENTO
			        codauth = :autorizacao:,
			        bandeira = :bandeiracartao:,
			        parcelas = :parcelascartao:,
			        observacao = :itemobservacao:,
					atualizado_por = :usuario:,
			        data_atualizacao = left(now(),10),
			        hora_atualizacao = right(now(),8)
			    where 1=1
			        and id = :comanda_item_id:
			        and comanda_item_status_id = 1 -- NAO PAGO:1
			        and id_comanda = :comanda_id:
			SQL;
			$conn = db_connect();
			$conn->query( $sql,
				[ 
					'comanda_id' => $comandaId,
					'comanda_item_id' => $comandaItemId,
					'id_forma_pagamento' => $idFormaPagamento,
					'autorizacao' => $codauth,
					'bandeiracartao' => $bandeira,
					'parcelascartao' => $parcelas,
					'itemobservacao' => $observacao,
					'usuario' => $usr
				] );
			$affectedRows = $conn->affectedRows();
			$error = $conn->error();
			return $this->response->setStatusCode( $affectedRows && !$error ['code'] ? 200 : 400 )
				->setJSON( 
				[ 
					'message' => $affectedRows ? 'Operação realizada com sucesso.' : 'Falha na operação: Esse item já foi pago ou não existe.',
					'data' => !!$affectedRows && !$error ['code'],
					'error' => $conn->error()
				] );
		} catch ( Exception $e ) {
			return $this->response->setStatusCode( 400 )
				->setJSON( [ 
				'message' => 'Dados inválidos',
				'data' => '',
				'error' => 400
			] );
		}

	}

	public function getMeusRecebimentosByUnidadeIdByPeriodoToPdf(int $idunidade, int $dtini, int $dtfim): Response {

		try {
			# ini_set( 'max_execution_time', 2000 );
			$data_ini = "";
			$data_fim = "";
			$page = trim( $_GET ['page'] );
			$per_page = trim( $_GET ['per_page'] );

			if ($dtini > $dtfim) {
				$data_ini = strval( $dtfim );
				$data_fim = strval( $dtini );
			} else {
				$data_ini = strval( $dtini );
				$data_fim = strval( $dtfim );
			}

			if (intval( $page ) > 0) {
				$page = $page;
			} else {
				$page = 1;
			}
			if (intval( $per_page ) > 0) {
				$per_page = intval( $per_page );
			} else {
				$per_page = 15;
			}
			$offset = ($page - 1) * $per_page;
			$data_fim = $this->toIsoDate( $data_fim );
			$data_ini = $this->toIsoDate( $data_ini );
			$usr = UsuarioLogado::getUsuarioId();

			$pagination = Pagination::builder()->setPerPage( $per_page )
				->setCurrentPage( $page )
				->build();

			$comandaService = new ComandaService();
			$comandaService->getComandasMeusRecebimentosByUnidadeByPeriodoToHtml( $idunidade, $data_ini, $data_fim );
		} catch ( Exception $e ) {
			return $this->response->setStatusCode( 460 )
				->setJSON( [ 
				'message' => 'Operação não realizada.',
				'data' => [ ],
				'error' => [ 
					'code' => $e->getCode(),
					'msg' => $e->getMessage()
				]
			] );
		}

	}

	public function getMeusRecebimentosByUnidadeIdByPeriodo(int $idunidade, int $dtini, int $dtfim): Response {

		try {
			$data_ini = "";
			$data_fim = "";
			$page = trim( $_GET ['page'] );
			$per_page = trim( $_GET ['per_page'] );

			if ($dtini > $dtfim) {
				$data_ini = strval( $dtfim );
				$data_fim = strval( $dtini );
			} else {
				$data_ini = strval( $dtini );
				$data_fim = strval( $dtfim );
			}

			if (intval( $page ) > 0) {
				$page = $page;
			} else {
				$page = 1;
			}
			if (intval( $per_page ) > 0) {
				$per_page = intval( $per_page );
			} else {
				$per_page = 15;
			}
			$offset = ($page - 1) * $per_page;
			$data_fim = $this->toIsoDate( $data_fim );
			$data_ini = $this->toIsoDate( $data_ini );
			$usr = UsuarioLogado::getUsuarioId();

			$sql_totalizado = <<<SQL
				select 
					ci.id_forma_pagamento, fp.descricao , sum(ci.valor) as valor
				from 
					comanda_item ci,forma_pagamento fp,requisicao_procedimento rp,convenio_procedimento cp
				where
					ci.comanda_item_status_id  = 2
					and ci.id_forma_pagamento = fp.id
					and ci.data_atualizacao >=:dataini:
					and ci.data_atualizacao <=:datafim:
					and ci.atualizado_por = :usuariologado:
					and ci.id_requisicao_procedimento  = rp.id
					and rp.id_convenio_procedimento = cp.id
					and cp.id_unidade = :unidade:
					group by ci.id_forma_pagamento
			SQL;

			$binds_totalizado = [ 
				"usuariologado" => $usr,
				"unidade" => $idunidade,
				"dataini" => $data_ini,
				"datafim" => $data_fim
			];

			$sql_recebimentos = <<<SQL
				select
					ci.id, ci.id_comanda, ci.data_atualizacao , ci.hora_atualizacao , ci.comanda_item_status_id ,
					ci.id_forma_pagamento , fp.descricao as formapagamento, ci.valor,
					ci.atualizado_por, pf.nome as resonsavel , cp.id_unidade ,
					ci.id_requisicao_procedimento, rp.id_convenio_procedimento ,
					rp.id_pet , pc.id_cliente, c.id as cliente_id, pf2.nome	as cliente
				from
					comanda_item ci , usuario u , pessoa_fisica pf, requisicao_procedimento rp,
					pet_cliente pc , cliente c , pessoa_fisica pf2 , forma_pagamento fp, convenio_procedimento cp
				where
					ci.comanda_item_status_id  = 2
					and ci.id_forma_pagamento = fp.id
					and ci.data_atualizacao >=:dataini:
					and ci.data_atualizacao <=:datafim:
					and ci.atualizado_por = :usuariologado:
					and ci.atualizado_por = u.id
					and u.id_pessoa = pf.id_pessoa
					and ci.id_requisicao_procedimento  = rp.id
					and rp.id_pet = pc.id_pet
					and pc.id_cliente = c.id
					and c.id_pessoa = pf2.id_pessoa
					and rp.id_convenio_procedimento = cp.id
					and cp.id_unidade = :unidade:
				order by ci.data_atualizacao asc, ci.hora_atualizacao asc
				Limit :page: , :per_page:
			
			SQL;

			$binds_recebimentos = [ 
				"usuariologado" => $usr,
				"unidade" => $idunidade,
				"dataini" => $data_ini,
				"datafim" => $data_fim,
				"page" => $offset,
				"per_page" => $per_page
			];

			$sql_count_rows = <<<SQL
				select
					count(*) as count_rows
				from
					comanda_item ci , usuario u , pessoa_fisica pf, requisicao_procedimento rp,
					pet_cliente pc , cliente c , pessoa_fisica pf2 , forma_pagamento fp, convenio_procedimento cp
				where
					ci.comanda_item_status_id  = 2
					and ci.id_forma_pagamento = fp.id
					and ci.data_atualizacao >=:dataini:
					and ci.data_atualizacao <=:datafim:
					and ci.atualizado_por = :usuariologado:
					and ci.atualizado_por = u.id
					and u.id_pessoa = pf.id_pessoa
					and ci.id_requisicao_procedimento  = rp.id
					and rp.id_pet = pc.id_pet
					and pc.id_cliente = c.id
					and c.id_pessoa = pf2.id_pessoa
					and rp.id_convenio_procedimento = cp.id
					and cp.id_unidade = :unidade:			
				
			SQL;

			$binds_count_rows = [ 
				"usuariologado" => $usr,
				"unidade" => $idunidade,
				"dataini" => $data_ini,
				"datafim" => $data_fim
			];

			$conn_total = db_connect();
			$query_total = $conn_total->query( $sql_totalizado, $binds_totalizado )
				->getResultArray();
			$total_formasa_pagamentos ['totais'] = $query_total;

			$conn_recebimentos = db_connect();
			$query_recebimentos = $conn_recebimentos->query( $sql_recebimentos, $binds_recebimentos )
				->getResultArray();

			$recebimentos = $query_recebimentos;

			$conn_count_rows = db_connect();
			$query_count_rows = $conn_count_rows->query( $sql_count_rows, $binds_count_rows )
				->getResultArray();

			$pagination = Pagination::builder()->setCurrentPage( $page )
				->setNumRows( $query_count_rows [0] ['count_rows'] )
				->setPerPage( $per_page )
				->build();

			return $this->response->setStatusCode( 200 )
				->setJSON( 
				[ 
					'message' => 'Operação realizada com sucesso.',
					'data' => [ 
						'Totais' => $total_formasa_pagamentos ['totais'],
						'Recebimentos' => $recebimentos
					],
					'pagination' => $pagination->toResponseArray(),
					'error' => ''
				] );
		} catch ( Exception $e ) {
			return $this->response->setStatusCode( 460 )
				->setJSON( [ 
				'message' => 'Operação não realizada.',
				'data' => [ ],
				'error' => [ 
					'code' => $e->getCode(),
					'msg' => $e->getMessage()
				]
			] );
		}

	}

	public function getNewMeusRecebimentosByUnidadeIdByPeriodo(int $idunidade, int $dtini, int $dtfim): Response {

		try {
			$data_ini = "";
			$data_fim = "";
			$page = trim( $_GET ['page'] );
			$per_page = trim( $_GET ['per_page'] );

			if ($dtini > $dtfim) {
				$data_ini = strval( $dtfim );
				$data_fim = strval( $dtini );
			} else {
				$data_ini = strval( $dtini );
				$data_fim = strval( $dtfim );
			}

			if (intval( $page ) > 0) {
				$page = $page;
			} else {
				$page = 1;
			}
			if (intval( $per_page ) > 0) {
				$per_page = intval( $per_page );
			} else {
				$per_page = 15;
			}
			$offset = ($page - 1) * $per_page;
			$data_fim = $this->toIsoDate( $data_fim );
			$data_ini = $this->toIsoDate( $data_ini );
			$usr = UsuarioLogado::getUsuarioId();

			$sql_totalizado = <<<SQL
				select
					cp.forma_pagamento_id as id_forma_pagamento , fp.descricao, sum(cp.valor) as total
				from comanda c , comanda_fechamento cf , comanda_pagamento cp , forma_pagamento fp
				where
					cf.data_criacao >= :dataini:
					and cf.data_criacao <= :datafim:
					and cf.tipo_fechamento = 'pagamento'
					and cf.comanda_id = c.id
					and c.id_unidade  = :unidade:
					and cf.criado_por = :usuariologado:
					and cf.id = cp.comanda_fechamento_id
					and cp.forma_pagamento_id  = fp.id
				group by cp.forma_pagamento_id
			SQL;

			$binds_totalizado = [ 
				"usuariologado" => $usr,
				"unidade" => $idunidade,
				"dataini" => strval( $data_ini ),
				"datafim" => strval( $data_fim )
			];

			// $sql_recebimentos = <<<SQL
			// select
			// ci.id, ci.data_atualizacao , ci.hora_atualizacao , ci.comanda_item_status_id ,
			// ci.id_forma_pagamento , fp.descricao as formapagamento, ci.valor,
			// ci.atualizado_por, pf.nome as resonsavel , cp.id_unidade ,
			// ci.id_requisicao_procedimento, rp.id_convenio_procedimento ,
			// rp.id_pet , pc.id_cliente, c.id as cliente_id, pf2.nome as cliente
			// from
			// comanda_item ci , usuario u , pessoa_fisica pf, requisicao_procedimento rp,
			// pet_cliente pc , cliente c , pessoa_fisica pf2 , forma_pagamento fp, convenio_procedimento cp
			// where
			// ci.comanda_item_status_id = 2
			// and ci.id_forma_pagamento = fp.id
			// and ci.data_atualizacao >=:dataini:
			// and ci.data_atualizacao <=:datafim:
			// and ci.atualizado_por = :usuariologado:
			// and ci.atualizado_por = u.id
			// and u.id_pessoa = pf.id_pessoa
			// and ci.id_requisicao_procedimento = rp.id
			// and rp.id_pet = pc.id_pet
			// and pc.id_cliente = c.id
			// and c.id_pessoa = pf2.id_pessoa
			// and rp.id_convenio_procedimento = cp.id
			// and cp.id_unidade = :unidade:
			// order by ci.data_atualizacao asc, ci.hora_atualizacao asc
			// Limit :page: , :per_page:

			// SQL;
			$sql_recebimentos = <<<SQL
				select
					cp.id ,cf.data_criacao , cf.hora_criacao , cf.valor ,
					cf.criado_por , pf2.nome as reponsavel,
					cp.id as pagamento_id, cp.forma_pagamento_id, fp.descricao , cp.valor,
					p.nome as pet, pf.nome as cliente,cp.observacao, c.id as id_comanda
				from
					comanda_fechamento cf , comanda_pagamento cp , forma_pagamento fp  , comanda c , pet p,
					cliente cl, pessoa_fisica pf , pessoa_fisica pf2, usuario u
				where
					cf.data_criacao >= :dataini:
					and cf.data_criacao <= :datafim:
					and cf.tipo_fechamento = 'pagamento'
					and cf.criado_por = :usuariologado:
					and cf.id = cp.comanda_fechamento_id
					and cp.forma_pagamento_id  = fp.id
					and cf.comanda_id = c.id
					and c.id_unidade  = :unidade:
					and c.id_pet = p.id
					and c.id_cliente = cl.id
					and cl.id_pessoa = pf.id_pessoa
					and cf.criado_por = u.id
					and u.id_pessoa = pf2.id_pessoa
				order by cf.data_criacao asc, cf.hora_criacao asc
				Limit :page: , :per_page:
			SQL;

			$binds_recebimentos = [ 
				"usuariologado" => $usr,
				"unidade" => $idunidade,
				"dataini" => $data_ini,
				"datafim" => $data_fim,
				"page" => $offset,
				"per_page" => $per_page
			];

			// $sql_count_rows = <<<SQL
			// select
			// count(*) as count_rows
			// from
			// comanda_item ci , usuario u , pessoa_fisica pf, requisicao_procedimento rp,
			// pet_cliente pc , cliente c , pessoa_fisica pf2 , forma_pagamento fp, convenio_procedimento cp
			// where
			// ci.comanda_item_status_id = 2
			// and ci.id_forma_pagamento = fp.id
			// and ci.data_atualizacao >=:dataini:
			// and ci.data_atualizacao <=:datafim:
			// and ci.atualizado_por = :usuariologado:
			// and ci.atualizado_por = u.id
			// and u.id_pessoa = pf.id_pessoa
			// and ci.id_requisicao_procedimento = rp.id
			// and rp.id_pet = pc.id_pet
			// and pc.id_cliente = c.id
			// and c.id_pessoa = pf2.id_pessoa
			// and rp.id_convenio_procedimento = cp.id
			// and cp.id_unidade = :unidade:

			// SQL;

			$sql_count_rows = <<<SQL
				select
					count(*) as count_rows
				from
					comanda_fechamento cf , comanda_pagamento cp , forma_pagamento fp  , comanda c , pet p,
					cliente cl, pessoa_fisica pf , pessoa_fisica pf2, usuario u
				where
					cf.data_criacao >= :dataini:
					and cf.data_criacao <= :datafim:
					and cf.tipo_fechamento = 'pagamento'
					and cf.criado_por = :usuariologado:
					and cf.id = cp.comanda_fechamento_id
					and cp.forma_pagamento_id  = fp.id
					and cf.comanda_id = c.id
					and c.id_unidade  = :unidade:
					and c.id_pet = p.id
					and c.id_cliente = cl.id
					and cl.id_pessoa = pf.id_pessoa
					and cf.criado_por = u.id
					and u.id_pessoa = pf2.id_pessoa
					
			SQL;

			$binds_count_rows = [ 
				"usuariologado" => $usr,
				"unidade" => $idunidade,
				"dataini" => $data_ini,
				"datafim" => $data_fim
			];

			$conn_total = db_connect();
			$query_total = $conn_total->query( $sql_totalizado, $binds_totalizado )
				->getResultArray();
			$error_total = $conn_total->error();
			$total_formasa_pagamentos ['totais'] = $query_total;

			$conn_recebimentos = db_connect();
			$query_recebimentos = $conn_recebimentos->query( $sql_recebimentos, $binds_recebimentos )
				->getResultArray();
			$error_recebimentos = $conn_recebimentos->error();
			$recebimentos = $query_recebimentos;

			$conn_count_rows = db_connect();
			$query_count_rows = $conn_count_rows->query( $sql_count_rows, $binds_count_rows )
				->getResultArray();
			$error_count_rows = $conn_count_rows->error();
			$pagination = Pagination::builder()->setCurrentPage( $page )
				->setNumRows( $query_count_rows [0] ['count_rows'] )
				->setPerPage( $per_page )
				->build();

			return $this->response->setStatusCode( 200 )
				->setJSON( 
				[ 
					'message' => 'Operação realizada com sucesso.',
					'data' => [ 
						'Totais' => $total_formasa_pagamentos ['totais'],
						'Recebimentos' => $recebimentos
					],
					'pagination' => $pagination->toResponseArray(),
					'error' => ''
				] );
		} catch ( Exception $e ) {
			return $this->response->setStatusCode( 460 )
				->setJSON( [ 
				'message' => 'Operação não realizada.',
				'data' => [ ],
				'error' => [ 
					'code' => $e->getCode(),
					'msg' => $e->getMessage()
				]
			] );
		}

	}

	// RELATORIO DE GAVETA PDF
	public function getNewMeusRecebimentosByUnidadeIdByPeriodoPdf(int $idunidade, int $dtini, int $dtfim): Response {

		try {
			# ini_set( 'max_execution_time', 2000 );
			$data_ini = "";
			$data_fim = "";
			$page = trim( $_GET ['page'] );
			$per_page = trim( $_GET ['per_page'] );

			if ($dtini > $dtfim) {
				$data_ini = strval( $dtfim );
				$data_fim = strval( $dtini );
			} else {
				$data_ini = strval( $dtini );
				$data_fim = strval( $dtfim );
			}

			if (intval( $page ) > 0) {
				$page = $page;
			} else {
				$page = 1;
			}
			if (intval( $per_page ) > 0) {
				$per_page = intval( $per_page );
			} else {
				$per_page = 15;
			}
			$offset = ($page - 1) * $per_page;
			$data_fim = $this->toIsoDate( $data_fim );
			$data_ini = $this->toIsoDate( $data_ini );
			$usr = UsuarioLogado::getUsuarioId();

			$sql_estorno = <<<SQL
			    select
			        ext.id_tipo_extorno, ei.valor, ext.data_criacao, ext.hora_criacao, ext.observacao,
			        tpe.descricao as tipo_estorno, pf.nome as executor, p.descricao as item, c.id_pet as pet_id, pt.nome as pet, c.id_cliente as cliente_id, pf2.nome as cliente 
			    from
			        extorno ext, tipo_extorno tpe, usuario usr, pessoa_fisica pf, comanda c, extorno_item ei, comanda_item ci, procedimento p, pet pt, cliente cl, pessoa_fisica pf2
			    where 
			        ext.id_tipo_extorno = tpe.id
			        and ext.criado_por = usr.id
			        and usr.id_pessoa = pf.id_pessoa
			        and c.id = ext.id_comanda
			        and c.id_pet = pt.id 
			        and c.id_cliente = cl.id
			        and cl.id_pessoa = pf2.id_pessoa 
			        and ext.id = ei.extorno_id
			        and ei.comanda_item_id = ci.id
			        and ci.id_procedimento = p.id
			        and ext.data_criacao >= :data_inicio:
			        and ext.data_criacao <= :data_fim:
			        and ext.criado_por = :id_usuario:
			        and c.id_unidade = :id_unidade:
			SQL;

			$bind_estornos = [ 
				'data_inicio' => $data_ini,
				'data_fim' => $data_fim,
				'id_unidade' => $idunidade,
				'id_usuario' => $usr
			];

			$sql_totalizado = <<<SQL
				select
					cp.forma_pagamento_id as id_forma_pagamento , fp.descricao, sum(cp.valor) as total
				from comanda c , comanda_fechamento cf , comanda_pagamento cp , forma_pagamento fp
				where
					cf.data_criacao >= :dataini:
					and cf.data_criacao <= :datafim:
					and cf.tipo_fechamento = 'pagamento'
					and cf.comanda_id = c.id
					and c.id_unidade  = :unidade:
					and cf.criado_por = :usuariologado:
					and cf.id = cp.comanda_fechamento_id
					and cp.forma_pagamento_id  = fp.id
				group by cp.forma_pagamento_id
			SQL;

			$binds_totalizado = [ 
				"usuariologado" => $usr,
				"unidade" => $idunidade,
				"dataini" => strval( $data_ini ),
				"datafim" => strval( $data_fim )
			];

			$sql_recebimentos = <<<SQL
				select
					cf.comanda_id ,cf.data_criacao , cf.hora_criacao , cf.valor ,
					cf.criado_por , pf2.nome as responsavel,
					cp.id as pagamento_id, cp.forma_pagamento_id, fp.descricao , cp.valor,
					p.nome as pet, p.id as pet_id, pf.nome as cliente,cp.observacao
				from
					comanda_fechamento cf , comanda_pagamento cp , forma_pagamento fp  , comanda c , pet p,
					cliente cl, pessoa_fisica pf , pessoa_fisica pf2, usuario u
				where
					cf.data_criacao >= :dataini:
					and cf.data_criacao <= :datafim:
					and cf.tipo_fechamento = 'pagamento'
					and cf.criado_por = :usuariologado:
					and cf.id = cp.comanda_fechamento_id
					and cp.forma_pagamento_id  = fp.id
					and cf.comanda_id = c.id
					and c.id_unidade  = :unidade:
					and c.id_pet = p.id
					and c.id_cliente = cl.id
					and cl.id_pessoa = pf.id_pessoa
					and cf.criado_por = u.id
					and u.id_pessoa = pf2.id_pessoa
				order by cf.data_criacao asc, cf.hora_criacao asc
			SQL;

			$binds_recebimentos = [ 
				"usuariologado" => $usr,
				"unidade" => $idunidade,
				"dataini" => $data_ini,
				"datafim" => $data_fim,
				"page" => $offset,
				"per_page" => $per_page
			];

			$sql_count_rows = <<<SQL
				select
					count(*) as count_rows
				from
					comanda_fechamento cf , comanda_pagamento cp , forma_pagamento fp  , comanda c , pet p,
					cliente cl, pessoa_fisica pf , pessoa_fisica pf2, usuario u
				where
					cf.data_criacao >= :dataini:
					and cf.data_criacao <= :datafim:
					and cf.tipo_fechamento = 'pagamento'
					and cf.criado_por = :usuariologado:
					and cf.id = cp.comanda_fechamento_id
					and cp.forma_pagamento_id  = fp.id
					and cf.comanda_id = c.id
					and c.id_unidade  = :unidade:
					and c.id_pet = p.id
					and c.id_cliente = cl.id
					and cl.id_pessoa = pf.id_pessoa
					and cf.criado_por = u.id
					and u.id_pessoa = pf2.id_pessoa
					
			SQL;

			$binds_count_rows = [ 
				"usuariologado" => $usr,
				"unidade" => $idunidade,
				"dataini" => $data_ini,
				"datafim" => $data_fim
			];

			$sql_usuarioLogado = <<<SQL
			    select pessoa_fisica.nome
			    from usuario, pessoa_fisica
			    where usuario.id_pessoa = pessoa_fisica.id_pessoa
			      and usuario.id = :id_usuario:
			SQL;
			$binds = [ 
				'id_usuario' => UsuarioLogado::getUsuarioId()
			];
			$usuarioNome = db_connect()->query( $sql_usuarioLogado, $binds )
				->getResultArray();

			$conn_total = db_connect();
			$query_total = $conn_total->query( $sql_totalizado, $binds_totalizado )
				->getResultArray();
			$error_total = $conn_total->error();
			$total_formasa_pagamentos ['totais'] = $query_total;

			$conn_recebimentos = db_connect();
			$query_recebimentos = $conn_recebimentos->query( $sql_recebimentos, $binds_recebimentos )
				->getResultArray();
			$error_recebimentos = $conn_recebimentos->error();
			$recebimentos = $query_recebimentos;

			$conn_count_rows = db_connect();
			$query_count_rows = $conn_count_rows->query( $sql_count_rows, $binds_count_rows )
				->getResultArray();
			$error_count_rows = $conn_count_rows->error();

			$conn_estorno = db_connect();
			$query_estorno = $conn_estorno->query( $sql_estorno, $bind_estornos )
				->getResultArray();
			$error_estorno = $conn_estorno->error();
			$estornos ['estorno'] = $query_estorno;

			$estorno_item = "";
			$total_estornos = 0;
			$estorno_cartao_credito = 0;
			$estorno_cartao_debito = 0;
			$estorno_pix = 0;
			$estorno_dinheiro = 0;
			foreach ( $estornos ['estorno'] as $key => $value ) {
				// Totalizador de tipo de estornos
				if ($value ['id_tipo_extorno'] == 2) {
					$estorno_dinheiro = $estorno_dinheiro + $value ['valor'];
				}

				if ($value ['id_tipo_extorno'] == 3) {
					$estorno_cartao_credito = $estorno_cartao_credito + $value ['valor'];
				}

				if ($value ['id_tipo_extorno'] == 4) {
					$estorno_cartao_debito = $estorno_cartao_debito + $value ['valor'];
				}

				if ($value ['id_tipo_extorno'] == 5) {
					$estorno_pix = $estorno_pix + $value ['valor'];
				}

				$key = $key++;
				$total_estornos = $total_estornos + $value ["valor"];
				$table_hover = !($key % 2) ? "background-color: #DCDCDC;" : "";
				$data_criacao = $value ["data_criacao"] == "1900-01-01" ? '-' : date( "d/m/Y", strtotime( $value ["data_criacao"] ) );
				$hora_criacao = $value ["hora_criacao"] == "00:00:00" ? '-' : date( "H:i:s", strtotime( $value ["hora_criacao"] ) );
				$obersevacao = $value ["observacao"] ? $value ["observacao"] : '-';

				$estorno_item .= '
                <tr style="' . $table_hover . '">
                    <td style="text-align: center;">' . $value ["item"] . ' </td>
                    <td style="text-align: center;">' . $value ["tipo_estorno"] . ' </td>
                    <td style="text-align: center;">' . $value ["cliente_id"] . ' </td>
                    <td style="text-align: center;">' . $value ["cliente"] . ' </td>
                    <td style="text-align: center;">' . $value ["pet_id"] . ' </td>
                    <td style="text-align: center;">' . $value ["pet"] . ' </td>
                    <td style="text-align: center;">' . $data_criacao . ' </td>
                    <td style="text-align: center;">' . $hora_criacao . '</td>
                    <td style="text-align: center;">' . $value ["executor"] . '</td>
                    <td style="text-align: center;">R$ ' . str_replace( ".", ",", $value ["valor"] ) . ' </td>
                </tr>
                <tr style="' . $table_hover . '">
                    <td colspan="12" style="text-align: left;"><strong>Observação:</strong> ' . $obersevacao . ' </td>
                </tr>
            ';
			}

			$valor_estornos = 0;
			foreach ( $estornos ['estorno'] as $key => $value ) {
				// id_tipo_extorno $value ["tipo_estorno"]
				if ($value ["id_tipo_extorno"] != 1) {
					$valor_estornos = $valor_estornos + $value ["valor"];
				}
			}

			$entradas = 0;
			foreach ( $total_formasa_pagamentos ['totais'] as $key => $value ) {
				if ($value ['id_forma_pagamento'] != 9) {
					$entradas = $entradas + $value ['total'];
				}
			}

			$total_caixa = $entradas - $valor_estornos;

			// $data_fim
			// $data_ini
			// Contrução do PDF
			$html = '';
			$html .= '<html>';
			$html .= '<head> ';
			$html .= '<style> ';
			$html .= "
                <style> 
                    @page {
                        margin: 0cm 0cm;
                    }
                    body {
                        margin-top: 3cm;
                        margin-bottom: 2cm;
                    }
        
                    /** Define the header rules **/
                    header {
                        position: fixed;
                        top: -1cm;
                        left: 0cm;
                        right: 0cm;
                        height: 2cm;
                        text-align: center; 
                    }
                </style> 
        
        ";
			$html .= '</style> ';
			$html .= '</head> ';
			$html .= '<body> ';

			$html .= '<header>';
			$html .= "<h2 style='text-align: center; font-size: 30px'> Gaveta </h2>";
			$html .= '	<table border="0" width="100%">
                <tr>
                    <td><strong>Aberto em : ' . date( "d/m/Y", strtotime( $data_ini ) ) . ' e Fechado em : ' . date( "d/m/Y", strtotime( $data_fim ) ) .
					'<strong></td>
                    <td style="text-align: right"><strong>Data do Sistema : ' . date( "d/m/Y" ) . '<strong></td>
                    <td><strong>Usuário : ' . $usuarioNome [0] ["nome"] . '<strong></td>
                </tr>';
			$html .= '</table>';
			$html .= '<hr>';
			$html .= '</header>';

			$rows_totalizadores = '';
			$total_entradas = 0;
			foreach ( $total_formasa_pagamentos ['totais'] as $key => $value ) {
				if ($value ['id_forma_pagamento'] != 9) {
					if ($value ['id_forma_pagamento'] == 1) {
						$valor_total = $value ['total'] - $estorno_cartao_credito;
						$rows_totalizadores .= '<td>' . $value ['descricao'] . ' : R$' . number_format( $valor_total, 2, ",", "." ) . '</td>';
						$total_entradas = $total_entradas + $value ['total'];
					}

					if ($value ['id_forma_pagamento'] == 2) {
						$valor_total = $value ['total'] - $estorno_cartao_debito;
						$rows_totalizadores .= '<td>' . $value ['descricao'] . ' : R$' . number_format( $valor_total, 2, ",", "." ) . '</td>';
						$total_entradas = $total_entradas + $value ['total'];
					}

					if ($value ['id_forma_pagamento'] == 3) {
						$valor_total = $value ['total'] - $estorno_pix;
						$rows_totalizadores .= '<td>' . $value ['descricao'] . ' : R$' . number_format( $valor_total, 2, ",", "." ) . '</td>';
						$total_entradas = $total_entradas + $value ['total'];
					}

					if ($value ['id_forma_pagamento'] == 7) {
						$valor_total = $value ['total'] - $estorno_dinheiro;
						$rows_totalizadores .= '<td>' . $value ['descricao'] . ' : R$' . number_format( $valor_total, 2, ",", "." ) . '</td>';
						$total_entradas = $total_entradas + $value ['total'];
					}
					// $rows_totalizadores .= '<td>' . $value ['descricao'] . ' : R$' . number_format( $value ['total'], 2, ",", "." ) . '</td>';
					// $total_entradas = $total_entradas + $value ['total'];
				}
			}

			$html .= '<table border="0" width="100%">';
			$html .= '<tr>
                <td><strong>Total de Entrada:</strong> R$' . number_format( $total_entradas, 2, ",", "." ) .
					'</td>
                <td colspan="2"><strong>Total de Saída:</strong> R$' . number_format( $valor_estornos, 2, ",", "." ) .
					'</td>
                <td><strong>Total do Caixa:</strong> R$' . number_format( $total_caixa, 2, ",", "." ) . '</td>
            </tr>';
			$html .= '<br>';
			$html .= '<tr>';
			$html .= '<td><strong>Totais:<strong></td>';
			$html .= $rows_totalizadores;
			$html .= '</tr>';
			$html .= '</table>';

			$html .= '<br>';

			$row_recebimento = '';
			foreach ( $recebimentos as $recebimento ) {
				$row_recebimento .= '<tr>
                    <td>' . date( "d/m/Y", strtotime( $recebimento ["data_criacao"] ) ) . ' - ' . $recebimento ["hora_criacao"] . '</td>
                    <td>R$' . number_format( $recebimento ["valor"], 2, ",", "." ) . '</td>
                    <td>' . $recebimento ["descricao"] . '</td>
                    <td>' . ucwords( strtolower( $recebimento ["pet_id"] ) ) . '</td>
                    <td>' . ucwords( strtolower( $recebimento ["pet"] ) ) . '</td>
                    <td>' . ucwords( strtolower( $recebimento ["cliente"] ) ) . '</td>
                    <td>' . $recebimento ["responsavel"] . '</td>
                </tr>
                <tr>
                    <td colspan="6">Observação:' . $recebimento ["observacao"] . '</td>
                </tr>
                <tr>
                    <td colspan="7"><hr></td>
                </tr>';
			}

			$html .= '<main>';
			$html .= '	<table style="font-size: 13px" border="0" width="100%">
                <tr>
                    <td><strong>Data </strong></td>
                    <td><strong>Valor </strong></td>
                    <td><strong>Forma </strong></td>
                    <td><strong>Pet </strong></td>
                    <td><strong>Id Pet </strong></td>
                    <td><strong>Tutor</strong></td>
                    <td><strong>Responsável</strong></td>
                </tr>' . $row_recebimento . '
            </table>';

			if ($estorno_item) {
				$html .= '<h2 style="text-align: center">Estornos</h2>';
				$html .= '<table style="font-size: 13px; margin-bottom: 40px" border="0" width="100%">
                             <tr>
                                <td style="text-align: center"><strong>Item </strong></td>
                                <td style="text-align: center"><strong>Tipo de Estorno </strong></td>
                                <td style="text-align: center"><strong>Id Tutor </strong></td>
                                <td style="text-align: center"><strong>Tutor </strong></td>
                                <td style="text-align: center"><strong>Id Pet </strong></td>
                                <td style="text-align: center"><strong>Pet </strong></td>
                                <td style="text-align: center"><strong>Data Criação </strong></td>
                                <td style="text-align: center"><strong>Hora Criação </strong></td>
                                <td style="text-align: center"><strong>Executante </strong></td>
                                <td style="text-align: center"><strong>Valor </strong></td>
                            </tr>';
				$html .= $estorno_item;
				$html .= '</table>';
				$html .= '<hr>';
				$html .= '<hr>';
			}

			$html .= '</main>';
			$html .= '</html>';

			$dompdf = new Dompdf();
			$dompdf->loadHtml( $html );
			$dompdf->setPaper( 'A4', 'landscape' );
			$dompdf->render();
			$dompdf->stream( 'realtorio.pdf' );
			exit( 0 );
		} catch ( Exception $e ) {
			return $this->response->setStatusCode( 460 )
				->setJSON( [ 
				'message' => 'Operação não realizada.',
				'data' => [ ],
				'error' => [ 
					'code' => $e->getCode(),
					'msg' => $e->getMessage()
				]
			] );
		}

	}

	public function getRecebimentosByUnidadeIdByPeriodo(int $idunidade, int $dtini, int $dtfim): Response {

		try {
			# ini_set( 'max_execution_time', 2000 );
			$data_ini = "";
			$data_fim = "";
			$page = trim( $_GET ['page'] );
			$per_page = trim( $_GET ['per_page'] );

			if ($dtini > $dtfim) {
				$data_ini = strval( $dtfim );
				$data_fim = strval( $dtini );
			} else {
				$data_ini = strval( $dtini );
				$data_fim = strval( $dtfim );
			}

			if (intval( $page ) > 0) {
				$page = $page;
			} else {
				$page = 1;
			}
			if (intval( $per_page ) > 0) {
				$per_page = intval( $per_page );
			} else {
				$per_page = 15;
			}
			$offset = ($page - 1) * $per_page;
			$data_fim = $this->toIsoDate( $data_fim );
			$data_ini = $this->toIsoDate( $data_ini );

			// $sql_totalizado = <<<SQL
			// select
			// ci.id_forma_pagamento, fp.descricao , sum(ci.valor) as valor
			// from
			// comanda_item ci,forma_pagamento fp,requisicao_procedimento rp,
			// convenio_procedimento cp, usuario u
			// where
			// ci.comanda_item_status_id = 2
			// and ci.id_forma_pagamento = fp.id
			// and ci.data_atualizacao >=:dataini:
			// and ci.data_atualizacao <=:datafim:
			// and ci.atualizado_por = u.id
			// and ci.id_requisicao_procedimento = rp.id
			// and rp.id_convenio_procedimento = cp.id
			// and cp.id_unidade = :unidade:
			// group by ci.id_forma_pagamento
			// SQL;

			// cp.forma_pagamento_id as id_forma_pagamento , fp.descricao, sum(cp.valor) as total
			$sql_totalizado = <<<SQL
				select
					cp.forma_pagamento_id as id_forma_pagamento , fp.descricao, sum(cp.valor) as total
				from 
					comanda c , comanda_fechamento cf , comanda_pagamento cp , forma_pagamento fp
				where
					cf.data_criacao >= :dataini:
					and cf.data_criacao <= :datafim:
					and cf.tipo_fechamento = 'pagamento'
					and cf.comanda_id = c.id
					and c.id_unidade  = :unidade:
					and cf.id = cp.comanda_fechamento_id
					and cp.forma_pagamento_id  = fp.id
				group by cp.forma_pagamento_id
			SQL;

			$binds_totalizado = [ 
				"unidade" => $idunidade,
				"dataini" => $data_ini,
				"datafim" => $data_fim
			];

			// $sql_recebimentos = <<<SQL
			// select
			// ci.id, ci.data_atualizacao , ci.hora_atualizacao , ci.comanda_item_status_id ,
			// ci.id_forma_pagamento , fp.descricao as formapagamento, ci.valor,
			// ci.atualizado_por, pf.nome as resonsavel , cp.id_unidade ,
			// ci.id_requisicao_procedimento, rp.id_convenio_procedimento ,
			// rp.id_pet , pc.id_cliente, c.id as cliente_id, pf2.nome as cliente
			// from
			// comanda_item ci , usuario u , pessoa_fisica pf, requisicao_procedimento rp,
			// pet_cliente pc , cliente c , pessoa_fisica pf2 , forma_pagamento fp, convenio_procedimento cp
			// where
			// ci.comanda_item_status_id = 2
			// and ci.id_forma_pagamento = fp.id
			// and ci.data_atualizacao >=:dataini:
			// and ci.data_atualizacao <=:datafim:
			// and ci.atualizado_por = u.id
			// and u.id_pessoa = pf.id_pessoa
			// and ci.id_requisicao_procedimento = rp.id
			// and rp.id_pet = pc.id_pet
			// and pc.id_cliente = c.id
			// and c.id_pessoa = pf2.id_pessoa
			// and rp.id_convenio_procedimento = cp.id
			// and cp.id_unidade = :unidade:
			// order by ci.data_atualizacao asc, ci.hora_atualizacao asc
			// Limit :page: , :per_page:

			// SQL;

			$sql_recebimentos = <<<SQL
				select
					cp.id, cp.data_criacao as data_atualizacao, cp.hora_criacao as hora_atualizacao,
					'2' as comanda_item_status_id ,
					cp.forma_pagamento_id as id_forma_pagamento, fp.descricao , cp.valor ,
					cf.criado_por as atualizado_por , pf2.nome as reponsavel, c.id as id_comanda, c.id_unidade as id_unidade,
					c.id_pet, c.id_cliente, c.id_cliente as cliente_id,pf.nome as cliente,
					'0' as id_requisicao_procedimento, '0' as id_convenio_procedimento
				from
					comanda_fechamento cf , comanda_pagamento cp , forma_pagamento fp  , comanda c , pet p,
					cliente cl, pessoa_fisica pf , pessoa_fisica pf2, usuario u
				where
					cf.data_criacao >= :dataini:
					and cf.data_criacao <= :datafim:
					and cf.tipo_fechamento = 'pagamento'
					and cf.id = cp.comanda_fechamento_id
					and cp.forma_pagamento_id  = fp.id
					and cf.comanda_id = c.id
					and c.id_unidade  = :unidade:
					and c.id_pet = p.id
					and c.id_cliente = cl.id
					and cl.id_pessoa = pf.id_pessoa
					and cf.criado_por = u.id
					and u.id_pessoa = pf2.id_pessoa
				order by cp.data_criacao asc, cp.hora_criacao asc
				Limit :page: , :per_page:
			SQL;

			$binds_recebimentos = [ 
				"unidade" => $idunidade,
				"dataini" => $data_ini,
				"datafim" => $data_fim,
				"page" => $offset,
				"per_page" => $per_page
			];

			// $sql_count_rows = <<<SQL
			// select
			// count(*) as count_rows
			// from
			// comanda_item ci , usuario u , pessoa_fisica pf, requisicao_procedimento rp,
			// pet_cliente pc , cliente c , pessoa_fisica pf2 , forma_pagamento fp, convenio_procedimento cp
			// where
			// ci.comanda_item_status_id = 2
			// and ci.id_forma_pagamento = fp.id
			// and ci.data_atualizacao >=:dataini:
			// and ci.data_atualizacao <=:datafim:
			// and ci.atualizado_por = u.id
			// and u.id_pessoa = pf.id_pessoa
			// and ci.id_requisicao_procedimento = rp.id
			// and rp.id_pet = pc.id_pet
			// and pc.id_cliente = c.id
			// and c.id_pessoa = pf2.id_pessoa
			// and rp.id_convenio_procedimento = cp.id
			// and cp.id_unidade = :unidade:

			// SQL;

			$sql_count_rows = <<<SQL
				select
					count(*) as count_rows
				from
					comanda_fechamento cf , comanda_pagamento cp , forma_pagamento fp  , comanda c , pet p,
					cliente cl, pessoa_fisica pf , pessoa_fisica pf2, usuario u
				where
					cf.data_criacao >= :dataini:
					and cf.data_criacao <= :datafim:
					and cf.tipo_fechamento = 'pagamento'
					and cf.id = cp.comanda_fechamento_id
					and cp.forma_pagamento_id  = fp.id
					and cf.comanda_id = c.id
					and c.id_unidade  = :unidade:
					and c.id_pet = p.id
					and c.id_cliente = cl.id
					and cl.id_pessoa = pf.id_pessoa
					and cf.criado_por = u.id
					and u.id_pessoa = pf2.id_pessoa
			SQL;

			$binds_count_rows = [ 
				"unidade" => $idunidade,
				"dataini" => $data_ini,
				"datafim" => $data_fim
			];

			$conn_total = db_connect();
			$query_total = $conn_total->query( $sql_totalizado, $binds_totalizado )
				->getResultArray();
			$total_formasa_pagamentos ['totais'] = $query_total;

			$conn_recebimentos = db_connect();
			$query_recebimentos = $conn_recebimentos->query( $sql_recebimentos, $binds_recebimentos )
				->getResultArray();

			$recebimentos = $query_recebimentos;

			$conn_count_rows = db_connect();
			$query_count_rows = $conn_count_rows->query( $sql_count_rows, $binds_count_rows )
				->getResultArray();

			$pagination = Pagination::builder()->setCurrentPage( $page )
				->setNumRows( $query_count_rows [0] ['count_rows'] )
				->setPerPage( $per_page )
				->build();

			return $this->response->setStatusCode( 200 )
				->setJSON( 
				[ 
					'message' => 'Operação realizada com sucesso.',
					'data' => [ 
						'Totais' => $total_formasa_pagamentos ['totais'],
						'Recebimentos' => $recebimentos
					],
					'pagination' => $pagination->toResponseArray(),
					'error' => ''
				] );
		} catch ( Exception $e ) {
			return $this->response->setStatusCode( 460 )
				->setJSON( [ 
				'message' => 'Operação não realizada.',
				'data' => [ ],
				'error' => [ 
					'code' => $e->getCode(),
					'msg' => $e->getMessage()
				]
			] );
		}

	}

	public function getRecebimentosByUserIdByUnidadeIdByPeriodo(int $iduser, int $idunidade, int $dtini, int $dtfim): Response {

		try {
			$data_ini = "";
			$data_fim = "";
			$page = trim( $_GET ['page'] );
			$per_page = trim( $_GET ['per_page'] );

			if ($dtini > $dtfim) {
				$data_ini = strval( $dtfim );
				$data_fim = strval( $dtini );
			} else {
				$data_ini = strval( $dtini );
				$data_fim = strval( $dtfim );
			}

			if (intval( $page ) > 0) {
				$page = $page;
			} else {
				$page = 1;
			}
			if (intval( $per_page ) > 0) {
				$per_page = intval( $per_page );
			} else {
				$per_page = 15;
			}
			$offset = ($page - 1) * $per_page;
			$data_fim = $this->toIsoDate( $data_fim );
			$data_ini = $this->toIsoDate( $data_ini );
			$usr = UsuarioLogado::getUsuarioId();

			// $sql_totalizado = <<<SQL
			// select
			// ci.id_forma_pagamento, fp.descricao , sum(ci.valor) as valor
			// from
			// comanda_item ci,forma_pagamento fp,requisicao_procedimento rp,convenio_procedimento cp
			// where
			// ci.comanda_item_status_id = 2
			// and ci.id_forma_pagamento = fp.id
			// and ci.data_atualizacao >=:dataini:
			// and ci.data_atualizacao <=:datafim:
			// and ci.atualizado_por = :usuario:
			// and ci.id_requisicao_procedimento = rp.id
			// and rp.id_convenio_procedimento = cp.id
			// and cp.id_unidade = :unidade:
			// group by ci.id_forma_pagamento
			// SQL;

			$sql_totalizado = <<<SQL
				select
					cp.forma_pagamento_id as id_forma_pagamento , fp.descricao, sum(cp.valor) as valor
				from 
					comanda c , comanda_fechamento cf , comanda_pagamento cp , forma_pagamento fp
				where
					cf.data_criacao >= :dataini:
					and cf.data_criacao <= :datafim:
					and cf.tipo_fechamento = 'pagamento'
					and cf.criado_por = :usuario:
					and cf.comanda_id = c.id
					and c.id_unidade  = :unidade:
					and cf.id = cp.comanda_fechamento_id
					and cp.forma_pagamento_id  = fp.id
				group by cp.forma_pagamento_id
			SQL;

			$binds_totalizado = [ 
				"usuario" => $iduser,
				"unidade" => $idunidade,
				"dataini" => $data_ini,
				"datafim" => $data_fim
			];

			// $sql_recebimentos = <<<SQL
			// select
			// ci.id, ci.data_atualizacao , ci.hora_atualizacao , ci.comanda_item_status_id ,
			// ci.id_forma_pagamento , fp.descricao as formapagamento, ci.valor,
			// ci.atualizado_por, pf.nome as resonsavel , cp.id_unidade ,
			// ci.id_requisicao_procedimento, rp.id_convenio_procedimento ,
			// rp.id_pet , pc.id_cliente, c.id as cliente_id, pf2.nome as cliente
			// from
			// comanda_item ci , usuario u , pessoa_fisica pf, requisicao_procedimento rp,
			// pet_cliente pc , cliente c , pessoa_fisica pf2 , forma_pagamento fp, convenio_procedimento cp
			// where
			// ci.comanda_item_status_id = 2
			// and ci.id_forma_pagamento = fp.id
			// and ci.data_atualizacao >=:dataini:
			// and ci.data_atualizacao <=:datafim:
			// and ci.atualizado_por = :usuario:
			// and ci.atualizado_por = u.id
			// and u.id_pessoa = pf.id_pessoa
			// and ci.id_requisicao_procedimento = rp.id
			// and rp.id_pet = pc.id_pet
			// and pc.id_cliente = c.id
			// and c.id_pessoa = pf2.id_pessoa
			// and rp.id_convenio_procedimento = cp.id
			// and cp.id_unidade = :unidade:
			// order by ci.data_atualizacao asc, ci.hora_atualizacao asc
			// Limit :page: , :per_page:

			// SQL;

			$sql_recebimentos = <<<SQL
				select
					cp.id, cp.data_criacao as data_atualizacao, cp.hora_criacao as hora_atualizacao,
					'2' as comanda_item_status_id ,
					cp.forma_pagamento_id as id_forma_pagamento, fp.descricao , cp.valor ,
					cf.criado_por as atualizado_por , pf2.nome as reponsavel, c.id as id_comanda, c.id_unidade as id_unidade,
					c.id_pet, c.id_cliente, c.id_cliente as cliente_id,pf.nome as cliente,
					'0' as id_requisicao_procedimento, '0' as id_convenio_procedimento
				from
					comanda_fechamento cf , comanda_pagamento cp , forma_pagamento fp  , comanda c , pet p,
					cliente cl, pessoa_fisica pf , pessoa_fisica pf2, usuario u
				where
					cf.data_criacao >= :dataini:
					and cf.data_criacao <= :datafim:
					and cf.criado_por = :usuario:
					and cf.tipo_fechamento = 'pagamento'
					and cf.id = cp.comanda_fechamento_id
					and cp.forma_pagamento_id  = fp.id
					and cf.comanda_id = c.id
					and c.id_unidade  = :unidade:
					and c.id_pet = p.id
					and c.id_cliente = cl.id
					and cl.id_pessoa = pf.id_pessoa
					and cf.criado_por = u.id
					and u.id_pessoa = pf2.id_pessoa
				order by cp.data_criacao asc, cp.hora_criacao asc
				Limit :page: , :per_page:
			SQL;

			$binds_recebimentos = [ 
				"usuario" => $iduser,
				"unidade" => $idunidade,
				"dataini" => $data_ini,
				"datafim" => $data_fim,
				"page" => $offset,
				"per_page" => $per_page
			];

			// $sql_count_rows = <<<SQL
			// select
			// count(*) as count_rows
			// from
			// comanda_item ci , usuario u , pessoa_fisica pf, requisicao_procedimento rp,
			// pet_cliente pc , cliente c , pessoa_fisica pf2 , forma_pagamento fp, convenio_procedimento cp
			// where
			// ci.comanda_item_status_id = 2
			// and ci.id_forma_pagamento = fp.id
			// and ci.data_atualizacao >=:dataini:
			// and ci.data_atualizacao <=:datafim:
			// and ci.atualizado_por = :usuario:
			// and ci.atualizado_por = u.id
			// and u.id_pessoa = pf.id_pessoa
			// and ci.id_requisicao_procedimento = rp.id
			// and rp.id_pet = pc.id_pet
			// and pc.id_cliente = c.id
			// and c.id_pessoa = pf2.id_pessoa
			// and rp.id_convenio_procedimento = cp.id
			// and cp.id_unidade = :unidade:

			// SQL;

			$sql_count_rows = <<<SQL
				select
					count(*) as count_rows
				from
					comanda_fechamento cf , comanda_pagamento cp , forma_pagamento fp  , comanda c , pet p,
					cliente cl, pessoa_fisica pf , pessoa_fisica pf2, usuario u
				where
					cf.data_criacao >= :dataini:
					and cf.data_criacao <= :datafim:
					and cf.criado_por = :usuario:
					and cf.tipo_fechamento = 'pagamento'
					and cf.id = cp.comanda_fechamento_id
					and cp.forma_pagamento_id  = fp.id
					and cf.comanda_id = c.id
					and c.id_unidade  = :unidade:
					and c.id_pet = p.id
					and c.id_cliente = cl.id
					and cl.id_pessoa = pf.id_pessoa
					and cf.criado_por = u.id
					and u.id_pessoa = pf2.id_pessoa
					
			SQL;

			$binds_count_rows = [ 
				"usuario" => $iduser,
				"unidade" => $idunidade,
				"dataini" => $data_ini,
				"datafim" => $data_fim
			];

			$conn_total = db_connect();
			$query_total = $conn_total->query( $sql_totalizado, $binds_totalizado )
				->getResultArray();
			$total_formasa_pagamentos ['totais'] = $query_total;

			$conn_recebimentos = db_connect();
			$query_recebimentos = $conn_recebimentos->query( $sql_recebimentos, $binds_recebimentos )
				->getResultArray();

			$recebimentos = $query_recebimentos;

			$conn_count_rows = db_connect();
			$query_count_rows = $conn_count_rows->query( $sql_count_rows, $binds_count_rows )
				->getResultArray();

			$pagination = Pagination::builder()->setCurrentPage( $page )
				->setNumRows( $query_count_rows [0] ['count_rows'] )
				->setPerPage( $per_page )
				->build();

			return $this->response->setStatusCode( 200 )
				->setJSON( 
				[ 
					'message' => 'Operação realizada com sucesso.',
					'data' => [ 
						'Totais' => $total_formasa_pagamentos ['totais'],
						'Recebimentos' => $recebimentos
					],
					'pagination' => $pagination->toResponseArray(),
					'error' => ''
				] );
		} catch ( Exception $e ) {
			return $this->response->setStatusCode( 460 )
				->setJSON( [ 
				'message' => 'Operação não realizada.',
				'data' => [ ],
				'error' => [ 
					'code' => $e->getCode(),
					'msg' => $e->getMessage()
				]
			] );
		}

	}

	// RELATORIO DE GAVETA PDF - visão admin de recebimentos
	public function getRecebimentosByUserIdByUnidadeIdByPeriodoPdf(int $iduser, int $idunidade, int $dtini, int $dtfim): Response {

		try {
			# ini_set( 'max_execution_time', 2000 );
			$data_ini = "";
			$data_fim = "";
			$page = trim( $_GET ['page'] );
			$per_page = trim( $_GET ['per_page'] );

			if ($dtini > $dtfim) {
				$data_ini = strval( $dtfim );
				$data_fim = strval( $dtini );
			} else {
				$data_ini = strval( $dtini );
				$data_fim = strval( $dtfim );
			}

			if (intval( $page ) > 0) {
				$page = $page;
			} else {
				$page = 1;
			}
			if (intval( $per_page ) > 0) {
				$per_page = intval( $per_page );
			} else {
				$per_page = 15;
			}
			$offset = ($page - 1) * $per_page;
			$data_fim = $this->toIsoDate( $data_fim );
			$data_ini = $this->toIsoDate( $data_ini );
			$usr = UsuarioLogado::getUsuarioId();

			$sql_estorno = <<<SQL
			    select
			        ext.id_tipo_extorno, ei.valor, ext.data_criacao, ext.hora_criacao, ext.observacao,
			        tpe.descricao as tipo_estorno, pf.nome as executor, p.descricao as item, c.id_pet as pet_id, pt.nome as pet, c.id_cliente as cliente_id, pf2.nome as cliente 
			    from
			        extorno ext, tipo_extorno tpe, usuario usr, pessoa_fisica pf, comanda c, extorno_item ei, comanda_item ci, procedimento p, pet pt, cliente cl, pessoa_fisica pf2
			    where 
			        ext.id_tipo_extorno = tpe.id
			        and ext.criado_por = usr.id
			        and usr.id_pessoa = pf.id_pessoa
			        and c.id = ext.id_comanda
			        and c.id_pet = pt.id 
			        and c.id_cliente = cl.id
			        and cl.id_pessoa = pf2.id_pessoa 
			        and ext.id = ei.extorno_id
			        and ei.comanda_item_id = ci.id
			        and ci.id_procedimento = p.id
			        and ext.data_criacao >= :data_inicio:
			        and ext.data_criacao <= :data_fim:
			        and c.id_unidade = :id_unidade:
			SQL;

			$bind_estornos = [ 
				'data_inicio' => $data_ini,
				'data_fim' => $data_fim,
				'id_unidade' => $idunidade,
				'id_usuario' => $iduser
			];

			$sql_totalizado = <<<SQL
				select
					cp.forma_pagamento_id as id_forma_pagamento , fp.descricao, sum(cp.valor) as valor
				from 
					comanda c , comanda_fechamento cf , comanda_pagamento cp , forma_pagamento fp
				where
					cf.data_criacao >= :dataini:
					and cf.data_criacao <= :datafim:
					and cf.tipo_fechamento = 'pagamento'
					and cf.comanda_id = c.id
					and c.id_unidade  = :unidade:
					and cf.id = cp.comanda_fechamento_id
					and cp.forma_pagamento_id  = fp.id
				group by cp.forma_pagamento_id
			SQL;

			$binds_totalizado = [ 
				"usuario" => $iduser,
				"unidade" => $idunidade,
				"dataini" => $data_ini,
				"datafim" => $data_fim
			];

			$sql_recebimentos = <<<SQL
				select
					cp.id, cp.data_criacao as data_atualizacao, cp.hora_criacao as hora_atualizacao,
					'2' as comanda_item_status_id ,
					cp.forma_pagamento_id as id_forma_pagamento, fp.descricao as formapagamento, cp.valor ,
					cf.criado_por as atualizado_por , pf2.nome as responsavel, c.id_unidade as id_unidade,
					c.id_pet, c.id_cliente, c.id_cliente as cliente_id,pf.nome as cliente, p.nome as nome_pet,
					'0' as id_requisicao_procedimento, '0' as id_convenio_procedimento, cp.observacao
				from
					comanda_fechamento cf , comanda_pagamento cp , forma_pagamento fp  , comanda c , pet p,
					cliente cl, pessoa_fisica pf , pessoa_fisica pf2, usuario u
				where
					cf.data_criacao >= :dataini:
					and cf.data_criacao <= :datafim:
					and cf.tipo_fechamento = 'pagamento'
					and cf.id = cp.comanda_fechamento_id
					and cp.forma_pagamento_id  = fp.id
					and cf.comanda_id = c.id
					and c.id_unidade  = :unidade:
					and c.id_pet = p.id
					and c.id_cliente = cl.id
					and cl.id_pessoa = pf.id_pessoa
					and cf.criado_por = u.id
					and u.id_pessoa = pf2.id_pessoa
				order by cp.data_criacao asc, cp.hora_criacao asc
			SQL;

			$binds_recebimentos = [ 
				"usuario" => $iduser,
				"unidade" => $idunidade,
				"dataini" => $data_ini,
				"datafim" => $data_fim,
				"page" => $offset,
				"per_page" => $per_page
			];

			$sql_count_rows = <<<SQL
				select
					count(*) as count_rows
				from
					comanda_fechamento cf , comanda_pagamento cp , forma_pagamento fp  , comanda c , pet p,
					cliente cl, pessoa_fisica pf , pessoa_fisica pf2, usuario u
				where
					cf.data_criacao >= :dataini:
					and cf.data_criacao <= :datafim:
					and cf.tipo_fechamento = 'pagamento'
					and cf.id = cp.comanda_fechamento_id
					and cp.forma_pagamento_id  = fp.id
					and cf.comanda_id = c.id
					and c.id_unidade  = :unidade:
					and c.id_pet = p.id
					and c.id_cliente = cl.id
					and cl.id_pessoa = pf.id_pessoa
					and cf.criado_por = u.id
					and u.id_pessoa = pf2.id_pessoa
					
			SQL;

			$binds_count_rows = [ 
				"usuario" => $iduser,
				"unidade" => $idunidade,
				"dataini" => $data_ini,
				"datafim" => $data_fim
			];

			$sql_unidade = <<<SQL
				select descricao from unidade where id = :unidade:
			SQL;

			$binds_unidade = [ 
				"unidade" => $idunidade
			];

			$sql_usuarioLogado = <<<SQL
			    select pessoa_fisica.nome
			    from usuario, pessoa_fisica
			    where usuario.id_pessoa = pessoa_fisica.id_pessoa
			      and usuario.id = :id_usuario:
			SQL;
			$binds = [ 
				'id_usuario' => $iduser
			];

			$usuarioNome = db_connect()->query( $sql_usuarioLogado, $binds )
				->getResultArray();

			$conn_unidade = db_connect();
			$unidade = $conn_unidade->query( $sql_unidade, $binds_unidade )
				->getResultArray();

			$conn_total = db_connect();
			$query_total = $conn_total->query( $sql_totalizado, $binds_totalizado )
				->getResultArray();
			$total_formasa_pagamentos ['totais'] = $query_total;

			$conn_recebimentos = db_connect();
			$query_recebimentos = $conn_recebimentos->query( $sql_recebimentos, $binds_recebimentos )
				->getResultArray();

			$recebimentos = $query_recebimentos;

			$conn_count_rows = db_connect();
			$query_count_rows = $conn_count_rows->query( $sql_count_rows, $binds_count_rows )
				->getResultArray();

			$conn_estorno = db_connect();
			$query_estorno = $conn_estorno->query( $sql_estorno, $bind_estornos )
				->getResultArray();
			$error_estorno = $conn_estorno->error();
			$estornos ['estorno'] = $query_estorno;

			$estorno_item = "";
			$total_estornos = 0;
			$estorno_cartao_credito = 0;
			$estorno_cartao_debito = 0;
			$estorno_pix = 0;
			$estorno_dinheiro = 0;
			foreach ( $estornos ['estorno'] as $key => $value ) {
				// Totalizador de tipo de estornos
				if ($value ['id_tipo_extorno'] == 2) {
					$estorno_dinheiro = $estorno_dinheiro + $value ['valor'];
				}

				if ($value ['id_tipo_extorno'] == 3) {
					$estorno_cartao_credito = $estorno_cartao_credito + $value ['valor'];
				}

				if ($value ['id_tipo_extorno'] == 4) {
					$estorno_cartao_debito = $estorno_cartao_debito + $value ['valor'];
				}

				if ($value ['id_tipo_extorno'] == 5) {
					$estorno_pix = $estorno_pix + $value ['valor'];
				}

				$key = $key++;
				$total_estornos = $total_estornos + $value ["valor"];
				$table_hover = !($key % 2) ? "background-color: #DCDCDC;" : "";
				$data_criacao = $value ["data_criacao"] == "1900-01-01" ? '-' : date( "d/m/Y", strtotime( $value ["data_criacao"] ) );
				$hora_criacao = $value ["hora_criacao"] == "00:00:00" ? '-' : date( "H:i:s", strtotime( $value ["hora_criacao"] ) );
				$obersevacao = $value ["observacao"] ? $value ["observacao"] : '-';

				$estorno_item .= '
                <tr style="' . $table_hover . '">
                    <td style="text-align: center;">' . $value ["item"] . ' </td>
                    <td style="text-align: center;">' . $value ["tipo_estorno"] . ' </td>
                    <td style="text-align: center;">' . $value ["cliente_id"] . ' </td>
                    <td style="text-align: center;">' . $value ["cliente"] . ' </td>
                    <td style="text-align: center;">' . $value ["pet_id"] . ' </td>
                    <td style="text-align: center;">' . $value ["pet"] . ' </td>
                    <td style="text-align: center;">' . $data_criacao . ' </td>
                    <td style="text-align: center;">' . $hora_criacao . '</td>
                    <td style="text-align: center;">' . $value ["executor"] . '</td>
                    <td style="text-align: center;">R$ ' . str_replace( ".", ",", $value ["valor"] ) . ' </td>
                </tr>
                <tr style="' . $table_hover . '">
                    <td colspan="12" style="text-align: left;"><strong>Observação:</strong> ' . $obersevacao . ' </td>
                </tr>
            ';
			}

			// $rows_totalizadores = '';
			// $total_entradas = 0;
			// foreach ( $total_formasa_pagamentos ['totais'] as $key => $value ) {
			// $rows_totalizadores .= '<td>' . $value ['descricao'] . ' : R$' . number_format( $value ['total'], 2, ",", "." ) . '</td>';
			// $total_entradas = $total_entradas + $value ['total'];
			// }

			$valor_estornos = 0;
			foreach ( $estornos ['estorno'] as $key => $value ) {
				// id_tipo_extorno $value ["tipo_estorno"]
				if ($value ["id_tipo_extorno"] != 1) {
					$valor_estornos = $valor_estornos + $value ["valor"];
				}
			}

			$entradas = 0;
			foreach ( $total_formasa_pagamentos ['totais'] as $key => $value ) {
				if ($value ['id_forma_pagamento'] != 9) {
					$entradas = $entradas + $value ['valor'];
				}
			}

			$total_caixa = $entradas - $valor_estornos;

			$pagination = Pagination::builder()->setCurrentPage( $page )
				->setNumRows( $query_count_rows [0] ['count_rows'] )
				->setPerPage( $per_page )
				->build();

			// Contrução do PDF
			$html = '';
			$html .= '<html>';
			$html .= '<head> ';
			$html .= '<style> ';
			$html .= "
                <style> 
                    @page {
                        margin: 0cm 0cm;
                    }
                    body {
                        margin-top: 3cm;
                        margin-bottom: 2cm;
                    }
        
                    /** Define the header rules **/
                    header {
                        position: fixed;
                        top: -1cm;
                        left: 0cm;
                        right: 0cm;
                        height: 2cm;
                        text-align: center; 
                    }
                </style> 
        
        ";
			$html .= '</style> ';
			$html .= '</head> ';
			$html .= '<body> ';

			$html .= '<header>';
			$html .= "<h2 style='text-align: center; font-size: 30px'> Gaveta </h2>";
			$html .= '	<table border="0" width="100%">
                <tr>
                    <td><strong>Aberto em : ' . date( "d/m/Y", strtotime( $data_ini ) ) . ' e Fechado em : ' . date( "d/m/Y", strtotime( $data_fim ) ) .
					'<strong></td>
                    <td style="text-align: right"><strong>Data do Sistema : ' . date( "d/m/Y" ) .
					'<strong></td>
                    <td style="text-align: right"><strong>Unidade : ' . $unidade [0] ["descricao"] . '<strong></td>
                </tr>';
			$html .= '</table>';
			$html .= '<hr>';
			$html .= '</header>';

			$rows_totalizadores = '';
			$total_entradas = 0;
			foreach ( $total_formasa_pagamentos ['totais'] as $key => $value ) {
				if ($value ['id_forma_pagamento'] != 9) {
					if ($value ['id_forma_pagamento'] == 1) {
						$valor_total = $value ['valor'] - $estorno_cartao_credito;
						$rows_totalizadores .= '<td>' . $value ['descricao'] . ' : R$' . number_format( $valor_total, 2, ",", "." ) . '</td>';
						$total_entradas = $total_entradas + $value ['valor'];
					}

					if ($value ['id_forma_pagamento'] == 2) {
						$valor_total = $value ['valor'] - $estorno_cartao_debito;
						$rows_totalizadores .= '<td>' . $value ['descricao'] . ' : R$' . number_format( $valor_total, 2, ",", "." ) . '</td>';
						$total_entradas = $total_entradas + $value ['valor'];
					}

					if ($value ['id_forma_pagamento'] == 3) {
						$valor_total = $value ['valor'] - $estorno_pix;
						$rows_totalizadores .= '<td>' . $value ['descricao'] . ' : R$' . number_format( $valor_total, 2, ",", "." ) . '</td>';
						$total_entradas = $total_entradas + $value ['valor'];
					}

					if ($value ['id_forma_pagamento'] == 7) {
						$valor_total = $value ['valor'] - $estorno_dinheiro;
						$rows_totalizadores .= '<td>' . $value ['descricao'] . ' : R$' . number_format( $valor_total, 2, ",", "." ) . '</td>';
						$total_entradas = $total_entradas + $value ['valor'];
					}

					//
					// $rows_totalizadores .= '<td>' . $value ['descricao'] . ' : R$' . number_format( $value ['valor'], 2, ",", "." ) . '</td>';
					// $total_entradas = $total_entradas + $value ['valor'];
				}
			}

			$html .= '<table border="0" width="100%">';
			$html .= '<tr>
                <td><strong>Total de Entrada:</strong> R$' . number_format( $total_entradas, 2, ",", "." ) .
					'</td>
                <td colspan="2"><strong>Total de Saída:</strong> R$' . number_format( $valor_estornos, 2, ",", "." ) .
					'</td>
                <td><strong>Total do Caixa:</strong> R$' . number_format( $total_caixa, 2, ",", "." ) . '</td>
            </tr>';
			$html .= '<br>';
			$html .= '<tr>';
			$html .= '<td><strong>Totais:<strong></td>';
			$html .= $rows_totalizadores;
			$html .= '</tr>';
			$html .= '</table>';

			$html .= '<br>';

			$row_recebimento = '';
			foreach ( $recebimentos as $recebimento ) {
				$row_recebimento .= '<tr>
                    <td>' . date( "d/m/Y", strtotime( $recebimento ["data_atualizacao"] ) ) . ' - ' . $recebimento ["hora_atualizacao"] . '</td>
                    <td>R$' . number_format( $recebimento ["valor"], 2, ",", "." ) . '</td>
                    <td>' . $recebimento ["formapagamento"] . '</td>
                    <td>' . ucwords( strtolower( $recebimento ["id_pet"] ) ) . '</td>
                    <td>' . ucwords( strtolower( $recebimento ["nome_pet"] ) ) . '</td>
                    <td>' . ucwords( strtolower( $recebimento ["cliente"] ) ) . '</td>
                    <td>' . $recebimento ["responsavel"] . '</td>
                </tr>
                <tr>
                    <td colspan="6">Observação:' . $recebimento ["observacao"] . '</td>
                </tr>
                <tr>
                    <td colspan="7"><hr></td>
                </tr>';
			}

			$html .= '<main>';
			$html .= '	<table style="font-size: 13px" border="0" width="100%">
                <tr>
                    <td><strong>Data </strong></td>
                    <td><strong>Valor </strong></td>
                    <td><strong>Forma </strong></td>
                    <td><strong>Pet </strong></td>
                    <td><strong>Id Pet </strong></td>
                    <td><strong>Tutor</strong></td>
                    <td><strong>Responsável</strong></td>
                </tr>' . $row_recebimento . '
            </table>';

			if ($estorno_item) {
				$html .= '<h2 style="text-align: center">Estornos</h2>';
				$html .= '<table style="font-size: 13px; margin-bottom: 40px" border="0" width="100%">
                             <tr>
                                <td style="text-align: center"><strong>Item </strong></td>
                                <td style="text-align: center"><strong>Tipo de Estorno </strong></td>
                                <td style="text-align: center"><strong>Id Tutor </strong></td>
                                <td style="text-align: center"><strong>Tutor </strong></td>
                                <td style="text-align: center"><strong>Id Pet </strong></td>
                                <td style="text-align: center"><strong>Pet </strong></td>
                                <td style="text-align: center"><strong>Data Criação </strong></td>
                                <td style="text-align: center"><strong>Hora Criação </strong></td>
                                <td style="text-align: center"><strong>Executante </strong></td>
                                <td style="text-align: center"><strong>Valor </strong></td>
                            </tr>';
				$html .= $estorno_item;
				$html .= '</table>';
				$html .= '<hr>';
				$html .= '<hr>';
			}

			$html .= '</main>';
			$html .= '</html>';

			$dompdf = new Dompdf();
			$dompdf->loadHtml( $html );
			$dompdf->setPaper( 'A4', 'landscape' );
			$dompdf->render();
			$dompdf->stream( 'realtorio.pdf' );
			exit( 0 );
		} catch ( Exception $e ) {
			return $this->response->setStatusCode( 460 )
				->setJSON( [ 
				'message' => 'Operação não realizada.',
				'data' => [ ],
				'error' => [ 
					'code' => $e->getCode(),
					'msg' => $e->getMessage()
				]
			] );
		}

	}

	// RELATORIO DE GAVETA EXCEL - visão admin de recebimentos
	public function getRecebimentosByUserIdByUnidadeIdByPeriodoExcel(int $iduser, int $idunidade, int $dtini, int $dtfim): Response {

		try {
			$data_ini = "";
			$data_fim = "";
			$page = trim( $_GET ['page'] );
			$per_page = trim( $_GET ['per_page'] );

			if ($dtini > $dtfim) {
				$data_ini = strval( $dtfim );
				$data_fim = strval( $dtini );
			} else {
				$data_ini = strval( $dtini );
				$data_fim = strval( $dtfim );
			}

			if (intval( $page ) > 0) {
				$page = $page;
			} else {
				$page = 1;
			}
			if (intval( $per_page ) > 0) {
				$per_page = intval( $per_page );
			} else {
				$per_page = 15;
			}
			$offset = ($page - 1) * $per_page;
			$data_fim = $this->toIsoDate( $data_fim );
			$data_ini = $this->toIsoDate( $data_ini );
			$usr = UsuarioLogado::getUsuarioId();

			$sql_estorno = <<<SQL
			    select
			        ext.id_tipo_extorno, ei.valor, ext.data_criacao, ext.hora_criacao, ext.observacao,
			        tpe.descricao as tipo_estorno, pf.nome as executor, p.descricao as item, c.id_pet as pet_id, pt.nome as pet, c.id_cliente as cliente_id, pf2.nome as cliente 
			    from
			        extorno ext, tipo_extorno tpe, usuario usr, pessoa_fisica pf, comanda c, extorno_item ei, comanda_item ci, procedimento p, pet pt, cliente cl, pessoa_fisica pf2
			    where 
			        ext.id_tipo_extorno = tpe.id
			        and ext.criado_por = usr.id
			        and usr.id_pessoa = pf.id_pessoa
			        and c.id = ext.id_comanda
			        and c.id_pet = pt.id 
			        and c.id_cliente = cl.id
			        and cl.id_pessoa = pf2.id_pessoa 
			        and ext.id = ei.extorno_id
			        and ei.comanda_item_id = ci.id
			        and ci.id_procedimento = p.id
			        and ext.data_criacao >= :data_inicio:
			        and ext.data_criacao <= :data_fim:
			        and c.id_unidade = :id_unidade:
			SQL;

			$bind_estornos = [ 
				'data_inicio' => $data_ini,
				'data_fim' => $data_fim,
				'id_unidade' => $idunidade,
				'id_usuario' => $iduser
			];

			$sql_totalizado = <<<SQL
				select
					cp.forma_pagamento_id as id_forma_pagamento , fp.descricao, sum(cp.valor) as valor
				from 
					comanda c , comanda_fechamento cf , comanda_pagamento cp , forma_pagamento fp
				where
					cf.data_criacao >= :dataini:
					and cf.data_criacao <= :datafim:
					and cf.tipo_fechamento = 'pagamento'
					and cf.comanda_id = c.id
					and c.id_unidade  = :unidade:
					and cf.id = cp.comanda_fechamento_id
					and cp.forma_pagamento_id  = fp.id
				group by cp.forma_pagamento_id
			SQL;

			$binds_totalizado = [ 
				"usuario" => $iduser,
				"unidade" => $idunidade,
				"dataini" => $data_ini,
				"datafim" => $data_fim
			];

			$sql_recebimentos = <<<SQL
				select
					cp.id, cp.data_criacao as data_atualizacao, cp.hora_criacao as hora_atualizacao,
					'2' as comanda_item_status_id ,
					cp.forma_pagamento_id as id_forma_pagamento, fp.descricao as formapagamento, cp.valor ,
					cf.criado_por as atualizado_por , pf2.nome as responsavel, c.id_unidade as id_unidade,
					c.id_pet, c.id_cliente, c.id_cliente as cliente_id,pf.nome as cliente, p.nome as nome_pet,
					'0' as id_requisicao_procedimento, '0' as id_convenio_procedimento
				from
					comanda_fechamento cf , comanda_pagamento cp , forma_pagamento fp  , comanda c , pet p,
					cliente cl, pessoa_fisica pf , pessoa_fisica pf2, usuario u
				where
					cf.data_criacao >= :dataini:
					and cf.data_criacao <= :datafim:
					and cf.tipo_fechamento = 'pagamento'
					and cf.id = cp.comanda_fechamento_id
					and cp.forma_pagamento_id  = fp.id
					and cf.comanda_id = c.id
					and c.id_unidade  = :unidade:
					and c.id_pet = p.id
					and c.id_cliente = cl.id
					and cl.id_pessoa = pf.id_pessoa
					and cf.criado_por = u.id
					and u.id_pessoa = pf2.id_pessoa
				order by cp.data_criacao asc, cp.hora_criacao asc
			SQL;

			$binds_recebimentos = [ 
				"usuario" => $iduser,
				"unidade" => $idunidade,
				"dataini" => $data_ini,
				"datafim" => $data_fim,
				"page" => $offset,
				"per_page" => $per_page
			];

			$sql_count_rows = <<<SQL
				select
					count(*) as count_rows
				from
					comanda_fechamento cf , comanda_pagamento cp , forma_pagamento fp  , comanda c , pet p,
					cliente cl, pessoa_fisica pf , pessoa_fisica pf2, usuario u
				where
					cf.data_criacao >= :dataini:
					and cf.data_criacao <= :datafim:
					and cf.tipo_fechamento = 'pagamento'
					and cf.id = cp.comanda_fechamento_id
					and cp.forma_pagamento_id  = fp.id
					and cf.comanda_id = c.id
					and c.id_unidade  = :unidade:
					and c.id_pet = p.id
					and c.id_cliente = cl.id
					and cl.id_pessoa = pf.id_pessoa
					and cf.criado_por = u.id
					and u.id_pessoa = pf2.id_pessoa
					
			SQL;

			$binds_count_rows = [ 
				"usuario" => $iduser,
				"unidade" => $idunidade,
				"dataini" => $data_ini,
				"datafim" => $data_fim
			];

			$sql_unidade = <<<SQL
				select descricao from unidade where id = :unidade:
			SQL;

			$binds_unidade = [ 
				"unidade" => $idunidade
			];

			$sql_usuarioLogado = <<<SQL
			    select pessoa_fisica.nome
			    from usuario, pessoa_fisica
			    where usuario.id_pessoa = pessoa_fisica.id_pessoa
			      and usuario.id = :id_usuario:
			SQL;
			$binds = [ 
				'id_usuario' => $iduser
			];
			$usuarioNome = db_connect()->query( $sql_usuarioLogado, $binds )
				->getResultArray();

			$conn_unidade = db_connect();
			$unidade = $conn_unidade->query( $sql_unidade, $binds_unidade )
				->getResultArray();

			$conn_total = db_connect();
			$query_total = $conn_total->query( $sql_totalizado, $binds_totalizado )
				->getResultArray();
			$total_formasa_pagamentos ['totais'] = $query_total;

			$conn_recebimentos = db_connect();
			$query_recebimentos = $conn_recebimentos->query( $sql_recebimentos, $binds_recebimentos )
				->getResultArray();

			$recebimentos = $query_recebimentos;

			$conn_count_rows = db_connect();
			$query_count_rows = $conn_count_rows->query( $sql_count_rows, $binds_count_rows )
				->getResultArray();

			$conn_estorno = db_connect();
			$query_estorno = $conn_estorno->query( $sql_estorno, $bind_estornos )
				->getResultArray();
			$error_estorno = $conn_estorno->error();
			$estornos ['estorno'] = $query_estorno;

			$valor_estornos = 0;
			foreach ( $estornos ['estorno'] as $key => $value ) {
				// id_tipo_extorno $value ["tipo_estorno"]
				if ($value ["id_tipo_extorno"] != 1) {
					$valor_estornos = $valor_estornos + $value ["valor"];
				}
			}

			$entradas = 0;
			foreach ( $total_formasa_pagamentos ['totais'] as $key => $value ) {
				$entradas = $entradas + $value ['valor'];
			}

			$total_caixa = $entradas - $valor_estornos;

			// $rows_totalizadores = '';
			// $total_entradas = 0;
			// foreach ( $total_formasa_pagamentos ['totais'] as $key => $value ) {
			// $rows_totalizadores .= '<td>' . $value ['descricao'] . ' : R$' . number_format( $value ['valor'], 2, ",", "." ) . '</td>';
			// $total_entradas = $total_entradas + $value ['valor'];
			// }

			header( 'Content-Type: application/vnd.ms-excel' );
			header( 'Content-Disposition: attachment;filename="testeabc.xlsx"' );
			$spreadsheet = new Spreadsheet();
			$sheet = $spreadsheet->getActiveSheet();
			$sheet->setTitle( 'GAVETA' );

			// Aba Gaveta
			// Tipo = Entrada || Saída
			$cols = [ 
				"Data",
				"Valor",
				"Forma Pagamento",
				"Pet",
				"Id Pet",
				"Tutor",
				"Responsável"
			];

			$sheet->fromArray( $cols, null, 'A1' );

			$sheet->getStyle( 'A1' )
				->getFont()
				->setBold( true );
			$sheet->getStyle( 'B1' )
				->getFont()
				->setBold( true );
			$sheet->getStyle( 'C1' )
				->getFont()
				->setBold( true );
			$sheet->getStyle( 'D1' )
				->getFont()
				->setBold( true );
			$sheet->getStyle( 'E1' )
				->getFont()
				->setBold( true );
			$sheet->getStyle( 'F1' )
				->getFont()
				->setBold( true );
			$sheet->getStyle( 'G1' )
				->getFont()
				->setBold( true );

			$row_recebimento = '';
			$row_start = 2;
			foreach ( $recebimentos as $recebimento ) {
				$array_row [] = date( "d/m/Y", strtotime( $recebimento ['data_atualizacao'] ) );
				$array_row [] = $recebimento ['valor'];
				$array_row [] = $recebimento ['formapagamento'];
				$array_row [] = $recebimento ['nome_pet'];
				$array_row [] = $recebimento ['id_pet'];
				$array_row [] = $recebimento ['cliente'];
				$array_row [] = $recebimento ['responsavel'];
				$sheet->fromArray( $array_row, null, 'A' . $row_start );
				unset( $array_row );
				$row_start++;
			}

			// ========================================================================================
			// ========================================================================================
			// Aba Estorno
			$sheet_estorno = $spreadsheet->createSheet();
			$sheet_estorno->setTitle( 'ESTORNO' );

			$cols_estornos = [ 
				"Tipo Estorno",
				"Id Tutor",
				"Tutor",
				"Id Pet",
				"Pet",
				"Data Criação",
				"Hora Criação",
				"Executante",
				"Valor",
				"Observação"
			];

			$sheet_estorno->fromArray( $cols_estornos, null, 'A1' );

			$sheet_estorno->getStyle( 'A1' )
				->getFont()
				->setBold( true );
			$sheet_estorno->getStyle( 'B1' )
				->getFont()
				->setBold( true );
			$sheet_estorno->getStyle( 'C1' )
				->getFont()
				->setBold( true );
			$sheet_estorno->getStyle( 'D1' )
				->getFont()
				->setBold( true );
			$sheet_estorno->getStyle( 'E1' )
				->getFont()
				->setBold( true );
			$sheet_estorno->getStyle( 'F1' )
				->getFont()
				->setBold( true );
			$sheet_estorno->getStyle( 'G1' )
				->getFont()
				->setBold( true );
			$sheet_estorno->getStyle( 'H1' )
				->getFont()
				->setBold( true );
			$sheet_estorno->getStyle( 'I1' )
				->getFont()
				->setBold( true );
			$sheet_estorno->getStyle( 'J1' )
				->getFont()
				->setBold( true );

			$estorno_item = "";
			$total_estornos = 0;
			$row_start_estorno = 2;

			$estorno_cartao_credito = 0;
			$estorno_cartao_debito = 0;
			$estorno_pix = 0;
			$estorno_dinheiro = 0;
			foreach ( $estornos ['estorno'] as $key => $value ) {
				// Totalizador de tipo de estornos
				if ($value ['id_tipo_extorno'] == 2) {
					$estorno_dinheiro = $estorno_dinheiro + $value ['valor'];
				}

				if ($value ['id_tipo_extorno'] == 3) {
					$estorno_cartao_credito = $estorno_cartao_credito + $value ['valor'];
				}

				if ($value ['id_tipo_extorno'] == 4) {
					$estorno_cartao_debito = $estorno_cartao_debito + $value ['valor'];
				}

				if ($value ['id_tipo_extorno'] == 5) {
					$estorno_pix = $estorno_pix + $value ['valor'];
				}

				$array_row_estorno [] = $value ['tipo_estorno'];
				$array_row_estorno [] = $value ['cliente_id'];
				$array_row_estorno [] = $value ['cliente'];
				$array_row_estorno [] = $value ['pet_id'];
				$array_row_estorno [] = $value ['pet'];
				$array_row_estorno [] = date( "d/m/Y", strtotime( $value ['data_criacao'] ) );
				$array_row_estorno [] = $value ['hora_criacao'];
				$array_row_estorno [] = $value ['executor'];
				$array_row_estorno [] = $value ['valor'];
				$array_row_estorno [] = $value ['observacao'];
				$sheet_estorno->fromArray( $array_row_estorno, null, 'A' . $row_start_estorno );
				unset( $array_row_estorno );
				$row_start_estorno++;
			}

			// ========================================================================================
			// ========================================================================================
			// Aba Totalizadores

			$sheet_totalizadores = $spreadsheet->createSheet();
			$sheet_totalizadores->setTitle( 'TOTALIZADORES' );

			$total_entrada = 0;
			foreach ( $recebimentos as $recebimento ) {
				if ($recebimento ['id_forma_pagamento'] != 9) {
					$total_entrada = $total_entrada + $recebimento ['valor'];
				}
			}

			$total_saida = 0;
			foreach ( $estornos ['estorno'] as $key => $value ) {
				// id_tipo_extorno $value ["tipo_estorno"]
				if ($value ["id_tipo_extorno"] != 1) {
					$total_saida = $total_saida + $value ["valor"];
				}
			}

			$total_caixa = $total_entrada - $total_saida;

			$cols_totalizadores = [ 
				"Total de Entrada",
				"Total de Saída",
				"Total do Caixa",
				"Cartão de Débito",
				"Cartão de Crédito",
				"Pix",
				"Dinheiro"
			];

			$sheet_totalizadores->getStyle( 'A1' )
				->getFont()
				->setBold( true );
			$sheet_totalizadores->getStyle( 'B1' )
				->getFont()
				->setBold( true );
			$sheet_totalizadores->getStyle( 'C1' )
				->getFont()
				->setBold( true );
			$sheet_totalizadores->getStyle( 'D1' )
				->getFont()
				->setBold( true );
			$sheet_totalizadores->getStyle( 'E1' )
				->getFont()
				->setBold( true );
			$sheet_totalizadores->getStyle( 'F1' )
				->getFont()
				->setBold( true );
			$sheet_totalizadores->getStyle( 'G1' )
				->getFont()
				->setBold( true );

			$sheet_totalizadores->fromArray( $cols_totalizadores, null, 'A1' );
			$array_row_totalizadores = [ 
				$total_entrada,
				$total_saida,
				$total_caixa
			];
			foreach ( $total_formasa_pagamentos ['totais'] as $value ) {
				if ($value ['id_forma_pagamento'] != 9) {
					if ($value ['id_forma_pagamento'] == 1) {
						$valor_pagamento = $value ['valor'] - $estorno_cartao_credito;
						array_push( $array_row_totalizadores, $valor_pagamento );
						// $total_entradas = $total_entradas + $value ['valor'];
					}

					if ($value ['id_forma_pagamento'] == 2) {
						$valor_pagamento = $value ['valor'] - $estorno_cartao_debito;
						array_push( $array_row_totalizadores, $valor_pagamento );
						// $total_entradas = $total_entradas + $value ['valor'];
					}

					if ($value ['id_forma_pagamento'] == 3) {
						$valor_pagamento = $value ['valor'] - $estorno_pix;
						array_push( $array_row_totalizadores, $valor_pagamento );
						// $total_entradas = $total_entradas + $value ['valor'];
					}

					if ($value ['id_forma_pagamento'] == 7) {
						$valor_pagamento = $value ['valor'] - $estorno_dinheiro;
						array_push( $array_row_totalizadores, $valor_pagamento );
						// $total_entradas = $total_entradas + $value ['valor'];
					}
				}
			}

			$sheet_totalizadores->fromArray( $array_row_totalizadores, null, 'A2' );

			$file_name = md5( time() );

			$spreadsheet->setActiveSheetIndex( 0 );

			$writer = new Xlsx( $spreadsheet );
			$writer->save( 'php://output' );
			// $writer->save($file_name.'.xlsx');
			exit( 0 );
		} catch ( Exception $e ) {
			return $this->response->setStatusCode( 460 )
				->setJSON( [ 
				'message' => 'Operação não realizada.',
				'data' => [ ],
				'error' => [ 
					'code' => $e->getCode(),
					'msg' => $e->getMessage()
				]
			] );
		}

	}

	public function fecharComanda(int $comandaId): Response {

		$sql_itens_abertos = <<<SQL
		select count(*) total 
		from comanda_item 
		where 
			id_comanda = :comanda_id:
			and comanda_item_status_id = 1
		SQL;

		$bind_itens_abertos = [ 
			'comanda_id' => $comandaId
		];

		$conn_itens_abertos = db_connect();
		$result = $conn_itens_abertos->query( $sql_itens_abertos, $bind_itens_abertos )
			->getResultArray();

		if (intval( $result [0] ['total'] ) > 0) {
			return $this->response->setStatusCode( 400 )
				->setJSON( [ 
				'message' => 'A comanda possui itens em aberto e não pode ser fechada.'
			] );
		}

		$sql = <<<SQL
		    update 
		        comanda
		    set 
		        data_fechada = left(now(),10),
		        hora_fechada = right(now(),8),
		        fechado_por = :usuario_id:
		    where 1=1
		        and id = :comanda_id:
		        and fechado_por is null
		SQL;
		$conn = db_connect();
		$conn->query( $sql, [ 
			'comanda_id' => $comandaId,
			'usuario_id' => UsuarioLogado::getUsuarioId()
		] );
		$affectedRows = $conn->affectedRows();
		$error = $conn->error();
		return $this->response->setStatusCode( $affectedRows && !$error ['code'] ? 200 : 400 )
			->setJSON( 
			[ 
				'message' => $affectedRows ? 'Operação realizada com sucesso.' : 'Falha na operação: Essa comanda já foi paga ou não existe.',
				'data' => !!$affectedRows && !$error ['code'],
				'error' => $conn->error()
			] );

	}

	public function getAllComandaList(): Response {

		$sql = <<<SQL
		    select distinct
		        comanda.id, comanda.data_criada, comanda.hora_criada, comanda.criado_por, pf1.nome as nome_criador,
		        comanda.data_fechada, comanda.hora_fechada, comanda.fechado_por,
		        (   select pessoa_fisica.nome
		            from pessoa_fisica , usuario
		            where
		                usuario.id = comanda.fechado_por
		                and usuario.id_pessoa = pessoa_fisica.id_pessoa
		        ) as nome_fechado,
		        comanda.id_cliente, pf2.nome as nome_cliente, comanda.id_pet, pet.nome as nome_pet,comanda.id_unidade, unidade.descricao,
		        (select sum(valor) as total from comanda_item ci  where ci.id_comanda  = comanda.id) as valor_total,
		        (select sum(valor) as total_pago from comanda_item ci  where ci.id_comanda  = comanda.id and comanda_item_status_id = 2) as valor_pago
		    from
		        comanda, cliente,  pessoa_fisica as pf1, pessoa_fisica as pf2,unidade, usuario us, pet
		    where
		        us.id = comanda.criado_por
		        and us.id_pessoa = pf1.id_pessoa
		        and comanda.id_cliente = cliente.id
		        and cliente.id_pessoa = pf2.id_pessoa
		        and comanda.id_pet = pet.id
		        and comanda.id_unidade = unidade.id
		SQL;
		$binds = [ ];
		$query = db_connect()->query( $sql, $binds )
			->getResult();
		return $this->response->setStatusCode( 200 )
			->setJSON( [ 
			'message' => 'Dados encontrados com sucesso.',
			'data' => $query
		] );

	}

	public function getComandaItens($comanda_id): Response {

		$sql = <<<SQL
		        select distinct
		        cmi.id, cmi.id_comanda, cmi.comanda_item_status_id, cmi.valor, cmis.descricao
		        , cmi.id_forma_pagamento,cmi.codauth,cmi.bandeira,cmi.parcelas,
		        (case
		            when cmi.id_forma_pagamento is NULL
		            then '-'
		            ELSE (select descricao from forma_pagamento where id = cmi.id_forma_pagamento)
		            end) as forma_pagamento
		            , cmi.id_convenio, cnv.descricao, tc.descricao , cmi.id_procedimento, pr.descricao, tpr.id,tpr.descricao
		            , cmi.id_requisicao_procedimento, rqp.status_id, rqps.descricao
		            , rqp.id_medico
		            , (case
		                when rqp.id_medico is NULL
		                then '-'
		                ELSE (select nome from pessoa_fisica  where id_pessoa = (select id_pessoa from profissional where id = ( select id_profissional from medico where id = rqp.id_medico)))
		                end) as nome_medico
		                , rqp.usuario_executor
		                , (case
		                    when rqp.usuario_executor is NULL
		                    then '-'
		                    ELSE (select nome from pessoa_fisica  where id_pessoa = ( select id_pessoa from usuario where id = rqp.usuario_executor))
		                    end) as nome_executor
		                    ,  rqp.data_requisicao as data_criacao, rqp.hora_requisicao as hora_criacao, rqp.data_execucao, rqp.hora_execucao
		                    from
		                    comanda cm, comanda_item cmi, comanda_item_status cmis, convenio cnv, tipo_convenio tc
		                    , procedimento pr, tipo_procedimento tpr, usuario usr, forma_pagamento frp
		                    , requisicao_procedimento rqp , requisicao_procedimento_status rqps
		                    where
		                    cmi.id_comanda = :comanda_id:
		                    and cmi.id_comanda = cm.id
							and cmi.comanda_item_status_id <> 3
		                    and cmi.comanda_item_status_id = cmis.id
		                    and cmi.id_convenio = cnv.id
		                    and cnv.id_tipo_convenio = tc.id
		                    and cmi.id_procedimento = pr.id
		                    and pr.id_tipo_procedimento = tpr.id
		                    and cmi.id_requisicao_procedimento = rqp.id
		                    and rqp.status_id = rqps.id 
		SQL;
		$binds = [ 
			'comanda_id' => $comanda_id
		];
		$query = db_connect()->query( $sql, $binds )
			->getResult();
		return $this->response->setStatusCode( 200 )
			->setJSON( [ 
			'message' => 'Dados encontrados com sucesso.',
			'data' => $query
		] );

	}

	public function getAllComandaPeriodo(string $dataInicial, string $dataFinal, int $unidade): Response {

		if (!$this->isDate( $dataInicial ) || !$this->isDate( $dataFinal )) {
			return $this->response->setStatusCode( 400 )
				->setJSON( [ 
				'message' => 'Dados Inválidos para pesquisa.',
				'data' => ''
			] );
		}
		$dt_ini = "";
		$dt_fim = "";
		if ($dataFinal >= $dataInicial) {
			$dt_fim = $this->toIsoDate( $dataFinal );
			$dt_ini = $this->toIsoDate( $dataInicial );
		} else {
			$dt_ini = $this->toIsoDate( $dataFinal );
			$dt_fim = $this->toIsoDate( $dataInicial );
		}

		$sql = <<<SQL
		    select distinct
		        comanda.id, comanda.data_criada, comanda.hora_criada, comanda.criado_por, pf1.nome nome_criador,
		        comanda.data_fechada, comanda.hora_fechada, comanda.fechado_por,
		        (   select pessoa_fisica.nome
		            from pessoa_fisica , usuario
		            where
		                usuario.id = comanda.fechado_por
		                and usuario.id_pessoa = pessoa_fisica.id_pessoa
		        ) as nome_fechado,
		        comanda.id_cliente, pf2.nome nome_cliente, comanda.id_pet, pet.nome nome_pet,comanda.id_unidade, unidade.descricao,
		        (select sum(valor) as total from comanda_item ci  where ci.id_comanda  = comanda.id and ci.comanda_item_status_id in (1,2)) as valor_total,
		        (select sum(valor) as total_pago from comanda_item ci  where ci.id_comanda  = comanda.id and comanda_item_status_id = 2) as valor_pago,
				(select count(*) total 	from comanda_item ci, requisicao_procedimento rp, convenio_procedimento cp, convenio c , tipo_convenio tc
					where
						ci.id_comanda = comanda.id and ci.comanda_item_status_id in (1,2) 
						and ci.id_requisicao_procedimento = rp.id and rp.id_convenio_procedimento = cp.id 
						and cp.id_convenio = c.id and c.id_tipo_convenio = tc.id and tc.id  = 1
				) as procedimentos_publicos 
		    from
		        comanda, cliente,  pessoa_fisica as pf1, pessoa_fisica as pf2,unidade, usuario us, pet
		    where
		        us.id = comanda.criado_por
		        and us.id_pessoa = pf1.id_pessoa
		        and comanda.id_cliente = cliente.id
		        and cliente.id_pessoa = pf2.id_pessoa
		        and comanda.id_pet = pet.id
		        and comanda.id_unidade = unidade.id
		        and unidade.id = :unidade:
		        and comanda.data_criada >= :data_inicial:
		        and comanda.data_criada <= :data_final:
		        
		SQL;
		$binds = [ 
			'data_inicial' => $dt_ini,
			'data_final' => $dt_fim,
			'unidade' => $unidade
		];
		$query = db_connect()->query( $sql, $binds )
			->getResult();
		return $this->response->setStatusCode( 200 )
			->setJSON( [ 
			'message' => 'Dados encontrados com sucesso.',
			'data' => $query
		] );

	}

	public function getAllComandaComExclusaoPeriodo(string $dataInicial, string $dataFinal, int $unidade): Response {

		if (!$this->isDate( $dataInicial ) || !$this->isDate( $dataFinal )) {
			return $this->response->setStatusCode( 400 )
				->setJSON( [ 
				'message' => 'Dados Inválidos para pesquisa.',
				'data' => ''
			] );
		}
		$dt_ini = "";
		$dt_fim = "";
		if ($dataFinal >= $dataInicial) {
			$dt_fim = $this->toIsoDate( $dataFinal );
			$dt_ini = $this->toIsoDate( $dataInicial );
		} else {
			$dt_ini = $this->toIsoDate( $dataFinal );
			$dt_fim = $this->toIsoDate( $dataInicial );
		}

		$sql = <<<SQL
			select distinct
				comanda.id, comanda.data_criada, comanda.hora_criada, comanda.criado_por
				, pf1.nome nome_criador, comanda.data_fechada, comanda.hora_fechada
				, comanda.fechado_por
				, ( select pessoa_fisica.nome
					from pessoa_fisica , usuario
					where
						usuario.id = comanda.fechado_por
						and usuario.id_pessoa = pessoa_fisica.id_pessoa
				  ) as nome_fechado
				, comanda.id_cliente, pf2.nome nome_cliente, comanda.id_pet, pet.nome nome_pet
				, comanda.id_unidade, unidade.descricao
				, (select sum(valor) as total from comanda_item ci  where ci.id_comanda  = comanda.id) as valor_total
				, (select sum(valor) as total_pago from comanda_item ci  where ci.id_comanda  = comanda.id and comanda_item_status_id = 2) as valor_pago
			from
				comanda, comanda_item, cliente,  pessoa_fisica as pf1, pessoa_fisica as pf2
				, unidade, usuario us, pet
			where
				us.id = comanda.criado_por
				and us.id_pessoa = pf1.id_pessoa
				and comanda.id = comanda_item.id_comanda
				and comanda_item.coanda_iten_status_id = 3
				and comanda.id_cliente = cliente.id
				and cliente.id_pessoa = pf2.id_pessoa
				and comanda.id_pet = pet.id
				and comanda.id_unidade = unidade.id
				and unidade.id = :unidade:
				and comanda.data_criada >= :data_inicial:
				and comanda.data_criada <= :data_final:
		SQL;
		$binds = [ 
			'data_inicial' => $dt_ini,
			'data_final' => $dt_fim,
			'unidade' => $unidade
		];
		$query = db_connect()->query( $sql, $binds )
			->getResult();
		return $this->response->setStatusCode( 200 )
			->setJSON( [ 
			'message' => 'Dados encontrados com sucesso.',
			'data' => $query
		] );

	}

	public function getComandaItensComExcluidos($comanda_id): Response {

		$sql = <<<SQL
			select distinct
				cmi.id, cmi.id_comanda, cmi.comanda_item_status_id, cmi.valor, cmis.descricao
				, cmi.id_forma_pagamento,cmi.codauth,cmi.bandeira,cmi.parcelas
				, ( case
						when cmi.id_forma_pagamento is NULL then '-'
						else (select descricao from forma_pagamento where id = cmi.id_forma_pagamento)
					end ) as forma_pagamento
				, cmi.id_convenio, cnv.descricao, tc.descricao , cmi.id_procedimento, pr.descricao
				, tpr.id,tpr.descricao, cmi.id_requisicao_procedimento, rqp.status_id, rqps.descricao
				, rqp.id_medico
				, ( case
						when rqp.id_medico is NULL then '-'
						else (select nome from pessoa_fisica  
								where id_pessoa = (select id_pessoa from profissional 
													where id = ( select id_profissional from medico 
																	where id = rqp.id_medico))
							)
					end ) as nome_medico
				, rqp.usuario_executor
				, ( case
						when rqp.usuario_executor is NULL then '-'
						else (select nome from pessoa_fisica  
								where id_pessoa = ( select id_pessoa from usuario 
														where id = rqp.usuario_executor)
							)
					end ) as nome_executor
				, rqp.data_requisicao as data_criacao, rqp.hora_requisicao as hora_criacao
				, rqp.data_execucao, rqp.hora_execucao
			from
				comanda cm, comanda_item cmi, comanda_item_status cmis, convenio cnv
				, tipo_convenio tc, procedimento pr, tipo_procedimento tpr, usuario usr
				, forma_pagamento frp, requisicao_procedimento rqp , requisicao_procedimento_status rqps
			where
				cmi.id_comanda = :comanda_id:
				and cmi.id_comanda = cm.id
				and cmi.comanda_item_status_id = cmis.id
				and cmi.id_convenio = cnv.id
				and cnv.id_tipo_convenio = tc.id
				and cmi.id_procedimento = pr.id
				and pr.id_tipo_procedimento = tpr.id
				and cmi.id_requisicao_procedimento = rqp.id
				and rqp.status_id = rqps.id
		SQL;
		$binds = [ 
			'comanda_id' => $comanda_id
		];
		$query = db_connect()->query( $sql, $binds )
			->getResult();
		return $this->response->setStatusCode( 200 )
			->setJSON( [ 
			'message' => 'Dados encontrados com sucesso.',
			'data' => $query
		] );

	}

	public function getComandasFechadasPeriodo($dataInicial, $dataFinal, int $unidade): Response {

		if (!$this->isDate( $dataInicial ) || !$this->isDate( $dataFinal )) {
			return $this->response->setStatusCode( 400 )
				->setJSON( [ 
				'message' => 'Dados Inválidos para pesquisa.',
				'data' => ''
			] );
		}
		$dt_ini = "";
		$dt_fim = "";
		if ($dataFinal >= $dataInicial) {
			$dt_fim = $this->toIsoDate( $dataFinal );
			$dt_ini = $this->toIsoDate( $dataInicial );
		} else {
			$dt_ini = $this->toIsoDate( $dataFinal );
			$dt_fim = $this->toIsoDate( $dataInicial );
		}

		$sql = <<<SQL
		    select distinct
		        comanda.id, comanda.data_criada, comanda.hora_criada, comanda.criado_por, pf1.nome as nome_criador,
		        comanda.data_fechada, comanda.hora_fechada, comanda.fechado_por,
		        ( select pessoa_fisica.nome
		        	from pessoa_fisica , usuario
		            where
		                usuario.id = comanda.fechado_por
		                and usuario.id_pessoa = pessoa_fisica.id_pessoa
		        ) as nome_fechado,
		        comanda.id_cliente, pf2.nome nome_cliente, comanda.id_pet, pet.nome as nome_pet,comanda.id_unidade, unidade.descricao,
		        ( select sum(valor) as total 
					from comanda_item ci  
					where ci.id_comanda  = comanda.id and comanda_item_status_id in (1,2)
				) as valor_total,
		        ( select sum(valor) as total_pago 
					from comanda_item ci 
					where ci.id_comanda  = comanda.id and comanda_item_status_id = 2
				) as valor_pago,
				( select count(*) total 
					from comanda_item ci, requisicao_procedimento rp, convenio_procedimento cp, convenio c , tipo_convenio tc
					where
						ci.id_comanda = comanda.id and ci.comanda_item_status_id in (1,2) 
						and ci.id_requisicao_procedimento = rp.id and rp.id_convenio_procedimento = cp.id 
						and cp.id_convenio = c.id and c.id_tipo_convenio = tc.id and tc.id  = 1
				) as procedimentos_publicos
		    from
		        comanda, cliente,  pessoa_fisica as pf1, pessoa_fisica as pf2,unidade, usuario us, pet
		    where
		        us.id = comanda.criado_por
		        and us.id_pessoa = pf1.id_pessoa
		        and comanda.id_cliente = cliente.id
		        and cliente.id_pessoa = pf2.id_pessoa
		        and comanda.id_pet = pet.id
		        and comanda.id_unidade = unidade.id
		        and unidade.id = :unidade:
		        and comanda.data_fechada >= :data_inicial:
		        and comanda.data_fechada <= :data_final:
		        and comanda.data_fechada <> '1900-01-01'
		SQL;
		$binds = [ 
			'data_inicial' => $dt_ini,
			'data_final' => $dt_fim,
			'unidade' => $unidade
		];
		$query = db_connect()->query( $sql, $binds )
			->getResult();
		return $this->response->setStatusCode( 200 )
			->setJSON( [ 
			'message' => 'Dados encontrados com sucesso.',
			'data' => $query
		] );

	}

	public function getComandasAbertasPeriodo($dataInicial, $dataFinal, int $unidade): Response {

		if (!$this->isDate( $dataInicial ) || !$this->isDate( $dataFinal )) {
			return $this->response->setStatusCode( 400 )
				->setJSON( [ 
				'message' => 'Dados Inválidos para pesquisa.',
				'data' => ''
			] );
		}
		$dt_ini = "";
		$dt_fim = "";
		if ($dataFinal >= $dataInicial) {
			$dt_fim = $this->toIsoDate( $dataFinal );
			$dt_ini = $this->toIsoDate( $dataInicial );
		} else {
			$dt_ini = $this->toIsoDate( $dataFinal );
			$dt_fim = $this->toIsoDate( $dataInicial );
		}

		$sql = <<<SQL
		    select distinct
		        comanda.id, comanda.data_criada, comanda.hora_criada, comanda.criado_por, pf1.nome as nome_criador,
		        comanda.data_fechada, comanda.hora_fechada, comanda.fechado_por,
		        ( select pessoa_fisica.nome
		          	from pessoa_fisica , usuario
		            where
		                usuario.id = comanda.fechado_por
		                and usuario.id_pessoa = pessoa_fisica.id_pessoa
		        ) as nome_fechado,
		        comanda.id_cliente, pf2.nome as nome_cliente, comanda.id_pet, pet.nome as nome_pet,comanda.id_unidade, unidade.descricao,
		        ( select sum(valor) as total 
					from comanda_item ci  
					where ci.id_comanda  = comanda.id and comanda_item_status_id in (1,2)
				) as valor_total,
		        ( select sum(valor) as total_pago 
					from comanda_item ci  
					where ci.id_comanda  = comanda.id and comanda_item_status_id = 2
				) as valor_pago,
				( select count(*) total 	
					from comanda_item ci, requisicao_procedimento rp, convenio_procedimento cp, convenio c , tipo_convenio tc
					where
						ci.id_comanda = comanda.id and ci.comanda_item_status_id in (1,2) 
						and ci.id_requisicao_procedimento = rp.id and rp.id_convenio_procedimento = cp.id 
						and cp.id_convenio = c.id and c.id_tipo_convenio = tc.id and tc.id  = 1
				) as procedimentos_publicos 
		    from
		        comanda, cliente,  pessoa_fisica as pf1, pessoa_fisica as pf2,unidade, usuario us, pet
		    where
		        us.id = comanda.criado_por
		        and us.id_pessoa = pf1.id_pessoa
		        and comanda.id_cliente = cliente.id
		        and cliente.id_pessoa = pf2.id_pessoa
		        and comanda.id_pet = pet.id
		        and comanda.id_unidade = unidade.id
		        and unidade.id = :unidade:
		        and comanda.data_criada >= :data_inicial:
		        and comanda.data_criada <= :data_final:
		        and comanda.data_fechada = '1900-01-01'
		SQL;
		$binds = [ 
			'data_inicial' => $dt_ini,
			'data_final' => $dt_fim,
			'unidade' => $unidade
		];
		$query = db_connect()->query( $sql, $binds )
			->getResult();
		return $this->response->setStatusCode( 200 )
			->setJSON( [ 
			'message' => 'Dados encontrados com sucesso.',
			'data' => $query
		] );

	}

	private function isDate(string $data) {

		return checkdate( intval( substr( $data, 4, 2 ) ), intval( substr( $data, 6, 2 ) ), intval( substr( $data, 0, 4 ) ) );

	}

	private function toIsoDate(string $data) {

		return substr( $data, 0, 4 ) . '-' . substr( $data, 4, 2 ) . '-' . substr( $data, 6, 2 );

	}

	// GERA RELATORIO GERAL DE COMANDAS DE ACORDO COM O FILTRO - PDF
	public function gerarPdfComandaOld($dataInicial, $dataFinal, $unidade, $status) {

		$dataInicial = $this->toIsoDate( $dataInicial );
		$dataFinal = $this->toIsoDate( $dataFinal );

		$comandas = $this->getComandaParaPdf( $dataInicial, $dataFinal, $unidade, $status );

		// $comandas = $this->getNewComandaParaPdf( $dataInicial, $dataFinal, $unidade, $status );

		$sql_usuarioLogado = <<<SQL
		    select pessoa_fisica.nome
		    from usuario, pessoa_fisica
		    where usuario.id_pessoa = pessoa_fisica.id_pessoa
		      and usuario.id = :id_usuario:
		SQL;
		$binds = [ 
			'id_usuario' => UsuarioLogado::getUsuarioId()
		];
		$usuarioNome = db_connect()->query( $sql_usuarioLogado, $binds )
			->getResultArray();

		// ================================================================================================
		// ================================================================================================

		$html = '';
		$html .= '<html>';
		$html .= '<head> ';
		$html .= '<style> ';
		$html .= "
                <style> 
                    @page {
                        margin: 0cm 0cm;
                    }
                    body {
                        margin-top: 3cm;
                        margin-bottom: 2cm;
                    }
        
                    /** Define the header rules **/
                    header {
                        position: fixed;
                        top: -1cm;
                        left: 0cm;
                        right: 0cm;
                        height: 2cm;
                        text-align: center; 
                    }
                </style> 
        
        ";
		$html .= '</style> ';
		$html .= '</head> ';
		$html .= '<body> ';
		// Foreach para pegar comanda
		foreach ( $comandas as $comanda ) {

			$comandaItem = $this->getComandaItemParaPdf( $comanda->id );

			$comanda_item = "";
			foreach ( $comandaItem as $key => $item ) {
				$key = $key++;
				$table_hover = $key % 2 ? "background-color: #DCDCDC;" : "";
				$executor = $item->id_tipo_procedimento == 2 || $item->id_tipo_procedimento == 3 ? $item->nome_medico : $item->nome_executor;
				$data_execucao = $item->data_execucao == "1900-01-01" ? '-' : date( "d/m/Y", strtotime( $item->data_execucao ) );
				$data_criacao = $item->data_criacao == "1900-01-01" ? '-' : date( "d/m/Y", strtotime( $item->data_criacao ) );
				$data_pagamento = $item->data_pagamento == "1900-01-01" ? '-' : date( "d/m/Y", strtotime( $item->data_pagamento ) );
				$hora_pagamento = $item->hora_pagamento == "00:00:00" ? '-' : date( "H:i:s", strtotime( $item->hora_pagamento ) );
				$obersevacao = $item->observacao ? $item->observacao : '-';

				$comanda_item .= '
                    <tr style="' . $table_hover . '">
                        <td style="text-align: center">' . $item->descricao_tipo_procedimento . ' </td>
                        <td style="text-align: center">' . $item->descricao_procedimento . ' </td>
                        <td style="text-align: center;">' . $data_criacao . '</td>
                        <td style="text-align: center;">' . $item->hora_criacao . '</td>
                        <td style="text-align: center;">' . $data_execucao . '</td>
                        <td style="text-align: center;">' . $item->hora_execucao . '</td>
                        <td style="text-align: center">' . mb_strtolower( $executor ) . ' </td>
                        <td style="text-align: center">' . mb_strtolower( $item->forma_pagamento ) . ' </td>
                        <td style="text-align: center">' . $data_pagamento . ' </td>
                        <td style="text-align: center">' . $hora_pagamento . ' </td>
                        <td style="text-align: center">' . mb_strtolower( $item->bandeira ) . ' </td>
                        <td style="text-align: center">' . $item->parcelas . ' </td>
                        <td style="text-align: center">' . $item->codauth . ' </td>
                        <td style="text-align: center">' . mb_strtolower( $item->tipo_convenio ) . ' </td>
                        <td style="text-align: center">R$ ' . str_replace( ".", ",", $item->valor ) . ' </td>
                    </tr>
                    <tr style="' . $table_hover . '">
                        <td colspan="15" style="text-align: left;"><strong>Observação:</strong> ' . $obersevacao . ' </td>
                    </tr>
                ';
			}

			$data_final = $comanda->data_fechada != "1900-01-01" ? date( "d/m/Y", strtotime( $comanda->data_fechada ) ) : "";
			$html .= '<header>';
			$html .= "<h2 style='text-align: center; font-size: 30px'> Relatório de comanda </h2>";
			$html .= '	<table border="0" width="100%">
                <tr>
                    <td>Período de Emissão: ' . date( "d/m/Y", strtotime( $dataInicial ) ) . ' até ' . date( "d/m/Y", strtotime( $dataFinal ) ) .
					'</td>
                    <td>Data do Sistema: ' . date( "d/m/Y" ) . '</td>
                </tr>
                <tr>
                    <td> Usuário: ' . $usuarioNome [0] ["nome"] . ' </td>
                </tr>
            </table>';
			$html .= '<hr>';
			$html .= '</header>';
			$html .= '<main>';
			$html .= '	<table style="font-size: 13px" border="0" width="100%">
                <tr>
                    <td colspan="2"><strong>Código: </strong> ' . $comanda->id . '</td>
                    <td colspan="3"><strong>Aberta em: </strong>' . date( "d/m/Y", strtotime( $comanda->data_criada ) ) .
					'</td>
                    <td colspan="2"><strong>Fechada em: </strong> ' . $data_final . '</td>
                    <td colspan="2"><strong>Tels: </strong> ' . $comanda->tel_cliente . '</td>
                </tr>
                <tr>
                    <td colspan="6"><strong>Cliente: </strong> ' . $comanda->id_cliente . ' - ' . $comanda->nome_cliente .
					'</td>
                </tr>
                <tr>
                    <td colspan="3"><strong>Pet: </strong> ' . $comanda->id_pet . ' - ' . $comanda->nome .
					'</td>
                </tr>
                <br>
                <tr>
                    <td style="text-align: center"><strong>Tipo </strong></td>
                    <td style="text-align: center; width: 70px"><strong>Itens </strong></td>
                    <td style="text-align: center"><strong>Data Criação </strong></td>
                    <td style="text-align: center"><strong>Hora Criação </strong></td>
                    <td style="text-align: center" width="50px"><strong>Execução</strong></td>
                    <td style="text-align: center""><strong>Hora Execução</strong></td>
                    <td style="text-align: center"><strong>Executante</strong></td>
                    <td style="text-align: center"><strong>Forma de pagamento</strong></td>
                    <td style="text-align: center"><strong>Data de pagamento</strong></td>
                    <td style="text-align: center"><strong>Hora de pagamento</strong></td>
                    <td style="text-align: center"><strong>Bandeira</strong></td>
                    <td style="text-align: center"><strong>Parcelas</strong></td>
                    <td style="text-align: center"><strong>Cod Autori</strong></td>
                    <td style="text-align: center"><strong>Convênio</strong></td>
                    <td style="text-align: center"><strong>Valor</strong></td>
                </tr> 
                ' . $comanda_item .
					'
                <br>
                <tr>
                    <td><strong> </strong></td>
                    <td><strong></strong></td>
                    <td><strong></strong></td>
                    <td><strong></strong></td>
                    <td><strong></strong></td>
                    <td><strong></strong></td>
                    <td><strong></strong></td>
                    <td><strong></strong></td>
                    <td><strong></strong></td>
                    <td><strong></strong></td>
                    <td colspan="2"><strong>Valor Total</strong></td>
                    <td><strong></strong></td>
                    <td colspan="2" style="text-align: center">R$ ' . str_replace( ".", ",", $comanda->valor_total ) .
					'</td>
                </tr>
                <tr>
                    <td><strong> </strong></td>
                    <td><strong> </strong></td>
                    <td><strong></strong></td>
                    <td><strong></strong></td>
                    <td><strong></strong></td>
                    <td><strong></strong></td>
                    <td><strong></strong></td>
                    <td><strong></strong></td>
                    <td><strong></strong></td>
                    <td><strong></strong></td>
                    <td colspan="2"><strong>Valor Pago</strong></td>
                    <td><strong></strong></td>
                    <td colspan="2" style="text-align: center">R$ ' . str_replace( ".", ",", $comanda->valor_pago ) . '</td>
                </tr> 
            </table>';
			$html .= '<hr>';
			$html .= '</main>';
		}
		$html .= '</html>';

		$dompdf = new Dompdf();
		$dompdf->loadHtml( $html );
		$dompdf->setPaper( 'A4', 'landscape' );
		$dompdf->render();
		$dompdf->stream( 'realtorio.pdf' );
		exit( 0 );

	}

	// NOVO - GERA RELATORIO GERAL DE COMANDAS DE ACORDO COM O FILTRO - PDF
	public function gerarPdfComanda($dataInicial, $dataFinal, $unidade, $status) {

		$dataInicial = $this->toIsoDate( $dataInicial );
		$dataFinal = $this->toIsoDate( $dataFinal );

		// log_message("info", "getNewComandaParaPdf inicio " . DateUtils::now());
		$comandas = $this->getNewComandaParaPdf( $dataInicial, $dataFinal, $unidade, $status );
		// log_message("info", "getNewComandaParaPdf fim " . DateUtils::now());
		// Busca usuário logado

		$sql_usuarioLogado = <<<SQL
		    select pessoa_fisica.nome
		    from usuario, pessoa_fisica
		    where usuario.id_pessoa = pessoa_fisica.id_pessoa
		      and usuario.id = :id_usuario:
		SQL;
		$binds = [ 
			'id_usuario' => UsuarioLogado::getUsuarioId()
		];
		$usuarioNome = db_connect()->query( $sql_usuarioLogado, $binds )
			->getResultArray();

		// FIM

		// ================================================================================================
		// ================================================================================================

		$html = '';
		$html .= '<html>';
		$html .= '<head> ';
		$html .= '<style> ';
		$html .= "
                <style> 
                    @page {
                        margin: 0cm 0cm;
                    }
                    body {
                        margin-top: 3cm;
                        margin-bottom: 2cm;
                    }
        
                    /** Define the header rules **/
                    header {
                        position: fixed;
                        top: -1cm;
                        left: 0cm;
                        right: 0cm;
                        height: 2cm;
                        text-align: center; 
                    }
                </style> 
        
        ";
		$html .= '</style> ';
		$html .= '</head> ';
		$html .= '<body> ';
		$html .= '<header>';
		$html .= "<h2 style='text-align: center; font-size: 30px'> Relatório de comanda </h2>";
		$html .= '	<table border="0" width="100%">
                            <tr>
                                <td>Período de Emissão: ' . date( "d/m/Y", strtotime( $dataInicial ) ) . ' até ' . date( "d/m/Y", strtotime( $dataFinal ) ) .
				'</td>
                                <td>Data do Sistema: ' . date( "d/m/Y" ) . '</td>
                            </tr>
                            <tr>
                                <td> Usuário: ' . $usuarioNome [0] ["nome"] . ' </td>
                            </tr>
                        </table>';
		$html .= '<hr>';
		$html .= '</header>';
		// Foreach para pegar comanda

		foreach ( $comandas as $comanda ) {
			$comandaItem = $this->getComandaAtendimentoItem( $comanda->id );
			$pagamentos = $this->getPagamentosPorComanda( $comanda->id );

			// Query para saber o total pago
			$query_total_pago = <<<SQL
			select
			    sum(valor) as total
			from
			    comanda_item
			where
			    comanda_item_status_id = 2
			    and id_comanda = :comanda_id:
			SQL;
			$binds = [ 
				'comanda_id' => $comanda->id
			];
			$total_pago = db_connect()->query( $query_total_pago, $binds )
				->getResultArray();
			$total_pago = !empty( $total_pago [0] ['total'] ) ? 'R$' . number_format( $total_pago [0] ['total'], 2, ",", "." ) : ' - ';

			// =============================================================================================
			// Query para quanto faltar ser pago na comanda
			$query_total_restante = <<<SQL
			select
			    sum(valor) as total
			from
			    comanda_item
			where
			    comanda_item_status_id = 1
			    and id_comanda = :comanda_id:
			SQL;
			$binds = [ 
				'comanda_id' => $comanda->id
			];
			$total_restante = db_connect()->query( $query_total_restante, $binds )
				->getResultArray();

			$total_restante = !empty( $total_restante [0] ['total'] ) ? 'R$' . number_format( $total_restante [0] ['total'], 2, ",", "." ) : ' - ';

			// =============================================================================================

			// Query para estornos ==========================================================================

			$query_estornos = <<<SQL
			    select
			        ext.id_tipo_extorno, ei.valor, ext.data_criacao, ext.hora_criacao, ext.observacao,
			        tpe.descricao as tipo_estorno, pf.nome as executor, p.descricao as item
			    from
			        extorno ext, tipo_extorno tpe, usuario usr, pessoa_fisica pf, extorno_item ei, comanda_item ci, procedimento p
			    where 
			        ext.id_tipo_extorno = tpe.id
			        and ext.criado_por = usr.id
			        and usr.id_pessoa = pf.id_pessoa
			        and ext.id = ei.extorno_id
			        and ei.comanda_item_id = ci.id
			        and ci.id_procedimento = p.id
			        and ext.id_comanda = :comanda_id:
			SQL;
			$binds = [ 
				'comanda_id' => $comanda->id
			];
			$estornos = db_connect()->query( $query_estornos, $binds )
				->getResultArray();

			// FIM ==========================================================================================

			// Foreach para itens de comanda ================================================================

			$comanda_item = "";
			$tota_comanda = 0;
			foreach ( $comandaItem as $key => $item ) {
				$key = $key++;
				$table_hover = !($key % 2) ? "background-color: #DCDCDC;" : "";
				$executor = in_array( $item ["id_tipo_procedimento"], [ 
					2,
					3,
					6
				] ) ? $item ["nome_medico"] : $item ["nome_executor"];
				$data_execucao = $item ["data_execucao"] == "1900-01-01" ? '-' : date( "d/m/Y", strtotime( $item ["data_execucao"] ) );
				$data_criacao = $item ["data_criacao"] == "1900-01-01" ? '-' : date( "d/m/Y", strtotime( $item ["data_criacao"] ) );
				$hora_criacao = $item ["hora_criacao"] == "00:00:00" ? '-' : date( "H:i:s", strtotime( $item ["hora_criacao"] ) );
				$hora_execucao = $item ["hora_execucao"] == "00:00:00" ? '-' : date( "H:i:s", strtotime( $item ["hora_execucao"] ) );
				$obersevacao = $item->observacao ? $item->observacao : '-';
				$tota_comanda = $tota_comanda + $item ["valor"];

				$comanda_item .= '
                <tr style="' . $table_hover . '">
                    <td style="text-align: center;">' . $item ["tipo_procedimento"] . ' </td>
                    <td style="text-align: center;">' . $item ["descricao_procedimento"] . ' </td>
                    <td style="text-align: center;">' . $data_criacao . '</td>
                    <td style="text-align: center;">' . $hora_criacao . '</td>
                    <td style="text-align: center;">' . $data_execucao . '</td>
                    <td style="text-align: center;">' . $item ["status_descricao"] . '</td>
                    <td style="text-align: center;">' . $hora_execucao . '</td>
                    <td style="text-align: center">' . mb_strtolower( $executor ) . ' </td>
                    <td style="text-align: center;">' . mb_strtolower( $item ["tipo_convenio"] ) . ' </td>
                    <td style="text-align: center;">R$ ' . str_replace( ".", ",", $item ["valor"] ) . ' </td>
                </tr>
                <tr style="' . $table_hover . '">
                    <td colspan="10" style="text-align: left;"><strong>Observação:</strong> ' . $obersevacao . ' </td>
                </tr>
            ';
			}

			// FIM ==========================================================================================

			// Foreach para itens de pagamentos =============================================================

			$pagamento_item = "";
			foreach ( $pagamentos as $key => $value ) {
				$key = $key++;
				$table_hover = !($key % 2) ? "background-color: #DCDCDC;" : "";
				$data_pagamento = $value ["data_criacao"] == "1900-01-01" ? '-' : date( "d/m/Y", strtotime( $value ["data_criacao"] ) );
				$hora_pagamento = $value ["hora_criacao"] == "00:00:00" ? '-' : date( "H:i:s", strtotime( $value ["hora_criacao"] ) );
				$obersevacao = $value ["observacao"] ? $value ["observacao"] : '-';

				$codauth_array = explode( "_", $value ["codauth"] );
				$codAuth = $codauth_array [0] == 'autocod' ? '-' : $value ["codauth"];

				$total = $total + $value ["valor"];

				$pagamento_item .= '
                <tr style="' . $table_hover . '">
                    <td style="text-align: center;">' . $value ["forma_pagamento"] . ' </td>
                    <td style="text-align: center;">' . $data_pagamento . ' </td>
                    <td style="text-align: center;">' . $hora_pagamento . '</td>
                    <td style="text-align: center;">' . $value ["executor"] . '</td>
                    <td style="text-align: center;">' . $value ["bandeira"] . '</td>
                    <td style="text-align: center;">' . $codAuth . '</td>
                    <td style="text-align: center;">' . $value ["maquineta"] . '</td>
                    <td style="text-align: center">' . $value ["chavepix"] . ' </td>
                    <td style="text-align: center;">' . $value ["dinheiro"] . ' </td>
                    <td style="text-align: center;">' . $value ["troco"] . ' </td>
                    <td style="text-align: center;">R$ ' . str_replace( ".", ",", $value ["valor"] ) . ' </td>
                </tr>
                <tr style="' . $table_hover . '">
                    <td colspan="12" style="text-align: left;"><strong>Observação:</strong> ' . $obersevacao . ' </td>
                </tr>
            ';
			}

			// FIM ==========================================================================================

			// Foreach para itens de pagamentos =============================================================

			$estorno_item = "";
			$total_estornos = 0;
			foreach ( $estornos as $key => $value ) {
				$key = $key++;
				$total_estornos = $total_estornos + $value ["valor"];
				$table_hover = !($key % 2) ? "background-color: #DCDCDC;" : "";
				$data_criacao = $value ["data_criacao"] == "1900-01-01" ? '-' : date( "d/m/Y", strtotime( $value ["data_criacao"] ) );
				$hora_criacao = $value ["hora_criacao"] == "00:00:00" ? '-' : date( "H:i:s", strtotime( $value ["hora_criacao"] ) );
				$obersevacao = $value ["observacao"] ? $value ["observacao"] : '-';

				$estorno_item .= '
                <tr style="' . $table_hover . '">
                    <td style="text-align: center;">' . $value ["item"] . ' </td>
                    <td style="text-align: center;">' . $value ["tipo_estorno"] . ' </td>
                    <td style="text-align: center;">' . $data_criacao . ' </td>
                    <td style="text-align: center;">' . $hora_criacao . '</td>
                    <td style="text-align: center;">' . $value ["executor"] . '</td>
                    <td style="text-align: center;">R$ ' . str_replace( ".", ",", $value ["valor"] ) . ' </td>
                </tr>
                <tr style="' . $table_hover . '">
                    <td colspan="12" style="text-align: left;"><strong>Observação:</strong> ' . $obersevacao . ' </td>
                </tr>
            ';
			}

			// FIM ===========================================================================================

			$data_final = $comanda->data_fechada != "1900-01-01" ? date( "d/m/Y", strtotime( $comanda->data_fechada ) ) : "";

			$html .= '<main>';
			$html .= '<table style="font-size: 13px" border="0" width="100%">
                        <tr>
                            <td colspan="2"><strong>Código: </strong> ' . $comanda->id . '</td>
                            <td colspan="3"><strong>Aberta em: </strong>' . date( "d/m/Y", strtotime( $comanda->data_criada ) ) .
					'</td>
                            <td colspan="2"><strong>Fechada em: </strong> ' . $data_final . '</td>
                            <td colspan="2"><strong>Tels: </strong> ' . $comanda->tel_cliente . '</td>
                        </tr>
                        <tr>
                            <td colspan="6"><strong>Cliente: </strong> ' . $comanda->id_cliente . ' - ' . $comanda->nome_cliente .
					'</td>
                        </tr>
                        <tr>
                            <td colspan="3"><strong>Pet: </strong> ' . $comanda->id_pet . ' - ' . $comanda->nome . '</td>
                        </tr>
                        <br>
                    </table>';
			$html .= '<table style="font-size: 13px" border="0" width="100%">
                       <tr>
                            <td style="text-align: center"><strong>Tipo </strong></td>
                            <td style="text-align: center"><strong>Itens </strong></td>
                            <td style="text-align: center"><strong>Data Criação </strong></td>
                            <td style="text-align: center"><strong>Hora Criação </strong></td>
                            <td style="text-align: center"><strong>Execução</strong></td>
                            <td style="text-align: center"><strong>Status</strong></td>
                            <td style="text-align: center"><strong>Hora Execução</strong></td>
                            <td style="text-align: center"><strong>Executante</strong></td>
                            <td style="text-align: center"><strong>Convênio</strong></td>
                            <td style="text-align: center"><strong>Valor</strong></td>
                        </tr>
                        ' . $comanda_item .
					'
                        <br>
                        <tr>
                            <td colspan="10"><hr></td>
                        </tr>
                        <tr>
                            <td style="text-align: center"><strong></strong></td>
                            <td style="text-align: center"><strong></strong></td>
                            <td style="text-align: center"><strong></strong></td>
                            <td style="text-align: center"><strong></strong></td>
                            <td style="text-align: center"><strong></strong></td>
                            <td style="text-align: center"><strong></strong></td>
                            <td style="text-align: center"><strong></strong></td>
                            <td style="text-align: center"><strong></strong></td>
                            <td style="text-align: center"><strong>Total</strong></td>
                            <td style="text-align: center"><strong>' . number_format( $tota_comanda, 2, ",", "." ) . '</strong></td>
                        </tr> 
                    </table>';
			$html .= '<br>';
			if ($pagamento_item) {
				$html .= '<h2 style="text-align: center">Pagamentos</h2>';
				$html .= '<table style="font-size: 13px; margin-bottom: 40px" border="0" width="100%">
                             <tr>
                                <td style="text-align: center"><strong>Tipo de Pagamento </strong></td>
                                <td style="text-align: center"><strong>Data Pagamento </strong></td>
                                <td style="text-align: center"><strong>Hora Pagamento </strong></td>
                                <td style="text-align: center"><strong>Executante </strong></td>
                                <td style="text-align: center"><strong>Bandeira </strong></td>
                                <td style="text-align: center"><strong>Cod Auth</strong></td>
                                <td style="text-align: center"><strong>Maquineta</strong></td>
                                <td style="text-align: center"><strong>Chave Pix</strong></td>
                                <td style="text-align: center"><strong>Dinheiro</strong></td>
                                <td style="text-align: center"><strong>Troco</strong></td>
                                <td style="text-align: center"><strong>Valor</strong></td>
                            </tr>';
				$html .= $pagamento_item;
				$html .= '
                    <tr>
                        <td colspan="12"><hr></td>
                    </tr>
                ';
				$html .= '<tr>
                    <td style="text-align: center"><strong></strong></td>
                    <td style="text-align: center"><strong></strong></td>
                    <td style="text-align: center"><strong></strong></td>
                    <td style="text-align: center"><strong></strong></td>
                    <td style="text-align: center"><strong></strong></td>
                    <td style="text-align: center"><strong></strong></td>
                    <td style="text-align: center"><strong>Valor Restante</strong></td>
                    <td style="text-align: center"><strong>' . $total_restante .
						'</strong></td>
                    <td style="text-align: center"><strong></strong></td>
                    <td style="text-align: center"><strong>Total Pago</strong></td>
                    <td style="text-align: center"><strong>' . $total_pago . '</strong></td>
                </tr>';
				$html .= '</table>';
			} else {
				$html .= '<h2 style="text-align: center">Pagamentos</h2>';
				$html .= '<p style="text-align: center; margin-bottom: 40px">NÃO HÁ PAGAMENTOS PARA ESSA COMANDA</p>';
			}

			if ($estorno_item) {
				$html .= '<h2 style="text-align: center">Estornos</h2>';
				$html .= '<table style="font-size: 13px; margin-bottom: 40px" border="0" width="100%">
                             <tr>
                                <td style="text-align: center"><strong>Item </strong></td>
                                <td style="text-align: center"><strong>Tipo de Estorno </strong></td>
                                <td style="text-align: center"><strong>Data Criação </strong></td>
                                <td style="text-align: center"><strong>Hora Criação </strong></td>
                                <td style="text-align: center"><strong>Executante </strong></td>
                                <td style="text-align: center"><strong>Valor </strong></td>
                            </tr>';
				$html .= $estorno_item;
				$html .= '</table>';
				$html .= '<hr>';
				$html .= '<hr>';
			} else {
				$html .= '<h2 style="text-align: center">Estornos</h2>';
				$html .= '<p style="text-align: center; margin-bottom: 40px">NÃO HÁ ESTORNOS PARA ESSA COMANDA</p>';
				$html .= '<hr>';
				$html .= '<hr>';
			}

			$html .= '</main>';
		}

		$html .= '</html>';

		$dompdf = new Dompdf();
		$dompdf->loadHtml( $html );
		$dompdf->setPaper( 'A4', 'landscape' );
		$dompdf->render();
		$dompdf->stream( 'realtorio.pdf' );
		exit( 0 );

	}

	// GERA RELATORIO GERAL DE COMANDAS POR CONVENIO - EXCEL
	public function gerarExcelRelatorioServicosRealizados($dataInicial, $dataFinal, int $unidade, int $convenio, int $execucao) {

		$dataInicial = $this->toIsoDate( $dataInicial );
		$dataFinal = $this->toIsoDate( $dataFinal );

		$texto_execucao = '';
		if ($execucao == 1) {
			$texto_execucao = 'Não Executado';
		}

		if ($execucao == 2) {
			$texto_execucao = 'Executado';
		}

		$sql_comandaItens = <<<SQL
		    select
		        p.descricao, count(*) total, sum(ci.valor) as valor
		    from comanda_item ci , procedimento p ,convenio c , requisicao_procedimento rp, convenio_procedimento cp
		    where
		        ci.comanda_item_status_id  = 2
		        and ci.id_procedimento = p.id
		        and ci.id_convenio = c.id
		        and ci.id_requisicao_procedimento =rp.id
		        and rp.id_convenio_procedimento = cp.id
				and rp.status_id = :execucao:
		        and cp.id_unidade = :unidade_id:
		        and ci.data_criacao >= :data_inicial:
		        and ci.data_criacao <= :data_final:
		SQL;
		if ($convenio != 3) {
			$sql_comandaItens .= '
                and c.id_tipo_convenio = :convenio:
                group by p.descricao
            ';
		} else {
			$sql_comandaItens .= '
                group by p.descricao
            ';
		}
		$binds = [ 
			'data_inicial' => $dataInicial,
			'data_final' => $dataFinal,
			'unidade_id' => $unidade,
			'convenio' => $convenio,
			'execucao' => $execucao
		];
		$query_comandaItem = db_connect()->query( $sql_comandaItens, $binds )
			->getResultArray();

		// =============================================================================================================
		// =============================================================================================================
		header( 'Content-Type: application/vnd.ms-excel' );
		header( 'Content-Disposition: attachment;filename="testeabc.xlsx"' );
		$spreadsheet = new Spreadsheet();
		$sheet = $spreadsheet->getActiveSheet();

		$cols = [ 
			"Descrição",
			"Quantidade",
			"Valor total",
			"Lucro"
		];

		$sheet->setCellValue( 'A1', 'Relatório de Produtos/Serviços Produzidos' );
		$sheet->getStyle( 'A1' )
			->getFont()
			->setBold( true );
		$sheet->getStyle( 'A1' )
			->getFont()
			->setSize( 14 );
		$sheet->getStyle( 'A1:J1' )
			->getAlignment()
			->setHorizontal( Alignment::HORIZONTAL_CENTER );
		$sheet->mergeCells( 'A1:J1' );

		$sheet->mergeCells( 'A2:F2' );
		$sheet->mergeCells( 'G2:J2' );
		$sheet->setCellValue( 'A2', 'Período: ' . date( 'd/m/Y', strtotime( $dataInicial ) ) . '  até  ' . date( 'd/m/Y', strtotime( $dataFinal ) ) );
		$sheet->setCellValue( 'G2', 'Data no Sistema: ' . date( 'd/m/Y' ) );
		$sheet->getStyle( 'G2:J2' )
			->getFont()
			->setBold( true );
		$sheet->getStyle( 'A3:F3' )
			->getFont()
			->setBold( true );
		$sheet->mergeCells( 'A3:D3' );
		$sheet->mergeCells( 'E3:F3' );

		$sheet->setCellValue( 'A3', 'Status Produto/Serviço' );
		$sheet->setCellValue( 'E3', $texto_execucao );

		$sheet->getStyle( 'A4:J4' )
			->getFont()
			->setBold( true );
		$sheet->mergeCells( 'A4:D4' );
		$sheet->mergeCells( 'E4:F4' );
		$sheet->mergeCells( 'G4:H4' );
		$sheet->mergeCells( 'I4:J4' );

		$sheet->setCellValue( 'A4', 'Descrição' );
		$sheet->setCellValue( 'E4', 'Quantidade' );
		$sheet->setCellValue( 'G4', 'Valor Total' );
		$sheet->setCellValue( 'I4', 'Lucro' );

		$ultima_col = 4;

		$valor_total = 0;
		foreach ( $query_comandaItem as $key => $value ) {
			$ultima_col++;
			$sheet->mergeCells( 'A' . $ultima_col . ':D' . $ultima_col );
			$sheet->mergeCells( 'E' . $ultima_col . ':F' . $ultima_col );
			$sheet->mergeCells( 'G' . $ultima_col . ':H' . $ultima_col );
			$sheet->mergeCells( 'I' . $ultima_col . ':J' . $ultima_col );

			$sheet->getStyle( 'G' . $ultima_col )
				->getAlignment()
				->setHorizontal( Alignment::HORIZONTAL_RIGHT );
			$sheet->getStyle( 'I' . $ultima_col )
				->getAlignment()
				->setHorizontal( Alignment::HORIZONTAL_RIGHT );

			$sheet->setCellValue( 'A' . $ultima_col, $value ['descricao'] );
			$sheet->setCellValue( 'E' . $ultima_col, $value ['total'] );
			$sheet->setCellValue( 'G' . $ultima_col, 'R$' . $value ['valor'] );
			$sheet->setCellValue( 'I' . $ultima_col, 'R$' . $value ['valor'] );

			$valor_total = $valor_total + $value ['valor'];
		}
		$ultima_col = $ultima_col + 1;
		$sheet->mergeCells( 'E' . $ultima_col . ':F' . $ultima_col );
		$sheet->mergeCells( 'G' . $ultima_col . ':H' . $ultima_col );
		$sheet->mergeCells( 'I' . $ultima_col . ':J' . $ultima_col );
		$sheet->getStyle( 'E' . $ultima_col )
			->getFont()
			->setBold( true );
		$sheet->getStyle( 'G' . $ultima_col )
			->getAlignment()
			->setHorizontal( Alignment::HORIZONTAL_RIGHT );
		$sheet->getStyle( 'I' . $ultima_col )
			->getAlignment()
			->setHorizontal( Alignment::HORIZONTAL_RIGHT );
		$sheet->setCellValue( 'E' . $ultima_col, 'Total' );
		$sheet->getStyle( 'G' . $ultima_col )
			->getFont()
			->getColor()
			->setARGB( 'ff0000ff' );
		$sheet->getStyle( 'I' . $ultima_col )
			->getFont()
			->getColor()
			->setARGB( 'ff0000ff' );
		$sheet->setCellValue( 'G' . $ultima_col, 'R$' . number_format( $valor_total, 1, ',', '.' ) );
		$sheet->setCellValue( 'I' . $ultima_col, 'R$' . number_format( $valor_total, 1, ',', '.' ) );

		$writer = new Xlsx( $spreadsheet );
		$writer->save( 'php://output' );
		// $writer->save('teste_unico.xlsx');
		exit( 0 );

	}

	// GERA RELATORIO GERAL DE COMANDAS POR CONVENIO - PDF
	public function gerarPdfComandaPorConvenio($dataInicial, $dataFinal, int $unidade, int $convenio, int $execucao) {

		$dataInicial = $this->toIsoDate( $dataInicial );
		$dataFinal = $this->toIsoDate( $dataFinal );

		// ================================================================================================
		// ================================================================================================

		$html = '';
		$html .= '<html>';
		$html .= '<head> ';
		$html .= '<style> ';
		$html .= "
                <style> 
                    @page {
                        margin: 0cm 0cm;
                    }
                    body {
                        margin-top: 3cm;
                        margin-bottom: 2cm;
                    }
        
                    /** Define the header rules **/
                    header {
                        position: fixed;
                        top: -1cm;
                        left: 0cm;
                        right: 0cm;
                        height: 2cm;
                        text-align: center; 
                    }
                </style> 
        
        ";
		$html .= '</style> ';
		$html .= '</head> ';
		$html .= '<body> ';
		// Foreach para pegar comanda
		$comandaItem = $this->getComandaItemPorConvenioParaPdf( $dataInicial, $dataFinal, $unidade, $convenio, $execucao );

		$comanda_item = "";
		$valor_total = 0;
		$texto_execucao = '';
		if ($execucao == 1) {
			$texto_execucao = 'Não Executados';
		}
		if ($execucao == 2) {
			$texto_execucao = 'Executados';
		}
		foreach ( $comandaItem as $key => $item ) {
			$key = $key++;
			$table_hover = $key % 2 ? "background-color: #DCDCDC;" : "";

			$valor_total = $valor_total + $item->valor;

			$comanda_item .= '
                    <tr style="' . $table_hover . '">
                        <td style="text-align: center">' . $item->descricao . ' </td>
                        <td style="text-align: center">' . $item->total . ' </td>
                        <td style="text-align: center;">R$ ' . str_replace( ".", ",", $item->valor ) . '</td>
                        <td style="text-align: center;">R$ ' . str_replace( ".", ",", $item->valor ) . '</td>
                    </tr>
                ';
		}

		$html .= '<header>';
		$html .= "<h2 style='text-align: center; font-size: 30px'> Relatório de Produtos/Serviços Produzidos </h2>";
		$html .= '	<table border="0" width="100%">
                <tr>
                    <td>Período: ' . date( "d/m/Y", strtotime( $dataInicial ) ) . ' até ' . date( "d/m/Y", strtotime( $dataFinal ) ) .
				'</td>
					<td style="text-align: center">Status Produto/Serviços: ' . $texto_execucao . '</td>
                    <td style="text-align: right">Data do Sistema: ' . date( "d/m/Y" ) . '</td>
                </tr>
            </table>';
		$html .= '<hr>';
		$html .= '</header>';
		$html .= '<main>';
		$html .= '	<table style="font-size: 13px" border="0" width="100%">
                <tr>
                    <td style="text-align: center"><strong>Descrição </strong></td>
                    <td style="text-align: center"><strong>Quantidade </strong></td>
                    <td style="text-align: center"><strong>Valor Total </strong></td>
                    <td style="text-align: center"><strong>Lucro</strong></td>
                </tr> 
                ' . $comanda_item .
				'
                <br>
                <tr>
                    <td style="text-align: center"><strong> </strong></td>
                    <td style="text-align: center"><strong>Total</strong></td>
                    <td style="text-align: center"><strong>R$ ' . number_format( $valor_total, 1, ',', '.' ) .
				'</strong></td>
                    <td style="text-align: center"><strong>R$ ' . number_format( $valor_total, 1, ',', '.' ) . '</strong></td>
                </tr> 
            </table>';
		$html .= '<hr>';
		$html .= '</main>';

		$html .= '</html>';

		$dompdf = new Dompdf();
		$dompdf->loadHtml( $html );
		$dompdf->setPaper( 'A4', 'landscape' );
		$dompdf->render();
		$dompdf->stream( 'realtorio.pdf' );
		exit( 0 );

	}

	// GERA RELATORIO DE ATENDIMENTO DE PET POR UNIDADE - PDF
	public function gerarPdfAtendimentoPetPorUnidade($dataInicial, $dataFinal, $unidade) {

		$dataInicial = $this->toIsoDate( $dataInicial );
		$dataFinal = $this->toIsoDate( $dataFinal );

		// ================================================================================================
		// ================================================================================================

		$html = '';
		$html .= '<html>';
		$html .= '<head> ';
		$html .= '<style> ';
		$html .= "
                <style> 
                    @page {
                        margin: 0cm 0cm;
                    }
                    body {
                        margin-top: 3cm;
                        margin-bottom: 2cm;
                    }
        
                    /** Define the header rules **/
                    header {
                        position: fixed;
                        top: -1cm;
                        left: 0cm;
                        right: 0cm;
                        height: 2cm;
                        text-align: center; 
                    }
                </style> 
        
        ";
		$html .= '</style> ';
		$html .= '</head> ';
		$html .= '<body> ';
		// Foreach para pegar comanda
		$comandaItem = $this->getRelatorioAtendimentoPetPdf( $dataInicial, $dataFinal, $unidade );

		$sql_unidade = '
            select descricao as unidade from unidade where id = :unidade_id:
		';
		$binds = [ 
			'unidade_id' => $unidade
		];
		$query_unidade = db_connect()->query( $sql_unidade, $binds )
			->getResult();

		$comanda_item = "";
		$total_atendimento = 0;
		$valor_total = 0;
		foreach ( $comandaItem as $key => $item ) {
			$key = $key++;
			$table_hover = $key % 2 ? "background-color: #DCDCDC;" : "";
			$total_atendimento = $total_atendimento + 1;

			$valor_total = $valor_total + $item->valor;

			$comanda_item .= '
                    <tr style="' . $table_hover . '">
                        <td style="text-align: center">' . $item->pet_id . ' </td>
                        <td style="text-align: center">' . $item->tutor . ' </td>
                        <td style="text-align: center">' . $item->unidade . ' </td>
                        <td style="text-align: center">' . $item->pet . ' </td>
                        <td style="text-align: center">' . $item->cpf . ' </td>
                    </tr>
                ';
		}

		$html .= '<header>';
		$html .= "<h2 style='text-align: center; font-size: 30px'> Animais Atendidos por Unidade </h2>";
		$html .= '	<table border="0" width="100%">
                <tr>
                    <td>Período: ' . date( "d/m/Y", strtotime( $dataInicial ) ) . ' até ' . date( "d/m/Y", strtotime( $dataFinal ) ) .
				'</td>
                    <td style="text-align: right">Unidade: ' . $query_unidade [0]->unidade . '</td>
                    <td style="text-align: right">Data do Sistema: ' . date( "d/m/Y" ) . '</td>
                </tr>
            </table>';
		$html .= '<hr>';
		$html .= '</header>';
		$html .= '<main>';
		$html .= '	<table style="font-size: 13px" border="0" width="100%">
                <tr>
                    <td style="text-align: center"><strong>ID Pet </strong></td>
                    <td style="text-align: center"><strong>Tutor </strong></td>
                    <td style="text-align: center"><strong>Unidade </strong></td>
                    <td style="text-align: center"><strong>Pet</strong></td>
                    <td style="text-align: center"><strong>CPF</strong></td>
                </tr> 
                ' . $comanda_item .
				'
                <br>
                <tr>
                    <td style="text-align: center"><strong> </strong></td>
                    <td style="text-align: center"><strong></strong></td>
                    <td style="text-align: center"><strong></strong></td>
                    <td style="text-align: center"><strong>Total</strong></td>
                    <td style="text-align: center"><strong> ' . $total_atendimento . '</strong></td>
                </tr> 
            </table>';
		$html .= '<hr>';
		$html .= '</main>';

		$html .= '</html>';

		$dompdf = new Dompdf();
		$dompdf->loadHtml( $html );
		$dompdf->setPaper( 'A4', 'landscape' );
		$dompdf->render();
		$dompdf->stream( 'realtorio.pdf' );
		exit( 0 );

	}

	// GERA RELATORIO DE ATENDIMENTO DE PET POR UNIDADE - EXCEL
	public function gerarPdfAtendimentoPetPorUnidadeExcel($dataInicial, $dataFinal, $unidade, $status, $forma_pagamento) {

		$dataInicial = $this->toIsoDate( $dataInicial );
		$dataFinal = $this->toIsoDate( $dataFinal );

		// Foreach para pegar comanda
		$comandaItem = $this->getRelatorioAtendimentoPetPdf( $dataInicial, $dataFinal, $unidade );

		$sql_unidade = '
		select descricao as unidade from unidade where id = :unidade_id:
	';
		$binds = [ 
			'unidade_id' => $unidade
		];
		$query_unidade = db_connect()->query( $sql_unidade, $binds )
			->getResult();

		header( 'Content-Type: application/vnd.ms-excel' );
		header( 'Content-Disposition: attachment;filename="testeabc.xlsx"' );
		$spreadsheet = new Spreadsheet();
		$sheet = $spreadsheet->getActiveSheet();

		$sheet->getStyle( 'A1' )
			->getFont()
			->setBold( true );
		$sheet->getStyle( 'B1' )
			->getFont()
			->setBold( true );
		$sheet->getStyle( 'C1' )
			->getFont()
			->setBold( true );
		$sheet->getStyle( 'D1' )
			->getFont()
			->setBold( true );
		$sheet->getStyle( 'E1' )
			->getFont()
			->setBold( true );
		$sheet->getStyle( 'F1' )
			->getFont()
			->setBold( true );
		$sheet->getStyle( 'G1' )
			->getFont()
			->setBold( true );
		$sheet->getStyle( 'H1' )
			->getFont()
			->setBold( true );
		$sheet->getStyle( 'I1' )
			->getFont()
			->setBold( true );

		// Tipo = Entrada || Saída
		$cols = [ 
			"Tipo",
			"Forma de Pagamento",
			"Data Movimentação",
			"Hora Movimento",
			"Id Tutor",
			"Tutor",
			"Id Pet",
			"Pet",
			"Valor"
		];

		$sheet->fromArray( $cols, null, 'A1' );

		$sql_saidas = <<<SQL
		   select
				ext.id_tipo_extorno, ei.valor, ext.data_criacao, ext.hora_criacao, ext.observacao, tpe.descricao as tipo_estorno,
				pf.nome as executor , p.descricao as item, c.id_cliente as id_cliente ,pf2.nome as cliente, c.id_pet as pet_id, pt.nome as pet
			from
				extorno ext, tipo_extorno tpe, usuario usr, pessoa_fisica pf, comanda c, extorno_item ei, comanda_item ci, procedimento p, pessoa_fisica pf2,
				cliente cl, pet pt
			where 
				ext.id_tipo_extorno = tpe.id
			and ext.criado_por = usr.id
			and usr.id_pessoa = pf.id_pessoa
			and c.id = ext.id_comanda
			and c.id_cliente = cl.id
			and cl.id_pessoa = pf2.id_pessoa
			and ext.id = ei.extorno_id
			and ei.comanda_item_id = ci.id
			and ci.id_procedimento = p.id
			and c.id_pet = pt.id
			and ext.data_criacao >= :data_criacao:
			and ext.data_criacao <= :data_final:
			and c.id_unidade = :unidade_id:
			order by ext.data_criacao asc , pf.nome asc
		SQL;

		$binds_saidas = [ 
			'data_criacao' => $dataInicial,
			'data_final' => $dataFinal,
			'unidade_id' => $unidade
		];
		$saidas_resultado = db_connect()->query( $sql_saidas, $binds_saidas )
			->getResult();

		// 1 = Entrada
		if ($status == 1) {
			// Cartão de Crédito
			if ($forma_pagamento == 1) {
				$sql_entradas = <<<SQL
					select pf.nome as cliente, c.id_cliente as tutor_id ,cp.data_criacao as data_pagamento, cp.hora_criacao as hora_criacao, c.id ,cf.id ,cp.id , cp.forma_pagamento_id , fp.descricao as forma_pagamento , cp.valor , cp.maquineta , cp.codauth , cp.bandeira , cp.criado_por , pf2.nome  as  responsavel, pt.id as pet_id, pt.nome as pet 
					from cliente cl, pessoa_fisica pf , comanda c , comanda_fechamento cf, comanda_pagamento cp , forma_pagamento fp  , usuario u , pessoa_fisica pf2, pet pt
					where 
						c.id = cf.comanda_id 
					  and cf.id = cp.comanda_fechamento_id 
					  and cp.forma_pagamento_id  = fp.id 
					  and c.id_unidade = :unidade_id:
					  and c.id_cliente = cl.id 
					  and cl.id_pessoa = pf.id_pessoa
					  and c.id_pet = pt.id 
					  and cp.data_criacao >= :data_criacao:
					  and cp.data_criacao <= :data_final:
					  and cp.criado_por = u.id 
					  and u.id_pessoa = pf2.id_pessoa
					  and cp.forma_pagamento_id = 1
					order by cp.data_criacao asc , pf.nome asc
				SQL;

				$binds_entradas = [ 
					'data_criacao' => $dataInicial,
					'data_final' => $dataFinal,
					'unidade_id' => $unidade
				];
				$entradas_resultado = db_connect()->query( $sql_entradas, $binds_entradas )
					->getResult();

				// FOREACH QUE MONTA O EXCEL
				$row_start = 2;
				foreach ( $entradas_resultado as $value ) {

					$data_pagamento = date( "d/m/Y", strtotime( $value->data_pagamento ) );
					$hora_pagamento = date( "H:i:s", strtotime( $value->hora_criacao ) );

					// $cols = [
					// "Tipo",
					// "Forma de Pagamento",
					// "Data Movimentação",
					// "Hora Movimento",
					// "Id Tutor",
					// "Tutor",
					// "Id Pet",
					// "Pet",
					// "Valor"
					// ];

					$array_row [] = "Entrada";
					$array_row [] = $value->forma_pagamento;
					$array_row [] = $data_pagamento;
					$array_row [] = $hora_pagamento;
					$array_row [] = $value->tutor_id;
					$array_row [] = $value->cliente;
					$array_row [] = $value->pet_id;
					$array_row [] = $value->pet;
					$array_row [] = number_format( $value->valor, 2, '.', ',' );

					$sheet->fromArray( $array_row, null, 'A' . $row_start );
					unset( $array_row );
					$row_start++;
				}
			}

			// Cartão de Débito
			if ($forma_pagamento == 2) {
				$sql_entradas = <<<SQL
					select pf.nome as cliente, c.id_cliente as tutor_id ,cp.data_criacao as data_pagamento, cp.hora_criacao as hora_criacao, c.id ,cf.id ,cp.id , cp.forma_pagamento_id , fp.descricao as forma_pagamento , cp.valor , cp.maquineta , cp.codauth , cp.bandeira , cp.criado_por , pf2.nome  as  responsavel, pt.id as pet_id, pt.nome as pet 
					from cliente cl, pessoa_fisica pf , comanda c , comanda_fechamento cf, comanda_pagamento cp , forma_pagamento fp  , usuario u , pessoa_fisica pf2, pet pt
					where 
						c.id = cf.comanda_id 
					  and cf.id = cp.comanda_fechamento_id 
					  and cp.forma_pagamento_id  = fp.id 
					  and c.id_unidade = :unidade_id:
					  and c.id_cliente = cl.id 
					  and cl.id_pessoa = pf.id_pessoa
					  and c.id_pet = pt.id 
					  and cp.data_criacao >= :data_criacao:
					  and cp.data_criacao <= :data_final:
					  and cp.criado_por = u.id 
					  and u.id_pessoa = pf2.id_pessoa
					  and cp.forma_pagamento_id = 2
					order by cp.data_criacao asc , pf.nome asc
				SQL;

				$binds_entradas = [ 
					'data_criacao' => $dataInicial,
					'data_final' => $dataFinal,
					'unidade_id' => $unidade
				];
				$entradas_resultado = db_connect()->query( $sql_entradas, $binds_entradas )
					->getResult();

				// FOREACH QUE MONTA O EXCEL
				$row_start = 2;
				foreach ( $entradas_resultado as $value ) {

					$data_pagamento = date( "d/m/Y", strtotime( $value->data_pagamento ) );
					$hora_pagamento = date( "H:i:s", strtotime( $value->hora_criacao ) );

					// $cols = [
					// "Tipo",
					// "Forma de Pagamento",
					// "Data Movimentação",
					// "Hora Movimento",
					// "Id Tutor",
					// "Tutor",
					// "Id Pet",
					// "Pet",
					// "Valor"
					// ];

					$array_row [] = "Entrada";
					$array_row [] = $value->forma_pagamento;
					$array_row [] = $data_pagamento;
					$array_row [] = $hora_pagamento;
					$array_row [] = $value->tutor_id;
					$array_row [] = $value->cliente;
					$array_row [] = $value->pet_id;
					$array_row [] = $value->pet;
					$array_row [] = number_format( $value->valor, 2, '.', ',' );

					$sheet->fromArray( $array_row, null, 'A' . $row_start );
					unset( $array_row );
					$row_start++;
				}
			}

			// Pix
			if ($forma_pagamento == 3) {
				$sql_entradas = <<<SQL
					select 
						pf.nome as cliente, c.id_cliente as tutor_id ,cp.data_criacao as data_pagamento, 
						cp.hora_criacao as hora_criacao, c.id ,cf.id ,cp.id , cp.forma_pagamento_id , 
						fp.descricao as forma_pagamento , cp.valor , cp.maquineta , cp.codauth , 
						cp.bandeira , cp.criado_por , pf2.nome  as  responsavel, pt.id as pet_id, 
						pt.nome as pet 
					from 
						cliente cl, pessoa_fisica pf , comanda c , comanda_fechamento cf, 
						comanda_pagamento cp , forma_pagamento fp  , usuario u , pessoa_fisica pf2, 
						pet pt
					where
						c.id = cf.comanda_id
						and cf.id = cp.comanda_fechamento_id
						and cp.forma_pagamento_id  = fp.id
						and c.id_unidade = :unidade_id:
						and c.id_cliente = cl.id
						and cl.id_pessoa = pf.id_pessoa
						and c.id_pet = pt.id
						and cp.data_criacao >= :data_criacao:
						and cp.data_criacao <= :data_final:
						and cp.criado_por = u.id
						and u.id_pessoa = pf2.id_pessoa
						and cp.forma_pagamento_id = 3
					order by cp.data_criacao asc , pf.nome asc
				SQL;

				$binds_entradas = [ 
					'data_criacao' => $dataInicial,
					'data_final' => $dataFinal,
					'unidade_id' => $unidade
				];
				$entradas_resultado = db_connect()->query( $sql_entradas, $binds_entradas )
					->getResult();

				// FOREACH QUE MONTA O EXCEL
				$row_start = 2;
				foreach ( $entradas_resultado as $value ) {

					$data_pagamento = date( "d/m/Y", strtotime( $value->data_pagamento ) );
					$hora_pagamento = date( "H:i:s", strtotime( $value->hora_criacao ) );

					// $cols = [
					// "Tipo",
					// "Forma de Pagamento",
					// "Data Movimentação",
					// "Hora Movimento",
					// "Id Tutor",
					// "Tutor",
					// "Id Pet",
					// "Pet",
					// "Valor"
					// ];

					$array_row [] = "Entrada";
					$array_row [] = $value->forma_pagamento;
					$array_row [] = $data_pagamento;
					$array_row [] = $hora_pagamento;
					$array_row [] = $value->tutor_id;
					$array_row [] = $value->cliente;
					$array_row [] = $value->pet_id;
					$array_row [] = $value->pet;
					$array_row [] = number_format( $value->valor, 2, '.', ',' );

					$sheet->fromArray( $array_row, null, 'A' . $row_start );
					unset( $array_row );
					$row_start++;
				}
			}

			// Dinheiro
			if ($forma_pagamento == 7) {
				$sql_entradas = <<<SQL
					select pf.nome as cliente, c.id_cliente as tutor_id ,cp.data_criacao as data_pagamento, cp.hora_criacao as hora_criacao, c.id ,cf.id ,cp.id , cp.forma_pagamento_id , fp.descricao as forma_pagamento , cp.valor , cp.maquineta , cp.codauth , cp.bandeira , cp.criado_por , pf2.nome  as  responsavel, pt.id as pet_id, pt.nome as pet 
					from cliente cl, pessoa_fisica pf , comanda c , comanda_fechamento cf, comanda_pagamento cp , forma_pagamento fp  , usuario u , pessoa_fisica pf2, pet pt
					where 
						c.id = cf.comanda_id 
					  and cf.id = cp.comanda_fechamento_id 
					  and cp.forma_pagamento_id  = fp.id 
					  and c.id_unidade = :unidade_id:
					  and c.id_cliente = cl.id 
					  and cl.id_pessoa = pf.id_pessoa
					  and c.id_pet = pt.id 
					  and cp.data_criacao >= :data_criacao:
					  and cp.data_criacao <= :data_final:
					  and cp.criado_por = u.id 
					  and u.id_pessoa = pf2.id_pessoa
					  and cp.forma_pagamento_id = 7
					order by cp.data_criacao asc , pf.nome asc
				SQL;

				$binds_entradas = [ 
					'data_criacao' => $dataInicial,
					'data_final' => $dataFinal,
					'unidade_id' => $unidade
				];
				$entradas_resultado = db_connect()->query( $sql_entradas, $binds_entradas )
					->getResult();

				// FOREACH QUE MONTA O EXCEL
				$row_start = 2;
				foreach ( $entradas_resultado as $value ) {

					$data_pagamento = date( "d/m/Y", strtotime( $value->data_pagamento ) );
					$hora_pagamento = date( "H:i:s", strtotime( $value->hora_criacao ) );

					// $cols = [
					// "Tipo",
					// "Forma de Pagamento",
					// "Data Movimentação",
					// "Hora Movimento",
					// "Id Tutor",
					// "Tutor",
					// "Id Pet",
					// "Pet",
					// "Valor"
					// ];

					$array_row [] = "Entrada";
					$array_row [] = $value->forma_pagamento;
					$array_row [] = $data_pagamento;
					$array_row [] = $hora_pagamento;
					$array_row [] = $value->tutor_id;
					$array_row [] = $value->cliente;
					$array_row [] = $value->pet_id;
					$array_row [] = $value->pet;
					$array_row [] = number_format( $value->valor, 2, '.', ',' );

					$sheet->fromArray( $array_row, null, 'A' . $row_start );
					unset( $array_row );
					$row_start++;
				}
			}

			// Sem filtro
			if ($forma_pagamento == 0) {
				$sql_entradas = <<<SQL
					select pf.nome as cliente, c.id_cliente as tutor_id ,cp.data_criacao as data_pagamento, cp.hora_criacao as hora_criacao, c.id ,cf.id ,cp.id , cp.forma_pagamento_id , fp.descricao as forma_pagamento , cp.valor , cp.maquineta , cp.codauth , cp.bandeira , cp.criado_por , pf2.nome  as  responsavel, pt.id as pet_id, pt.nome as pet 
					from cliente cl, pessoa_fisica pf , comanda c , comanda_fechamento cf, comanda_pagamento cp , forma_pagamento fp  , usuario u , pessoa_fisica pf2, pet pt
					where 
						c.id = cf.comanda_id 
					  and cf.id = cp.comanda_fechamento_id 
					  and cp.forma_pagamento_id  = fp.id 
					  and c.id_unidade = :unidade_id:
					  and c.id_cliente = cl.id 
					  and cl.id_pessoa = pf.id_pessoa
					  and c.id_pet = pt.id 
					  and cp.data_criacao >= :data_criacao:
					  and cp.data_criacao <= :data_final:
					  and cp.criado_por = u.id 
					  and u.id_pessoa = pf2.id_pessoa
					order by cp.data_criacao asc , pf.nome asc
				SQL;

				$binds_entradas = [ 
					'data_criacao' => $dataInicial,
					'data_final' => $dataFinal,
					'unidade_id' => $unidade
				];
				$entradas_resultado = db_connect()->query( $sql_entradas, $binds_entradas )
					->getResult();

				// FOREACH QUE MONTA O EXCEL
				$row_start = 2;
				foreach ( $entradas_resultado as $value ) {

					$data_pagamento = date( "d/m/Y", strtotime( $value->data_pagamento ) );
					$hora_pagamento = date( "H:i:s", strtotime( $value->hora_criacao ) );

					// $cols = [
					// "Tipo",
					// "Forma de Pagamento",
					// "Data Movimentação",
					// "Hora Movimento",
					// "Id Tutor",
					// "Tutor",
					// "Id Pet",
					// "Pet",
					// "Valor"
					// ];

					$array_row [] = "Entrada";
					$array_row [] = $value->forma_pagamento;
					$array_row [] = $data_pagamento;
					$array_row [] = $hora_pagamento;
					$array_row [] = $value->tutor_id;
					$array_row [] = $value->cliente;
					$array_row [] = $value->pet_id;
					$array_row [] = $value->pet;
					$array_row [] = number_format( $value->valor, 2, '.', ',' );

					$sheet->fromArray( $array_row, null, 'A' . $row_start );
					unset( $array_row );
					$row_start++;
				}
			}
		}

		// 2 = Saída
		if ($status == 2) {
			// FOREACH QUE MONTA O EXCEL
			$row_start = 2;
			foreach ( $saidas_resultado as $value ) {

				$data_criacao = date( "d/m/Y", strtotime( $value->data_criacao ) );
				$hora_criacao = date( "H:i:s", strtotime( $value->hora_criacao ) );

				$array_row [] = "SAÍDA";
				$array_row [] = $value->tipo_estorno;
				$array_row [] = $data_criacao;
				$array_row [] = $hora_criacao;
				$array_row [] = $value->id_cliente;
				$array_row [] = $value->cliente;
				$array_row [] = $value->pet_id;
				$array_row [] = $value->pet;
				$array_row [] = $value->valor;

				if ($value->id_tipo_extorno == 1) {
					$sheet->getStyle( 'A' . $row_start )
						->getFill()
						->setFillType( Fill::FILL_SOLID );
					$sheet->getStyle( 'A' . $row_start )
						->getFill()
						->getStartColor()
						->setARGB( Color::COLOR_RED );
				}

				// $array_row [] = $value->tipo_estorno;
				// $array_row [] = $data_criacao;
				// $array_row [] = $hora_criacao;
				// $array_row [] = $value->cliente;
				// $array_row [] = "SAÍDA";
				// $array_row [] = "ESTORNO";
				// $array_row [] = number_format($value->valor, 2, '.',',');

				$sheet->fromArray( $array_row, null, 'A' . $row_start );
				unset( $array_row );

				if ($value->id_tipo_extorno == 1) {
					$sheet->getStyle( 'A' . $row_start )
						->getFill()
						->setFillType( Fill::FILL_SOLID );
					$sheet->getStyle( 'A' . $row_start )
						->getFill()
						->getStartColor()
						->setARGB( Color::COLOR_RED );
				}

				$row_start++;
			}
		}

		// 3 = Todos
		if ($status == 3) {
			/*
			 * Bloco de codigo para entrada
			 */

			// Cartão de Crédito
			if ($forma_pagamento == 1) {
				$sql_entradas = <<<SQL
					select pf.nome as cliente, c.id_cliente as tutor_id ,cp.data_criacao as data_pagamento, cp.hora_criacao as hora_criacao, c.id ,cf.id ,cp.id , cp.forma_pagamento_id , fp.descricao as forma_pagamento , cp.valor , cp.maquineta , cp.codauth , cp.bandeira , cp.criado_por , pf2.nome  as  responsavel, pt.id as pet_id, pt.nome as pet 
					from cliente cl, pessoa_fisica pf , comanda c , comanda_fechamento cf, comanda_pagamento cp , forma_pagamento fp  , usuario u , pessoa_fisica pf2, pet pt
					where 
						c.id = cf.comanda_id 
					  and cf.id = cp.comanda_fechamento_id 
					  and cp.forma_pagamento_id  = fp.id 
					  and c.id_unidade = :unidade_id:
					  and c.id_cliente = cl.id 
					  and cl.id_pessoa = pf.id_pessoa
					  and c.id_pet = pt.id 
					  and cp.data_criacao >= :data_criacao:
					  and cp.data_criacao <= :data_final:
					  and cp.criado_por = u.id 
					  and u.id_pessoa = pf2.id_pessoa
					  and cp.forma_pagamento_id = 1
					order by cp.data_criacao asc , pf.nome asc
				SQL;

				$binds_entradas = [ 
					'data_criacao' => $dataInicial,
					'data_final' => $dataFinal,
					'unidade_id' => $unidade
				];
				$entradas_resultado = db_connect()->query( $sql_entradas, $binds_entradas )
					->getResult();

				// FOREACH QUE MONTA O EXCEL
				$row_start = 2;
				foreach ( $entradas_resultado as $value ) {

					$data_pagamento = date( "d/m/Y", strtotime( $value->data_pagamento ) );
					$hora_pagamento = date( "H:i:s", strtotime( $value->hora_criacao ) );

					// $cols = [
					// "Tipo",
					// "Forma de Pagamento",
					// "Data Movimentação",
					// "Hora Movimento",
					// "Id Tutor",
					// "Tutor",
					// "Id Pet",
					// "Pet",
					// "Valor"
					// ];

					$array_row [] = "Entrada";
					$array_row [] = $value->forma_pagamento;
					$array_row [] = $data_pagamento;
					$array_row [] = $hora_pagamento;
					$array_row [] = $value->tutor_id;
					$array_row [] = $value->cliente;
					$array_row [] = $value->pet_id;
					$array_row [] = $value->pet;
					$array_row [] = number_format( $value->valor, 2, '.', ',' );

					$sheet->fromArray( $array_row, null, 'A' . $row_start );
					unset( $array_row );
					$row_start++;
				}
			}

			// Cartão de Débito
			if ($forma_pagamento == 2) {
				$sql_entradas = <<<SQL
					select pf.nome as cliente, c.id_cliente as tutor_id ,cp.data_criacao as data_pagamento, cp.hora_criacao as hora_criacao, c.id ,cf.id ,cp.id , cp.forma_pagamento_id , fp.descricao as forma_pagamento , cp.valor , cp.maquineta , cp.codauth , cp.bandeira , cp.criado_por , pf2.nome  as  responsavel, pt.id as pet_id, pt.nome as pet 
					from cliente cl, pessoa_fisica pf , comanda c , comanda_fechamento cf, comanda_pagamento cp , forma_pagamento fp  , usuario u , pessoa_fisica pf2, pet pt
					where 
						c.id = cf.comanda_id 
					  and cf.id = cp.comanda_fechamento_id 
					  and cp.forma_pagamento_id  = fp.id 
					  and c.id_unidade = :unidade_id:
					  and c.id_cliente = cl.id 
					  and cl.id_pessoa = pf.id_pessoa
					  and c.id_pet = pt.id 
					  and cp.data_criacao >= :data_criacao:
					  and cp.data_criacao <= :data_final:
					  and cp.criado_por = u.id 
					  and u.id_pessoa = pf2.id_pessoa
					  and cp.forma_pagamento_id = 2
					order by cp.data_criacao asc , pf.nome asc
				SQL;

				$binds_entradas = [ 
					'data_criacao' => $dataInicial,
					'data_final' => $dataFinal,
					'unidade_id' => $unidade
				];
				$entradas_resultado = db_connect()->query( $sql_entradas, $binds_entradas )
					->getResult();

				// FOREACH QUE MONTA O EXCEL
				$row_start = 2;
				foreach ( $entradas_resultado as $value ) {

					$data_pagamento = date( "d/m/Y", strtotime( $value->data_pagamento ) );
					$hora_pagamento = date( "H:i:s", strtotime( $value->hora_criacao ) );

					// $cols = [
					// "Tipo",
					// "Forma de Pagamento",
					// "Data Movimentação",
					// "Hora Movimento",
					// "Id Tutor",
					// "Tutor",
					// "Id Pet",
					// "Pet",
					// "Valor"
					// ];

					$array_row [] = "Entrada";
					$array_row [] = $value->forma_pagamento;
					$array_row [] = $data_pagamento;
					$array_row [] = $hora_pagamento;
					$array_row [] = $value->tutor_id;
					$array_row [] = $value->cliente;
					$array_row [] = $value->pet_id;
					$array_row [] = $value->pet;
					$array_row [] = number_format( $value->valor, 2, '.', ',' );

					$sheet->fromArray( $array_row, null, 'A' . $row_start );
					unset( $array_row );
					$row_start++;
				}
			}

			// Pix
			if ($forma_pagamento == 3) {
				$sql_entradas = <<<SQL
					select pf.nome as cliente, c.id_cliente as tutor_id ,cp.data_criacao as data_pagamento, cp.hora_criacao as hora_criacao, c.id ,cf.id ,cp.id , cp.forma_pagamento_id , fp.descricao as forma_pagamento , cp.valor , cp.maquineta , cp.codauth , cp.bandeira , cp.criado_por , pf2.nome  as  responsavel, pt.id as pet_id, pt.nome as pet 
					from cliente cl, pessoa_fisica pf , comanda c , comanda_fechamento cf, comanda_pagamento cp , forma_pagamento fp  , usuario u , pessoa_fisica pf2, pet pt
					where 
						c.id = cf.comanda_id 
					  and cf.id = cp.comanda_fechamento_id 
					  and cp.forma_pagamento_id  = fp.id 
					  and c.id_unidade = :unidade_id:
					  and c.id_cliente = cl.id 
					  and cl.id_pessoa = pf.id_pessoa
					  and c.id_pet = pt.id 
					  and cp.data_criacao >= :data_criacao:
					  and cp.data_criacao <= :data_final:
					  and cp.criado_por = u.id 
					  and u.id_pessoa = pf2.id_pessoa
					  and cp.forma_pagamento_id = 3
					order by cp.data_criacao asc , pf.nome asc
				SQL;

				$binds_entradas = [ 
					'data_criacao' => $dataInicial,
					'data_final' => $dataFinal,
					'unidade_id' => $unidade
				];
				$entradas_resultado = db_connect()->query( $sql_entradas, $binds_entradas )
					->getResult();

				// FOREACH QUE MONTA O EXCEL
				$row_start = 2;
				foreach ( $entradas_resultado as $value ) {

					$data_pagamento = date( "d/m/Y", strtotime( $value->data_pagamento ) );
					$hora_pagamento = date( "H:i:s", strtotime( $value->hora_criacao ) );

					// $cols = [
					// "Tipo",
					// "Forma de Pagamento",
					// "Data Movimentação",
					// "Hora Movimento",
					// "Id Tutor",
					// "Tutor",
					// "Id Pet",
					// "Pet",
					// "Valor"
					// ];

					$array_row [] = "Entrada";
					$array_row [] = $value->forma_pagamento;
					$array_row [] = $data_pagamento;
					$array_row [] = $hora_pagamento;
					$array_row [] = $value->tutor_id;
					$array_row [] = $value->cliente;
					$array_row [] = $value->pet_id;
					$array_row [] = $value->pet;
					$array_row [] = number_format( $value->valor, 2, '.', ',' );

					$sheet->fromArray( $array_row, null, 'A' . $row_start );
					unset( $array_row );
					$row_start++;
				}
			}

			// Dinheiro
			if ($forma_pagamento == 7) {
				$sql_entradas = <<<SQL
					select pf.nome as cliente, c.id_cliente as tutor_id ,cp.data_criacao as data_pagamento, cp.hora_criacao as hora_criacao, c.id ,cf.id ,cp.id , cp.forma_pagamento_id , fp.descricao as forma_pagamento , cp.valor , cp.maquineta , cp.codauth , cp.bandeira , cp.criado_por , pf2.nome  as  responsavel, pt.id as pet_id, pt.nome as pet 
					from cliente cl, pessoa_fisica pf , comanda c , comanda_fechamento cf, comanda_pagamento cp , forma_pagamento fp  , usuario u , pessoa_fisica pf2, pet pt
					where 
						c.id = cf.comanda_id 
					  and cf.id = cp.comanda_fechamento_id 
					  and cp.forma_pagamento_id  = fp.id 
					  and c.id_unidade = :unidade_id:
					  and c.id_cliente = cl.id 
					  and cl.id_pessoa = pf.id_pessoa
					  and c.id_pet = pt.id 
					  and cp.data_criacao >= :data_criacao:
					  and cp.data_criacao <= :data_final:
					  and cp.criado_por = u.id 
					  and u.id_pessoa = pf2.id_pessoa
					  and cp.forma_pagamento_id = 7
					order by cp.data_criacao asc , pf.nome asc
				SQL;

				$binds_entradas = [ 
					'data_criacao' => $dataInicial,
					'data_final' => $dataFinal,
					'unidade_id' => $unidade
				];
				$entradas_resultado = db_connect()->query( $sql_entradas, $binds_entradas )
					->getResult();

				// FOREACH QUE MONTA O EXCEL
				$row_start = 2;
				foreach ( $entradas_resultado as $value ) {

					$data_pagamento = date( "d/m/Y", strtotime( $value->data_pagamento ) );
					$hora_pagamento = date( "H:i:s", strtotime( $value->hora_criacao ) );

					// $cols = [
					// "Tipo",
					// "Forma de Pagamento",
					// "Data Movimentação",
					// "Hora Movimento",
					// "Id Tutor",
					// "Tutor",
					// "Id Pet",
					// "Pet",
					// "Valor"
					// ];

					$array_row [] = "Entrada";
					$array_row [] = $value->forma_pagamento;
					$array_row [] = $data_pagamento;
					$array_row [] = $hora_pagamento;
					$array_row [] = $value->tutor_id;
					$array_row [] = $value->cliente;
					$array_row [] = $value->pet_id;
					$array_row [] = $value->pet;
					$array_row [] = number_format( $value->valor, 2, '.', ',' );

					$sheet->fromArray( $array_row, null, 'A' . $row_start );
					unset( $array_row );
					$row_start++;
				}
			}

			// Sem filtro
			if ($forma_pagamento == 0) {
				$sql_entradas = <<<SQL
					select pf.nome as cliente, c.id_cliente as tutor_id ,cp.data_criacao as data_pagamento, cp.hora_criacao as hora_criacao, c.id ,cf.id ,cp.id , cp.forma_pagamento_id , fp.descricao as forma_pagamento , cp.valor , cp.maquineta , cp.codauth , cp.bandeira , cp.criado_por , pf2.nome  as  responsavel, pt.id as pet_id, pt.nome as pet 
					from cliente cl, pessoa_fisica pf , comanda c , comanda_fechamento cf, comanda_pagamento cp , forma_pagamento fp  , usuario u , pessoa_fisica pf2, pet pt
					where 
						c.id = cf.comanda_id 
					  and cf.id = cp.comanda_fechamento_id 
					  and cp.forma_pagamento_id  = fp.id 
					  and c.id_unidade = :unidade_id:
					  and c.id_cliente = cl.id 
					  and cl.id_pessoa = pf.id_pessoa
					  and c.id_pet = pt.id 
					  and cp.data_criacao >= :data_criacao:
					  and cp.data_criacao <= :data_final:
					  and cp.criado_por = u.id 
					  and u.id_pessoa = pf2.id_pessoa
					order by cp.data_criacao asc , pf.nome asc
				SQL;

				$binds_entradas = [ 
					'data_criacao' => $dataInicial,
					'data_final' => $dataFinal,
					'unidade_id' => $unidade
				];
				$entradas_resultado = db_connect()->query( $sql_entradas, $binds_entradas )
					->getResult();

				// FOREACH QUE MONTA O EXCEL
				$row_start = 2;
				foreach ( $entradas_resultado as $value ) {

					$data_pagamento = date( "d/m/Y", strtotime( $value->data_pagamento ) );
					$hora_pagamento = date( "H:i:s", strtotime( $value->hora_criacao ) );

					$array_row [] = "ENTRADA";
					$array_row [] = $value->forma_pagamento;
					$array_row [] = $data_pagamento;
					$array_row [] = $hora_pagamento;
					$array_row [] = $value->tutor_id;
					$array_row [] = $value->cliente;
					$array_row [] = $value->pet_id;
					$array_row [] = $value->pet;
					$array_row [] = $value->valor;

					$sheet->fromArray( $array_row, null, 'A' . $row_start );
					unset( $array_row );
					$row_start++;
				}

				foreach ( $saidas_resultado as $value ) {

					$data_criacao = date( "d/m/Y", strtotime( $value->data_criacao ) );
					$hora_criacao = date( "H:i:s", strtotime( $value->hora_criacao ) );

					$array_row [] = "SAÍDA";
					$array_row [] = $value->tipo_estorno;
					$array_row [] = $data_criacao;
					$array_row [] = $hora_criacao;
					$array_row [] = $value->id_cliente;
					$array_row [] = $value->cliente;
					$array_row [] = $value->pet_id;
					$array_row [] = $value->pet;
					$array_row [] = $value->valor;

					// $array_row [] = $value->tipo_estorno;
					// $array_row [] = $data_criacao;
					// $array_row [] = $hora_criacao;
					// $array_row [] = $value->cliente;
					// $array_row [] = "SAÍDA";
					// $array_row [] = "ESTORNO";
					// $array_row [] = number_format($value->valor, 2, '.',',');

					$sheet->fromArray( $array_row, null, 'A' . $row_start );
					unset( $array_row );

					if ($value->id_tipo_extorno == 1) {
						$sheet->getStyle( 'B' . $row_start )
							->getFill()
							->setFillType( Fill::FILL_SOLID );
						$sheet->getStyle( 'B' . $row_start )
							->getFill()
							->getStartColor()
							->setARGB( Color::COLOR_RED );
						$sheet->getStyle( 'B' . $row_start )
							->getFont()
							->getColor()
							->setARGB( Color::COLOR_WHITE );
					}

					$row_start++;
				}
			}

			// Fim
		}

		$writer = new Xlsx( $spreadsheet );
		$writer->save( 'php://output' );
		// $writer->save('teste_unico.xlsx');
		exit( 0 );

	}

	// GERA RELATORIO GERAL DE COMANDAS DE ACORDO COM O FILTRO - EXCEL
	public function gerarExcelComanda($dataInicial, $dataFinal, $unidade, $status) {

		$dataInicial = $this->toIsoDate( $dataInicial );
		$dataFinal = $this->toIsoDate( $dataFinal );

		$sql_usuarioLogado = <<<SQL
		    select pessoa_fisica.nome
		    from usuario, pessoa_fisica
		    where usuario.id_pessoa = pessoa_fisica.id_pessoa
		      and usuario.id = :id_usuario:
		SQL;
		$binds = [ 
			'id_usuario' => UsuarioLogado::getUsuarioId()
		];
		// $usuarioNome = db_connect()->query( $sql_usuarioLogado, $binds )
		// ->getResultArray();

		// $comandas = $this->getComandaParaPdf( $dataInicial, $dataFinal, $unidade, $status );

		$comandas = $this->getNewComandaParaPdf( $dataInicial, $dataFinal, $unidade, $status );
		$comanda_itens = [ ];

		// Foreach para pegar comanda

		foreach ( $comandas as $comanda ) {
			$comandaItem = $this->getComandaItemParaPdf( $comanda->id );
			array_push( $comanda_itens, $comandaItem );
		}
		log_message( "info", " -> itens da comandas fim " . DateUtils::now() );

		$dados = [ 
			'comandas' => $comandas,
			'itens' => $comanda_itens
		];

		$this->geraRelatorioEmExcel( $dados, 2 );

	}

	// GERA RELATORIO DE ATENDIMENTO DE UMA UNICA COMANDA - PDF
	public function gerarRelatorioComandaByIdOld($id_comanda) {

		// ================================================================================================
		// PEGA A COMANDA SELECIONADA
		// ================================================================================================
		$comanda = $this->getComandaById( $id_comanda );

		$sql_usuarioLogado = <<<SQL
		    select pessoa_fisica.nome
		    from usuario, pessoa_fisica
		    where usuario.id_pessoa = pessoa_fisica.id_pessoa
		      and usuario.id = :id_usuario:
		SQL;
		$binds = [ 
			'id_usuario' => UsuarioLogado::getUsuarioId()
		];
		$usuarioNome = db_connect()->query( $sql_usuarioLogado, $binds )
			->getResultArray();

		// ================================================================================================
		// SELECIONA OS ITENS DA COMANDA
		// ================================================================================================

		$comandaItem = $this->getComandaItemParaPdf( $comanda ['id'] );

		$comanda_item = "";
		foreach ( $comandaItem as $key => $item ) {
			$key = $key++;
			$table_hover = $key % 2 ? "background-color: #DCDCDC;" : "";
			$executor = $item->id_tipo_procedimento == 2 || $item->id_tipo_procedimento == 3 ? $item->nome_medico : $item->nome_executor;
			$data_execucao = $item->data_execucao == "1900-01-01" ? '-' : date( "d/m/Y", strtotime( $item->data_execucao ) );
			$data_criacao = $item->data_criacao == "1900-01-01" ? '-' : date( "d/m/Y", strtotime( $item->data_criacao ) );
			$data_pagamento = $item->data_pagamento == "1900-01-01" ? '-' : date( "d/m/Y", strtotime( $item->data_pagamento ) );
			$hora_pagamento = $item->hora_pagamento == "00:00:00" ? '-' : date( "H:i:s", strtotime( $item->hora_pagamento ) );
			$obersevacao = $item->observacao ? $item->observacao : '-';

			$comanda_item .= '
                <tr style="' . $table_hover . '">
                    <td style="text-align: center;">' . $item->descricao_tipo_procedimento . ' </td>
                    <td style="text-align: center;">' . $item->descricao_procedimento . ' </td>
                    <td style="text-align: center;">' . $data_criacao . '</td>
                    <td style="text-align: center;">' . $item->hora_criacao . '</td>
                    <td style="text-align: center;">' . $data_execucao . '</td>
                    <td style="text-align: center;">' . $item->hora_execucao . '</td>
                    <td style="text-align: center">' . mb_strtolower( $executor ) . ' </td>
                    <td style="text-align: center">' . mb_strtolower( $item->forma_pagamento ) . ' </td>
                    <td style="text-align: center">' . $data_pagamento . ' </td>
                    <td style="text-align: center">' . $hora_pagamento . ' </td>
                    <td style="text-align: center;">' . mb_strtolower( $item->bandeira ) . ' </td>
                    <td style="text-align: center;">' . $item->parcelas . ' </td>
                    <td style="text-align: center;">' . $item->codauth . ' </td>
                    <td style="text-align: center;">' . mb_strtolower( $item->tipo_convenio ) . ' </td>
                    <td style="text-align: center;">R$ ' . str_replace( ".", ",", $item->valor ) . ' </td>
                </tr>
                <tr style="' . $table_hover . '">
                    <td colspan="15" style="text-align: left;"><strong>Observação:</strong> ' . $obersevacao . ' </td>
                </tr>
            ';
		}

		// ================================================================================================
		// BUSCA ENDEREÇO DA UNIDADE
		// ================================================================================================

		$sql_end_unidade = <<<SQL
		select distinct
		    p.id_endereco , pj.nome_fantasia ,u.descricao , c.id_unidade
		    , cp.logradouro , e.numero, cp.bairro , cp.cidade , cp.estado 
		    , cp.cep , p.telefone_1
		from 
		    pessoa p , pessoa_juridica pj , unidade u , comanda c, endereco e, cep cp  
		where 
		    c.id = :comanda_id:
		    and c.id_unidade = u.id 
		    and u.id_pessoa_juridica = pj.id 
		    and pj.id_pessoa  = p.id 
		    and p.id_endereco = e.id
		    and e.cep = cp.id
		SQL;
		$binds_end_unidade = [ 
			'comanda_id' => $id_comanda
		];
		$end_unidade = db_connect()->query( $sql_end_unidade, $binds_end_unidade )
			->getResultArray();

		// ================================================================================================
		// BUSCA ENDEREÇO DA CLIENTE
		// ================================================================================================

		$sql_end_cliente = <<<SQL
		    select distinct
		        p.id_endereco , pf.nome , pf.cpf 
		        , cp.logradouro , e.numero, cp.bairro , cp.cidade , cp.estado 
		        , cp.cep , p.telefone_1
		    from 
		        pessoa p , pessoa_fisica pf , unidade u , comanda c, endereco e, cep cp, cliente cl  
		    where 
		        c.id = :comanda_id:
		        and c.id_cliente =  cl.id 
		        and cl.id_pessoa  = p.id 
		        and pf.id_pessoa  = p.id 
		        and p.id_endereco = e.id
		        and e.cep = cp.id
		SQL;
		$binds_end_cliente = [ 
			'comanda_id' => $id_comanda
		];
		$end_cliente = db_connect()->query( $sql_end_cliente, $binds_end_cliente )
			->getResultArray();

		// ================================================================================================
		// FIM
		// ================================================================================================

		$html = '';
		$html .= '<html>';
		$html .= '<head> ';
		$html .= '<style> ';
		$html .= "
                <style> 
                    @page {
                        margin: 0cm 0cm;
                    }
                    body {
                        margin-top: 4cm;
                        margin-bottom: 2cm;
                    }
        
                    /** Define the header rules **/
                    header {
                        position: fixed;
                        top: -1cm;
                        left: 0cm;
                        right: 0cm;
                        height: 2cm;
                        text-align: center; 
                    }
                </style> 
        
        ";
		$html .= '</style> ';
		$html .= '</head> ';
		$html .= '<body> ';
		// Foreach para pegar comanda
		// $data_final = $comanda->data_fechada != "1900-01-01" ? date("d/m/Y", strtotime($comanda->data_fechada)) : "";
		$html .= '<header>';
		$html .= "<h2 style='text-align: center; font-size: 30px'> Comanda de Atendimento </h2>";
		$html .= '   <table border="0" width="100%">
                <tr>
                    <td><strong>' . $end_unidade [0] ["descricao"] . '</strong></td>
                </tr>
                <tr>    
                    <td>' . $end_unidade [0] ["logradouro"] . ', ' . $end_unidade [0] ["numero"] . ' - ' . $end_unidade [0] ["bairro"] . ' - ' .
				$end_unidade [0] ["cep"] . ' - ' . $end_unidade [0] ["cidade"] . '-' . $end_unidade [0] ["estado"] . '</td>
                </tr>
                <tr>    
                    <td> Telefone: ' . $end_unidade [0] ["telefone_1"] . ' - E-mail:</td>
                    <td> Data: ' . date( "d/m/Y" ) . ' </td>
                </tr>
                <tr>    
                    <td></td>
                    <td> Usuário: ' . $usuarioNome [0] ["nome"] . ' </td>
                </tr>
                
            </table>';
		$html .= '<hr>';
		$html .= '</header>';
		$html .= '<main>';
		$html .= '	<table style="font-size: 13px" border="0" width="100%">
                <tr>
                    <td><strong>ID COMANDA: </strong> ' . $comanda ["id"] . '</td>
                    <td><strong>Cliente: </strong>' . $end_cliente [0] ["nome"] . '</td>
                </tr>
                <tr>
                    <td><strong>CPF/CNPJ: </strong> ' . $end_cliente [0] ["cpf"] .
				'</td>
                    <td><strong>E-mail: </strong> </td>
                </tr>
                <tr>
                    <td><strong>Endereço:  </strong> ' . $end_cliente [0] ["logradouro"] . ', ' . $end_cliente [0] ["numero"] .
				'</td>
                    <td><strong>Bairro: </strong> ' . $end_cliente [0] ["bairro"] . '</td>
                </tr>
                <tr>
                    <td><strong>Cidade: </strong> ' . $end_cliente [0] ["cidade"] . '</td>
                    <td><strong>CEP: </strong> ' . $end_cliente [0] ["cep"] . '</td>
                    <td><strong>Tel: </strong> ' . $end_cliente [0] ["telefone_1"] . '</td>
                </tr>
            </table>';
		$html .= '<hr>';
		$html .= '<table style="font-size: 13px" border="0" width="100%">
                <tr>
                    <td colspan="2"><strong>Animal: </strong>' . $comanda ["nome_pet"] . '</td>
                    <td colspan="2"><strong>ID Pet: </strong>' . $comanda ["id_pet"] . '</td>
                    <td><strong>Sexo: </strong>' . $comanda ["sexo"] . '</td>
                    <td colspan="2"><strong>Raça: </strong>' . mb_strtolower( $comanda ["nome_raca"] ) . '</td>
                    <td colspan="2"><strong>Espécie: </strong>' . mb_strtolower( $comanda ["nome_especie"] ) .
				'</td>
                    <td colspan="2"><strong>Data de Nascimento: </strong>' . date( "d/m/Y", strtotime( $comanda ["data_nascimento"] ) ) .
				'</td>
                    <td colspan="2"><strong>Idade: </strong>' . $comanda ["idade"] .
				'</td>
                </tr>
                <tr>
                    
                </tr>
                <br>
                 <tr>
                    <td style="text-align: center" width="50px"><strong>Tipo </strong></td>
                    <td style="text-align: center" width="100px"><strong>Itens </strong></td>
                    <td style="text-align: center"><strong>Data Criação </strong></td>
                    <td style="text-align: center"><strong>Hora Criação </strong></td>
                    <td style="text-align: center" width="50px"><strong>Execução</strong></td>
                    <td style="text-align: center""><strong>Hora Execução</strong></td>
                    <td style="text-align: center"><strong>Executante</strong></td>
                    <td style="text-align: center"><strong>Forma de pagamento</strong></td>
                    <td style="text-align: center"><strong>Data de pagamento</strong></td>
                    <td style="text-align: center"><strong>Hora de pagamento</strong></td>
                    <td style="text-align: center"><strong>Bandeira</strong></td>
                    <td style="text-align: center"><strong>Parcelas</strong></td>
                    <td style="text-align: center"><strong>Cod Autori</strong></td>
                    <td style="text-align: center"><strong>Convênio</strong></td>
                    <td style="text-align: center"><strong>Valor</strong></td>
                </tr>
                ' . $comanda_item .
				'
                <tr>
                    <td></td>
                    <td></td>
                    <td></td>
                    <td></td>
                    <td></td>
                    <td></td>
                    <td></td>
                    <td></td>
                    <td></td>
                    <td></td>
                    <td></td>
                    <td></td>
                    <td></td>
                    <td colspan="2" style="text-align: right"><strong>R$ ' . str_replace( ".", ",", $comanda ["valor_total"] ) .
				'</strong></td>
                </tr>
                <tr>
                    <td></td>
                    <td></td>
                    <td></td>
                    <td></td>
                    <td></td>
                    <td></td>
                    <td></td>
                    <td></td>   
                    <td></td>   
                    <td></td>   
                    <td></td>   
                    <td></td>   
                    <td></td>   
                    <td colspan="2"><hr></td>
                </tr>
                <br>
                <tr>
                    <td><strong>Valor da Comanda</strong></td>
                    <td></td>
                    <td></td>
                    <td></td>
                    <td></td>
                    <td></td>
                    <td></td>
                    <td></td>
                    <td></td>
                    <td></td>
                    <td></td>
                    <td></td>
                    <td></td>
                    <td colspan="2" style="text-align: right"><strong>Valor Total</strong></td>
                </tr>
                <tr>
                    <td colspan="2"><strong>R$ ' . str_replace( ".", ",", $comanda ["valor_total"] ) .
				'</strong></td>
                    <td></td>
                    <td></td>
                    <td></td>
                    <td></td>
                    <td></td>
                    <td></td>
                    <td></td>
                    <td></td>
                    <td></td>
                    <td></td>
                    <td></td>
                    <td colspan="2" style="text-align: right"><strong>R$ ' . str_replace( ".", ",", $comanda ["valor_total"] ) . '</strong></td>
                </tr>
            </table>';
		$html .= '</table>';
		$html .= '</main>';
		$html .= '</html>';

		$dompdf = new Dompdf();
		$dompdf->loadHtml( $html );
		$dompdf->setPaper( 'A4', 'landscape' );
		$dompdf->render();
		$dompdf->stream( 'relatorio.pdf' );
		exit( 0 );

	}

	// NOVO RELATORIO DE ATENDIMENTO DE UMA UNICA COMANDA - PDF
	public function gerarRelatorioComandaById($id_comanda) {

		// ================================================================================================
		// PEGA A COMANDA SELECIONADA
		// ================================================================================================
		$comanda = $this->getComandaById( $id_comanda );

		$sql_usuarioLogado = <<<SQL
		    select pessoa_fisica.nome
		    from usuario, pessoa_fisica
		    where usuario.id_pessoa = pessoa_fisica.id_pessoa
		      and usuario.id = :id_usuario:
		SQL;
		$binds = [ 
			'id_usuario' => UsuarioLogado::getUsuarioId()
		];
		$usuarioNome = db_connect()->query( $sql_usuarioLogado, $binds )
			->getResultArray();

		// ================================================================================================
		// SELECIONA OS ITENS DA COMANDA
		// ================================================================================================

		$comandaItem = $this->getComandaAtendimentoItem( $comanda ['id'] );

		$pagamentos = $this->getPagamentosPorComanda( $comanda ['id'] );

		// =============================================================================================
		// Query para saber o total pago
		$query_total_pago = <<<SQL
		select
		    sum(valor) as total
		from
		    comanda_item
		where
		    comanda_item_status_id = 2
		    and id_comanda = :comanda_id:
		SQL;
		$binds = [ 
			'comanda_id' => $id_comanda
		];
		$total_pago = db_connect()->query( $query_total_pago, $binds )
			->getResultArray();
		$total_pago = !empty( $total_pago [0] ['total'] ) ? 'R$' . number_format( $total_pago [0] ['total'], 2, ",", "." ) : ' - ';

		// =============================================================================================
		// Query para quanto faltar ser pago na comanda
		$query_total_restante = <<<SQL
		select
		    sum(valor) as total
		from
		    comanda_item
		where
		    comanda_item_status_id = 1
		    and id_comanda = :comanda_id:
		SQL;
		$binds = [ 
			'comanda_id' => $id_comanda
		];
		$total_restante = db_connect()->query( $query_total_restante, $binds )
			->getResultArray();

		$total_restante = !empty( $total_restante [0] ['total'] ) ? 'R$' . number_format( $total_restante [0] ['total'], 2, ",", "." ) : ' - ';

		// =============================================================================================
		// Query para estornos
		$query_estornos = <<<SQL
		    select
		        ext.id_tipo_extorno, ei.valor, ext.data_criacao, ext.hora_criacao, ext.observacao,
		        tpe.descricao as tipo_estorno, pf.nome as executor, p.descricao as item
		    from
		        extorno ext, tipo_extorno tpe, usuario usr, pessoa_fisica pf, extorno_item ei, comanda_item ci, procedimento p
		    where 
		        ext.id_tipo_extorno = tpe.id
		      and ext.criado_por = usr.id
		      and usr.id_pessoa = pf.id_pessoa
		      and ext.id = ei.extorno_id
		      and ei.comanda_item_id = ci.id
		      and ci.id_procedimento = p.id
		      and ext.id_comanda = :comanda_id:
		SQL;
		$binds = [ 
			'comanda_id' => $id_comanda
		];
		$estornos = db_connect()->query( $query_estornos, $binds )
			->getResultArray();

		$comanda_item = "";
		foreach ( $comandaItem as $key => $item ) {
			$key = $key++;
			$table_hover = !($key % 2) ? "background-color: #DCDCDC;" : "";
			$executor = $item ["id_tipo_procedimento"] == 2 || $item ["id_tipo_procedimento"] == 3 ? $item ["nome_medico"] : $item ["nome_executor"];
			$data_execucao = $item ["data_execucao"] == "1900-01-01" ? '-' : date( "d/m/Y", strtotime( $item ["data_execucao"] ) );
			$data_criacao = $item ["data_criacao"] == "1900-01-01" ? '-' : date( "d/m/Y", strtotime( $item ["data_criacao"] ) );
			$hora_criacao = $item ["hora_criacao"] == "00:00:00" ? '-' : date( "H:i:s", strtotime( $item ["hora_criacao"] ) );
			$hora_execucao = $item ["hora_execucao"] == "00:00:00" ? '-' : date( "H:i:s", strtotime( $item ["hora_execucao"] ) );
			$obersevacao = $item->observacao ? $item->observacao : '-';

			$comanda_item .= '
                <tr style="' . $table_hover . '">
                    <td style="text-align: center;">' . $item ["tipo_procedimento"] . ' </td>
                    <td style="text-align: center;">' . $item ["descricao_procedimento"] . ' </td>
                    <td style="text-align: center;">' . $data_criacao . '</td>
                    <td style="text-align: center;">' . $hora_criacao . '</td>
                    <td style="text-align: center;">' . $data_execucao . '</td>
                    <td style="text-align: center;">' . $item ["status_descricao"] . '</td>
                    <td style="text-align: center;">' . $hora_execucao . '</td>
                    <td style="text-align: center">' . mb_strtolower( $executor ) . ' </td>
                    <td style="text-align: center;">' . mb_strtolower( $item ["tipo_convenio"] ) . ' </td>
                    <td style="text-align: center;">R$ ' . str_replace( ".", ",", $item ["valor"] ) . ' </td>
                </tr>
                <tr style="' . $table_hover . '">
                    <td colspan="10" style="text-align: left;"><strong>Observação:</strong> ' . $obersevacao . ' </td>
                </tr>
            ';
		}

		$pagamento_item = "";
		// FOREACH PAGAMENTOS
		foreach ( $pagamentos as $key => $value ) {
			$key = $key++;
			$table_hover = !($key % 2) ? "background-color: #DCDCDC;" : "";
			$data_pagamento = $value ["data_criacao"] == "1900-01-01" ? '-' : date( "d/m/Y", strtotime( $value ["data_criacao"] ) );
			$hora_pagamento = $value ["hora_criacao"] == "00:00:00" ? '-' : date( "H:i:s", strtotime( $value ["hora_criacao"] ) );
			$obersevacao = $value ["observacao"] ? $value ["observacao"] : '-';

			$codauth_array = explode( "_", $value ["codauth"] );
			$codAuth = $codauth_array [0] == 'autocod' ? '-' : $value ["codauth"];

			$pagamento_item .= '
                <tr style="' . $table_hover . '">
                    <td style="text-align: center;">' . $value ["forma_pagamento"] . ' </td>
                    <td style="text-align: center;">' . $data_pagamento . ' </td>
                    <td style="text-align: center;">' . $hora_pagamento . '</td>
                    <td style="text-align: center;">' . $value ["executor"] . '</td>
                    <td style="text-align: center;">' . $value ["bandeira"] . '</td>
                    <td style="text-align: center;">' . $codAuth . '</td>
                    <td style="text-align: center;">' . $value ["maquineta"] . '</td>
                    <td style="text-align: center">' . $value ["chavepix"] . ' </td>
                    <td style="text-align: center;">' . $value ["dinheiro"] . ' </td>
                    <td style="text-align: center;">' . $value ["troco"] . ' </td>
                    <td style="text-align: center;">R$ ' . str_replace( ".", ",", $value ["valor"] ) . ' </td>
                </tr>
                <tr style="' . $table_hover . '">
                    <td colspan="12" style="text-align: left;"><strong>Observação:</strong> ' . $obersevacao . ' </td>
                </tr>
            ';
		}

		$estorno_item = "";
		$total_estornos = 0;
		// FOREACH ESTORNOS
		foreach ( $estornos as $key => $value ) {
			$key = $key++;
			$total_estornos = $total_estornos + $value ["valor"];
			$table_hover = !($key % 2) ? "background-color: #DCDCDC;" : "";
			$data_criacao = $value ["data_criacao"] == "1900-01-01" ? '-' : date( "d/m/Y", strtotime( $value ["data_criacao"] ) );
			$hora_criacao = $value ["hora_criacao"] == "00:00:00" ? '-' : date( "H:i:s", strtotime( $value ["hora_criacao"] ) );
			$obersevacao = $value ["observacao"] ? $value ["observacao"] : '-';

			$estorno_item .= '
                <tr style="' . $table_hover . '">
                    <td style="text-align: center;">' . $value ["item"] . ' </td>
                    <td style="text-align: center;">' . $value ["tipo_estorno"] . ' </td>
                    <td style="text-align: center;">' . $data_criacao . ' </td>
                    <td style="text-align: center;">' . $hora_criacao . '</td>
                    <td style="text-align: center;">' . $value ["executor"] . '</td>
                    <td style="text-align: center;">R$ ' . str_replace( ".", ",", $value ["valor"] ) . ' </td>
                </tr>
                <tr style="' . $table_hover . '">
                    <td colspan="12" style="text-align: left;"><strong>Observação:</strong> ' . $obersevacao . ' </td>
                </tr>
            ';
		}

		// ================================================================================================
		// BUSCA ENDEREÇO DA UNIDADE
		// ================================================================================================

		$sql_end_unidade = <<<SQL
		select distinct
		    p.id_endereco , pj.nome_fantasia ,u.descricao , c.id_unidade
		    , cp.logradouro , e.numero, cp.bairro , cp.cidade , cp.estado 
		    , cp.cep , p.telefone_1
		from 
		    pessoa p , pessoa_juridica pj , unidade u , comanda c, endereco e, cep cp  
		where 
		    c.id = :comanda_id:
		    and c.id_unidade = u.id 
		    and u.id_pessoa_juridica = pj.id 
		    and pj.id_pessoa  = p.id 
		    and p.id_endereco = e.id
		    and e.cep = cp.id
		SQL;
		$binds_end_unidade = [ 
			'comanda_id' => $id_comanda
		];
		$end_unidade = db_connect()->query( $sql_end_unidade, $binds_end_unidade )
			->getResultArray();

		// ================================================================================================
		// BUSCA ENDEREÇO DA CLIENTE
		// ================================================================================================

		$sql_end_cliente = <<<SQL
		    select distinct
		        p.id_endereco , pf.nome , pf.cpf 
		        , cp.logradouro , e.numero, cp.bairro , cp.cidade , cp.estado 
		        , cp.cep , p.telefone_1
		    from 
		        pessoa p , pessoa_fisica pf , unidade u , comanda c, endereco e, cep cp, cliente cl  
		    where 
		        c.id = :comanda_id:
		        and c.id_cliente =  cl.id 
		        and cl.id_pessoa  = p.id 
		        and pf.id_pessoa  = p.id 
		        and p.id_endereco = e.id
		        and e.cep = cp.id
		SQL;
		$binds_end_cliente = [ 
			'comanda_id' => $id_comanda
		];
		$end_cliente = db_connect()->query( $sql_end_cliente, $binds_end_cliente )
			->getResultArray();

		// ================================================================================================
		// FIM
		// ================================================================================================

		$html = '';
		$html .= '<html>';
		$html .= '<head> ';
		$html .= '<style> ';
		$html .= "
                <style> 
                    @page {
                        margin: 0cm 0cm;
                    }
                    body {
                        margin-top: 4cm;
                        margin-bottom: 2cm;
                    }
        
                    /** Define the header rules **/
                    header {
                        position: fixed;
                        top: -1cm;
                        left: 0cm;
                        right: 0cm;
                        height: 2cm;
                        text-align: center; 
                    }
                </style> 
        
        ";
		$html .= '</style> ';
		$html .= '</head> ';
		$html .= '<body> ';
		// Foreach para pegar comanda
		// $data_final = $comanda->data_fechada != "1900-01-01" ? date("d/m/Y", strtotime($comanda->data_fechada)) : "";
		$html .= '<header>';
		$html .= "<h2 style='text-align: center; font-size: 30px'> Comanda de Atendimento </h2>";
		$html .= '   <table border="0" width="100%">
                <tr>
                    <td><strong>' . $end_unidade [0] ["descricao"] . '</strong></td>
                </tr>
                <tr>    
                    <td>' . $end_unidade [0] ["logradouro"] . ', ' . $end_unidade [0] ["numero"] . ' - ' . $end_unidade [0] ["bairro"] . ' - ' .
				$end_unidade [0] ["cep"] . ' - ' . $end_unidade [0] ["cidade"] . '-' . $end_unidade [0] ["estado"] . '</td>
                </tr>
                <tr>    
                    <td> Telefone: ' . $end_unidade [0] ["telefone_1"] . ' - E-mail:</td>
                    <td> Data: ' . date( "d/m/Y" ) . ' </td>
                </tr>
                <tr>    
                    <td></td>
                    <td> Usuário: ' . $usuarioNome [0] ["nome"] . ' </td>
                </tr>
                
            </table>';
		$html .= '<hr>';
		$html .= '</header>';
		$html .= '<main>';
		$html .= '	<table style="font-size: 13px" border="0" width="100%">
                <tr>
                    <td><strong>ID COMANDA: </strong> ' . $comanda ["id"] . '</td>
                    <td><strong>Cliente: </strong>' . $end_cliente [0] ["nome"] . '</td>
                </tr>
                <tr>
                    <td><strong>CPF/CNPJ: </strong> ' . $end_cliente [0] ["cpf"] .
				'</td>
                    <td><strong>E-mail: </strong> </td>
                </tr>
                <tr>
                    <td><strong>Endereço:  </strong> ' . $end_cliente [0] ["logradouro"] . ', ' . $end_cliente [0] ["numero"] .
				'</td>
                    <td><strong>Bairro: </strong> ' . $end_cliente [0] ["bairro"] . '</td>
                </tr>
                <tr>
                    <td><strong>Cidade: </strong> ' . $end_cliente [0] ["cidade"] . '</td>
                    <td><strong>CEP: </strong> ' . $end_cliente [0] ["cep"] . '</td>
                    <td><strong>Tel: </strong> ' . $end_cliente [0] ["telefone_1"] . '</td>
                </tr>
            </table>';
		$html .= '<hr>';
		$html .= '<table style="font-size: 13px" border="0" width="100%">
                <tr>
                    <td colspan="2"><strong>Animal: </strong>' . $comanda ["nome_pet"] . '</td>
                    <td><strong>ID Pet: </strong>' . $comanda ["id_pet"] . '</td>
                    <td><strong>Sexo: </strong>' . $comanda ["sexo"] . '</td>
                    <td><strong>Raça: </strong>' . mb_strtolower( $comanda ["nome_raca"] ) . '</td>
                    <td><strong>Espécie: </strong>' . mb_strtolower( $comanda ["nome_especie"] ) . '</td>
                    <td><strong>Data de Nascimento: </strong>' . date( "d/m/Y", strtotime( $comanda ["data_nascimento"] ) ) .
				'</td>
                    <td colspan="2"><strong>Idade: </strong>' . $comanda ["idade"] .
				'</td>
                </tr>
                <tr>
                    
                </tr>
                <br>
                 <tr>
                    <td style="text-align: center"><strong>Tipo </strong></td>
                    <td style="text-align: center"><strong>Itens </strong></td>
                    <td style="text-align: center"><strong>Data Criação </strong></td>
                    <td style="text-align: center"><strong>Hora Criação </strong></td>
                    <td style="text-align: center"><strong>Execução</strong></td>
                    <td style="text-align: center"><strong>Status</strong></td>
                    <td style="text-align: center"><strong>Hora Execução</strong></td>
                    <td style="text-align: center"><strong>Executante</strong></td>
                    <td style="text-align: center"><strong>Convênio</strong></td>
                    <td style="text-align: center"><strong>Valor</strong></td>
                </tr>';

		$html .= $comanda_item;
		$html .= '</table>';

		$html .= '<br>';
		$html .= '<hr>';
		$html .= '<h2 style="text-align: center">Pagamentos</h2>';
		$html .= '<table style="font-size: 13px" border="0" width="100%">
                 <tr>
                    <td style="text-align: center"><strong>Tipo de Pagamento </strong></td>
                    <td style="text-align: center"><strong>Data Pagamento </strong></td>
                    <td style="text-align: center"><strong>Hora Pagamento </strong></td>
                    <td style="text-align: center"><strong>Executante </strong></td>
                    <td style="text-align: center"><strong>Bandeira </strong></td>
                    <td style="text-align: center"><strong>Cod Auth</strong></td>
                    <td style="text-align: center"><strong>Maquineta</strong></td>
                    <td style="text-align: center"><strong>Chave Pix</strong></td>
                    <td style="text-align: center"><strong>Dinheiro</strong></td>
                    <td style="text-align: center"><strong>Troco</strong></td>
                    <td style="text-align: center"><strong>Valor</strong></td>
                </tr>';
		$html .= $pagamento_item;
		$html .= '
            <tr>
                <td colspan="12"><hr></td>
            </tr>
        ';
		$html .= '<tr>
                    <td style="text-align: center"><strong></strong></td>
                    <td style="text-align: center"><strong></strong></td>
                    <td style="text-align: center"><strong></strong></td>
                    <td style="text-align: center"><strong></strong></td>
                    <td style="text-align: center"><strong></strong></td>
                    <td style="text-align: center"><strong></strong></td>
                    <td style="text-align: center"><strong>Valor Restante</strong></td>
                    <td style="text-align: center"><strong>' . $total_restante .
				'</strong></td>
                    <td style="text-align: center"><strong></strong></td>
                    <td style="text-align: center"><strong>Total Pago</strong></td>
                    <td style="text-align: center"><strong>' . $total_pago . '</strong></td>
                </tr>';
		$html .= '</table>';

		$html .= '<br>';
		$html .= '<h2 style="text-align: center">Estornos</h2>';
		$html .= '<table style="font-size: 13px" border="0" width="100%">
                 <tr>
                    <td style="text-align: center"><strong>Item </strong></td>
                    <td style="text-align: center"><strong>Tipo de Estorno </strong></td>
                    <td style="text-align: center"><strong>Data Criação </strong></td>
                    <td style="text-align: center"><strong>Hora Criação </strong></td>
                    <td style="text-align: center"><strong>Executante </strong></td>
                    <td style="text-align: center"><strong>Valor </strong></td>
                </tr>';
		$html .= $estorno_item;
		$html .= '
            <tr>
                <td colspan="12"><hr></td>
            </tr>
        ';
		$html .= '<tr>
                    <td style="text-align: center"><strong></strong></td>
                    <td style="text-align: center"><strong></strong></td>
                    <td style="text-align: center"><strong></strong></td>
                    <td style="text-align: center"><strong>Total Estorno</strong></td>
                    <td style="text-align: center"><strong>R$' . number_format( $total_estornos, 2, ",", "." ) . '</strong></td>
                </tr>';
		$html .= '</table>';

		$html .= '</main>';
		$html .= '</html>';

		$dompdf = new Dompdf();
		$dompdf->loadHtml( $html );
		$dompdf->setPaper( 'A4', 'landscape' );
		$dompdf->render();
		$dompdf->stream( 'relatorio.pdf' );
		exit( 0 );

	}

	// GERA RELATORIO DE COMANDA COMO TODOS ITENS, EXLUÍDOS PAGOS E NÃO PAGOS - PDF
	public function gerarRelatorioComandaComItemExcluido($comanda_id) {

		$comanda = $this->getComandaById( $comanda_id );

		$sql_usuarioLogado = <<<SQL
		    select pessoa_fisica.nome
		    from usuario, pessoa_fisica
		    where usuario.id_pessoa = pessoa_fisica.id_pessoa
		      and usuario.id = :id_usuario:
		SQL;
		$binds = [ 
			'id_usuario' => UsuarioLogado::getUsuarioId()
		];
		$usuarioNome = db_connect()->query( $sql_usuarioLogado, $binds )
			->getResultArray();

		$sql = <<<SQL
			select distinct
				cmi.id, cmi.id_comanda, cmi.comanda_item_status_id, cmi.valor, cmis.descricao
			    , cmi.data_atualizacao as data_pagamento, cmi.hora_atualizacao as hora_pagamento
				, cmi.id_forma_pagamento,cmi.codauth,cmi.bandeira,cmi.parcelas, cmi.observacao
				, ( case
						when cmi.id_forma_pagamento is NULL then '-'
						else (select descricao from forma_pagamento where id = cmi.id_forma_pagamento)
					end ) as forma_pagamento
				, cmi.id_convenio, cnv.descricao, tc.descricao as tipo_convenio , cmi.id_procedimento, pr.descricao as descricao_procedimento
				, tpr.id as id_tipo_procedimento,tpr.descricao as descricao_tipo_procedimento, cmi.id_requisicao_procedimento, rqp.status_id, rqps.descricao
				, rqp.id_medico
				, ( case
						when rqp.id_medico is NULL then '-'
						else (select nome from pessoa_fisica  
								where id_pessoa = (select id_pessoa from profissional 
													where id = ( select id_profissional from medico 
																	where id = rqp.id_medico))
							)
					end ) as nome_medico
				, rqp.usuario_executor
				, ( case
						when rqp.usuario_executor is NULL then '-'
						else (select nome from pessoa_fisica  
								where id_pessoa = ( select id_pessoa from usuario 
														where id = rqp.usuario_executor)
							)
					end ) as nome_executor
				, rqp.data_requisicao as data_criacao, rqp.hora_requisicao as hora_criacao
				, rqp.data_execucao, rqp.hora_execucao
			from
				comanda cm, comanda_item cmi, comanda_item_status cmis, convenio cnv
				, tipo_convenio tc, procedimento pr, tipo_procedimento tpr, usuario usr
				, forma_pagamento frp, requisicao_procedimento rqp , requisicao_procedimento_status rqps
			where
				cmi.id_comanda = :comanda_id:
				and cmi.id_comanda = cm.id
				and cmi.comanda_item_status_id = cmis.id
				and cmi.id_convenio = cnv.id
				and cnv.id_tipo_convenio = tc.id
				and cmi.id_procedimento = pr.id
				and pr.id_tipo_procedimento = tpr.id
				and cmi.id_requisicao_procedimento = rqp.id
				and rqp.status_id = rqps.id
		SQL;
		$binds = [ 
			'comanda_id' => $comanda_id
		];
		$comandaItem = db_connect()->query( $sql, $binds )
			->getResultArray();

		$comanda_item = "";
		foreach ( $comandaItem as $key => $item ) {
			$key = $key++;
			$table_hover = $key % 2 ? "background-color: #DCDCDC;" : "";
			$executor = $item ["id_tipo_procedimento"] == 2 || $item ["id_tipo_procedimento"] == 3 ? $item ["nome_medico"] : $item ["nome_executor"];
			$data_execucao = $item ["data_execucao"] == "1900-01-01" ? '-' : date( "d/m/Y", strtotime( $item ["data_execucao"] ) );
			$data_criacao = $item ["data_criacao"] == "1900-01-01" ? '-' : date( "d/m/Y", strtotime( $item ["data_criacao"] ) );
			$data_pagamento = $item ["data_pagamento"] == "1900-01-01" ? '-' : date( "d/m/Y", strtotime( $item ["data_pagamento"] ) );
			$hora_pagamento = $item ["hora_pagamento"] == "00:00:00" ? '-' : date( "H:i:s", strtotime( $item ["hora_pagamento"] ) );
			$obersevacao = $item->observacao ? $item->observacao : '-';

			$comanda_item .= '
                <tr style="' . $table_hover . '">
                    <td style="text-align: center;">' . $item ["descricao_tipo_procedimento"] . ' </td>
                    <td style="text-align: center;">' . $item ["descricao_procedimento"] . ' </td>
                    <td style="text-align: center;">' . $data_criacao . '</td>
                    <td style="text-align: center;">' . $item ["hora_criacao"] . '</td>
                    <td style="text-align: center;">' . $data_execucao . '</td>
                    <td style="text-align: center;">' . $item ["hora_execucao"] . '</td>
                    <td style="text-align: center">' . mb_strtolower( $executor ) . ' </td>
                    <td style="text-align: center">' . mb_strtolower( $item ["forma_pagamento"] ) . ' </td>
                    <td style="text-align: center">' . $data_pagamento . ' </td>
                    <td style="text-align: center">' . $hora_pagamento . ' </td>
                    <td style="text-align: center;">' . mb_strtolower( $item ["bandeira"] ) . ' </td>
                    <td style="text-align: center;">' . $item ["parcelas"] . ' </td>
                    <td style="text-align: center;">' . $item ["codauth"] . ' </td>
                    <td style="text-align: center;">' . mb_strtolower( $item ["tipo_convenio"] ) . ' </td>
                    <td style="text-align: center;">R$ ' . str_replace( ".", ",", $item ["valor"] ) . ' </td>
                </tr>
                <tr style="' . $table_hover . '">
                    <td colspan="15" style="text-align: left;"><strong>Observação:</strong> ' . $obersevacao . ' </td>
                </tr>
            ';
		}

		// ================================================================================================
		// FIM
		// ================================================================================================

		$data_final = $comanda ['data_fechada'] != "1900-01-01" ? date( "d/m/Y", strtotime( $comanda ['->data_fechada'] ) ) : "";

		$html = '';
		$html .= '<html>';
		$html .= '<head> ';
		$html .= '<style> ';
		$html .= "
                <style> 
                    @page {
                        margin: 0cm 0cm;
                    }
                    body {
                        margin-top: 3cm;
                        margin-bottom: 2cm;
                    }
        
                    /** Define the header rules **/
                    header {
                        position: fixed;
                        top: -1cm;
                        left: 0cm;
                        right: 0cm;
                        height: 2cm;
                        text-align: center; 
                    }
                </style> 
        
        ";
		$html .= '</style> ';
		$html .= '</head> ';
		$html .= '<body> ';
		// Foreach para pegar comanda
		// $data_final = $comanda->data_fechada != "1900-01-01" ? date("d/m/Y", strtotime($comanda['data_fechada'])) : "";
		$html .= '<header>';
		$html .= "<h2 style='text-align: center; font-size: 30px'> Relatório de comanda </h2>";
		$html .= '	<table border="0" width="100%">
                <tr>
                    <td>Data do Sistema: ' . date( "d/m/Y" ) . '</td>
                </tr>
                <tr>
                    <td> Usuário: ' . $usuarioNome [0] ["nome"] . ' </td>
                </tr>
            </table>';
		$html .= '<hr>';
		$html .= '</header>';
		$html .= '<main>';
		$html .= '<table style="font-size: 13px" border="0" width="100%">
                <tr>
                    <td colspan="2"><strong>Código: </strong> ' . $comanda ["id"] . '</td>
                    <td colspan="3"><strong>Aberta em: </strong>' . date( "d/m/Y", strtotime( $comanda ["data_criada"] ) ) .
				'</td>
                    <td colspan="2"><strong>Fechada em: </strong> ' . $data_final . '</td>
                    <td colspan="2"><strong>Tels: </strong> ' . $comanda ["tel_cliente"] . '</td>
                </tr>
                <tr>
                    <td colspan="6"><strong>Cliente: </strong> ' . $comanda ["id_cliente"] . ' - ' . $comanda ["nome_cliente"] .
				'</td>
                </tr>
                <tr>
                    <td colspan="3"><strong>Pet: </strong> ' . $comanda ["id_pet"] . ' - ' . $comanda ["nome_pet"] .
				'</td>
                </tr>
                <br>
                <tr>
                    
                </tr>
                <br>
                 <tr>
                    <td style="text-align: center" width="50px"><strong>Tipo </strong></td>
                    <td style="text-align: center" width="100px"><strong>Itens </strong></td>
                    <td style="text-align: center"><strong>Data Criação </strong></td>
                    <td style="text-align: center"><strong>Hora Criação </strong></td>
                    <td style="text-align: center" width="50px"><strong>Execução</strong></td>
                    <td style="text-align: center""><strong>Hora Execução</strong></td>
                    <td style="text-align: center"><strong>Executante</strong></td>
                    <td style="text-align: center"><strong>Forma de pagamento</strong></td>
                    <td style="text-align: center"><strong>Data de pagamento</strong></td>
                    <td style="text-align: center"><strong>Hora de pagamento</strong></td>
                    <td style="text-align: center"><strong>Bandeira</strong></td>
                    <td style="text-align: center"><strong>Parcelas</strong></td>
                    <td style="text-align: center"><strong>Cod Autori</strong></td>
                    <td style="text-align: center"><strong>Convênio</strong></td>
                    <td style="text-align: center"><strong>Valor</strong></td>
                </tr>
                ' . $comanda_item .
				'
                <tr>
                    <td><strong> </strong></td>
                    <td><strong></strong></td>
                    <td><strong></strong></td>
                    <td><strong></strong></td>
                    <td><strong></strong></td>
                    <td><strong></strong></td>
                    <td><strong></strong></td>
                    <td><strong></strong></td>
                    <td><strong></strong></td>
                    <td><strong></strong></td>
                    <td colspan="2"><strong>Valor Total</strong></td>
                    <td><strong></strong></td>
                    <td colspan="2" style="text-align: center">R$ ' . str_replace( ".", ",", $comanda ['valor_total'] ) .
				'</td>
                </tr>
                <tr>
                    <td><strong> </strong></td>
                    <td><strong> </strong></td>
                    <td><strong></strong></td>
                    <td><strong></strong></td>
                    <td><strong></strong></td>
                    <td><strong></strong></td>
                    <td><strong></strong></td>
                    <td><strong></strong></td>
                    <td><strong></strong></td>
                    <td><strong></strong></td>
                    <td colspan="2"><strong>Valor Pago</strong></td>
                    <td><strong></strong></td>
                    <td colspan="2" style="text-align: center">R$ ' . str_replace( ".", ",", $comanda ['valor_pago'] ) . '</td>
                </tr>';
		$html .= '</table>';
		$html .= '</main>';
		$html .= '</html>';

		$dompdf = new Dompdf();
		$dompdf->loadHtml( $html );
		$dompdf->setPaper( 'A4', 'landscape' );
		$dompdf->render();
		$dompdf->stream( 'realtorio.pdf' );
		exit( 0 );

	}

	// NEW RELATORIO DE COMANDA COMO TODOS ITENS, EXLUÍDOS PAGOS E NÃO PAGOS - PDF
	public function gerarNewRelatorioComandaComItemExcluido($comanda_id) {

		$comanda = $this->getComandaById( $comanda_id );

		$sql_usuarioLogado = <<<SQL
		    select pessoa_fisica.nome
		    from usuario, pessoa_fisica
		    where usuario.id_pessoa = pessoa_fisica.id_pessoa
		      and usuario.id = :id_usuario:
		SQL;
		$binds = [ 
			'id_usuario' => UsuarioLogado::getUsuarioId()
		];
		$usuarioNome = db_connect()->query( $sql_usuarioLogado, $binds )
			->getResultArray();

		$comandaItem = $this->getComandaItemGerais( $comanda_id );
		$pagamentos = $this->getPagamentosPorComanda( $comanda_id );

		// =============================================================================================
		// Query para saber quanto faltar ser pago na comanda
		$query_total_pago = <<<SQL
		select
		    sum(valor) as total
		from
		    comanda_item
		where
		    comanda_item_status_id = 2
		    and id_comanda = :comanda_id:
		SQL;
		$binds = [ 
			'comanda_id' => $comanda_id
		];
		$total_pago = db_connect()->query( $query_total_pago, $binds )
			->getResultArray();
		$total_pago = !empty( $total_pago [0] ['total'] ) ? 'R$' . number_format( $total_pago [0] ['total'], 2, ",", "." ) : ' - ';

		// =============================================================================================
		// Query para total pago na comanda
		$query_total_restante = <<<SQL
		select
		    sum(valor) as total
		from
		    comanda_item
		where
		    comanda_item_status_id = 1
		    and id_comanda = :comanda_id:
		SQL;
		$binds = [ 
			'comanda_id' => $comanda_id
		];
		$total_restante = db_connect()->query( $query_total_restante, $binds )
			->getResultArray();

		$total_restante = !empty( $total_restante [0] ['total'] ) ? 'R$' . number_format( $total_restante [0] ['total'], 2, ",", "." ) : ' - ';

		// =============================================================================================
		// Query para estornos
		$query_estornos = <<<SQL
		select
		    ext.id_tipo_extorno, ext.valor, ext.data_criacao, ext.hora_criacao, ext.observacao,
		    tpe.descricao as tipo_estorno, pf.nome as executor
		from
		    extorno ext, tipo_extorno tpe, usuario usr, pessoa_fisica pf
		where 
		    ext.id_tipo_extorno = tpe.id
		  and ext.criado_por = usr.id
		  and usr.id_pessoa = pf.id_pessoa
		  and ext.id_comanda = :comanda_id:
		SQL;
		$binds = [ 
			'comanda_id' => $comanda_id
		];
		$estornos = db_connect()->query( $query_estornos, $binds )
			->getResultArray();

		// =============================================================================================
		// FIM

		$comanda_item = "";

		// FOREACH COMANDA ITENS
		foreach ( $comandaItem as $key => $item ) {
			$key = $key++;
			$table_hover = $key % 2 ? "background-color: #DCDCDC;" : "";

			if ($item ["item_status"] == 3) {
				$table_hover = "background-color: #CA6048; color: #FFF; font-weight: bold";
			} else {
				$table_hover = $key % 2 ? "background-color: #DCDCDC;" : "";
			}

			$executor = $item ["id_tipo_procedimento"] == 2 || $item ["id_tipo_procedimento"] == 3 ? $item ["nome_medico"] : $item ["nome_executor"];
			$data_execucao = $item ["data_execucao"] == "1900-01-01" ? '-' : date( "d/m/Y", strtotime( $item ["data_execucao"] ) );
			$data_criacao = $item ["data_criacao"] == "1900-01-01" ? '-' : date( "d/m/Y", strtotime( $item ["data_criacao"] ) );
			$hora_criacao = $item ["hora_criacao"] == "00:00:00" ? '-' : date( "H:i:s", strtotime( $item ["hora_criacao"] ) );
			$hora_execucao = $item ["hora_execucao"] == "00:00:00" ? '-' : date( "H:i:s", strtotime( $item ["hora_execucao"] ) );
			$obersevacao = $item->observacao ? $item->observacao : '-';

			$comanda_item .= '
                <tr style="' . $table_hover . '">
                    <td style="text-align: center;">' . $item ["tipo_procedimento"] . ' </td>
                    <td style="text-align: center;">' . $item ["descricao_procedimento"] . ' </td>
                    <td style="text-align: center;">' . $data_criacao . '</td>
                    <td style="text-align: center;">' . $hora_criacao . '</td>
                    <td style="text-align: center;">' . $data_execucao . '</td>
                    <td style="text-align: center;">' . $item ["status_descricao"] . '</td>
                    <td style="text-align: center;">' . $hora_execucao . '</td>
                    <td style="text-align: center">' . mb_strtolower( $executor ) . ' </td>
                    <td style="text-align: center;">' . mb_strtolower( $item ["tipo_convenio"] ) . ' </td>
                    <td style="text-align: center;">R$ ' . str_replace( ".", ",", $item ["valor"] ) . ' </td>
                </tr>
                <tr style="' . $table_hover . '">
                    <td colspan="12" style="text-align: left;"><strong>Observação:</strong> ' . $obersevacao . ' </td>
                </tr>
            ';
		}

		$pagamento_item = "";
		// FOREACH PAGAMENTOS
		foreach ( $pagamentos as $key => $value ) {
			$key = $key++;
			$table_hover = $key % 2 ? "background-color: #DCDCDC;" : "";
			$data_pagamento = $value ["data_criacao"] == "1900-01-01" ? '-' : date( "d/m/Y", strtotime( $value ["data_criacao"] ) );
			$hora_pagamento = $value ["hora_criacao"] == "00:00:00" ? '-' : date( "H:i:s", strtotime( $value ["hora_criacao"] ) );
			$obersevacao = $value ["observacao"] ? $value ["observacao"] : '-';

			$codauth_array = explode( "_", $value ["codauth"] );
			$codAuth = $codauth_array [0] == 'autocod' ? '-' : $value ["codauth"];

			$pagamento_item .= '
                <tr style="' . $table_hover . '">
                    <td style="text-align: center;">' . $value ["forma_pagamento"] . ' </td>
                    <td style="text-align: center;">' . $data_pagamento . ' </td>
                    <td style="text-align: center;">' . $hora_pagamento . '</td>
                    <td style="text-align: center;">' . $value ["executor"] . '</td>
                    <td style="text-align: center;">' . $value ["bandeira"] . '</td>
                    <td style="text-align: center;">' . $codAuth . '</td>
                    <td style="text-align: center;">' . $value ["maquineta"] . '</td>
                    <td style="text-align: center">' . $value ["chavepix"] . ' </td>
                    <td style="text-align: center;">' . $value ["dinheiro"] . ' </td>
                    <td style="text-align: center;">' . $value ["troco"] . ' </td>
                    <td style="text-align: center;">R$ ' . str_replace( ".", ",", $value ["valor"] ) . ' </td>
                </tr>
                <tr style="' . $table_hover . '">
                    <td colspan="12" style="text-align: left;"><strong>Observação:</strong> ' . $obersevacao . ' </td>
                </tr>
            ';
		}

		$estorno_item = "";
		$total_estornos = 0;
		// FOREACH ESTORNOS
		foreach ( $estornos as $key => $value ) {
			$key = $key++;
			$total_estornos = $total_estornos + $value ["valor"];
			$table_hover = $key % 2 ? "background-color: #DCDCDC;" : "";
			$data_criacao = $value ["data_criacao"] == "1900-01-01" ? '-' : date( "d/m/Y", strtotime( $value ["data_criacao"] ) );
			$hora_criacao = $value ["hora_criacao"] == "00:00:00" ? '-' : date( "H:i:s", strtotime( $value ["hora_criacao"] ) );
			$obersevacao = $value ["observacao"] ? $value ["observacao"] : '-';

			$estorno_item .= '
                <tr style="' . $table_hover . '">
                    <td style="text-align: center;">' . $value ["tipo_estorno"] . ' </td>
                    <td style="text-align: center;">' . $data_criacao . ' </td>
                    <td style="text-align: center;">' . $hora_criacao . '</td>
                    <td style="text-align: center;">' . $value ["executor"] . '</td>
                    <td style="text-align: center;">R$ ' . str_replace( ".", ",", $value ["valor"] ) . ' </td>
                </tr>
                <tr style="' . $table_hover . '">
                    <td colspan="12" style="text-align: left;"><strong>Observação:</strong> ' . $obersevacao . ' </td>
                </tr>
            ';
		}

		// ================================================================================================
		// FIM
		// ================================================================================================

		$data_final = $comanda ['data_fechada'] != "1900-01-01" ? date( "d/m/Y", strtotime( $comanda ['->data_fechada'] ) ) : "";

		$html = '';
		$html .= '<html>';
		$html .= '<head> ';
		$html .= '<style> ';
		$html .= "
                <style> 
                    @page {
                        margin: 0cm 0cm;
                    }
                    body {
                        margin-top: 3cm;
                        margin-bottom: 2cm;
                    }
        
                    /** Define the header rules **/
                    header {
                        position: fixed;
                        top: -1cm;
                        left: 0cm;
                        right: 0cm;
                        height: 2cm;
                        text-align: center; 
                    }
                </style> 
        
        ";
		$html .= '</style> ';
		$html .= '</head> ';
		$html .= '<body> ';
		// Foreach para pegar comanda
		// $data_final = $comanda->data_fechada != "1900-01-01" ? date("d/m/Y", strtotime($comanda['data_fechada'])) : "";
		$html .= '<header>';
		$html .= "<h2 style='text-align: center; font-size: 30px'> Relatório de comanda </h2>";
		$html .= '	<table border="0" width="100%">
                <tr>
                    <td>Data do Sistema: ' . date( "d/m/Y" ) . '</td>
                </tr>
                <tr>
                    <td> Usuário: ' . $usuarioNome [0] ["nome"] . ' </td>
                </tr>
            </table>';
		$html .= '<hr>';
		$html .= '</header>';
		$html .= '<main>';
		$html .= '<table style="font-size: 13px" border="0" width="100%">
                <tr>
                    <td colspan="2"><strong>Código: </strong> ' . $comanda ["id"] . '</td>
                    <td colspan="3"><strong>Aberta em: </strong>' . date( "d/m/Y", strtotime( $comanda ["data_criada"] ) ) .
				'</td>
                    <td colspan="2"><strong>Fechada em: </strong> ' . $data_final . '</td>
                    <td colspan="2"><strong>Tels: </strong> ' . $comanda ["tel_cliente"] . '</td>
                </tr>
                <tr>
                    <td colspan="6"><strong>Cliente: </strong> ' . $comanda ["id_cliente"] . ' - ' . $comanda ["nome_cliente"] .
				'</td>
                </tr>
                <tr>
                    <td colspan="3"><strong>Pet: </strong> ' . $comanda ["id_pet"] . ' - ' . $comanda ["nome_pet"] .
				'</td>
                </tr>
                <br>
                <tr>
                    
                </tr>
                <br>
                 <tr>
                    <td style="text-align: center"><strong>Tipo </strong></td>
                    <td style="text-align: center"><strong>Itens </strong></td>
                    <td style="text-align: center"><strong>Data Criação </strong></td>
                    <td style="text-align: center"><strong>Hora Criação </strong></td>
                    <td style="text-align: center"><strong>Execução</strong></td>
                    <td style="text-align: center"><strong>Status</strong></td>
                    <td style="text-align: center"><strong>Hora Execução</strong></td>
                    <td style="text-align: center"><strong>Executante</strong></td>
                    <td style="text-align: center"><strong>Convênio</strong></td>
                    <td style="text-align: center"><strong>Valor</strong></td>
                </tr>';
		$html .= $comanda_item;
		$html .= '</table>';

		$html .= '<br>';
		$html .= '<h2>Pagamentos</h2>';
		$html .= '<table style="font-size: 13px" border="0" width="100%">
                 <tr>
                    <td style="text-align: center"><strong>Tipo de Pagamento </strong></td>
                    <td style="text-align: center"><strong>Data Pagamento </strong></td>
                    <td style="text-align: center"><strong>Hora Pagamento </strong></td>
                    <td style="text-align: center"><strong>Executante </strong></td>
                    <td style="text-align: center"><strong>Bandeira </strong></td>
                    <td style="text-align: center"><strong>Cod Auth</strong></td>
                    <td style="text-align: center"><strong>Maquineta</strong></td>
                    <td style="text-align: center"><strong>Chave Pix</strong></td>
                    <td style="text-align: center"><strong>Dinheiro</strong></td>
                    <td style="text-align: center"><strong>Troco</strong></td>
                    <td style="text-align: center"><strong>Valor</strong></td>
                </tr>';
		$html .= $pagamento_item;
		$html .= '
            <tr>
                <td colspan="12"><<hr></td>
            </tr>
        ';
		$html .= '<tr>
                    <td style="text-align: center"><strong></strong></td>
                    <td style="text-align: center"><strong></strong></td>
                    <td style="text-align: center"><strong></strong></td>
                    <td style="text-align: center"><strong></strong></td>
                    <td style="text-align: center"><strong></strong></td>
                    <td style="text-align: center"><strong></strong></td>
                    <td style="text-align: center"><strong>Valor Restante</strong></td>
                    <td style="text-align: center"><strong>' . $total_restante .
				'</strong></td>
                    <td style="text-align: center"><strong></strong></td>
                    <td style="text-align: center"><strong>Total Pago</strong></td>
                    <td style="text-align: center"><strong>' . $total_pago . '</strong></td>
                </tr>';
		$html .= '</table>';

		$html .= '<br>';
		$html .= '<h2>Estornos</h2>';
		$html .= '<table style="font-size: 13px" border="0" width="100%">
                 <tr>
                    <td style="text-align: center"><strong>Tipo de Estorno </strong></td>
                    <td style="text-align: center"><strong>Data Criação </strong></td>
                    <td style="text-align: center"><strong>Hora Criação </strong></td>
                    <td style="text-align: center"><strong>Executante </strong></td>
                    <td style="text-align: center"><strong>Valor </strong></td>
                </tr>';
		$html .= $estorno_item;
		$html .= '
            <tr>
                <td colspan="12"><hr></td>
            </tr>
        ';
		$html .= '<tr>
                    <td style="text-align: center"><strong></strong></td>
                    <td style="text-align: center"><strong></strong></td>
                    <td style="text-align: center"><strong></strong></td>
                    <td style="text-align: center"><strong>Total Estorno</strong></td>
                    <td style="text-align: center"><strong>R$' . number_format( $total_estornos, 2, ",", "." ) . '</strong></td>
                </tr>';
		$html .= '</table>';

		$html .= '</main>';
		$html .= '</html>';

		$dompdf = new Dompdf();
		$dompdf->loadHtml( $html );
		$dompdf->setPaper( 'A4', 'landscape' );
		$dompdf->render();
		$dompdf->stream( 'realtorio.pdf' );
		exit( 0 );

	}

	// GERA RELATORIO DE COMANDA COMO TODOS ITENS, EXLUÍDOS PAGOS E NÃO PAGOS - EXCEL
	public function gerarPlanilhaFullById($comanda_id) {

		$sql = <<<SQL
			select distinct
				cmi.id, cmi.id_comanda, cmi.comanda_item_status_id, cmi.valor, cmis.descricao
			    , cmi.data_atualizacao as data_pagamento, cmi.hora_atualizacao as hora_pagamento
				, cmi.id_forma_pagamento,cmi.codauth,cmi.bandeira,cmi.parcelas, cmi.observacao
				, ( case
						when cmi.id_forma_pagamento is NULL then '-'
						else (select descricao from forma_pagamento where id = cmi.id_forma_pagamento)
					end ) as forma_pagamento
				, cmi.id_convenio, cnv.descricao, tc.descricao as tipo_convenio , cmi.id_procedimento, pr.descricao as descricao_procedimento
				, tpr.id as id_tipo_procedimento,tpr.descricao as descricao_tipo_procedimento, cmi.id_requisicao_procedimento, rqp.status_id, rqps.descricao
				, rqp.id_medico
				, ( case
						when rqp.id_medico is NULL then '-'
						else (select nome from pessoa_fisica  
								where id_pessoa = (select id_pessoa from profissional 
													where id = ( select id_profissional from medico 
																	where id = rqp.id_medico))
							)
					end ) as nome_medico
				, rqp.usuario_executor
				, ( case
						when rqp.usuario_executor is NULL then '-'
						else (select nome from pessoa_fisica  
								where id_pessoa = ( select id_pessoa from usuario 
														where id = rqp.usuario_executor)
							)
					end ) as nome_executor
				, rqp.data_requisicao as data_criacao, rqp.hora_requisicao as hora_criacao
				, rqp.data_execucao, rqp.hora_execucao
			from
				comanda cm, comanda_item cmi, comanda_item_status cmis, convenio cnv
				, tipo_convenio tc, procedimento pr, tipo_procedimento tpr, usuario usr
				, forma_pagamento frp, requisicao_procedimento rqp , requisicao_procedimento_status rqps
			where
				cmi.id_comanda = :comanda_id:
				and cmi.id_comanda = cm.id
				and cmi.comanda_item_status_id = cmis.id
				and cmi.id_convenio = cnv.id
				and cnv.id_tipo_convenio = tc.id
				and cmi.id_procedimento = pr.id
				and pr.id_tipo_procedimento = tpr.id
				and cmi.id_requisicao_procedimento = rqp.id
				and rqp.status_id = rqps.id
		SQL;
		$binds = [ 
			'comanda_id' => $comanda_id
		];
		$comandaItem = db_connect()->query( $sql, $binds )
			->getResultArray();
		$dados = [ 
			'itens' => $comandaItem
		];

		$this->geraRelatorioEmExcel( $dados, 1 );

		// //======================================================================
		// header('Content-Type: application/vnd.ms-excel');
		// header('Content-Disposition: attachment;filename="testeabc.xlsx"');
		// $spreadsheet = new Spreadsheet();
		// $sheet = $spreadsheet->getActiveSheet();
		//
		// $col_position = 'A1';
		// $cols = [
		// "Tipo",
		// "Itens",
		// "Data Criação",
		// "Hora Criação",
		// "Execução",
		// "Hora Execução",
		// "Executante",
		// "Forma de Pagamento",
		// "Data de Pagamento",
		// "Hora de Pagamento",
		// "Bandeira",
		// "Parcelas",
		// "Cod Autor",
		// "Convênio",
		// "Valor",
		// "Observação"
		// ];
		//
		// $sheet->fromArray($cols, null, 'A1');
		//
		// $row_start = 2;
		//
		// foreach ($comandaItem as $value) {
		// $executor = $value["id_tipo_procedimento"] == 2 || $value["id_tipo_procedimento"] == 3 ? $value["nome_medico"] : $value["nome_executor"];
		// $data_execucao = $value["data_execucao"] == "1900-01-01" ? '-' : date("d/m/Y", strtotime($value["data_execucao"]));
		// $data_criacao = $value["data_criacao"] == "1900-01-01" ? '-' : date("d/m/Y", strtotime($value["data_criacao"]));
		// $data_pagamento = $value["data_pagamento"] == "1900-01-01" ? '-' : date("d/m/Y", strtotime($value["data_pagamento"]));
		// $hora_pagamento = $value["hora_pagamento"] == "00:00:00" ? '-' : date("H:i:s", strtotime($value["hora_pagamento"]));
		// $obersevacao = $value["observacao"] ? $value["observacao"] : '-';
		//
		// $array_row[] = $value["descricao_tipo_procedimento"];
		// $array_row[] = $value["descricao_procedimento"];
		// $array_row[] = $data_criacao;
		// $array_row[] = $value["hora_criacao"];
		// $array_row[] = $data_execucao;
		// $array_row[] = $value["hora_execucao"];
		// $array_row[] = $executor;
		// $array_row[] = $value["forma_pagamento"];
		// $array_row[] = $data_pagamento;
		// $array_row[] = $hora_pagamento;
		// $array_row[] = $value["bandeira"];
		// $array_row[] = $value["parcelas"];
		// $array_row[] = $value["codauth"];
		// $array_row[] = $value["tipo_convenio"];
		// $array_row[] = $value["valor"];
		// $array_row[] = $obersevacao;
		//
		// $sheet->fromArray($array_row, null, 'A'.$row_start);
		// unset($array_row);
		// $row_start++;
		// }
		//
		// $writer = new Xlsx($spreadsheet);
		// $writer->save('php://output');
		// exit(0);
	}

	// GERA RELATORIO UNICA COMANDA - FRONT
	public function gerarComandaById($comanda_id) {

		$sql_comanda = <<<SQL
		select distinct
		        comanda.id, comanda.data_criada, comanda.hora_criada, comanda.criado_por, pf1.nome nome_criador,
		        comanda.data_fechada, comanda.hora_fechada, comanda.fechado_por,
		        (   select pessoa_fisica.nome
		            from pessoa_fisica , usuario
		            where
		                usuario.id = comanda.fechado_por
		                and usuario.id_pessoa = pessoa_fisica.id_pessoa
		        ) as nome_fechado,
		        comanda.id_cliente, pf2.nome nome_cliente, comanda.id_pet, pet.nome nome_pet,comanda.id_unidade, unidade.descricao,
		        (select sum(valor) as total from comanda_item ci  where ci.id_comanda  = comanda.id) as valor_total,
		        (select sum(valor) as total_pago from comanda_item ci  where ci.id_comanda  = comanda.id and comanda_item_status_id = 2) as valor_pago,
				( select count(*) total 	
					from comanda_item ci, requisicao_procedimento rp, convenio_procedimento cp, convenio c , tipo_convenio tc
					where
						ci.id_comanda = comanda.id and ci.comanda_item_status_id in (1,2) 
						and ci.id_requisicao_procedimento = rp.id and rp.id_convenio_procedimento = cp.id 
						and cp.id_convenio = c.id and c.id_tipo_convenio = tc.id and tc.id  = 1
				) as procedimentos_publicos 
		    from
		        comanda, cliente,  pessoa_fisica as pf1, pessoa_fisica as pf2,unidade, usuario us, pet
		    where
		        us.id = comanda.criado_por
		        and comanda.id = :comanda_id:
		        and us.id_pessoa = pf1.id_pessoa
		        and comanda.id_cliente = cliente.id
		        and cliente.id_pessoa = pf2.id_pessoa
		        and comanda.id_pet = pet.id
		        and comanda.id_unidade = unidade.id
		SQL;
		$binds = [ 
			'comanda_id' => $comanda_id
		];
		$query = db_connect()->query( $sql_comanda, $binds )
			->getResult();

		return $this->response->setStatusCode( 200 )
			->setJSON( [ 
			'message' => 'Dados encontrados com sucesso.',
			'data' => $query
		] );

	}

	// GERA RELATORIO UNICA COMANDA - PDF
	public function gerarRelatorioPdfComandaIndividualByIdOld($id_comanda) {

		// ================================================================================================
		// PEGA A COMANDA SELECIONADA
		// ================================================================================================
		$comanda = $this->getComandaById( $id_comanda );

		$sql_usuarioLogado = <<<SQL
		    select pessoa_fisica.nome
		    from usuario, pessoa_fisica
		    where usuario.id_pessoa = pessoa_fisica.id_pessoa
		      and usuario.id = :id_usuario:
		SQL;
		$binds = [ 
			'id_usuario' => UsuarioLogado::getUsuarioId()
		];
		$usuarioNome = db_connect()->query( $sql_usuarioLogado, $binds )
			->getResultArray();

		// ================================================================================================
		// SELECIONA OS ITENS DA COMANDA
		// ================================================================================================

		$comandaItem = $this->getComandaItemParaPdf( $comanda ['id'] );

		$comanda_item = "";
		foreach ( $comandaItem as $key => $item ) {
			$key = $key++;
			$table_hover = $key % 2 ? "background-color: #DCDCDC;" : "";
			$executor = $item->id_tipo_procedimento == 2 || $item->id_tipo_procedimento == 3 ? $item->nome_medico : $item->nome_executor;
			$data_execucao = $item->data_execucao == "1900-01-01" ? '-' : date( "d/m/Y", strtotime( $item->data_execucao ) );
			$data_criacao = $item->data_criacao == "1900-01-01" ? '-' : date( "d/m/Y", strtotime( $item->data_criacao ) );
			$data_pagamento = $item->data_pagamento == "1900-01-01" ? '-' : date( "d/m/Y", strtotime( $item->data_pagamento ) );
			$hora_pagamento = $item->hora_pagamento == "00:00:00" ? '-' : date( "H:i:s", strtotime( $item->hora_pagamento ) );
			$comanda_item .= '
                <tr style="' . $table_hover . '">
                    <td style="text-align: center;">' . $item->descricao_tipo_procedimento . ' </td>
                    <td style="text-align: center;">' . $item->descricao_procedimento . ' </td>
                    <td style="text-align: center;">' . $data_criacao . '</td>
                    <td style="text-align: center;">' . $item->hora_criacao . '</td>
                    <td style="text-align: center;">' . $data_execucao . '</td>
                    <td style="text-align: center;">' . $item->hora_execucao . '</td>
                    <td style="text-align: center">' . mb_strtolower( $executor ) . ' </td>
                    <td style="text-align: center">' . mb_strtolower( $item->forma_pagamento ) . ' </td>
                    <td style="text-align: center">' . $data_pagamento . ' </td>
                    <td style="text-align: center">' . $hora_pagamento . ' </td>
                    <td style="text-align: center;">' . mb_strtolower( $item->bandeira ) . ' </td>
                    <td style="text-align: center;">' . $item->parcelas . ' </td>
                    <td style="text-align: center;">' . $item->codauth . ' </td>
                    <td style="text-align: center;">' . mb_strtolower( $item->tipo_convenio ) . ' </td>
                    <td style="text-align: center;">R$ ' . str_replace( ".", ",", $item->valor ) . ' </td>
                </tr>
            ';
		}

		// ================================================================================================
		// FIM
		// ================================================================================================

		$data_final = $comanda ['data_fechada'] != "1900-01-01" ? date( "d/m/Y", strtotime( $comanda ['->data_fechada'] ) ) : "";

		$html = '';
		$html .= '<html>';
		$html .= '<head> ';
		$html .= '<style> ';
		$html .= "
                <style> 
                    @page {
                        margin: 0cm 0cm;
                    }
                    body {
                        margin-top: 3cm;
                        margin-bottom: 2cm;
                    }
        
                    /** Define the header rules **/
                    header {
                        position: fixed;
                        top: -1cm;
                        left: 0cm;
                        right: 0cm;
                        height: 2cm;
                        text-align: center; 
                    }
                </style> 
        
        ";
		$html .= '</style> ';
		$html .= '</head> ';
		$html .= '<body> ';
		// Foreach para pegar comanda
		// $data_final = $comanda->data_fechada != "1900-01-01" ? date("d/m/Y", strtotime($comanda['data_fechada'])) : "";
		$html .= '<header>';
		$html .= "<h2 style='text-align: center; font-size: 30px'> Relatório de comanda </h2>";
		$html .= '	<table border="0" width="100%">
                <tr>
                    <td>Data do Sistema: ' . date( "d/m/Y" ) . '</td>
                </tr>
                <tr>
                    <td> Usuário: ' . $usuarioNome [0] ["nome"] . ' </td>
                </tr>
            </table>';
		$html .= '<hr>';
		$html .= '</header>';
		$html .= '<main>';
		$html .= '<table style="font-size: 13px" border="0" width="100%">
                <tr>
                    <td colspan="2"><strong>Código: </strong> ' . $comanda ["id"] . '</td>
                    <td colspan="3"><strong>Aberta em: </strong>' . date( "d/m/Y", strtotime( $comanda ["data_criada"] ) ) .
				'</td>
                    <td colspan="2"><strong>Fechada em: </strong> ' . $data_final . '</td>
                    <td colspan="2"><strong>Tels: </strong> ' . $comanda ["tel_cliente"] . '</td>
                </tr>
                <tr>
                    <td colspan="6"><strong>Cliente: </strong> ' . $comanda ["id_cliente"] . ' - ' . $comanda ["nome_cliente"] .
				'</td>
                </tr>
                <tr>
                    <td colspan="3"><strong>Pet: </strong> ' . $comanda ["id_pet"] . ' - ' . $comanda ["nome_pet"] .
				'</td>
                </tr>
                <br>
                <tr>
                    
                </tr>
                <br>
                 <tr>
                    <td style="text-align: center" width="50px"><strong>Tipo </strong></td>
                    <td style="text-align: center" width="100px"><strong>Itens </strong></td>
                    <td style="text-align: center"><strong>Data Criação </strong></td>
                    <td style="text-align: center"><strong>Hora Criação </strong></td>
                    <td style="text-align: center" width="50px"><strong>Execução</strong></td>
                    <td style="text-align: center""><strong>Hora Execução</strong></td>
                    <td style="text-align: center"><strong>Executante</strong></td>
                    <td style="text-align: center"><strong>Forma de pagamento</strong></td>
                    <td style="text-align: center"><strong>Data de pagamento</strong></td>
                    <td style="text-align: center"><strong>Hora de pagamento</strong></td>
                    <td style="text-align: center"><strong>Bandeira</strong></td>
                    <td style="text-align: center"><strong>Parcelas</strong></td>
                    <td style="text-align: center"><strong>Cod Autori</strong></td>
                    <td style="text-align: center"><strong>Convênio</strong></td>
                    <td style="text-align: center"><strong>Valor</strong></td>
                </tr>
                ' . $comanda_item .
				'
                <tr>
                    <td><strong> </strong></td>
                    <td><strong></strong></td>
                    <td><strong></strong></td>
                    <td><strong></strong></td>
                    <td><strong></strong></td>
                    <td><strong></strong></td>
                    <td><strong></strong></td>
                    <td><strong></strong></td>
                    <td><strong></strong></td>
                    <td><strong></strong></td>
                    <td colspan="2"><strong>Valor Total</strong></td>
                    <td><strong></strong></td>
                    <td colspan="2" style="text-align: center">R$ ' . str_replace( ".", ",", $comanda ['valor_total'] ) .
				'</td>
                </tr>
                <tr>
                    <td><strong> </strong></td>
                    <td><strong> </strong></td>
                    <td><strong></strong></td>
                    <td><strong></strong></td>
                    <td><strong></strong></td>
                    <td><strong></strong></td>
                    <td><strong></strong></td>
                    <td><strong></strong></td>
                    <td><strong></strong></td>
                    <td><strong></strong></td>
                    <td colspan="2"><strong>Valor Pago</strong></td>
                    <td><strong></strong></td>
                    <td colspan="2" style="text-align: center">R$ ' . str_replace( ".", ",", $comanda ['valor_pago'] ) . '</td>
                </tr>';
		$html .= '</table>';
		$html .= '</main>';
		$html .= '</html>';

		$dompdf = new Dompdf();
		$dompdf->loadHtml( $html );
		$dompdf->setPaper( 'A4', 'landscape' );
		$dompdf->render();
		$dompdf->stream( 'realtorio.pdf' );
		exit( 0 );

	}

	// NOVO - GERA RELATORIO UNICA COMANDA - PDF
	public function gerarRelatorioPdfComandaIndividualById($id_comanda) {

		// ================================================================================================
		// PEGA A COMANDA SELECIONADA
		// ================================================================================================
		$comanda = $this->getComandaById( $id_comanda );

		$sql_usuarioLogado = <<<SQL
		    select pessoa_fisica.nome
		    from usuario, pessoa_fisica
		    where usuario.id_pessoa = pessoa_fisica.id_pessoa
		      and usuario.id = :id_usuario:
		SQL;
		$binds = [ 
			'id_usuario' => UsuarioLogado::getUsuarioId()
		];
		$usuarioNome = db_connect()->query( $sql_usuarioLogado, $binds )
			->getResultArray();

		// ================================================================================================
		// SELECIONA OS ITENS DA COMANDA
		// ================================================================================================
		$comandaItem = $this->getComandaAtendimentoItem( $comanda ['id'] );
		$pagamentos = $this->getPagamentosPorComanda( $comanda ['id'] );

		// Query para saber o total pago
		$query_total_pago = <<<SQL
		select
		    sum(valor) as total
		from
		    comanda_item
		where
		    comanda_item_status_id = 2
		    and id_comanda = :comanda_id:
		SQL;
		$binds = [ 
			'comanda_id' => $comanda ['id']
		];
		$total_pago = db_connect()->query( $query_total_pago, $binds )
			->getResultArray();
		$total_pago = !empty( $total_pago [0] ['total'] ) ? 'R$' . number_format( $total_pago [0] ['total'], 2, ",", "." ) : ' - ';

		// =============================================================================================
		// Query para quanto faltar ser pago na comanda
		$query_total_restante = <<<SQL
		select
		    sum(valor) as total
		from
		    comanda_item
		where
		    comanda_item_status_id = 1
		    and id_comanda = :comanda_id:
		SQL;
		$binds = [ 
			'comanda_id' => $comanda ['id']
		];
		$total_restante = db_connect()->query( $query_total_restante, $binds )
			->getResultArray();

		$total_restante = !empty( $total_restante [0] ['total'] ) ? 'R$' . number_format( $total_restante [0] ['total'], 2, ",", "." ) : ' - ';

		// =============================================================================================

		// Query para estornos ==========================================================================

		$query_estornos = <<<SQL
		    select
		        ext.id_tipo_extorno, ei.valor, ext.data_criacao, ext.hora_criacao, ext.observacao,
		        tpe.descricao as tipo_estorno, pf.nome as executor, p.descricao as item
		    from
		        extorno ext, tipo_extorno tpe, usuario usr, pessoa_fisica pf, extorno_item ei, comanda_item ci, procedimento p
		    where 
		        ext.id_tipo_extorno = tpe.id
		      and ext.criado_por = usr.id
		      and usr.id_pessoa = pf.id_pessoa
		      and ext.id = ei.extorno_id
		      and ei.comanda_item_id = ci.id
		      and ci.id_procedimento = p.id
		      and ext.id_comanda = :comanda_id:
		SQL;
		$binds = [ 
			'comanda_id' => $comanda ['id']
		];
		$estornos = db_connect()->query( $query_estornos, $binds )
			->getResultArray();

		// FIM ==========================================================================================

		$comanda_item = "";
		foreach ( $comandaItem as $key => $item ) {
			$key = $key++;
			$table_hover = !($key % 2) ? "background-color: #DCDCDC;" : "";
			$executor = $item ["id_tipo_procedimento"] == 2 || $item ["id_tipo_procedimento"] == 3 ? $item ["nome_medico"] : $item ["nome_executor"];
			$data_execucao = $item ["data_execucao"] == "1900-01-01" ? '-' : date( "d/m/Y", strtotime( $item ["data_execucao"] ) );
			$data_criacao = $item ["data_criacao"] == "1900-01-01" ? '-' : date( "d/m/Y", strtotime( $item ["data_criacao"] ) );
			$hora_criacao = $item ["hora_criacao"] == "00:00:00" ? '-' : date( "H:i:s", strtotime( $item ["hora_criacao"] ) );
			$hora_execucao = $item ["hora_execucao"] == "00:00:00" ? '-' : date( "H:i:s", strtotime( $item ["hora_execucao"] ) );
			$obersevacao = $item->observacao ? $item->observacao : '-';
			$tota_comanda = $tota_comanda + $item ["valor"];

			$comanda_item .= '
                <tr style="' . $table_hover . '">
                    <td style="text-align: center;">' . $item ["tipo_procedimento"] . ' </td>
                    <td style="text-align: center;">' . $item ["descricao_procedimento"] . ' </td>
                    <td style="text-align: center;">' . $data_criacao . '</td>
                    <td style="text-align: center;">' . $hora_criacao . '</td>
                    <td style="text-align: center;">' . $data_execucao . '</td>
                    <td style="text-align: center;">' . $item ["status_descricao"] . '</td>
                    <td style="text-align: center;">' . $hora_execucao . '</td>
                    <td style="text-align: center">' . mb_strtolower( $executor ) . ' </td>
                    <td style="text-align: center;">' . mb_strtolower( $item ["tipo_convenio"] ) . ' </td>
                    <td style="text-align: center;">R$ ' . str_replace( ".", ",", $item ["valor"] ) . ' </td>
                </tr>
                <tr style="' . $table_hover . '">
                    <td colspan="10" style="text-align: left;"><strong>Observação:</strong> ' . $obersevacao . ' </td>
                </tr>
            ';
		}

		// Foreach para itens de pagamentos =============================================================

		$pagamento_item = "";
		foreach ( $pagamentos as $key => $value ) {
			$key = $key++;
			$table_hover = !($key % 2) ? "background-color: #DCDCDC;" : "";
			$data_pagamento = $value ["data_criacao"] == "1900-01-01" ? '-' : date( "d/m/Y", strtotime( $value ["data_criacao"] ) );
			$hora_pagamento = $value ["hora_criacao"] == "00:00:00" ? '-' : date( "H:i:s", strtotime( $value ["hora_criacao"] ) );
			$obersevacao = $value ["observacao"] ? $value ["observacao"] : '-';

			$codauth_array = explode( "_", $value ["codauth"] );
			$codAuth = $codauth_array [0] == 'autocod' ? '-' : $value ["codauth"];

			$total = $total + $value ["valor"];

			$pagamento_item .= '
                <tr style="' . $table_hover . '">
                    <td style="text-align: center;">' . $value ["forma_pagamento"] . ' </td>
                    <td style="text-align: center;">' . $data_pagamento . ' </td>
                    <td style="text-align: center;">' . $hora_pagamento . '</td>
                    <td style="text-align: center;">' . $value ["executor"] . '</td>
                    <td style="text-align: center;">' . $value ["bandeira"] . '</td>
                    <td style="text-align: center;">' . $codAuth . '</td>
                    <td style="text-align: center;">' . $value ["maquineta"] . '</td>
                    <td style="text-align: center">' . $value ["chavepix"] . ' </td>
                    <td style="text-align: center;">' . $value ["dinheiro"] . ' </td>
                    <td style="text-align: center;">' . $value ["troco"] . ' </td>
                    <td style="text-align: center;">R$ ' . str_replace( ".", ",", $value ["valor"] ) . ' </td>
                </tr>
                <tr style="' . $table_hover . '">
                    <td colspan="12" style="text-align: left;"><strong>Observação:</strong> ' . $obersevacao . ' </td>
                </tr>
            ';
		}

		// FIM ==========================================================================================

		// Foreach para itens de estornos =============================================================

		$estorno_item = "";
		$total_estornos = 0;
		foreach ( $estornos as $key => $value ) {
			$key = $key++;
			$total_estornos = $total_estornos + $value ["valor"];
			$table_hover = !($key % 2) ? "background-color: #DCDCDC;" : "";
			$data_criacao = $value ["data_criacao"] == "1900-01-01" ? '-' : date( "d/m/Y", strtotime( $value ["data_criacao"] ) );
			$hora_criacao = $value ["hora_criacao"] == "00:00:00" ? '-' : date( "H:i:s", strtotime( $value ["hora_criacao"] ) );
			$obersevacao = $value ["observacao"] ? $value ["observacao"] : '-';

			$estorno_item .= '
                <tr style="' . $table_hover . '">
                    <td style="text-align: center;">' . $value ["item"] . ' </td>
                    <td style="text-align: center;">' . $value ["tipo_estorno"] . ' </td>
                    <td style="text-align: center;">' . $data_criacao . ' </td>
                    <td style="text-align: center;">' . $hora_criacao . '</td>
                    <td style="text-align: center;">' . $value ["executor"] . '</td>
                    <td style="text-align: center;">R$ ' . str_replace( ".", ",", $value ["valor"] ) . ' </td>
                </tr>
                <tr style="' . $table_hover . '">
                    <td colspan="12" style="text-align: left;"><strong>Observação:</strong> ' . $obersevacao . ' </td>
                </tr>
            ';
		}

		// FIM ===========================================================================================

		// ================================================================================================
		// ================================================================================================

		$data_final = $comanda ['data_fechada'] != "1900-01-01" ? date( "d/m/Y", strtotime( $comanda ['->data_fechada'] ) ) : "";

		$html = '';
		$html .= '<html>';
		$html .= '<head> ';
		$html .= '<style> ';
		$html .= "
                <style> 
                    @page {
                        margin: 0cm 0cm;
                    }
                    body {
                        margin-top: 3cm;
                        margin-bottom: 2cm;
                    }
        
                    /** Define the header rules **/
                    header {
                        position: fixed;
                        top: -1cm;
                        left: 0cm;
                        right: 0cm;
                        height: 2cm;
                        text-align: center; 
                    }
                </style> 
        
        ";
		$html .= '</style> ';
		$html .= '</head> ';
		$html .= '<body> ';
		// Foreach para pegar comanda
		// $data_final = $comanda->data_fechada != "1900-01-01" ? date("d/m/Y", strtotime($comanda['data_fechada'])) : "";
		$html .= '<header>';
		$html .= "<h2 style='text-align: center; font-size: 30px'> Relatório de comanda </h2>";
		$html .= '	<table border="0" width="100%">
                <tr>
                    <td>Data do Sistema: ' . date( "d/m/Y" ) . '</td>
                </tr>
                <tr>
                    <td> Usuário: ' . $usuarioNome [0] ["nome"] . ' </td>
                </tr>
            </table>';
		$html .= '<hr>';
		$html .= '</header>';
		$html .= '<main>';
		$html .= '<table style="font-size: 13px" border="0" width="100%">
                    <tr>
                        <td colspan="2"><strong>Código: </strong> ' . $comanda ["id"] . '</td>
                        <td colspan="3"><strong>Aberta em: </strong>' . date( "d/m/Y", strtotime( $comanda ["data_criada"] ) ) .
				'</td>
                        <td colspan="2"><strong>Fechada em: </strong> ' . $data_final . '</td>
                        <td colspan="2"><strong>Tels: </strong> ' . $comanda ["tel_cliente"] . '</td>
                    </tr>
                    <tr>
                        <td colspan="6"><strong>Cliente: </strong> ' . $comanda ["id_cliente"] . ' - ' . $comanda ["nome_cliente"] .
				'</td>
                    </tr>
                    <tr>
                        <td colspan="3"><strong>Pet: </strong> ' . $comanda ["id_pet"] . ' - ' . $comanda ["nome_pet"] .
				'</td>
                    </tr>
                    <br>
                    <br>
                    <br>
                    <tr>
                        <td style="text-align: center"><strong>Tipo </strong></td>
                        <td style="text-align: center"><strong>Itens </strong></td>
                        <td style="text-align: center"><strong>Data Criação </strong></td>
                        <td style="text-align: center"><strong>Hora Criação </strong></td>
                        <td style="text-align: center"><strong>Execução</strong></td>
                        <td style="text-align: center"><strong>Status</strong></td>
                        <td style="text-align: center"><strong>Hora Execução</strong></td>
                        <td style="text-align: center"><strong>Executante</strong></td>
                        <td style="text-align: center"><strong>Convênio</strong></td>
                        <td style="text-align: center"><strong>Valor</strong></td>
                    </tr>
                    ' . $comanda_item .
				'
                    <br>
                    <tr>
                        <td colspan="10"><hr></td>
                    </tr>
                    <tr>
                        <td style="text-align: center"><strong></strong></td>
                        <td style="text-align: center"><strong></strong></td>
                        <td style="text-align: center"><strong></strong></td>
                        <td style="text-align: center"><strong></strong></td>
                        <td style="text-align: center"><strong></strong></td>
                        <td style="text-align: center"><strong></strong></td>
                        <td style="text-align: center"><strong></strong></td>
                        <td style="text-align: center"><strong></strong></td>
                        <td style="text-align: center"><strong>Total</strong></td>
                        <td style="text-align: center"><strong>' . number_format( $tota_comanda, 2, ",", "." ) . '</strong></td>
                    </tr> ';
		$html .= '</table>';

		if ($pagamento_item) {
			$html .= '<h2 style="text-align: center">Pagamentos</h2>';
			$html .= '<table style="font-size: 13px; margin-bottom: 40px" border="0" width="100%">
                             <tr>
                                <td style="text-align: center"><strong>Tipo de Pagamento </strong></td>
                                <td style="text-align: center"><strong>Data Pagamento </strong></td>
                                <td style="text-align: center"><strong>Hora Pagamento </strong></td>
                                <td style="text-align: center"><strong>Executante </strong></td>
                                <td style="text-align: center"><strong>Bandeira </strong></td>
                                <td style="text-align: center"><strong>Cod Auth</strong></td>
                                <td style="text-align: center"><strong>Maquineta</strong></td>
                                <td style="text-align: center"><strong>Chave Pix</strong></td>
                                <td style="text-align: center"><strong>Dinheiro</strong></td>
                                <td style="text-align: center"><strong>Troco</strong></td>
                                <td style="text-align: center"><strong>Valor</strong></td>
                            </tr>';
			$html .= $pagamento_item;
			$html .= '
                    <tr>
                        <td colspan="12"><hr></td>
                    </tr>
                ';
			$html .= '<tr>
                    <td style="text-align: center"><strong></strong></td>
                    <td style="text-align: center"><strong></strong></td>
                    <td style="text-align: center"><strong></strong></td>
                    <td style="text-align: center"><strong></strong></td>
                    <td style="text-align: center"><strong></strong></td>
                    <td style="text-align: center"><strong></strong></td>
                    <td style="text-align: center"><strong>Valor Restante</strong></td>
                    <td style="text-align: center"><strong>' . $total_restante .
					'</strong></td>
                    <td style="text-align: center"><strong></strong></td>
                    <td style="text-align: center"><strong>Total Pago</strong></td>
                    <td style="text-align: center"><strong>' . $total_pago . '</strong></td>
                </tr>';
			$html .= '</table>';
		} else {
			$html .= '<h2 style="text-align: center">Pagamentos</h2>';
			$html .= '<p style="text-align: center; margin-bottom: 40px">NÃO HÁ PAGAMENTOS PARA ESSA COMANDA</p>';
		}

		if ($estorno_item) {
			$html .= '<h2 style="text-align: center">Estornos</h2>';
			$html .= '<table style="font-size: 13px; margin-bottom: 40px" border="0" width="100%">
                             <tr>
                                <td style="text-align: center"><strong>Item </strong></td>
                                <td style="text-align: center"><strong>Tipo de Estorno </strong></td>
                                <td style="text-align: center"><strong>Data Criação </strong></td>
                                <td style="text-align: center"><strong>Hora Criação </strong></td>
                                <td style="text-align: center"><strong>Executante </strong></td>
                                <td style="text-align: center"><strong>Valor </strong></td>
                            </tr>';
			$html .= $estorno_item;
			$html .= '</table>';
			$html .= '<hr>';
			$html .= '<hr>';
		} else {
			$html .= '<h2 style="text-align: center">Estornos</h2>';
			$html .= '<p style="text-align: center; margin-bottom: 40px">NÃO HÁ ESTORNOS PARA ESSA COMANDA</p>';
			$html .= '<hr>';
			$html .= '<hr>';
		}

		$html .= '</main>';
		$html .= '</html>';

		$dompdf = new Dompdf();
		$dompdf->loadHtml( $html );
		$dompdf->setPaper( 'A4', 'landscape' );
		$dompdf->render();
		$dompdf->stream( 'realtorio.pdf' );
		exit( 0 );

	}

	// QUERY PARA BUSCAR UMA UNICA COMANDA COM ID INFORMADO
	private function getComandaById($comanda_id) {

		$sql = <<<SQL
		select distinct
		comanda.id, comanda.data_criada, comanda.hora_criada, comanda.criado_por, pf1.nome,
		comanda.data_fechada, comanda.hora_fechada, comanda.fechado_por,
		(   select pessoa_fisica.nome
		    from pessoa_fisica , usuario
		    where
		        usuario.id = comanda.fechado_por
		        and usuario.id_pessoa = pessoa_fisica.id_pessoa
		) as nome_fechado,
		comanda.id_cliente, pf2.nome as nome_cliente, pes.telefone_1 as tel_cliente, comanda.id_pet, pet.nome as nome_pet,
		pet.data_nascimento,
		case
		    when TIMESTAMPDIFF(MONTH, pet.data_nascimento , NOW()) < 12 then
		        concat(convert(TIMESTAMPDIFF(MONTH, pet.data_nascimento , NOW()),char(20)),' meses')
		when (TIMESTAMPDIFF(MONTH, pet.data_nascimento , NOW()) >= 12) then
		    case 
		        when ((TIMESTAMPDIFF(MONTH, pet.data_nascimento , NOW()) % 12) = 0) then
		            concat(convert((TIMESTAMPDIFF(MONTH, pet.data_nascimento , NOW()) DIV 12), char(20)),' anos  ')
		else
		    concat(
		        concat(convert((TIMESTAMPDIFF(MONTH, pet.data_nascimento, NOW()) DIV 12), char(20)),' anos  '),
		concat(convert((TIMESTAMPDIFF(MONTH,pet.data_nascimento , NOW()) % 12), char(20)),' meses')
		                    )
		            end
		    end as idade
		    , pet.sexo, raca.nome as nome_raca, es.nome as nome_especie, comanda.id_unidade, unidade.descricao,
		    (select sum(valor) as total from comanda_item ci  where ci.id_comanda  = comanda.id and comanda_item_status_id in(1,2)) as valor_total,
		    (select sum(valor) as total_pago from comanda_item ci  where ci.id_comanda  = comanda.id and comanda_item_status_id = 2) as valor_pago 
		from
		    comanda, cliente,  pessoa_fisica as pf1, pessoa_fisica as pf2,unidade, usuario us, pet, pessoa pes, raca, especie as es
		where
		    us.id = comanda.criado_por
		    and us.id_pessoa = pf1.id_pessoa
		    and comanda.id_cliente = cliente.id
		    and cliente.id_pessoa = pf2.id_pessoa
		    and cliente.id_pessoa = pes.id
		    and comanda.id_pet = pet.id
		    and comanda.id_unidade = unidade.id
		    and pet.id_raca = raca.id
		    and raca.id_especie = es.id
		    and comanda.id = :comanda_id:
		SQL;
		$binds = [ 
			'comanda_id' => $comanda_id
		];
		$comanda = db_connect()->query( $sql, $binds )
			->getResultArray();

		return $comanda [0];

	}

	/*
	 * QUERY PARA BUSCAR OS ITENS DE UMA COMANDA
	 * SEJA ELA NÃO PAGA, PAGA E EXCLUÍDA
	 */
	private function getComandaItemGerais($comanda_id) {

		$sql = <<<SQL
		select
		    tp.descricao as tipo_procedimento, cmi.comanda_item_status_id as item_status, cis.descricao as status_descricao, pr.descricao as descricao_procedimento, cmi.data_criacao, cmi.hora_criacao,
		    rp.data_execucao, rp.hora_execucao, rp.usuario_executor,
		    (select sum(ci.valor) from comanda_item ci where ci.id_comanda = c.id) as total,
		    (case 
		        when rp.usuario_executor is null then '-'
		        else ( select nome from pessoa_fisica where id_pessoa = ( select id_pessoa from usuario where id = rp.usuario_executor ))
		        end
		        ) as nome_executor,
		    rp.id_medico,
		    (case
		        when rp.id_medico is NULL
			        then '-'
		        ELSE (select nome from pessoa_fisica  where id_pessoa = (select id_pessoa from profissional where id = ( select id_profissional from medico where id = rp.id_medico)))
		        end
		        ) as nome_medico,
		    tc.descricao as convenio, cmi.valor, cl.id as cliente_id, pf.nome as cliente, p.nome as pet, p.id as pet_id
		from
		    comanda c, comanda_item cmi, tipo_procedimento tp, procedimento pr, requisicao_procedimento rp,
		    convenio cv, tipo_convenio tc, cliente cl, pessoa_fisica pf, pet p, comanda_item_status cis
		where
		    c.id = cmi.id_comanda
		    and cmi.id_procedimento = pr.id
		    and pr.id_tipo_procedimento = tp.id
		    and cmi.id_requisicao_procedimento = rp.id
		    and cmi.id_convenio = cv.id
		    and cv.id_tipo_convenio = tc.id
		    and c.id_cliente = cl.id
		    and cl.id_pessoa = pf.id_pessoa
		    and c.id_pet = p.id
		    and cmi.comanda_item_status_id = cis.id
		    and c.id = :comanda_id:
		SQL;
		$binds = [ 
			'comanda_id' => $comanda_id
		];
		$comanda = db_connect()->query( $sql, $binds )
			->getResultArray();

		return $comanda;

	}

	/*
	 * QUERY PARA BUSCAR OS ITENS DE UMA COMANDA
	 * DE ATENDIMENTO
	 */
	private function getComandaAtendimentoItem($comanda_id) {

		$sql = <<<SQL
		select
		    tp.descricao as tipo_procedimento, cmi.comanda_item_status_id as item_status, cis.descricao as status_descricao, pr.descricao as descricao_procedimento, cmi.data_criacao, cmi.hora_criacao,
		    rp.data_execucao, rp.hora_execucao, rp.usuario_executor, rp.id_medico, rp.status_id , tp.id , tp.descricao ,
		    (select sum(ci.valor) from comanda_item ci where ci.id_comanda = c.id) as total,
		    (case
				when rp.status_id = 1 then '-'
				when tp.id in (2,3,6) and rp.status_id in (2) then  (select nome from pessoa_fisica  where id_pessoa = (select id_pessoa from profissional where id = ( select id_profissional from medico where id = rp.id_medico)))
		        else ( select nome from pessoa_fisica where id_pessoa = ( select id_pessoa from usuario where id = rp.usuario_executor ))
		        end
		        ) as nome_executor,		    
		    (case
		        when rp.id_medico is NULL
			        then '-'
		        ELSE (select nome from pessoa_fisica  where id_pessoa = (select id_pessoa from profissional where id = ( select id_profissional from medico where id = rp.id_medico)))
		        end
		        ) as nome_medico,
		    tc.descricao as convenio, cmi.valor, cl.id as cliente_id, pf.nome as cliente, p.nome as pet, p.id as pet_id
		from
		    comanda c, comanda_item cmi, tipo_procedimento tp, procedimento pr, requisicao_procedimento rp,
		    convenio cv, tipo_convenio tc, cliente cl, pessoa_fisica pf, pet p, comanda_item_status cis
		where
		    c.id = cmi.id_comanda
		    and cmi.id_procedimento = pr.id
		    and pr.id_tipo_procedimento = tp.id
		    and cmi.id_requisicao_procedimento = rp.id
		    and cmi.id_convenio = cv.id
		    and cv.id_tipo_convenio = tc.id
		    and c.id_cliente = cl.id
		    and cl.id_pessoa = pf.id_pessoa
		    and c.id_pet = p.id
		    and cmi.comanda_item_status_id = cis.id
		  and cmi.comanda_item_status_id <> 3
		    and c.id = :comanda_id:
		SQL;
		$binds = [ 
			'comanda_id' => $comanda_id
		];
		$comanda = db_connect()->query( $sql, $binds )
			->getResultArray();

		return $comanda;

	}

	// QUERY PARA BUSCAR OS PAGAMENTOS DE UMA COMANDA
	private function getPagamentosPorComanda($comanda_id) {

		$sql = <<<SQL
		select
		    cp.id, cp.data_criacao, cp.hora_criacao, cp.valor, fp.descricao as forma_pagamento, cf.criado_por as id_executor, pf.nome as executor,
		    (case when cp.maquineta = '' then '-'
		        else  cp.maquineta
		        end
		        ) as maquineta,
		    (case when cp.bandeira = '' then '-'
		        else  cp.bandeira
		        end
		        ) as bandeira,
		    (case when cp.chavepix = '' then '-'
		        else  cp.chavepix
		        end
		        ) as chavepix,
		    (case when cp.dinheiro = 0.00 then '-'
		        else  cp.dinheiro
		        end
		        ) as dinheiro,
		    (case when cp.troco = 0.00 then '-'
		        else  cp.troco
		        end
		        ) as troco,
		    cp.codauth, cp.observacao, cp.observacao
		from
		    comanda_pagamento cp, comanda_fechamento cf, forma_pagamento fp, usuario us, pessoa_fisica pf
		where
		    cp.comanda_fechamento_id = cf.id
		    and cp.forma_pagamento_id = fp.id
		    and cf.criado_por = us.id
		    and us.id_pessoa = pf.id_pessoa
		    and cf.comanda_id = :comanda_id:
		SQL;
		$binds = [ 
			'comanda_id' => $comanda_id
		];
		$pagamanetos = db_connect()->query( $sql, $binds )
			->getResultArray();

		return $pagamanetos;

	}

	// QUERY PARA BUSCAR COMANDAS DE ACORDO COM OS FILTROS INFORMADOS
	private function getComandaParaPdf($dataInicial, $dataFinal, $unidade, $status) {

		// Consulta periodo aberto 1 = aberto | 2 = fechado | 3 = todas comandas abertas e fechadas
		if ($status == 3) {
			$sql_comandas = <<<SQL
			    select distinct
			        comanda.id, comanda.data_criada, comanda.hora_criada, comanda.criado_por, pf1.nome,
			        comanda.data_fechada, comanda.hora_fechada, comanda.fechado_por,
			        (   select pessoa_fisica.nome
			            from pessoa_fisica , usuario
			            where
			                usuario.id = comanda.fechado_por
			                and usuario.id_pessoa = pessoa_fisica.id_pessoa
			        ) as nome_fechado,
			        comanda.id_cliente, pf2.nome as nome_cliente, pes.telefone_1 as tel_cliente, comanda.id_pet, pet.nome,comanda.id_unidade, unidade.descricao,
			        (select sum(valor) as total from comanda_item ci  where ci.id_comanda  = comanda.id and comanda_item_status_id in (1,2)) as valor_total,
			        (select sum(valor) as total_pago from comanda_item ci  where ci.id_comanda  = comanda.id and comanda_item_status_id = 2) as valor_pago 
			    from
			        comanda, cliente,  pessoa_fisica as pf1, pessoa_fisica as pf2,unidade, usuario us, pet, pessoa pes
			    where			        
			        comanda.data_criada >= :data_inicial:
			        and comanda.data_criada <= :data_final:
					and unidade.id = :unidade:
					and comanda.id_unidade = unidade.id
			        and comanda.criado_por = us.id
			        and comanda.id_cliente = cliente.id
			        and comanda.id_pet = pet.id
			        and us.id_pessoa = pf1.id_pessoa			        
			        and cliente.id_pessoa = pf2.id_pessoa
			        and cliente.id_pessoa = pes.id
			        
			        
			SQL;
			$binds = [ 
				'data_inicial' => $dataInicial,
				'data_final' => $dataFinal,
				'unidade' => $unidade
			];
			$query_comandas = db_connect()->query( $sql_comandas, $binds )
				->getResult();

			return $query_comandas;
		}

		if ($status == 1) {
			$sql_comandas = <<<SQL
			    select distinct
			        comanda.id, comanda.data_criada, comanda.hora_criada, comanda.criado_por, pf1.nome,
			        comanda.data_fechada, comanda.hora_fechada, comanda.fechado_por,
			        (   select pessoa_fisica.nome
			            from pessoa_fisica , usuario
			            where
			                usuario.id = comanda.fechado_por
			                and usuario.id_pessoa = pessoa_fisica.id_pessoa
			        ) as nome_fechado,
			        comanda.id_cliente, pf2.nome as nome_cliente, comanda.id_pet, pet.nome,comanda.id_unidade, unidade.descricao,
			        (select sum(valor) as total from comanda_item ci  where ci.id_comanda  = comanda.id and comanda_item_status_id in (1,2)) as valor_total,
			        (select sum(valor) as total_pago from comanda_item ci  where ci.id_comanda  = comanda.id and comanda_item_status_id = 2) as valor_pago 
			    from
			        comanda, cliente,  pessoa_fisica as pf1, pessoa_fisica as pf2,unidade, usuario us, pet
			    where
					comanda.data_criada >= :data_inicial:
			        and comanda.data_criada <= :data_final:
					and comanda.data_fechada = '1900-01-01'
					and comanda.id_unidade = :unidade:
					and comanda.id_unidade = unidade.id
			        and comanda.criado_por = us.id
					and comanda.id_pet = pet.id 
			        and us.id_pessoa = pf1.id_pessoa
			        and comanda.id_cliente = cliente.id
			        and cliente.id_pessoa = pf2.id_pessoa
			SQL;
			$binds = [ 
				'data_inicial' => $dataInicial,
				'data_final' => $dataFinal,
				'unidade' => $unidade
			];
			$query_comandas = db_connect()->query( $sql_comandas, $binds )
				->getResult();

			return $query_comandas;
		}

		if ($status == 2) {
			$sql_comandas = <<<SQL
			    select distinct
			        comanda.id, comanda.data_criada, comanda.hora_criada, comanda.criado_por, pf1.nome,
			        comanda.data_fechada, comanda.hora_fechada, comanda.fechado_por,
			        (   select pessoa_fisica.nome
			            from pessoa_fisica , usuario
			            where
			                usuario.id = comanda.fechado_por
			                and usuario.id_pessoa = pessoa_fisica.id_pessoa
			        ) as nome_fechado,
			        comanda.id_cliente, pf2.nome as nome_cliente, comanda.id_pet, pet.nome,comanda.id_unidade, unidade.descricao,
			        (select sum(valor) as total from comanda_item ci  where ci.id_comanda  = comanda.id and comanda_item_status_id in (1,2)) as valor_total,
			        (select sum(valor) as total_pago from comanda_item ci  where ci.id_comanda  = comanda.id and comanda_item_status_id = 2) as valor_pago 
			    from
			        comanda, cliente,  pessoa_fisica as pf1, pessoa_fisica as pf2,unidade, usuario us, pet
			    where
					and comanda.data_criada >= :data_inicial:
			        and comanda.data_criada <= :data_final:
			        and comanda.data_fechada <> '1900-01-01'
					and comanda.id_unidade = :unidade:
					and comanda.id_unidade = unidade.id
			        and comanda.criado_por = us.id
					and comanda.id_pet = pet.id
					and comanda.id_cliente = cliente.id 
			        and us.id_pessoa = pf1.id_pessoa			        
			        and cliente.id_pessoa = pf2.id_pessoa
			SQL;
			$binds = [ 
				'data_inicial' => $dataInicial,
				'data_final' => $dataFinal,
				'unidade' => $unidade
			];
			$query_comandas = db_connect()->query( $sql_comandas, $binds )
				->getResult();

			return $query_comandas;
		}

	}

	// NOVA - QUERY PARA BUSCAR COMANDAS DE ACORDO COM OS FILTROS INFORMADOS
	private function getNewComandaParaPdf($dataInicial, $dataFinal, $unidade, $status) {

		// Consulta periodo aberto 1 = aberto | 2 = fechado | 3 = todas comandas abertas e fechadas
		if ($status == 3) {
			$sql_comandas = <<<SQL
			    select distinct
			        comanda.id, comanda.data_criada, comanda.hora_criada, comanda.criado_por, pf1.nome,
			        comanda.data_fechada, comanda.hora_fechada, comanda.fechado_por,
			        comanda.id_cliente, pf2.nome as nome_cliente, pes.telefone_1 as tel_cliente, comanda.id_pet, pet.nome,comanda.id_unidade, unidade.descricao
			    from
			        comanda, cliente,  pessoa_fisica as pf1, pessoa_fisica as pf2,unidade, usuario us, pet, pessoa pes
			    where
			        us.id = comanda.criado_por
			        and us.id_pessoa = pf1.id_pessoa
			        and comanda.id_cliente = cliente.id
			        and cliente.id_pessoa = pf2.id_pessoa
			        and cliente.id_pessoa = pes.id
			        and comanda.id_pet = pet.id
			        and comanda.id_unidade = unidade.id
			        and unidade.id = :unidade:
			        and comanda.data_criada >= :data_inicial:
			        and comanda.data_criada <= :data_final:
			        
			SQL;
			$binds = [ 
				'data_inicial' => $dataInicial,
				'data_final' => $dataFinal,
				'unidade' => $unidade
			];
			$query_comandas = db_connect()->query( $sql_comandas, $binds )
				->getResult();

			return $query_comandas;
		}

		if ($status == 1) {
			$sql_comandas = <<<SQL
			    select distinct
			        comanda.id, comanda.data_criada, comanda.hora_criada, comanda.criado_por, pf1.nome,
			        comanda.data_fechada, comanda.hora_fechada, comanda.fechado_por,
			        comanda.id_cliente, pf2.nome as nome_cliente, comanda.id_pet, pet.nome,comanda.id_unidade, unidade.descricao
			        
			    from
			        comanda, cliente,  pessoa_fisica as pf1, pessoa_fisica as pf2,unidade, usuario us, pet
			    where
			        us.id = comanda.criado_por
			        and us.id_pessoa = pf1.id_pessoa
			        and comanda.id_cliente = cliente.id
			        and cliente.id_pessoa = pf2.id_pessoa
			        and comanda.id_pet = pet.id
			        and comanda.id_unidade = unidade.id
			        and unidade.id = :unidade:
			        and comanda.data_criada >= :data_inicial:
			        and comanda.data_criada <= :data_final:
			        and comanda.data_fechada = '1900-01-01'
			        
			SQL;
			$binds = [ 
				'data_inicial' => $dataInicial,
				'data_final' => $dataFinal,
				'unidade' => $unidade
			];
			$query_comandas = db_connect()->query( $sql_comandas, $binds )
				->getResult();

			return $query_comandas;
		}

		if ($status == 2) {
			$sql_comandas = <<<SQL
			    select distinct
			        comanda.id, comanda.data_criada, comanda.hora_criada, comanda.criado_por, pf1.nome,
			        comanda.data_fechada, comanda.hora_fechada, comanda.fechado_por,
			        comanda.id_cliente, pf2.nome as nome_cliente, comanda.id_pet, pet.nome as nome_pet 
			    from
			        comanda, cliente,  pessoa_fisica as pf1, pessoa_fisica as pf2,unidade, usuario us, pet, pessoa pes
			    where
			        us.id = comanda.criado_por
			        and us.id_pessoa = pf1.id_pessoa
			        and comanda.id_cliente = cliente.id
			        and cliente.id_pessoa = pf2.id_pessoa
			        and comanda.id_pet = pet.id
			        and comanda.id_unidade = unidade.id
			        and unidade.id = :unidade:
			        and comanda.data_criada >= :data_inicial:
			        and comanda.data_criada <= :data_final:
			        and comanda.data_fechada <> '1900-01-01'
			        
			SQL;
			$binds = [ 
				'data_inicial' => $dataInicial,
				'data_final' => $dataFinal,
				'unidade' => $unidade
			];
			$query_comandas = db_connect()->query( $sql_comandas, $binds )
				->getResult();

			return $query_comandas;
		}

	}

	// QUERY PARA BUSCAR ITENS DE UMA COMANDA ATRAVES DO ID
	private function getComandaItemParaPdf($idComanda) {

		$sql_comandaItens = <<<SQL
			select distinct
				cmi.id, cmi.id_comanda, cmi.comanda_item_status_id, cmi.valor, cmis.descricao,
				cmi.id_forma_pagamento,cmi.codauth,cmi.bandeira,cmi.parcelas,
				cmi.data_atualizacao as data_pagamento, cmi.hora_atualizacao as hora_pagamento,
				cmi.observacao,
				(case
					when cmi.id_forma_pagamento is NULL then '-'
					ELSE (select descricao from forma_pagamento where id = cmi.id_forma_pagamento)
				end) as forma_pagamento,
				cmi.id_convenio, cnv.descricao, tc.descricao as tipo_convenio , cmi.id_procedimento,
				pr.descricao as descricao_procedimento, tpr.id as id_tipo_procedimento,
				tpr.descricao as descricao_tipo_procedimento, cmi.id_requisicao_procedimento,
				rqp.status_id, rqps.descricao, rqp.id_medico,
				(case
					when rqp.id_medico is NULL then '-'
					ELSE (select pf.nome from pessoa_fisica pf , profissional p , medico m
							where m.id  = rqp.id_medico and m.id_profissional = p.id and p.id_pessoa = pf.id_pessoa)
				end) as nome_medico,
				rqp.usuario_executor,
				(case
					when rqp.usuario_executor is NULL then '-'
					ELSE (select pf1.nome from pessoa_fisica pf1 , usuario us1
					where us1.id = rqp.usuario_executor and us1.id_pessoa = pf1.id_pessoa)
				end) as nome_executor,
				rqp.data_requisicao as data_criacao, rqp.hora_requisicao as hora_criacao, rqp.data_execucao,
				(case
					when rqp.hora_execucao = '00:00:00' then '-'
					else rqp.hora_execucao
				end) as hora_execucao
			from
				comanda_item cmi, comanda_item_status cmis, convenio cnv, tipo_convenio tc,
				procedimento pr, tipo_procedimento tpr, usuario usr, forma_pagamento frp,
				requisicao_procedimento rqp , requisicao_procedimento_status rqps
			where
		    	cmi.id_comanda = :comanda_id:
		        and cmi.comanda_item_status_id <> 3
		        and cmi.comanda_item_status_id = cmis.id
				and cmi.id_procedimento = pr.id
		        and cmi.id_convenio = cnv.id
				and cmi.id_requisicao_procedimento = rqp.id
		        and cnv.id_tipo_convenio = tc.id
		        and pr.id_tipo_procedimento = tpr.id		            
		        and rqp.status_id = rqps.id;
		SQL;
		$binds = [ 
			'comanda_id' => $idComanda
		];
		$query_comandaItem = db_connect()->query( $sql_comandaItens, $binds )
			->getResult();

		return $query_comandaItem;

	}

	// QUERY PARA BUSCAR ITENS DE UMA COMANDA POR CONVENIO ATRAVES DOS FILTROS INFORMADOS
	private function getComandaItemPorConvenioParaPdf($dataInicial, $dataFinal, $unidade, $convenio, $execucao) {

		$sql_comandaItens = '
            select
                p.descricao, count(*) total, sum(ci.valor) as valor
            from comanda_item ci , procedimento p ,convenio c , requisicao_procedimento rp, convenio_procedimento cp
            where
                ci.comanda_item_status_id  = 2
                and ci.id_procedimento = p.id
                and ci.id_convenio = c.id
                and ci.id_requisicao_procedimento =rp.id
                and rp.id_convenio_procedimento = cp.id
				and rp.status_id = :execucao:
                and cp.id_unidade = :unidade_id:
                and ci.data_criacao >= :data_inicial:
                and ci.data_criacao <= :data_final:
		';
		if ($convenio != 3) {
			$sql_comandaItens .= '
                and c.id_tipo_convenio = :convenio:
                group by p.descricao
            ';
		} else {
			$sql_comandaItens .= '
                group by p.descricao
            ';
		}
		$binds = [ 
			'data_inicial' => $dataInicial,
			'data_final' => $dataFinal,
			'unidade_id' => $unidade,
			'convenio' => $convenio,
			'execucao' => $execucao
		];
		$query_comandaItem = db_connect()->query( $sql_comandaItens, $binds )
			->getResult();

		return $query_comandaItem;

	}

	// QUERY PARA BUSCAR ATENDIMENTOS DE PET POR UNIDADE
	private function getRelatorioAtendimentoPetPdf($dataInicial, $dataFinal, $unidade) {

		$sql_atendimento_pet = '
            select
                distinct rp.id_pet as pet_id ,pf.nome as tutor, u.descricao as unidade, p.nome as pet, pf.cpf, rp.data_requisicao 
            from
                requisicao_procedimento rp, pet_cliente pc, cliente c, pessoa_fisica pf, convenio_procedimento cp, unidade u, pet p
            where
                rp.status_id = 2
            and rp.data_requisicao >= :data_inicial:
            and rp.data_requisicao <= :data_final:
            and rp.id_pet = pc.id_pet
            and pc.id_cliente = c.id
            and c.id_pessoa = pf.id_pessoa
            and rp.id_convenio_procedimento = cp.id
            and cp.id_unidade = u.id
            and cp.id_unidade = :unidade_id:
            and rp.id_pet = p.id
            and rp.id_pet <> "";
		';
		$binds = [ 
			'data_inicial' => $dataInicial,
			'data_final' => $dataFinal,
			'unidade_id' => $unidade
		];
		$query_atendimento_pet = db_connect()->query( $sql_atendimento_pet, $binds )
			->getResult();

		return $query_atendimento_pet;

	}

	public function excluirItemComanda(): Response {

		try {
			$comandaId = intval( $_POST ['comandaId'] );
			$comandaItemId = intval( $_POST ['comandaItemId'] );

			$sql_comanda_status = <<<SQL
				select c.id,c.data_fechada,c.fechado_por
				from comanda c
				where c.id = :id_comanda:
			SQL;

			$bind_comanda_status = [ 
				'id_comanda' => $comandaId
			];

			$conn_comanda_status = db_connect();
			$response_comanda_status = $conn_comanda_status->query( $sql_comanda_status, $bind_comanda_status )
				->getResultArray();
			$error_comanda_status = $conn_comanda_status->error();

			$conn_comanda_status->close();

			if (!is_array( $response_comanda_status )) {
				return $this->response->setStatusCode( 400 )
					->setJSON( [ 
					'message' => ' Comanda não encontrada .',
					'data' => [ ],
					'error' => $error_comanda_status
				] );
			}

			if (count( $response_comanda_status ) == 0) {
				return $this->response->setStatusCode( 400 )
					->setJSON( [ 
					'message' => ' Comanda não encontrada .',
					'data' => [ ],
					'error' => $error_comanda_status
				] );
			}

			// $resp_comanda_id = intval($response_comanda_status[0]['id']);
			$resp_comanda_data_fechada = strval( $response_comanda_status [0] ['data_fechada'] );
			// $resp_comanda_fechado_por = $response_comanda_status[0]['fechado_por'];

			if ($resp_comanda_data_fechada != '1900-01-01') {
				return $this->response->setStatusCode( 400 )
					->setJSON( 
					[ 
						'message' => ' Comanda já fechada.',
						'data' => [ 
							'comandaId' => $comandaId,
							'fechada_em' => $resp_comanda_data_fechada
						],
						'error' => $error_comanda_status
					] );
			}

			$sql = <<<SQL
					update
						comanda_item
					set
						comanda_item_status_id = 3,
						atualizado_por = :usuarioid:,
						data_atualizacao = curdate(),
						hora_atualizacao = curtime()
					where
						id = :comanda_item_id:
						and id_comanda = :comanda_id:
						and comanda_item_status_id = 1
			SQL;
			$conn = db_connect();
			$conn->query( $sql, [ 
				'comanda_id' => $comandaId,
				'comanda_item_id' => $comandaItemId,
				'usuarioid' => UsuarioLogado::getUsuarioId()
			] );
			$affectedRows = $conn->affectedRows();
			$error = $conn->error();
			$conn->close();
			if ($affectedRows > 0) {
				$this->excluirRequisicaoProcedimento( $comandaItemId );
			}

			return $this->response->setStatusCode( $affectedRows && !$error ['code'] ? 200 : 400 )
				->setJSON( 
				[ 
					'message' => $affectedRows ? 'Operação realizada com sucesso.' : 'Falha na operação: Esse item já foi pago ou não existe.',
					'data' => !!$affectedRows && !$error ['code'],
					'error' => $error
				] );
		} catch ( Exception $e ) {
			return $this->response->setStatusCode( 400 )
				->setJSON( [ 
				'message' => 'Dados inválidos',
				'data' => '',
				'error' => 400
			] );
		}

	}

	private function excluirRequisicaoProcedimento(int $comdandaItemId) {

		try {

			$sql = <<<SQL
				select id_requisicao_procedimento from comanda_item ci where ci.id = :comandaitemid:
			SQL;

			$binds = [ 
				'comandaitemid' => $comdandaItemId
			];
			$conn = db_connect();
			$response = $conn->query( $sql, $binds )
				->getResultArray();
			if (is_array( $response )) {
				$reqsuisicaoId = intval( $response [0] ['id_requisicao_procedimento'] );
				$sql_update = <<<SQL
					update requisicao_procedimento 
						set status_id = 3 , 
							atualizado_por = :usuarioid: , 
							data_atualizacao = curdate(),
							hora_atualizacao = curtime() 
					where id = :requisicaoId:
				SQL;

				$binds_update = [ 
					'requisicaoId' => $reqsuisicaoId,
					'usuarioid' => UsuarioLogado::getUsuarioId()
				];
				$conn_update = db_connect();
				$conn_update->query( $sql_update, $binds_update );
				$affectedRows = $conn_update->affectedRows();
				$error = $conn_update->error();
				if (isset( $error ['code'] )) {
					log_message( 'ERROR', $error ['code'] );
				}
			}
		} catch ( Exception $e ) {
			log_message( 'ERROR : ', $e->getCode() . ' - ' . $e->getMessage() );
			log_message( 'TRACE ERROR : ', $e->getTrace() );
		}

	}

	public function getIdadePet($data_nascimento): Response {

		$data = strval( $data_nascimento );
		$data_nascimento = trim( $data );
		$data_nascimento = substr( $data_nascimento, 0, 4 ) . '-' . substr( $data_nascimento, 4, 2 ) . '-' . substr( $data_nascimento, 6, 2 );

		$sql = <<<SQL
		    select
		        case
		            when TIMESTAMPDIFF(MONTH, :datanascimento: , now()) < 12 then
		                concat(convert(TIMESTAMPDIFF(MONTH, :datanascimento: , now()),char(20)),' meses')
		            when (TIMESTAMPDIFF(MONTH, :datanascimento: , now()) >= 12) then
		                case
		                    when ((TIMESTAMPDIFF(MONTH, :datanascimento: , now()) % 12) = 0) then
		                        concat(convert((TIMESTAMPDIFF(MONTH, :datanascimento: , now()) DIV 12), char(20)),' anos  ')
		                    else
		                        concat(
		                            concat(convert((TIMESTAMPDIFF(MONTH, :datanascimento:, now()) DIV 12), char(20)),' anos  '),
		                            concat(convert((TIMESTAMPDIFF(MONTH,:datanascimento: , now()) % 12), char(20)),' meses')
		                        )
		                end
		        end as idade
		SQL;
		$query = db_connect()->query( $sql, [ 
			'datanascimento' => $data_nascimento
		] )
			->getResult();
		return $this->response->setStatusCode( 200 )
			->setJSON( [ 
			'message' => 'Dados encontrados com sucesso.',
			'data' => $query
		] );

	}

	// GERA EXCEL PARA EXPORTAÇÃO
	private function geraRelatorioEmExcel(array $dados, int $params) {

		log_message( "info", " -> geraRelatorioEmExcel Inicio " . DateUtils::now() );

		// 1 = So possui apenas uma comanda | 2 = possui mais de umas comanda
		if ($params == 1) {
			header( 'Content-Type: application/vnd.ms-excel' );
			header( 'Content-Disposition: attachment;filename="testeabc.xlsx"' );
			$spreadsheet = new Spreadsheet();
			$sheet = $spreadsheet->getActiveSheet();

			$cols = [ 
				"Tipo",
				"Itens",
				"Data Criação",
				"Hora Criação",
				"Execução",
				"Hora Execução",
				"Executante",
				"Forma de Pagamento",
				"Data de Pagamento",
				"Hora de Pagamento",
				"Bandeira",
				"Parcelas",
				"Cod Autor",
				"Convênio",
				"Valor",
				"Observação"
			];

			$sheet->fromArray( $cols, null, 'A1' );

			$row_start = 2;

			foreach ( $dados ['itens'] as $value ) {
				$executor = $value ["id_tipo_procedimento"] == 2 || $value ["id_tipo_procedimento"] == 3 ? $value ["nome_medico"] : $value ["nome_executor"];
				$data_execucao = $value ["data_execucao"] == "1900-01-01" ? '-' : date( "d/m/Y", strtotime( $value ["data_execucao"] ) );
				$data_criacao = $value ["data_criacao"] == "1900-01-01" ? '-' : date( "d/m/Y", strtotime( $value ["data_criacao"] ) );
				$data_pagamento = $value ["data_pagamento"] == "1900-01-01" ? '-' : date( "d/m/Y", strtotime( $value ["data_pagamento"] ) );
				$hora_pagamento = $value ["hora_pagamento"] == "00:00:00" ? '-' : date( "H:i:s", strtotime( $value ["hora_pagamento"] ) );
				$obersevacao = $value ["observacao"] ? $value ["observacao"] : '-';

				$array_row [] = $value ["descricao_tipo_procedimento"];
				$array_row [] = $value ["descricao_procedimento"];
				$array_row [] = $data_criacao;
				$array_row [] = $value ["hora_criacao"];
				$array_row [] = $data_execucao;
				$array_row [] = $value ["hora_execucao"];
				$array_row [] = $executor;
				$array_row [] = $value ["forma_pagamento"];
				$array_row [] = $data_pagamento;
				$array_row [] = $hora_pagamento;
				$array_row [] = $value ["bandeira"];
				$array_row [] = $value ["parcelas"];
				$array_row [] = $value ["codauth"];
				$array_row [] = $value ["tipo_convenio"];
				$array_row [] = $value ["valor"];
				$array_row [] = $obersevacao;

				$sheet->fromArray( $array_row, null, 'A' . $row_start );
				unset( $array_row );
				$row_start++;
			}

			$writer = new Xlsx( $spreadsheet );
			$writer->save( 'php://output' );
			// $writer->save('teste_unico.xlsx');
			exit( 0 );
		}

		if ($params = 2) {
			header( 'Content-Type: application/vnd.ms-excel' );
			header( 'Content-Disposition: attachment;filename="testeabc.xlsx"' );
			$spreadsheet = new Spreadsheet();
			$sheet = $spreadsheet->getActiveSheet();

			$last_row = 3;

			$cols = [ 
				"Tipo",
				"Itens",
				"Data Criação",
				"Hora Criação",
				"Execução",
				"Hora Execução",
				"Executante",
				"Forma de Pagamento",
				"Data de Pagamento",
				"Hora de Pagamento",
				"Bandeira",
				"Parcelas",
				"Cod Autor",
				"Convênio",
				"Valor",
				"Observação"
			];
			$header_col = 0;
			$last_row = 0;
			// Foreach de comandas
			foreach ( $dados ['comandas'] as $key => $value ) {

				if ($key == 0) {
					$header_col++;
					$sheet->setCellValue( 'A' . $header_col, 'Comanda ' . $value->id );
					$header_col++;
					$sheet->setCellValue( 'A' . $header_col, 'Cliente:  ' . $value->id_cliente . " - " . $value->nome_cliente );
					$header_col++;
					$sheet->setCellValue( 'A' . $header_col, 'Pet:  ' . $value->id_pet . " - " . $value->nome );
					$last_row = $header_col + 1;
					$sheet->fromArray( $cols, null, 'A' . $last_row );

					// Foreach de itens da comanda
					foreach ( $dados ['itens'] [$key] as $value ) {
						$last_row++;
						$executor = $value->id_tipo_procedimento == 2 || $value->id_tipo_procedimento == 3 ? $value->nome_medico : $value->nome_executor;
						$data_execucao = $value->data_execucao == "1900-01-01" ? '-' : date( "d/m/Y", strtotime( $value->data_execucao ) );
						$data_criacao = $value->data_criacao == "1900-01-01" ? '-' : date( "d/m/Y", strtotime( $value->data_criacao ) );
						$data_pagamento = $value->data_pagamento == "1900-01-01" ? '-' : date( "d/m/Y", strtotime( $value->data_pagamento ) );
						$hora_pagamento = $value->hora_pagamento == "00:00:00" ? '-' : date( "H:i:s", strtotime( $value->hora_pagamento ) );
						$obersevacao = $value->observacao ? $value->observacao : '-';

						$array_row [] = $value->descricao_tipo_procedimento;
						$array_row [] = $value->descricao_procedimento;
						$array_row [] = $data_criacao;
						$array_row [] = $value->hora_criacao;
						$array_row [] = $data_execucao;
						$array_row [] = $value->hora_execucao;
						$array_row [] = $executor;
						$array_row [] = $value->forma_pagamento;
						$array_row [] = $data_pagamento;
						$array_row [] = $hora_pagamento;
						$array_row [] = $value->bandeira;
						$array_row [] = $value->parcelas;
						$array_row [] = $value->codauth;
						$array_row [] = $value->tipo_convenio;
						$array_row [] = $value->valor;
						$array_row [] = $obersevacao;

						$sheet->fromArray( $array_row, null, 'A' . $last_row );
						unset( $array_row );
					}
					$last_row++;
				} else {
					$header_col = $last_row + 1;
					$sheet->setCellValue( 'A' . $header_col, 'Comanda ' . $value->id );
					$header_col++;
					$sheet->setCellValue( 'A' . $header_col, 'Cliente:  ' . $value->id_cliente . " - " . $value->nome_cliente );
					$sheet->setCellValue( 'A' . $header_col, 'Pet:  ' . $value->id_pet . " - " . $value->nome );
					$header_col++;
					$last_row = $header_col + 1;
					$sheet->fromArray( $cols, null, 'A' . $last_row );

					// Foreach de itens da comanda
					foreach ( $dados ['itens'] [$key] as $value ) {
						$last_row++;
						$executor = $value->id_tipo_procedimento == 2 || $value->id_tipo_procedimento == 3 ? $value->nome_medico : $value->nome_executor;
						$data_execucao = $value->data_execucao == "1900-01-01" ? '-' : date( "d/m/Y", strtotime( $value->data_execucao ) );
						$data_criacao = $value->data_criacao == "1900-01-01" ? '-' : date( "d/m/Y", strtotime( $value->data_criacao ) );
						$data_pagamento = $value->data_pagamento == "1900-01-01" ? '-' : date( "d/m/Y", strtotime( $value->data_pagamento ) );
						$hora_pagamento = $value->hora_pagamento == "00:00:00" ? '-' : date( "H:i:s", strtotime( $value->hora_pagamento ) );
						$obersevacao = $value->observacao ? $value->observacao : '-';

						$array_row [] = $value->descricao_tipo_procedimento;
						$array_row [] = $value->descricao_procedimento;
						$array_row [] = $data_criacao;
						$array_row [] = $value->hora_criacao;
						$array_row [] = $data_execucao;
						$array_row [] = $value->hora_execucao;
						$array_row [] = $executor;
						$array_row [] = $value->forma_pagamento;
						$array_row [] = $data_pagamento;
						$array_row [] = $hora_pagamento;
						$array_row [] = $value->bandeira;
						$array_row [] = $value->parcelas;
						$array_row [] = $value->codauth;
						$array_row [] = $value->tipo_convenio;
						$array_row [] = $value->valor;
						$array_row [] = $obersevacao;

						$sheet->fromArray( $array_row, null, 'A' . $last_row );
						unset( $array_row );
					}
					$last_row++;
				}
			}
			log_message( "info", " -> new Xlsx Inicio " . DateUtils::now() );
			$writer = new Xlsx( $spreadsheet );
			log_message( "info", " -> new Xlsx fim " . DateUtils::now() );
			$writer->save( 'php://output' );
			// $writer->save('teste_completo.xlsx');
			log_message( "info", " -> Xlsx save " . DateUtils::now() );
			exit( 0 );
		}

	}

	/*
	 * ===========================================================================================================
	 */

	// GERA RELATORIO DE ATENDIMENTO POR PROFISSIONAL - PDF
	public function gerarRelatorioAtendimentoPorProfisisonalPDF($dataInicial, $dataFinal, $unidade, $profissional, $servico) {

		$dataInicial = $this->toIsoDate( $dataInicial );
		$dataFinal = $this->toIsoDate( $dataFinal );

		/*
		 * ********************************************************************************
		 * SQL BUSCA UNIDADE
		 * ********************************************************************************
		 */

		$sql_unidade = ' select descricao as unidade from unidade where id = :unidade_id: ';
		$binds = [ 
			'unidade_id' => $unidade
		];
		$query_unidade = db_connect()->query( $sql_unidade, $binds )
			->getResultArray();

		/*
		 * ********************************************************************************
		 * SQL BUSCA PROCEDIMENTO
		 * ********************************************************************************
		 */

		$sql_procedimento = ' select descricao from procedimento where id = :servico: ';
		$binds = [ 
			'servico' => $servico
		];
		$procedimento_descricao = db_connect()->query( $sql_procedimento, $binds )
			->getResultArray();

		// Busca quando filtro de profissional esta setado e identifica o perfil do profissional é médico
		if (!empty( $profissional ) && $profissional != 0) {
			$sql_perfil = <<<SQL
				select m.id as medico_id, pf.nome as medico from medico m, usuario u, profissional p, pessoa_fisica pf
				where 
					m.id_profissional = p.id
					and p.id_pessoa = u.id_pessoa
					and u.id_pessoa = pf.id_pessoa
					and u.id = :usuario_id:
			SQL;

			$binds = [ 
				'usuario_id' => $profissional
			];

			$perfil = db_connect()->query( $sql_perfil, $binds )
				->getResultArray();
		}

		$sql_procedimento = <<<SQL
			select distinct
				rp.id_medico, rp.id_pet, tp.id as tipo_procedimento, rp.id as id_requisicao, rp.data_requisicao ,
				rp.hora_requisicao,	rp.data_execucao, rp.hora_execucao, pf.nome as cliente, pr.descricao as servico,
				ci.valor, p.nome as pet, r.nome as raca,
				(case
					when rp.usuario_executor is null then '-'
					else (select nome from pessoa_fisica where id_pessoa = (select id_pessoa from usuario where id = rp.usuario_executor))
				end) as nome_executor,
				(case
					when rp.id_medico  is null then '-'
					else (select nome from pessoa_fisica where id_pessoa = (select id_pessoa from profissional where id = (select id_profissional from medico where id = rp.id_medico)))
				end) as nome_medico
			from
				requisicao_procedimento rp, pet p, convenio_procedimento cp, procedimento_valor pv ,procedimento pr,
				raca r, comanda_item ci, comanda c, pessoa_fisica pf, cliente cl, tipo_procedimento tp
			where
				rp.status_id = 2
				and rp.data_requisicao >= :data_inicio:
				and rp.data_requisicao <= :data_fim:
				and rp.id = ci.id_requisicao_procedimento
				and rp.id_pet = p.id
				and p.id_raca = r.id				
				and ci.id_comanda = c.id
				and c.id_cliente = cl.id
				and pf.id_pessoa = cl.id_pessoa
				and rp.id_convenio_procedimento = cp.id				
				and cp.id_procedimento = pr.id
				and pr.id_tipo_procedimento = tp.id				
				and c.id_unidade = :unidade:
		SQL;

		// Medico com e sem servico
		if (!empty( $perfil )) {
			// Com serviço
			if (!empty( $servico ) && $servico != "0") {
				$sql_procedimento .= '
				and rp.id_medico = :medico_id:
				and pr.id = :procedimento_id:
			';

				$binds = [ 
					'data_inicio' => $dataInicial,
					'data_fim' => $dataFinal,
					'unidade' => $unidade,
					'usuario_id' => $profissional,
					'medico_id' => $perfil [0] ['medico_id'],
					'procedimento_id' => $servico
				];

				$procedimentos = db_connect()->query( $sql_procedimento, $binds )
					->getResultArray();

				$procedimento_medico = '';
				if (!empty( $procedimentos )) {
					$procedimento_medico .= '
					<thead>
					<tr>
						<td colspan="6"><strong>Profissional: </strong>' . $perfil [0] ["medico"] .
							'</td>
					</tr>
					<tr>
						<td style="" width="130px"><strong>Data </strong></td>
						<td style="" ><strong>Cliente </strong></td>
						<td style="" width="100px"><strong>Pet </strong></td>
						<td style=""><strong>Raça </strong></td>
						<td style="" width="200px"><strong>Serviço</strong></td>					
						<td style=""><strong>Execução</strong></td>
					</tr>
					</thead>
				';
				}

				$subtotal += 0.0;
				foreach ( $procedimentos as $procedimento ) {
					$data_requisicao = date( 'd/m/Y', strtotime( $procedimento ['data_requisicao'] ) ) . ' - ' .
							date( 'H:i', strtotime( $procedimento ['hora_requisicao'] ) );
					$data_execucao = date( 'd/m/Y', strtotime( $procedimento ['data_execucao'] ) ) . ' - ' .
							date( 'H:i', strtotime( $procedimento ['hora_execucao'] ) );

					$procedimento_medico .= '
					<tr>
						<td>' . $data_requisicao . '</td>
						<td>' . mb_strimwidth( mb_strtoupper( $procedimento ['cliente'] ), 0, 23 ) . '</td>
						<td>' . mb_strimwidth( mb_strtoupper( $procedimento ['pet'] ), 0, 23 ) . '</td>
						<td>' . mb_strimwidth( mb_strtoupper( $procedimento ['raca'] ), 0, 23 ) . '</td>
						<td>' . mb_strimwidth( mb_strtoupper( $procedimento ['servico'] ), 0, 23 ) . '</td>
						<td>' . $data_execucao . '</td>

					</tr>
					<tr>
						<td colspan="6"><hr></td>
					</tr>
				';
					$subtotal += floatval( $procedimento ['valor'] );
				}
// 				if ($subtotal > 0.0) {
// 					$procedimento_medico .= '
// 					<tr>
// 						<td>  </td>
// 						<td>  </td>
// 						<td>  </td>
// 						<td>   </td>
// 						<td>subtotal</td>
// 						<td> R$ ' . number_format( $subtotal, 2, '.', '' ) . '</td>
// 						<td> </td>
// 					</tr>
// 					<tr>
// 						<td colspan="7"><hr></td>
// 					</tr>';
// 				}
			} else {
				$sql_procedimento .= '
				and rp.id_medico = :medico_id:
				and tp.id in (2,3,6)
			';

				$binds = [ 
					'data_inicio' => $dataInicial,
					'data_fim' => $dataFinal,
					'unidade' => $unidade,
					'usuario_id' => $profissional,
					'medico_id' => $perfil [0] ['medico_id'],
					'procedimento_id' => $servico
				];

				$procedimentos = db_connect()->query( $sql_procedimento, $binds )
					->getResultArray();

				$procedimento_medico = '';
				if (!empty( $procedimentos )) {
					$procedimento_medico .= '
					<thead>
					<tr>
						<td colspan="6"><strong>Profissional: </strong>' . $perfil [0] ["medico"] .
							'</td>
					</tr>
					<tr>
						<td style="" width="130px"><strong>Data </strong></td>
						<td style="" ><strong>Cliente </strong></td>
						<td style="" width="100px"><strong>Pet </strong></td>
						<td style=""><strong>Raça </strong></td>
						<td style="" width="200px"><strong>Serviço</strong></td>
						<td style="" width="100px"><strong>Valor</strong></td>
						<td style=""><strong>Execução</strong></td>
					</tr>
					</thead>
				';
				}
				$subtotal = 0.0;
				foreach ( $procedimentos as $procedimento ) {
					$data_requisicao = date( 'd/m/Y', strtotime( $procedimento ['data_requisicao'] ) ) . ' - ' .
							date( 'H:i', strtotime( $procedimento ['hora_requisicao'] ) );
					$data_execucao = date( 'd/m/Y', strtotime( $procedimento ['data_execucao'] ) ) . ' - ' .
							date( 'H:i', strtotime( $procedimento ['hora_execucao'] ) );

					$procedimento_medico .= '
					<tr>
						<td>' . $data_requisicao . '</td>
						<td>' . mb_strimwidth( mb_strtoupper( $procedimento ['cliente'] ), 0, 23 ) . '</td>
						<td>' . mb_strimwidth( mb_strtoupper( $procedimento ['pet'] ), 0, 23 ) . '</td>
						<td>' . mb_strimwidth( mb_strtoupper( $procedimento ['raca'] ), 0, 23 ) . '</td>
						<td>' . mb_strimwidth( mb_strtoupper( $procedimento ['servico'] ), 0, 23 ) . '</td>
						<td> R$ ' . $procedimento ['valor'] . '</td>
						<td>' . $data_execucao . '</td>
					</tr>
					<tr>
						<td colspan="7"><hr></td>
					</tr>
				';
					$subtotal += floatval( $procedimento ['valor'] );
				}
				if ($subtotal > 0.0) {
					$procedimento_medico .= '
					<tr>
						<td>  </td>
						<td>  </td>
						<td>  </td>
						<td>   </td>
						<td>subtotal</td>
						<td> R$ ' . number_format( $subtotal, 2, '.', '' ) . '</td>
						<td> </td>
					</tr>
					<tr>
						<td colspan="7"><hr></td>
					</tr>';
				}
			}
		}

		// Assistente com e sem servico
		if ($profissional != "0" && empty( $perfil )) {
			// Com serviço
			if (!empty( $servico ) && $servico != "0") {
				$sql_procedimento .= '
				and rp.usuario_executor = :usuario_id:
				and pr.id = :procedimento_id:
			';

				$binds = [ 
					'data_inicio' => $dataInicial,
					'data_fim' => $dataFinal,
					'unidade' => $unidade,
					'usuario_id' => $profissional,
					'medico_id' => $perfil [0] ['medico_id'],
					'procedimento_id' => $servico
				];

				$procedimentos = db_connect()->query( $sql_procedimento, $binds )
					->getResultArray();

				

				$procedimento_assistente = '';
				if (!empty( $procedimentos )) {
					$procedimento_assistente .= '
					<thead>
					<tr>
						<td colspan="6"><strong>Profissional: </strong>' . $perfil [0] ["medico"] .
							'</td>
					</tr>
					<tr>
						<td style="" width="130px"><strong>Data </strong></td>
						<td style="" ><strong>Cliente </strong></td>
						<td style="" width="100px"><strong>Pet </strong></td>
						<td style=""><strong>Raça </strong></td>
						<td style="" width="200px"><strong>Serviço</strong></td>
						<td style=""><strong>Execução</strong></td>
					</tr>
					</thead>
				';
				}
				$subtotal = 0.0;
				foreach ( $procedimentos as $procedimento ) {
					$data_requisicao = date( 'd/m/Y', strtotime( $procedimento ['data_requisicao'] ) ) . ' - ' .
							date( 'H:i', strtotime( $procedimento ['hora_requisicao'] ) );
					$data_execucao = date( 'd/m/Y', strtotime( $procedimento ['data_execucao'] ) ) . ' - ' .
							date( 'H:i', strtotime( $procedimento ['hora_execucao'] ) );

					$procedimento_assistente .= '
					<tr>
						<td>' . $data_requisicao . '</td>
						<td>' . mb_strimwidth( mb_strtoupper( $procedimento ['cliente'] ), 0, 23 ) . '</td>
						<td>' . mb_strimwidth( mb_strtoupper( $procedimento ['pet'] ), 0, 23 ) . '</td>
						<td>' . mb_strimwidth( mb_strtoupper( $procedimento ['raca'] ), 0, 23 ) . '</td>
						<td>' . mb_strimwidth( mb_strtoupper( $procedimento ['servico'] ), 0, 23 ) . '</td>
						<td>' . $data_execucao . '</td>
					</tr>
					<tr>
						<td colspan="6"><hr></td>
					</tr>
				';
					$subtotal += floatval( $procedimento ['valor'] );
				}
				// if ($subtotal > 0.0) {
				// $procedimento_assistente .= '
				// <tr>
				// <td> </td>
				// <td> </td>
				// <td> </td>
				// <td> </td>
				// <td>subtotal</td>
				// <td> R$ ' . number_format( $subtotal, 2, '.', '' ) . '</td>
				// <td> </td>
				// </tr>
				// <tr>
				// <td colspan="7"><hr></td>
				// </tr>';
				// }
			} else {
				$sql_procedimento .= '
				and rp.usuario_executor = :usuario_id:
				and tp.id in (1,4,5)
			';

				$binds = [ 
					'data_inicio' => $dataInicial,
					'data_fim' => $dataFinal,
					'unidade' => $unidade,
					'usuario_id' => $profissional,
					'medico_id' => $perfil [0] ['medico_id'],
					'procedimento_id' => $servico
				];

				$procedimentos = db_connect()->query( $sql_procedimento, $binds )
					->getResultArray();

					$sql_dados_profissional = <<<SQL
					select u.id, u.id_pessoa, pf.nome
					from usuario u, pessoa_fisica pf
					where u.id = :id_usuario: and u.id_pessoa = pf.id_pessoa
				SQL;
					$bind_dados_proissional = [
							'id_usuario' => $profissional
					];
					$dados_profissional = db_connect()->query( $sql_dados_profissional, $bind_dados_proissional )
					->getResultArray();
				$procedimento_assistente = '';
				if (!empty( $procedimentos )) {
					$procedimento_assistente .= '
					<thead>
					<tr>
						<td colspan="7"><strong>Profissional: </strong>' . $dados_profissional [0] ["nome"]  .
							'</td>
					</tr>
					<tr>
						<td style="" width="130px"><strong>Data </strong></td>
						<td style="" ><strong>Cliente </strong></td>
						<td style="" width="100px"><strong>Pet </strong></td>
						<td style=""><strong>Raça </strong></td>
						<td style="" width="200px"><strong>Serviço</strong></td>
						<td style="" width="200px"><strong>Valor</strong></td>
						<td style=""><strong>Execução</strong></td>
					</tr>
					</thead>
				';
				}

				$subtotal = 0.0;

				foreach ( $procedimentos as $procedimento ) {
					$data_requisicao = date( 'd/m/Y', strtotime( $procedimento ['data_requisicao'] ) ) . ' - ' .
							date( 'H:i', strtotime( $procedimento ['hora_requisicao'] ) );
					$data_execucao = date( 'd/m/Y', strtotime( $procedimento ['data_execucao'] ) ) . ' - ' .
							date( 'H:i', strtotime( $procedimento ['hora_execucao'] ) );

					$procedimento_assistente .= '
					<tr>
						<td>' . $data_requisicao . '</td>
						<td>' . mb_strimwidth( mb_strtoupper( $procedimento ['cliente'] ), 0, 23 ) . '</td>
						<td>' . mb_strimwidth( mb_strtoupper( $procedimento ['pet'] ), 0, 23 ) . '</td>
						<td>' . mb_strimwidth( mb_strtoupper( $procedimento ['raca'] ), 0, 23 ) . '</td>
						<td>' . mb_strimwidth( mb_strtoupper( $procedimento ['servico'] ), 0, 23 ) . '</td>
						<td> R$ ' . $procedimento ['valor'] . '</td>
						<td>' . $data_execucao . '</td>
					</tr>
					<tr>
						<td colspan="7"><hr></td>
					</tr>
				';
					$subtotal += floatval( $procedimento ['valor'] );
				}
				if ($subtotal > 0.0) {
					$procedimento_assistente .= '
 					<tr>
 						<td>  </td>
 						<td>  </td>
 						<td>  </td>
 						<td>   </td>
 						<td>subtotal</td>
 						<td> R$ ' . number_format( $subtotal, 2, '.', '' ) . '</td>
 						<td> </td>
 					</tr>
 					<tr>
 						<td colspan="7"><hr></td>
 					</tr>';
				}
			}
		}

		// Somente com servico setado
		if ($servico != "0" && $profissional == "0") {
			$sql_procedimento_medico = '
			and rp.id_medico = :medico_id:
			and pr.id = :procedimento_id:
			and tp.id in (2,3,6)
		';

			$sql_procedimento_assistente = '
			and rp.usuario_executor = :usuario_id:
			and pr.id = :procedimento_id:
			and tp.id in (1,4,5)
		';

			$query_procedimento_medico = $sql_procedimento . $sql_procedimento_medico;
			$query_procedimento_assistente = $sql_procedimento . $sql_procedimento_assistente;

			// Busca todos os medicos das requisições para a unidade especifica
			$sql_medico = <<<SQL
				select distinct
					pf.nome as medico, rp.id_medico
				from
					requisicao_procedimento rp, medico m, profissional p, pessoa_fisica pf
				where
					rp.status_id = 2
				  and rp.id_medico is not null
				  and rp.id_medico = m.id
				  and m.id_profissional = p.id
				  and p.id_pessoa = pf.id_pessoa
			SQL;

			$medicos = db_connect()->query( $sql_medico, [ ] )
				->getResultArray();

			// Faz a consulta para buscar os procedimentos para cada usuario (medico)
			foreach ( $medicos as $medico ) {

				$binds = [ 
					'data_inicio' => $dataInicial,
					'data_fim' => $dataFinal,
					'unidade' => $unidade,
					'usuario_id' => $profissional,
					'medico_id' => $medico ['id_medico'],
					'procedimento_id' => $servico
				];

				$procedimentos = db_connect()->query( $query_procedimento_medico, $binds )
					->getResultArray();

				// Monta o html das rows dos procedimentos
				if (!empty( $procedimentos )) {
					$procedimento_medico .= '
					<thead>
					<tr>
						<td colspan="6"><strong>Profissional: </strong>' . $medico ["medico"] .
							'</td>
					</tr>
					<tr>
						<td style="" width="130px"><strong>Data </strong></td>
						<td style="" ><strong>Cliente </strong></td>
						<td style="" width="100px"><strong>Pet </strong></td>
						<td style=""><strong>Raça </strong></td>
						<td style="" width="200px"><strong>Serviço</strong></td>
						<td style=""><strong>Execução</strong></td>
					</tr>
					</thead>
				';
				}

				$subtotal = 0.0;

				foreach ( $procedimentos as $procedimento ) {
					$data_requisicao = date( 'd/m/Y', strtotime( $procedimento ['data_requisicao'] ) ) . ' - ' .
							date( 'H:i', strtotime( $procedimento ['hora_requisicao'] ) );
					$data_execucao = date( 'd/m/Y', strtotime( $procedimento ['data_execucao'] ) ) . ' - ' .
							date( 'H:i', strtotime( $procedimento ['hora_execucao'] ) );

					$procedimento_medico .= '
					<tr>
						<td>' . $data_requisicao . '</td>
						<td>' . mb_strimwidth( mb_strtoupper( $procedimento ['cliente'] ), 0, 23 ) . '</td>
						<td>' . mb_strimwidth( mb_strtoupper( $procedimento ['pet'] ), 0, 23 ) . '</td>
						<td>' . mb_strimwidth( mb_strtoupper( $procedimento ['raca'] ), 0, 23 ) . '</td>
						<td>' . mb_strimwidth( mb_strtoupper( $procedimento ['servico'] ), 0, 23 ) . '</td>
						<td>' . $data_execucao . '</td>
					</tr>
					<tr>
						<td colspan="6"><hr></td>
					</tr>
				';
					$subtotal += floatval( $procedimento ['valor'] );
				}
				// if ($subtotal > 0.0) {
				// $procedimento_medico .= '
				// <tr>
				// <td> </td>
				// <td> </td>
				// <td> </td>
				// <td> </td>
				// <td>subtotal</td>
				// <td> R$ ' . number_format( $subtotal, 2, '.', '' ) . '</td>
				// <td> </td>
				// </tr>
				// <tr>
				// <td colspan="7"><hr></td>
				// </tr>';
				// }
				// FIM - Monta o html das rows dos procedimentos
			}

			$sql_atendente = <<<SQL
				select distinct 
					rp.usuario_executor as executor_id, pf.nome as executor
				from
					requisicao_procedimento rp, usuario u, pessoa_fisica pf 
				where
					rp.status_id = 2
					and rp.usuario_executor is not null
					and rp.usuario_executor = u.id
					and u.id_pessoa = pf.id_pessoa
			SQL;

			$assistentes = db_connect()->query( $sql_atendente, [ ] )
				->getResultArray();

			// Faz a consulta para buscar os procedimentos para cada usuario (Assistentes)
			foreach ( $assistentes as $assistente ) {
				$binds = [ 
					'data_inicio' => $dataInicial,
					'data_fim' => $dataFinal,
					'unidade' => $unidade,
					'usuario_id' => $assistente ['executor_id'],
					'procedimento_id' => $servico
				];

				$procedimentos_assistente = db_connect()->query( $query_procedimento_assistente, $binds )
					->getResultArray();

				// Monta o html das rows dos procedimentos
				if (!empty( $procedimentos_assistente )) {
					$procedimento_assistente .= '
					<thead>
					<tr>
						<td colspan="6"><strong>Profissional: </strong>' . $assistente ["executor"] .
							'</td>
					</tr>
					<tr>
						<td style="" width="130px"><strong>Data </strong></td>
						<td style=""><strong>Cliente </strong></td>
						<td style="" width="100px"><strong>Pet </strong></td>
						<td style=""><strong>Raça </strong></td>
						<td style="" width="200px"><strong>Serviço</strong></td>						
						<td style=""><strong>Execução</strong></td>
					</tr>
					</thead>
				';
				}
				$subtotal = 0.0;
				if (!empty( $procedimentos_assistente )) {
					foreach ( $procedimentos_assistente as $procedimento ) {
						$data_requisicao = date( 'd/m/Y', strtotime( $procedimento ['data_requisicao'] ) ) . ' - ' .
								date( 'H:i', strtotime( $procedimento ['hora_requisicao'] ) );
						$data_execucao = date( 'd/m/Y', strtotime( $procedimento ['data_execucao'] ) ) . ' - ' .
								date( 'H:i', strtotime( $procedimento ['hora_execucao'] ) );

						$procedimento_assistente .= '
					<tr>
						<td>' . $data_requisicao . '</td>
						<td>' . mb_strimwidth( mb_strtoupper( $procedimento ['cliente'] ), 0, 23 ) . '</td>
						<td>' . mb_strimwidth( mb_strtoupper( $procedimento ['pet'] ), 0, 23 ) . '</td>
						<td>' . mb_strimwidth( mb_strtoupper( $procedimento ['raca'] ), 0, 23 ) . '</td>
						<td>' . mb_strimwidth( mb_strtoupper( $procedimento ['servico'] ), 0, 23 ) . '</td>						
						<td>' . $data_execucao . '</td>
					</tr>
					<tr>
						<td colspan="6"><hr></td>
					</tr>';
						$subtotal += floatval( $procedimento ['valor'] );
					}
				}
				// if ($subtotal > 0.0) {
				// $procedimento_assistente .= '
				// <tr>
				// <td> </td>
				// <td> </td>
				// <td> </td>
				// <td> </td>
				// <td>subtotal</td>
				// <td> R$ ' . number_format( $subtotal, 2, '.', '' ) . '</td>
				// <td> </td>
				// </tr>
				// <tr>
				// <td colspan="7"><hr></td>
				// </tr>';
				// }
				// FIM - Monta o html das rows dos procedimentos
			}
		}

		// Sem filtros obrigatorios
		if ($servico == "0" && $profissional == "0") {
			// Busca todos os medicos das requisições para a unidade especifica
			$sql_medico = <<<SQL
				select distinct
					pf.nome as medico, rp.id_medico
				from
					requisicao_procedimento rp, medico m, profissional p, pessoa_fisica pf
				where
					rp.status_id = 2
				  and rp.id_medico is not null
				  and rp.id_medico = m.id
				  and m.id_profissional = p.id
				  and p.id_pessoa = pf.id_pessoa
			SQL;

			$medicos = db_connect()->query( $sql_medico, [ ] )
				->getResultArray();

			// Faz a consulta para buscar os procedimentos para cada usuario (medico)
			foreach ( $medicos as $medico ) {
				$proc_medico = '
				and rp.id_medico = :medico_id:
				and tp.id in (2,3,6)
			';
				$sql_procedimento .= $proc_medico;

				$binds = [ 
					'data_inicio' => $dataInicial,
					'data_fim' => $dataFinal,
					'unidade' => $unidade,
					'usuario_id' => $profissional,
					'medico_id' => $medico ['id_medico'],
					'procedimento_id' => $servico
				];

				$procedimentos = db_connect()->query( $sql_procedimento, $binds )
					->getResultArray();

				// Monta o html das rows dos procedimentos
				if (!empty( $procedimentos )) {
					$procedimento_medico .= '
					<thead>
					<tr>
						<td colspan="6"><strong>Profissional: </strong>' . $medico ["medico"] .
							'</td>
					</tr>
					<tr>
						<td style="" width="130px"><strong>Data </strong></td>
						<td style="" ><strong>Cliente </strong></td>
						<td style="" width="100px"><strong>Pet </strong></td>
						<td style=""><strong>Raça </strong></td>
						<td style="" width="200px"><strong>Serviço</strong></td>
						<td style=""><strong>Execução</strong></td>
					</tr>
					</thead>
				';
				}
				$subtotal = 0.0;
				foreach ( $procedimentos as $procedimento ) {
					$data_requisicao = date( 'd/m/Y', strtotime( $procedimento ['data_requisicao'] ) ) . ' - ' .
							date( 'H:i', strtotime( $procedimento ['hora_requisicao'] ) );
					$data_execucao = date( 'd/m/Y', strtotime( $procedimento ['data_execucao'] ) ) . ' - ' .
							date( 'H:i', strtotime( $procedimento ['hora_execucao'] ) );

					$procedimento_medico .= '
					<tr>
						<td>' . $data_requisicao . '</td>
						<td>' . mb_strimwidth( mb_strtoupper( $procedimento ['cliente'] ), 0, 23 ) . '</td>
						<td>' . mb_strimwidth( mb_strtoupper( $procedimento ['pet'] ), 0, 23 ) . '</td>
						<td>' . mb_strimwidth( mb_strtoupper( $procedimento ['raca'] ), 0, 23 ) . '</td>
						<td>' . mb_strimwidth( mb_strtoupper( $procedimento ['servico'] ), 0, 23 ) . '</td>
						<td>' . $data_execucao . '</td>
					</tr>
					<tr>
						<td colspan="6"><hr></td>
					</tr>
				';
					$subtotal += floatval( $procedimento ['valor'] );
				}
				// if ($subtotal > 0.0) {
				// $procedimento_medico .= '
				// <tr>
				// <td> </td>
				// <td> </td>
				// <td> </td>
				// <td> </td>
				// <td>subtotal</td>
				// <td> R$ ' . number_format( $subtotal, 2, '.', '' ) . '</td>
				// <td> </td>
				// </tr>
				// <tr>
				// <td colspan="6"><hr></td>
				// </tr>';
				// }
				// FIM - Monta o html das rows dos procedimentos
			}

			/*
			 * ************************************************************************************************************************
			 * ************************************************************************************************************************
			 * ************************************************************************************************************************
			 */

			$sql_atendente = <<<SQL
				select distinct 
					rp.usuario_executor as executor_id, pf.nome as executor
				from
					requisicao_procedimento rp, usuario u, pessoa_fisica pf 
				where
					rp.status_id = 2
					and rp.usuario_executor is not null
					and rp.usuario_executor = u.id
					and u.id_pessoa = pf.id_pessoa
			SQL;

			$assistentes = db_connect()->query( $sql_atendente, [ ] )
				->getResultArray();

			// Faz a consulta para buscar os procedimentos para cada usuario (Assistentes)
			foreach ( $assistentes as $assistente ) {
				$proc_assistente = <<<SQL
					select distinct
						rp.id_medico, rp.id_pet, tp.id as tipo_procedimento, rp.id as id_requisicao,
						rp.data_requisicao , rp.hora_requisicao, rp.data_execucao, rp.hora_execucao,
						pf.nome as cliente, pr.descricao as servico, ci.valor, p.nome as pet,
						r.nome as raca,	rp.usuario_executor,
						(case
							when rp.usuario_executor is null then '-'
							else (select nome from pessoa_fisica where id_pessoa = (select id_pessoa from usuario where id = rp.usuario_executor))
						end ) as nome_executor,
						(case
							when rp.id_medico  is null then '-'
							else (select nome from pessoa_fisica where id_pessoa = (select id_pessoa from profissional where id = (select id_profissional from medico where id = rp.id_medico)))
						end	) as nome_medico
					from
						requisicao_procedimento rp, pet p, convenio_procedimento cp, procedimento pr, raca r,
						comanda_item ci, comanda c, pessoa_fisica pf, cliente cl, tipo_procedimento tp
					where
						rp.status_id = 2
						and rp.data_requisicao >= :data_inicio:
						and rp.data_requisicao <= :data_fim:
						and rp.usuario_executor = :usuario_id:
						and rp.id_pet = p.id
						and p.id_raca = r.id
						and rp.id = ci.id_requisicao_procedimento
						and ci.id_comanda = c.id
						and c.id_unidade = :unidade:
						and c.id_cliente = cl.id
						and pf.id_pessoa = cl.id_pessoa
						and rp.id_convenio_procedimento = cp.id
						and cp.id_procedimento = pr.id
						and pr.id_tipo_procedimento = tp.id
						and tp.id in (1,4,5)
				SQL;

				$binds = [ 
					'data_inicio' => $dataInicial,
					'data_fim' => $dataFinal,
					'unidade' => $unidade,
					'usuario_id' => $assistente ['executor_id'],
					'procedimento_id' => $servico
				];

				$procedimentos_assistente = db_connect()->query( $proc_assistente, $binds )
					->getResultArray();

				// Monta o html das rows dos procedimentos
				if (!empty( $procedimentos_assistente )) {
					$procedimento_assistente .= '
					<thead>
					<tr>
						<td colspan="6"><strong>Profissional: </strong>' . $assistente ["executor"] .
							'</td>
					</tr>
					<tr>
						<td style="" width="130px"><strong>Data </strong></td>
						<td style="" ><strong>Cliente </strong></td>
						<td style="" width="100px"><strong>Pet </strong></td>
						<td style=""><strong>Raça </strong></td>
						<td style="" width="200px"><strong>Serviço</strong></td>
						<td style="" width="100px"><strong>Valor</strong></td>
						<td style=""><strong>Execução</strong></td>
					</tr>
					</thead>
				';
				}

				$subtotal = 0.0;

				foreach ( $procedimentos_assistente as $procedimento ) {
					$data_requisicao = date( 'd/m/Y', strtotime( $procedimento ['data_requisicao'] ) ) . ' - ' .
							date( 'H:i', strtotime( $procedimento ['hora_requisicao'] ) );
					$data_execucao = date( 'd/m/Y', strtotime( $procedimento ['data_execucao'] ) ) . ' - ' .
							date( 'H:i', strtotime( $procedimento ['hora_execucao'] ) );

					$procedimento_assistente .= '
					<tr>
						<td>' . $data_requisicao . '</td>
						<td>' . mb_strimwidth( mb_strtoupper( $procedimento ['cliente'] ), 0, 23 ) . '</td>
						<td>' . mb_strimwidth( mb_strtoupper( $procedimento ['pet'] ), 0, 23 ) . '</td>
						<td>' . mb_strimwidth( mb_strtoupper( $procedimento ['raca'] ), 0, 23 ) . '</td>
						<td>' . mb_strimwidth( mb_strtoupper( $procedimento ['servico'] ), 0, 23 ) . '</td>
						<td> R$ ' . $procedimento ['valor'] . '</td>
						<td>' . $data_execucao . '</td>
					</tr>
					<tr>
						<td colspan="7"><hr></td>
					</tr>
				';
					$subtotal += floatval( $procedimento ['valor'] );
				}

				if ($subtotal > 0.0) {
					$procedimento_assistente .= '
					<tr>
						<td>  </td>
						<td>  </td>
						<td>  </td>
						<td>   </td>
						<td>subtotal</td>
						<td> R$ ' . number_format( $subtotal, 2, '.', '' ) . '</td>
						<td> </td>
					</tr>
					<tr>
						<td colspan="7"><hr></td>
					</tr>';
				}

				// FIM - Monta o html das rows dos procedimentos
			}
		}
		// else {
		// $binds = [
		// 'data_inicio' => $dataInicial,
		// 'data_fim' => $dataFinal,
		// 'unidade' => $unidade,
		// 'usuario_id' => $profissional,
		// 'medico_id' => $perfil[0]['medico_id'],
		// 'procedimento_id' => $servico
		// ];
		//
		// $procedimentos = db_connect()->query( $sql_procedimento, $binds )->getResultArray();
		//
		// $procedimento_medico = '';
		// if(!empty($procedimentos)) {
		// $procedimento_medico .= '
		// <tr>
		// <td colspan="6"><strong>Profissional: </strong>'.$perfil[0]["medico"].'</td>
		// </tr>
		// <tr>
		// <td style="" width="130px"><strong>Data </strong></td>
		// <td style="" ><strong>Cliente </strong></td>
		// <td style="" width="100px"><strong>Pet </strong></td>
		// <td style=""><strong>Raça </strong></td>
		// <td style="" width="200px"><strong>Serviço</strong></td>
		// <td style=""><strong>Execução</strong></td>
		// </tr>
		// ';
		// }
		//
		// foreach($procedimentos as $procedimento) {
		// $data_requisicao = date('d/m/Y', strtotime($procedimento['data_requisicao'])).' - '.date('H:i', strtotime($procedimento['hora_requisicao']));
		// $data_execucao = date('d/m/Y', strtotime($procedimento['data_execucao'])).' - '.date('H:i', strtotime($procedimento['hora_execucao']));
		//
		// $procedimento_medico .= '
		// <tr>
		// <td>'.$data_requisicao.'</td>
		// <td>'.mb_strimwidth(mb_strtoupper($procedimento['cliente']), 0, 23).'</td>
		// <td>'.mb_strimwidth(mb_strtoupper($procedimento['pet']), 0, 23).'</td>
		// <td>'.mb_strimwidth(mb_strtoupper($procedimento['raca']), 0, 23).'</td>
		// <td>'.mb_strimwidth(mb_strtoupper($procedimento['servico']), 0, 23).'</td>
		// <td>'.$data_execucao.'</td>
		// </tr>
		// <tr>
		// <td colspan="6"><hr></td>
		// </tr>
		// ';
		// }
		// }

		$html = '';
		$html .= '<html>';
		$html .= '<head> ';
		$html .= '<style> ';
		$html .= "
			<style> 
				@page {
					margin: 0cm 0cm;
				}
				body {
					margin-top: 3cm;
					margin-bottom: 2cm;
				}
	
				/** Define the header rules **/
				header {
					position: fixed;
					top: -1cm;
					left: 0cm;
					right: 0cm;
					height: 2cm;
					text-align: center; 
				}
			</style> 
	
	";
		$html .= '</style> ';
		$html .= '</head> ';
		$html .= '<body> ';
		/*
		 * ************************************************************************
		 * HEADER
		 * ************************************************************************
		 */
		$nome_profissionl = !empty( $perfil [0] ["medico"] ) ? $perfil [0] ["medico"] : "Todos";
		$html .= '<header>';
		$html .= "<h2 style='text-align: center; font-size: 30px'> Relatório de Atendimento </h2>";
		$html .= '   <table border="0" width="100%">
			<tr>
				<td>Período: ' . date( "d/m/Y", strtotime( $dataInicial ) ) . ' até ' . date( "d/m/Y", strtotime( $dataFinal ) ) . '</td>
				<td>Profissional: ' . $nome_profissionl . '</td>
				<td>Serviço: ' . (!empty( $procedimento_descricao [0] ["descricao"] ) ? $procedimento_descricao [0] ["descricao"] : "TODOS") . '</td>
				<td>Unidade: ' . $query_unidade [0] ["unidade"] . '</td>
				<td>Data: ' . date( 'd/m/Y' ) . '</td>
			</tr>              
		</table>';
		$html .= '<hr>';
		$html .= '</header>';
		/*
		 * ************************************************************************
		 * FIM HEADER
		 * ************************************************************************
		 */

		/*
		 * ************************************************************************
		 * MAIN
		 * ************************************************************************
		 */
		$html .= '<main>';
		$html .= '<table style="font-size: 13px" border="0" width="100%">
			' . $procedimento_medico . '
			' . $procedimento_assistente . '
		</table>';
		$html .= '</table>';
		$html .= '</main>';
		/*
		 * ************************************************************************
		 * FIM MAIN
		 * ************************************************************************
		 */
		$html .= '</html>';

		$dompdf = new Dompdf();
		$dompdf->loadHtml( $html );
		$dompdf->setPaper( 'A4', 'landscape' );
		$dompdf->render();
		$dompdf->stream( 'relatorio.pdf' );
		exit( 0 );

	}

	public function relatorioComandaFullItens($dataInicial, $dataFinal, int $unidade, int $convenio, int $execucao) {

		$comandaService = new ComandaService();

		$response = $comandaService->getHtmlRelatorioComandaFullItemPorConvenio( $dataInicial, $dataFinal, $unidade, $convenio, $execucao );
		$html = $response->getData();
		$dompdf = new Dompdf();
		$dompdf->loadHtml( $html );
		$dompdf->setPaper( 'A4', 'landscape' );
		$dompdf->render();
		$dompdf->stream( 'relatorio.pdf' );
		exit( 0 );

	}

	public function relatorioComandaExcelFullItens($dataInicial, $dataFinal, int $unidade, int $convenio, int $execucao) {

		$comandaService = new ComandaService();

		$response = $comandaService->getExcelRelatorioComandaFullItemPorConvenio( $dataInicial, $dataFinal, $unidade, $convenio, $execucao );
		$spreadsheet = $response->getData();
		$writer = new Xlsx( $spreadsheet );
		$writer->save( 'php://output' );
		exit( 0 );

	}

}
