Compare commits

...

10 commits

15 changed files with 223 additions and 92 deletions

View file

@ -13,4 +13,12 @@ class FiltroDeSubpedido extends Filtro
$this->builder->where('grupo_de_compra_id', intval($valor));
}
public function tipoPedido(String $valor)
{
if (!is_numeric($valor))
throw new TypeError();
$this->builder->where('tipo_pedido_id', intval($valor));
}
}

View file

@ -23,6 +23,11 @@ class GrupoDeCompra extends Model
return $this->hasMany(Subpedido::class);
}
public function users(): HasMany
{
return $this->hasMany(User::class);
}
public function toggleDevoluciones(): bool
{
$this->devoluciones_habilitadas = !$this->devoluciones_habilitadas;

View file

@ -15,6 +15,7 @@ class RouteController extends Controller
$barrio = UserRole::where('nombre', 'barrio')->first();
$admin = UserRole::where('nombre', 'admin_barrio')->first();
$comision = UserRole::where('nombre', 'comision')->first();
$ollas = UserRole::where('nombre', 'ollas')->first();
switch ($request->user()->role_id) {
case $barrio->id:
@ -23,6 +24,8 @@ class RouteController extends Controller
return redirect('/admin');
case $comision->id:
return redirect('/comisiones');
case $ollas->id:
return redirect('/ollas');
default:
abort(400, 'Rol de usuario invalido');
}

View file

@ -26,6 +26,7 @@ class UserController extends Controller
$result = [ 'grupo_de_compra' => null, ];
$grupo_de_compra = GrupoDeCompra::find($user->grupo_de_compra_id);
switch (UserRole::findOrFail($user->role_id)->nombre) {
case 'ollas':
case 'barrio':
$result['grupo_de_compra'] = new GrupoDeCompraPedidoResource($grupo_de_compra);
break;

View file

@ -0,0 +1,40 @@
<?php
use App\GrupoDeCompra;
use App\User;
use App\UserRole;
use Illuminate\Database\Migrations\Migration;
use Illuminate\Support\Facades\Hash;
class UserRoleOllas extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
$ollasRol = UserRole::firstOrCreate(['nombre' => 'ollas']);
$barrios = GrupoDeCompra::all();
foreach ($barrios as $barrio) {
$barrio->users()->firstOrCreate([
'name' => $barrio->nombre . '_ollas',
'password' => Hash::make('123'),
'role_id' => $ollasRol->id
]);
}
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
$ollasRol = UserRole::where('nombre', 'ollas')->firstOrFail();
User::where('role_id', $ollasRol->id)->delete();
$ollasRol->delete();
}
}

View file

