Compare commits

..

1 Commits

14 changed files with 57 additions and 130 deletions

View File

@ -47,5 +47,4 @@ MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}"
WEB_CLIENT_EMAIL=informaticamps@buzon.uy
WEB_CLIENT_NAME=web
WEB_CLIENT_PASS=pass
NGINX_PORT=8000
WEB_CLIENT_PASS=pass

View File

@ -1,22 +0,0 @@
<?php
namespace App\Http\Controllers\Api;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\DB;
class PedidoController extends Controller
{
public function generarTablas()
{
//GENERAR TABLA GENERAL
DB::unprepared("DROP VIEW if exists productos_por_grupo_de_compra;
SET @barrios = NULL;
SELECT
GROUP_CONCAT(DISTINCT CONCAT('MAX(IF(`grupo_de_compra_nombre` = \"', `grupo_de_compra_nombre`,'\", `cantidad_pedida`,NULL)) AS \"',`grupo_de_compra_nombre`,'\"')) INTO @barrios
FROM pedidos;
SET @sql = CONCAT('CREATE VIEW productos_por_grupo_de_compra AS SELECT producto_nombre, ', @barrios, ' FROM pedidos GROUP BY producto_nombre');
PREPARE stmt FROM @sql;
EXECUTE stmt;");
return "Tabla productos_por_grupo_de_compra generada. " . date('l jS \of F Y h:i:s A');
}
}

View File

@ -80,7 +80,7 @@ class SubpedidoController extends Controller
$producto = Producto::find($valid['producto_id']);
$subpedido->syncProducto($producto, $valid['cantidad']);
return new SubpedidoResource($subpedido);
return $subpedido;
}
}

View File

@ -1,43 +0,0 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreatePedidosView extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
DB::statement("CREATE VIEW pedidos AS
SELECT
g.id as grupo_de_compra_id,
g.nombre as grupo_de_compra_nombre,
g.region as grupo_de_compra_region,
pr.id AS producto_id,
pr.nombre as producto_nombre,
pr.precio as producto_precio,
SUM(ps.cantidad) as cantidad_pedida,
pr.precio*SUM(ps.cantidad) as total_por_producto
FROM grupos_de_compra g
JOIN subpedidos s ON (s.grupo_de_compra_id = g.id)
JOIN producto_subpedido ps ON (ps.subpedido_id = s.id)
JOIN productos pr ON (pr.id = ps.producto_id)
GROUP BY g.id, g.nombre, pr.id, pr.nombre;"
);
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
DB::statement("DROP VIEW pedidos");
}
}

View File

@ -1,4 +1,4 @@
version: "3.3"
version: "3.7"
services:
app:
build:
@ -8,7 +8,7 @@ services:
context: ./
dockerfile: Dockerfile
image: laravel-image
container_name: pedi2-app
container_name: laravel-app
restart: unless-stopped
working_dir: /var/www/
volumes:
@ -19,8 +19,10 @@ services:
db:
image: mysql:5.7
container_name: pedi2-db
container_name: laravel-db
restart: unless-stopped
ports:
- "3306:3306"
environment:
MYSQL_DATABASE: ${DB_DATABASE}
MYSQL_ROOT_PASSWORD: ${DB_PASSWORD}
@ -37,10 +39,10 @@ services:
nginx:
image: nginx:alpine
container_name: pedi2-nginx
container_name: laravel-nginx
restart: unless-stopped
ports:
- ${NGINX_PORT}:80
- 8000:80
volumes:
- ./:/var/www
- ./nginx/conf.d/:/etc/nginx/conf.d/

22
public/css/app.css vendored
View File

@ -21,33 +21,13 @@ nav.breadcrumb.is-fixed-top {
right: 0;
z-index: 30;
top: 3.25rem;
height: 3.25rem;
}
main.has-top-padding {
padding-top: 4.5rem !important;
padding-top: 3rem !important;
}
.has-text-centered {
text-align: center;
margin: 0 1em;
}
.is-fixed-top {
position: fixed;
z-index: 30;
}
.chismosa-container {
top: 6.5rem;
max-height: 21rem;
overflow-y: scroll;
overflow-x: hidden;
width: 100%;
position: fixed;
z-index: 15;
}
main.chisma-abierta {
padding-top: 25.5rem !important;
}

12
public/js/app.js vendored
View File

