Advertisement
Guest User

Untitled

a guest
Jun 18th, 2018
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 29.00 KB | None | 0 0
  1. <?php
  2.  
  3. require_once ('DatabaseObject.php');
  4.  
  5. class DatabaseObject_Preventivi extends DatabaseObject {
  6.  
  7.     public function __construct($db) {
  8.  
  9.         /*
  10.          * chiamo il costruttore principale
  11.          * che prende come parametri: l'adattatore, il nome della tabella  e la chiave primaria
  12.          */
  13.  
  14.         parent::__construct($db, 'preventivi', 'id_preventivo');
  15.  
  16.         /*
  17.          * aggiungo i campi della tabella
  18.          * primo parametro: nome campo
  19.          * secondo parametro: valore di default
  20.          * terzo parametro: tipo
  21.          */
  22.  
  23.         $this->add('stato_prev');
  24.         $this->add('attivita_in_corso');
  25.         $this->add('id_opportunita');
  26.         $this->add('cod_prodotto');
  27.         $this->add('id_polizza');
  28.         $this->add('brok');
  29.         $this->add('rata');
  30.         $this->add('durata');
  31.         $this->add('montante');
  32.         $this->add('netto');
  33.         $this->add('provv');
  34.         $this->add('provv_perc');
  35.         $this->add('rappel');
  36.         $this->add('rappel_perc');
  37.         $this->add('num_pratica');
  38.         $this->add('data_decorrenza');
  39.         $this->add('scad_last_rata');
  40.         $this->add('data_invio');
  41.         $this->add('data_avvio');
  42.         $this->add('segnalazione');
  43.         $this->add('segn_perc');
  44.         $this->add('provv_segn');
  45.         $this->add('provv_totale');
  46.         $this->add('num_arch_interno');
  47.         $this->add('ultima_mod_pr');
  48.         $this->add('commerciale_mod_pr');
  49.         $this->add('data_richiesta_CS');
  50.         $this->add('data_arrivo_CS');
  51.         $this->add('data_stato_R');
  52.         $this->add('data_stato_V');
  53.         $this->add('data_rientro_polizza');
  54.         $this->add('data_ricezione_originali');
  55.         $this->add('data_invio_notifica');
  56.         $this->add('numero_raccomandata');
  57.         $this->add('data_ricezione_benestare');
  58.         $this->add('data_estinzione');
  59.         $this->add('finanziaria_da_estinguere');
  60.         $this->add('note_preventivo');
  61.         $this->add('rappel_perc_1');
  62.         $this->add('rappel_1');
  63.         $this->add('tot_generale');
  64.         $this->add('close_max');
  65.         $this->add('prima_firma_moduli');
  66.         $this->add('data_firma_contratti');
  67.         $this->add('luogo_firma_prima_mod');
  68.         $this->add('referente_banca_ubi');
  69.         $this->add('tel_referente_banca_ubi');
  70.         $this->add('banca_ubi');
  71.         $this->add('filiale_banca_ubi');
  72.         $this->add('tel_filiale_banca_ubi');
  73.         $this->add('data_stato_0');
  74.         $this->add('blocco_creditolab');
  75.         $this->add('IP');
  76.         $this->add('creazione');
  77.         $this->add('max_caricabile');
  78.         $this->add('data_perfezionamento');
  79.         $this->add('id_archiviazione');
  80.         $this->add('data_annullamento');
  81.         $this->add('provv_piva');
  82.         $this->add('provv_piva_pagato');
  83.         $this->add('num_fattura_provv_piva');
  84.         $this->add('data_fattura_provv_piva');
  85.         $this->add('acconto');
  86.         $this->add('tan_perc');
  87.         $this->add('taeg_perc');
  88.         $this->add('finanziaria');
  89.         $this->add('commissioni');
  90.         $this->add('rid_comm_perc');
  91.         $this->add('comm_perc');
  92.         $this->add('confermato');
  93.         $this->add('data_ora_conferma');
  94.         $this->add('id_attivita_conferma');
  95.         $this->add('conferma_visualizzata');
  96.         $this->add('conferma_visualizzata_da');
  97.         $this->add('conferma_visualizzata_il');
  98.         $this->add('interessi');
  99.         $this->add('oneri_erariali');
  100.         $this->add('secci');
  101.         $this->add('data_presunta_liquidazione');
  102.         $this->add('ante_termine');
  103.         $this->add('montante_da_estinguere');
  104.         $this->add('data_deliberabilita');
  105.         $this->add('rid_comm_perc');
  106.         $this->add('probabile');
  107.         $this->add('id_provvigione');
  108.         $this->add('prodotto_14');
  109.         $this->add('rid_accettata');
  110.     }
  111.  
  112.     public function getTipoProdottoPerPreventivo($id_preventivo) {
  113.  
  114.         $tipo_prodotto = "";
  115.  
  116.         $selectProdotto = $this->_db->select()
  117.                 ->from(array('p' => $this->_table), array())
  118.                 ->join(array('pd' => 'prodotti'), 'p.cod_prodotto=pd.cod_prodotto', array('tipo_prodotto'))
  119.                 ->where('id_preventivo = (?)', $id_preventivo);
  120.  
  121.         $execSelect = $this->_db->fetchRow($selectProdotto);
  122.  
  123.         if ($execSelect) {
  124.             $tipo_prodotto = $execSelect['tipo_prodotto'];
  125.         }
  126.  
  127.         return $tipo_prodotto;
  128.     }
  129.  
  130.     public function getPreventiviPerOpportunita($opportunita) {
  131.  
  132.         $selectPreventivi = $this->_db->select()
  133.                 ->from(array('p' => $this->_table), array('p.id_preventivo', 'pd.tipo_prodotto', 'p.probabile', 'p.rata', 'p.durata', 'p.montante', 'p.cod_prodotto', 'p.rid_comm_perc', 'p.montante_da_estinguere', 'p.comm_perc', 'p.commissioni', 'taeg_perc', 'p.tan_perc', 'creazione', 'provv_totale', 'netto', 'stato_prev', 'id_polizza', 'num_pratica', 'data_decorrenza', 'data_invio', 'data_avvio'))
  134.                 ->join(array('pd' => 'prodotti'), 'p.cod_prodotto=pd.cod_prodotto', array())
  135.                 ->where('id_opportunita = (?)', $opportunita->getId())
  136.                 ->where("stato_prev != 'NA'");
  137.  
  138.         $preventivi = $this->_db->query($selectPreventivi);
  139.  
  140.         return $preventivi->fetchAll();
  141.     }
  142.  
  143.     public function resetProbabilitaPerTipoProdottoDiOpportunita($tipo_prodotto, $id_opportunita) {
  144.  
  145.         $resetProbabilita = "UPDATE {$this->_table} p
  146.                             JOIN prodotti pd ON p.cod_prodotto=pd.cod_prodotto
  147.                             SET probabile = NULL
  148.                             WHERE id_opportunita = '{$id_opportunita}' AND pd.tipo_prodotto = '{$tipo_prodotto}'";
  149.  
  150.  
  151.         $reset = $this->_db->query($resetProbabilita);
  152.  
  153.         $selectPreventiviModificati = "SELECT id_preventivo
  154.                             FROM {$this->_table} p
  155.                             JOIN prodotti pd ON p.cod_prodotto=pd.cod_prodotto
  156.                             WHERE id_opportunita = '{$id_opportunita}' AND pd.tipo_prodotto = '{$tipo_prodotto}'";
  157.  
  158.         $preventivi = $this->_db->query($selectPreventiviModificati);
  159.         $prevList = $preventivi->fetchAll();
  160.  
  161.         $listaIdPreventivi = array();
  162.  
  163.         foreach ($prevList as $prev) {
  164.             $listaIdPreventivi[] = $prev['id_preventivo'];
  165.         }
  166.  
  167.         return $listaIdPreventivi;
  168.     }
  169.  
  170.     public function aggiorna($dati, $id_preventivo) {
  171.  
  172.         $this->_db->update($this->_table, $dati, "id_preventivo = {$id_preventivo}");
  173.     }
  174.  
  175.     public function salvaStatoPreventiviUltimaOpportunitaPerAnagrafica($id_anagrafica, $stato) {
  176.  
  177.         $update = "UPDATE {$this->_table} pr "
  178.                 . "JOIN anagrafiche an ON an.ultima_opportunita = pr.id_opportunita "
  179.                 . "SET stato_prev = '{$stato}' "
  180.                 . "WHERE id_anagrafica = '{$id_anagrafica}' and stato_prev != '{$stato}'";
  181.  
  182.         $this->_db->query($update);
  183.     }
  184.  
  185.     public function getPreventiviDeliberatiPerIMV($tipo_data, $mese_report, $year, $myIMV = null) {
  186.  
  187.         $condizione_data = "MONTH($tipo_data) = '{$mese_report}' AND YEAR($tipo_data) = '{$year}'";
  188.  
  189.         $condizionePreventivo = self::condizioniDeliberate();
  190.  
  191.         $selectMy = $this->_db->select()
  192.                 ->from(array('pr' => 'preventivi'), array('tot_provv' => 'SUM(pr.provv_totale)', 'im.nome_istanza', 'im.societa_commerciale', 'sc.nome_societa', 'im.id_imv', 'pd.gruppo'))
  193.                 ->join(array('op' => 'opportunita'), 'pr.id_opportunita=op.id_opportunita', array())
  194.                 ->join(array('an' => 'anagrafiche'), 'an.id_anagrafica=op.id_anagrafica', array())
  195.                 ->joinLeft(array('prc' => 'processi'), 'pr.id_preventivo=prc.id_preventivo', array())
  196.                 ->join(array('im' => 'imv'), 'im.id_imv = op.imv', array())
  197.                 ->join(array('sc' => 'societa'), 'im.societa_commerciale = sc.id_societa', array())
  198.                 ->join(array('u' => 'utenti'), 'op.id_commerciale=u.id_agente', array())
  199.                 ->join(array('pd' => 'prodotti'), 'pr.cod_prodotto=pd.cod_prodotto', array())
  200.                 ->where($condizione_data)
  201.                 ->where($condizionePreventivo);
  202.  
  203.         if (!is_null($myIMV)) {
  204.             $selectMy->where('im.id_imv IN (?)', $myIMV);
  205.         }
  206.  
  207.         $selectMy->group(array('im.societa_commerciale', 'im.nome_istanza', 'pd.gruppo'));
  208.  
  209.         $rProvv = $this->_db->query($selectMy);
  210.         $resultProvv = $rProvv->fetchAll();
  211.  
  212.         $provvDeliberatoPerPo = array();
  213.         $imvPresentiNelReportPerIlMese = array();
  214.         $risultati_imv = array();
  215.  
  216.         $risultato = array();
  217.  
  218.         foreach ($resultProvv as $valoreProvvPerProdotto) {
  219.  
  220.             if (!array_key_exists($valoreProvvPerProdotto['nome_istanza'], $provvDeliberatoPerPo)) {
  221.                 $provvDeliberatoPerPo[$valoreProvvPerProdotto['nome_istanza']] = 0;
  222.             }
  223.  
  224.             $provvDeliberatoPerPo[$valoreProvvPerProdotto['nome_istanza']] += $valoreProvvPerProdotto['tot_provv'];
  225.  
  226.             $prodotti[$valoreProvvPerProdotto['nome_istanza']][$valoreProvvPerProdotto['gruppo']] = $valoreProvvPerProdotto['tot_provv'];
  227.  
  228.             $risultato[$valoreProvvPerProdotto['nome_istanza']] = array(
  229.                 'id_imv' => $valoreProvvPerProdotto['id_imv'],
  230.                 'tot_provv' => $provvDeliberatoPerPo[$valoreProvvPerProdotto['nome_istanza']],
  231.                 'societa_commerciale' => $valoreProvvPerProdotto['societa_commerciale'],
  232.                 'nome_istanza' => $valoreProvvPerProdotto['nome_istanza'],
  233.                 //'obiettivoPo' => $obiettiviAttesiPo[$valoreProvvPerProdotto['nome_istanza']],
  234.                 'prodotti_per_gruppi' => $prodotti[$valoreProvvPerProdotto['nome_istanza']],
  235.                 'nome_societa' => $valoreProvvPerProdotto['nome_societa']
  236.             );
  237.  
  238.             $imvPresentiNelReportPerIlMese[] = $valoreProvvPerProdotto['id_imv'];
  239.         }
  240.  
  241.         return array(
  242.             'imv_in_report' => $imvPresentiNelReportPerIlMese,
  243.             'risultati_per_imv' => $risultato
  244.         );
  245.     }
  246.  
  247.     public function modelloStatisticheOrigine($gruppo, $tipo_data, $data_da, $data_a, $modello, $separa_preventivi = false) {
  248.  
  249.         $gruppoList = array('canale', 'mezzo', 'nome_campagna');
  250.  
  251.         if (!in_array($gruppo, $gruppoList)) {
  252.             return false;
  253.         }
  254.  
  255.         $selectMezzi = array('mezzo');
  256.         $selectCanali = array('canale');
  257.         $selectCampagna = array('nome_campagna');
  258.  
  259.         $itemDaSelezionare = array();
  260.  
  261.         $condizioneModello = "";
  262.         $raggruppaPer = "";
  263.         $ordinaPer = array();
  264.  
  265.         switch ($modello) {
  266.             case 'prima_interazione':
  267.  
  268.                 //$condizioneModello = "op.id_opportunita = (SELECT MIN(id_opportunita) from opportunita where id_anagrafica = A.id_anagrafica AND op.stato not in ('2', '3'))";
  269.                 if(!$separa_preventivi) {
  270.                     $itemDaSelezionare = array('num_pratiche' => 'COUNT(*)', 'provvigione' => 'SUM(provv_totale)');
  271.                     $raggruppaPer = $gruppo;
  272.                 } else {
  273.                     $itemDaSelezionare = array('pr.id_preventivo', 'op.id_opportunita', 'A.id_anagrafica');
  274.                 }
  275.                 break;
  276.  
  277.             case 'ultima_interazione':
  278.  
  279.             if(!$separa_preventivi) {
  280.                 //$condizioneModello = "op.id_opportunita = (SELECT MAX(id_opportunita) from opportunita where id_anagrafica = A.id_anagrafica AND op.stato not in ('2', '3'))";
  281.                 $itemDaSelezionare = array('num_pratiche' => 'COUNT(*)', 'provvigione' => 'SUM(provv_totale)');
  282.                 $raggruppaPer = $gruppo;
  283.             }else {
  284.                 $itemDaSelezionare = array('pr.id_preventivo', 'op.id_opportunita', 'A.id_anagrafica');
  285.             }
  286.                 break;
  287.  
  288.             case 'modello_lineare':
  289.                 $itemDaSelezionare = array('op.id_anagrafica', 'op.id_opportunita', 'provvigione' => 'provv_totale');
  290.                 $ordinaPer = array("op.id_anagrafica");
  291.                 break;
  292.  
  293.             case 'modello_su_posizione':
  294.                 $itemDaSelezionare = array('op.id_anagrafica', 'op.id_opportunita', 'provvigione' => 'provv_totale');
  295.                 $ordinaPer = array("op.id_anagrafica");
  296.                 break;
  297.         }
  298.  
  299.         $selectMy = $this->_db->select()
  300.                 ->from(array('pr' => 'preventivi'), $itemDaSelezionare)
  301.                 ->join(array('op' => 'opportunita'), 'pr.id_opportunita=op.id_opportunita', array())
  302.                 ->joinLeft(array('prc' => 'processi'), 'pr.id_preventivo=prc.id_preventivo', array())
  303.                 ->join(array('A' => 'anagrafiche'), 'A.id_anagrafica=op.id_anagrafica', array());
  304.  
  305.  
  306.         $opportunitaAlias = "op";
  307.  
  308.         if ("prima_interazione" == $modello ||
  309.                 "ultima_interazione" == $modello) {
  310.  
  311.             $seleziona = "prima";
  312.  
  313.             if ("ultima_interazione" == $modello) {
  314.                 $seleziona = "ultima";
  315.             }
  316.  
  317.             if ("prima" == $seleziona) {
  318.  
  319.                 $opportunitaEntity = new DatabaseObject_Opportunita($this->_db);
  320.                 $selectMyOP = $opportunitaEntity->selectPrimaUltimaOpportunita($seleziona);
  321.  
  322.                 $opportunitaAlias = "OPP_M";
  323.                 $selectMy->join(array('MM_OP' => $selectMyOP), 'MM_OP.id_anagrafica = A.id_anagrafica', array());
  324.  
  325.                 $selectMy->join(array($opportunitaAlias => 'opportunita'), 'OPP_M.id_opportunita=MM_OP.gruppo_id_opportunita', array());
  326.             }
  327.             else{
  328.                 $opportunitaAlias = "op";
  329.             }
  330.         }
  331.  
  332.         $selectMy->join(array('M' => 'mezzi'), "{$opportunitaAlias}.id_mezzo = M.id_mezzo", $selectMezzi)
  333.                 ->join(array('C' => 'canali'), "{$opportunitaAlias}.id_canale = C.id_canale", $selectCanali);
  334.  
  335.         if ("nome_campagna" == $gruppo) {
  336.             $selectMy->join(array('CMP' => 'campagne'), "{$opportunitaAlias}.id_campagna = CMP.id_campagna", $selectCampagna);
  337.         }
  338.  
  339.         if ("data_contatto" == $tipo_data) {
  340.             $tipo_data = "op.data_contatto";
  341.         }
  342.         $selectMy->where(self::condizioniDeliberate())
  343.                 ->where("{$tipo_data} BETWEEN '{$data_da}' AND '{$data_a}'");
  344.  
  345.         if ("" != $condizioneModello) {
  346.             $selectMy->where($condizioneModello);
  347.         }
  348.  
  349.         if ("" != $raggruppaPer) {
  350.            
  351.             if("canale" == $raggruppaPer){
  352.                 $raggruppaPer = array('mezzo', 'canale');
  353.             }
  354.            
  355.             $selectMy->group($raggruppaPer);
  356.         }
  357.  
  358.         if (0 != count($ordinaPer)) {
  359.             $selectMy->order($ordinaPer);
  360.         }
  361.  
  362.         // echo $selectMy;
  363.         // die();
  364.         $rProvv = $this->_db->query($selectMy);
  365.         //echo $selectMy;
  366.         //die();
  367.         $resultProvv = $rProvv->fetchAll();
  368.  
  369.         if(true == $separa_preventivi) {
  370.             return $resultProvv;
  371.         }
  372.  
  373.         $risultatoModello = array();
  374.  
  375.         $classList = array(
  376.             'Direct' => 'alert-error',
  377.             'Prestitalia' => 'alert-success',
  378.             'Territorio' => 'alert-info',
  379.             'Web' => 'alert-web'
  380.         );
  381.  
  382.         $tot_pratiche = 0;
  383.         $tot_provv = 0;
  384.  
  385.         switch ($modello) {
  386.             case 'prima_interazione':
  387.             case 'ultima_interazione':
  388.  
  389.                 foreach ($resultProvv as $datiModello) {
  390.  
  391.                     $risultatoModello[] = array(
  392.                         'gruppoModello' => array(
  393.                             array(
  394.                                 'descrizione' => $datiModello[$gruppo],
  395.                                 'class' => array_key_exists($datiModello['mezzo'], $classList) ? $classList[$datiModello['mezzo']] : '',
  396.                                 'numero' => ''
  397.                             )
  398.                         ),
  399.                         'num_pratiche' => $datiModello['num_pratiche'],
  400.                         'provvigione' => $datiModello['provvigione']
  401.                     );
  402.  
  403.                     $tot_pratiche += $datiModello['num_pratiche'];
  404.                     $tot_provv += $datiModello['provvigione'];
  405.                 }
  406.                 break;
  407.             case 'modello_lineare':
  408.                 if ("nome_campagna" == $gruppo)
  409.                     return false;
  410.                 $opportunitaEntity = new DatabaseObject_Opportunita($this->_db);
  411.  
  412.                 $tempResult = array();
  413.  
  414.                 foreach ($resultProvv as $record) {
  415.  
  416.                     $id_anagrafica = $record['id_anagrafica'];
  417.  
  418.                     $provv = $record['provvigione'];
  419.  
  420.                     $opportunitaPerAnagrafica = $opportunitaEntity->getOpportunitaPerAnagrafica($id_anagrafica, $data_a);
  421.  
  422.                     $numeroOpportunita = count($opportunitaPerAnagrafica);
  423.  
  424.                     for ($i = 0; $i < $numeroOpportunita; $i++) {
  425.  
  426.                         if ($i == 0) { // Se รจ il primo
  427.                             $keyLinear = "";
  428.                             $origini = array();
  429.                         }
  430.  
  431.                         $keyLinear = $keyLinear . $opportunitaPerAnagrafica[$i][$gruppo];
  432.                         $origini[] = array(
  433.                             'gruppo' => $opportunitaPerAnagrafica[$i][$gruppo],
  434.                             'class' => array_key_exists($opportunitaPerAnagrafica[$i]['mezzo'], $classList) ? $classList[$opportunitaPerAnagrafica[$i]['mezzo']] : '',
  435.                         );
  436.  
  437.  
  438.                         if ($i == ($numeroOpportunita - 1)) {
  439.  
  440.                             if (!array_key_exists($keyLinear, $tempResult)) {
  441.  
  442.                                 $tempResult[$keyLinear] = array(
  443.                                     'provvigione' => 0,
  444.                                     'num_pratiche' => 0,
  445.                                     'origini' => array()
  446.                                 );
  447.                             }
  448.  
  449.                             $tempResult[$keyLinear]['provvigione'] += $provv;
  450.                             $tempResult[$keyLinear]['num_pratiche'] ++;
  451.                             $tempResult[$keyLinear]['origini'] = $origini;
  452.                         }
  453.                     }
  454.  
  455.                     $tot_pratiche++;
  456.                     $tot_provv += $provv;
  457.                 }
  458.  
  459.                 //var_dump($tempResult);
  460.  
  461.                 foreach ($tempResult as $key => $infoSuModello) {
  462.  
  463.                     $gruppoModello = array();
  464.  
  465.                     $o = 0;
  466.  
  467.                     do {
  468.                         $numero = 1;
  469.  
  470.                         $origineLineare = $infoSuModello['origini'][$o]['gruppo'];
  471.                         $class = $infoSuModello['origini'][$o]['class'];
  472.                         $prox = $o + 1;
  473.  
  474.                         for ($indice = $prox; $indice < count($infoSuModello['origini']); $indice++) {
  475.  
  476.                             if ($infoSuModello['origini'][$indice]['gruppo'] == $origineLineare) {
  477.  
  478.                                 $numero++;
  479.                                 $o = $indice;
  480.                             } else {
  481.                                 break;
  482.                             }
  483.                         }
  484.  
  485.                         $gruppoModello[] = array(
  486.                             'descrizione' => $origineLineare,
  487.                             'class' => $class,
  488.                             'numero' => $numero
  489.                         );
  490.  
  491.                         $o++;
  492.                     } while ($o < count($infoSuModello['origini']));
  493.  
  494.  
  495.                     $risultatoModello[] = array(
  496.                         'modello' => $key,
  497.                         'gruppoModello' => $gruppoModello,
  498.                         'num_pratiche' => $infoSuModello['num_pratiche'],
  499.                         'provvigione' => $infoSuModello['provvigione']
  500.                     );
  501.                 }
  502.  
  503.                 break;
  504.  
  505.             case 'modello_su_posizione':
  506.  
  507.                 $opportunitaEntity = new DatabaseObject_Opportunita($this->_db);
  508.  
  509.                 $tempResult = array();
  510.  
  511.                 foreach ($resultProvv as $record) {
  512.  
  513.                     $id_opportunita = $record['id_opportunita'];
  514.                     $id_anagrafica = $record['id_anagrafica'];
  515.                     $provv = $record['provvigione'];
  516.  
  517.                     $tot_provv += $provv;
  518.                     $tot_pratiche++;
  519.  
  520.                     $opportunitaPerAnagrafica = $opportunitaEntity->getOpportunitaPerAnagrafica($id_anagrafica, $data_a);
  521.  
  522.                     $numeroOpportunita = count($opportunitaPerAnagrafica);
  523.  
  524.                     if (1 == $numeroOpportunita) {
  525.  
  526.                         if (!array_key_exists($opportunitaPerAnagrafica[0][$gruppo], $tempResult)) {
  527.                             $tempResult[$opportunitaPerAnagrafica[0][$gruppo]] = array(
  528.                                 'provvigione' => 0,
  529.                                 'class' => array_key_exists($opportunitaPerAnagrafica[0]['mezzo'], $classList) ? $classList[$opportunitaPerAnagrafica[0]['mezzo']] : ''
  530.                             );
  531.                         }
  532.  
  533.                         $tempResult[$opportunitaPerAnagrafica[0][$gruppo]]['provvigione'] += $provv;
  534.                     } elseif (2 == $numeroOpportunita) {
  535.  
  536.                         foreach ($opportunitaPerAnagrafica as $oppDiAnagrafica) {
  537.  
  538.                             if (!array_key_exists($oppDiAnagrafica[$gruppo], $tempResult)) {
  539.                                 $tempResult[$oppDiAnagrafica[$gruppo]] = array(
  540.                                     'provvigione' => 0,
  541.                                     'class' => array_key_exists($oppDiAnagrafica['mezzo'], $classList) ? $classList[$oppDiAnagrafica['mezzo']] : ''
  542.                                 );
  543.                             }
  544.  
  545.                             $tempResult[$oppDiAnagrafica[$gruppo]]['provvigione'] += $provv / 2;
  546.                         }
  547.                     } else {
  548.  
  549.                         $percPerPrimaEUltimaOpportunita = 40;
  550.  
  551.                         $provvPrimaUltimaOpp = ($provv * $percPerPrimaEUltimaOpportunita) / 100;
  552.  
  553.                         $numeroAltreOpportunita = $numeroOpportunita - 2; // meno la prima e l'ultima
  554.                         $provvRimanente = $provv - ($provvPrimaUltimaOpp * 2); // meno la prima e l'ultima
  555.  
  556.                         $provvPerOpportunitaRimanenti = $provvRimanente / $numeroAltreOpportunita;
  557.  
  558.                         //echo "Provv: {$provv} | $numeroOpportunita | {$provvPrimaUltimaOpp} | {$numeroAltreOpportunita} | {$provvRimanente} | {$provvPerOpportunitaRimanenti} <br>";
  559.                         for ($i = 0; $i < $numeroOpportunita; $i++) {
  560.  
  561.                             //echo "$i / $numeroOpportunita<br>";
  562.                             if (!array_key_exists($opportunitaPerAnagrafica[$i][$gruppo], $tempResult)) {
  563.                                 $tempResult[$opportunitaPerAnagrafica[$i][$gruppo]] = array(
  564.                                     'provvigione' => 0,
  565.                                     'class' => array_key_exists($opportunitaPerAnagrafica[$i]['mezzo'], $classList) ? $classList[$opportunitaPerAnagrafica[$i]['mezzo']] : ''
  566.                                 );
  567.                             }
  568.  
  569.                             if ($i == 0 ||
  570.                                     $i == ($numeroOpportunita - 1)) {
  571.                                 //รจ la prima o l'ultima
  572.                                 $tempResult[$opportunitaPerAnagrafica[$i][$gruppo]]['provvigione'] += $provvPrimaUltimaOpp;
  573.                                 //echo "Prima o ultima  --- <br>";
  574.                             } else {
  575.                                 $tempResult[$opportunitaPerAnagrafica[$i][$gruppo]]['provvigione'] += $provvPerOpportunitaRimanenti;
  576.                                 //echo "Rimanente  --- <br>";
  577.                             }
  578.                         }
  579.                     }
  580.                 }
  581.  
  582.                 foreach ($tempResult as $origine => $info) {
  583.                     $risultatoModello[] = array(
  584.                         'gruppoModello' => array(
  585.                             array(
  586.                                 'descrizione' => $origine,
  587.                                 'class' => $info['class'],
  588.                                 'numero' => ''
  589.                             )
  590.                         ),
  591.                         'num_pratiche' => '',
  592.                         'provvigione' => $info['provvigione']
  593.                     );
  594.                 }
  595.  
  596.                 break;
  597.         }
  598.  
  599.         //var_dump($tempResult);
  600.         //var_dump($risultatoModello);
  601.         return array(
  602.             'risultatoModello' => $risultatoModello,
  603.             'tot_provv' => $tot_provv,
  604.             'tot_pratiche' => $tot_pratiche,
  605.             'classList' => $classList
  606.         );
  607.         /*
  608.          * Prima Iterazione
  609.          *
  610.          * "SELECT COUNT(*) AS `num_pratiche`, SUM(provv_totale) AS `provvigione`, `M`.`mezzo`
  611.          * FROM `preventivi` AS `pr`
  612.          * INNER JOIN `opportunita` AS `op` ON pr.id_opportunita=op.id_opportunita
  613.          * LEFT JOIN `processi` AS `prc` ON pr.id_preventivo=prc.id_preventivo
  614.          * INNER JOIN `anagrafiche` AS `A` ON A.id_anagrafica=op.id_anagrafica
  615.          * INNER JOIN `mezzi` AS `M` ON op.id_mezzo = M.id_mezzo
  616.          * INNER JOIN `canali` AS `C` ON op.id_canale = C.id_canale
  617.          * WHERE (((op.stato IN ('PA','PD','LZ') AND pr.stato_prev IN ('R','S','X','1')
  618.          * AND pr.rata IS NOT NULL AND pr.durata IS NOT NULL AND pr.montante IS NOT NULL
  619.          * AND pr.netto IS NOT NULL AND pr.data_invio IS NOT NULL AND ((pr.cod_prodotto in ('AN','PP')
  620.          * AND pr.num_pratica is null) OR (pr.cod_prodotto not in ('AN','PP') and pr.num_pratica is not null)))
  621.          * OR (prc.stato IN ('CF', 'RP', 'NT', 'OB', 'VL', 'LZ'))))
  622.          * AND (data_avvio BETWEEN '2017-01-01' AND '2017-09-30')
  623.          * AND (op.id_opportunita = (SELECT MIN(id_opportunita) from opportunita where id_anagrafica = A.id_anagrafica AND op.stato not in ('2', '3')))
  624.          * GROUP BY `mezzo`"
  625.  
  626.          *
  627.          * Ultima Iterazione
  628.          *
  629.          * "SELECT COUNT(*) AS `num_pratiche`, SUM(provv_totale) AS `provvigione`, `M`.`mezzo`
  630.          * FROM `preventivi` AS `pr`
  631.          * INNER JOIN `opportunita` AS `op` ON pr.id_opportunita=op.id_opportunita
  632.          * LEFT JOIN `processi` AS `prc` ON pr.id_preventivo=prc.id_preventivo
  633.          * INNER JOIN `anagrafiche` AS `A` ON A.id_anagrafica=op.id_anagrafica
  634.          * INNER JOIN `mezzi` AS `M` ON op.id_mezzo = M.id_mezzo
  635.          * INNER JOIN `canali` AS `C` ON op.id_canale = C.id_canale
  636.          * WHERE (((op.stato IN ('PA','PD','LZ') AND pr.stato_prev IN ('R','S','X','1')
  637.          * AND pr.rata IS NOT NULL AND pr.durata IS NOT NULL AND pr.montante IS NOT NULL
  638.          * AND pr.netto IS NOT NULL AND pr.data_invio IS NOT NULL AND ((pr.cod_prodotto in ('AN','PP')
  639.          * AND pr.num_pratica is null) OR (pr.cod_prodotto not in ('AN','PP') and pr.num_pratica is not null)))
  640.          * OR (prc.stato IN ('CF', 'RP', 'NT', 'OB', 'VL', 'LZ'))))
  641.          * AND (data_avvio BETWEEN '2017-01-01' AND '2017-09-30')
  642.          * AND (op.id_opportunita = (SELECT MAX(id_opportunita) from opportunita where id_anagrafica = A.id_anagrafica AND op.stato not in ('2', '3')))
  643.          * GROUP BY `mezzo`"  
  644.          *
  645.          *
  646.          *
  647.          *
  648.          *
  649.          *
  650.          *
  651.          *
  652.          *
  653.          *          */
  654.     }
  655.  
  656.     public function sposta($preventivi_insert_into, $preventivi_delete_from, $opportunita_delete_from, $id_anagrafica) {
  657.  
  658.         $insert_into_prev_cancellazione = "INSERT INTO {$preventivi_insert_into}
  659.                         SELECT {$preventivi_delete_from}.*
  660.                         FROM {$preventivi_delete_from}
  661.                         JOIN {$opportunita_delete_from} USING(id_opportunita)
  662.                         WHERE id_anagrafica = '{$id_anagrafica}'";
  663.  
  664.         $this->_db->query($insert_into_prev_cancellazione);
  665.     }
  666.  
  667.     public function cancella($preventivi_delete_from, $opportunita_delete_from, $id_anagrafica) {
  668.  
  669.         $delete_preventivi = "DELETE pr.*
  670.                   FROM {$preventivi_delete_from} pr
  671.                       JOIN {$opportunita_delete_from} USING(id_opportunita)
  672.                   WHERE id_anagrafica = '{$id_anagrafica}'";
  673.  
  674.         $this->_db->query($delete_preventivi);
  675.     }
  676.  
  677. //#VERDI
  678.     static function condizioniDeliberate() {
  679.         $condizioneProcessoVenditaIstruttoriaGrid = "op.stato IN ('PA','PD','LZ')
  680.                                                      AND pr.stato_prev IN ('R','S','X','1')
  681.                                                      AND pr.rata IS NOT NULL
  682.                                                      AND pr.durata IS NOT NULL
  683.                                                      AND pr.montante IS NOT NULL
  684.                                                      AND pr.netto IS NOT NULL
  685.                                                      AND pr.data_invio IS NOT NULL
  686.                                                      AND ((pr.cod_prodotto in ('AN','PP') AND pr.num_pratica is null) OR (pr.cod_prodotto not in ('AN','PP') and pr.num_pratica is not null))";
  687.  
  688.         $condizioneProcessoIstruttoria = "prc.stato IN ('CF', 'RP', 'NT', 'OB', 'VL', 'LZ')";
  689.  
  690.         $condizione = "(({$condizioneProcessoVenditaIstruttoriaGrid}) OR ({$condizioneProcessoIstruttoria}))";
  691.  
  692.  
  693.         return $condizione;
  694.     }
  695.  
  696. }
  697.  
  698. ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement