/controllers/tipo_cambios_controller.php
PHP | 358 lines | 326 code | 30 blank | 2 comment | 73 complexity | c9eaf7a56c1a3077cf1a33a8e55c9fe1 MD5 | raw file
Possible License(s): GPL-2.0
- <?php
- class TipoCambiosController extends AppController{
- var $name = 'TipoCambios';
- var $appModule = 'Contabilidad';
- var $helpers = array('Html', 'Form', 'Javascript', 'Codigo', 'GetList');
- var $components = array('RequestHandler','Formating');
- var $uses = array('TipoCambio', 'Moneda');
- var $paginate=array('order'=>array('TipoCambio.fecha'=>'desc'));
- function index(){
- $conditions['TipoCambio.activo'] = 1;
- $conditions['date_part(\'month\',TipoCambio.fecha)'] = $this->periodoId();
- $conditions['date_part(\'year\',TipoCambio.fecha)'] = $this->_ejercicio['codigo'];
- if (!empty($this->params['url']['limite']))
- $this->limite = $this->params['url']['limite'];
-
- $this->data['TipoCambio']['pagesize'] = $this->paginate['limit']=$this->limite;
- $data = $this->paginate($conditions);
- $this->set('cambios', $data);
- $this->set('limite', $this->limite);
- }
- function add(){
- if (!empty($this->data)){
- $cantidad = $this->TipoCambio->find('count',array(
- 'conditions'=>array(
- 'moneda_fuente_id'=>$this->data['TipoCambio']['moneda_fuente_id'],
- 'moneda_destino_id'=>$this->data['TipoCambio']['moneda_destino_id'],
- 'fecha'=>$this->data['TipoCambio']['fecha'],
- 'activo'=>true
- ),
- 'recursive'=>-1
- ));
- if ($cantidad > 0){
- $tipoCambio = $this->TipoCambio->find('first',array(
- 'conditions'=>array(
- 'moneda_fuente_id'=>$this->data['TipoCambio']['moneda_fuente_id'],
- 'moneda_destino_id'=>$this->data['TipoCambio']['moneda_destino_id'],
- 'fecha'=>$this->data['TipoCambio']['fecha'],
- 'activo'=>true
- ),
- 'recursive'=>-1
- ));
- $this->data['TipoCambio']['id'] = $tipoCambio['TipoCambio']['id'];
- $this->data['TipoCambio']['usuario_modificacion_id'] = $this->_usuario['id'];
- $this->data['TipoCambio']['fecha_modificacion'] = 'now()';
- } else {
- $this->data['TipoCambio']['usuario_creacion_id'] = $this->_usuario['id'];
- $this->data['TipoCambio']['fecha_creacion'] = 'now()';
- $this->TipoCambio->create();
- }
- if ($this->TipoCambio->save($this->data)){
- $this->Session->setFlash('El tipo de cambio se ha adicionado satisfactoriamente');
- $this->redirect(array('action'=>'index'));
- } else {
- $this->Session->setFlash('Se ha producido un error al adicionado el tipo de cambio');
- }
- }
- $this->set('monedas', $this->Moneda->find('list', array(
- 'fields'=>array('id', 'descripcion'),
- 'conditions'=>array('activo'=>true),
- 'order'=>'id'
- )));
- $this->set('fecha', $this->_ejercicio['Actual']['fecha']);
- }
- function edit($id = null){
- if (empty($id)){
- $this->Session->setFlash('El identificador de tipo de cambio es incorrecto');
- $this->redirect(array('action'=>'index'));
- }
- if (!empty($this->data)){
- $this->data['TipoCambio']['usuario_modificacion_id'] = $this->_usuario['id'];
- $this->data['TipoCambio']['fecha_modificacion'] = 'now()';
- if ($this->TipoCambio->save($this->data)){
- $this->Session->setFlash('El tipo de cambio se ha adicionado satisfactoriamente');
- $this->redirect(array('action'=>'index'));
- } else {
- $this->Session->setFlash('Se ha producido un error al adicionado el tipo de cambio');
- }
- } else {
- $this->TipoCambio->recursive = -1;
- $this->data = $this->TipoCambio->read(null, $id);
- }
- $this->set('monedas', $this->Moneda->find('list', array(
- 'fields'=>array('id', 'descripcion'),
- 'conditions'=>array('activo'=>true),
- 'order'=>'id'
- )));
- $this->set('fecha', $this->_ejercicio['Actual']['fecha']);
- }
- function delete($id = null, $verbose = true){
- if (empty($id)){
- if ($verbose){
- $this->Session->setFlash('El identificador de tipo de cambio es incorrecto');
- $this->redirect(array('action'=>'index'));
- } else return false;
- }
- $this->TipoCambio->recursive = -1;
- $data = $this->TipoCambio->read(null, $id);
- $data['TipoCambio']['activo'] = false;
- $data['TipoCambio']['usuario_borrado_id'] = $this->_usuario['id'];
- $data['TipoCambio']['fecha_borrado'] = 'now()';
-
- if ($this->TipoCambio->save($data)){
- if ($verbose){
- $this->Session->setFlash('El tipo de cambio se ha adicionado satisfactoriamente');
- $this->redirect(array('action'=>'index'));
- } else return true;
- } else {
- if ($verbose){
- $this->Session->setFlash('Se ha producido un error al adicionado el tipo de cambio');
- } else return false;
- }
- }
- function process(){// procesa anulaciones y eliminaciones en bloque
- //$this->autoRender = false;
- $op = isset($this->params['form']['delete'])?'eliminar':'';
- $flag = true;
- $i = 0;
- foreach($this->data as $item){
- if ($item['id']!='0'){
- if(isset($this->params['form']['delete'])){ // anular
- $flag = $this->delete($item['id'], false);
- }
- if (!$flag){
- $data = $this->TipoCambio->read(null, $item['TipoCambio']['id']);
- $this->Session->setFlash(__("Se ha producido un error al $op el Tipo de Cambio #".$data['TipoCambio']['id'], true));
- break;
- }
- }
- $i++;
- }
- if ($flag && $i++){
- $this->Session->setFlash(__("El proceso de $op Tipos de Cambio se ha realizado con exito.", true));
- }
- $this->redirect(array('action'=>'index'));
- }
- function proxyUpdateChange($from = 2, $to = 1, $date = null){
- if (empty($date)) $date = date('d-m-Y');
- $date = str_replace('-','/',$date);
- $dateParts = explode('/',$date);
-
- $datetime = date('d/m/Y H:i:s');// para log
- $sunat = $this->downloadParseSunat($this->URL_SUNAT,$dateParts[2],$dateParts[1],$dateParts[0]);
- if (count($sunat) > 0){
- $sunat = $sunat[count($sunat)-1];
- $sunat['dia'] = date('d/m/Y', mktime(0,0,0,$dateParts[1],$sunat['dia'],$dateParts[2]));
- $result['SUNAT']=array(
- 'dia'=>$sunat['dia'],
- 'compra'=>$sunat['compra'],
- 'venta'=>$sunat['venta'],
- 'mensaje'=>''
- );
- } else {
- echo "$datetime: No se encontro tipo de cambio el $date de $from a $to\n";
- die;
- }
- if ($sunat['dia'] != $date){
- echo "$datetime: No se encontro tipo de cambio el $date de $from a $to\n";
- die;
- }
- $sbs = $this->downloadParseSbs($this->URL_SBS,$dateParts[2],$dateParts[1],$dateParts[0]);
- if (count($sbs) > 0){
- $sbs = $sbs[count($sbs)-1];
- $result['SBS']=array(
- 'dia'=>$sbs['dia'],
- 'compra'=>$sbs['compra'],
- 'venta'=>$sbs['venta'],
- 'mensaje'=>''
- );
- } else {
- echo "$datetime: No se encontro tipo de cambio el $date de $from a $to\n";
- die;
- }
- $date = $sunat['dia'];
- $cantidad = $this->TipoCambio->find('count',array(
- 'conditions'=>array(
- 'moneda_fuente_id'=>$from,
- 'moneda_destino_id'=>$to,
- 'fecha'=>$date,
- 'activo'=>true
- ),
- 'recursive'=>-1
- ));
- if ($cantidad > 0){
- $tipoCambio = $this->TipoCambio->find('first',array(
- 'conditions'=>array(
- 'moneda_fuente_id'=>$from,
- 'moneda_destino_id'=>$to,
- 'fecha'=>$date,
- 'activo'=>true
- ),
- 'recursive'=>-1
- ));
- $tipoCambio['TipoCambio']['moneda_fuente_id'] = $from;
- $tipoCambio['TipoCambio']['moneda_destino_id'] = $to;
- $tipoCambio['TipoCambio']['fecha'] = $date;
- $tipoCambio['TipoCambio']['bancario_compra'] = $result['SUNAT']['compra'];
- $tipoCambio['TipoCambio']['bancario_venta'] = $result['SUNAT']['venta'];
- $tipoCambio['TipoCambio']['promedio_compra'] = $result['SBS']['compra'];
- $tipoCambio['TipoCambio']['promedio_venta'] = $result['SBS']['venta'];
- $tipoCambio['TipoCambio']['usuario_modificacion_id'] = -1;
- $tipoCambio['TipoCambio']['fecha_modificacion'] = 'now()';
- } else {
- $tipoCambio['TipoCambio']['moneda_fuente_id'] = $from;
- $tipoCambio['TipoCambio']['moneda_destino_id'] = $to;
- $tipoCambio['TipoCambio']['fecha'] = $date;
- $tipoCambio['TipoCambio']['bancario_compra'] = $result['SUNAT']['compra'];
- $tipoCambio['TipoCambio']['bancario_venta'] = $result['SUNAT']['venta'];
- $tipoCambio['TipoCambio']['promedio_compra'] = $result['SBS']['compra'];
- $tipoCambio['TipoCambio']['promedio_venta'] = $result['SBS']['venta'];
- $tipoCambio['TipoCambio']['usuario_creacion_id'] = -1;
- $tipoCambio['TipoCambio']['fecha_creacion'] = 'now()';
- $this->TipoCambio->create();
- }
- if ($this->TipoCambio->save($tipoCambio)){
- echo "$datetime: El tipo de cambio se ha adicionado satisfactoriamente el $date de $from a $to\n";
- die;
- } else {
- echo "$datetime: Se ha producido un error al adicionado el tipo de cambio el $date de $from a $to\n";
- die;
- }
- }
-
- private function downloadParseSunat($url = null, $year = null, $month = null, $day = null){
- set_time_limit(0);
- $now = $this->fechaTrabajo();
- if (!empty($now)) list($d,$m,$y) = explode('/',$now);
- if (empty($day)) $day = $d;
- if (empty($month)) $month = $m;
- if (empty($year)) $year = $y;
- $res = App::import('Vendor', 'simple_html_dom', array('file' =>'simple_html_dom'.DS.'simple_html_dom.php'));
- if (empty($url)) $url = $this->URL_SUNAT;
- $url = sprintf($url, $year, $month);
- $html = file_get_dom($url);
- $tr = $html->find('table tr td');
- $row = array();
- $lista = array();
- foreach ($tr as $element){
- $data = trim($element->plaintext);
- $data += 0;
- if (!is_numeric($data) || $data == 0) continue;
- if (!isset($row['dia']))
- $row['dia'] = $data;
- else if (!isset($row['compra']))
- $row['compra'] = $data;
- else if (!isset($row['venta']))
- $row['venta'] = $data;
- else {
- if ($row['dia'] >= $day) break; // para que se detenga en el dia
- array_push($lista, $row);
- $row = array();
- $row['dia'] = $data;
- }
- }
- if (count($row)>0) array_push($lista, $row);
- return $lista;
- }
- private function downloadParseSbs($url = null, $year = null, $month = null, $day = null){
- set_time_limit(0);
- $now = $this->fechaTrabajo();
- if (!empty($now)) list($d,$m,$y) = explode('/',$now);
- if (empty($day)) $day = $d;
- if (empty($month)) $month = $m;
- if (empty($year)) $year = $y;
- $from = date('d/m/Y', mktime(0, 0, 0, $month, 1, $year));
- $to = date('d/m/Y', mktime(0, 0, 0, $month, $day+1, $year));
- $res = App::import('Vendor', 'simple_html_dom', array('file' =>'simple_html_dom'.DS.'simple_html_dom.php'));
- if (empty($url)) $url = $this->URL_SBS;
- $url = sprintf($url, $from, $to);
- $html = file_get_dom($url);
- $tr = $html->find('table tr td');
- $row = array();
- $lista = array();
- foreach ($tr as $element){
- $data = trim($element->plaintext);
- $data = explode(' ',$data);
- foreach ($data as $d){
- $d = trim($d);
- if (!is_numeric($d) && !$this->is_date($d)) continue;
- if (!isset($row['dia']))
- $row['dia'] = $d;
- else if (!isset($row['compra']))
- $row['compra'] = $d+0;
- else if (!isset($row['venta']))
- $row['venta'] = $d+0;
- else {
- if ($row['dia'] > $day) break; // para que se detenga en el dia
- // echo $row['dia'];
- array_push($lista, $row);
- $row = array();
- $row['dia'] = $d;
- }
- }
- }
- if (count($row)>0) array_push($lista, $row);
- return $lista;
- }
- function download(){
- $sunat = $this->downloadParseSunat();
- if (count($sunat) > 0){
- $sunat = $sunat[count($sunat)-1];
- $sunat['dia'] = date('d/m/Y', mktime(0,0,0,$this->periodoId(),$sunat['dia'],$this->_ejercicio['codigo']));
- $result['SUNAT']=array(
- 'dia'=>$sunat['dia'],
- 'compra'=>$sunat['compra'],
- 'venta'=>$sunat['venta'],
- 'mensaje'=>''
- );
- } else {
- $result['SUNAT']['mensaje'] = 'No se encontro tipo de cambio';
- }
- $sbs = $this->downloadParseSbs();
- if (count($sbs) > 0){
- $sbs = $sbs[count($sbs)-1];
- $result['SBS']=array(
- 'dia'=>$sbs['dia'],
- 'compra'=>$sbs['compra'],
- 'venta'=>$sbs['venta'],
- 'mensaje'=>''
- );
- } else {
- $result['SBS']['mensaje'] = 'No se encontro tipo de cambio';
- }
- if ($this->RequestHandler->isAjax()) {
- Configure::write('debug', 0); //quito el debugger
- $this->autoRender = false;//desabilito el auto dibujado
- $this->autoLayout = false;//desabilito el auto layout
-
- $this->header('Content-Type: application/json');
- echo json_encode($result);
- } else $this->set(compact('result'));
- }
- }
- ?>