<?php

class Notaingreso extends CI_Controller {

  public function __construct() {
    parent::__construct();
    $this->load->model(modelo(), 'Controlador_model');
    $this->controlador = controlador();
    $this->titulo_controlador = humanize($this->controlador);
    $this->url = base_url().$this->controlador;
    $this->vista = $this->controlador;
    $this->perfil = $this->session->userdata('perfil') ? $this->session->userdata('perfil') : FALSE;
    $this->usuario = $this->session->userdata('usuario') ? $this->session->userdata('usuario') : FALSE;
    $this->empresa = $this->session->userdata('empresa') ? $this->session->userdata('empresa') : FALSE;
    $this->notaingreso = $this->session->userdata('notaingreso') ? $this->session->userdata('notaingreso') : FALSE;
  }

  public function index() {
    $data = array(
      'titulo' => $this->titulo_controlador,
      'contenido' => $this->vista,
      'breads' => array(array('ruta' => 'javascript:;', 'titulo' => $this->titulo_controlador))
    );
    $this->load->view(THEME.TEMPLATE, $data);
  }

  public function ajax_generado($finicio, $factual) {
    $draw = intval($this->input->get("draw"));
    $start = intval($this->input->get("start"));
    $length = intval($this->input->get("length"));
    $this->db->where("created BETWEEN '".$finicio."' AND '".$factual."'");
    $query = $this->db->where('estado <>', '0')->get($this->controlador)->result();
    $data = [];
    foreach($query as $key => $value) {
      $usuario = $this->Controlador_model->get($value->usuario, 'usuario');
      if($value->estado == '1') { $estado = '<span class="label label-success">APROBADO</span>'; }
      if($value->estado == '2') { $estado = '<span class="label label-info">GENERADO</span>'; }
      if($value->estado == '3') { $estado = '<span class="label label-danger">ANULADO</span>'; }
      //add variables for action
      $boton = '';
      //add html fodr action
      $boton .= '<a onclick="visualizar('.$value->id.')" class="btn btn-default btn-sm" title="Visualizar"><i class="fa fa-eye"></i></a> ';
      $boton .= '<a onclick="imprimir('.$value->id.')" class="btn btn-danger btn-sm" title="Imprimir"><i class="fa fa-print"></i></a> ';
      $data[] = array(
        $key + 1,
        $value->codigo,
        $value->tipoingreso,
        $usuario ? $usuario->nombre : '',
        $estado,
        $value->montototal,
        $value->created,
        $boton
      );
    }
    $result = array(
      "draw" => $draw,
      "recordsTotal" => $start,
      "recordsFiltered" => $length,
      "data" => $data
    );
    echo json_encode($result);
  }

  public function ajax_pendiente() {
    $draw = intval($this->input->get("draw"));
    $start = intval($this->input->get("start"));
    $length = intval($this->input->get("length"));
    $query = $this->db->where('estado', '0')->get($this->controlador)->result();
    $data = [];
    foreach($query as $key => $value) {
      $usuario = $this->Controlador_model->get($value->usuario, 'usuario');
      //add variables for action
      $boton = '';
      //add html fodr action
      $boton .= '<a class="btn btn-info btn-sm" href="'.$this->url.'/actualizar/'.$value->id.'" title="Modificar"><i class="fa fa-pencil"></i></a> ';
      $boton .= '<a class="btn btn-danger btn-sm" onclick="borrar('.$value->id.')" title="Borrar"><i class="fa fa-trash"></i></a> ';
      $data[] = array(
        $key + 1,
        $value->codigo,
        $value->tipoingreso,
        $usuario ? $usuario->nombre : '',
        '<span class="label label-warning">PENDIENTE</span>',
        $value->montototal,
        $value->created,
        $boton
      );
    }
    $result = array(
      "draw" => $draw,
      "recordsTotal" => $start,
      "recordsFiltered" => $length,
      "data" => $data
    );
    echo json_encode($result);
  }

