Compare commits

...

8 commits

10 changed files with 51 additions and 61 deletions

View file

@ -17,7 +17,7 @@ class CsvHelper
* @throws Exception * @throws Exception
*/ */
public static function getRecords($filePath, $message): Iterator { public static function getRecords($filePath, $message): Iterator {
$csv = Reader::createFromPath(storage_path($filePath)); $csv = Reader::createFromPath($filePath);
try { try {
$csv->setDelimiter("|"); $csv->setDelimiter("|");
$csv->setEnclosure("'"); $csv->setEnclosure("'");

View file

@ -31,7 +31,7 @@ class TransporteHelper
->pluck('path') ->pluck('path')
->first(); ->first();
$registros = CsvHelper::getRecords($ultimaCanasta, "No se encontró la ultima canasta."); $registros = CsvHelper::getRecords(storage_path($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)

View file

@ -39,6 +39,6 @@ class GrupoDeCompraController extends Controller
]); ]);
$grupoDeCompra = GrupoDeCompra::find($gdc); $grupoDeCompra = GrupoDeCompra::find($gdc);
$grupoDeCompra->setSaldo($valid['saldo']); $grupoDeCompra->setSaldo($valid['saldo']);
return new GrupoDeCompraResource($grupoDeCompra); return response()->noContent();
} }
} }

View file

@ -5,12 +5,12 @@ namespace App\Http\Controllers;
use App\GrupoDeCompra; use App\GrupoDeCompra;
use App\Helpers\CanastaHelper; use App\Helpers\CanastaHelper;
use App\Helpers\CsvHelper; use App\Helpers\CsvHelper;
use App\Http\Resources\GrupoDeCompraResource;
use App\Producto; use App\Producto;
use Illuminate\Http\JsonResponse; use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use League\Csv\Exception; use League\Csv\Exception;
use Symfony\Component\HttpFoundation\BinaryFileResponse; use Symfony\Component\HttpFoundation\BinaryFileResponse;
use League\Csv\Reader;
class ComisionesController class ComisionesController
{ {
@ -65,7 +65,7 @@ class ComisionesController
$nombre = CanastaHelper::guardarCanasta($request->file('data'), self::CANASTAS_PATH); $nombre = CanastaHelper::guardarCanasta($request->file('data'), self::CANASTAS_PATH);
try { try {
CanastaHelper::cargarCanasta(self::CANASTAS_PATH . $nombre); CanastaHelper::cargarCanasta(storage_path(self::CANASTAS_PATH . $nombre));
} catch (Exception $e) { } catch (Exception $e) {
return response()->json(['message' => $e->getMessage()], 500); return response()->json(['message' => $e->getMessage()], 500);
} }
@ -102,8 +102,6 @@ class ComisionesController
->update(['saldo' => $saldo]); ->update(['saldo' => $saldo]);
} }
return response()->json([ return response()->json(GrupoDeCompraResource::collection(GrupoDeCompra::all()));
'message' => 'Saldos cargados exitosamente',
]);
} }
} }

View file

@ -28,7 +28,7 @@ class GrupoDeCompraResource extends JsonResource
'total_de_pedido' => number_format($this->totalDePedido(),2), 'total_de_pedido' => number_format($this->totalDePedido(),2),
'total_a_transferir' => number_format($this->totalATransferir(),2), 'total_a_transferir' => number_format($this->totalATransferir(),2),
'total_transporte' => number_format($this->totalTransporte()), 'total_transporte' => number_format($this->totalTransporte()),
'cantidad_transnumber_formatporte' => number_format($this->cantidadTransporte()), 'cantidad_transporte' => number_format($this->cantidadTransporte()),
]; ];
} }
} }

View file

@ -15,7 +15,7 @@ class AgregarSaldosABarrios extends Migration
{ {
// Agregar columna 'saldo' a la tabla 'grupos_de_compra' // Agregar columna 'saldo' a la tabla 'grupos_de_compra'
Schema::table('grupos_de_compra', function (Blueprint $table) { Schema::table('grupos_de_compra', function (Blueprint $table) {
$table->double('saldo', 10, 2); $table->double('saldo', 10, 2)->default(0);
}); });
} }

View file

@ -15,6 +15,6 @@ class CanastaSeeder extends Seeder
*/ */
public function run() public function run()
{ {
CanastaHelper::cargarCanasta(self::ARCHIVO_DEFAULT); CanastaHelper::cargarCanasta(resource_path(self::ARCHIVO_DEFAULT));
} }
} }

View file