@ -5,9 +5,10 @@ import ComisionesBody from "./comisiones/Body.vue";
import AdminBody from "./admin/Body.vue";
import PedidosBody from "./pedidos/Body.vue";
import InfoTags from "./comunes/InfoTags.vue";
import OllasBody from "./ollas/OllasBody.vue";
export default {
name: 'Main',
components: { InfoTags, ComisionesBody, AdminBody, PedidosBody, NavBar },
components: { OllasBody, InfoTags, ComisionesBody, AdminBody, PedidosBody, NavBar },
computed: {
...mapState("login", ["rol"]),
},
@ -26,6 +27,7 @@ export default {
<pedidos-body v-if="rol === 'barrio'"/>
<admin-body v-else-if="rol === 'admin_barrio'"/>
<comisiones-body v-else-if="rol === 'comision'"/>
<ollas-body v-else-if="rol === 'ollas'"/>
<info-tags/>
</div>
</template>

View file

@ -0,0 +1,30 @@
<script>
import { mapMutations, mapState } from "vuex";
export default {
name: "Burger",
computed: {
...mapState('ui', ["burger_activa"])
},
methods: {
...mapMutations('ui', ["toggleBurger"]),
}
}
</script>
<template>
<a role="button"
class="navbar-burger"
:class="{'is-active': burger_activa}"
aria-label="menu"
aria-expanded="false"
data-target="nav-bar"
@click="toggleBurger">
<span aria-hidden="true"></span>
<span aria-hidden="true"></span>
<span aria-hidden="true"></span>
</a>
</template>
<style scoped>
</style>

View file

@ -1,43 +1,26 @@
<template>
<nav id="nav-bar" class="navbar is-danger is-fixed-top" role="navigation" aria-label="main navigation">
<nav id="nav-bar"
class="navbar is-danger is-fixed-top"
role="navigation"
aria-label="main navigation">
<div class="navbar-brand">
<a class="navbar-item" href="https://mps.org.uy">
<img src="/assets/logoMPS.png" height="28">
</a>
<div class="navbar-item hide-below-1024" v-if="pedidoDefinido">
<p>{{ `Barrio: ${grupo_de_compra.nombre} - Núcleo: ${nombre}` }}</p>
</div>
<chismosa-dropdown
v-if="pedidoDefinido"
class="hide-above-1023"
ariaControls="mobile"
/>
<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>
<span aria-hidden="true"></span>
<img src="/assets/logoMPS.png" height="28" alt="Logo del MPS">
</a>
<pedidos-nav-bar v-if="rol === 'barrio'"/>
<ollas-nav-bar v-else-if="rol === 'ollas'"/>
<admin-nav-bar v-else-if="rol === 'admin_barrio'"/>
<comisiones-nav-bar v-else/>
</div>
<div class="navbar-menu" :class="{'is-active':burgerActiva}">
<div class="navbar-menu"
:class="{'is-active': burger_activa}">
<div class="navbar-end">
<div v-if="pedidoDefinido" class="navbar-item field has-addons mt-1 mr-3 mb-1">
<a class="button is-small has-text-dark-grey" @click.capture="buscar">
<span class="icon">
<i class="fas fa-search"></i>
</span>
</a>
<input class="input is-small" type="text" placeholder="Harina" v-model="searchString"
@keyup.enter="buscar">
</div>
<chismosa-dropdown
v-if="pedidoDefinido"
class="hide-below-1024"
ariaControls="wide">
</chismosa-dropdown>
<buscador v-if="pedidoDefinido"/>
<chismosa-dropdown v-if="pedidoDefinido"
class="hide-below-1024"
ariaControls="wide"/>
<div class="block navbar-item">
<a onclick="event.preventDefault(); document.getElementById('logout-form').submit();"
class="text-a">
<a @click="logOut" class="text-a">
Cerrar sesión
</a>
</div>
@ -48,63 +31,28 @@
<script>
import ChismosaDropdown from '../pedidos/ChismosaDropdown.vue';
import { mapActions, mapGetters, mapMutations, mapState } from "vuex";
import { mapGetters, mapState } from "vuex";
import PedidosNavBar from "../pedidos/PedidosNavBar.vue";
import ComisionesNavBar from "../comisiones/ComisionesNavBar.vue";
import AdminNavBar from "../admin/AdminNavBar.vue";
import OllasNavBar from "../ollas/OllasNavBar.vue";
import Buscador from "../pedidos/Buscador.vue";
export default {
components: { ChismosaDropdown },
data() {
return {
burgerActiva: false,
searchString: "",
nombreCanasta: "",
fechaCanasta: "",
}
},
components: { Buscador, OllasNavBar, AdminNavBar, ComisionesNavBar, PedidosNavBar, ChismosaDropdown },
computed: {
...mapGetters('pedido', ["pedidoDefinido"]),
...mapState('pedido', ["nombre"]),
...mapState('pedido', ["grupo_de_compra"]),
...mapState('login', ["rol"]),
...mapState('ui', ["burger_activa"])
},
methods: {
...mapActions('productos', ["filtrarProductos"]),
...mapMutations('ui', ["addMiga", "popUltimaBusqueda"]),
toggleBurger() {
this.burgerActiva = !this.burgerActiva
logOut() {
event.preventDefault();
document.getElementById('logout-form').submit();
},
buscar() {
if (this.burgerActiva)
this.toggleBurger();
this.filtrarProductos({ filtro: "nombre", valor: this.searchString });
this.popUltimaBusqueda();
this.addMiga({ nombre: this.searchString });
}
},
}
};
</script>
<style>
p.navbar-item:empty {
display: none;
}
#nav-bar {
z-index: 10;
}
.text-a {
color: inherit;
}
@media (max-width: 1023px) {
.hide-below-1024 {
display: none !important;
}
}
@media (min-width: 1024px) {
.hide-above-1023 {
display: none !important;
}
}
</style>

View file

@ -0,0 +1,26 @@
<script>
import PedidosMain from "../pedidos/PedidosMain.vue";
import { mapActions } from "vuex";
export default {
name: "OllasBody",
components: { PedidosMain },
methods: {
...mapActions('pedido', ["getPedidoDeOllas", "getGrupoDeCompra"]),
},
async mounted() {
await this.getGrupoDeCompra();
await this.getPedidoDeOllas();
},
}
</script>
<template>
<div id="ollas-body" class="pb-6 mb-6">
<pedidos-main></pedidos-main>
</div>
</template>
<style scoped>
</style>

View file

@ -8,21 +8,18 @@ export default {
components: { Burger, ChismosaDropdown },
computed: {
...mapGetters('pedido', ["pedidoDefinido"]),
...mapState('pedido', ["nombre", "grupo_de_compra"]),
...mapState('pedido', ["nombre"]),
...mapState('ui', ["burger_activa"])
},
methods: {
...mapMutations('ui', ["toggleBurger"]),
}
},
}
</script>
<template>
<div>
<div class="navbar-item hide-below-1024">
<p v-if="pedidoDefinido">{{ nombre }}</p>
<p v-else>{{ grupo_de_compra.nombre }}</p>
</div>
<div class="navbar-item hide-below-1024">
<p v-if="pedidoDefinido">{{ nombre }}</p>
<chismosa-dropdown
v-if="pedidoDefinido"
class="hide-above-1023"
@ -32,5 +29,4 @@ export default {
</template>
<style scoped>
</style>

View file

@ -0,0 +1,42 @@
<script>
import { mapActions, mapMutations } from "vuex";
export default {
name: "Buscador",
methods: {
...mapActions('productos', ["filtrarProductos"]),
...mapMutations('ui', ["addMiga", "popUltimaBusqueda", "toggleBurger"]),
buscar() {
if (this.burger_activa)
this.toggleBurger();
this.filtrarProductos({ filtro: "nombre", valor: this.searchString });
this.popUltimaBusqueda();
this.addMiga({ nombre: this.searchString });
}
},
data() {
return {
searchString: "",
}
},
}
</script>
<template>
<div class="navbar-item field has-addons mt-1 mr-3 mb-1">
<a class="button is-small has-text-dark-grey" @click.capture="buscar">
<span class="icon">
<i class="fas fa-search"></i>
</span>
</a>
<input class="input is-small"
type="text"
placeholder="Harina"
v-model="searchString"
@keyup.enter="buscar">
</div>
</template>
<style scoped>
</style>

View file

@ -88,7 +88,8 @@ export default {
const response = await axios.get('/api/subpedidos/',{
params: {
nombre: nombre,
grupo_de_compra: this.grupo_de_compra.id
grupo_de_compra: this.grupo_de_compra.id,
tipo_pedido: 1,
}
});
this.pedidos = response.data;

View file

@ -94,6 +94,11 @@ const actions = {
dispatch("ui/resetear", null, { root: true });
commit('reset');
},
async getPedidoDeOllas({ commit }) {
const response = await axios.get(`/api/ollas/${state.grupo_de_compra.id}`);
console.log(response);
commit('setPedido', response.data);
},
};
const getters = {

View file

@ -48,6 +48,30 @@ table.table td {
border-color: transparent;
color: #fff;
}
p.navbar-item:empty {
display: none;
}
#nav-bar {
z-index: 10;
}
.text-a {
color: inherit;
}
@media (max-width: 1023px) {
.hide-below-1024 {
display: none !important;
}
}
@media (min-width: 1024px) {
.hide-above-1023 {
display: none !important;
}
}
/*
Author: Aseem Lalfakawma <alalfakawma.github.io>
This SCSS mixin will allow sizing of table columns in Bulma CSS Framework.

View file

@ -60,6 +60,6 @@ Route::middleware(['auth', 'role:comision'])->group( function() {
Route::get('/ollas/login', 'OllasController@show')->name('ollas.login');
Route::middleware(['auth', 'role:olla'])->group( function() {
Route::middleware(['auth', 'role:ollas'])->group( function() {
Route::get('/ollas', 'RouteController@main')->name('ollas');
});