Apidcloud

WorkingModel

Feb 4th, 2016
75
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. <?php
  2.  
  3. class Inspecao extends CActiveRecord
  4. {
  5.     const ESTADO_EM_FALTA=0;
  6.     const ESTADO_CONCLUIDO=1;
  7.    
  8.     public $nserie;
  9.     public $_unidade;
  10.  
  11.     public $_em_kit;
  12.     public $kitnserie;
  13.  
  14.     public static function model($className=__CLASS__)
  15.     {
  16.         return parent::model($className);
  17.     }
  18.  
  19.     public function tableName()
  20.     {
  21.         return 'inspecao';
  22.     }
  23.  
  24.     public function rules()
  25.     {
  26.         return array(
  27.             array('data_limite, contacto, nserie', 'required'),
  28.             array('contacto', 'length', 'max'=>128),
  29.             array('data_conclusao', 'default', 'setOnEmpty' => true),
  30.             array('id, kitnserie, unidade_id, data_limite, data_conclusao, contacto, estado', 'safe', 'on'=>'search'),
  31.             array('nserie', 'verifica'),
  32.             array('contacto','email'),
  33.         );
  34.     }
  35.    
  36.     protected function beforeSave()
  37.     {
  38.         //if (!$this->nserie)
  39.         //  if ($this->unidade->nserie)
  40.         //      $this->nserie=$this->unidade->nserie;
  41.    
  42.         if($this->data_conclusao)
  43.         {          
  44.             $this->estado=Inspecao::ESTADO_CONCLUIDO;
  45.         }else{
  46.             $this->estado=Inspecao::ESTADO_EM_FALTA;
  47.         }
  48.         return parent::beforeSave();
  49.     }
  50.    
  51.     protected function afterSave()
  52.     {
  53.        
  54.         if ($this->estado==Inspecao::ESTADO_CONCLUIDO)
  55.         {
  56.             //Yii::trace('**** CONCLUIDO', 'asd.asd.asd');
  57.             if (!$this->unidade->proximaInspecao)
  58.             {
  59.                 //Yii::trace('**** PROXIMA', 'asd.asd.asd');
  60.                 $nova_inspecao=new Inspecao();
  61.                 $nova_inspecao->unidade_id=$this->unidade->id;
  62.                 $nova_inspecao->nserie=$this->unidade->nserie;
  63.                
  64.                 $nova_data = strtotime('+1 year', strtotime($this->data_conclusao));
  65.                
  66.                 $nova_inspecao->data_limite=date("Y-m-d", $nova_data);
  67.                 $nova_inspecao->contacto=$this->contacto;
  68.                 $nova_inspecao->estado=Inspecao::ESTADO_EM_FALTA;
  69.                 if ($nova_inspecao->save())
  70.                     Yii::trace('**** SUCESSO', 'asd.asd.asd');
  71.                 else
  72.                     Yii::trace('**** ERRO'.print_r($nova_inspecao->getErrors(),true), 'asd.asd.asd');
  73.             }
  74.         }
  75.        
  76.         parent::afterSave();
  77.     }
  78.    
  79.     public function verifica($attribute,$params)
  80.     {
  81.         $this->_unidade=Unidade::model()->findByAttributes(array('nserie'=>$this->nserie));
  82.         if (!$this->_unidade)
  83.             $this->addError('nserie', 'Unidade não existe');
  84.        
  85.     }
  86.  
  87.     public function relations()
  88.     {
  89.         /*
  90.         return array(
  91.  
  92.             'unidade' => array(self::BELONGS_TO, 'Unidade', 'unidade_id'),
  93.             'relatorio' => array(self::HAS_ONE, 'Relatorio', 'inspecao_id'),
  94.             'em_kit'=>array(self::HAS_MANY, 'EmKit', array('id' => 'unidade_id'), 'through' => 'unidade'),
  95.  
  96.             'relatorio' => array(self::HAS_ONE, 'Relatorio', 'inspecao_id'),
  97.             'unidade' => array(self::BELONGS_TO, 'Unidade', 'unidade_id'),
  98.             'em_kit'=>array(self::HAS_MANY,'EmKit',array('id'=>'unidade_id'),'through'=>'unidade'),
  99.             'kit'=>array(self::BELONGS_TO,'Kit','kit_id','through'=>'em_kit')
  100.         );*/
  101.  
  102.  
  103.         return array(
  104.             'relatorio' => array(self::HAS_ONE, 'Relatorio', 'inspecao_id'),
  105.             'unidade' => array(self::BELONGS_TO, 'Unidade', 'unidade_id'),
  106.             'emkit'=>array(self::HAS_MANY,'EmKit',array('id'=>'unidade_id')),
  107.             'kit'=>array(self::HAS_ONE,'Kit','kit_id','through'=>'emkit')
  108.         );
  109.  
  110.     }
  111.  
  112.     public function attributeLabels()
  113.     {
  114.         return array(
  115.             'id' => 'Identificador',
  116.             'unidade_id' => 'Unidade',
  117.             'data_limite' => 'Data Limite',
  118.             'data_conclusao' => 'Data de Execução',
  119.             'contacto' => 'Contacto e-mail',
  120.             'proximaInspecao' => 'Próxima Inspeção',
  121.             'nserie'=>'Nº de Série',
  122.             'kitnserie' => 'Kit Nº Série',
  123.         );
  124.     }
  125.  
  126.     public function search()
  127.     {
  128.         $criteria=new CDbCriteria;
  129.  
  130.         $criteria->compare('id',$this->id,true);
  131.         $criteria->compare('unidade_id',$this->unidade_id,true);
  132.        
  133.         $data = $this->data_limite;
  134.        
  135.         /*$pattern = '/(\d+)-(\d+)/';
  136.         if (preg_match($pattern, $this->data_limite, $matches))
  137.             $data=sprintf("%02d", $matches[2]).'-'.sprintf("%02d", $matches[1]);
  138.        
  139.         $pattern = '/(\d+)-(\d{4})/';
  140.         if (preg_match($pattern, $this->data_limite, $matches))
  141.             $data=$matches[2].'-'.sprintf("%02d", $matches[1]);
  142.  
  143.         $pattern = '/(\d+)-(\d+)-(\d{4})/';
  144.         if (preg_match($pattern, $this->data_limite, $matches))
  145.             $data=$matches[3].'-'.sprintf("%02d", $matches[2]).'-'.sprintf("%02d", $matches[1]);*/
  146.            
  147.         $criteria->compare('data_limite',$data,true);
  148.        
  149.         $data = $this->data_conclusao;
  150.        
  151.         /*$pattern = '/(\d+)-(\d+)/';
  152.         if (preg_match($pattern, $this->data_conclusao, $matches))
  153.             $data=sprintf("%02d", $matches[2]).'-'.sprintf("%02d", $matches[1]);
  154.        
  155.         $pattern = '/(\d+)-(\d{4})/';
  156.         if (preg_match($pattern, $this->data_conclusao, $matches))
  157.             $data=$matches[2].'-'.sprintf("%02d", $matches[1]);
  158.  
  159.         $pattern = '/(\d+)-(\d+)-(\d{4})/';
  160.         if (preg_match($pattern, $this->data_conclusao, $matches))
  161.             $data=$matches[3].'-'.sprintf("%02d", $matches[2]).'-'.sprintf("%02d", $matches[1]);*/
  162.        
  163.         $criteria->compare('data_conclusao',$data,true);
  164.        
  165.         $criteria->compare('contacto',$this->contacto,true);
  166.         $criteria->compare('t.estado',$this->estado);
  167.        
  168.         $criteria->compare('nserie',$this->nserie,true);
  169.        
  170.         $criteria->select='t.*, unidade.nserie AS nserie';
  171.         $criteria->join='LEFT JOIN unidade ON unidade.id=t.unidade_id';
  172.  
  173.         return new CActiveDataProvider($this, array(
  174.             'criteria'=>$criteria,
  175.             'sort'=>array(
  176.                 'defaultOrder'=>array(
  177.                     'data_limite'=>false
  178.                 ),
  179.                 'attributes' => array(
  180.                     'nserie' => array(
  181.                         'asc' => 'nserie',
  182.                         'desc' => 'nserie desc',
  183.                     ),
  184.                     '*',
  185.                 ),
  186.             )
  187.         ));
  188.     }
  189.    
  190.     public function inspecoesUnidade($unidade)
  191.     {
  192.         $criteria=new CDbCriteria;
  193.  
  194.         $criteria->compare('id',$this->id,true);
  195.         $criteria->compare('unidade_id',$unidade);
  196.         $criteria->compare('data_limite',$this->data_limite,true);
  197.         $criteria->compare('data_conclusao',$this->data_conclusao,true);
  198.         $criteria->compare('contacto',$this->contacto,true);
  199.         $criteria->compare('estado',$this->estado);
  200.  
  201.         return new CActiveDataProvider($this, array(
  202.             'criteria'=>$criteria,
  203.             'sort'=>array(
  204.                 'defaultOrder'=>array(
  205.                     'data_limite'=>true
  206.                 )
  207.             )
  208.         ));
  209.     }
  210.    
  211.     public static function itemAlias($type,$code=NULL) {
  212.         $_items = array(
  213.             'Estado' => array(
  214.                 self::ESTADO_EM_FALTA => 'Em falta',
  215.                 self::ESTADO_CONCLUIDO => 'Concluída',
  216.             ),
  217.         );
  218.         if (isset($code))
  219.             return isset($_items[$type][$code]) ? $_items[$type][$code] : false;
  220.         else
  221.             return isset($_items[$type]) ? $_items[$type] : false;
  222.     }
  223.    
  224.     public function getCssClass()
  225.     {
  226.         $css='';
  227.        
  228.         if ($this->estado==self::ESTADO_CONCLUIDO)
  229.         {
  230.             $css='success';
  231.         } else {
  232.        
  233.             $data_actual = strtotime(date("Y-m-d"));
  234.             $data_limite = strtotime($this->data_limite);
  235.        
  236.             $delta = $data_actual-$data_limite;
  237.        
  238.             if ($delta>0)
  239.                 $css='error';
  240.                
  241.             if ($delta<=0)
  242.                 $css='warning';
  243.        
  244.             if ($delta<-2592000)
  245.                 $css='';
  246.         }
  247.        
  248.         return $css;
  249.     }
  250.    
  251.     public function existeRelatorio()
  252.     {
  253.         $existe=false;
  254.         if ($this->relatorio)
  255.             $existe=true;
  256.        
  257.         return $existe;
  258.     }
  259. }
RAW Paste Data