Compare commits

...

10 commits

6 changed files with 182 additions and 60 deletions

View file

@ -7,6 +7,7 @@ use App\Helpers\CanastaHelper;
use App\Helpers\CsvHelper; use App\Helpers\CsvHelper;
use App\Helpers\PedidosExportHelper; use App\Helpers\PedidosExportHelper;
use App\Helpers\TransporteHelper; use App\Helpers\TransporteHelper;
use App\Http\Resources\GrupoDeCompraComisionesResource;
use App\Http\Resources\GrupoDeCompraResource; use App\Http\Resources\GrupoDeCompraResource;
use App\Producto; use App\Producto;
use App\User; use App\User;
@ -20,6 +21,7 @@ use League\Csv\Exception;
use League\Csv\InvalidArgument; use League\Csv\InvalidArgument;
use Mpdf\MpdfException; use Mpdf\MpdfException;
use Symfony\Component\HttpFoundation\BinaryFileResponse; use Symfony\Component\HttpFoundation\BinaryFileResponse;
use Symfony\Component\HttpKernel\Exception\HttpException;
class ComisionesController class ComisionesController
{ {
@ -188,59 +190,103 @@ class ComisionesController
} }
public static function modificarGrupoDeCompra(Request $request, $grupo_de_compra_id) { public static function modificarGrupoDeCompra(Request $request, $grupo_de_compra_id) {
$request->validate([ $valid = $request->validate([
'nombre' => ['nullable','string','regex:/^([a-z]| )+$/i'], 'nombre' => ['nullable','string','regex:/^([a-z]| )+$/i'],
'region' => ['nullable','string','regex:/^([a-z]| |\d)+$/i'], 'region' => ['nullable','string','regex:/^([a-z]| |\d)+$/i'],
'passBarrio' => 'nullable|string|alpha_num', 'passBarrio' => ['nullable','string','alpha_num','min:3'],
'passAdmin' => 'nullable|string|alpha_num', 'passAdmin' => ['nullable','string','alpha_num','min:3'],
'passOllas' => 'nullable|string|alpha_num', 'passOllas' => ['nullable','string','alpha_num','min:3'],
]); ]);
$grupoDeCompra = GrupoDeCompra::find($grupo_de_compra_id); $grupoDeCompra = GrupoDeCompra::find($grupo_de_compra_id);
if ($request["nombre"]) { foreach (array_keys($valid) as $key) {
switch ($key) {
case 'nombre':
$users = User::where([ $users = User::where([
'grupo_de_compra_id' => $grupoDeCompra->id, 'grupo_de_compra_id' => $grupoDeCompra->id,
])->get(); ])->first();
foreach ($users as $user) { foreach ($users as $user) {
$user->name = str_replace($grupoDeCompra->nombre, $request['nombre'], $user->name); $user->name = str_replace($grupoDeCompra->nombre, $valid['nombre'], $user->name);
$user->save(); $user->save();
} }
$grupoDeCompra->nombre = $request['nombre']; $grupoDeCompra->nombre = $valid['nombre'];
$grupoDeCompra->save(); $grupoDeCompra->save();
} break;
case 'region':
if ($request["region"]) { $grupoDeCompra->region = $valid['region'];
$grupoDeCompra->region = $request['region'];
$grupoDeCompra->save(); $grupoDeCompra->save();
} break;
case 'passBarrio':
if ($request["passBario"]) {
$user = User::where([ $user = User::where([
'grupo_de_compra_id' => $grupoDeCompra->id, 'grupo_de_compra_id' => $grupoDeCompra->id,
'role_id' => UserRole::where(['nombre' => 'barrio'])->first()->id, 'role_id' => UserRole::where(['nombre' => 'barrio'])->first()->id,
]); ])->first();
$user->password = Hash::make($request['passBario']); $user->password = Hash::make($valid['passBarrio']);
$user->save(); $user->save();
} break;
case 'passAdmin':
if ($request["passAdmin"]) {
$user = User::where([ $user = User::where([
'grupo_de_compra_id' => $grupoDeCompra->id, 'grupo_de_compra_id' => $grupoDeCompra->id,
'role_id' => UserRole::where(['nombre' => 'admin_barrio'])->first()->id, 'role_id' => UserRole::where(['nombre' => 'admin_barrio'])->first()->id,
]); ])->first();
$user->password = Hash::make($request['passAdmin']); $user->password = Hash::make($valid['passAdmin']);
$user->save(); $user->save();
} break;
case 'passOllas':
if ($request["passOllas"]) {
$user = User::where([ $user = User::where([
'grupo_de_compra_id' => $grupoDeCompra->id, 'grupo_de_compra_id' => $grupoDeCompra->id,
'role_id' => UserRole::where(['nombre' => 'ollas'])->first()->id, 'role_id' => UserRole::where(['nombre' => 'ollas'])->first()->id,
]); ])->first();
$user->password = Hash::make($request['passOllas']); $user->password = Hash::make($valid['passOllas']);
$user->save(); $user->save();
break;
default:
break;
}
} }
return response()->noContent(); return response()->noContent();
} }
public static function crearGrupoDeCompra(Request $request) {
$valid = $request->validate([
'nombre' => ['required','string','regex:/^([a-z]| )+$/i'],
'region' => ['required','string','regex:/^([a-z]| |\d)+$/i'],
'passBarrio' => ['required','string','alpha_num','min:3'],
'passAdmin' => ['required','string','alpha_num','min:3'],
'passOllas' => ['required','string','alpha_num','min:3'],
]);
if (GrupoDeCompra::where(["nombre" => $valid["nombre"]])->get()->count())
throw new HttpException(400, "Ya existe un barrio con este nombre.");
$gdc = GrupoDeCompra::create([
'nombre' => $valid['nombre'],
'region' => $valid['region'],
'saldo' => 0,
]);
User::create([
'grupo_de_compra_id' => $gdc->id,
'name' => $valid['nombre'],
'password' => Hash::make($valid['passBarrio']),
'role_id' => UserRole::where('nombre','barrio')->first()->id,
]);
User::create([
'grupo_de_compra_id' => $gdc->id,
'name' => $valid['nombre'] . '_admin',
'password' => Hash::make($valid['passAdmin']),
'role_id' => UserRole::where('nombre','admin_barrio')->first()->id,
]);
User::create([
'grupo_de_compra_id' => $gdc->id,
'name' => $valid['nombre'] . '_ollas',
'password' => Hash::make($valid['passOllas']),
'role_id' => UserRole::where('nombre','ollas')->first()->id,
]);
return new GrupoDeCompraComisionesResource($gdc);
}
} }

