How can I occupy a form request in pivot tables to validate, since these pivot tables do not have a controller or model.
I have a controller which is responsible for making the attach to the pivot table and also to insert the extra columns.
I have a form request for that controller, but it only works with the fields in the table associated with the controller.
Form Request:
<?php namespace SIA\Http\Requests;
use SIA\Http\Requests\Request;
class VentaRequest extends Request {
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'msocod_id' => 'required',
'mclcod_id' => 'required',
'msucod_id' => 'required',
'tvtcod_id' => 'required',
'mdccod_id' => 'required',
'vtfedc' => 'date_format:d-m-Y|required',
'vtnfecn' => 'date_format:d-m-Y|required',
'concod_id' => 'required',
];
}
}
Controller method store:
public function store(VentaRequest $request)
{
try{
//Obtener el Codigo de documento
$doc = $request->mdccod_id;
//Rescatar codigo de impuesto
$mim = M_DCVT::Docu($doc);
$mim = $mim->mimpcd_id;
//Rescatar clave de contabilización de documento
$clave = M_DCVT::Docu($doc);
$clave = $clave->mdccvc;
//Rescatar sociedad
$soci = $request->msocod_id;
//Rescatar codigo de impuesto (C1)
$codim = M_IMPT::Codigo($doc);
$codim = $codim->mimpcd;
//Rescatar cuenta contable de impuesto
$ccim = M_IMPT::Iva($soci, $codim);
$ccim = $ccim->mpccct;
//Rescatar clave de contabilizacion de impuesto
$cvc = M_IMPT::Iva($soci, $codim);
$cvc = $cvc->mimcvc;
// id del cliente
$ccli = $request->mclcod_id;
//Obtener el codigo del cliente
$mclie = M_CLIE::CodigoCli($ccli);
$mclie = $mclie->mclcod;
//Buscar la clave de contabilizacion del cliente
$clien = M_CLIE::Clave($soci, $mclie);
$clien = $clien->mclvcc;
$clien2 = M_CLIE::Clave($soci, $mclie);
$clien2 = $clien2->mpccct;
$mone = M_SOCI::Moneda($soci);
$mone = $mone->moncod_id;
//Obtener fecha y guardsarlas en la base de datos
$fecha = Carbon::createFromFormat('d-m-Y', $request->vtfedc)->Format('Y-m-d');
$fechac = Carbon::createFromFormat('d-m-Y', $request->vtnfecn)->Format('Y-m-d');
//tipo cliente para cuenta de ingresos
$tpcl = M_CLIE::TipoCli($soci, $mclie);
//Rescatar el arreglo de ids de los materiales
$material = $request->input('mmscod_id',[]);
//Rescatar codigo grupo imputacion material
$impmate = M_MTSV::Imputacion($material, $soci);
//Variable para rescatar cuenta ingreso de la tabla dt_ctin
$dcingre = [];
//Rescate de la cuenta de ingreso
$dcingre = DT_CTIN::CodImpMat($material,$soci,$tpcl,$impmate);
//dd($dcingre);
//Capturar cantidad de cada producto en un arreglo
$cant = $request->input('vtcanp',[]);
//Capturar precio de cada producto en un arreglo
$prec = $request->input('vtprep',[]);
$attach = [];
foreach ($material as $k=>$id){
$attach[$id] = [];
// Agregar el arreglo quantity en la variable attach segun su relacion con el id del producto
if(array_key_exists($k, $cant)){
$attach[$id]['vtcanp'] = $cant[$k];
}
// Agregar el arreglo price en la variable attach segun su relacion con el id del producto
if(array_key_exists($k, $prec)){
$attach[$id]['vtprep'] = $prec[$k];
}
//Campo de numero rescatado de la base de datos desde otra funcion. El numero es un campo asociado al producto, el cual
// se ingresa automaticamente y es asociado a un solo producto en particular
if(array_key_exists($k, $dcingre)){
$attach[$id]['vtccin'] = $dcingre[$k];
}
//Ids de los productos
if(empty($attach[$id])){
$attach[$id] = $id;
}
}
$pedido = PV_VTA::create([
'msocod_id' => $request->msocod_id,
'tvtcod_id' => $request->tvtcod_id,
'stpvcd_id' => 1
]);
$documento = VT_DOC::create([
'msocod_id' =>$request->msocod_id,
'vtndoc' =>$request->vtndoc,
'mclcod_id' =>$request->mclcod_id,
'msucod_id' =>$request->msucod_id,
'tvtcod_id' =>$request->tvtcod_id,
'mdccod_id' =>$request->mdccod_id,
'moncod_id' =>$mone,
'pvnped'=>$pedido->pvnped,
'vtfedc' =>$fecha,
'vtnfecn' =>$fechac,
'concod_id' =>$request->concod_id,
'vtpjds' =>$request->vtpjds,
'mimpcd_id' => $mim,
'mdccvc' =>$clave,
'vtccim' =>$ccim,
'mimcvc' =>$cvc,
'mclvcc' =>$clien,
'vtpcon' =>$request->mes,
'vtacon' =>$request->anno,
'vtcccli'=>$clien2
]);
} catch(\Illuminate\Database\QueryException $e){
$tt = $e->errorInfo[1];
if ($e instanceof\PDOException) {
switch ($tt) {
case 1452:
Session::flash('message', 'Error ');
return Redirect::to('/venta/create');
break;
}
}
}
$documento->m_mtsv()->attach($attach);
Session::flash('message', 'Documento creado correctamente');
return Redirect::to('/venta');
}
Sale Model:
<?php namespace SIA;
use Illuminate\Database\Eloquent\Model;
use DB;
class VT_DOC extends Model {
protected $table = 'vt_doc';
protected $primaryKey='vtnrin';
public $timestamps=false;
protected $fillable = [columnas,columnas,etc.];
public function m_mtsv(){
return $this->belongsToMany('SIA\M_MTSV',
'mmtsv_vtdoc','vtnrin','mmscod_id','mmsnam','vtcanp','vtprep','vtccin')- >withPivot('mmscod_id','vtcanp','vtprep');
}
}
Pivot table migration
<?php
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateM_mtsvVt_docPivotTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('m_mtsv_vt_doc', function (Blueprint $table) {
$table->integer('mmscod_id')->unsigned()->index();
$table->foreign('mmscod_id')->references('id')->on('m_mtsv')- >onDelete('cascade');
$table->integer('vtnrin')->unsigned()->index();
$table->foreign('vtnrin')->references('vtnrin')->on('vt_doc')->onDelete('cascade');
$table->decimal('vtcanp',8,0)->unsigned();
$table->double('vtprep',10,2)->unsigned();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::drop('m_mtsv_vt_doc');
}
}
view code
<h2> Documento venta Prueba</h2> <br/>
<div class="panel panel-default">
<div class="panel-body">
<div class="row">
<div class="col-md-1">
<div class="form-group">
<label for="sociedad" class="control-label">Sociedad</label>
<input type="hidden" name="hidden" id="hidden">
<input type="hidden" name="mes" id="mes">
<input type="hidden" name="anno" id="anno">
</div>
</div>
<div class="col-md-4">
<div class="form-group">
{!!Form::select('msocod_id',['' => '- Seleccione una sociedad -'] +$soci,null, ['class' => 'form-control','id'=>'msocod_id', 'name'=>'msocod_id'])!!}
</div>
</div>
<div class="col-md-2">
<div class="form-group">
</div>
</div>
<div class="col-md-2">
<div class="form-group">
<label for="fecha" class="control-label">Nº Documento</label>
</div>
</div>
<div class="col-md-3">
<div class="form-group">
{!!Form::text('vtndoc', null,['class'=>'form-control', 'placeholder'=>'ingrese num'])!!}
</div>
</div>
</div>
<div class="row">
<div class="col-md-1">
<div class="form-group">
<label for="socio" class="control-label">Cliente</label>
</div>
</div>
<div class="col-md-4">
<div class="form-group">
{!!Form::select('mclcod_id',['' => '- Seleccione un cliente -'] +$cli,null, ['class' => 'form-control'])!!}
</div>
</div>
</div>
<div class="row">
<div class="col-md-1">
<div class="form-group">
<label for="colonia" class="control-label">Sucursal</label>
</div>
</div>
<div class="col-md-4">
<div class="form-group" id="sucu">
{!!Form::select('msucod_id',['' => '- Seleccione una sucursal -'] +$sucu,null, ['class' => 'form-control'])!!}
</div>
</div>
</div>
<div class="row">
<div class="col-md-1">
<div class="form-group">
<label for="tipo" class="control-label">Tipo venta</label>
</div>
</div>
<div class="col-md-4">
<div class="form-group">
{!!Form::select('tvtcod_id',['' => '- Seleccione una sucursal -'] +$tventa,null, ['class' => 'form-control'])!!}
</div>
</div>
</div>
<div class="row">
<div class="col-md-1">
<div class="form-group">
<label for="tipo" class="control-label">Clase Docto</label>
</div>
</div>
<div class="col-md-4">
<div class="form-group">
{!!Form::select('mdccod_id',['' => '- Seleccione una clase -'] +$doc,null, ['class' => 'form-control', 'id'=> 'mdccod_id', 'name'=>'mdccod_id'])!!}
</div>
</div>
<div class="col-md-3">
<div class="form-group">
</div>
</div>
<div class="col-md-1">
<div class="form-group">
</div>
</div>
<div class="col-md-3">
<div class="form-group">
</div>
</div>
</div>
<div class="row">
<div class="col-md-1">
<div class="form-group">
<label for="tipo" class="control-label">Fecha Docto</label>
</div>
</div>
<div class="col-md-3" width="20%">
<div class="form-group">
<!--{!!Form::date('vtfedc', null,['class'=>'form-control'])!!} -->
{!!Form::text('vtfedc', null, ['class'=>'form-control', 'id' => 'vtfedc','name'=>'vtfedc' ,'placeholder'=>'dd-mm-aaaa','data-error'=> 'Please enter name field.'])!!}
</div>
</div>
<div class="col-md-1">
<div class="form-group">
<label for="tipo" class="control-label">Fecha Docto</label>
</div>
</div>
<div class="col-md-3">
<div class="form-group">
<!--{!!Form::date('vtnfecn', null,['class'=>'form-control'])!!}-->
{!!Form::text('vtnfecn', null, ['class'=>'form-control', 'id' => 'vtnfecn','name'=>'vtnfecn', 'placeholder'=>'dd-mm-aaaa'])!!}
</div>
</div>
<!--
<div class="col-md-1">
<div class="form-group">
</div>
</div>
-->
<div class="col-md-1">
<div class="form-group">
</div>
</div>
<div class="col-md-3">
<div class="form-group">
</div>
</div>
</div>
<div class="row">
<div class="col-md-1">
<div class="form-group">
<label for="tipo" class="control-label">Condición pago</label>
</div>
</div>
<div class="col-md-3">
<div class="form-group">
{!!Form::select('concod_id',['' => '- Seleccione una condicion -'] +$condi,null, ['class' => 'form-control'])!!}
</div>
</div>
<div class="col-md-4">
<div class="form-group">
</div>
</div>
<div class="col-md-1">
<div class="form-group">
<label for="fecha" class="control-label">% Descuento</label>
</div>
</div>
<div class="col-md-3">
<div class="form-group">
{!!Form::text('vtpjds', null,['class'=>'form-control', 'placeholder'=>'ingrese num', 'id' => 'vtpjds', 'name' => 'vtpjds'])!!}
</div>
</div>
</div>
<hr>
<div class="row">
<div class="col-md-12" id="columna">
<table class="table table-hover table-condensed responsive" id="tabla">
<thead>
<tr><th></th>
<th>Codigo Art./servicios</th>
<th>Descricpión Art./servicios</th>
<th>Cantidad</th>
<th>Precio</th>
<th>Valor neto</th>
</tr>
</thead>
<tbody id="tbo">
<tr id="tr_1">
<td width="4%" class="text-center"><a id="eliminarLinea" ><i class="fa fa-minus-circle"></i></a>
</td>
<td width="23%">
{!!Form::select('mmscod_id[]',['' => '- Seleccione un material -'] +$mat,null, ['class' => 'form-control', 'id'=>'mmscod_id'])!!}
</td>
<td width="20%">
{!!Form::text('descripcion',null, ['class' =>'form-control','id'=>'descripcion' ,'disabled'=>'disabled'])!!}
</td>
<td width="17%">
<input type="text" class="form-control" id="cantidad" name="vtcanp[]"/>
</td>
<td width="17%">
<input type="text" class="form-control" id="precio" name="vtprep[]"/>
</td>
<td width="22%">
{!!Form::text('condes', null,['class'=>'form-control', 'id'=>'valorn', 'name'=>'valorn', 'disabled'=>'disabled'])!!}
</td>
</tr>
</tbody>
</table>
<a class="btn btn-primary" id="addRow"><i class="entypo-plus"></i>Agregar linea</a>
</div>
</div>
<hr>
<div class="row">
<div class="col-md-12">
<table class="table table-hover table-condensed" id="tabla">
<thead>
<tr>
<th>Total neto</th>
<th>Valor descuento</th>
<th>Monto neto</th>
<th>IVA</th>
<th>Monto total</th>
</tr>
</thead>
<tbody>
<tr id="tr1">
<td width="20%"><input type="text" class="form-control total" id="total" name="total"></td>
<td width="25%"><input type="text" class="form-control" id="vadesc" name="vadesc" onkeyup="articulo(this);" ></td>
<td width="20%"><input type="text" class="form-control" id="neto" name="neto" ></td>
<td width="20%"><input type="text" class="form-control" id="iva" name="iva" value="" ></td>
<td width="20%"><input type="text" class="form-control" id="montotal" name="montotal" onkeyup="importe(this);" ></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="row">
<div class="col-md-9"></div>
<div class="col-md-3">
<button type="submit" class="btn btn-success btn-lg btn-block btn-icon">Generar / Guardar<i class="entypo-check"></i></button>
</div>
</div>
</div>
</div>
</div>
</div>
<br />
</div>
</div>