  public function crear() {
    $numero = $this->Controlador_model->codigos($this->controlador);
		$numeros = $numero ? $numero->correlativo + 1 : 1;
		$cadena = "";
		for($i = 0 ; $i < 4 - strlen($numeros); $i++ ) {
			$cadena = $cadena.'0';
		}
    $data['codigo'] = "NI".$cadena.$numeros;
    $data['correlativo'] = $numeros;
		$data['tipoingreso'] = 'AJUSTE STOCK';
		$data['usuario'] = $this->usuario;
		$data['empresa'] = $this->empresa;
		$data['created'] = date('Y-m-d');
    $insert = $this->Controlador_model->save($this->controlador, $data);
    $CI = & get_instance();
    $CI->session->set_userdata('notaingreso', $insert);
    redirect($this->url);
  }

  public function volver() {
    $CI = & get_instance();
    $CI->session->set_userdata('notaingreso', NULL);
    redirect($this->url);
  }

  public function actualizar($id) {
    $CI = & get_instance();
    $CI->session->set_userdata('notaingreso', $id);
    redirect($this->url);
  }

  public function botonpedido() {
    $data = $this->Controlador_model->get($this->notaingreso, $this->controlador);
    $row = '';
    if($data) {
      if($data->estado == '0') {
        $row .= '<a onclick="grabar('.$data->id.')" class="btn btn-success" data-toggle="tooltip" title="GENERAR"><i class="fa fa-meetup"></i></a> ';
      } else {
        $row .= '<a href="'.$this->url.'/crear" class="btn btn-warning" data-toggle="tooltip" title="NUEVO"><i class="fa fa-leaf"></i></a> ';
        $row .= '<a onclick="imprimir('.$data->id.')" class="btn btn-danger" data-toggle="tooltip" title="IMPRIMIR"><i class="fa fa-print"></i></a> ';
      }
    }
    $row .= '<a onclick="location.reload()" class="btn btn-openid" data-toggle="tooltip" title="RECARGAR"><i class="fa fa-repeat"></i></a> ';
    $row .= '<a href="'.$this->url.'/volver" class="btn btn-default" data-toggle="tooltip" title="VOLVER"><i class="fa fa-arrow-left"></i></a> ';
    echo $row;
  }

  public function ajax_delete($id) {
    $this->Controlador_model->delete_by_id($id, $this->controlador);
    echo json_encode(array("status" => TRUE));
  }

  public function visualizar($id = FALSE) {
    $data = $this->Controlador_model->get($id, $this->controlador);
    $empresa = $this->Controlador_model->get($data->empresa, 'empresa');
    $cliente = $this->Controlador_model->get($data->usuario, 'usuario');
    $notasalidadetalle = $this->Controlador_model->getDetalle($id, 'notaingresodetalle');
    $ticket = '';
    $ticket .= '<div class="clearfix"><div class="pull-left"><h4 class="text-left"><span>'.$empresa->razonsocial.'</span></h4>
    <span><b>RUC:</b> '.$empresa->ruc.'</br><b>Direccion:</b> '.$empresa->direccion.'</span></br>
    <span><b>Telefono:</b> '.$empresa->telefono.'</div><div class="pull-right">
    <h4>'.$data->tipoingreso.'<br># '.$data->codigo.'<br></h4></div></div><hr><div class="row"><div class="col-md-12">
    <div class="pull-left m-t-30"><span><h4>SOLICITANTE</h4><span><span><b>Nombre: </b>'.$cliente->nombre.' '.$cliente->apellido.'</span><br/></div></div></div>
    <div class="row"><div class="col-md-12"><div class="table-responsive"><table class="table table-bordered table-condensed"><thead>
    <tr><th>#</th><th>Codigo</th><th>Producto</th><th>Precio</th><th>Cantidad</th><th>Sub-total</th></tr></thead><tbody>';
    $total = 0;
    $i = 0;
    foreach ($notasalidadetalle as $value) {
      $i++;
      $producto = $this->Controlador_model->get($value->producto, 'producto');
      $categoria = $this->Controlador_model->get($producto->categoria, 'productocategoria');
      $total += $value->subtotal;
      $ticket .= '<tr><td>'.$i.'</td><td>'.$producto->codigo.'</td><td>'.$producto->nombre.' '.($categoria ? $categoria->nombre : '').'</td>
      <td>'.$value->precio.'</td><td>'.$value->cantidad.'</td><td class="right">'.number_format($value->subtotal, 2).'</td></tr>';
    }
    $ticket .= '<tr><td colspan="5" align="right"><strong>Total:</strong></td><td align="right">
    <strong>'.number_format($total, 2).'</strong></td></tr></tbody></table></div></div></div>';
    echo $ticket;
  }

