forked from nathalie/pedi2
Merge pull request 'refactor/totales' (#41) from refactor/totales into master
Reviewed-on: nathalie/pedi2#41
This commit is contained in:
commit
7eb7dd04d7
14 changed files with 247 additions and 181 deletions
|
@ -2,6 +2,7 @@
|
||||||
|
|
||||||
namespace App;
|
namespace App;
|
||||||
|
|
||||||
|
use App\Helpers\TransporteHelper;
|
||||||
use Illuminate\Database\Eloquent\Model;
|
use Illuminate\Database\Eloquent\Model;
|
||||||
use Illuminate\Support\Facades\DB;
|
use Illuminate\Support\Facades\DB;
|
||||||
use League\Csv\CannotInsertRecord;
|
use League\Csv\CannotInsertRecord;
|
||||||
|
@ -16,6 +17,11 @@ class GrupoDeCompra extends Model
|
||||||
protected $table = 'grupos_de_compra';
|
protected $table = 'grupos_de_compra';
|
||||||
protected $hidden = ['password'];
|
protected $hidden = ['password'];
|
||||||
|
|
||||||
|
public function subpedidos()
|
||||||
|
{
|
||||||
|
return $this->hasMany('App\Subpedido');
|
||||||
|
}
|
||||||
|
|
||||||
public function toggleDevoluciones()
|
public function toggleDevoluciones()
|
||||||
{
|
{
|
||||||
$this->devoluciones_habilitadas = !$this->devoluciones_habilitadas;
|
$this->devoluciones_habilitadas = !$this->devoluciones_habilitadas;
|
||||||
|
@ -23,16 +29,73 @@ class GrupoDeCompra extends Model
|
||||||
return $this->devoluciones_habilitadas;
|
return $this->devoluciones_habilitadas;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function subpedidos()
|
|
||||||
{
|
|
||||||
return $this->hasMany('App\Subpedido');
|
|
||||||
}
|
|
||||||
|
|
||||||
public function pedidosAprobados()
|
public function pedidosAprobados()
|
||||||
{
|
{
|
||||||
return $this->subpedidos->where('aprobado', 1);
|
return $this->subpedidos->where('aprobado', 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function totalARecaudar()
|
||||||
|
{
|
||||||
|
$total = 0;
|
||||||
|
foreach ($this->pedidosAprobados() as $subpedido) {
|
||||||
|
$total = $total + $subpedido->total();
|
||||||
|
}
|
||||||
|
return $total;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function totalBarrial()
|
||||||
|
{
|
||||||
|
$total = 0;
|
||||||
|
foreach ($this->pedidosAprobados() as $subpedido) {
|
||||||
|
$total = $total + $subpedido->totalBarrial();
|
||||||
|
}
|
||||||
|
return $total;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function totalDevoluciones()
|
||||||
|
{
|
||||||
|
$total = 0;
|
||||||
|
foreach ($this->pedidosAprobados() as $subpedido) {
|
||||||
|
$total = $total + $subpedido->devoluciones_total;
|
||||||
|
}
|
||||||
|
return $total;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function totalATransferir()
|
||||||
|
{
|
||||||
|
return $this->totalCentralesQueNoPaganTransporte()
|
||||||
|
+ $this->totalCentralesQuePaganTransporte()
|
||||||
|
+ $this->totalTransporte();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function totalCentralesQueNoPaganTransporte()
|
||||||
|
{
|
||||||
|
$total = 0;
|
||||||
|
foreach ($this->pedidosAprobados() as $subpedido) {
|
||||||
|
$total = $total + $subpedido->totalCentralesQueNoPaganTransporte();
|
||||||
|
}
|
||||||
|
return $total;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function totalCentralesQuePaganTransporte()
|
||||||
|
{
|
||||||
|
$total = 0;
|
||||||
|
foreach ($this->pedidosAprobados() as $subpedido) {
|
||||||
|
$total = $total + $subpedido->totalCentralesQuePaganTransporte();
|
||||||
|
}
|
||||||
|
return $total;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function totalTransporte()
|
||||||
|
{
|
||||||
|
return TransporteHelper::totalTransporte($this->totalCentralesQuePaganTransporte());
|
||||||
|
}
|
||||||
|
|
||||||
|
public function cantidadTransporte()
|
||||||
|
{
|
||||||
|
return TransporteHelper::cantidadTransporte($this->totalCentralesQuePaganTransporte());
|
||||||
|
}
|
||||||
|
|
||||||
public function exportarPlanillasAPdf()
|
public function exportarPlanillasAPdf()
|
||||||
{
|
{
|
||||||
$subpedidos = $this->pedidosAprobados();
|
$subpedidos = $this->pedidosAprobados();
|
||||||
|
|
19
app/Helpers/TransporteHelper.php
Normal file
19
app/Helpers/TransporteHelper.php
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Helpers;
|
||||||
|
|
||||||
|
class TransporteHelper
|
||||||
|
{
|
||||||
|
const COSTO_TRANSPORTE = 15;
|
||||||
|
const MONTO_TRANSPORTE = 500;
|
||||||
|
|
||||||
|
public static function cantidadTransporte($monto)
|
||||||
|
{
|
||||||
|
return ceil($monto / self::MONTO_TRANSPORTE);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function totalTransporte($monto)
|
||||||
|
{
|
||||||
|
return self::cantidadTransporte($monto) * self::COSTO_TRANSPORTE;
|
||||||
|
}
|
||||||
|
}
|
19
app/Http/Controllers/Api/GrupoDeCompraController.php
Normal file
19
app/Http/Controllers/Api/GrupoDeCompraController.php
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Controllers\Api;
|
||||||
|
|
||||||
|
use App\GrupoDeCompra;
|
||||||
|
use App\Http\Controllers\Controller;
|
||||||
|
use App\Http\Resources\GrupoDeCompraResource;
|
||||||
|
|
||||||
|
class GrupoDeCompraController extends Controller
|
||||||
|
{
|
||||||
|
public function index()
|
||||||
|
{
|
||||||
|
return GrupoDeCompraResource::collection(GrupoDeCompra::all());
|
||||||
|
}
|
||||||
|
public function show(GrupoDeCompra $grupoDeCompra)
|
||||||
|
{
|
||||||
|
return new GrupoDeCompraResource($grupoDeCompra);
|
||||||
|
}
|
||||||
|
}
|
30
app/Http/Resources/GrupoDeCompraResource.php
Normal file
30
app/Http/Resources/GrupoDeCompraResource.php
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Resources;
|
||||||
|
|
||||||
|
use Illuminate\Http\Resources\Json\JsonResource;
|
||||||
|
|
||||||
|
class GrupoDeCompraResource extends JsonResource
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Transform the resource into an array.
|
||||||
|
*
|
||||||
|
* @param \Illuminate\Http\Request $request
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function toArray($request)
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
'id' => $this->id,
|
||||||
|
'nombre' => $this->nombre,
|
||||||
|
'devoluciones_habilitadas' => $this->devoluciones_habilitadas,
|
||||||
|
'pedidos' => SubpedidoResource::collection($this->subpedidos),
|
||||||
|
'total_a_recaudar' => number_format($this->totalARecaudar(),2),
|
||||||
|
'total_barrial' => number_format($this->totalBarrial(),2),
|
||||||
|
'total_devoluciones' => number_format($this->totalDevoluciones(),2),
|
||||||
|
'total_a_transferir' => number_format($this->totalATransferir(),2),
|
||||||
|
'total_transporte' => number_format($this->totalTransporte(),0),
|
||||||
|
'cantidad_transporte' => number_format($this->cantidadTransporte(),0),
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
|
@ -17,16 +17,14 @@ class SubpedidoResource extends JsonResource
|
||||||
return [
|
return [
|
||||||
'id' => $this->id,
|
'id' => $this->id,
|
||||||
'nombre' => $this->nombre,
|
'nombre' => $this->nombre,
|
||||||
'subtotal_productos' => number_format($this->totalSinBonos(),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),
|
|
||||||
'total_menos_devoluciones' => number_format($this->getTotalMenosDevoluciones(),0),
|
|
||||||
'grupo_de_compra' => $this->grupoDeCompra,
|
'grupo_de_compra' => $this->grupoDeCompra,
|
||||||
'productos' => $this->productos,
|
'productos' => $this->productos,
|
||||||
'aprobado' => (bool) $this->aprobado,
|
'aprobado' => (bool) $this->aprobado,
|
||||||
'devoluciones_total' => (double) $this->devoluciones_total,
|
'total' => number_format($this->total(),2),
|
||||||
|
'total_transporte' => number_format($this->totalTransporte(),0),
|
||||||
|
'cantidad_transporte' => number_format($this->cantidadTransporte(),0),
|
||||||
|
'total_sin_devoluciones' => number_format($this->totalSinDevoluciones(),2),
|
||||||
|
'devoluciones_total' => number_format($this->devoluciones_total,2),
|
||||||
'devoluciones_notas' => $this->devoluciones_notas
|
'devoluciones_notas' => $this->devoluciones_notas
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
namespace App;
|
namespace App;
|
||||||
|
|
||||||
use League\Csv\Reader;
|
use App\Helpers\TransporteHelper;
|
||||||
use Illuminate\Database\Eloquent\Model;
|
use Illuminate\Database\Eloquent\Model;
|
||||||
use Illuminate\Support\Facades\DB;
|
use Illuminate\Support\Facades\DB;
|
||||||
use Log;
|
use Log;
|
||||||
|
@ -10,6 +10,7 @@ use App\Filtros\FiltroDeSubpedido;
|
||||||
|
|
||||||
class Subpedido extends Model
|
class Subpedido extends Model
|
||||||
{
|
{
|
||||||
|
const COSTO_TRANSPORTE = 15;
|
||||||
public $timestamps = false;
|
public $timestamps = false;
|
||||||
protected $fillable = ['grupo_de_compra_id', 'aprobado', 'nombre', 'devoluciones_total', 'devoluciones_notas'];
|
protected $fillable = ['grupo_de_compra_id', 'aprobado', 'nombre', 'devoluciones_total', 'devoluciones_notas'];
|
||||||
|
|
||||||
|
@ -40,47 +41,65 @@ 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 total()
|
||||||
public function totalSinBonos()
|
|
||||||
{
|
{
|
||||||
return $this->productosSinBonos()->sum('total');
|
return $this->totalSinDevoluciones() - $this->devoluciones_total;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function totalParaTransporte() {
|
public function totalSinDevoluciones()
|
||||||
$total = 0;
|
|
||||||
foreach ($this->productos()->get() as $producto) {
|
|
||||||
if ($producto->pagaTransporte()) {
|
|
||||||
$total += $producto->precio * $producto->pivot->cantidad;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return ceil($total);
|
|
||||||
}
|
|
||||||
|
|
||||||
//Cantidad de bonos de transporte
|
|
||||||
public function cantidadBDT()
|
|
||||||
{
|
{
|
||||||
return ceil($this->totalParaTransporte() / 500);
|
return $this->totalBarrial() + $this->totalCentral();
|
||||||
}
|
}
|
||||||
|
|
||||||
//Subtotal de dinero de bonos de transporte
|
public function totalBarrial()
|
||||||
public function getSubtotalBDT()
|
|
||||||
{
|
{
|
||||||
return $this->cantidadBDT() * 15;
|
return DB::table('producto_subpedido')
|
||||||
|
->join('productos', 'producto_subpedido.producto_id', '=', 'productos.id')
|
||||||
|
->where('producto_subpedido.subpedido_id', $this->id)
|
||||||
|
->where('productos.nombre', 'like', '%barrial%')
|
||||||
|
->selectRaw('SUM(productos.precio * producto_subpedido.cantidad) as total')
|
||||||
|
->value('total');
|
||||||
}
|
}
|
||||||
|
|
||||||
//Subtotal de dinero de bonos (MPS, Sororo, etc)
|
public function totalCentral()
|
||||||
public function getSubtotalBonos()
|
|
||||||
{
|
{
|
||||||
return $this->bonos()->sum('total');
|
return $this->totalCentralesQueNoPaganTransporte() + $this->totalCentralesQuePaganTransporte() + $this->totalTransporte();
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getTotal()
|
public function totalCentralesQueNoPaganTransporte()
|
||||||
{
|
{
|
||||||
return $this->totalSinBonos() + $this->getSubtotalBDT() + $this->getSubtotalBonos();
|
return DB::table('producto_subpedido')
|
||||||
|
->join('productos', 'producto_subpedido.producto_id', '=', 'productos.id')
|
||||||
|
->where('producto_subpedido.subpedido_id', $this->id)
|
||||||
|
->where('productos.nombre', 'not like', '%barrial%')
|
||||||
|
->where(function ($query) {
|
||||||
|
$query->where('productos.categoria', 'like', '%SUBSIDIADO%')
|
||||||
|
->orWhere('productos.bono', true);
|
||||||
|
})
|
||||||
|
->selectRaw('SUM(productos.precio * producto_subpedido.cantidad) as total')
|
||||||
|
->value('total');
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getTotalMenosDevoluciones() {
|
public function totalCentralesQuePaganTransporte()
|
||||||
return $this->getTotal() - $this->getDevoluciones();
|
{
|
||||||
|
return DB::table('producto_subpedido')
|
||||||
|
->join('productos', 'producto_subpedido.producto_id', '=', 'productos.id')
|
||||||
|
->where('producto_subpedido.subpedido_id', $this->id)
|
||||||
|
->where('productos.nombre', 'not like', '%barrial%')
|
||||||
|
->where('productos.bono', false)
|
||||||
|
->where('productos.categoria', 'not like', '%SUBSIDIADO%')
|
||||||
|
->selectRaw('SUM(productos.precio * producto_subpedido.cantidad) as total')
|
||||||
|
->value('total');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function totalTransporte()
|
||||||
|
{
|
||||||
|
return TransporteHelper::totalTransporte($this->totalCentralesQuePaganTransporte());
|
||||||
|
}
|
||||||
|
|
||||||
|
public function cantidadTransporte()
|
||||||
|
{
|
||||||
|
return TransporteHelper::cantidadTransporte($this->totalCentralesQuePaganTransporte());
|
||||||
}
|
}
|
||||||
|
|
||||||
//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.
|
||||||
|
@ -110,13 +129,6 @@ class Subpedido extends Model
|
||||||
return $view->render();
|
return $view->render();
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getDevoluciones() {
|
|
||||||
return $this->devoluciones_total;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getNotasDevoluciones() {
|
|
||||||
return $this->devoluciones_notas;
|
|
||||||
}
|
|
||||||
public function syncDevoluciones(float $total, string $notas) {
|
public function syncDevoluciones(float $total, string $notas) {
|
||||||
$this->devoluciones_total = $total;
|
$this->devoluciones_total = $total;
|
||||||
$this->devoluciones_notas = $notas;
|
$this->devoluciones_notas = $notas;
|
||||||
|
|
|
@ -3,27 +3,18 @@
|
||||||
<comunes-tabs-secciones :tabs="tabs" :tabInicial="tabActiva"></comunes-tabs-secciones>
|
<comunes-tabs-secciones :tabs="tabs" :tabInicial="tabActiva"></comunes-tabs-secciones>
|
||||||
<div class="block" id="pedidos-seccion"
|
<div class="block" id="pedidos-seccion"
|
||||||
:class="seccionActiva === 'pedidos-seccion' ? 'is-active' : 'is-hidden'">
|
:class="seccionActiva === 'pedidos-seccion' ? 'is-active' : 'is-hidden'">
|
||||||
<div class="block pb-6" id="pedidos-tabla-y-dropdown" v-show="hayPedidos">
|
<div class="block pb-6" id="pedidos-tabla-y-dropdown" v-if="hayPedidos">
|
||||||
<admin-dropdown-descargar
|
<admin-dropdown-descargar
|
||||||
:gdc="gdc">
|
:gdc_id="gdc.id">
|
||||||
</admin-dropdown-descargar>
|
</admin-dropdown-descargar>
|
||||||
<admin-tabla-pedidos
|
<admin-tabla-pedidos
|
||||||
:pedidos="pedidos" :bonosDeTransporte="bonosDeTransporte" :totalBonosBarriales="totalBonosBarriales">
|
:gdc="this.gdc"
|
||||||
</admin-tabla-pedidos>
|
></admin-tabla-pedidos>
|
||||||
</div>
|
</div>
|
||||||
<p class="has-text-centered" v-show="!hayPedidos">
|
<p class="has-text-centered" v-else>
|
||||||
Todavía no hay ningún pedido para administrar.
|
Todavía no hay ningún pedido para administrar.
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="block pb-6" id="bonos-seccion"
|
|
||||||
:class="seccionActiva === 'bonos-seccion' ? 'is-active' : 'is-hidden'">
|
|
||||||
<admin-tabla-bonos v-show="hayAprobados"
|
|
||||||
:pedidos="pedidos">
|
|
||||||
</admin-tabla-bonos>
|
|
||||||
<p class="has-text-centered" v-show="!hayAprobados">
|
|
||||||
Todavía no hay pedidos aprobados.
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
<div class="block pb-6" id="caracteristicas-seccion"
|
<div class="block pb-6" id="caracteristicas-seccion"
|
||||||
:class="seccionActiva === 'caracteristicas-seccion' ? 'is-active' : 'is-hidden'">
|
:class="seccionActiva === 'caracteristicas-seccion' ? 'is-active' : 'is-hidden'">
|
||||||
<admin-caracteristicas-opcionales>
|
<admin-caracteristicas-opcionales>
|
||||||
|
@ -38,6 +29,7 @@ import TabsSecciones from "../comunes/TabsSecciones.vue";
|
||||||
import DropdownDescargar from "./DropdownDescargar.vue";
|
import DropdownDescargar from "./DropdownDescargar.vue";
|
||||||
import TablaPedidos from "./TablaPedidos.vue";
|
import TablaPedidos from "./TablaPedidos.vue";
|
||||||
import TablaBonos from "./TablaBonos.vue";
|
import TablaBonos from "./TablaBonos.vue";
|
||||||
|
import axios from "axios";
|
||||||
export default {
|
export default {
|
||||||
components: {
|
components: {
|
||||||
CaracteristicasOpcionales,
|
CaracteristicasOpcionales,
|
||||||
|
@ -48,12 +40,8 @@ export default {
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
gdc: 0,
|
gdc: undefined,
|
||||||
pedidos: [],
|
|
||||||
bonosDeTransporte: 0,
|
|
||||||
totalBonosBarriales: 0,
|
|
||||||
tabs: [{ id: "pedidos", nombre: "Pedidos" },
|
tabs: [{ id: "pedidos", nombre: "Pedidos" },
|
||||||
{ id: "bonos", nombre: "Bonos" },
|
|
||||||
{ id: "caracteristicas", nombre: "Caracteristicas opcionales" }],
|
{ id: "caracteristicas", nombre: "Caracteristicas opcionales" }],
|
||||||
tabActiva: "pedidos",
|
tabActiva: "pedidos",
|
||||||
seccionActiva: "pedidos-seccion",
|
seccionActiva: "pedidos-seccion",
|
||||||
|
@ -61,46 +49,32 @@ export default {
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
hayPedidos: function() {
|
hayPedidos: function() {
|
||||||
return this.pedidos.length !== 0
|
return this.gdc && this.gdc.pedidos.length !== 0
|
||||||
},
|
},
|
||||||
hayAprobados: function() {
|
hayAprobados: function() {
|
||||||
return this.pedidos.filter(p => p.aprobado).length > 0
|
return this.gdc && this.gdc.pedidos.filter(p => p.aprobado).length > 0
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
fetchPedidos() {
|
|
||||||
axios.get("/api/grupos-de-compra/"+this.gdc+"/bonos-de-transporte", {})
|
|
||||||
.then(response => this.bonosDeTransporte = response.data.bdt);
|
|
||||||
axios.get("/api/subpedidos/resources", {
|
|
||||||
params: {
|
|
||||||
grupo_de_compra: this.gdc
|
|
||||||
}})
|
|
||||||
.then(response => {
|
|
||||||
this.pedidos = response.data.data
|
|
||||||
}).get;
|
|
||||||
axios.get("/api/grupos-de-compra/"+this.gdc+"/bonos-barriales", {})
|
|
||||||
.then(response => this.totalBonosBarriales = response.data.bonos_barriales)
|
|
||||||
},
|
|
||||||
setSeccionActiva(tabId) {
|
setSeccionActiva(tabId) {
|
||||||
this.tabActiva = tabId;
|
this.tabActiva = tabId;
|
||||||
this.seccionActiva = tabId + "-seccion";
|
this.seccionActiva = tabId + "-seccion";
|
||||||
},
|
},
|
||||||
getBonosBarriales() {
|
actualizar() {
|
||||||
axios.get("/api/grupos-de-compra/"+this.gdc+"/bonos-barriales", {})
|
axios.get('/api/grupos-de-compra/' + this.$root.gdc)
|
||||||
.then(response => this.totalBonosBarriales = response.data.bonos_barriales)
|
.then(response => {
|
||||||
|
this.gdc = response.data.data;
|
||||||
|
console.log(this.gdc);
|
||||||
|
})
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
mounted() {
|
async mounted() {
|
||||||
Event.$on('sync-aprobacion', (_) => {
|
Event.$on('sync-aprobacion', (_) => {
|
||||||
this.fetchPedidos();
|
this.actualizar();
|
||||||
});
|
});
|
||||||
|
await new Promise(r => setTimeout(r, 1000));
|
||||||
axios.get("/admin/obtener_sesion").then(response => {
|
this.actualizar();
|
||||||
this.gdc = response.data.gdc;
|
},
|
||||||
this.fetchPedidos();
|
|
||||||
this.bonosBarriales = this.getBonosBarriales()
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|
|
@ -14,13 +14,13 @@
|
||||||
</div>
|
</div>
|
||||||
<div class="dropdown-menu" id="dropdown-menu" role="menu">
|
<div class="dropdown-menu" id="dropdown-menu" role="menu">
|
||||||
<div class="dropdown-content">
|
<div class="dropdown-content">
|
||||||
<a :href="'/admin/exportar-pedido-a-csv/' + gdc" class="dropdown-item has-background-primary">
|
<a :href="'/admin/exportar-pedido-a-csv/' + gdc_id" class="dropdown-item has-background-primary">
|
||||||
Planilla para central (CSV)
|
Planilla para central (CSV)
|
||||||
</a>
|
</a>
|
||||||
<a :href="'/admin/exportar-planillas-a-pdf/' + gdc" class="dropdown-item">
|
<a :href="'/admin/exportar-planillas-a-pdf/' + gdc_id" class="dropdown-item">
|
||||||
Planillas para armado (PDF)
|
Planillas para armado (PDF)
|
||||||
</a>
|
</a>
|
||||||
<a :href="'/admin/exportar-pedido-con-nucleos-a-csv/' + gdc" class="dropdown-item">
|
<a :href="'/admin/exportar-pedido-con-nucleos-a-csv/' + gdc_id" class="dropdown-item">
|
||||||
Planilla completa de la canasta (CSV)
|
Planilla completa de la canasta (CSV)
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
|
@ -32,7 +32,7 @@
|
||||||
<script>
|
<script>
|
||||||
export default {
|
export default {
|
||||||
props: {
|
props: {
|
||||||
gdc: {
|
gdc_id: {
|
||||||
type: Number,
|
type: Number,
|
||||||
required: true
|
required: true
|
||||||
},
|
},
|
||||||
|
|
|
@ -41,7 +41,7 @@ export default {
|
||||||
mounted() {
|
mounted() {
|
||||||
if (this.$root.gdc) {
|
if (this.$root.gdc) {
|
||||||
this.gdc = this.$root.gdc;
|
this.gdc = this.$root.gdc;
|
||||||
this.obtenerValor(this);
|
this.obtenerValor();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
<template>
|
<template>
|
||||||
<tr>
|
<tr>
|
||||||
<td>{{ pedido.nombre }}</td>
|
<td>{{ pedido.nombre }}</td>
|
||||||
<td v-if="$root.devoluciones" class="has-text-right" >{{ this.$limpiarInt(pedido.total) }}</td>
|
<td v-if="$root.devoluciones" class="has-text-right" >{{ pedido.total_sin_devoluciones }}</td>
|
||||||
<td v-if="$root.devoluciones" class="has-text-right" ><abbr :title="pedido.devoluciones_notas">-{{ pedido.devoluciones_total }}</abbr></td>
|
<td v-if="$root.devoluciones" class="has-text-right" ><abbr :title="pedido.devoluciones_notas">-{{ pedido.devoluciones_total }}</abbr></td>
|
||||||
<td class="has-text-right" >{{ $root.devoluciones ? pedido.total_menos_devoluciones : pedido.total }}</td>
|
<td class="has-text-right" >{{ $root.devoluciones ? pedido.total : pedido.total_sin_devoluciones }}</td>
|
||||||
<td>
|
<td>
|
||||||
<admin-switch-aprobacion
|
<admin-switch-aprobacion
|
||||||
:pedido="pedido">
|
:pedido="pedido">
|
||||||
|
|
|
@ -12,7 +12,7 @@
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
<admin-fila-pedido
|
<admin-fila-pedido
|
||||||
v-for="pedido in this.pedidos"
|
v-for="pedido in gdc.pedidos"
|
||||||
:pedido="pedido" :key="pedido.id">
|
:pedido="pedido" :key="pedido.id">
|
||||||
</admin-fila-pedido>
|
</admin-fila-pedido>
|
||||||
</tbody>
|
</tbody>
|
||||||
|
@ -23,23 +23,27 @@
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<th>Total a recaudar:</th>
|
<th>Total a recaudar:</th>
|
||||||
<td class="has-text-right">$ {{ totalARecaudar }}</td>
|
<td class="has-text-right">$ {{ gdc.total_a_recaudar }}</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<th>Total bonos barriales:</th>
|
<th>Total bonos barriales:</th>
|
||||||
<td class="has-text-right">$ {{ $parent.totalBonosBarriales }}</td>
|
<td class="has-text-right">$ {{ gdc.total_barrial }}</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr v-if="$root.devoluciones">
|
<tr v-if="$root.devoluciones">
|
||||||
<th>Total devoluciones:</th>
|
<th>Total devoluciones:</th>
|
||||||
<td class="has-text-right">- $ {{ totalDevoluciones() }}</td>
|
<td class="has-text-right">- $ {{ gdc.total_devoluciones }}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>Cantidad bonos de transporte:</th>
|
||||||
|
<td class="has-text-right">{{ gdc.cantidad_transporte }}</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<th>Total bonos de transporte:</th>
|
<th>Total bonos de transporte:</th>
|
||||||
<td class="has-text-right">$ {{ bonosDeTransporte * 15 }}</td>
|
<td class="has-text-right">$ {{ gdc.total_transporte }}</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<th>Total a depositar:</th>
|
<th>Total a depositar:</th>
|
||||||
<td class="has-text-right">$ {{ totalAprobadosConTransporteRecalculado() - totalBonosBarriales }}</td>
|
<td class="has-text-right">$ {{ gdc.total_a_transferir }}</td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
|
@ -52,60 +56,11 @@ export default {
|
||||||
FilaPedido
|
FilaPedido
|
||||||
},
|
},
|
||||||
props: {
|
props: {
|
||||||
pedidos: {
|
gdc: {
|
||||||
type: Array,
|
type: Object,
|
||||||
required: true
|
required: true
|
||||||
},
|
|
||||||
bonosDeTransporte: {
|
|
||||||
type: Number,
|
|
||||||
required: true
|
|
||||||
},
|
|
||||||
totalBonosBarriales: {
|
|
||||||
type: Number,
|
|
||||||
required: true
|
|
||||||
},
|
|
||||||
},
|
|
||||||
computed: {
|
|
||||||
totalARecaudar: function() {
|
|
||||||
return this.$root.devoluciones ? this.totalAprobadosMenosDevoluciones() : this.totalAprobados();
|
|
||||||
},
|
|
||||||
},
|
|
||||||
methods: {
|
|
||||||
totalDevoluciones() {
|
|
||||||
let suma = 0
|
|
||||||
let aprobados = this.pedidos.filter(p => p.aprobado);
|
|
||||||
for (let i = 0; i < aprobados.length; i++) {
|
|
||||||
suma += aprobados[i].devoluciones_total
|
|
||||||
}
|
}
|
||||||
return suma;
|
|
||||||
},
|
|
||||||
totalAprobados() {
|
|
||||||
let suma = 0
|
|
||||||
let aprobados = this.pedidos.filter(p => p.aprobado);
|
|
||||||
for (let i = 0; i < aprobados.length; i++) {
|
|
||||||
suma += this.$limpiarFloat(aprobados[i].total)
|
|
||||||
}
|
}
|
||||||
return suma;
|
|
||||||
},
|
|
||||||
totalAprobadosMenosDevoluciones() {
|
|
||||||
let suma = 0
|
|
||||||
let aprobados = this.pedidos.filter(p => p.aprobado);
|
|
||||||
for (let i = 0; i < aprobados.length; i++) {
|
|
||||||
suma += this.$limpiarFloat(aprobados[i].total_menos_devoluciones)
|
|
||||||
}
|
|
||||||
return suma;
|
|
||||||
},
|
|
||||||
totalAprobadosConTransporteRecalculado() {
|
|
||||||
let suma = 0
|
|
||||||
let aprobados = this.pedidos.filter(p => p.aprobado);
|
|
||||||
for (let i = 0; i < aprobados.length; i++) {
|
|
||||||
suma += this.$limpiarFloat(aprobados[i].total)
|
|
||||||
suma -= this.$limpiarFloat(aprobados[i].subtotal_bonos_de_transporte)
|
|
||||||
}
|
|
||||||
suma += parseInt(this.bonosDeTransporte)*15
|
|
||||||
return suma;
|
|
||||||
}
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|
|
@ -73,17 +73,17 @@
|
||||||
if (this.notas_devoluciones.length > 15) {
|
if (this.notas_devoluciones.length > 15) {
|
||||||
this.notas_devoluciones_abbr += "...";
|
this.notas_devoluciones_abbr += "...";
|
||||||
}
|
}
|
||||||
this.total = this.$limpiarInt(this.$root.devoluciones ? this.$root.pedido.total_menos_devoluciones : this.$root.pedido.total);
|
this.total = this.$root.pedido.total;
|
||||||
this.productos = this.$root.productos
|
this.productos = this.$root.productos;
|
||||||
},
|
},
|
||||||
modificarDevoluciones: function() {
|
modificarDevoluciones: function() {
|
||||||
Event.$emit("modificar-devoluciones");
|
Event.$emit("modificar-devoluciones");
|
||||||
},
|
},
|
||||||
cantidadBonosDeTransporte: function() {
|
cantidadBonosDeTransporte: function() {
|
||||||
return this.$limpiarInt(this.$root.pedido.subtotal_bonos_de_transporte) / 15
|
return this.$root.pedido.cantidad_transporte;
|
||||||
},
|
},
|
||||||
totalBonosDeTransporte: function() {
|
totalBonosDeTransporte: function() {
|
||||||
return this.$limpiarInt(this.$root.pedido.subtotal_bonos_de_transporte)
|
return this.$root.pedido.total_transporte
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
|
@ -38,7 +38,7 @@ export default {
|
||||||
Event.$emit("toggle-chismosa", this.activa);
|
Event.$emit("toggle-chismosa", this.activa);
|
||||||
},
|
},
|
||||||
actualizar() {
|
actualizar() {
|
||||||
this.total = this.$limpiarInt(this.$root.devoluciones ? this.$root.pedido.total_menos_devoluciones : this.$root.pedido.total);
|
this.total = this.$root.pedido.total;
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
|
@ -28,18 +28,14 @@ Route::middleware('api')->group(function () {
|
||||||
$atributos_a_ocultar = ['telefono', 'cantidad_de_nucleos', 'correo', 'referente_finanzas', 'created_at', 'updated_at'];
|
$atributos_a_ocultar = ['telefono', 'cantidad_de_nucleos', 'correo', 'referente_finanzas', 'created_at', 'updated_at'];
|
||||||
return GrupoDeCompra::all()->makeHidden($atributos_a_ocultar)->sortBy('nombre')->groupBy('region');
|
return GrupoDeCompra::all()->makeHidden($atributos_a_ocultar)->sortBy('nombre')->groupBy('region');
|
||||||
});
|
});
|
||||||
Route::get('/{gdc}/bonos-de-transporte', function($gdc) {
|
|
||||||
$grupo = GrupoDeCompra::where('id',$gdc)->first();
|
Route::get('/{grupoDeCompra}', 'Api\GrupoDeCompraController@show');
|
||||||
return ['bdt' => $grupo->calcularCantidadBDT()];
|
|
||||||
});
|
|
||||||
Route::get('/{gdc}/bonos-barriales', function($gdc) {
|
|
||||||
$grupo = GrupoDeCompra::where('id',$gdc)->first();
|
|
||||||
return ['bonos_barriales' => $grupo->totalBonosBarriales()];
|
|
||||||
});
|
|
||||||
Route::get('/{gdc}/devoluciones', function($gdc) {
|
Route::get('/{gdc}/devoluciones', function($gdc) {
|
||||||
$habilitadas = GrupoDeCompra::find($gdc)->devoluciones_habilitadas;
|
$habilitadas = GrupoDeCompra::find($gdc)->devoluciones_habilitadas;
|
||||||
return ['devoluciones' => $habilitadas];
|
return ['devoluciones' => $habilitadas];
|
||||||
});
|
});
|
||||||
|
|
||||||
Route::post('/{gdc}/devoluciones', function($gdc) {
|
Route::post('/{gdc}/devoluciones', function($gdc) {
|
||||||
$habilitadas = GrupoDeCompra::find($gdc)->toggleDevoluciones();
|
$habilitadas = GrupoDeCompra::find($gdc)->toggleDevoluciones();
|
||||||
return ['devoluciones' => $habilitadas];
|
return ['devoluciones' => $habilitadas];
|
||||||
|
|
Loading…
Add table
Reference in a new issue