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\PedidosExportHelper;
use App\Helpers\TransporteHelper;
use App\Http\Resources\GrupoDeCompraComisionesResource;
use App\Http\Resources\GrupoDeCompraResource;
use App\Producto;
use App\User;
@ -20,6 +21,7 @@ use League\Csv\Exception;
use League\Csv\InvalidArgument;
use Mpdf\MpdfException;
use Symfony\Component\HttpFoundation\BinaryFileResponse;
use Symfony\Component\HttpKernel\Exception\HttpException;
class ComisionesController
{
@ -188,59 +190,103 @@ class ComisionesController
}
public static function modificarGrupoDeCompra(Request $request, $grupo_de_compra_id) {
$request->validate([
$valid = $request->validate([
'nombre' => ['nullable','string','regex:/^([a-z]| )+$/i'],
'region' => ['nullable','string','regex:/^([a-z]| |\d)+$/i'],
'passBarrio' => 'nullable|string|alpha_num',
'passAdmin' => 'nullable|string|alpha_num',
'passOllas' => 'nullable|string|alpha_num',
'passBarrio' => ['nullable','string','alpha_num','min:3'],
'passAdmin' => ['nullable','string','alpha_num','min:3'],
'passOllas' => ['nullable','string','alpha_num','min:3'],
]);
$grupoDeCompra = GrupoDeCompra::find($grupo_de_compra_id);
if ($request["nombre"]) {
$users = User::where([
'grupo_de_compra_id' => $grupoDeCompra->id,
])->get();
foreach ($users as $user) {
$user->name = str_replace($grupoDeCompra->nombre, $request['nombre'], $user->name);
$user->save();
foreach (array_keys($valid) as $key) {
switch ($key) {
case 'nombre':
$users = User::where([
'grupo_de_compra_id' => $grupoDeCompra->id,
])->first();
foreach ($users as $user) {
$user->name = str_replace($grupoDeCompra->nombre, $valid['nombre'], $user->name);
$user->save();
}
$grupoDeCompra->nombre = $valid['nombre'];
$grupoDeCompra->save();
break;
case 'region':
$grupoDeCompra->region = $valid['region'];
$grupoDeCompra->save();
break;
case 'passBarrio':
$user = User::where([
'grupo_de_compra_id' => $grupoDeCompra->id,
'role_id' => UserRole::where(['nombre' => 'barrio'])->first()->id,
])->first();
$user->password = Hash::make($valid['passBarrio']);
$user->save();
break;
case 'passAdmin':
$user = User::where([
'grupo_de_compra_id' => $grupoDeCompra->id,
'role_id' => UserRole::where(['nombre' => 'admin_barrio'])->first()->id,
])->first();
$user->password = Hash::make($valid['passAdmin']);
$user->save();
break;
case 'passOllas':
$user = User::where([
'grupo_de_compra_id' => $grupoDeCompra->id,
'role_id' => UserRole::where(['nombre' => 'ollas'])->first()->id,
])->first();
$user->password = Hash::make($valid['passOllas']);
$user->save();
break;
default:
break;
}
$grupoDeCompra->nombre = $request['nombre'];
$grupoDeCompra->save();
}
if ($request["region"]) {
$grupoDeCompra->region = $request['region'];
$grupoDeCompra->save();
}
if ($request["passBario"]) {
$user = User::where([
'grupo_de_compra_id' => $grupoDeCompra->id,
'role_id' => UserRole::where(['nombre' => 'barrio'])->first()->id,
]);
$user->password = Hash::make($request['passBario']);
$user->save();
}
if ($request["passAdmin"]) {
$user = User::where([
'grupo_de_compra_id' => $grupoDeCompra->id,
'role_id' => UserRole::where(['nombre' => 'admin_barrio'])->first()->id,
]);
$user->password = Hash::make($request['passAdmin']);
$user->save();
}
if ($request["passOllas"]) {
$user = User::where([
'grupo_de_compra_id' => $grupoDeCompra->id,
'role_id' => UserRole::where(['nombre' => 'ollas'])->first()->id,
]);
$user->password = Hash::make($request['passOllas']);
$user->save();
}
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
*/
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 DropdownDescargar from "../DropdownDescargar.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 {
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: {
...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>
<template>
<div>
<modal-barrio v-if="grupo_de_compra_actual"/>
<dropdown-descargar/>
<modal-barrio v-if="grupo_de_compra_actual || grupo_de_compra_nuevo"/>
<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/>
</div>
</template>

View file

@ -3,7 +3,7 @@
<div class="modal-background"></div>
<div class="modal-card">
<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>
</header>
<section class="modal-card-body">
@ -40,7 +40,7 @@
</section>
<footer class="modal-card-foot is-justify-content-right">
<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>
</div>
</div>
@ -62,13 +62,32 @@ export default {
},
computed: {
...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: {
...mapMutations("comisiones", ["seleccionarGrupoDeCompra"]),
...mapMutations('ui', ["toggleModalBarrio"]),
...mapActions("comisiones", ["modificarBarrio"]),
...mapActions('ui', ["toast"]),
...mapActions("comisiones", ["modificarBarrio", "crearBarrio"]),
...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() {
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;
@ -80,11 +99,10 @@ export default {
passAdmin: this.passAdmin,
passOllas: this.passOllas,
})
this.cerrar();
},
cerrar() {
this.toggleModalBarrio();
this.seleccionarGrupoDeCompra(false);
this.seleccionarGrupoDeCompra({ grupoDeCompra: false });
},
},
mounted() {

View file

@ -5,6 +5,7 @@ const state = {
grupos_de_compra: [],
parametros: [],
grupo_de_compra_actual: undefined,
grupo_de_compra_nuevo: false,
};
const mutations = {
@ -36,7 +37,15 @@ const mutations = {
state.grupos_de_compra[i].nombre = nombre;
if (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 = {
@ -86,7 +95,7 @@ const actions = {
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 {
const data = {
nombre: nombre,
@ -102,6 +111,16 @@ const actions = {
console.log(error);
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::post('/comisiones/saldos', 'ComisionesController@cargarSaldos')->name('comisiones.saldos');
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::get('/comisiones/pedidos/{gdc}', 'AdminController@exportarPedidoACSV')->name('comisiones.pedidos.descargar.grupoDeCompra');
Route::get('/comisiones/pedidos/{gdc}/ollas', 'AdminController@exportarPedidoOllasACSV')->name('comisiones.pedidos.ollas.grupoDeCompra');