<?php

class Inicio_model extends CI_Model
{
	public function getAll($tabla)
	{
		return $this->db->get($tabla)->result();
	}

	public function getProductosMasVendidos()
	{
		$query = 'select sum(v.cantidad) as cantidad, p.* from ventadetalle v right join producto p on p.id = v.producto group by p.nombre order by cantidad desc';
		return $this->db->query($query)->result();
	}

	function getCodigoBarra($data)
	{
		return $this->db->where('codigoBarra', $data)->get('producto')->row();
	}

	function getCategoria($categoria)
	{
		return $this->db->where('id', $categoria)->get('productocategoria')->row();
	}

	public function getVariante($producto)
	{
		return $this->db->where('producto', $producto)->get('productovariante');
	}

	public function autocompletar($q)
	{
		$this->db->like('nombre', $q);
		$this->db->or_like('apellido', $q);
		$this->db->or_like('documento', $q);
		$query = $this->db->get('cliente');
		if ($query->num_rows() > 0) {
			foreach ($query->result() as $row) {
				$row_set[] = array(
					'label' => $row->documento . ' | ' . $row->nombre . ' ' . $row->apellido,
					'cliente' => $row->id,
				);
			}
		} else {
			$row_set[] = array('label' => 'EL CLIENTE NO ESTA REGISTRADO', 'cliente' => '');
		}
		echo json_encode($row_set);
	}

	public function autocompletarrapido($q)
	{
		$this->db->like('nombre', $q);
		$this->db->or_like('apellido', $q);
		$this->db->or_like('documento', $q);
		$query = $this->db->get('cliente');
		if ($query->num_rows() > 0) {
			foreach ($query->result() as $row) {
				$row_set[] = array(
					'label' => $row->documento . ' | ' . $row->nombre . ' ' . $row->apellido,
					'clienterapido' => $row->id,
				);
			}
		} else {
			$row_set[] = array('label' => 'EL CLIENTE NO ESTA REGISTRADO', 'cliente' => '');
		}
		echo json_encode($row_set);
	}

	public function autocompletarcodigobarra($q)
	{
		$this->db->like('codigoBarra', $q);

		$query = $this->db->get('producto');

		if ($query->num_rows() > 0) {
			foreach ($query->result() as $row) {
				$verificarStock = $this->db->where('producto', $row->id)->where('cantidad >', 0)->get('stock')->row();

				if ($verificarStock) {
					$row_set[] = array(
						'label' => $row->codigoBarra,
						'idproducto' => $row->id,
						'idcategoria' => $row->categoria,
						'precioproducto' => $row->precioventa,
						'status' => TRUE
					);
				} else {
					$row_set[] = array(
						'label' => 'El CB: ' . $row->codigoBarra . ', esta sin stock',
						'idproducto' => '',
						'idcategoria' => '',
						'precioproducto' => '',
						'status' => FALSE
					);
				}
			}
		} else {
			$row_set[] = array(
				'label' => 'SIN RESULTADOS',
				'status' => FALSE
			);
		}

		echo json_encode($row_set);
	}

	public function get($id, $tabla)
	{
		return $this->db->where('id', $id)->get($tabla)->row();
	}

	public function eliminar($id, $tabla)
	{
		return $this->db->where('id', $id)->delete($tabla);
	}

	public function numeroventa($registro, $mesa)
	{
		$this->db->where('registro', $registro);
		$this->db->from('venta');
		return $this->db->count_all_results();
	}

	public function getVD($venta)
	{
		return $this->db->where('venta', $venta)->get('ventadetalle')->result();
	}

	public function ultimo($tabla)
	{
		return $this->db->get($tabla)->last_row();
	}

	public function pedidodetalle($venta)
	{
		return $this->db->where('venta', $venta)->get('ventadetalle')->result();
	}

	public function pedidodetalleselect($venta, $select)
	{
		// return $this->db->where('venta', $venta)->where_in('id', $select)->select('producto,sum(cantidad) cantidad')->group_by('producto')->get('ventadetalle')->result();
		return $this->db->where('venta', $venta)->where_in('id', $select)->get('ventadetalle')->result();
	}

	public function check($documento)
	{
		return $this->db->where('documento', $documento)->get('cliente')->row();
	}

	public function modificarclienteventa($venta)
	{
		$data['cliente'] = $venta['cliente'];
		return $this->db->where('id', $venta['id'])->update('venta', $data);
	}