@ -17,7 +17,7 @@ class GrupoDeCompraSeeder extends Seeder
*/ */
public function run() public function run()
{ {
$registros = CsvHelper::getRecords('csv/barrios.csv', 'No se pudo leer la planilla de barrios.'); $registros = CsvHelper::getRecords(resource_path('csv/barrios.csv'), 'No se pudo leer la planilla de barrios.');
$gdcToInsert = []; $gdcToInsert = [];
$usersToInsert = []; $usersToInsert = [];
$roles = UserRole::where('nombre', 'barrio')->orWhere('nombre', 'admin_barrio')->get(); $roles = UserRole::where('nombre', 'barrio')->orWhere('nombre', 'admin_barrio')->get();

View file

@ -14,15 +14,20 @@ export default {
}, },
methods: { methods: {
...mapActions('ui',["toast"]), ...mapActions('ui',["toast"]),
...mapActions('comisiones', ['setSaldo']), ...mapActions('comisiones', ['setSaldo', 'cargarSaldos']),
async confirmar_saldo(gdc_id) { async confirmar_saldo(gdc_id) {
var saldo = this.getSaldo(gdc_id);
await this.setSaldo({ await this.setSaldo({
gdc_id: gdc_id, gdc_id: gdc_id,
saldo: saldo, saldo: this.getSaldo(gdc_id),
}); });
this.saldo_modificado[gdc_id] = false; this.saldo_modificado[gdc_id] = false;
await this.getGruposDeCompra(); },
async archivoSubido(event) {
event.component.cargando = true;
const formData = new FormData();
formData.append('data',event.archivo);
await this.cargarSaldos(formData);
event.component.cargando = false;
}, },
saldoModificado(gdc_id) { saldoModificado(gdc_id) {
this.saldo_modificado[gdc_id] = true; this.saldo_modificado[gdc_id] = true;
@ -31,35 +36,8 @@ export default {
return gdc_id in this.saldo_modificado && this.saldo_modificado[gdc_id]; return gdc_id in this.saldo_modificado && this.saldo_modificado[gdc_id];
}, },
getSaldo(gdc_id) { getSaldo(gdc_id) {
for (var i = 0; i < this.grupos_de_compra.length; i++) { const barrio = this.grupos_de_compra.find(gdc => gdc.id === gdc_id);
if (this.grupos_de_compra[i].id == gdc_id) { return barrio.saldo;
return this.grupos_de_compra[i].saldo;
}
}
return 0;
},
async saldosSubido(event) {
var archivo = event.archivo;
if (archivo.type === "text/csv") {
const formData = new FormData();
formData.append("data", archivo);
try {
const response = await axios.post("/comisiones/saldos", formData, {
headers: {
"Content-Type": "multipart/form-data",
},
});
this.getGruposDeCompra();
this.toast({ mensaje: (response.data.message || "Canasta cargada exitosamente") });
} catch (error) {
console.log(error);
this.toast({ mensaje: (error.response?.data?.message || "Hubo errores.") });
}
event.component.cargando = false;
} else {
this.toast("El archivo debe ser .CSV");
event.component.cargando = false;
}
}, },
toggleSaldosFileDialog() { toggleSaldosFileDialog() {
this.show_saldos_file_dialog = !this.show_saldos_file_dialog; this.show_saldos_file_dialog = !this.show_saldos_file_dialog;
@ -98,12 +76,12 @@ export default {
<article class="message is-danger mt-2"> <article class="message is-danger mt-2">
<div class="message-body"> <div class="message-body">
<div class="content"> <div class="content">
Cargar un archivo de saldos s&oacute;lo reemplazar&aacute; los saldos de los barrios presentes en la tabla. Al cargar un archivo, se reemplazaran los saldos de los barrios que éste contenga, el resto quedará sin cambiar.
</div> </div>
</div> </div>
</article> </article>
</div> </div>
<input-file-button text="Subir archivo" @archivo-subido="saldosSubido" /> <input-file-button text="Subir archivo" @archivo-subido="archivoSubido" />
</div> </div>
</article> </article>
</div> </div>

View file

@ -8,14 +8,10 @@ const mutations = {
setGruposDeCompra(state, { data }) { setGruposDeCompra(state, { data }) {
state.grupos_de_compra = data; state.grupos_de_compra = data;
}, },
setGrupoDeCompra(state, gdc) { setSaldo(state, { gdc_id, saldo }) {
for (var i = 0; i < state.grupos_de_compra.length; i++) { const barrio = state.grupos_de_compra.find(gdc => gdc.id === gdc_id);
if (state.grupos_de_compra[i].id == gdc.id) { const i = state.grupos_de_compra.indexOf(barrio);
state.grupos_de_compra[i] = gdc; state.grupos_de_compra[i].saldo = saldo;
return;
}
}
state.grupos_de_compra.push(gdc);
}, },
}; };
@ -24,12 +20,30 @@ const actions = {
const response = await axios.get('/api/grupos-de-compra'); const response = await axios.get('/api/grupos-de-compra');
commit('setGruposDeCompra', response.data); commit('setGruposDeCompra', response.data);
}, },
async setSaldo({ commit }, { gdc_id, saldo }) { async setSaldo({ commit, dispatch }, { gdc_id, saldo }) {
const response = await axios.post( try {
await axios.post(
"api/grupos-de-compra/" + gdc_id + "/saldo", "api/grupos-de-compra/" + gdc_id + "/saldo",
{ saldo: saldo } { saldo: saldo }
); );
commit('setGrupoDeCompra', response.data.data); commit('setSaldo', { gdc_id: gdc_id, saldo: saldo });
dispatch("ui/toast", { mensaje: 'Saldo modificado con éxito' }, { root: true });
} catch (error) {
}
},
async cargarSaldos({ commit, dispatch }, formData) {
try {
const response = await axios.post("/comisiones/saldos", formData, {
headers: {
"Content-Type": "multipart/form-data",
},
});
commit('setGruposDeCompra', response);
dispatch("ui/toast", { mensaje: 'Saldos cargados con éxito' }, { root: true });
} catch (error) {
console.log(error);
dispatch("ui/error", { error: error }, { root: true });
}
}, },
}; };