  public function completarproducto() {
    if (isset($_GET['term'])) {
      $q = strtoupper($_GET['term']);
      $this->Controlador_model->completarproducto($q);
    }
  }

  public function completarempresa() {
    if (isset($_GET['term'])) {
      $q = strtoupper($_GET['term']);
      $this->Controlador_model->completarempresa($q);
    }
  }

  public function completarusuario() {
    if (isset($_GET['term'])) {
      $q = strtoupper($_GET['term']);
      $this->Controlador_model->completarusuario($q);
    }
  }

  public function imprimir($id) {
    $ticket = '<embed src="'.$this->url.'/notaingresopdf/'.$id.'" type="application/pdf" width="100%" height="400"></embed>';
    echo $ticket;
  }

  public function notaingresopdf($id) {
    $notaingreso = $this->Controlador_model->get($id, $this->controlador);
    $notaingresodetalle = $this->Controlador_model->getDetalle($id, 'notaingresodetalle');
    $data = array(
      'data' => $notaingreso,
      'letras' => num_to_letras($notaingreso->montototal),
      'datas' => $notaingresodetalle,
    );
    $this->load->view('/pdf'.$this->controlador, $data);
    $html = $this->output->get_output();
    $this->dompdf->loadHtml($html);
    $this->dompdf->setPaper('A4', 'portrait');
    $this->dompdf->render();
    $this->dompdf->stream("ordencompra.pdf", array("Attachment"=>0));
  }

  private function _validate() {
    $data = array();
    $data['error_string'] = array();
    $data['inputerror'] = array();
    $data['status'] = TRUE;

    if($this->input->post('empresa') == '') {
      $data['inputerror'][] = 'empresas';
      $data['error_string'][] = 'Este campo es obligatorio.';
      $data['status'] = FALSE;
    }

    if($this->input->post('usuario') == '') {
      $data['inputerror'][] = 'usuarios';
      $data['error_string'][] = 'Este campo es obligatorio.';
      $data['status'] = FALSE;
    }

    if($data['status'] === FALSE) {
      echo json_encode($data);
      exit();
    }
  }

  public function ajax_update() {
    $this->_validate();
    $data['usuario'] = $this->input->post('usuario');
    $data['empresa'] = $this->input->post('empresa');
    if($this->Controlador_model->update(array('id' => $this->notaingreso), $data, $this->controlador)) {
      echo json_encode(array("status" => TRUE));
    }
  }

  public function ajax_list_detalle() {
    $draw = intval($this->input->get("draw"));
    $start = intval($this->input->get("start"));
    $length = intval($this->input->get("length"));
    $query = $this->db->order_by('id', 'desc')->where('notaingreso', $this->notaingreso)->get('notaingresodetalle')->result();
    $compra = $this->Controlador_model->get($this->notaingreso, $this->controlador);
    $data = [];
    foreach($query as $key => $value) {
      $no = $key + 1;
      $producto = $this->Controlador_model->get($value->producto, 'producto');
      $marca = $this->Controlador_model->get($producto->categoria, 'productocategoria');
      $campohidden = '<input type="hidden" id="detalle'.$no.'" name="detalle" value="'.$value->id.'">';
      //add variables for action
      $boton1 = '';
      $campo1 = '';
      //add html fodr action
      if($compra->estado == '0') {
        $boton1 = '<a class="btn btn-sm btn-danger" title="Borrar" onclick="borrardetalle('.$value->id.')"><i class="fa fa-trash"></i></a>';
        $campo1 = '<input type="text" size="2" class="form-control text-center money" id="cantidad'.$no.'" name="cantidad"
        onkeydown="if(event.keyCode == 13) { cambiarcantidad('.$no.') }" value="'.$value->cantidad.'" autocomplete="off">';
      } else {
        $campo1 = $value->cantidad;
      }
      $data[] = array(
        $no.$campohidden,
        $producto->codigo,
        $value->nombre,
        $value->precio,
        $campo1,
        $boton1,
        $value->subtotal
      );
    }
    $result = array(
      "draw" => $draw,
      "recordsTotal" => $start,
      "recordsFiltered" => $length,
      "data" => $data
    );
    echo json_encode($result);
  }

