Lo que hicimos la vez pasada
This commit is contained in:
parent
bb122c5e39
commit
f6fa4f9523
|
@ -17,6 +17,12 @@ class GrupoDeCompra extends Model
|
||||||
protected $table = 'grupos_de_compra';
|
protected $table = 'grupos_de_compra';
|
||||||
protected $hidden = ['password'];
|
protected $hidden = ['password'];
|
||||||
|
|
||||||
|
// devuelve una colección con los productos que este grupo de compra puede comprar
|
||||||
|
public function productos()
|
||||||
|
{
|
||||||
|
return $this->belongsToMany('App\Producto');
|
||||||
|
}
|
||||||
|
|
||||||
public function subpedidos() {
|
public function subpedidos() {
|
||||||
return $this->hasMany('App\Subpedido');
|
return $this->hasMany('App\Subpedido');
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,14 +16,12 @@ class SubpedidoResource extends JsonResource
|
||||||
{
|
{
|
||||||
return [
|
return [
|
||||||
'id' => $this->id,
|
'id' => $this->id,
|
||||||
'nombre' => $this->nombre,
|
|
||||||
'subtotal_productos' => number_format($this->totalSinBDT(),0),
|
|
||||||
'subtotal_bonos' => number_format($this->getSubtotalBonos(),0),
|
|
||||||
'bonos_de_transporte' => $this->cantidadBDT(),
|
|
||||||
'subtotal_bonos_de_transporte' => number_format($this->getSubtotalBDT(),0),
|
|
||||||
'total' => number_format($this->getTotal(),0),
|
|
||||||
'grupo_de_compra' => $this->grupoDeCompra,
|
'grupo_de_compra' => $this->grupoDeCompra,
|
||||||
|
'nombre' => $this->nombre,
|
||||||
'productos' => $this->productos,
|
'productos' => $this->productos,
|
||||||
|
'cantidad_bonos_de_transporte' => $this->cantidadBDT(),
|
||||||
|
'subtotal_bonos_de_transporte' => number_format($this->subtotalBDT(),0),
|
||||||
|
'total' => number_format($this->getTotal(),0),
|
||||||
'aprobado' => (bool) $this->aprobado
|
'aprobado' => (bool) $this->aprobado
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,25 +13,47 @@ class Subpedido extends Model
|
||||||
public $timestamps = false;
|
public $timestamps = false;
|
||||||
protected $fillable = ['grupo_de_compra_id', 'aprobado', 'nombre'];
|
protected $fillable = ['grupo_de_compra_id', 'aprobado', 'nombre'];
|
||||||
|
|
||||||
|
public function grupoDeCompra()
|
||||||
|
{
|
||||||
|
return $this->belongsTo('App\GrupoDeCompra');
|
||||||
|
}
|
||||||
|
|
||||||
public function productos()
|
public function productos()
|
||||||
{
|
{
|
||||||
return $this->belongsToMany('App\Producto')->withPivot(["cantidad","total"]);
|
return $this->belongsToMany('App\Producto')->withPivot(["cantidad","total"]);
|
||||||
}
|
}
|
||||||
|
|
||||||
//Bonos del MPS, Sororo, etc. NO devuelve bonos de transporte
|
private function subtotalSinBDT()
|
||||||
private function bonos()
|
|
||||||
{
|
{
|
||||||
return $this->productos()->where('bono',1);
|
return $this->productos()->sum('total');
|
||||||
}
|
}
|
||||||
|
|
||||||
public function productosSinBonos()
|
private function productosQuePaganBDT()
|
||||||
{
|
{
|
||||||
return $this->productos()->where('bono',false);
|
return $this->productos()->where('paga_bono_de_transporte', true);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function grupoDeCompra()
|
//Subtotal de dinero de productos del pedido, sin bonos ni transporte
|
||||||
|
private function subtotalProductosQuePaganBDT()
|
||||||
{
|
{
|
||||||
return $this->belongsTo('App\GrupoDeCompra');
|
return $this->productosQuePaganBDT()->sum('total');
|
||||||
|
}
|
||||||
|
|
||||||
|
//Cantidad de bonos de transporte
|
||||||
|
public function cantidadBDT()
|
||||||
|
{
|
||||||
|
return ceil($this->subtotalProductosQuePaganBDT() / 500);
|
||||||
|
}
|
||||||
|
|
||||||
|
//Subtotal de dinero de bonos de transporte
|
||||||
|
public function subtotalBDT()
|
||||||
|
{
|
||||||
|
return $this->cantidadBDT() * 15;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getTotal()
|
||||||
|
{
|
||||||
|
return $this->subtotalSinBDT() + $this->subtotalBDT();
|
||||||
}
|
}
|
||||||
|
|
||||||
//Permite que se apliquen los filtros al hacer una request (por ejemplo, de búsqueda)
|
//Permite que se apliquen los filtros al hacer una request (por ejemplo, de búsqueda)
|
||||||
|
@ -40,35 +62,6 @@ class Subpedido extends Model
|
||||||
return $filtros->aplicar($query);
|
return $filtros->aplicar($query);
|
||||||
}
|
}
|
||||||
|
|
||||||
//Subtotal de dinero de productos del pedido, sin bonos ni transporte
|
|
||||||
public function totalSinBDT()
|
|
||||||
{
|
|
||||||
return $this->productosSinBonos()->sum('total');
|
|
||||||
}
|
|
||||||
|
|
||||||
//Cantidad de bonos de transporte
|
|
||||||
public function cantidadBDT()
|
|
||||||
{
|
|
||||||
return ceil($this->totalSinBDT() / 500);
|
|
||||||
}
|
|
||||||
|
|
||||||
//Subtotal de dinero de bonos de transporte
|
|
||||||
public function getSubtotalBDT()
|
|
||||||
{
|
|
||||||
return $this->cantidadBDT() * 15;
|
|
||||||
}
|
|
||||||
|
|
||||||
//Subtotal de dinero de bonos (MPS, Sororo, etc)
|
|
||||||
public function getSubtotalBonos()
|
|
||||||
{
|
|
||||||
return $this->bonos()->sum('total');
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getTotal()
|
|
||||||
{
|
|
||||||
return $this->totalSinBDT() + $this->getSubtotalBDT() + $this->getSubtotalBonos();
|
|
||||||
}
|
|
||||||
|
|
||||||
//Actualiza el pedido, agregando o quitando del subpedido según sea necesario. Debe ser llamado desde el controlador de subpedidos, luego de validar que los parámetros $producto y $cantidad son correctos. También calcula el subtotal por producto.
|
//Actualiza el pedido, agregando o quitando del subpedido según sea necesario. Debe ser llamado desde el controlador de subpedidos, luego de validar que los parámetros $producto y $cantidad son correctos. También calcula el subtotal por producto.
|
||||||
public function syncProducto(Producto $producto, Int $cantidad) {
|
public function syncProducto(Producto $producto, Int $cantidad) {
|
||||||
if ($cantidad){
|
if ($cantidad){
|
||||||
|
|
|
@ -42,4 +42,10 @@ class User extends Authenticatable
|
||||||
{
|
{
|
||||||
return $this->belongsTo('App\GrupoDeCompra');
|
return $this->belongsTo('App\GrupoDeCompra');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// devuelve una colección con los productos que este usario puede editar
|
||||||
|
public function productosGestionados()
|
||||||
|
{
|
||||||
|
return $this->belongsToMany('App\Producto');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,50 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
use Illuminate\Database\Migrations\Migration;
|
||||||
|
use Illuminate\Database\Schema\Blueprint;
|
||||||
|
use Illuminate\Support\Facades\Schema;
|
||||||
|
|
||||||
|
class Productos extends Migration
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Run the migrations.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function up()
|
||||||
|
{
|
||||||
|
Schema::table('productos', function (Blueprint $table) {
|
||||||
|
$table->boolean('paga_bono_de_transporte')->after('bono')->default(true);
|
||||||
|
});
|
||||||
|
|
||||||
|
Schema::create('grupo_de_compra_producto', function (Blueprint $table) {
|
||||||
|
$table->id();
|
||||||
|
$table->foreignId('grupo_de_compra_id');
|
||||||
|
$table->foreignId('producto_id');
|
||||||
|
$table->timestamps();
|
||||||
|
});
|
||||||
|
|
||||||
|
Schema::create('producto_user', function (Blueprint $table) {
|
||||||
|
$table->id();
|
||||||
|
$table->foreignId('user_id');
|
||||||
|
$table->foreignId('producto_id');
|
||||||
|
$table->timestamps();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reverse the migrations.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function down()
|
||||||
|
{
|
||||||
|
Schema::table('productos', function (Blueprint $table) {
|
||||||
|
$table->dropColumn('paga_bono_de_transporte');
|
||||||
|
});
|
||||||
|
|
||||||
|
Schema::dropIfExists('producto_user');
|
||||||
|
|
||||||
|
Schema::dropIfExists('grupo_de_compra_producto');
|
||||||
|
}
|
||||||
|
}
|
|
@ -61,7 +61,8 @@ class ImportarProductoSeeder extends Seeder
|
||||||
'nombre' => trim(str_replace('*', ' ',$registro['Producto'])),
|
'nombre' => trim(str_replace('*', ' ',$registro['Producto'])),
|
||||||
'precio' => $registro['Precio'],
|
'precio' => $registro['Precio'],
|
||||||
'proveedor_id' => $this->obtenerProveedor($registro['Producto']),
|
'proveedor_id' => $this->obtenerProveedor($registro['Producto']),
|
||||||
'bono' => ($categoria == 'TRANSPORTE, BONOS Y FINANCIAMIENTO SORORO')
|
'bono' => ($categoria == 'TRANSPORTE, BONOS Y FINANCIAMIENTO SORORO'),
|
||||||
|
'paga_bono_de_transporte' => !($categoria == 'TRANSPORTE, BONOS Y FINANCIAMIENTO SORORO' || $categoria == 'PRODUCTOS DE GESTIÓN MENSTRUAL')
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,40 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
use Illuminate\Database\Seeder;
|
|
||||||
use League\Csv\Reader;
|
|
||||||
use App\Proveedor;
|
|
||||||
|
|
||||||
class ProductoSeeder extends Seeder
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* Run the database seeds.
|
|
||||||
*
|
|
||||||
* @return void
|
|
||||||
*/
|
|
||||||
public function run()
|
|
||||||
{
|
|
||||||
$csv = Reader::createFromPath(resource_path('csv/productos.csv'), 'r');
|
|
||||||
$csv->setDelimiter("|");
|
|
||||||
$csv->setEnclosure("'");
|
|
||||||
$csv->setHeaderOffset(0);
|
|
||||||
$registros = $csv->getRecords();
|
|
||||||
$toInsert = [];
|
|
||||||
|
|
||||||
foreach($registros as $registro){
|
|
||||||
$toInsert[] = [
|
|
||||||
'categoria' => $registro['categoria'],
|
|
||||||
'nombre' => $registro['producto'],
|
|
||||||
'precio' => $registro['precio'],
|
|
||||||
'proveedor_id' => isset($registro['proveedor']) ? Proveedor::firstOrCreate([
|
|
||||||
'nombre' => $registro['proveedor']
|
|
||||||
])->id : null,
|
|
||||||
'bono' => $registro['categoria'] == 'BONOS Y FINANCIAMIENTO SORORO'
|
|
||||||
];
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach (array_chunk($toInsert,DatabaseSeeder::CHUNK_SIZE) as $chunk)
|
|
||||||
{
|
|
||||||
DB::table('productos')->insert($chunk);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -2809,11 +2809,6 @@ __webpack_require__.r(__webpack_exports__);
|
||||||
//
|
//
|
||||||
//
|
//
|
||||||
//
|
//
|
||||||
//
|
|
||||||
//
|
|
||||||
//
|
|
||||||
//
|
|
||||||
//
|
|
||||||
|
|
||||||
/* harmony default export */ __webpack_exports__["default"] = ({
|
/* harmony default export */ __webpack_exports__["default"] = ({
|
||||||
name: "PedidosAdminTablaBonos",
|
name: "PedidosAdminTablaBonos",
|
||||||
|
@ -2838,16 +2833,6 @@ __webpack_require__.r(__webpack_exports__);
|
||||||
return p.aprobado;
|
return p.aprobado;
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
bonosDeTransporteAprobados: function bonosDeTransporteAprobados() {
|
|
||||||
var bonosTransportePorPedido = this.pedidosAprobados.map(function (p) {
|
|
||||||
return p.bonos_de_transporte;
|
|
||||||
});
|
|
||||||
var cant = 0;
|
|
||||||
bonosTransportePorPedido.forEach(function (bt) {
|
|
||||||
return cant += bt;
|
|
||||||
});
|
|
||||||
return cant;
|
|
||||||
},
|
|
||||||
bonosCantidadesTotales: function bonosCantidadesTotales() {
|
bonosCantidadesTotales: function bonosCantidadesTotales() {
|
||||||
var nombres = [];
|
var nombres = [];
|
||||||
var cantidades = [];
|
var cantidades = [];
|
||||||
|
@ -5152,7 +5137,9 @@ var render = function () {
|
||||||
_c("tr", [
|
_c("tr", [
|
||||||
_vm._m(1),
|
_vm._m(1),
|
||||||
_vm._v(" "),
|
_vm._v(" "),
|
||||||
_c("th", [_vm._v(_vm._s(this.subpedido.bonos_de_transporte))]),
|
_c("th", [
|
||||||
|
_vm._v(_vm._s(this.subpedido.cantidad_bonos_de_transporte)),
|
||||||
|
]),
|
||||||
_vm._v(" "),
|
_vm._v(" "),
|
||||||
_c("th", [
|
_c("th", [
|
||||||
_vm._v(_vm._s(this.subpedido.subtotal_bonos_de_transporte)),
|
_vm._v(_vm._s(this.subpedido.subtotal_bonos_de_transporte)),
|
||||||
|
@ -5987,82 +5974,34 @@ var render = function () {
|
||||||
var _h = _vm.$createElement
|
var _h = _vm.$createElement
|
||||||
var _c = _vm._self._c || _h
|
var _c = _vm._self._c || _h
|
||||||
return _c("div", { staticClass: "block" }, [
|
return _c("div", { staticClass: "block" }, [
|
||||||
_c(
|
!_vm.hayBonos
|
||||||
"div",
|
? _c("div", { staticClass: "block" }, [
|
||||||
{
|
|
||||||
directives: [
|
|
||||||
{
|
|
||||||
name: "show",
|
|
||||||
rawName: "v-show",
|
|
||||||
value: !_vm.hayBonos,
|
|
||||||
expression: "!hayBonos",
|
|
||||||
},
|
|
||||||
],
|
|
||||||
staticClass: "block",
|
|
||||||
},
|
|
||||||
[
|
|
||||||
_c("p", { staticClass: "has-text-centered" }, [
|
_c("p", { staticClass: "has-text-centered" }, [
|
||||||
_vm._v("\n Todavía no hay bonos pedidos.\n "),
|
_vm._v("\n Todavía no hay bonos pedidos.\n "),
|
||||||
]),
|
]),
|
||||||
]
|
])
|
||||||
),
|
: _vm._e(),
|
||||||
_vm._v(" "),
|
_vm._v(" "),
|
||||||
_c("div", { staticClass: "block" }, [
|
_c("div", { staticClass: "block" }, [
|
||||||
_c(
|
_vm.hayBonos
|
||||||
|
? _c(
|
||||||
"table",
|
"table",
|
||||||
{ staticClass: "table is-fullwidth is-striped is-bordered" },
|
{ staticClass: "table is-fullwidth is-striped is-bordered" },
|
||||||
[
|
[
|
||||||
_vm._m(0),
|
_vm._m(0),
|
||||||
_vm._v(" "),
|
_vm._v(" "),
|
||||||
_c("tfoot", [
|
_c("tfoot", [
|
||||||
_c(
|
_c("tr", [
|
||||||
"tr",
|
|
||||||
{
|
|
||||||
directives: [
|
|
||||||
{
|
|
||||||
name: "show",
|
|
||||||
rawName: "v-show",
|
|
||||||
value: _vm.hayBonos,
|
|
||||||
expression: "hayBonos",
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
[
|
|
||||||
_c("th"),
|
_c("th"),
|
||||||
_vm._v(" "),
|
_vm._v(" "),
|
||||||
_c("th", [_vm._v("Total bonos")]),
|
_c("th", [_vm._v("Total bonos")]),
|
||||||
_vm._v(" "),
|
_vm._v(" "),
|
||||||
_c("th", [_vm._v("$ " + _vm._s(_vm.totalBonos))]),
|
_c("th", [_vm._v("$ " + _vm._s(_vm.totalBonos))]),
|
||||||
]
|
|
||||||
),
|
|
||||||
_vm._v(" "),
|
|
||||||
_c("tr", [
|
|
||||||
_c("td", [_vm._v(" Bonos de Transporte ")]),
|
|
||||||
_vm._v(" "),
|
|
||||||
_c("td", [
|
|
||||||
_vm._v(" " + _vm._s(_vm.bonosDeTransporteAprobados) + " "),
|
|
||||||
]),
|
|
||||||
_vm._v(" "),
|
|
||||||
_c("td", [
|
|
||||||
_vm._v(
|
|
||||||
" $ " + _vm._s(_vm.bonosDeTransporteAprobados * 15) + " "
|
|
||||||
),
|
|
||||||
]),
|
|
||||||
]),
|
]),
|
||||||
]),
|
]),
|
||||||
_vm._v(" "),
|
_vm._v(" "),
|
||||||
_c(
|
_c(
|
||||||
"tbody",
|
"tbody",
|
||||||
{
|
|
||||||
directives: [
|
|
||||||
{
|
|
||||||
name: "show",
|
|
||||||
rawName: "v-show",
|
|
||||||
value: _vm.hayBonos,
|
|
||||||
expression: "hayBonos",
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
_vm._l(_vm.bonosCantidadesTotales, function (bono, i) {
|
_vm._l(_vm.bonosCantidadesTotales, function (bono, i) {
|
||||||
return _c("pedidos-admin-fila-bono", {
|
return _c("pedidos-admin-fila-bono", {
|
||||||
key: i,
|
key: i,
|
||||||
|
@ -6076,7 +6015,8 @@ var render = function () {
|
||||||
1
|
1
|
||||||
),
|
),
|
||||||
]
|
]
|
||||||
),
|
)
|
||||||
|
: _vm._e(),
|
||||||
]),
|
]),
|
||||||
])
|
])
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,6 @@
|
||||||
barrio|region|referente|telefono|correo
|
barrio|region|referente|telefono|correo
|
||||||
ENTREVERO|SUR|||
|
ENTREVERO|SUR|||
|
||||||
TRES CRUCES|SUR|||
|
TRES CRUCES|SUR|||
|
||||||
|
PANADERIA VIDAL|SUR|||
|
||||||
|
UNION|NORTE|||
|
||||||
PRUEBA|SIN REGION|||
|
PRUEBA|SIN REGION|||
|
|
|
@ -13,7 +13,7 @@
|
||||||
<tfoot>
|
<tfoot>
|
||||||
<tr>
|
<tr>
|
||||||
<th><abbr title="Bonos de Transporte">B. Transporte</abbr></th>
|
<th><abbr title="Bonos de Transporte">B. Transporte</abbr></th>
|
||||||
<th>{{ this.subpedido.bonos_de_transporte }}</th>
|
<th>{{ this.subpedido.cantidad_bonos_de_transporte }}</th>
|
||||||
<th>{{ this.subpedido.subtotal_bonos_de_transporte }}</th>
|
<th>{{ this.subpedido.subtotal_bonos_de_transporte }}</th>
|
||||||
<th></th>
|
<th></th>
|
||||||
<th></th>
|
<th></th>
|
||||||
|
|
|
@ -1,12 +1,12 @@
|
||||||
<template>
|
<template>
|
||||||
<div class="block">
|
<div class="block">
|
||||||
<div class="block" v-show="!hayBonos">
|
<div class="block" v-if="!hayBonos">
|
||||||
<p class="has-text-centered">
|
<p class="has-text-centered">
|
||||||
Todavía no hay bonos pedidos.
|
Todavía no hay bonos pedidos.
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="block">
|
<div class="block">
|
||||||
<table class="table is-fullwidth is-striped is-bordered">
|
<table class="table is-fullwidth is-striped is-bordered" v-if="hayBonos">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th><abbr title="Bono">Bono</abbr></th>
|
<th><abbr title="Bono">Bono</abbr></th>
|
||||||
|
@ -15,18 +15,13 @@
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tfoot>
|
<tfoot>
|
||||||
<tr v-show="hayBonos">
|
<tr>
|
||||||
<th></th>
|
<th></th>
|
||||||
<th>Total bonos</th>
|
<th>Total bonos</th>
|
||||||
<th>$ {{ totalBonos }}</th>
|
<th>$ {{ totalBonos }}</th>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
|
||||||
<td> Bonos de Transporte </td>
|
|
||||||
<td> {{ bonosDeTransporteAprobados }} </td>
|
|
||||||
<td> $ {{ bonosDeTransporteAprobados * 15 }} </td>
|
|
||||||
</tr>
|
|
||||||
</tfoot>
|
</tfoot>
|
||||||
<tbody v-show="hayBonos">
|
<tbody>
|
||||||
<pedidos-admin-fila-bono v-for="(bono, i) in bonosCantidadesTotales" :key="i"
|
<pedidos-admin-fila-bono v-for="(bono, i) in bonosCantidadesTotales" :key="i"
|
||||||
:nombre="bono.nombre"
|
:nombre="bono.nombre"
|
||||||
:cantidad="bono.cantidad"
|
:cantidad="bono.cantidad"
|
||||||
|
@ -61,12 +56,6 @@ export default {
|
||||||
pedidosAprobados: function() {
|
pedidosAprobados: function() {
|
||||||
return this.pedidos.filter(p => p.aprobado);
|
return this.pedidos.filter(p => p.aprobado);
|
||||||
},
|
},
|
||||||
bonosDeTransporteAprobados: function() {
|
|
||||||
let bonosTransportePorPedido = this.pedidosAprobados.map(p => p.bonos_de_transporte);
|
|
||||||
let cant = 0;
|
|
||||||
bonosTransportePorPedido.forEach(bt => cant += bt);
|
|
||||||
return cant
|
|
||||||
},
|
|
||||||
bonosCantidadesTotales: function() {
|
bonosCantidadesTotales: function() {
|
||||||
let nombres = [];
|
let nombres = [];
|
||||||
let cantidades = [];
|
let cantidades = [];
|
||||||
|
|
Loading…
Reference in New Issue