	public function queryCategoria($idcategoriaP)
	{
		return $this->db->where('id', $idcategoriaP)->where('estadoextras', '1')->get('productocategoria')->row();
	}

	public function getExtras($idcategoria)
	{
		return $this->db->where('categoria', $idcategoria)->where('estado', '0')->where('statusdelete', '0')->get('productomodificador');
	}

	public function getTotalVentas($idventa, $tabla)
	{
		return $this->db->where('venta', $idventa)->get($tabla)->num_rows();
	}

	public function comanda($venta)
	{
		// $this->db->select('DISTINCT(producto), nombre, opcion, precio, nombrevariante, variante');
		$this->db->where('venta', $venta);
		// $this->db->group_by('producto');
		$query = $this->db->get('ventadetalle');
		return $query->result();
	}

	public function comanda2($venta)
	{
		$this->db->select('DISTINCT(producto), nombre, opcion, precio, nombrevariante, variante');
		$this->db->where('venta', $venta);
		$this->db->group_by('producto');
		$query = $this->db->get('ventadetalle');
		return $query->result();
	}

	public function comandaselect($venta, $select)
	{
		// $this->db->select('producto, nombre, opcion, precio, nombrevariante, variante,cantidad');
		// $this->db->select('producto, sum(cantidad) cantidad');
		$this->db->where('venta', $venta);
		$this->db->where_in('id', $select);
		$query = $this->db->get('ventadetalle');
		return $query->result();
	}

	/* public function comandaselect($venta, $select)
	{
		$this->db->select('DISTINCT(producto), nombre, opcion, precio, nombrevariante, variante');
		$this->db->where('venta', $venta);
		$this->db->where_in('id', $select);
		$this->db->group_by('producto');
		$query = $this->db->get('ventadetalle');
		return $query->result();
	} */

	/* public function get-Comanda-Select($venta, $select)
	{
		return $this->db->where("venta", $venta)->where("estadocomanda", "1")->where_in('id', $select)->get("ventadetalle")->result();
	} */

	public function comanda_new($venta)
	{
		$this->db->select('producto, nombre, opcion, precio, nombrevariante, variante');
		$this->db->where('venta', $venta);
		$this->db->group_by('producto');
		$query = $this->db->get('ventadetalle');
		return $query->result();
	}

	public function sumacomanda($venta, $producto)
	{
		$this->db->select_sum('cantidad');
		$this->db->where('venta', $venta);
		$this->db->where('producto', $producto);
		$query = $this->db->get('ventadetalle');
		return $query->row();
	}

	// public function resumen-venta($caja)
	// {
	// 	$this->db->select('DISTINCT(vd.producto), vd.precio');
	// 	$this->db->from('ventadetalle vd');
	// 	$this->db->join('venta v', 'v.id = vd.venta');
	// 	$this->db->where('v.caja', $caja);
	// 	$this->db->group_by('vd.producto');
	// 	$query = $this->db->get();
	// 	return $query->result();
	// }

	public function resumenventa($id)
	{
		$this->db->select('vd.nombre producto, max(vd.precio) precio, sum(vd.cantidad) cantidad, sum(vd.cantidad)*max(vd.precio) subtotal');
		$this->db->from('ventadetalle vd');
		$this->db->join('venta v', 'v.id = vd.venta');
		$this->db->where('v.caja', $id);
		$this->db->where('v.estado', '1');
		$this->db->order_by('producto', 'asc')->group_by('vd.producto');
		$query = $this->db->get()->result();
		return $query;
	}

	public function sumaresumenventa($registro, $producto)
	{
		$this->db->select_sum('vd.cantidad');
		$this->db->from('ventadetalle vd');
		$this->db->join('venta v', 'v.id = vd.venta');
		$this->db->where('v.registro', $registro);
		$this->db->where('vd.producto', $producto);
		$query = $this->db->get();
		return $query->row();
	}

	public function codigos($id, $serie)
	{
		return $this->db->select_max('consecutivo')->where('serie', $serie)->where('tipoventa', $id)->get('venta')->row();
	}

	public function updateventa($venta)
	{
		$data['hash'] = $venta['hash'];
		return $this->db->where('id', $venta['id'])->update('venta', $data);
	}

	public function getStock($empresa, $producto)
	{  // ->where('empr.esa', $empr.esa)
		return $this->db->where('producto', $producto)->get('stock')->first_row();
	}

	public function getCode($code)
	{
		return $this->db->where('codigo', $code)->get('producto')->first_row();
	}