  private function _validatedetalle() {
    $data = array();
    $data['error_string'] = array();
    $data['inputerror'] = array();
    $data['status'] = TRUE;
    $detallelist = $this->Controlador_model->detalleduplicado($this->notaingreso, $this->input->post('producto'));

    if($this->input->post('producto') == '') {
      $data['inputerror'][] = 'productos';
      $data['error_string'][] = 'Este campo es obligatorio.';
      $data['status'] = FALSE;
    }

    if($this->input->post('cantidad') == '') {
      $data['inputerror'][] = 'cantidad';
      $data['error_string'][] = 'Este campo es obligatorio.';
      $data['status'] = FALSE;
    }

    if($detallelist) {
      $data['inputerror'][] = 'productos';
      $data['error_string'][] = 'Este campo ya existe en la base de datos.';
      $data['status'] = FALSE;
    }

    if($data['status'] === FALSE) {
      echo json_encode($data);
      exit();
    }
  }

  public function ajax_adddetalle() {
    $this->_validatedetalle();
    $producto = $this->Controlador_model->get($this->input->post('producto'), 'producto');
    $compras = $this->Controlador_model->get($this->notaingreso, $this->controlador);
    $data['producto'] = $this->input->post('producto');
    $data['notaingreso'] = $this->notaingreso;
    $data['nombre'] = $producto->nombre;
    $data['precio'] = $this->input->post('preciocompra');
    $data['cantidad'] = $this->input->post('cantidad');
    $data['subtotal'] = $this->input->post('preciocompra') * $this->input->post('cantidad');
    if($this->Controlador_model->save('notaingresodetalle', $data)) {
      $compra['montototal'] = $compras->montototal + ($this->input->post('preciocompra') * $this->input->post('cantidad'));
      $this->Controlador_model->update(array('id' => $this->notaingreso), $compra, 'notaingreso');
      echo json_encode(array("status" => TRUE));
    }
  }

  public function ajax_deletedetalle($id) {
    $detalle = $this->Controlador_model->get($id, 'notaingresodetalle');
    $compra = $this->Controlador_model->get($detalle->notaingreso, $this->controlador);
    if ($this->Controlador_model->delete_by_id($id, 'notaingresodetalle')) {
      $data['montototal'] = $compra->montototal - $detalle->subtotal;
      $this->Controlador_model->update(array('id' => $detalle->notaingreso), $data, $this->controlador);
      echo json_encode(array("status" => TRUE));
    }
  }

  public function ajax_updateventa() {
    $compra = $this->Controlador_model->get($this->notaingreso, $this->controlador);
    $empresa = $this->Controlador_model->get($compra->empresa, 'empresa');
    $usuario = $this->Controlador_model->get($compra->usuario, 'usuario');
    $contador = $this->Controlador_model->contador($this->notaingreso);
    $data['empresa'] = $compra->empresa;
    $nombreempresa = $empresa->tipo == '0' ? $empresa->nombre : $empresa->razonsocial;
    $data['nombreempresa'] = $empresa->ruc.' | '.$nombreempresa;
    $data['usuario'] = $compra->usuario;
    $data['estado'] = $compra->estado;
    $data['contador'] = $contador;
    $data['tipoingreso'] = $compra->tipoingreso;
    $data['nombreusuario'] = $usuario->documento.' | '.$usuario->nombre.' '.$usuario->apellido;
    $data['codigo'] = $compra->codigo;
    $data['montototal'] = $compra->montototal;
    echo json_encode($data);
  }