@ -8,7 +8,7 @@ Vue.component('nav-bar', {
<img src="/assets/logoMPS.png" height="28">
</a>
<p style="margin:0 auto" class="navbar-item"><slot name="subpedido"></slot></p>
<a class="navbar-item" href="#chismosa" @click.capture="toggleChismosa">
<a class="navbar-item" href="/chismosa">
<img style="padding:0 0.3em;" src="/assets/chismosa.png" height="28">
<p style="margin:0 auto; color:white">$ <span v-text="subpedido == null ? 0 : subpedido.total"></span></p>
</a>
@ -47,9 +47,6 @@ Vue.component('nav-bar', {
.then(response => {
this.subpedido = response.data.data;
});
},
toggleChismosa(){
Event.$emit("toggle-chismosa");
}
}, mounted() {
axios.get("/subpedidos/obtener_sesion").then(response => {
@ -61,16 +58,15 @@ Vue.component('nav-bar', {
axios.post("/api/subpedidos/"+this.subpedido.id+"/sync", {
cantidad: cantidad,
producto_id: id
}).then((response) => {
this.subpedido = response.data.data;
Event.$emit('sync-chismosa',this.subpedido);
}).then(() => {
bulmaToast.toast({
message: 'Pedido actualizado exitosamente',
duration: 1000,
duration: 1500,
type: 'is-danger',
position: 'bottom-center',
animate: { in: 'fadeIn', out: 'fadeOut' }
});
this.actualizarSubpedido();
});
});
}

24
public/js/chismosa.js vendored
View File

@ -1,6 +1,6 @@
Vue.component('chismosa', {
template: `
<div class="container table-container chismosa-container is-max-widescreen is-max-desktop animate__animated" :class="animation" v-show="!init">
<div class="container">
<table v-show="this.subpedido.productos.length != 0" class="table is-fullwidth is-striped is-bordered">
<thead>
<tr>
@ -39,19 +39,22 @@ Vue.component('chismosa', {
subpedido: {
productos:[]
},
init: true,
visible: false
}
},
computed: {
animation: function() {
return this.visible ? "animate__slideInDown" : "animate__slideOutUp";
/* TODO: tener el camino que se había hecho antes de abrir la chismosa para volver atrás */
miga: function() {
return {
nombre: "Chismosa de " + this.subpedido.nombre,
href: "/chismosa"
}
}
},
beforeCreate() {
axios.get("/subpedidos/obtener_sesion").then(response => {
this.subpedido = response.data.subpedido;
this.fetchSubpedido();
Event.$emit("migas-agregar",this.miga);
});
},
methods: {
@ -63,15 +66,8 @@ Vue.component('chismosa', {
}
},
mounted() {
Event.$on('sync-chismosa', (subpedido) => {
this.subpedido = subpedido;
});
Event.$on('toggle-chismosa', () => {
this.init = false;
this.visible = !this.visible;
var main = document.getElementById("main");
if (this.visible) main.classList.add("chisma-abierta");
else main.classList.remove("chisma-abierta");
Event.$on('sync-subpedido', () => {
this.fetchSubpedido();
});
}
});

View File

@ -160,7 +160,7 @@ Vue.component('producto-container', {
</section>
<footer class="modal-card-foot">
<!-- Habría que ver si cambiar el botón cuando al cantidad es 0 -->
<button class="button is-success" :disabled="cant <= 0" @click="agregarProducto">Aceptar</button>
<button class="button is-success" :disabled="cant <= 0" @click="agregarProducto">Agregar a la chismosa</button>
<button class="button" @click.capture="cerrar">Cancelar</button>
</footer>
</div>
@ -187,8 +187,22 @@ Vue.component('producto-container', {
Event.$emit("migas-pop");
},
agregarProducto() {
if (this.cant < 0) alert("No se puede agregar cantidades negativas")
else if (!Number.isInteger(this.cant)) alert("Las cantidades deben ser números enteros")
if (this.cant < 0)
bulmaToast.toast({
message: 'Las cantidades deben ser números mayores a 0',
duration: 1500,
type: 'is-danger',
position: 'bottom-center',
animate: { in: 'fadeIn', out: 'fadeOut' }
});
else if (!Number.isInteger(this.cant))
bulmaToast.toast({
message: 'Las cantidades deben ser números enteros',
duration: 1500,
type: 'is-danger',
position: 'bottom-center',
animate: { in: 'fadeIn', out: 'fadeOut' }
});
else {
Event.$emit("sync-subpedido", this.cant, this.producto.id);
this.cerrar();

View File

@ -0,0 +1,15 @@
@extends('layouts.app')
@section('stylesheets')
@endsection
@section('content')
<chismosa></chismosa>
<producto-container></producto-container>
@endsection
@section('scripts')
<script src="{{ asset('js/chismosa.js') }}"></script>
<script src="{{ asset('js/productos.js') }}"></script>
@endsection

View File

@ -40,7 +40,7 @@
</nav>
</nav-migas>
<main id="main" class="py-4 has-top-padding">
<main class="py-4 has-top-padding">
@yield('content')
</main>
</div>

View File

@ -5,7 +5,6 @@
@endsection
@section('content')
<chismosa></chismosa>
<categorias-container></categorias-container>
<productos-container></productos-container>
<producto-container></producto-container>
@ -13,5 +12,4 @@
@section('scripts')
<script src="{{ asset('js/productos.js') }}"></script>
<script src="{{ asset('js/chismosa.js') }}"></script>
@endsection

View File

@ -28,10 +28,6 @@ Route::middleware('api')->group(function () {
});
});
Route::prefix('pedidos')->group(function () {
Route::get('/generar_tablas','Api\PedidoController@generarTablas');
});
Route::prefix('subpedidos')->group(function () {
Route::get('/','Api\SubpedidoController@index');
Route::get('{subpedido}','Api\SubpedidoController@show');

View File

@ -13,10 +13,6 @@ use Symfony\Component\HttpKernel\Exception\HttpException;
|
*/
if (App::environment('production')) {
URL::forceScheme('https');
}
Route::get('/', 'ProductoController@index')->name('productos');
Auth::routes(['register' => false]);