Merge pull request 'funcion/planilla-pedidos-total' (#33) from funcion/planilla-pedidos-total into master
Reviewed-on: #33
This commit is contained in:
commit
96eea84997
|
@ -7,7 +7,7 @@ use Mpdf\Mpdf;
|
|||
use League\Csv\CannotInsertRecord;
|
||||
use League\Csv\Writer;
|
||||
use App\Producto;
|
||||
use DB;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use League\Csv\Reader;
|
||||
|
||||
class GrupoDeCompra extends Model
|
||||
|
@ -17,7 +17,34 @@ class GrupoDeCompra extends Model
|
|||
protected $table = 'grupos_de_compra';
|
||||
protected $hidden = ['password'];
|
||||
|
||||
public function toggleDevoluciones()
|
||||
/**
|
||||
* @param $gdcs
|
||||
* @param array $planilla
|
||||
* @return array
|
||||
*/
|
||||
public static function getPlanilla($gdcs, array $planilla): array
|
||||
{
|
||||
$barrios = [""];
|
||||
foreach ($gdcs as $i => $gdc) {
|
||||
$barrios[] = $gdc->nombre;
|
||||
$productos_en_pedido = DB::table('pedidos_aprobados')->where('grupo_de_compra_id', $gdc->id)->get()->keyBy('producto_id');
|
||||
$pedidos = $gdc->pedidosAprobados();
|
||||
foreach ($productos_en_pedido as $id => $producto_pedido) {
|
||||
$total = 0;
|
||||
// Poner cantidad de cada producto para cada núcleo
|
||||
foreach ($pedidos as $pedido) {
|
||||
list($_, $_, $cantidad) = $gdc->agregarCantidad($pedido, $id, [], 0, 0);
|
||||
$total = $total + $cantidad;
|
||||
}
|
||||
$fila = Producto::productosIdFila()[$id];
|
||||
$planilla[$fila][$i+1] = $total;
|
||||
}
|
||||
}
|
||||
array_splice($planilla, 0, 0, array($barrios));
|
||||
return $planilla;
|
||||
}
|
||||
|
||||
public function toggleDevoluciones()
|
||||
{
|
||||
$this->devoluciones_habilitadas = !$this->devoluciones_habilitadas;
|
||||
$this->save();
|
||||
|
@ -47,7 +74,8 @@ class GrupoDeCompra extends Model
|
|||
$mpdf->Output($filename, "D");
|
||||
}
|
||||
|
||||
function filaVacia(string $product, int $columns) {
|
||||
static function filaVacia(string $product, int $columns): array
|
||||
{
|
||||
$fila = [$product];
|
||||
for ($i = 1; $i <= $columns; $i++) {
|
||||
$fila[$i] = "0";
|
||||
|
@ -56,23 +84,23 @@ class GrupoDeCompra extends Model
|
|||
}
|
||||
|
||||
//Asume que los productos están gruadados en orden de fila
|
||||
public function obtenerTemplateDeFilasVacias(int $columns){
|
||||
public static function obtenerTemplateDeFilasVacias(int $columns){
|
||||
$productosFilaID = Producto::productosFilaID();
|
||||
$productosIDNombre = Producto::productosIDNombre();
|
||||
$num_fila = 1;
|
||||
$template = [];
|
||||
foreach ($productosFilaID as $fila => $id) {
|
||||
for ($i = $num_fila; $i < $fila; $i++) {
|
||||
$template[$i] = $this->filaVacia("", $columns);
|
||||
$template[$i] = GrupoDeCompra::filaVacia("", $columns);
|
||||
}
|
||||
$template[$fila] = $this->filaVacia($productosIDNombre[$id], $columns);
|
||||
$template[$fila] = GrupoDeCompra::filaVacia($productosIDNombre[$id], $columns);
|
||||
$num_fila = $fila+1;
|
||||
}
|
||||
$template[$this->obtenerFilaDeBonoTransporte()] = $this->filaVacia("Bonos de transporte", $columns);
|
||||
$template[GrupoDeCompra::obtenerFilaDeBonoTransporte()] = GrupoDeCompra::filaVacia("Bonos de transporte", $columns);
|
||||
return $template;
|
||||
}
|
||||
|
||||
private function obtenerFilaDeBonoTransporte() {
|
||||
private static function obtenerFilaDeBonoTransporte() {
|
||||
$csv = Reader::createFromPath(resource_path('csv/productos.csv'), 'r');
|
||||
$csv->setDelimiter("|");
|
||||
$csv->setEnclosure("'");
|
||||
|
@ -84,7 +112,7 @@ class GrupoDeCompra extends Model
|
|||
throw new Exception('No hay bono de transporte');
|
||||
}
|
||||
|
||||
private function totalPedidosSinBonos() {
|
||||
private function totalPedidosSinBonos() {
|
||||
$total = 0;
|
||||
foreach ($this->pedidosAprobados() as $pedido) {
|
||||
$total += ceil($pedido->totalSinBonos());
|
||||
|
@ -116,19 +144,7 @@ class GrupoDeCompra extends Model
|
|||
}
|
||||
|
||||
public function exportarPedidoEnCSV(){
|
||||
$productos_en_pedido = DB::table('pedidos_aprobados')->where('grupo_de_compra_id',$this->id)->get()->keyBy('producto_id');
|
||||
|
||||
//si no hay pedidos aprobados, salir
|
||||
if ($productos_en_pedido->count() == 0) { \Log::debug("El grupo de compra ". $this->nombre . " no tiene pedidos aprobados."); return; }
|
||||
$records = $this->obtenerTemplateDeFilasVacias(1);
|
||||
$productos_id_fila = Producto::productosIdFila();
|
||||
foreach ($productos_en_pedido as $id => $producto_pedido){
|
||||
$fila = $productos_id_fila[$id];
|
||||
$records[$fila][1] = $producto_pedido->cantidad_pedida;
|
||||
}
|
||||
|
||||
$records[$this->obtenerFilaDeBonoTransporte()][1] = $this->calcularCantidadBDT();
|
||||
|
||||
$records = $this->generarColumnaCantidades();
|
||||
try {
|
||||
$writer = Writer::createFromPath(resource_path('csv/exports/'.$this->nombre.'.csv'), 'w');
|
||||
$writer->insertAll($records);
|
||||
|
@ -137,11 +153,35 @@ class GrupoDeCompra extends Model
|
|||
}
|
||||
}
|
||||
|
||||
public function generarColumnaCantidades() {
|
||||
$productos_en_pedido = DB::table('pedidos_aprobados')->where('grupo_de_compra_id',$this->id)->get()->keyBy('producto_id');
|
||||
|
||||
//si no hay pedidos aprobados, salir
|
||||
if ($productos_en_pedido->count() == 0) {
|
||||
\Log::debug("El grupo de compra ". $this->nombre . " no tiene pedidos aprobados.");
|
||||
return [];
|
||||
}
|
||||
|
||||
$records = $this->obtenerTemplateDeFilasVacias(1);
|
||||
$productos_id_fila = Producto::productosIdFila();
|
||||
foreach ($productos_en_pedido as $id => $producto_pedido){
|
||||
$fila = $productos_id_fila[$id];
|
||||
$records[$fila][1] = $producto_pedido->cantidad_pedida;
|
||||
}
|
||||
|
||||
$records[$this->obtenerFilaDeBonoTransporte()][1] = $this->calcularCantidadBDT();
|
||||
|
||||
return $records;
|
||||
}
|
||||
|
||||
public function exportarPedidoConNucleosEnCSV() {
|
||||
$productos_en_pedido = DB::table('pedidos_aprobados')->where('grupo_de_compra_id',$this->id)->get()->keyBy('producto_id');
|
||||
|
||||
// si no hay pedidos aprobados, salir
|
||||
if ($productos_en_pedido->count() == 0) { \Log::debug("El grupo de compra ". $this->nombre . " no tiene pedidos aprobados."); return; }
|
||||
if ($productos_en_pedido->count() == 0) {
|
||||
\Log::debug("El grupo de compra ". $this->nombre . " no tiene pedidos aprobados.");
|
||||
return;
|
||||
}
|
||||
|
||||
$pedidos = $this->pedidosAprobados();
|
||||
// Generar tabla vacía con una columna por núcleo
|
||||
|
@ -153,9 +193,7 @@ class GrupoDeCompra extends Model
|
|||
$i = 1;
|
||||
// Poner cantidad de cada producto para cada núcleo
|
||||
foreach ($pedidos as $pedido) {
|
||||
$producto = $pedido->productos()->find($id);
|
||||
$records[$fila][$i] = $producto == NULL ? 0 : $producto["pivot"]["cantidad"];
|
||||
$i++;
|
||||
list($records, $i, $_) = $this->agregarCantidad($pedido, $id, $records, $fila, $i);
|
||||
}
|
||||
}
|
||||
// Insertar lista de núcleos en la primera fila
|
||||
|
@ -176,8 +214,26 @@ class GrupoDeCompra extends Model
|
|||
}
|
||||
}
|
||||
|
||||
public function agregarCantidad($pedido, $id, array $records, $fila, int $i): array
|
||||
{
|
||||
$producto = $pedido->productos()->find($id);
|
||||
$cantidad = $producto == NULL ? 0 : $producto->pivot->cantidad;
|
||||
$records[$fila][$i] = $cantidad;
|
||||
$i++;
|
||||
return array($records, $i, $cantidad);
|
||||
}
|
||||
|
||||
public static function exportarTodosLosPedidosEnCSV(){
|
||||
$gdcs=GrupoDeCompra::all();
|
||||
foreach ($gdcs as $gdc){ $gdc->exportarPedidoEnCSV(); }
|
||||
$gdcs = GrupoDeCompra::all();
|
||||
$planilla = GrupoDeCompra::obtenerTemplateDeFilasVacias($gdcs->count());
|
||||
$planilla = self::getPlanilla($gdcs, $planilla);
|
||||
|
||||
// Guardar en un archivo .csv
|
||||
try {
|
||||
$writer = Writer::createFromPath(resource_path('csv/exports/total-pedidos.csv'), 'w');
|
||||
$writer->insertAll($planilla);
|
||||
} catch (CannotInsertRecord $e) {
|
||||
var_export($e->getRecords());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,9 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Api;
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
|
||||
class PedidoController extends Controller
|
||||
{
|
||||
}
|
|
@ -31,7 +31,9 @@ class LoginController extends Controller
|
|||
|
||||
protected function authenticated(Request $request, $user)
|
||||
{
|
||||
if ($user->is_admin) {
|
||||
if ($user->is_compras) {
|
||||
return redirect('compras/pedidos');
|
||||
} else if ($user->is_admin) {
|
||||
session(['admin_gdc' => $user->grupo_de_compra_id]);
|
||||
return redirect('admin/pedidos');
|
||||
} else {
|
||||
|
|
|
@ -0,0 +1,23 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use App\GrupoDeCompra;
|
||||
|
||||
class ComprasController
|
||||
{
|
||||
public function indexPedidos() {
|
||||
return view('compras_pedidos');
|
||||
}
|
||||
|
||||
public function descargarPedidos() {
|
||||
GrupoDeCompra::exportarTodosLosPedidosEnCSV();
|
||||
$file = resource_path('csv/exports/total-pedidos.csv');
|
||||
return response()->download($file);
|
||||
}
|
||||
|
||||
public function show()
|
||||
{
|
||||
return view('auth/compras_login');
|
||||
}
|
||||
}
|
|
@ -57,6 +57,7 @@ class Kernel extends HttpKernel
|
|||
protected $routeMiddleware = [
|
||||
'auth' => \App\Http\Middleware\Authenticate::class,
|
||||
'admin' => \App\Http\Middleware\Admin::class,
|
||||
'compras' => \App\Http\Middleware\Compras::class,
|
||||
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
|
||||
'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
|
||||
'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
|
||||
|
|
|
@ -0,0 +1,29 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Middleware;
|
||||
|
||||
use Closure;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
|
||||
class Compras
|
||||
{
|
||||
/**
|
||||
* Handle an incoming request.
|
||||
*
|
||||
* @param Request $request
|
||||
* @param Closure $next
|
||||
* @return mixed
|
||||
*/
|
||||
public function handle(Request $request, Closure $next)
|
||||
{
|
||||
if (!Auth::check())
|
||||
return redirect()->route('compras_login.show');
|
||||
|
||||
if (Auth::user()->is_compras) {
|
||||
return $next($request);
|
||||
} else {
|
||||
return response('Necesitás ser de comisión compras para hacer esto', 403);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -38,14 +38,14 @@ class Producto extends Model
|
|||
return $request->has('paginar') && intval($request->input('paginar')) ? intval($request->input('paginar')) : self::$paginarPorDefecto;
|
||||
}
|
||||
|
||||
public static function productosIDFila() {
|
||||
return Producto::pluck('fila', 'id',)->all();
|
||||
}
|
||||
|
||||
public static function productosFilaID() {
|
||||
return Producto::pluck('id', 'fila',)->all();
|
||||
}
|
||||
|
||||
public static function productosIDFila() {
|
||||
return Producto::pluck('fila', 'id',)->all();
|
||||
}
|
||||
|
||||
public static function productosIDNombre() {
|
||||
return Producto::pluck('nombre', 'id',)->all();
|
||||
}
|
||||
|
|
|
@ -0,0 +1,32 @@
|
|||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
class AgregarIsComprasAUser extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
Schema::table('users', function (Blueprint $table) {
|
||||
$table->boolean('is_compras')->after('is_admin')->default(0);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
Schema::table('producto_subpedido', function (Blueprint $table) {
|
||||
$table->dropColumn('is_compras');
|
||||
});
|
||||
}
|
||||
}
|
|
@ -4,7 +4,6 @@
|
|||
* building robust, powerful web applications using Vue and Laravel.
|
||||
*/
|
||||
import axios from 'axios';
|
||||
import animate from 'animate.css';
|
||||
import Vue from 'vue';
|
||||
window.Vue = require('vue');
|
||||
window.Event = new Vue();
|
||||
|
@ -18,8 +17,8 @@ window.bulmaToast = require('bulma-toast');
|
|||
*
|
||||
* Eg. ./components/ExampleComponent.vue -> <example-component></example-component>
|
||||
*/
|
||||
const files = require.context('./', true, /\.vue$/i)
|
||||
files.keys().map(key => Vue.component(key.split('/').pop().split('.')[0], files(key).default))
|
||||
import './components';
|
||||
|
||||
/**
|
||||
* Constants
|
||||
*/
|
||||
|
|
|
@ -0,0 +1,25 @@
|
|||
import Vue from 'vue';
|
||||
|
||||
const requireComponent = require.context('./components', true, /\.vue$/);
|
||||
|
||||
// Registro automático de componentes:
|
||||
// e.g. components/foo/bar/UnComponente.vue
|
||||
// se registra como 'foo-bar-un-componente'
|
||||
requireComponent.keys().forEach(fileName => {
|
||||
// Get the component config
|
||||
const componentConfig = requireComponent(fileName);
|
||||
// Get the PascalCase name of the component
|
||||
const componentName = fileName
|
||||
.replace(/^\.\/(.*)\.\w+$/, '$1') // Remove "./" from the beginning and the file extension from the end
|
||||
.replace(/\//g, '-') // Replace directories with hyphens
|
||||
.replace(/([a-z])([A-Z])/g, '$1-$2') // Insert hyphen between camelCase words
|
||||
.toLowerCase() // Convert to lowercase
|
||||
// Globally register the component
|
||||
Vue.component(
|
||||
componentName,
|
||||
// Look for the component options on `.default`, which will
|
||||
// exist if the component was exported with `export default`,
|
||||
// otherwise fall back to module's root.
|
||||
componentConfig.default || componentConfig
|
||||
);
|
||||
});
|
|
@ -1,31 +0,0 @@
|
|||
<template>
|
||||
<div class="columns ml-3 mr-3">
|
||||
<categorias-container :class="chismosaActiva ? 'hide-below-1024' : ''"></categorias-container>
|
||||
<productos-container :class="chismosaActiva ? 'hide-below-1024' : ''"></productos-container>
|
||||
<chismosa v-show="chismosaActiva"></chismosa>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import Chismosa from './Chismosa.vue';
|
||||
import ProductosContainer from './ProductosContainer.vue';
|
||||
import CategoriasContainer from './CategoriasContainer.vue';
|
||||
|
||||
export default {
|
||||
componets: {
|
||||
Chismosa,
|
||||
ProductosContainer,
|
||||
CategoriasContainer,
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
chismosaActiva: false,
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
Event.$on('toggle-chismosa', (activa) => {
|
||||
this.chismosaActiva = activa;
|
||||
});
|
||||
},
|
||||
}
|
||||
</script>
|
|
@ -1,15 +1,15 @@
|
|||
<template>
|
||||
<div class="block ml-3 mr-3 is-max-widescreen is-max-desktop">
|
||||
<pedidos-admin-tabs-secciones></pedidos-admin-tabs-secciones>
|
||||
<admin-tabs-secciones></admin-tabs-secciones>
|
||||
<div class="block" id="pedidos-seccion"
|
||||
:class="seccionActiva === 'pedidos-seccion' ? 'is-active' : 'is-hidden'">
|
||||
<div class="block pb-6" id="pedidos-tabla-y-dropdown" v-show="hayPedidos">
|
||||
<pedidos-admin-dropdown-descargar
|
||||
<admin-dropdown-descargar
|
||||
:gdc="gdc">
|
||||
</pedidos-admin-dropdown-descargar>
|
||||
<pedidos-admin-tabla-pedidos
|
||||
</admin-dropdown-descargar>
|
||||
<admin-tabla-pedidos
|
||||
:pedidos="pedidos" :bonosDeTransporte="bonosDeTransporte" :totalBonosBarriales="totalBonosBarriales">
|
||||
</pedidos-admin-tabla-pedidos>
|
||||
</admin-tabla-pedidos>
|
||||
</div>
|
||||
<p class="has-text-centered" v-show="!hayPedidos">
|
||||
Todavía no hay ningún pedido para administrar.
|
||||
|
@ -17,35 +17,34 @@
|
|||
</div>
|
||||
<div class="block pb-6" id="bonos-seccion"
|
||||
:class="seccionActiva === 'bonos-seccion' ? 'is-active' : 'is-hidden'">
|
||||
<pedidos-admin-tabla-bonos v-show="hayAprobados"
|
||||
<admin-tabla-bonos v-show="hayAprobados"
|
||||
:pedidos="pedidos">
|
||||
</pedidos-admin-tabla-bonos>
|
||||
</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"
|
||||
:class="seccionActiva === 'caracteristicas-seccion' ? 'is-active' : 'is-hidden'">
|
||||
<pedidos-admin-caracteristicas-opcionales>
|
||||
</pedidos-admin-caracteristicas-opcionales>
|
||||
<admin-caracteristicas-opcionales>
|
||||
</admin-caracteristicas-opcionales>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import PedidosAdminTabsSecciones from './PedidosAdminTabsSecciones.vue';
|
||||
import PedidosAdminDropdownDescargar from "./PedidosAdminDropdownDescargar.vue";
|
||||
import PedidosAdminTablaBonos from './PedidosAdminTablaBonos.vue';
|
||||
import PedidosAdminTablaPedidos from "./PedidosAdminTablaPedidos.vue";
|
||||
import PedidosAdminCaracteristicasOpcionales from "./PedidosAdminCaracteristicasOpcionales.vue";
|
||||
import CaracteristicasOpcionales from "./CaracteristicasOpcionales.vue";
|
||||
import TabsSecciones from "./TabsSecciones.vue";
|
||||
import DropdownDescargar from "./DropdownDescargar.vue";
|
||||
import TablaPedidos from "./TablaPedidos.vue";
|
||||
import TablaBonos from "./TablaBonos.vue";
|
||||
export default {
|
||||
name: "PedidosAdminBody",
|
||||
components: {
|
||||
PedidosAdminCaracteristicasOpcionales,
|
||||
PedidosAdminTabsSecciones,
|
||||
PedidosAdminDropdownDescargar,
|
||||
PedidosAdminTablaPedidos,
|
||||
PedidosAdminTablaBonos,
|
||||
CaracteristicasOpcionales,
|
||||
TabsSecciones,
|
||||
DropdownDescargar,
|
||||
TablaPedidos,
|
||||
TablaBonos,
|
||||
},
|
||||
data() {
|
||||
return {
|
|
@ -10,13 +10,3 @@
|
|||
</a>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
name: "BotonAdminLogin"
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
|
||||
</style>
|
|
@ -1,10 +1,8 @@
|
|||
<script>
|
||||
import axios from "axios";
|
||||
import PedidosAdminFilaCaracteristica from "./PedidosAdminFilaCaracteristica.vue";
|
||||
import FilaCaracteristica from "./FilaCaracteristica.vue";
|
||||
|
||||
export default {
|
||||
name: "PedidosAdminCaracteristicasOpcionales",
|
||||
components: {PedidosAdminFilaCaracteristica},
|
||||
components: { FilaCaracteristica },
|
||||
data() {
|
||||
return {
|
||||
caracteristicas: [
|
||||
|
@ -21,7 +19,6 @@ export default {
|
|||
|
||||
<template>
|
||||
<div class="block">
|
||||
|
||||
<table class="table is-fullwidth is-striped is-bordered">
|
||||
<thead>
|
||||
<tr>
|
||||
|
@ -30,11 +27,11 @@ export default {
|
|||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<pedidos-admin-fila-caracteristica
|
||||
<admin-fila-caracteristica
|
||||
v-for="(c,i) in caracteristicas"
|
||||
:key="i"
|
||||
:caracteristica="c">
|
||||
</pedidos-admin-fila-caracteristica>
|
||||
</admin-fila-caracteristica>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
|
@ -31,7 +31,6 @@
|
|||
|
||||
<script>
|
||||
export default {
|
||||
name: "PedidosAdminDropdownDescargar",
|
||||
props: {
|
||||
gdc: {
|
||||
type: Number,
|
||||
|
@ -54,4 +53,4 @@ export default {
|
|||
|
||||
<style>
|
||||
|
||||
</style>
|
||||
</style>
|
|
@ -2,11 +2,10 @@
|
|||
import axios from "axios";
|
||||
|
||||
export default {
|
||||
name: "PedidosAdminFilaCaracteristica",
|
||||
props: {
|
||||
caracteristica: Object
|
||||
},
|
||||
data: {
|
||||
data() {
|
||||
gdc: undefined
|
||||
},
|
||||
watch: {
|
|
@ -5,19 +5,18 @@
|
|||
<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>
|
||||
<pedidos-admin-switch-aprobacion
|
||||
<admin-switch-aprobacion
|
||||
:pedido="pedido">
|
||||
</pedidos-admin-switch-aprobacion>
|
||||
</admin-switch-aprobacion>
|
||||
</td>
|
||||
</tr>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import PedidosAdminSwitchAprobacion from './PedidosAdminSwitchAprobacion.vue';
|
||||
import SwitchAprobacion from "./SwitchAprobacion.vue";
|
||||
export default {
|
||||
name: "PedidosAdminFilaPedido",
|
||||
components: {
|
||||
PedidosAdminSwitchAprobacion
|
||||
SwitchAprobacion
|
||||
},
|
||||
props: {
|
||||
pedido: Object
|
|
@ -24,7 +24,6 @@
|
|||
|
||||
<script>
|
||||
export default {
|
||||
name: "LoginAdmin",
|
||||
data() {
|
||||
return {
|
||||
visible: false,
|
|
@ -12,7 +12,6 @@
|
|||
|
||||
<script>
|
||||
export default {
|
||||
name: "PedidosAdminSwitchAprobacion",
|
||||
props: {
|
||||
pedido: Object
|
||||
},
|
|
@ -39,7 +39,6 @@
|
|||
|
||||
<script>
|
||||
export default {
|
||||
name: "PedidosAdminTablaBonos",
|
||||
props: {
|
||||
pedidos: {
|
||||
type: Array,
|
||||
|
@ -95,4 +94,4 @@ export default {
|
|||
|
||||
<style>
|
||||
|
||||
</style>
|
||||
</style>
|
|
@ -11,10 +11,10 @@
|
|||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<pedidos-admin-fila-pedido
|
||||
<admin-fila-pedido
|
||||
v-for="pedido in this.pedidos"
|
||||
:pedido="pedido" :key="pedido.id">
|
||||
</pedidos-admin-fila-pedido>
|
||||
</admin-fila-pedido>
|
||||
</tbody>
|
||||
</table>
|
||||
<table class="table is-striped is-bordered">
|
||||
|
@ -46,11 +46,10 @@
|
|||
</template>
|
||||
|
||||
<script>
|
||||
import PedidosAdminFilaPedidoVue from './PedidosAdminFilaPedido.vue';
|
||||
import FilaPedido from "./FilaPedido.vue";
|
||||
export default {
|
||||
name: "PedidosAdminTablaPedidos",
|
||||
components: {
|
||||
PedidosAdminFilaPedidoVue
|
||||
FilaPedido
|
||||
},
|
||||
props: {
|
||||
pedidos: {
|
|
@ -19,7 +19,6 @@
|
|||
|
||||
<script>
|
||||
export default {
|
||||
name: "PedidosAdminTabsSecciones",
|
||||
data() {
|
||||
return {
|
||||
tabActiva: "pedidos",
|
||||
|
@ -49,7 +48,7 @@ export default {
|
|||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
@import 'bulma';
|
||||
@import '../../../../node_modules/bulma';
|
||||
hr {
|
||||
border: none;
|
||||
height: 1px;
|
|
@ -0,0 +1,22 @@
|
|||
<template>
|
||||
<div class="container is-fluid has-text-centered">
|
||||
<div class="block">
|
||||
<div class="field">
|
||||
<p class="control">
|
||||
<a href="/compras/pedidos/descargar" class="button">
|
||||
<span class="icon is-small">
|
||||
<i class="fas fa-download"></i>
|
||||
</span>
|
||||
<span>Descargar planilla de totales</span>
|
||||
</a>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
|
||||
}
|
||||
</script>
|
|
@ -0,0 +1,52 @@
|
|||
<template>
|
||||
<div class="block">
|
||||
<div class="field">
|
||||
<label class="label">Usuario</label>
|
||||
<div class="field">
|
||||
<div class="control">
|
||||
<input required class="input" type="text" name="name" placeholder="Usuario">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="field">
|
||||
<label class="label">Contraseña</label>
|
||||
<div class="field has-addons">
|
||||
<div class="control">
|
||||
<input required class="input" :type="this.passwordType" name="password" placeholder="Contraseña">
|
||||
</div>
|
||||
<div class="control">
|
||||
<a class="button is-dark" @click="togglePassword">
|
||||
{{ (passwordVisible ? 'Ocultar' : 'Mostrar') + ' contraseña'}}
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="field">
|
||||
<div class="control">
|
||||
<input type="submit" class="button is-dark" value="Ingresar"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
name: "LoginAdmin",
|
||||
data() {
|
||||
return {
|
||||
passwordVisible: false,
|
||||
passwordType: "password",
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
togglePassword() {
|
||||
if (this.passwordVisible) this.passwordType = "password";
|
||||
else this.passwordType = "text"
|
||||
this.passwordVisible = !this.passwordVisible
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style>
|
||||
</style>
|
|
@ -11,7 +11,7 @@
|
|||
<p class="navbar-item">
|
||||
<slot name="subpedido"></slot>
|
||||
</p>
|
||||
<chismosa-dropdown v-if="this.$root.pedido != null" class="hide-above-1023" id="mobile"></chismosa-dropdown>
|
||||
<pedidos-chismosa-dropdown v-if="this.$root.pedido != null" class="hide-above-1023" id="mobile"></pedidos-chismosa-dropdown>
|
||||
<a role="button" class="navbar-burger" :class="{'is-active':burgerActiva}" aria-label="menu" aria-expanded="false" data-target="nav-bar" @click="toggleBurger">
|
||||
<span aria-hidden="true"></span>
|
||||
<span aria-hidden="true"></span>
|
||||
|
@ -28,7 +28,7 @@
|
|||
</a>
|
||||
<input class="input is-small" type="text" placeholder="Harina" v-model="searchString" @keyup.enter="buscar" >
|
||||
</div>
|
||||
<chismosa-dropdown v-if="this.$root.pedido != null" class="hide-below-1024" id="wide"></chismosa-dropdown>
|
||||
<pedidos-chismosa-dropdown v-if="this.$root.pedido != null" class="hide-below-1024" id="wide"></pedidos-chismosa-dropdown>
|
||||
<div class="block navbar-item">
|
||||
<a onclick="event.preventDefault(); document.getElementById('logout-form').submit();" class="text-a">
|
||||
Cerrar sesión
|
||||
|
@ -41,7 +41,7 @@
|
|||
</template>
|
||||
|
||||
<script>
|
||||
import ChismosaDropdown from './ChismosaDropdown.vue';
|
||||
import ChismosaDropdown from '../pedidos/ChismosaDropdown.vue';
|
||||
export default {
|
||||
components: { ChismosaDropdown },
|
||||
data() {
|
|
@ -0,0 +1,22 @@
|
|||
<template>
|
||||
<div class="columns ml-3 mr-3">
|
||||
<pedidos-categorias-container :class="chismosaActiva ? 'hide-below-1024' : ''"></pedidos-categorias-container>
|
||||
<pedidos-productos-container :class="chismosaActiva ? 'hide-below-1024' : ''"></pedidos-productos-container>
|
||||
<pedidos-chismosa v-show="chismosaActiva"></pedidos-chismosa>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
chismosaActiva: false,
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
Event.$on('toggle-chismosa', (activa) => {
|
||||
this.chismosaActiva = activa;
|
||||
});
|
||||
},
|
||||
}
|
||||
</script>
|
|
@ -34,7 +34,7 @@
|
|||
</tr>
|
||||
</tfoot>
|
||||
<tbody>
|
||||
<producto-row v-for="producto in productos" :producto="producto" :key="producto.id"></producto-row>
|
||||
<pedidos-producto-row v-for="producto in productos" :producto="producto" :key="producto.id"></pedidos-producto-row>
|
||||
</tbody>
|
||||
</table>
|
||||
<p class="has-text-centered" v-show="!mostrar_tabla">
|
||||
|
@ -99,4 +99,4 @@
|
|||
max-height: 81vh;
|
||||
margin-right: 20px;
|
||||
}
|
||||
</style>
|
||||
</style>
|
|
@ -8,7 +8,7 @@
|
|||
</div>
|
||||
<div class="control">
|
||||
<a class="button is-info" @click="togglePassword">
|
||||
{{ (passwordVisible ? 'Ocultar' : 'Mostrar') + ' contraseña'}}
|
||||
{{ (passwordVisible ? 'Ocultar' : 'Mostrar') + ' contraseña'}}
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -24,7 +24,6 @@
|
|||
|
||||
<script>
|
||||
export default {
|
||||
name: 'Login',
|
||||
data() {
|
||||
return {
|
||||
visible: false,
|
|
@ -1,11 +1,6 @@
|
|||
<script>
|
||||
import ProductoCantidad from './Producto/ProductoCantidad.vue';
|
||||
|
||||
export default {
|
||||
name: "ProductoCard",
|
||||
components: {
|
||||
ProductoCantidad,
|
||||
},
|
||||
props: {
|
||||
producto: Object
|
||||
},
|
||||
|
@ -73,7 +68,7 @@ export default {
|
|||
</div>
|
||||
<footer class="columns">
|
||||
<div class="column is-three-quarters">
|
||||
<producto-cantidad :producto="producto"></producto-cantidad>
|
||||
<pedidos-producto-cantidad :producto="producto"></pedidos-producto-cantidad>
|
||||
</div>
|
||||
<div class="column">
|
||||
<p class="subtitle is-7 is-hidden-mobile" v-if="enChismosa !== 0">{{ enChismosa }} en chismosa</p>
|
||||
|
@ -84,7 +79,7 @@ export default {
|
|||
</template>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
@use "bulma/sass/utilities/mixins";
|
||||
@use "../../../../node_modules/bulma/sass/utilities/mixins";
|
||||
|
||||
@include mixins.until(mixins.$desktop) {
|
||||
.hidden-until-desktop {
|
|
@ -2,18 +2,13 @@
|
|||
<tr>
|
||||
<td>{{ this.producto.nombre }}</td>
|
||||
<td class="has-text-right">
|
||||
<producto-cantidad :producto="producto"></producto-cantidad>
|
||||
<pedidos-producto-cantidad :producto="producto"></pedidos-producto-cantidad>
|
||||
</td>
|
||||
<td class="has-text-right">{{ Math.ceil(this.producto.pivot.total) }}</td>
|
||||
</tr>
|
||||
</template>
|
||||
<script>
|
||||
import ProductoCantidad from './Producto/ProductoCantidad.vue';
|
||||
|
||||
export default {
|
||||
components: {
|
||||
ProductoCantidad,
|
||||
},
|
||||
props: {
|
||||
producto: Object
|
||||
},
|
|
@ -1,17 +1,14 @@
|
|||
<template>
|
||||
<div v-show="visible" class="column">
|
||||
<div class="columns is-multiline is-mobile">
|
||||
<producto-card v-for="(producto,i) in productos" :key="i" :producto="producto">
|
||||
</producto-card><!-- END BLOCK COLUMN -->
|
||||
<pedidos-producto-card v-for="(producto,i) in productos" :key="i" :producto="producto">
|
||||
</pedidos-producto-card><!-- END BLOCK COLUMN -->
|
||||
</div><!-- END COLUMNS -->
|
||||
</div><!-- END CONTAINER -->
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import ProductoCard from "./ProductoCard.vue";
|
||||
|
||||
export default {
|
||||
components: {ProductoCard},
|
||||
data() {
|
||||
return {
|
||||
productos: [],
|
||||
|
@ -50,4 +47,5 @@ export default {
|
|||
return params
|
||||
},
|
||||
}
|
||||
}</script>
|
||||
}
|
||||
</script>
|
|
@ -21,11 +21,11 @@
|
|||
Contraseña incorrecta, intentalo nuevamente.
|
||||
</div>
|
||||
@enderror
|
||||
<region-select v-bind:admin="true"></region-select>
|
||||
<comunes-region-select v-bind:admin="true"></comunes-region-select>
|
||||
<form method="post" action="login">
|
||||
@csrf
|
||||
<barrio-select v-bind:admin="true"></barrio-select>
|
||||
<login-admin></login-admin>
|
||||
<comunes-barrio-select v-bind:admin="true"></comunes-barrio-select>
|
||||
<admin-login></admin-login>
|
||||
</form>
|
||||
</div>
|
||||
</section>
|
||||
|
|
|
@ -1,13 +1,5 @@
|
|||
@extends('layouts.app')
|
||||
|
||||
@section('content')
|
||||
<pedidos-admin-body></pedidos-admin-body>
|
||||
<admin-body></admin-body>
|
||||
@endsection
|
||||
<script>
|
||||
import PedidosAdminBody from "../../js/components/PedidosAdminBody.vue";
|
||||
export default {
|
||||
components: {
|
||||
PedidosAdminBody
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
|
|
@ -0,0 +1,33 @@
|
|||
<!DOCTYPE html>
|
||||
<html class="has-background-warning" lang="{{ str_replace('_', '-', app()->getLocale()) }}">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>{{ config('app.name', 'Pedidos del MPS') }}</title>
|
||||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bulma@0.9.3/css/bulma.min.css">
|
||||
<link rel="stylesheet" href="{{ mix('css/app.css') }}">
|
||||
<script src="https://kit.fontawesome.com/9235d1c676.js" crossorigin="anonymous"></script>
|
||||
</head>
|
||||
<body>
|
||||
<section class="section">
|
||||
<div id="root" class="container">
|
||||
<h1 class="title">
|
||||
Pedidos MPS
|
||||
</h1>
|
||||
<p class="subtitle">
|
||||
Bienvenidx a la sección de compras de la aplicación del <strong>Mercado Popular de Subsistencia</strong>
|
||||
</p>
|
||||
@error('name')
|
||||
<div class="notification is-danger">
|
||||
Contraseña incorrecta, intentalo nuevamente.
|
||||
</div>
|
||||
@enderror
|
||||
<form method="post" action="login">
|
||||
@csrf
|
||||
<compras-login></compras-login>
|
||||
</form>
|
||||
</div>
|
||||
</section>
|
||||
<script src="{{ mix('js/app.js') }}" defer></script>
|
||||
</body>
|
||||
</html>
|
|
@ -11,7 +11,7 @@
|
|||
<body>
|
||||
<section class="section">
|
||||
<div id="root" class="container">
|
||||
<boton-admin-login></boton-admin-login>
|
||||
<admin-boton-login></admin-boton-login>
|
||||
<h1 class="title">
|
||||
Pedidos MPS
|
||||
</h1>
|
||||
|
@ -23,20 +23,14 @@
|
|||
Contraseña incorrecta, intentalo nuevamente.
|
||||
</div>
|
||||
@enderror
|
||||
<region-select></region-select>
|
||||
<comunes-region-select></comunes-region-select>
|
||||
<form method="post" action="login">
|
||||
@csrf
|
||||
<barrio-select></barrio-select>
|
||||
<login></login>
|
||||
<comunes-barrio-select></comunes-barrio-select>
|
||||
<pedidos-login></pedidos-login>
|
||||
</form>
|
||||
</div>
|
||||
</section>
|
||||
<script src="{{ mix('js/app.js') }}" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
<script>
|
||||
import BotonAdminLogin from "../../js/components/BotonAdminLogin";
|
||||
export default {
|
||||
components: {BotonAdminLogin}
|
||||
}
|
||||
</script>
|
||||
|
|
|
@ -0,0 +1,5 @@
|
|||
@extends('layouts.app')
|
||||
|
||||
@section('content')
|
||||
<compras-body></compras-body>
|
||||
@endsection
|
|
@ -19,7 +19,7 @@
|
|||
</head>
|
||||
<body class="has-navbar-fixed-top">
|
||||
<div id="root">
|
||||
<nav-bar>
|
||||
<comunes-nav-bar>
|
||||
<template slot="subpedido">{{ session('subpedido_nombre') ? 'Pedido de '. session('subpedido_nombre') : Auth::user()->name }}</template>
|
||||
<template slot="gdc">{{ session('subpedido_nombre') ? Auth::user()->name : "" }}</template>
|
||||
<template slot="logout-form">
|
||||
|
@ -27,11 +27,11 @@
|
|||
@csrf
|
||||
</form>
|
||||
</template>
|
||||
</nav-bar>
|
||||
<nav-migas></nav-migas>
|
||||
</comunes-nav-bar>
|
||||
<pedidos-nav-migas></pedidos-nav-migas>
|
||||
|
||||
<main id="main" class="py-4 has-top-padding">
|
||||
<cartel-pedido-aprobado></cartel-pedido-aprobado>
|
||||
<pedidos-cartel-pedido-aprobado></pedidos-cartel-pedido-aprobado>
|
||||
@yield('content')
|
||||
</main>
|
||||
</div>
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
@extends('layouts.app')
|
||||
|
||||
@section('content')
|
||||
<pedido-body></pedido-body>
|
||||
<devoluciones-modal></devoluciones-modal>
|
||||
<pedidos-body></pedidos-body>
|
||||
<pedidos-devoluciones-modal></pedidos-devoluciones-modal>
|
||||
@endsection
|
||||
|
|
|
@ -9,7 +9,7 @@
|
|||
<p class="subtitle">
|
||||
Bienvenidx a la aplicación de pedidos del <strong>Mercado Popular de Subsistencia</strong>
|
||||
</p>
|
||||
<subpedido-select gdcid="{{Auth::user()->grupoDeCompra->id}}"></subpedido-select>
|
||||
<pedidos-subpedido-select gdcid="{{Auth::user()->grupoDeCompra->id}}"></pedidos-subpedido-select>
|
||||
</div>
|
||||
</section>
|
||||
@endsection
|
||||
|
|
|
@ -75,3 +75,10 @@ Route::middleware('auth')->group( function() {
|
|||
})->name('obtenerSesion');
|
||||
});
|
||||
});
|
||||
|
||||
Route::get('/compras', 'ComprasController@show')->name('compras_login.show');
|
||||
|
||||
Route::middleware(['compras'])->group( function() {
|
||||
Route::get('/compras/pedidos', 'ComprasController@indexPedidos')->name('compras.pedidos');
|
||||
Route::get('/compras/pedidos/descargar', 'ComprasController@descargarPedidos')->name('compras.pedidos.descargar');
|
||||
});
|
||||
|
|
Loading…
Reference in New Issue