<?php

namespace App\Modules\Libros_electronicos\Models;

use Illuminate\Database\Eloquent\Model;
use DB;
use App\Modules\Catalogo\Models\Plan_cuenta;
use App\Modules\Catalogo\Models\Tipdoc;
use App\Modules\Libros_electronicos\Models\Compra;
class Compras_linea extends Model
{
    public $timestamps = false;
    protected $table = 'compras_lineas';
 	protected $guarded = [];
	protected $fillable = [];
	protected $table_cuentas = 'compras_cuentas';

	//consulta relacionada para traer lineas de una compra
     public function relation_shop(){
		$show = $this::where('compra_id',$this->compras_id)->get();
		$compra = Compra::find($this->compras_id)->status;
		$cuentas_contables = DB::table($this->table_cuentas)->where('compra_id',$this->compras_id)->get();
		$results = array('lineas'=>$show,'status'=>$compra,'cuentas'=>$cuentas_contables,'totales'=>$this->calculated_lines());
		return $results;
    }
    //funcion para obtener los calculos de las lineas
    public function calculated_lines(){
    	//variables para calculos necesarios
		$igv = $this::where('igvpercent','!=','0')->where('compra_id',$this->compras_id)->sum('igv_val'); 
		$descuento = $this::where('descuento_percent','!=','0')->where('compra_id',$this->compras_id)->sum('descuento_valor');
		$compra =  $this::where('compra_id',$this->compras_id)->get();
		$anticipo = 0;
		$percepcion = 0;
		$afecto = 0;
		$inafecto = 0;
		$impuestos = 0;
		foreach ($compra as $c) {
			$plan = Plan_cuenta::find($c->plan_cuentas_id);
			if (!empty($plan)) {
				if (substr($plan->codigo,0,3) == '422' OR substr($plan->codigo,0,3) == '122') {
					$anticipo = (!empty($c->compras_id_relacional)) ? $c->precio : 0;
				}
				if ($plan->codigo == '4011301') {
					$percepcion = $c->precio;
				}
			}
			if ($c->afecto == 'on') {
				$afecto += (!empty($c->compras_id_relacional)) ? 0 : $c->precio;
			}else{
				$inafecto += (!empty($c->compras_id_relacional)) ? 0 : $c->precio;
			}
			if ($c->dhber == 'debe') {
				$impuestos += $c->igv_val; 
			}else if ($c->dhber == 'haber') {
				$impuestos -= $c->igv_val; 
			}
		}
	
		
		$compra_v = $inafecto+$afecto;
		$vcompra = abs($compra_v-$anticipo)-$descuento; 
		$subtotal = $vcompra+$impuestos;
		$total = ($percepcion > 0) ?  $percepcion + $subtotal : $subtotal;
		//array con los calculos  para las  lineas  finales 
		$data = array(
			'inafecto'=>$inafecto,
			'afecto'=>$afecto,
			'anticipo'=>$anticipo,
			'descuento'=>$descuento,
			'vcompra'=>$vcompra,
			'impuesto'=>$impuestos,
			'subtotal'=>$subtotal,
			'percepcion'=>$percepcion,
			'total'=>$total
		);
		return $data;
    }
    public function save_linea(){
        DB::table($this->table)->insert(['codigo' => $this->codigo, 'concepto' => $this->concepto,'cantidad'=>$this->cantidad,'um'=>$this->um,'precio'=>$this->precio,'cuenta'=>$this->cuenta,'dolares'=>$this->dolares,'debe'=>$this->debe,'haber'=>$this->haber,'compra_id'=>$this->compras_id]);
    }
    public function compras(){
		return $this->belongsto('App\Modules\Libros_electronicos\Models\Compra');
	}
	public function tipdocs(){
		return $this->belongsto('App\Modules\Catalogo\Models\Tipdoc');
	}
	public function plan_cuentas(){
		return $this->belongsto('App\Modules\Catalogo\Models\Plan_cuenta');
	}
	public function ccostos(){
		return $this->belongsto('App\Modules\Catalogo\Models\Ccosto');
	}
}
