AnonSec Shell
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/erp/application/plugins/module_fish/controllers/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ HOME ]     

Current File : /home/lrsys/www/lrsys_apps/erp/application/plugins/module_fish/controllers/AssociatedController.php
<?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');
    }

}

Anon7 - 2022
AnonSec Team