  public function ajax_updatecantidad() {
    $detalle = $this->Controlador_model->get($this->input->post('detalle'), 'notaingresodetalle');
    $ventas = $this->Controlador_model->get($detalle->notaingreso, $this->controlador);
    $data['cantidad'] = $this->input->post('cantidad');
    $data['subtotal'] = $this->input->post('cantidad') * $detalle->precio;
    if($this->Controlador_model->update(array('id' => $this->input->post('detalle')), $data, 'notaingresodetalle')) {
      $venta['montototal'] = $ventas->montototal - $detalle->subtotal + ($this->input->post('cantidad') * $detalle->precio);
      $this->Controlador_model->update(array('id' => $detalle->notaingreso), $venta, $this->controlador);
      echo json_encode(array("status" => TRUE));
    }
  }

  private function _validatprocesar() {
    $data = array();
    $data['error_string'] = array();
    $data['inputerror'] = array();
    $data['status'] = TRUE;

    $contador = $this->Controlador_model->contador($this->notaingreso);

    if($contador == 0) {
      $data['inputerror'][] = 'totales';
      $data['error_string'][] = 'Debe agregar productos para poder procesar.';
      $data['status'] = FALSE;
    }

    if($data['status'] === FALSE) {
      echo json_encode($data);
      exit();
    }
  }

  public function ajax_addprocesar() {
    $this->_validatprocesar();
    $notaingreso = $this->Controlador_model->get($this->notaingreso, 'notaingreso');
    $productos = $this->Controlador_model->getDetalle($this->notaingreso, 'notaingresodetalle');
    foreach ($productos as $value) {
      $cantidad = $this->Controlador_model->getStock($value->producto);
      $producto = $this->Controlador_model->get($value->producto, 'producto');
      $movimiento['empresa'] = $this->empresa;
      $movimiento['usuario'] = $this->usuario;
      $movimiento['notaingreso'] = $this->notaingreso;
      $movimiento['tipo'] = 'ENTRADA';
      $movimiento['producto'] = $value->producto;
      $movimiento['cantidad'] = $value->cantidad;
      $movimiento['stockanterior'] = $cantidad ? $cantidad->cantidad : 0;
      $movimiento['stockactual'] = ($cantidad ? $cantidad->cantidad : 0) + $value->cantidad;
      $movimiento['costopromedio'] = $cantidad ? $cantidad->costopromedio : $producto->preciocompra;
      $movimiento['created'] = date('Y-m-d');
      $this->Controlador_model->save('movimiento', $movimiento);
      if($cantidad) {
        $stock['cantidad'] = $cantidad->cantidad + $value->cantidad;
        $this->db->where('id', $cantidad->id)->update('stock', $stock);
      } else {
        $stock['producto'] = $value->producto;
        $stock['empresa'] = $this->empresa;
        $stock['cantidad'] = $value->cantidad;
        $stock['costopromedio'] = $producto->preciocompra;
        $this->Controlador_model->save('stock', $stock);
      }
    }
    $data['created'] = date('Y-m-d');
    $data['estado'] = '1';
    if($this->db->where('id', $this->notaingreso)->update($this->controlador, $data)) {
      echo json_encode(array("status" => TRUE));
    }
  }

