forked from nathalie/pedi2
Compare commits
8 Commits
lista-chis
...
master
Author | SHA1 | Date |
---|---|---|
Félix González | 323ab09238 | |
Félix González | 3a2ffde0ab | |
nat | 0410e844b1 | |
nat | 2d302d0116 | |
nat | e4a08f5aed | |
nat | 70235970ab | |
nat | 67aadf157f | |
nat | 667d7dbddb |
|
@ -47,4 +47,5 @@ MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}"
|
|||
|
||||
WEB_CLIENT_EMAIL=informaticamps@buzon.uy
|
||||
WEB_CLIENT_NAME=web
|
||||
WEB_CLIENT_PASS=pass
|
||||
WEB_CLIENT_PASS=pass
|
||||
NGINX_PORT=8000
|
|
@ -0,0 +1,22 @@
|
|||
<?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');
|
||||
}
|
||||
}
|
|
@ -80,7 +80,7 @@ class SubpedidoController extends Controller
|
|||
$producto = Producto::find($valid['producto_id']);
|
||||
|
||||
$subpedido->syncProducto($producto, $valid['cantidad']);
|
||||
return $subpedido;
|
||||
return new SubpedidoResource($subpedido);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -0,0 +1,43 @@
|
|||
<?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");
|
||||
}
|
||||
}
|
|
@ -1,4 +1,4 @@
|
|||
version: "3.7"
|
||||
version: "3.3"
|
||||
services:
|
||||
app:
|
||||
build:
|
||||
|
@ -8,7 +8,7 @@ services:
|
|||
context: ./
|
||||
dockerfile: Dockerfile
|
||||
image: laravel-image
|
||||
container_name: laravel-app
|
||||
container_name: pedi2-app
|
||||
restart: unless-stopped
|
||||
working_dir: /var/www/
|
||||
volumes:
|
||||
|
@ -19,10 +19,8 @@ services:
|
|||
|
||||
db:
|
||||
image: mysql:5.7
|
||||
container_name: laravel-db
|
||||
container_name: pedi2-db
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "3306:3306"
|
||||
environment:
|
||||
MYSQL_DATABASE: ${DB_DATABASE}
|
||||
MYSQL_ROOT_PASSWORD: ${DB_PASSWORD}
|
||||
|
@ -39,10 +37,10 @@ services:
|
|||
|
||||
nginx:
|
||||
image: nginx:alpine
|
||||
container_name: laravel-nginx
|
||||
container_name: pedi2-nginx
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- 8000:80
|
||||
- ${NGINX_PORT}:80
|
||||
volumes:
|
||||
- ./:/var/www
|
||||
- ./nginx/conf.d/:/etc/nginx/conf.d/
|
||||
|
|
|
@ -21,13 +21,33 @@ nav.breadcrumb.is-fixed-top {
|
|||
right: 0;
|
||||
z-index: 30;
|
||||
top: 3.25rem;
|
||||
height: 3.25rem;
|
||||
}
|
||||
|
||||
main.has-top-padding {
|
||||
padding-top: 3rem !important;
|
||||
padding-top: 4.5rem !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;
|
||||
}
|
|
@ -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">
|
||||
<a class="navbar-item" href="#chismosa" @click.capture="toggleChismosa">
|
||||
<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,6 +47,9 @@ Vue.component('nav-bar', {
|
|||
.then(response => {
|
||||
this.subpedido = response.data.data;
|
||||
});
|
||||
},
|
||||
toggleChismosa(){
|
||||
Event.$emit("toggle-chismosa");
|
||||
}
|
||||
}, mounted() {
|
||||
axios.get("/subpedidos/obtener_sesion").then(response => {
|
||||
|
@ -58,7 +61,9 @@ Vue.component('nav-bar', {
|
|||
axios.post("/api/subpedidos/"+this.subpedido.id+"/sync", {
|
||||
cantidad: cantidad,
|
||||
producto_id: id
|
||||
}).then(() => {
|
||||
}).then((response) => {
|
||||
this.subpedido = response.data.data;
|
||||
Event.$emit('sync-chismosa',this.subpedido);
|
||||
bulmaToast.toast({
|
||||
message: 'Pedido actualizado exitosamente',
|
||||
duration: 1000,
|
||||
|
@ -66,7 +71,6 @@ Vue.component('nav-bar', {
|
|||
position: 'bottom-center',
|
||||
animate: { in: 'fadeIn', out: 'fadeOut' }
|
||||
});
|
||||
this.actualizarSubpedido();
|
||||
});
|
||||
});
|
||||
}
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
Vue.component('chismosa', {
|
||||
template: `
|
||||
<div class="container">
|
||||
<div class="container table-container chismosa-container is-max-widescreen is-max-desktop animate__animated" :class="animation" v-show="!init">
|
||||
<table v-show="this.subpedido.productos.length != 0" class="table is-fullwidth is-striped is-bordered">
|
||||
<thead>
|
||||
<tr>
|
||||
|
@ -39,22 +39,19 @@ Vue.component('chismosa', {
|
|||
subpedido: {
|
||||
productos:[]
|
||||
},
|
||||
init: true,
|
||||
visible: false
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
/* 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"
|
||||
}
|
||||
animation: function() {
|
||||
return this.visible ? "animate__slideInDown" : "animate__slideOutUp";
|
||||
}
|
||||
},
|
||||
beforeCreate() {
|
||||
axios.get("/subpedidos/obtener_sesion").then(response => {
|
||||
this.subpedido = response.data.subpedido;
|
||||
this.fetchSubpedido();
|
||||
Event.$emit("migas-agregar",this.miga);
|
||||
});
|
||||
},
|
||||
methods: {
|
||||
|
@ -66,8 +63,15 @@ Vue.component('chismosa', {
|
|||
}
|
||||
},
|
||||
mounted() {
|
||||
Event.$on('sync-subpedido', () => {
|
||||
this.fetchSubpedido();
|
||||
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");
|
||||
});
|
||||
}
|
||||
});
|
||||
|
|
|
@ -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">Agregar a la chismosa</button>
|
||||
<button class="button is-success" :disabled="cant <= 0" @click="agregarProducto">Aceptar</button>
|
||||
<button class="button" @click.capture="cerrar">Cancelar</button>
|
||||
</footer>
|
||||
</div>
|
||||
|
|
|
@ -1,15 +0,0 @@
|
|||
@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
|
|
@ -40,7 +40,7 @@
|
|||
</nav>
|
||||
</nav-migas>
|
||||
|
||||
<main class="py-4 has-top-padding">
|
||||
<main id="main" class="py-4 has-top-padding">
|
||||
@yield('content')
|
||||
</main>
|
||||
</div>
|
||||
|
|
|
@ -5,6 +5,7 @@
|
|||
@endsection
|
||||
|
||||
@section('content')
|
||||
<chismosa></chismosa>
|
||||
<categorias-container></categorias-container>
|
||||
<productos-container></productos-container>
|
||||
<producto-container></producto-container>
|
||||
|
@ -12,4 +13,5 @@
|
|||
|
||||
@section('scripts')
|
||||
<script src="{{ asset('js/productos.js') }}"></script>
|
||||
<script src="{{ asset('js/chismosa.js') }}"></script>
|
||||
@endsection
|
||||
|
|
|
@ -28,6 +28,10 @@ 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');
|
||||
|
|
|
@ -13,6 +13,10 @@ use Symfony\Component\HttpKernel\Exception\HttpException;
|
|||
|
|
||||
*/
|
||||
|
||||
if (App::environment('production')) {
|
||||
URL::forceScheme('https');
|
||||
}
|
||||
|
||||
Route::get('/', 'ProductoController@index')->name('productos');
|
||||
|
||||
Auth::routes(['register' => false]);
|
||||
|
|
Loading…
Reference in New Issue