| Server IP : 162.214.74.102 / Your IP : 216.73.217.114 Web Server : Apache System : Linux dedi-4363141.lrsys.com.br 3.10.0-1160.119.1.el7.tuxcare.els25.x86_64 #1 SMP Wed Oct 1 17:37:27 UTC 2025 x86_64 User : lrsys ( 1015) PHP Version : 5.6.40 Disable Function : exec,passthru,shell_exec,system MySQL : ON | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : ON | Pkexec : ON Directory : /home/lrsys/www/lrsys_apps/leo/application/plugins/module_fish/controllers/ |
Upload File : |
<?php
include_once "Controller.php";
include_once __DIR__ . "/../models/FoodProgramsModel.php";
include_once __DIR__ . "/../models/MovementModel.php";
class AssociatedController extends Controller {
protected $id;
protected $modelProgram;
protected $modelMovement;
/**
* @param $ui
* @param array $_L
* @param array $config
* @param $_pd
*/
public function __construct($ui, $_L, $config, $_pd) {
parent::__construct($ui, $_L, $config, $_pd);
$this->ui->assign('_title', $this->_L['Fish Description module'] . ' - ' . $this->config['CompanyName']);
$this->modelProgram = new FoodProgramsModel();
$this->modelMovement = new MovementModel();
$this->id = $this->routes[3];
}
public function listAssociated() {
// LISTAR PROGRAMA ALIMENTAR
$filter = array();
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$filter['module_fish_species_id'] = isset($_POST['module_fish_species_id']) ? $_POST['module_fish_species_id'] : "";
$filter['crm_accounts_id'] = isset($_POST['crm_accounts_id']) ? $_POST['crm_accounts_id'] : "";
$filter['average_weight_ini'] = _post('average_weight_ini');
$filter['average_weight_end'] = _post('average_weight_end');
$filter['period_ini'] = _post('period_ini');
$filter['period_end'] = _post('period_end');
}
$sql = 'Select l.* ,ld.id as lote_id, lp.module_fish_program_id, ca.id as account_id, ca.email,ca.phone, ca.account, s.popular_name, s.id as specie_id, s.scientific_name, ld.qty,t.function_tank as function_tank, t.title_tank,t.id as id_tank, p.name as name_program';
$from = ' from module_fish_lots l '
. 'JOIN module_fish_lots_distribution ld ON(ld.module_fish_lots_id=l.id)'
. ' LEFT JOIN module_fish_lots_distribution_program lp ON(lp.module_fish_lots_distribution_id=ld.id)'
. ' LEFT JOIN module_fish_tank t ON(ld.module_fish_tank_id=t.id)'
. ' LEFT JOIN module_fish_food_programs p ON(lp.module_fish_program_id=p.id)'
. ' LEFT JOIN crm_accounts ca ON(l.crm_accounts_id=ca.id)'
. ' LEFT JOIN module_fish_species s ON(l.module_fish_species_id=s.id)'
. " WHERE l.deleted_at IS NULL AND ld.deleted_at IS NULL ";
$where = "";
if (isset($filter['crm_accounts_id']) && $filter['crm_accounts_id'] != '') {
$where .= " AND l.crm_accounts_id IN (" . implode(',', $filter['crm_accounts_id']) . ")";
$options = "";
foreach ($filter['crm_accounts_id'] as $c) {
$c = ORM::for_table('crm_accounts')->find_one($c);
if (count($c) > 0) {
$options .= '<option value="' . $c->id . '" selected >' . $c->account . '</option>';
}
}
$this->ui->assign('account', $options);
} else {
$this->ui->assign('account', '');
}
if (isset($filter['module_fish_species_id']) && $filter['module_fish_species_id'] != '') {
$where .= " AND l.module_fish_species_id IN (" . implode(',', $filter['module_fish_species_id']) . ")";
$options = "";
foreach ($filter['module_fish_species_id'] as $c) {
$c = ORM::for_table('module_fish_species')->find_one($c);
if (count($c) > 0) {
$options .= '<option value="' . $c->id . '" selected >' . $c->popular_name . " - " . $c->popular_name . '</option>';
}
}
$this->ui->assign('species', $options);
} else {
$this->ui->assign('species', '');
}
$sql .= $from . $where . ' order by ca.account asc';
$allRecords = ORM::for_table('module_fish_lots')->raw_query($sql)->find_many();
$totalFish = 0;
$totalFunctionTank=array();
$totalArea = 0;
$totalTank = 0;
$associado = array();
for ($i = 0; $i < count($allRecords); $i++) {
//guardo os dados do associado, caso nao exista ainda, na listagem que vai para a view
if (!isset($associado[$allRecords[$i]->account_id])) {
$associado[$allRecords[$i]->account_id]['id'] = $allRecords[$i]->account_id;
$associado[$allRecords[$i]->account_id]['account'] = $allRecords[$i]->account;
$associado[$allRecords[$i]->account_id]['phone'] = $allRecords[$i]->phone;
$associado[$allRecords[$i]->account_id]['email'] = $allRecords[$i]->email;
$associado[$allRecords[$i]->account_id]['total_fish'] = 0;
$associado[$allRecords[$i]->account_id]['total_biomass'] = 0;
}
$weight_diferen = $this->modelProgram->weigthEstimatedProgramLastBiometry($allRecords[$i]);
$diferecaBiometriaProgramDays = $weight_diferen['diferecaBiometriaProgramDays'];
$weight_actual = $weight_diferen['weight_actual'];
//despesca
$periodDespesca = ORM::for_table('module_fish_food_program_periods')
->table_alias('pp')
->select('pp.*')
->where("pp.module_fish_food_programs_id", $allRecords[0]->module_fish_program_id)
->limit(1)
->order_by_expr('pp.period_total DESC') //pega o ultimo periodo cadastrado para o programa
->find_many();
if ($diferecaBiometriaProgramDays <= 0) {
$associado[$allRecords[$i]->account_id]['date_desp_fim'] = date('Y-m-d', strtotime("+ " .
($diferecaBiometriaProgramDays +
$periodDespesca[0]->period_total)
. ' days', strtotime(($allRecords[$i]->date_settlement))));
} else {
$associado[$allRecords[$i]->account_id]['date_desp_fim'] = date('Y-m-d', strtotime("+ " .
($periodDespesca[0]->period_total - $diferecaBiometriaProgramDays)
. ' days', strtotime(($allRecords[$i]->date_settlement))));
}
$associado[$allRecords[$i]->account_id]['date_desp_ini'] = date('Y-m-d', strtotime("- " . $periodDespesca[0]->period_total . ' days', strtotime($associado[$allRecords[$i]->account_id]['date_desp_fim'])));
//verificação se o calculo avançar o cronograma, a data de despesca passa a ser n dia
//antes da data que seria , nesse cado valido para nao deixar a despesca com data anterior ao povoamento
//isso em cado de informações divergente nos cadastos, de biometria, ou evolução do programa
if (strtotime($associado[$allRecords[$i]->account_id]['date_desp_ini']) < strtotime($allRecords[$i]->date_settlement)) {
$associado[$allRecords[$i]->account_id]['date_desp_ini'] = $allRecords[$i]->date_settlement;
}
if (strtotime($associado[$allRecords[$i]->account_id]['date_desp_fim']) < strtotime($allRecords[$i]->date_settlement)) {
$associado[$allRecords[$i]->account_id]['date_desp_fim'] = $allRecords[$i]->date_settlement;
}
//verificar o filtro de peso medio, antes de salvar essas informações e o peso de
$totalMovimented = $this->modelMovement->getTotalMovimentTankLote($allRecords[$i]->lote_id, $allRecords[$i]->id_tank, date('Y-m-d H:i:s'));
$allRecords[$i]->qty = $allRecords[$i]->qty + $totalMovimented;
$dataValid = true;
if (isset($filter['average_weight_ini']) && $filter['average_weight_ini'] != '') {
if (($weight_actual * $allRecords[$i]->qty) < Finance::amount_fix($filter['average_weight_ini'])) {
$dataValid = false;
}
}
if (isset($filter['average_weight_end']) && $filter['average_weight_end'] != '') {
if (($weight_actual * $allRecords[$i]->qty) > Finance::amount_fix($filter['average_weight_end'])) {
$dataValid = false;
}
}
if (isset($filter['period_end']) && $filter['period_end'] != '') {
if (strtotime($associado[$allRecords[$i]->account_id]['date_desp_fim']) > strtotime($filter['period_end'])) {
$dataValid = false;
}
}
if (isset($filter['period_ini']) && $filter['period_ini'] != '') {
if (strtotime($associado[$allRecords[$i]->account_id]['date_desp_fim']) < strtotime($filter['period_ini'])) {
$dataValid = false;
}
}
if (strtotime($allRecords[$i]->date_settlement) > strtotime(date('Y-m-d'))) {
$dataValid = false;
}
if ($dataValid) {
$totalFish += $allRecords[$i]->qty;
$associado[$allRecords[$i]->account_id]['total_fish'] += $allRecords[$i]->qty;
$associado[$allRecords[$i]->account_id]['total_biomass'] += ($allRecords[$i]->qty * $weight_actual);
if (isset($associado[$allRecords[$i]->account_id]['species'][$allRecords[$i]->specie_id])) {
$associado[$allRecords[$i]->account_id]['species'][$allRecords[$i]->specie_id]["total"] += $allRecords[$i]->qty;
$associado[$allRecords[$i]->account_id]['species'][$allRecords[$i]->specie_id]["biomass"] += ($allRecords[$i]->qty * $weight_actual);
} else {
$associado[$allRecords[$i]->account_id]['species'][$allRecords[$i]->specie_id]["total"] = $allRecords[$i]->qty;
$associado[$allRecords[$i]->account_id]['species'][$allRecords[$i]->specie_id]["name"] = $allRecords[$i]->popular_name;
$associado[$allRecords[$i]->account_id]['species'][$allRecords[$i]->specie_id]["biomass"] = ($allRecords[$i]->qty * $weight_actual);
}
//armazena os totais por tank pelo tipo de função
if (isset($associado[$allRecords[$i]->account_id]['tanks'][$allRecords[$i]->function_tank])) {
$associado[$allRecords[$i]->account_id]['tanks'][$allRecords[$i]->function_tank]["total"] += $allRecords[$i]->qty;
$associado[$allRecords[$i]->account_id]['tanks'][$allRecords[$i]->function_tank]["biomass"] += ($allRecords[$i]->qty * $weight_actual);
} else {
$associado[$allRecords[$i]->account_id]['tanks'][$allRecords[$i]->function_tank]["total"] = $allRecords[$i]->qty;
$associado[$allRecords[$i]->account_id]['tanks'][$allRecords[$i]->function_tank]["name"] = $allRecords[$i]->function_tank=='engorda'? $this->_L['Module_Fish Engorda']:($allRecords[$i]->function_tank=='berçario'?$this->_L['Module_Fish Berçario']:$this->_L['Uninformed']);
$associado[$allRecords[$i]->account_id]['tanks'][$allRecords[$i]->function_tank]["biomass"] = ($allRecords[$i]->qty * $weight_actual);
}
if (isset($totalFunctionTank[$allRecords[$i]->function_tank]['total'])) {
$totalFunctionTank[$allRecords[$i]->function_tank]['total']+=$allRecords[$i]->qty;
$totalFunctionTank[$allRecords[$i]->function_tank]['biomass']+=($allRecords[$i]->qty * $weight_actual);
}else{
$totalFunctionTank[$allRecords[$i]->function_tank]['total']=$allRecords[$i]->qty;
$totalFunctionTank[$allRecords[$i]->function_tank]['biomass']=($allRecords[$i]->qty * $weight_actual);
}
}
}
foreach ($associado as $ass) {
if (isset($ass['species']) && count($ass['species']) > 0) {
//verifica os quantitativos de tanques do associado
$tankInativo = ORM::for_table('module_fish_tank')->raw_query(""
. "SELECT t.* FROM module_fish_tank t where t.id not in(select ld.module_fish_tank_id from module_fish_lots_distribution ld
join module_fish_lots l ON (l.id=ld.module_fish_lots_id)
where ld.closed=0 and l.crm_accounts_id=" . $ass['id'] . " ) and t.crm_accounts_id=" . $ass['id'])->find_many();
$tankAtivo = ORM::for_table('module_fish_tank')->raw_query(""
. "SELECT t.* FROM module_fish_tank t where t.id in(select ld.module_fish_tank_id from module_fish_lots_distribution ld
join module_fish_lots l ON (l.id=ld.module_fish_lots_id)
where ld.closed=0 and l.crm_accounts_id=" . $ass['id'] . " ) and t.crm_accounts_id=" . $ass['id'])->find_many();
$associado[$ass['id']]['tank_total'] = count($tankInativo) + count($tankAtivo);
$associado[$ass['id']]['tank_total_area_inativo'] = 0;
$associado[$ass['id']]['tank_total_area_ativo'] = 0;
for ($t = 0; $t < count($tankAtivo); $t++) {
$associado[$ass['id']]['tank_total_area_ativo'] += $tankAtivo[$t]->area_tank;
}
for ($t = 0; $t < count($tankInativo); $t++) {
$associado[$ass['id']]['tank_total_area_inativo'] += $tankInativo[$t]->area_tank;
}
} else {
unset($associado[$ass['id']]);
}
}
$css_arr = array(
's2/css/select2.min',
'dp/dist/datepicker.min',
'/../../../application/plugins/module_fish/assets/css/default');
$js_arr = array(
's2/js/select2.min',
'numeric',
'dp/dist/datepicker.min',
'/../../../application/plugins/module_fish/assets/js/associated-list'
);
$assets_css = Asset::css($css_arr);
$assets_js = Asset::js($js_arr);
$this->ui->assign('xheader', $assets_css);
$this->ui->assign('xfooter', $assets_js);
$this->ui->assign('jsvar', '
_L[\'Module_Fish Select Specie\'] = \'' . $this->_L['Module_Fish Select Specie'] . '\';
_L[\'Module_Fish Select Associated\'] = \'' . $this->_L['Module_Fish Select Associated'] . '\';')
;
foreach ($associado as $d) {
$totalTank += $d['tank_total'];
$totalArea += $d['tank_total_area_inativo'] + $d['tank_total_area_ativo'];
}
$bottomBar = array(
array('type' => 'int', 'info' => $this->_L['Module_Fish Total fish']." ".$this->_L['Module_Fish Berçario'], 'value' => isset($totalFunctionTank['berçario']['total'])?$totalFunctionTank['berçario']['total']:0),
array('type' => 'float', 'info' => $this->_L['Module_Fish Biomass Total'] ." ".$this->_L['Module_Fish Berçario']." Kg", 'value' => isset($totalFunctionTank['berçario']['biomass'])?$totalFunctionTank['berçario']['biomass']:0),
array('type' => 'int', 'info' => $this->_L['Module_Fish Total fish']." ".$this->_L['Module_Fish Engorda'], 'value' => isset($totalFunctionTank['engorda']['total'])?$totalFunctionTank['engorda']['total']:0),
array('type' => 'float', 'info' => $this->_L['Module_Fish Biomass Total'] ." ".$this->_L['Module_Fish Engorda']." Kg", 'value' => isset($totalFunctionTank['engorda']['biomass'])?$totalFunctionTank['engorda']['biomass']:0),
array('type' => 'int', 'info' => $this->_L['Module_Fish Total fish'], 'value' => $totalFish),
array('type' => 'float', 'info' => $this->_L['Module_Fish Total area'] . " ha", 'value' => ($totalArea / 10000)),
array('type' => 'int', 'info' => $this->_L['Module_Fish Number Tanks'], 'value' => $totalTank),
);
$this->ui->assign('bottomBar', $bottomBar);
$this->ui->assign('filter', $filter);
$this->ui->assign('associate', $associado);
$this->ui->assign('_st', $this->_L['Fish Description module']);
$this->ui->assign('_include', 'associated/list');
$this->ui->display('wrapper.tpl');
}
//função que monta e filtra as informações para o relatório em xls, e o detalhado
private function findCompileData() {
// LISTAR PROGRAMA ALIMENTAR
$filter = array();
if (empty($this->routes[3]) || !is_numeric($this->routes[3])) {
die($this->_L['Not found']);
}
$filter['crm_accounts_id'] = $this->routes[3];
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$filter['period_ini'] = _postDate('period_ini');
$filter['period_end'] = _postDate('period_end');
$filter['average_weight_ini'] = _post('average_weight_ini');
$filter['average_weight_end'] = _post('average_weight_end');
$filter['biomass_ini'] = _post('biomass_ini');
$filter['biomass_end'] = _post('biomass_end');
}
$filter['module_fish_species_id'] = isset($_POST['module_fish_species_id']) ? $_POST['module_fish_species_id'] : "";
$filter['lote_id'] = array();
$lotesSelected = isset($_POST['lote_id']) ? $_POST['lote_id'] : array();
for ($i = 0; $i < count($lotesSelected); $i++) {
$filter['lote_id'][$lotesSelected[$i]] = $lotesSelected[$i];
}
$sql = 'Select l.* ,ld.id as lote_id,lp.module_fish_program_id, ca.account,s.popular_name, s.scientific_name, s.id as specie_id,ld.qty,t.id as id_tank,t.title_tank,p.name as name_program,'
. '(select b.average_weight from module_fish_lots_distribution_biometry b where b.module_fish_lots_distribution_id=ld.id order by id asc limit 1) as average_weight ';
$from = ' from module_fish_lots l '
. ' JOIN module_fish_lots_distribution ld ON(ld.module_fish_lots_id=l.id)'
. ' LEFT JOIN module_fish_lots_distribution_program lp ON(lp.module_fish_lots_distribution_id=ld.id)'
. ' LEFT JOIN module_fish_tank t ON(ld.module_fish_tank_id=t.id)'
. ' LEFT JOIN module_fish_food_programs p ON(lp.module_fish_program_id=p.id)'
. ' LEFT JOIN crm_accounts ca ON(l.crm_accounts_id=ca.id)'
. ' LEFT JOIN module_fish_species s ON(l.module_fish_species_id=s.id)'
. " WHERE l.deleted_at IS NULL AND ld.deleted_at IS NULL";
$where = " AND l.crm_accounts_id=" . intval($filter['crm_accounts_id']);
//filtro pelas datas de povoamentos, dos lotesdistributiion
if (isset($filter['period_ini']) && $filter['period_ini'] != '') {
$where .= " AND l.date_settlement>='" . $filter['period_ini'] . "'";
}
if (isset($filter['period_end']) && $filter['period_end'] != '') {
$where .= " AND l.date_settlement<='" . $filter['period_end'] . "'";
}
$allLots = ORM::for_table('module_fish_lots')->raw_query("Select l.* ,ld.id as lote_id,t.id as id_tank,t.title_tank" . $from . $where)->find_many();
if (isset($filter['lote_id']) && !empty($filter['lote_id'])) {
$where .= " AND ld.id IN (" . implode(',', $filter['lote_id']) . ")";
} else {
$where .= " ";
}
$species = "";
if (isset($filter['module_fish_species_id']) && $filter['module_fish_species_id'] != '') {
$where .= " AND l.module_fish_species_id IN (" . implode(',', $filter['module_fish_species_id']) . ")";
foreach ($filter['module_fish_species_id'] as $c) {
$c = ORM::for_table('module_fish_species')->find_one($c);
if (count($c) > 0) {
$species .= '<option value="' . $c->id . '" selected >' . $c->popular_name . " - " . $c->popular_name . '</option>';
}
}
}
$sql .= $from . $where . ' order by t.title_tank asc';
$allRecords = ORM::for_table('module_fish_lots')->raw_query($sql)->find_many();
$totalBiomass = 0;
$totalFish = 0;
$totalLots = count($allRecords);
$totalTank = array();
for ($i = 0; $i < $totalLots; $i++) {
$weight_diferen = $this->modelProgram->weigthEstimatedProgramLastBiometry($allRecords[$i]);
// $diferecaBiometriaProgramDays = $weight_diferen['diferecaBiometriaProgramDays'];
$allRecords[$i]->total_weight = $weight_diferen['weight_actual'];
// $totalWeight += $allRecords[$i]->total_weight;
//verifica os dias povoados
$data_inicio = new DateTime($allRecords[$i]->date_settlement);
$data_fim = new DateTime(date('Y-m-d'));
$dateInterval = $data_fim->diff($data_inicio);
$allRecords[$i]->days_settlement = $dateInterval->days;
$periodDespesca = ORM::for_table('module_fish_food_program_periods')
->table_alias('pp')
->select('pp.*')
->where("pp.module_fish_food_programs_id", $allRecords[0]->module_fish_program_id)
->limit(1)
->order_by_expr('pp.period_total DESC') //pega o ultimo periodo cadastrado para o programa
->find_many();
if ($periodDespesca) {
$allRecords[$i]->days_finish_program = $periodDespesca[0]->period_total - $allRecords[$i]->days_settlement;
if ($allRecords[$i]->days_finish_program < 0) {
$allRecords[$i]->days_finish_program = 0;
}
} else {
$allRecords[$i]->days_finish_program = 0;
}
$totalMovimented = $this->modelMovement->getTotalMovimentTankLote($allRecords[$i]->lote_id, $allRecords[$i]->id_tank, date('Y-m-d H:i:s'));
$allRecords[$i]->qty_actual = $allRecords[$i]->qty + $totalMovimented;
$totalBiomass += $allRecords[$i]->total_weight * $allRecords[$i]->qty_actual;
$totalFish += $allRecords[$i]->qty_actual;
$lastBiom = ORM::for_table('module_fish_lots_distribution_biometry')
->table_alias('pp')
->select('pp.*')
->where("module_fish_lots_distribution_id", $allRecords[$i]->lote_id)
->order_by_expr('pp.id desc')
->find_many();
$allRecords[$i]->lastBiometry = $lastBiom[0];
//MORTALIDADE
$deaths = $this->modelMovement->getMoviment($allRecords[$i]->lote_id);
$allRecords[$i]->total_death = 0;
$allRecords[$i]->total_biomass_death = 0;
for ($m = 0; $m < count($deaths); $m++) {
$allRecords[$i]->total_death += $deaths[$m]->qty;
$allRecords[$i]->total_biomass_death += $deaths[$m]->qty * $deaths[$m]->average_weight;
}
$totalTank[$allRecords[$i]->id_tank]= $allRecords[$i]->id_tank;
}
// $totalTank = ORM::for_table('crm_accounts')->raw_query("select distinct(t.id)" . $from . $where)->find_many();
return array("allRecords" => $allRecords,
"totalBiomass" => $totalBiomass,
"totalFish" => $totalFish,
"totalTank" => count($totalTank),
"filter" => $filter,
'allLots' => $allLots,
"species" => $species,
);
}
public function detail() {
$retorno = $this->findCompileData();
if (isset($_POST['export'])) {
$this->exportData($retorno);
} else {
$allRecords = $retorno['allRecords'];
$totalBiomass = $retorno['totalBiomass'];
$totalFish = $retorno['totalFish'];
$totalTank = $retorno['totalTank'];
$filter = $retorno['filter'];
$this->ui->assign('allLots', $retorno['allLots']);
$this->ui->assign('species', $retorno['species']);
$css_arr = array(
's2/css/select2.min',
'dp/dist/datepicker.min',
'/../../../application/plugins/module_fish/assets/css/default');
$js_arr = array(
's2/js/select2.min',
'numeric',
'dp/dist/datepicker.min',
'/../../../application/plugins/module_fish/assets/js/associated-detail'
);
$this->ui->assign('jsvar', '
_L[\'Module_Fish Select Specie\'] = \'' . $this->_L['Module_Fish Select Specie'] . '\';
_L[\'Module_Fish Select Associated\'] = \'' . $this->_L['Module_Fish Select Associated'] . '\';')
;
$assets_css = Asset::css($css_arr);
$assets_js = Asset::js($js_arr);
$this->ui->assign('xheader', $assets_css);
$this->ui->assign('xfooter', $assets_js);
$bottomBar = array(
array('type' => 'float3', 'info' => $this->_L['Module_Fish Biomass Total'] . " kg", 'value' => $totalBiomass),
array('type' => 'int', 'info' => $this->_L['Module_Fish Total fish'], 'value' => $totalFish),
array('type' => 'int', 'info' => $this->_L['Module_Fish Number Tanks'], 'value' => $totalTank),
);
$this->ui->assign('bottomBar', $bottomBar);
$this->ui->assign('filter', $filter);
$this->ui->assign('settlements', $allRecords);
$this->ui->assign('crm_account', ORM::for_table('crm_accounts')->find_one($filter['crm_accounts_id']));
$this->ui->assign('_st', $this->_L['Fish Description module']);
$this->ui->assign('_include', 'associated/detail');
$this->ui->display('wrapper.tpl');
}
}
public function exportData($retorno) {
$col = explode(',', 'A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,AA,AB,AC,AD,AE,AI,AJ,AK,AL,AM,AN,AO,AP,AQ,AR,AS,AT,AU,AV,AW,AX,AY,AZ');
require('application/lib/PHPExcel/Classes/PHPExcel.php');
$allRecords = $retorno['allRecords'];
$objPHPExcel = new PHPExcel();
// Set document properties
$objPHPExcel->getProperties()->setCreator("LRSYS")
->setLastModifiedBy("");
$i = 1;
$c = 0;
$objPHPExcel->setActiveSheetIndex(0)->setCellValue($col[$c++] . $i, $this->_L['Module_Fish Title Lote']);
$objPHPExcel->setActiveSheetIndex(0)->setCellValue($col[$c++] . $i, $this->_L['Module_Fish Tank']);
$objPHPExcel->setActiveSheetIndex(0)->setCellValue($col[$c++] . $i, $this->_L['Module_Fish Date Settlement']);
$objPHPExcel->setActiveSheetIndex(0)->setCellValue($col[$c++] . $i, $this->_L['Species_List_Fish']);
$objPHPExcel->setActiveSheetIndex(0)->setCellValue($col[$c++] . $i, $this->_L['Module_Fish Initial Qty Px']);
$objPHPExcel->setActiveSheetIndex(0)->setCellValue($col[$c++] . $i, $this->_L['Module_Fish Weight start'] . '(g)');
$objPHPExcel->setActiveSheetIndex(0)->setCellValue($col[$c++] . $i, $this->_L['Module_Fish Initial Bio']);
$objPHPExcel->setActiveSheetIndex(0)->setCellValue($col[$c++] . $i, $this->_L['Module_Fish Days Village']);
$objPHPExcel->setActiveSheetIndex(0)->setCellValue($col[$c++] . $i, $this->_L['Module_Fish Days Expected']);
$objPHPExcel->setActiveSheetIndex(0)->setCellValue($col[$c++] . $i, $this->_L['Module_Fish Quantity (und)']);
$objPHPExcel->setActiveSheetIndex(0)->setCellValue($col[$c++] . $i, $this->_L['Module_Fish Weight estimated'] . '(g)');
$objPHPExcel->setActiveSheetIndex(0)->setCellValue($col[$c++] . $i, $this->_L['Module_Fish Weight Expected'] . '(g)');
$objPHPExcel->setActiveSheetIndex(0)->setCellValue($col[$c++] . $i, $this->_L['Module_Fish Estimated Weight vs. Expected Weight Ratio']);
$objPHPExcel->setActiveSheetIndex(0)->setCellValue($col[$c++] . $i, $this->_L['Module_Fish Biomass Expected']);
$objPHPExcel->setActiveSheetIndex(0)->setCellValue($col[$c++] . $i, $this->_L['Module_Fish Biomass estimated']);
$objPHPExcel->setActiveSheetIndex(0)->setCellValue($col[$c++] . $i, $this->_L['Module_Fish Total Weight Gain (g)']);
$objPHPExcel->setActiveSheetIndex(0)->setCellValue($col[$c++] . $i, $this->_L['Module_Fish Diary Weight Gain diary (g)']);
$objPHPExcel->setActiveSheetIndex(0)->setCellValue($col[$c++] . $i, $this->_L['Module_Fish Mortality']);
$objPHPExcel->setActiveSheetIndex(0)->setCellValue($col[$c++] . $i, $this->_L['Module_Fish % Mortality']);
$objPHPExcel->setActiveSheetIndex(0)->setCellValue($col[$c++] . $i, $this->_L['Module_Fish Biomass Mortality (kg)']);
$objPHPExcel->setActiveSheetIndex(0)->setCellValue($col[$c++] . $i, $this->_L['Module_Fish % Survival']);
$objPHPExcel->setActiveSheetIndex(0)->setCellValue($col[$c++] . $i, $this->_L['Module_Fish Last Biometrics (g)']);
$objPHPExcel->setActiveSheetIndex(0)->setCellValue($col[$c++] . $i, $this->_L['Module_Fish Biomass of Last Biometry (kg)']);
$objPHPExcel->setActiveSheetIndex(0)->setCellValue($col[$c++] . $i, $this->_L['Module_Fish Date Last Weigh']);
$objPHPExcel->getActiveSheet()->getRowDimension(1)->setRowHeight(40);
$i++; //terminou a primeira linha
//define o tamnho para todas as colunas
$c--;
while ($c >= 0) {
$objPHPExcel->getActiveSheet()->getColumnDimensionByColumn($c)->setWidth(20);
$c--;
}
// $objPHPExcel->getActiveSheet()->mergeCells('A1:F1');
$objPHPExcel->getActiveSheet()->getStyle('A1:X1')->getAlignment()->setWrapText(true);
$objPHPExcel->getActiveSheet()->getStyle('A:X')->applyFromArray(array(
'alignment' => array(
'horizontal' => PHPExcel_Style_Alignment::HORIZONTAL_CENTER,
)
)
);
$objPHPExcel->getActiveSheet()->getStyle('A1:X1')->applyFromArray(array(
'font' => array(
'bold' => true
),
'fill' => array(
'type' => PHPExcel_Style_Fill::FILL_SOLID,
'color' => array('rgb' => '77933c')
),
'alignment' => array(
'horizontal' => PHPExcel_Style_Alignment::HORIZONTAL_CENTER,
)
));
$objPHPExcel->getActiveSheet()->getStyle('E1:H1')->applyFromArray(array(
'fill' => array(
'type' => PHPExcel_Style_Fill::FILL_SOLID,
'color' => array('rgb' => '9BBB59')
)));
$dataAbstract = array();
$dataAbstractLote = array();
$dataAbstractTANK = array();
if ($allRecords)
foreach ($allRecords as $d) {
$c = 0;
$objPHPExcel->getActiveSheet()->getRowDimension($i)->setRowHeight(20);
$objPHPExcel->setActiveSheetIndex(0)
->setCellValue($col[$c++] . $i, $d['title_lote'])
->setCellValue($col[$c++] . $i, $d['title_tank'])
->setCellValue($col[$c++] . $i, date($this->config['df'], strtotime($d['date_settlement'])))
->setCellValue($col[$c++] . $i, $d['popular_name'] . " - " . $d['scientific_name'])
->setCellValue($col[$c++] . $i, $d['qty'])
->setCellValue($col[$c++] . $i, number_format(($d['average_weight'] * 1000), 0, $this->config['dec_point'], $this->config['thousands_sep']))
->setCellValue($col[$c++] . $i, number_format(($d['average_weight'] * $d['qty']), 3, $this->config['dec_point'], $this->config['thousands_sep']))
->setCellValue($col[$c++] . $i, $d['days_settlement'])
->setCellValue($col[$c++] . $i, $d['days_finish_program'])
->setCellValue($col[$c++] . $i, $d['qty_actual'])
->setCellValue($col[$c++] . $i, number_format(($d['lastBiometry']['average_weight'] * 1000), 0, $this->config['dec_point'], $this->config['thousands_sep']))
->setCellValue($col[$c++] . $i, number_format(($d['total_weight'] * 1000), 0, $this->config['dec_point'], $this->config['thousands_sep']))
->setCellValue($col[$c++] . $i, number_format((($d['lastBiometry']['average_weight'] * 100) / $d['total_weight']), 2, $this->config['dec_point'], $this->config['thousands_sep']) . " %")
->setCellValue($col[$c++] . $i, number_format(($d['lastBiometry']['average_weight'] * $d['qty_actual']), 3, $this->config['dec_point'], $this->config['thousands_sep']))
->setCellValue($col[$c++] . $i, number_format(($d['total_weight'] * $d['qty_actual']), 3, $this->config['dec_point'], $this->config['thousands_sep']))
->setCellValue($col[$c++] . $i, number_format(($d['lastBiometry']['average_weight'] * 1000) - ($d['average_weight'] * 1000), 0, $this->config['dec_point'], $this->config['thousands_sep']))
->setCellValue($col[$c++] . $i, number_format(((($d['lastBiometry']['average_weight'] * 1000) - ($d['average_weight'] * 1000)) / $d['days_settlement']), 0, $this->config['dec_point'], $this->config['thousands_sep']))
->setCellValue($col[$c++] . $i, $d['total_death'])
->setCellValue($col[$c++] . $i, number_format(($d['total_death'] * 100) / $d['qty'], 2, $this->config['dec_point'], $this->config['thousands_sep']))
->setCellValue($col[$c++] . $i, number_format($d['total_biomass_death'], 3, $this->config['dec_point'], $this->config['thousands_sep']))
->setCellValue($col[$c++] . $i, number_format(100 - (($d['total_death'] * 100) / $d['qty']), 2, $this->config['dec_point'], $this->config['thousands_sep']))
->setCellValue($col[$c++] . $i, number_format(($d['lastBiometry']['average_weight'] * 1000), 0, $this->config['dec_point'], $this->config['thousands_sep']))
->setCellValue($col[$c++] . $i, number_format(($d['lastBiometry']['average_weight'] * $d['qty_actual']), 3, $this->config['dec_point'], $this->config['thousands_sep']))
->setCellValue($col[$c++] . $i, date($this->config['df'], strtotime($d['lastBiometry']['date'])));
//ABSTRACT
if (isset($dataAbstract[$d->specie_id])) {
$dataAbstract[$d->specie_id]['tanks'][$d->id_tank] = $d->id_tank;
$dataAbstract[$d->specie_id]['biomass'] += $d->lastBiometry['average_weight'] * $d->qty_actual;
$dataAbstract[$d->specie_id]['qty_actual'] += $d->qty_actual;
} else {
$dataAbstract[$d->specie_id]['tanks'][$d->id_tank] = $d->id_tank;
$dataAbstract[$d->specie_id]['qty_actual'] = $d->qty_actual;
$dataAbstract[$d->specie_id]['biomass'] = $d->lastBiometry['average_weight'] * $d->qty_actual;
$dataAbstract[$d->specie_id]['name'] = $d->popular_name;
}
//ABSSTRACT LOTE
if (isset($dataAbstractLote[$d->id][$d->specie_id])) {
$dataAbstractLote[$d->id][$d->specie_id]['biomass_actual'] += $d->lastBiometry['average_weight'] * $d->qty_actual;
$dataAbstractLote[$d->id][$d->specie_id]['tanks'][$d->id_tank] = $d->id_tank;
$dataAbstractLote[$d->id][$d->specie_id]['qty_actual'] += $d->qty_actual;
$dataAbstractLote[$d->id][$d->specie_id]['qty'] += $d->qty;
$dataAbstractLote[$d->id][$d->specie_id]['biomass'] += $d->average_weight;
$dataAbstractLote[$d->id][$d->specie_id]['total_death'] += $d->total_death;
} else {
$dataAbstractLote[$d->id][$d->specie_id]['title_lote'] = $d->title_lote;
$dataAbstractLote[$d->id][$d->specie_id]['tanks'][$d->id_tank] = $d->id_tank;
$dataAbstractLote[$d->id][$d->specie_id]['qty_actual'] = $d->qty_actual;
$dataAbstractLote[$d->id][$d->specie_id]['qty'] = $d->qty;
$dataAbstractLote[$d->id][$d->specie_id]['biomass'] = $d->average_weight;
$dataAbstractLote[$d->id][$d->specie_id]['biomass_actual'] = $d->lastBiometry['average_weight'] * $d->qty_actual;
$dataAbstractLote[$d->id][$d->specie_id]['name'] = $d->popular_name;
$dataAbstractLote[$d->id][$d->specie_id]['total_death'] = $d->total_death;
}
//ABSSTRACT LOTE
if (isset($dataAbstractTANK[$d->id][$d->id_tank][$d->specie_id])) {
$dataAbstractTANK[$d->id][$d->id_tank][$d->specie_id]['biomass_actual'] += $d->lastBiometry['average_weight'] * $d->qty_actual;
$dataAbstractTANK[$d->id][$d->id_tank][$d->specie_id]['tanks'][$d->id_tank] = $d->id_tank;
$dataAbstractTANK[$d->id][$d->id_tank][$d->specie_id]['qty_actual'] += $d->qty_actual;
$dataAbstractTANK[$d->id][$d->id_tank][$d->specie_id]['qty'] += $d->qty;
$dataAbstractTANK[$d->id][$d->id_tank][$d->specie_id]['biomass'] += $d->average_weight;
$dataAbstractTANK[$d->id][$d->id_tank][$d->specie_id]['total_death'] += $d->total_death;
} else {
$dataAbstractTANK[$d->id][$d->id_tank][$d->specie_id]['title_tank'] = $d->title_tank;
$dataAbstractTANK[$d->id][$d->id_tank][$d->specie_id]['title_lote'] = $d->title_lote;
$dataAbstractTANK[$d->id][$d->id_tank][$d->specie_id]['tanks'][$d->id_tank] = $d->id_tank;
$dataAbstractTANK[$d->id][$d->id_tank][$d->specie_id]['qty_actual'] = $d->qty_actual;
$dataAbstractTANK[$d->id][$d->id_tank][$d->specie_id]['qty'] = $d->qty;
$dataAbstractTANK[$d->id][$d->id_tank][$d->specie_id]['biomass'] = $d->average_weight;
$dataAbstractTANK[$d->id][$d->id_tank][$d->specie_id]['biomass_actual'] = $d->lastBiometry['average_weight'] * $d->qty_actual;
$dataAbstractTANK[$d->id][$d->id_tank][$d->specie_id]['name'] = $d->popular_name;
$dataAbstractTANK[$d->id][$d->id_tank][$d->specie_id]['total_death'] = $d->total_death;
}
$i++;
}
$objPHPExcel->getActiveSheet()->setTitle($this->_L['Module_Fish Data']);
$objPHPExcel->getActiveSheet()->setAutoFilter('A1:X' . ($i - 1)); //seta o filtro
//FIM DA PRIMEIR GUIA
// ABSTRACT
$abstract = $objPHPExcel->createSheet(1);
$abstract->setTitle($this->_L['Module_Fish Abstract']);
$i = 1;
$c = 0;
$abstract->setCellValue($col[$c++] . $i, $this->_L['Species_List_Fish']);
$abstract->setCellValue($col[$c++] . $i, $this->_L['Module_Fish Cont.Num - Tank']);
$abstract->setCellValue($col[$c++] . $i, $this->_L['Module_Fish Sum - Estimated Biomass (kg)']);
$abstract->setCellValue($col[$c++] . $i, $this->_L['Module_Fish Sum - Quantity (und)']);
$i++;
$totalTank = 0;
$totalQtd = 0;
$totalBiomass = 0;
if ($abstract)
foreach ($dataAbstract as $ab) {
$c = 0;
$abstract->setCellValue($col[$c++] . $i, $ab['name'])
->setCellValue($col[$c++] . $i, count($ab['tanks']))
->setCellValue($col[$c++] . $i, number_format($ab['biomass'], 3, $this->config['dec_point'], $this->config['thousands_sep']))
->setCellValue($col[$c++] . $i, $ab['qty_actual']);
$i++;
$totalTank += count($ab['tanks']);
$totalQtd += $ab['qty_actual'];
$totalBiomass += $ab['biomass'];
}
$c = 0;
$abstract->setCellValue($col[$c++] . $i, $this->_L['Total'])
->setCellValue($col[$c++] . $i, $totalTank)
->setCellValue($col[$c++] . $i, number_format($totalBiomass, 3, $this->config['dec_point'], $this->config['thousands_sep']))
->setCellValue($col[$c++] . $i, $totalQtd);
$abstract->setAutoFilter('A1:A1'); //seta o filtro
$abstract->getStyle('A' . $i . ':D' . $i)->applyFromArray(array(
'font' => array(
'bold' => true
),
));
$abstract->getStyle('A1:D' . $i)->applyFromArray(array(
'borders' => array(
'outline' => array(
'style' => PHPExcel_Style_Border::BORDER_MEDIUM
)
)
));
$abstract->getStyle('A1:D' . $i)->applyFromArray(array(
'alignment' => array(
'horizontal' => PHPExcel_Style_Alignment::HORIZONTAL_CENTER,
)
));
$i++;
$c--;
while ($c >= 0) {
$abstract->getColumnDimensionByColumn($c)->setAutoSize(true);
$c--;
}
// ABSTRACT LOTE
$abstractLote = $objPHPExcel->createSheet(2);
$abstractLote->setTitle($this->_L['Module_Fish Abstract Lote']);
$i = 1;
$c = 0;
$abstractLote->setCellValue($col[$c++] . $i, $this->_L['Module_Fish Lote']);
$abstractLote->setCellValue($col[$c++] . $i, $this->_L['Species_List_Fish']);
$abstractLote->setCellValue($col[$c++] . $i, $this->_L['Module_Fish Cont.Num - Tank']);
$abstractLote->setCellValue($col[$c++] . $i, $this->_L['Module_Fish Abstract Sum - Initial Qty Px']);
$abstractLote->setCellValue($col[$c++] . $i, $this->_L['Module_Fish Abstract Soma - Bio Initial']);
$abstractLote->setCellValue($col[$c++] . $i, $this->_L['Module_Fish Sum - Quantity (und)']);
$abstractLote->setCellValue($col[$c++] . $i, $this->_L['Module_Fish Sum - Estimated Biomass (kg)']);
$abstractLote->setCellValue($col[$c++] . $i, $this->_L['Module_Fish Abstract Soma - Mortality']);
$i++;
$totalTank = 0;
$totalQtd = 0;
$totalQtdActual = 0;
$totalBiomass = 0;
$totalDeath = 0;
$totalBiomassActual = 0;
if ($dataAbstractLote)
$lastlote = "";
foreach ($dataAbstractLote as $abL) {
$c = 0;
foreach ($abL as $ab) {
if ($lastlote != $ab['title_lote']) {
$lastlote = $ab['title_lote'];
$abstractLote->setCellValue($col[$c++] . $i, $ab['title_lote']);
} else {
$c++;
}
$abstractLote->setCellValue($col[$c++] . $i, $ab['name'])
->setCellValue($col[$c++] . $i, count($ab['tanks']))
->setCellValue($col[$c++] . $i, $ab['qty'])
->setCellValue($col[$c++] . $i, number_format($ab['biomass'], 3, $this->config['dec_point'], $this->config['thousands_sep']))
->setCellValue($col[$c++] . $i, $ab['qty_actual'])
->setCellValue($col[$c++] . $i, number_format($ab['biomass_actual'], 3, $this->config['dec_point'], $this->config['thousands_sep']))
->setCellValue($col[$c++] . $i, $ab['total_death'])
;
$totalTank += count($ab['tanks']);
$totalQtdActual += $ab['qty_actual'];
$totalQtd += $ab['qty'];
$totalBiomassActual += $ab['biomass_actual'];
$totalBiomass += $ab['biomass'];
$totalDeath += $ab['total_death'];
$i++;
}
}
$c = 0;
$abstractLote->setCellValue($col[$c++] . $i, $this->_L['Total']);
$c++;
$abstractLote->setCellValue($col[$c++] . $i, $totalTank)
->setCellValue($col[$c++] . $i, $totalQtd)
->setCellValue($col[$c++] . $i, number_format($totalBiomass, 3, $this->config['dec_point'], $this->config['thousands_sep']))
->setCellValue($col[$c++] . $i, $totalQtdActual)
->setCellValue($col[$c++] . $i, number_format($totalBiomassActual, 3, $this->config['dec_point'], $this->config['thousands_sep']))
->setCellValue($col[$c++] . $i, $totalDeath);
$abstractLote->setAutoFilter('A1:B1'); //seta o filtro
$abstractLote->getStyle('A' . $i . ':H' . $i)->applyFromArray(array(
'font' => array(
'bold' => true
),
));
$abstractLote->getStyle('A1:H' . $i)->applyFromArray(array(
'borders' => array(
'outline' => array(
'style' => PHPExcel_Style_Border::BORDER_MEDIUM
)
)
));
$abstractLote->getStyle('A1:H' . $i)->applyFromArray(array(
'alignment' => array(
'horizontal' => PHPExcel_Style_Alignment::HORIZONTAL_CENTER,
)
));
$i++;
$c--;
while ($c >= 0) {
$abstractLote->getColumnDimensionByColumn($c)->setAutoSize(true);
$c--;
}
//ABSTRACT TANK
$abstractTank = $objPHPExcel->createSheet(3);
$abstractTank->setTitle($this->_L['Module_Fish Abstract Tank']);
$i = 1;
$c = 0;
$abstractTank->setCellValue($col[$c++] . $i, $this->_L['Module_Fish Lote']);
$abstractTank->setCellValue($col[$c++] . $i, $this->_L['Module_Fish Tank']);
$abstractTank->setCellValue($col[$c++] . $i, $this->_L['Species_List_Fish']);
$abstractTank->setCellValue($col[$c++] . $i, $this->_L['Module_Fish Abstract Sum - Initial Qty Px']);
$abstractTank->setCellValue($col[$c++] . $i, $this->_L['Module_Fish Abstract Soma - Bio Initial']);
$abstractTank->setCellValue($col[$c++] . $i, $this->_L['Module_Fish Sum - Quantity (und)']);
$abstractTank->setCellValue($col[$c++] . $i, $this->_L['Module_Fish Sum - Estimated Biomass (kg)']);
$abstractTank->setCellValue($col[$c++] . $i, $this->_L['Module_Fish Abstract Soma - Mortality']);
$i++;
$totalTank = 0;
$totalQtd = 0;
$totalQtdActual = 0;
$totalBiomass = 0;
$totalDeath = 0;
$totalBiomassActual = 0;
if ($dataAbstractTANK)
$lastlote = "";
$lastTANK = "";
foreach ($dataAbstractTANK as $abT) {
foreach ($abT as $tan) {
foreach ($tan as $ab) {
$c = 0;
if ($lastlote != $ab['title_lote']) {
$lastlote = $ab['title_lote'];
$lastTANK = $ab['title_tank'];
$abstractTank->setCellValue($col[$c++] . $i, $ab['title_lote']);
$abstractTank->setCellValue($col[$c++] . $i, $ab['title_tank']);
} else {
$c++;
if ($lastTANK != $ab['title_tank']) {
$lastTANK = $ab['title_tank'];
$abstractTank->setCellValue($col[$c++] . $i, $ab['title_tank']);
} else {
$c++;
}
}
$abstractTank->setCellValue($col[$c++] . $i, $ab['name'])
->setCellValue($col[$c++] . $i, $ab['qty'])
->setCellValue($col[$c++] . $i, number_format($ab['biomass'], 3, $this->config['dec_point'], $this->config['thousands_sep']))
->setCellValue($col[$c++] . $i, $ab['qty_actual'])
->setCellValue($col[$c++] . $i, number_format($ab['biomass_actual'], 3, $this->config['dec_point'], $this->config['thousands_sep']))
->setCellValue($col[$c++] . $i, $ab['total_death'])
;
$totalTank += count($ab['tanks']);
$totalQtdActual += $ab['qty_actual'];
$totalQtd += $ab['qty'];
$totalBiomassActual += $ab['biomass_actual'];
$totalBiomass += $ab['biomass'];
$totalDeath += $ab['total_death'];
$i++;
}
}
}
$c = 0;
$abstractTank->setCellValue($col[$c++] . $i, $this->_L['Total']);
$c++;
$c++;
$abstractTank
->setCellValue($col[$c++] . $i, $totalQtd)
->setCellValue($col[$c++] . $i, number_format($totalBiomass, 3, $this->config['dec_point'], $this->config['thousands_sep']))
->setCellValue($col[$c++] . $i, $totalQtdActual)
->setCellValue($col[$c++] . $i, number_format($totalBiomassActual, 3, $this->config['dec_point'], $this->config['thousands_sep']))
->setCellValue($col[$c++] . $i, $totalDeath);
$abstractTank->setAutoFilter('A1:C1'); //seta o filtro
$abstractTank->getStyle('A' . $i . ':H' . $i)->applyFromArray(array(
'font' => array(
'bold' => true
),
));
$abstractTank->getStyle('A1:H' . $i)->applyFromArray(array(
'borders' => array(
'outline' => array(
'style' => PHPExcel_Style_Border::BORDER_MEDIUM
)
)
));
$abstractTank->getStyle('A1:H' . $i)->applyFromArray(array(
'alignment' => array(
'horizontal' => PHPExcel_Style_Alignment::HORIZONTAL_CENTER,
)
));
$i++;
$c--;
while ($c >= 0) {
$abstractTank->getColumnDimensionByColumn($c)->setAutoSize(true);
$c--;
}
//fim da resumo do tanque
$objPHPExcel->setActiveSheetIndex(0);
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename="' . $this->_L['Module_Fish Vision detalhed'] . '.xls"');
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); // Date in the past
header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT'); // always modified
header('Cache-Control: cache, must-revalidate'); // HTTP/1.1
header('Pragma: public'); // HTTP/1.0
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
$objWriter->save('php://output');
}
}