<?php

class Producto_model extends CI_Model
{

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

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

	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 delete_by_id($id, $tabla)
	{
		$this->db->where('id', $id);
		return $this->db->delete($tabla);
	}

	public function codigos($tipo, $categoria)
	{
		$this->db->select_max('numero');
		$this->db->where('tipo', $tipo);
		$this->db->where('categoria', $categoria);
		return $this->db->get('producto')->row();
	}

	public function codigocategoria()
	{
		return $this->db->select_max('numero')->where('empresa', $this->empresa)->get('productocategoria')->row();
	}

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

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

	public function desactivar_by_id($id, $tabla)
	{
		$data['estado'] = '1';
		return $this->db->where('id', $id)->update($tabla, $data);
	}

	public function activar_by_id($id, $tabla)
	{
		$data['estado'] = '0';
		return $this->db->where('id', $id)->update($tabla, $data);
	}

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

	function getFamilia($categoria)
	{
		return $this->db->where("categoria", $categoria)->get("producto")->result();
	}

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

	function getDup($combo, $producto)
	{
		return $this->db->where('producto', $combo)->where('item_id', $producto)->get('combo')->row();
	}

	public function autocompletar($q)
	{
		$this->db->like('nombre', $q);
		$this->db->where('tipo', '0');
		$query = $this->db->get('producto');
		if ($query->num_rows() > 0) {
			foreach ($query->result() as $row) {
				$categoria = $this->get($row->categoria, 'productocategoria');
				$row_set[] = array(
					'label' => $row->codigo . ' | ' . $row->nombre . ' ' . ($row->categoria ? $categoria->nombre : ''),
					'producto' => $row->id,
				);
			}
			echo json_encode($row_set);
		}
	}

	public function check($id, $nombre)
	{
		if ($id) {
			$this->db->where('id <>', $id);
		}
		$this->db->where('nombre', $nombre);
		$query = $this->db->get('producto');
		return $query->result();
	}

	public function productoTop($year)
	{
		$this->db->select('vd.producto, sum(vd.cantidad) AS totalcantidad');
		$this->db->from('ventadetalle vd');
		$this->db->join('venta v', 'v.id = vd.venta');
		$this->db->where('MONTH(v.created)', $year);
		$this->db->order_by('totalcantidad', 'desc');
		$this->db->group_by('vd.producto');
		$this->db->limit(5);
		return $this->db->get()->result();
	}

	public function contador($tabla)
	{
		return $this->db->from($tabla)->count_all_results();
	}

	function consolidar($finicio, $factual, $empresa)
	{
		$data = array("producto", "SUM(cantidad) as numero");
		$this->db->select($data);
		$this->db->where('v.estado', '1');
		$this->db->where("v.created BETWEEN '" . $finicio . "' AND '" . $factual . "'");
		$this->db->where('v.empresa', $empresa);
		$this->db->from('ventadetalle vd');
		$this->db->join('venta v', 'v.id = vd.venta');
		$this->db->group_by('producto');
		$this->db->having("vd.producto > 1", null, false);
		$query = $this->db->get();
		return $query->result();
	}

	function vendido($finicio, $factual, $empresa)
	{
		$data = array("vd.producto", "SUM(vd.cantidad) as suma");
		$this->db->select($data);
		$this->db->where('v.estado', '1');
		$this->db->where("v.created BETWEEN '" . $finicio . "' AND '" . $factual . "'");
		//$this->db->where('v.empresa', $empresa);
		$this->db->from('ventadetalle vd');
		$this->db->join('venta v', 'v.id = vd.venta');
		$this->db->group_by('vd.producto');
		$this->db->order_by("suma", "desc");
		$query = $this->db->get();
		return $query->result();
	}

	function vendidototal($finicio, $factual, $empresa)
	{
		$data = array("SUM(vd.cantidad) as numero");
		$this->db->select($data);
		$this->db->where('v.estado', '1');
		$this->db->where("v.created BETWEEN '" . $finicio . "' AND '" . $factual . "'");
		$this->db->where('v.empresa', $empresa);
		$this->db->from('ventadetalle vd');
		$this->db->join('venta v', 'v.id = vd.venta');
		$query = $this->db->get();
		return $query->row();
	}

	function primerMov($producto, $fechainicio, $fechafinal, $empresa)
	{
		//$fechas = date("Y-m-d", strtotime($fecha));
		$this->db->where('producto', $producto);
		//$this->db->where('created', $fechas);
		$this->db->where("created BETWEEN '" . $fechainicio . "'  AND  '" . $fechafinal . "'");
		$this->db->where('empresa', $empresa);
		$query = $this->db->get('movimiento');
		return $query->first_row();
	}

	function SumMovi($producto, $fechainicio, $fechafinal, $empresa)
	{
		//$fechas = date("Y-m-d", strtotime($fecha));
		$this->db->select_sum('cantidad');
		$this->db->where('tipo', 'ENTRADA');
		$this->db->where('producto', $producto);
		$this->db->where("created BETWEEN '" . $fechainicio . "'  AND  '" . $fechafinal . "'");
		$this->db->where('empresa', $empresa);
		$query = $this->db->get('movimiento');
		return $query->row();
	}

	public function valorizado($empresa)
	{
		return $this->db->where('empresa', $empresa)->where('cantidad >', '0')->get('stock')->result();
	}

	public function codigo_nota($tabla, $empresa)
	{
		return $this->db->select_max('correlativo')->where('empresa', $empresa)->get($tabla)->row();
	}
}