View file

@ -16,7 +16,7 @@ class User extends Authenticatable
* @var array * @var array
*/ */
protected $fillable = [ protected $fillable = [
'name', 'email', 'password', 'role_id', 'grupo_de_compra_id', 'name', 'email', 'password', 'role_id',
]; ];
/** /**

View file

@ -2,21 +2,59 @@
import TablaBarrios from "./TablaBarrios.vue"; import TablaBarrios from "./TablaBarrios.vue";
import DropdownDescargar from "../DropdownDescargar.vue"; import DropdownDescargar from "../DropdownDescargar.vue";
import ModalBarrio from "./ModalBarrio.vue"; import ModalBarrio from "./ModalBarrio.vue";
import { mapState } from "vuex"; import { mapActions, mapMutations, mapState } from "vuex";
import Dropdown from "../../comunes/Dropdown.vue";
import comisiones from "../../../store/modules/comisiones";
export default { export default {
name: "BarriosSeccion", name: "BarriosSeccion",
components: { DropdownDescargar, TablaBarrios, ModalBarrio }, components: { Dropdown, DropdownDescargar, TablaBarrios, ModalBarrio },
data() {
return {
opcionesDescarga: [
{
nombre: "Pedidos por barrio en csv",
href: "/comisiones/pedidos"
},
{
nombre: "Notas por barrio en csv",
href: "/comisiones/pedidos/notas"
},
{
nombre: "Pedidos por barrio en pdf",
href: "/comisiones/pedidos/pdf"
},
{
nombre: "Pedidos de ollas en csv",
href: "/comisiones/pedidos/ollas"
},
],
};
},
computed: { computed: {
...mapState("comisiones", ["grupo_de_compra_actual"]) ...mapState("comisiones", ["grupo_de_compra_actual", "grupo_de_compra_nuevo"])
},
methods: {
...mapMutations("ui", ["toggleModalBarrio"]),
...mapMutations("comisiones", ["grupoDeCompraNuevo"]),
modalNuevoBarrio() {
this.grupoDeCompraNuevo();
this.toggleModalBarrio();
}
} }
} }
</script> </script>
<template> <template>
<div> <div>
<modal-barrio v-if="grupo_de_compra_actual"/> <modal-barrio v-if="grupo_de_compra_actual || grupo_de_compra_nuevo"/>
<dropdown-descargar/> <div class="is-flex is-justify-content-space-between mb-3">
<button class="button" @click="modalNuevoBarrio">
<span class="icon"><i class="fa fa-plus-circle"/></span>
<span>Agregar barrio</span>
</button>
<dropdown :opciones="opcionesDescarga" placeholder="Descargar planillas" :is-right="false"/>
</div>
<tabla-barrios/> <tabla-barrios/>
</div> </div>
</template> </template>

View file

@ -3,7 +3,7 @@
<div class="modal-background"></div> <div class="modal-background"></div>
<div class="modal-card"> <div class="modal-card">
<header class="modal-card-head"> <header class="modal-card-head">
<p class="modal-card-title">Modificar barrio</p> <p class="modal-card-title">{{ titulo }}</p>
<button class="delete" aria-label="close" @click.capture="cerrar"></button> <button class="delete" aria-label="close" @click.capture="cerrar"></button>
</header> </header>
<section class="modal-card-body"> <section class="modal-card-body">
@ -40,7 +40,7 @@
</section> </section>
<footer class="modal-card-foot is-justify-content-right"> <footer class="modal-card-foot is-justify-content-right">
<button class="button" @click="cerrar">Cancelar</button> <button class="button" @click="cerrar">Cancelar</button>
<button class="button is-success" @click="modificar">Aceptar</button> <button class="button is-success" @click="confirmar">Aceptar</button>
</footer> </footer>
</div> </div>
</div> </div>
@ -62,13 +62,32 @@ export default {
}, },
computed: { computed: {
...mapState('ui', ["show_modal_barrio"]), ...mapState('ui', ["show_modal_barrio"]),
...mapState('comisiones', ["grupo_de_compra_actual"]), ...mapState('comisiones', ["grupo_de_compra_actual", "grupo_de_compra_nuevo"]),
titulo() {
return this.grupo_de_compra_nuevo ? "Agregar barrio" : "Modificar barrio";
}
}, },
methods: { methods: {
...mapMutations("comisiones", ["seleccionarGrupoDeCompra"]), ...mapMutations("comisiones", ["seleccionarGrupoDeCompra"]),
...mapMutations('ui', ["toggleModalBarrio"]), ...mapMutations('ui', ["toggleModalBarrio"]),
...mapActions("comisiones", ["modificarBarrio"]), ...mapActions("comisiones", ["modificarBarrio", "crearBarrio"]),
...mapActions('ui', ["toast"]), ...mapActions('ui', ["toast", "error"]),
async confirmar() {
if (this.grupo_de_compra_nuevo)
await this.crear();
else
await this.modificar();
this.cerrar();
},
async crear() {
await this.crearBarrio({
nombre: this.nombreControl,
region: this.regionControl,
passBarrio: this.passBarrio,
passAdmin: this.passAdmin,
passOllas: this.passOllas
});
},
async modificar() { async modificar() {
const nombre = this.nombreControl !== this.grupo_de_compra_actual.nombre ? this.nombreControl : undefined; const nombre = this.nombreControl !== this.grupo_de_compra_actual.nombre ? this.nombreControl : undefined;
const region = this.regionControl !== this.grupo_de_compra_actual.region ? this.regionControl : undefined; const region = this.regionControl !== this.grupo_de_compra_actual.region ? this.regionControl : undefined;
@ -80,11 +99,10 @@ export default {
passAdmin: this.passAdmin, passAdmin: this.passAdmin,
passOllas: this.passOllas, passOllas: this.passOllas,
}) })
this.cerrar();
}, },
cerrar() { cerrar() {
this.toggleModalBarrio(); this.toggleModalBarrio();
this.seleccionarGrupoDeCompra(false); this.seleccionarGrupoDeCompra({ grupoDeCompra: false });
}, },
}, },
mounted() { mounted() {

View file

@ -5,6 +5,7 @@ const state = {
grupos_de_compra: [], grupos_de_compra: [],
parametros: [], parametros: [],
grupo_de_compra_actual: undefined, grupo_de_compra_actual: undefined,
grupo_de_compra_nuevo: false,
}; };
const mutations = { const mutations = {
@ -36,7 +37,15 @@ const mutations = {
state.grupos_de_compra[i].nombre = nombre; state.grupos_de_compra[i].nombre = nombre;
if (region) if (region)
state.grupos_de_compra[i].region = region; state.grupos_de_compra[i].region = region;
} },
grupoDeCompraNuevo(state) {
state.grupo_de_compra_actual = {};
state.grupo_de_compra_nuevo = true;
},
agregarGrupoDeCompra(state, grupo_de_compra) {
state.grupos_de_compra.push(grupo_de_compra);
state.grupo_de_compra_nuevo = false;
},
}; };
const actions = { const actions = {
@ -86,7 +95,7 @@ const actions = {
dispatch("ui/error", { error: error }, { root: true }); dispatch("ui/error", { error: error }, { root: true });
} }
}, },
async modificarBarrio({ commit, dispatch}, { gdc_id, nombre, region, passBarrio, passAdmin, passOllas }) { async modificarBarrio({ commit, dispatch }, { gdc_id, nombre, region, passBarrio, passAdmin, passOllas }) {
try { try {
const data = { const data = {
nombre: nombre, nombre: nombre,
@ -102,6 +111,16 @@ const actions = {
console.log(error); console.log(error);
dispatch("ui/error", { error: error }, { root: true }); dispatch("ui/error", { error: error }, { root: true });
} }
},
async crearBarrio({ commit, dispatch }, data) {
try {
const response = await axios.post(`/comisiones/grupos-de-compra/`, data);
commit('agregarGrupoDeCompra', response.data.data);
dispatch("ui/toast", { mensaje: 'Barrio agregado con éxito'}, { root: true });
} catch (error) {
console.log(error);
dispatch("ui/error", { error: error }, { root: true });
}
} }
}; };

View file

@ -58,6 +58,7 @@ Route::middleware(['auth', 'role:comision'])->group( function() {
Route::get('/comisiones/saldos/ejemplo', 'ComisionesController@descargarSaldosEjemplo')->name('comisiones.saldos.ejemplo'); Route::get('/comisiones/saldos/ejemplo', 'ComisionesController@descargarSaldosEjemplo')->name('comisiones.saldos.ejemplo');
Route::post('/comisiones/saldos', 'ComisionesController@cargarSaldos')->name('comisiones.saldos'); Route::post('/comisiones/saldos', 'ComisionesController@cargarSaldos')->name('comisiones.saldos');
Route::put('/comisiones/parametros/{parametro_id}', 'ComisionesController@modificarParametros')->name('comisiones.parametros.modificar'); Route::put('/comisiones/parametros/{parametro_id}', 'ComisionesController@modificarParametros')->name('comisiones.parametros.modificar');
Route::post('/comisiones/grupos-de-compra/', 'ComisionesController@crearGrupoDeCompra')->name('comisiones.gruposDeComrpa.crear');
Route::put('/comisiones/grupos-de-compra/{grupo_de_compra_id}', 'ComisionesController@modificarGrupoDeCompra')->name('comisiones.gruposDeComrpa.modificar'); Route::put('/comisiones/grupos-de-compra/{grupo_de_compra_id}', 'ComisionesController@modificarGrupoDeCompra')->name('comisiones.gruposDeComrpa.modificar');
Route::get('/comisiones/pedidos/{gdc}', 'AdminController@exportarPedidoACSV')->name('comisiones.pedidos.descargar.grupoDeCompra'); Route::get('/comisiones/pedidos/{gdc}', 'AdminController@exportarPedidoACSV')->name('comisiones.pedidos.descargar.grupoDeCompra');
Route::get('/comisiones/pedidos/{gdc}/ollas', 'AdminController@exportarPedidoOllasACSV')->name('comisiones.pedidos.ollas.grupoDeCompra'); Route::get('/comisiones/pedidos/{gdc}/ollas', 'AdminController@exportarPedidoOllasACSV')->name('comisiones.pedidos.ollas.grupoDeCompra');