	public function getCaja($caja, $tabla)
	{
		return $this->db->where('caja', $caja)->get($tabla)->result();
	}

	public function apertura($id)
	{
		return $this->db->where('estado', '0')->where('usuario', $this->usuario)->get('caja')->row();
	}

	public function combo($id)
	{
		return $this->db->where('producto', $id)->get('combo')->result();
	}

	public function pedidopendiente($id, $caja)
	{
		return $this->db->where('estado', '0')->where('id', $id)->where('caja', $caja)->get('venta')->row();
	}

	public function holds($caja)
	{
		return $this->db->where('caja', $caja)->get('venta')->result();
	}

	public function contador($venta)
	{
		return $this->db->from('ventadetalle')->where('venta', $venta)->count_all_results();
	}

	public function pagos($venta)
	{
		return $this->db->where('venta', $venta)->get('ingreso')->result();
	}

	public function hold($caja)
	{
		return $this->db->where('caja', $caja)->get('venta')->last_row();
	}

	public function ventapendiente($caja)
	{
		return $this->db->where('estado', '0')->where('caja', $caja)->get('venta')->result();
	}

	public function pedidodetalleE($caja)
	{
		return $this->db->where('caja', $caja)->get('ventadetalle')->result();
	}

	public function pedidodetalleES($venta, $producto)
	{
		return $this->db->where('venta', $venta)->where('producto', $producto)->get('ventadetalle')->row();
	}

	public function pedidoVent($venta)
	{
		return $this->db->where('venta', $venta)->get('ventadetalle')->result();
	}

	public function sumagasto($caja, $categoria)
	{
		$this->db->select_sum('montototal');
		$this->db->where('caja', $caja);
		return $this->db->get('egreso')->row();
	}

	public function save($tabla, $data)
	{
		$this->db->insert($tabla, $data);
		return $this->db->insert_id();
	}

	public function getVentaDetalle($venta)
	{
		return $this->db->where('venta', $venta)->get('ventadetalle')->result();
	}

	public function update($where, $data, $tabla)
	{
		$this->db->update($tabla, $data, $where);
		return $this->db->affected_rows();
	}

	public function getComanda($venta)
	{
		return $this->db->where('venta', $venta)->where('estadocomanda', '1')->get('ventadetalle')->result();
	}

	public function delete_by_id($id, $tabla)
	{
		$this->db->where('id', $id);
		return $this->db->delete($tabla);
	}

	public function delete_by_venta($id, $tabla)
	{
		$this->db->where('venta', $id);
		return $this->db->delete($tabla);
	}

	public function get_by_id($id, $tabla)
	{
		$this->db->from($tabla);
		$this->db->where('id', $id);
		$query = $this->db->get();
		return $query->row();
	}

	public function getDetalle($id, $tabla)
	{
		return $this->db->where('venta', $id)->get($tabla)->result();
	}

	public function cajabierta($estado, $empresa)
	{
		return $this->db->where('empresa', $empresa)->where('estado', $estado)->get('caja')->last_row();
	}

	public function maximo($tabla, $empresa)
	{
		return $this->db->where('empresa', $empresa)->get($tabla)->last_row();
	}

	public function getmesa($venta)
	{
		$this->db->select('m.nombre as nombremesa, z.nombre as nombrezona');
		$this->db->from('mesa m');
		$this->db->join('venta v', 'v.mesa = m.id');
		$this->db->join('zona z', 'z.id = m.zona');
		$this->db->where('v.id', $venta);
		return $this->db->get()->row();
	}

	public function pedidotemporal($venta)
	{
		return $this->db->where('estado', '0')->where('venta', $venta)->get('ventatemporal')->result();
	}

	public function pedidotemporalE($venta)
	{
		return $this->db->where('venta', $venta)->get('ventatemporal')->result();
	}

	public function pedidotemporaldet($venta, $producto)
	{
		return $this->db->where('estado', '0')->where('venta', $venta)->where('producto', $producto)->get('ventatemporal')->row();
	}

	public function getMesas()
	{
		return $this->db->where('estado', '0')->get('mesa')->result();
	}

	public function getMesasEmpresa($empresa)
	{  // ->where('empr.esa', $empr.esa)
		return $this->db->where('estado', '0')->get('mesa')->result();
	}

	public function getMesasConZona()
	{
		$this->db->select('m.*, z.nombre as znombre, z.is_dynamic');
		$this->db->from('mesa m');
		$this->db->join('zona z', 'z.id = m.zona');
		$this->db->where('z.estado', '0');
		$this->db->order_by('z.posicion', 'asc');
		$this->db->order_by('m.nombre', 'asc');
		return $this->db->get()->result();
	}