  public function excel() {
    $metodo = $this->input->post('metodo1') == null ? $this->input->post('metodo2') : $this->input->post('metodo1');
    $tipo = $this->input->post('tipo1') == null ? $this->input->post('tipo2') : $this->input->post('tipo1');
    $estado = $this->input->post('estado1') == null ? $this->input->post('estado2') : $this->input->post('estado1');
    $fecha = $this->input->post('fecha');
    $mes = $this->input->post('mes');
    $usuario = $this->input->post('usuario');
    $ano = date('Y');
    if($fecha) {
      $pedidos = $this->Controlador_model->generarpedidoD($metodo, $tipo, $estado, $fecha, $usuario);
    } else if($mes) {
      $pedidos = $this->Controlador_model->generarpedidoM($metodo, $tipo, $estado, $mes, $ano, $usuario);
    }
    // Propiedades del archivo excel
    $this->phpexcel->getProperties()->setTitle("Lista de Utilidad")->setDescription("Lista de Compra");
    // Setiar la solapa que queda actia al abrir el excel
    $this->phpexcel->setActiveSheetIndex(0);
    // Solapa excel para trabajar con PHP
    $sheet = $this->phpexcel->getActiveSheet();
    $sheet->setTitle("Lista de Compra");
    $sheet->getColumnDimension('A')->setAutoSize(true);
    $sheet->getColumnDimension('B')->setAutoSize(true);
    $sheet->getColumnDimension('C')->setAutoSize(true);
    $sheet->getColumnDimension('D')->setAutoSize(true);
    $sheet->getColumnDimension('E')->setAutoSize(true);
    $sheet->getColumnDimension('F')->setAutoSize(true);
    $sheet->getColumnDimension('G')->setAutoSize(true);
    $sheet->getColumnDimension('H')->setAutoSize(true);
    $sheet->getColumnDimension('I')->setAutoSize(true);
    $sheet->getColumnDimension('J')->setAutoSize(true);
    $style_header = array('borders' => array('allborders' => array('style' => PHPExcel_Style_Border::BORDER_THIN)), 'fill' => array('type' => PHPExcel_Style_Fill::FILL_SOLID,'color' => array('rgb'=>'E1E0F7')));
    $style = array('alignment' => array('horizontal' => PHPExcel_Style_Alignment::HORIZONTAL_CENTER));
    $sheet->getStyle('A1:J1')->applyFromArray($style_header);
    $sheet->getStyle("A1:J1")->applyFromArray($style);
    $sheet->setCellValue('A1', 'NRO');
    $sheet->setCellValue('B1', 'COMPRA');
    $sheet->setCellValue('C1', 'TIPO');
    $sheet->setCellValue('D1', 'MOVIMIENTO');
    $sheet->setCellValue('E1', 'PROVEEDOR');
    $sheet->setCellValue('F1', 'FECHA');
    $sheet->setCellValue('G1', 'ESTADO');
    $sheet->setCellValue('H1', 'MONTO');
    $sheet->setCellValue('I1', 'IGV');
    $sheet->setCellValue('J1', 'TOTAL');
    $i = 1;
    foreach ($pedidos as $value) {
      $cliente = $this->Controlador_model->get($value->proveedor, 'proveedor');
      $igvtotal = $value->montototal * ($value->igv / 100);
      $subtotal = $value->montototal - $igvtotal;
      $i++;
      $sheet->setCellValue('A'.$i, $i - 1);
      $sheet->setCellValue('B'.$i, $value->serie.'-'.$value->numero);
      $sheet->setCellValue('C'.$i, $value->tipocompra);
      $sheet->setCellValue('D'.$i, $value->movimiento);
      $sheet->setCellValue('E'.$i, isset($cliente->nombre) ? $cliente->nombre : '');
      $sheet->setCellValue('F'.$i, $value->created);
      if($value->estado == '0') { $estado = "Pendiente"; }
      if($value->estado == '1') { $estado = "Cancelado"; }
      $sheet->setCellValue('G'.$i, $estado);
      $sheet->setCellValue('H'.$i, $subtotal);
      $sheet->setCellValue('I'.$i, $igvtotal);
      $sheet->setCellValue('J'.$i, $value->montototal);
    }
    // Salida
    header("Content-Type: application/vnd.ms-excel");
    $nombreArchivo = 'compras_'.date('YmdHis');
    header("Content-Disposition: attachment; filename=\"$nombreArchivo.xls\"");
    header("Cache-Control: max-age=0");
    // Genera Excel
    $writer = PHPExcel_IOFactory::createWriter($this->phpexcel, "Excel5");
    // Escribir
    $writer->save('php://output');
    exit;
  }

}
