Compare commits
10 commits
c514569acd
...
5be87b5c26
Author | SHA1 | Date | |
---|---|---|---|
5be87b5c26 | |||
670bb39e75 | |||
1498b67200 | |||
a7096e7dc0 | |||
422be13c51 | |||
0e63e795e4 | |||
37cdbe5480 | |||
de635d1a82 | |||
9f0319fe48 | |||
8928fb2842 |
13 changed files with 158 additions and 69 deletions
|
@ -26,7 +26,8 @@ class CanastaHelper
|
||||||
$log = CanastaLog::where('descripcion', self::CANASTA_CARGADA)
|
$log = CanastaLog::where('descripcion', self::CANASTA_CARGADA)
|
||||||
->orderBy('created_at', 'desc')
|
->orderBy('created_at', 'desc')
|
||||||
->first();
|
->first();
|
||||||
$nombre = str_replace("csv/canastas/", "", $log->path);
|
$nombre = str_replace(storage_path(), "", $log->path);
|
||||||
|
$nombre = str_replace("/csv/canastas/", "", $nombre);
|
||||||
$result["nombre"] = str_replace(".csv", "", $nombre);
|
$result["nombre"] = str_replace(".csv", "", $nombre);
|
||||||
$result["fecha"] = $log->created_at;
|
$result["fecha"] = $log->created_at;
|
||||||
return $result;
|
return $result;
|
||||||
|
@ -39,9 +40,10 @@ class CanastaHelper
|
||||||
|
|
||||||
$nombre = $data->getClientOriginalName();
|
$nombre = $data->getClientOriginalName();
|
||||||
|
|
||||||
$data->move(storage_path($path), $nombre);
|
$storage_path = storage_path($path);
|
||||||
|
$data->move($storage_path, $nombre);
|
||||||
|
|
||||||
self::log($path . $nombre, self::ARCHIVO_SUBIDO);
|
self::log($storage_path . $nombre, self::ARCHIVO_SUBIDO);
|
||||||
|
|
||||||
return $nombre;
|
return $nombre;
|
||||||
}
|
}
|
||||||
|
|
|
@ -31,7 +31,7 @@ class TransporteHelper
|
||||||
->pluck('path')
|
->pluck('path')
|
||||||
->first();
|
->first();
|
||||||
|
|
||||||
$registros = CsvHelper::getRecords(storage_path($ultimaCanasta), "No se encontró la ultima canasta.");
|
$registros = CsvHelper::getRecords($ultimaCanasta, "No se encontró la ultima canasta.");
|
||||||
$error = 'No hay fila de tipo T en la planilla: ' . $ultimaCanasta;
|
$error = 'No hay fila de tipo T en la planilla: ' . $ultimaCanasta;
|
||||||
|
|
||||||
foreach ($registros as $key => $registro)
|
foreach ($registros as $key => $registro)
|
||||||
|
|
|
@ -4,9 +4,8 @@ namespace App\Http\Controllers\Api;
|
||||||
|
|
||||||
use App\GrupoDeCompra;
|
use App\GrupoDeCompra;
|
||||||
use App\Http\Controllers\Controller;
|
use App\Http\Controllers\Controller;
|
||||||
use App\Http\Resources\GrupoDeCompraReducido;
|
use App\Http\Resources\GrupoDeCompraComisionesResource;
|
||||||
use App\Http\Resources\GrupoDeCompraResource;
|
use App\Http\Resources\GrupoDeCompraResource;
|
||||||
use http\Env\Request;
|
|
||||||
|
|
||||||
class GrupoDeCompraController extends Controller
|
class GrupoDeCompraController extends Controller
|
||||||
{
|
{
|
||||||
|
@ -41,4 +40,9 @@ class GrupoDeCompraController extends Controller
|
||||||
$grupoDeCompra->setSaldo($valid['saldo']);
|
$grupoDeCompra->setSaldo($valid['saldo']);
|
||||||
return response()->noContent();
|
return response()->noContent();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function saldos()
|
||||||
|
{
|
||||||
|
return GrupoDeCompraComisionesResource::collection(GrupoDeCompra::all());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -77,7 +77,7 @@ class ComisionesController
|
||||||
|
|
||||||
public function descargarCanastaEjemplo(): BinaryFileResponse
|
public function descargarCanastaEjemplo(): BinaryFileResponse
|
||||||
{
|
{
|
||||||
$file = storage_path('csv/productos.csv');
|
$file = resource_path('csv/productos.csv');
|
||||||
return response()->download($file);
|
return response()->download($file);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
namespace App\Http\Controllers;
|
namespace App\Http\Controllers;
|
||||||
|
|
||||||
use App\GrupoDeCompra;
|
use App\GrupoDeCompra;
|
||||||
use App\Http\Resources\GrupoDeCompraReducido;
|
use App\Http\Resources\GrupoDeCompraPedidoResource;
|
||||||
use App\Http\Resources\GrupoDeCompraResource;
|
use App\Http\Resources\GrupoDeCompraResource;
|
||||||
use App\UserRole;
|
use App\UserRole;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
|
@ -22,7 +22,7 @@ class UserController extends Controller
|
||||||
$grupo_de_compra = GrupoDeCompra::find($user->grupo_de_compra_id);
|
$grupo_de_compra = GrupoDeCompra::find($user->grupo_de_compra_id);
|
||||||
switch (UserRole::findOrFail($user->role_id)->nombre) {
|
switch (UserRole::findOrFail($user->role_id)->nombre) {
|
||||||
case 'barrio':
|
case 'barrio':
|
||||||
$result['grupo_de_compra'] = new GrupoDeCompraReducido($grupo_de_compra);
|
$result['grupo_de_compra'] = new GrupoDeCompraPedidoResource($grupo_de_compra);
|
||||||
break;
|
break;
|
||||||
case 'admin_barrio':
|
case 'admin_barrio':
|
||||||
$result['grupo_de_compra'] = new GrupoDeCompraResource($grupo_de_compra);
|
$result['grupo_de_compra'] = new GrupoDeCompraResource($grupo_de_compra);
|
||||||
|
|
22
app/Http/Resources/GrupoDeCompraComisionesResource.php
Normal file
22
app/Http/Resources/GrupoDeCompraComisionesResource.php
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Resources;
|
||||||
|
|
||||||
|
use Illuminate\Http\Resources\Json\JsonResource;
|
||||||
|
|
||||||
|
class GrupoDeCompraComisionesResource extends JsonResource
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Transform the resource into an array.
|
||||||
|
*
|
||||||
|
* @param \Illuminate\Http\Request $request
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function toArray($request): array {
|
||||||
|
return [
|
||||||
|
'id' => $this->id,
|
||||||
|
'nombre' => $this->nombre,
|
||||||
|
'saldo' => $this->saldo,
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
|
@ -4,7 +4,7 @@ namespace App\Http\Resources;
|
||||||
|
|
||||||
use Illuminate\Http\Resources\Json\JsonResource;
|
use Illuminate\Http\Resources\Json\JsonResource;
|
||||||
|
|
||||||
class GrupoDeCompraReducido extends JsonResource
|
class GrupoDeCompraPedidoResource extends JsonResource
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* Transform the resource into an array.
|
* Transform the resource into an array.
|
|
@ -50,14 +50,10 @@ export default {
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
...mapActions('comisiones', ['getGruposDeCompra']),
|
|
||||||
setSeccionActiva(tabId) {
|
setSeccionActiva(tabId) {
|
||||||
this.tabActiva = tabId;
|
this.tabActiva = tabId;
|
||||||
this.seccionActiva = tabId + "-seccion";
|
this.seccionActiva = tabId + "-seccion";
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
async mounted() {
|
|
||||||
await this.getGruposDeCompra();
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
71
resources/js/components/comisiones/saldos/SaldoRow.vue
Normal file
71
resources/js/components/comisiones/saldos/SaldoRow.vue
Normal file
|
@ -0,0 +1,71 @@
|
||||||
|
<script>
|
||||||
|
import { mapActions, mapGetters, mapState } from "vuex";
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: "SaldoRow",
|
||||||
|
props: {
|
||||||
|
grupo_de_compra: {
|
||||||
|
type: Object,
|
||||||
|
required: true,
|
||||||
|
}
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
saldoControl: 0,
|
||||||
|
inputSaldoInteractuado: false,
|
||||||
|
};
|
||||||
|
},
|
||||||
|
mounted() {
|
||||||
|
this.saldoControl = this.grupo_de_compra.saldo;
|
||||||
|
},
|
||||||
|
watch: {
|
||||||
|
lastFetch() {
|
||||||
|
this.saldoControl = this.grupo_de_compra.saldo;
|
||||||
|
},
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
...mapActions("comisiones", ["setSaldo"]),
|
||||||
|
async confirmarSaldo() {
|
||||||
|
await this.setSaldo({
|
||||||
|
gdc_id: this.grupo_de_compra.id,
|
||||||
|
saldo: this.saldoControl,
|
||||||
|
});
|
||||||
|
this.inputSaldoInteractuado = false;
|
||||||
|
},
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
...mapState("comisiones", ["lastFetch"]),
|
||||||
|
...mapGetters("comisiones", ["saldo"]),
|
||||||
|
saldoModificado() {
|
||||||
|
return Number.parseFloat(this.saldo(this.grupo_de_compra.id)) !== Number.parseFloat(this.saldoControl);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<tr>
|
||||||
|
<th>{{ grupo_de_compra.nombre }}</th>
|
||||||
|
<td>
|
||||||
|
<input :id="`saldo-input-${grupo_de_compra.id}`"
|
||||||
|
v-model="saldoControl"
|
||||||
|
class="input is-small"
|
||||||
|
type="number"
|
||||||
|
style="text-align: center"
|
||||||
|
@input="inputSaldoInteractuado = true">
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<button :disabled="!(inputSaldoInteractuado && saldoModificado)"
|
||||||
|
class="button is-small is-success ml-1"
|
||||||
|
@click="confirmarSaldo">
|
||||||
|
<span class="icon">
|
||||||
|
<i class="fas fa-check"/>
|
||||||
|
</span>
|
||||||
|
</button>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
|
||||||
|
</style>
|
|
@ -1,27 +1,20 @@
|
||||||
<script>
|
<script>
|
||||||
import InputFileButton from "../../comunes/InputFileButton.vue";
|
import InputFileButton from "../../comunes/InputFileButton.vue";
|
||||||
import { mapActions, mapState } from "vuex";
|
import { mapActions } from "vuex";
|
||||||
|
import TablaSaldos from "./TablaSaldos.vue";
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: "SaldosSeccion",
|
name: "SaldosSeccion",
|
||||||
components: { InputFileButton },
|
components: { TablaSaldos, InputFileButton },
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
archivo: undefined,
|
archivo: undefined,
|
||||||
saldo_modificado: {},
|
|
||||||
show_saldos_file_dialog: true,
|
show_saldos_file_dialog: true,
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
...mapActions('ui',["toast"]),
|
...mapActions('ui',["toast"]),
|
||||||
...mapActions('comisiones', ['setSaldo', 'cargarSaldos']),
|
...mapActions('comisiones', ['cargarSaldos']),
|
||||||
async confirmar_saldo(gdc_id) {
|
|
||||||
await this.setSaldo({
|
|
||||||
gdc_id: gdc_id,
|
|
||||||
saldo: this.getSaldo(gdc_id),
|
|
||||||
});
|
|
||||||
this.saldo_modificado[gdc_id] = false;
|
|
||||||
},
|
|
||||||
async archivoSubido(event) {
|
async archivoSubido(event) {
|
||||||
event.component.cargando = true;
|
event.component.cargando = true;
|
||||||
const formData = new FormData();
|
const formData = new FormData();
|
||||||
|
@ -29,23 +22,10 @@ export default {
|
||||||
await this.cargarSaldos(formData);
|
await this.cargarSaldos(formData);
|
||||||
event.component.cargando = false;
|
event.component.cargando = false;
|
||||||
},
|
},
|
||||||
saldoModificado(gdc_id) {
|
|
||||||
this.saldo_modificado[gdc_id] = true;
|
|
||||||
},
|
|
||||||
isSaldoModificado(gdc_id) {
|
|
||||||
return gdc_id in this.saldo_modificado && this.saldo_modificado[gdc_id];
|
|
||||||
},
|
|
||||||
getSaldo(gdc_id) {
|
|
||||||
const barrio = this.grupos_de_compra.find(gdc => gdc.id === gdc_id);
|
|
||||||
return barrio.saldo;
|
|
||||||
},
|
|
||||||
toggleSaldosFileDialog() {
|
toggleSaldosFileDialog() {
|
||||||
this.show_saldos_file_dialog = !this.show_saldos_file_dialog;
|
this.show_saldos_file_dialog = !this.show_saldos_file_dialog;
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
computed: {
|
|
||||||
...mapState('comisiones', ['grupos_de_compra']),
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
@ -86,39 +66,11 @@ export default {
|
||||||
</article>
|
</article>
|
||||||
</div>
|
</div>
|
||||||
<div class="column">
|
<div class="column">
|
||||||
<table class="table container">
|
<tabla-saldos/>
|
||||||
<thead>
|
|
||||||
<tr>
|
|
||||||
<th>Barrio</th>
|
|
||||||
<th>Saldo</th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
<tbody>
|
|
||||||
<tr v-for="gdc in grupos_de_compra">
|
|
||||||
<th>{{ gdc.nombre }}</th>
|
|
||||||
<td>
|
|
||||||
<input id="cantidad"
|
|
||||||
v-model="gdc.saldo"
|
|
||||||
class="input is-small"
|
|
||||||
type="number"
|
|
||||||
style="text-align: center"
|
|
||||||
@input="saldoModificado(gdc.id)">
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
<button :disabled="!isSaldoModificado(gdc.id)" class="button is-small is-success ml-1" @click="confirmar_saldo(gdc.id)">
|
|
||||||
<span class="icon">
|
|
||||||
<i class="fas fa-check"></i>
|
|
||||||
</span>
|
|
||||||
</button>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<style scoped>
|
<style scoped>
|
||||||
|
|
||||||
</style>
|
</style>
|
||||||
|
|
38
resources/js/components/comisiones/saldos/TablaSaldos.vue
Normal file
38
resources/js/components/comisiones/saldos/TablaSaldos.vue
Normal file
|
@ -0,0 +1,38 @@
|
||||||
|
<script>
|
||||||
|
import { mapActions, mapState } from "vuex";
|
||||||
|
import SaldoRow from "./SaldoRow.vue";
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: "TablaSaldos",
|
||||||
|
components: { SaldoRow },
|
||||||
|
async mounted() {
|
||||||
|
await this.getGruposDeCompra();
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
...mapActions("comisiones", ["getGruposDeCompra"]),
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
...mapState("comisiones", ["grupos_de_compra"]),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<table class="table container">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>Barrio</th>
|
||||||
|
<th>Saldo</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<saldo-row v-for="(gdc,index) in grupos_de_compra"
|
||||||
|
:grupo_de_compra="gdc"
|
||||||
|
:key="index"/>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
|
||||||
|
</style>
|
7
resources/js/store/modules/comisiones.js
vendored
7
resources/js/store/modules/comisiones.js
vendored
|
@ -1,12 +1,14 @@
|
||||||
import axios from "axios";
|
import axios from "axios";
|
||||||
|
|
||||||
const state = {
|
const state = {
|
||||||
|
lastFetch: undefined,
|
||||||
grupos_de_compra: [],
|
grupos_de_compra: [],
|
||||||
};
|
};
|
||||||
|
|
||||||
const mutations = {
|
const mutations = {
|
||||||
setGruposDeCompra(state, { data }) {
|
setGruposDeCompra(state, { data }) {
|
||||||
state.grupos_de_compra = data;
|
state.grupos_de_compra = data;
|
||||||
|
state.lastFetch = new Date();
|
||||||
},
|
},
|
||||||
setSaldo(state, { gdc_id, saldo }) {
|
setSaldo(state, { gdc_id, saldo }) {
|
||||||
const barrio = state.grupos_de_compra.find(gdc => gdc.id === gdc_id);
|
const barrio = state.grupos_de_compra.find(gdc => gdc.id === gdc_id);
|
||||||
|
@ -17,7 +19,7 @@ const mutations = {
|
||||||
|
|
||||||
const actions = {
|
const actions = {
|
||||||
async getGruposDeCompra({ commit }) {
|
async getGruposDeCompra({ commit }) {
|
||||||
const response = await axios.get('/api/grupos-de-compra');
|
const response = await axios.get('/api/grupos-de-compra/saldos');
|
||||||
commit('setGruposDeCompra', response.data);
|
commit('setGruposDeCompra', response.data);
|
||||||
},
|
},
|
||||||
async setSaldo({ commit, dispatch }, { gdc_id, saldo }) {
|
async setSaldo({ commit, dispatch }, { gdc_id, saldo }) {
|
||||||
|
@ -29,6 +31,7 @@ const actions = {
|
||||||
commit('setSaldo', { gdc_id: gdc_id, saldo: saldo });
|
commit('setSaldo', { gdc_id: gdc_id, saldo: saldo });
|
||||||
dispatch("ui/toast", { mensaje: 'Saldo modificado con éxito' }, { root: true });
|
dispatch("ui/toast", { mensaje: 'Saldo modificado con éxito' }, { root: true });
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
|
dispatch("ui/error", { error: error }, { root: true });
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
async cargarSaldos({ commit, dispatch }, formData) {
|
async cargarSaldos({ commit, dispatch }, formData) {
|
||||||
|
@ -48,7 +51,7 @@ const actions = {
|
||||||
};
|
};
|
||||||
|
|
||||||
const getters = {
|
const getters = {
|
||||||
getSaldo() {
|
saldo() {
|
||||||
return (gdc_id) => state.grupos_de_compra.find(gdc => gdc.id === gdc_id)?.saldo ?? 0;
|
return (gdc_id) => state.grupos_de_compra.find(gdc => gdc.id === gdc_id)?.saldo ?? 0;
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
|
@ -21,6 +21,7 @@ Route::middleware('api')->group(function() {
|
||||||
|
|
||||||
Route::prefix('grupos-de-compra')->group(function() {
|
Route::prefix('grupos-de-compra')->group(function() {
|
||||||
Route::get('/', 'Api\GrupoDeCompraController@index');
|
Route::get('/', 'Api\GrupoDeCompraController@index');
|
||||||
|
Route::get('/saldos','Api\GrupoDeCompraController@saldos');
|
||||||
Route::get('/{grupoDeCompra}', 'Api\GrupoDeCompraController@show');
|
Route::get('/{grupoDeCompra}', 'Api\GrupoDeCompraController@show');
|
||||||
Route::post('/{gdc}/devoluciones', 'Api\GrupoDeCompraController@toggleDevoluciones');
|
Route::post('/{gdc}/devoluciones', 'Api\GrupoDeCompraController@toggleDevoluciones');
|
||||||
Route::post('/{gdc}/saldo', 'Api\GrupoDeCompraController@setSaldo');
|
Route::post('/{gdc}/saldo', 'Api\GrupoDeCompraController@setSaldo');
|
||||||
|
|
Loading…
Add table
Reference in a new issue