	public function getZonasEmpresa($empresa)
	{  // ->where('empr.esa', $empr.esa)
		return $this->db->where('estado', '0')->order_by('posicion', 'asc')->get('zona')->result();
	}

	public function zonamesas($zona, $empresa)
	{  // ->where('empr.esa', $empr.esa)
		return $this->db->where('zona', $zona)->get('mesa')->result();
	}

	public function backup()
	{
		$this->load->dbutil();
		$prefs = array(
			'format' => 'zip',
			'filename' => 'my_db_backup.sql'
		);
		$backup = &$this->dbutil->backup($prefs);
		$db_name = 'backup-on-' . date('Y-m-d-H-i-s') . '.zip';
		$save = 'backup/' . $db_name;
		$this->load->helper('file');
		write_file($save, $backup);
	}

	public function resumengasto($caja)
	{
		return $this->db->where('caja', $caja)->get('egreso')->result();
	}

	public function ventaresumencantidad($caja, $producto)
	{
		$this->db->select_sum('cantidad');
		$this->db->from('ventadetalle vd');
		$this->db->join('venta v', 'v.id = vd.venta');
		$this->db->where('v.caja', $caja);
		$this->db->where('vd.producto', $producto);
		$query = $this->db->get();
		return $query->row();
	}

	public function ventaresumensubtotal($caja, $producto)
	{
		$this->db->select_sum('subtotal');
		$this->db->from('ventadetalle vd');
		$this->db->join('venta v', 'v.id = vd.venta');
		$this->db->where('v.caja', $caja);
		$this->db->where('vd.producto', $producto);
		$query = $this->db->get();
		return $query->row();
	}

	public function habilitar($id, $tabla)
	{
		$data['created'] = date('Y-m-d');
		return $this->db->where('id', $id)->update($tabla, $data);
	}

	public function getControl($id, $tabla)
	{
		return $this->db->where('caja', $id)->get($tabla)->result();
	}

	public function getAlertaStock()
	{
		$query = $this->db->query('select p.nombre, s.cantidad from stock s inner join producto p on p.id = s.producto where s.cantidad <= p.alertqt');
		return $query->result();
	}

	public function getModificador($producto)
	{
		return $this->db->where('categoria', $producto)->get('productomodificador')->result();
	}

	public function getStockProceso($producto)
	{
		return $this->db->where('producto', $producto)->get('stock')->row();
	}

	public function ProductoCombo($producto)
	{
		return $this->db->where('producto', $producto)->get('combo')->result();
	}

	public function UpdateVentaDetalle($venta)
	{
		return $this->db->where('venta', $venta)->update('ventadetalle', ['estadocomanda' => '0']);
	}

	public function ventadetalleDeuda($venta)
	{
		return $this->db->where('venta', $venta)->where('estadopago', '0')->get('ventadetalle')->result();
	}

	public function auto_cuentadividida($data)
	{
		$this->db->like('nombre', $data);
		$this->db->or_like('apellido', $data);
		$this->db->or_like('documento', $data);
		$query = $this->db->get('cliente');
		if ($query->num_rows() > 0) {
			foreach ($query->result() as $row) {
				$row_set[] = array(
					'label' => $row->documento . ' | ' . $row->nombre . ' ' . $row->apellido,
					'cliente' => $row->id,
					'textocliente' => $row->documento . ' | ' . $row->nombre . ' ' . $row->apellido,
				);
			}
		} else {
			$row_set[] = array(
				'label' => 'EL CLIENTE NO ESTA REGISTRADO',
				'cliente' => '',
				'textocliente' => 'EL CLIENTE NO ESTA REGISTRADO',
			);
		}
		echo json_encode($row_set);
	}

	public function productoventacaja($caja, $producto)
	{
		$this->db->where('v.estado', '1');
		$this->db->where('v.caja', $caja);
		$this->db->where('vd.producto', $producto);
		$this->db->join('ventadetalle vd', 'vd.venta=v.id');
		// $this->db->select('sum(vd.cantidad) cantidad');
		$this->db->select_sum('vd.cantidad');
		return $this->db->get('venta v')->row();
	}

	public function efectivoAnterior($empresa)
	{
		$monedero = $this->db->where('empresa', $empresa)->get('monedero')->last_row();
		return $monedero ? $monedero->montototal : 0;
	}
}
