Compare commits
47 commits
0d5551406a
...
896baf18dd
Author | SHA1 | Date | |
---|---|---|---|
![]() |
896baf18dd | ||
![]() |
1a961c0732 | ||
![]() |
6005cc01b7 | ||
![]() |
323b77f6dc | ||
![]() |
f572b5a6bc | ||
![]() |
733e13ff66 | ||
![]() |
f8484959d6 | ||
![]() |
cf82e1e21e | ||
![]() |
b76f114ab0 | ||
![]() |
f67232f55c | ||
![]() |
85f0a5a06b | ||
cf77fc5e61 | |||
![]() |
3e426d088d | ||
![]() |
4da7ff2431 | ||
![]() |
4906d2bb4d | ||
![]() |
69b244d074 | ||
![]() |
155a86975c | ||
![]() |
5c134989d2 | ||
![]() |
3f34483fd5 | ||
![]() |
f4d269721a | ||
a88e7ffb87 | |||
![]() |
60e8725ac3 | ||
![]() |
c0dd9c1124 | ||
![]() |
8284b793d3 | ||
be4ea4906a | |||
![]() |
f0a1a68144 | ||
![]() |
098b23b864 | ||
b1f1444a0c | |||
![]() |
4939dbbd83 | ||
![]() |
25d5830462 | ||
![]() |
ac13e0a3f2 | ||
![]() |
1aa112aac2 | ||
![]() |
11cd073a51 | ||
![]() |
a3a4ecdd33 | ||
![]() |
401c0e888f | ||
![]() |
53a203b067 | ||
c06a3ed38c | |||
eda9d5ce6c | |||
![]() |
4160f72615 | ||
![]() |
498c550a15 | ||
![]() |
8502fb72d9 | ||
![]() |
72bbaac9a6 | ||
![]() |
ee916afdfd | ||
f2dee0359f | |||
![]() |
bcb1e1b2c8 | ||
![]() |
aa416b7ee4 | ||
![]() |
b2e84204ce |
49 changed files with 17931 additions and 1260 deletions
BIN
.docker-compose.yml.swp
Normal file
BIN
.docker-compose.yml.swp
Normal file
Binary file not shown.
2
.gitignore
vendored
2
.gitignore
vendored
|
@ -10,3 +10,5 @@ Homestead.json
|
|||
Homestead.yaml
|
||||
npm-debug.log
|
||||
yarn-error.log
|
||||
.idea
|
||||
/resources/csv/exports/*.csv
|
||||
|
|
5
.idea/pedi2.iml
generated
5
.idea/pedi2.iml
generated
|
@ -78,6 +78,11 @@
|
|||
<excludeFolder url="file://$MODULE_DIR$/vendor/dragonmantank/cron-expression" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/psr/http-message" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/polyfill-php80" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/setasign/fpdi" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/paragonie/random_compat" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/mpdf/mpdf" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/php-http/message-factory" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/myclabs/deep-copy" />
|
||||
</content>
|
||||
<orderEntry type="inheritedJdk" />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
|
|
7
.idea/php.xml
generated
7
.idea/php.xml
generated
|
@ -75,6 +75,13 @@
|
|||
<path value="$PROJECT_DIR$/vendor/dragonmantank/cron-expression" />
|
||||
<path value="$PROJECT_DIR$/vendor/psr/http-message" />
|
||||
<path value="$PROJECT_DIR$/vendor/symfony/polyfill-php80" />
|
||||
<path value="$PROJECT_DIR$/vendor/rmccue/requests" />
|
||||
<path value="$PROJECT_DIR$/vendor/prexview/prexview" />
|
||||
<path value="$PROJECT_DIR$/vendor/setasign/fpdi" />
|
||||
<path value="$PROJECT_DIR$/vendor/paragonie/random_compat" />
|
||||
<path value="$PROJECT_DIR$/vendor/mpdf/mpdf" />
|
||||
<path value="$PROJECT_DIR$/vendor/php-http/message-factory" />
|
||||
<path value="$PROJECT_DIR$/vendor/myclabs/deep-copy" />
|
||||
</include_path>
|
||||
</component>
|
||||
<component name="PhpProjectSharedConfiguration" php_language_level="7.2">
|
||||
|
|
|
@ -12,7 +12,8 @@ RUN apt-get update && apt-get install -y \
|
|||
libonig-dev \
|
||||
libxml2-dev \
|
||||
zip \
|
||||
unzip
|
||||
unzip \
|
||||
npm
|
||||
|
||||
# Clear cache
|
||||
RUN apt-get clean && rm -rf /var/lib/apt/lists/*
|
||||
|
|
|
@ -61,6 +61,11 @@ Podés usar el comando `logs` para ver los logs generados por tus servicios:
|
|||
docker-compose logs nginx
|
||||
```
|
||||
|
||||
8. Ejecuta npm para compilar el js y css
|
||||
```bash
|
||||
docker-compose exec app npm run prod
|
||||
```
|
||||
|
||||
## Services description
|
||||
|
||||
### Dockerfile
|
||||
|
|
|
@ -3,16 +3,109 @@
|
|||
namespace App;
|
||||
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
use Mpdf\Mpdf;
|
||||
use League\Csv\CannotInsertRecord;
|
||||
use League\Csv\Writer;
|
||||
use App\Producto;
|
||||
use DB;
|
||||
use League\Csv\Reader;
|
||||
|
||||
class GrupoDeCompra extends Model
|
||||
{
|
||||
public $timestamps = false;
|
||||
protected $fillable = [ "nombre","region","telefono","correo","referente_finanzas","cantidad_de_nucleos"];
|
||||
protected $fillable = [ "nombre","region","telefono","correo","referente_finanzas","cantidad_de_nucleos","fila"];
|
||||
protected $table = 'grupos_de_compra';
|
||||
protected $hidden = ['password'];
|
||||
|
||||
public function subpedidos() {
|
||||
return $this->hasMany('App\Subpedido');
|
||||
}
|
||||
|
||||
|
||||
public function pedidosAprobados() {
|
||||
return $this->subpedidos->where('aprobado',1);
|
||||
}
|
||||
|
||||
public function exportarPlanillasAPdf() {
|
||||
$subpedidos = $this->pedidosAprobados();
|
||||
//generar pdf
|
||||
$mpdf = new Mpdf();
|
||||
foreach ($subpedidos as $subpedido) {
|
||||
$tabla = $subpedido->generarHTML();
|
||||
// agregar la tabla al pdf en una nueva página
|
||||
$mpdf->WriteHTML($tabla);
|
||||
$mpdf->AddPage();
|
||||
}
|
||||
$filename = $this->nombre . '.pdf';
|
||||
// imprimir el pdf
|
||||
$mpdf->Output($filename, "D");
|
||||
}
|
||||
|
||||
//Asume que los productos están gruadados en orden de fila
|
||||
private function obtenerTemplateDeFilasVacias(){
|
||||
$productosFilaID = Producto::productosFilaID();
|
||||
$productosIDNombre = Producto::productosIDNombre();
|
||||
$num_fila = 1;
|
||||
$template = [];
|
||||
foreach ($productosFilaID as $fila => $id) {
|
||||
for ($i = $num_fila; $i < $fila; $i++) {
|
||||
$template[$i] = ["", "0"];
|
||||
}
|
||||
$template[$fila] = [$productosIDNombre[$id], "0"];
|
||||
$num_fila = $fila+1;
|
||||
}
|
||||
$template[$this->obtenerFilaDeBonoTransporte()] = ["Bonos de transporte", 0];
|
||||
return $template;
|
||||
}
|
||||
|
||||
private function obtenerFilaDeBonoTransporte() {
|
||||
$csv = Reader::createFromPath(resource_path('csv/productos.csv'), 'r');
|
||||
$csv->setDelimiter("|");
|
||||
$csv->setEnclosure("'");
|
||||
$registros = $csv->getRecords();
|
||||
|
||||
foreach($registros as $key => $registro)
|
||||
if ($registro[0] == 'T') return $key+1;
|
||||
|
||||
throw new Exception('No hay bono de transporte');
|
||||
}
|
||||
|
||||
private function totalPedidoSinBDT() {
|
||||
$total = 0;
|
||||
foreach ($this->subpedidos as $subpedido) {
|
||||
$total += $subpedido->totalSinBDT();
|
||||
}
|
||||
return $total;
|
||||
}
|
||||
|
||||
private function calcularCantidadBDT() {
|
||||
return ceil($this->totalPedidoSinBDT() / 500);
|
||||
}
|
||||
|
||||
public function exportarPedidoEnCSV(){
|
||||
$productos_en_pedido = DB::table('pedidos_aprobados')->where('grupo_de_compra_id',$this->id)->get()->keyBy('producto_id');
|
||||
|
||||
//si no hay pedidos aprobados, salir
|
||||
if ($productos_en_pedido->count() == 0) { \Log::debug("El grupo de compra ". $this->nombre . " no tiene pedidos aprobados."); return; }
|
||||
$records = $this->obtenerTemplateDeFilasVacias();
|
||||
$productos_id_fila = Producto::productosIdFila();
|
||||
foreach ($productos_en_pedido as $id => $producto_pedido){
|
||||
$fila = $productos_id_fila[$id];
|
||||
$records[$fila][1] = $producto_pedido->cantidad_pedida;
|
||||
}
|
||||
|
||||
$records[$this->obtenerFilaDeBonoTransporte()][1] = $this->calcularCantidadBDT();
|
||||
|
||||
try {
|
||||
$writer = Writer::createFromPath(resource_path('csv/exports/'.$this->nombre.'.csv'), 'w');
|
||||
$writer->insertAll($records);
|
||||
} catch (CannotInsertRecord $e) {
|
||||
var_export($e->getRecords());
|
||||
}
|
||||
}
|
||||
|
||||
public static function exportarTodosLosPedidosEnCSV(){
|
||||
$gdcs=GrupoDeCompra::all();
|
||||
foreach ($gdcs as $gdc){ $gdc->exportarPedidoEnCSV(); }
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -2,7 +2,9 @@
|
|||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use App\GrupoDeCompra;
|
||||
use Illuminate\Http\Request;
|
||||
use Response;
|
||||
|
||||
class AdminController extends Controller
|
||||
{
|
||||
|
@ -14,4 +16,14 @@ class AdminController extends Controller
|
|||
public function index() {
|
||||
return view('auth/admin_subpedidos');
|
||||
}
|
||||
|
||||
public function exportarPlanillasAPdf(GrupoDeCompra $gdc) {
|
||||
return $gdc->exportarPlanillasAPdf();
|
||||
}
|
||||
|
||||
public function exportarPedidoACSV(GrupoDeCompra $gdc) {
|
||||
$gdc->exportarPedidoEnCSV();
|
||||
$file = resource_path('csv/exports/'.$gdc->nombre.'.csv');
|
||||
return response()->download($file);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -6,15 +6,33 @@ use Illuminate\Support\Facades\DB;
|
|||
|
||||
class PedidoController extends Controller
|
||||
{
|
||||
public function generarTablas()
|
||||
public static function generarTablas()
|
||||
{
|
||||
//GENERAR TABLA DE PEDIDOS APROBADOS
|
||||
DB::unprepared("DROP VIEW if exists pedidos_aprobados;
|
||||
CREATE VIEW pedidos_aprobados AS
|
||||
SELECT
|
||||
g.id as grupo_de_compra_id,
|
||||
g.nombre as grupo_de_compra_nombre,
|
||||
g.region as grupo_de_compra_region,
|
||||
pr.id AS producto_id,
|
||||
pr.nombre as producto_nombre,
|
||||
pr.precio as producto_precio,
|
||||
SUM(ps.cantidad) as cantidad_pedida,
|
||||
pr.precio*SUM(ps.cantidad) as total_por_producto
|
||||
FROM grupos_de_compra g
|
||||
JOIN subpedidos s ON (s.grupo_de_compra_id = g.id AND s.aprobado=1)
|
||||
JOIN producto_subpedido ps ON (ps.subpedido_id = s.id)
|
||||
JOIN productos pr ON (pr.id = ps.producto_id)
|
||||
GROUP BY g.id, g.nombre, pr.id, pr.nombre;");
|
||||
|
||||
//GENERAR TABLA GENERAL
|
||||
DB::unprepared("DROP VIEW if exists productos_por_grupo_de_compra;
|
||||
SET @barrios = NULL;
|
||||
SELECT
|
||||
GROUP_CONCAT(DISTINCT CONCAT('MAX(IF(`grupo_de_compra_nombre` = \"', `grupo_de_compra_nombre`,'\", `cantidad_pedida`,NULL)) AS \"',`grupo_de_compra_nombre`,'\"')) INTO @barrios
|
||||
FROM pedidos;
|
||||
SET @sql = CONCAT('CREATE VIEW productos_por_grupo_de_compra AS SELECT producto_nombre, ', @barrios, ' FROM pedidos GROUP BY producto_nombre');
|
||||
FROM pedidos_aprobados;
|
||||
SET @sql = CONCAT('CREATE VIEW productos_por_grupo_de_compra AS SELECT producto_nombre, ', @barrios, ' FROM pedidos_aprobados GROUP BY producto_nombre');
|
||||
PREPARE stmt FROM @sql;
|
||||
EXECUTE stmt;");
|
||||
return "Tabla productos_por_grupo_de_compra generada. " . date('l jS \of F Y h:i:s A');
|
||||
|
|
|
@ -56,6 +56,7 @@ class Kernel extends HttpKernel
|
|||
*/
|
||||
protected $routeMiddleware = [
|
||||
'auth' => \App\Http\Middleware\Authenticate::class,
|
||||
'admin' => \App\Http\Middleware\Admin::class,
|
||||
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
|
||||
'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
|
||||
'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
|
||||
|
|
26
app/Http/Middleware/Admin.php
Normal file
26
app/Http/Middleware/Admin.php
Normal file
|
@ -0,0 +1,26 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Middleware;
|
||||
|
||||
use Closure;
|
||||
use Auth;
|
||||
|
||||
class Admin
|
||||
{
|
||||
/**
|
||||
* Handle an incoming request.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @param \Closure $next
|
||||
* @return mixed
|
||||
*/
|
||||
public function handle($request, Closure $next)
|
||||
{
|
||||
$user = Auth::user();
|
||||
if ($user->is_admin) {
|
||||
return $next($request);
|
||||
} else {
|
||||
return response('Necesitás ser admin para hacer esto', 403);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -17,7 +17,7 @@ class SubpedidoResource extends JsonResource
|
|||
return [
|
||||
'id' => $this->id,
|
||||
'nombre' => $this->nombre,
|
||||
'subtotal_productos' => number_format($this->getSubtotalProductos(),0),
|
||||
'subtotal_productos' => number_format($this->totalSinBDT(),0),
|
||||
'subtotal_bonos' => number_format($this->getSubtotalBonos(),0),
|
||||
'bonos_de_transporte' => $this->cantidadBDT(),
|
||||
'subtotal_bonos_de_transporte' => number_format($this->getSubtotalBDT(),0),
|
||||
|
|
|
@ -32,5 +32,17 @@ class Producto extends Model
|
|||
{
|
||||
return $request->has('paginar') && intval($request->input('paginar')) ? intval($request->input('paginar')) : self::$paginarPorDefecto;
|
||||
}
|
||||
|
||||
public static function productosIDFila() {
|
||||
return Producto::pluck('fila', 'id',)->all();
|
||||
}
|
||||
|
||||
public static function productosFilaID() {
|
||||
return Producto::pluck('id', 'fila',)->all();
|
||||
}
|
||||
|
||||
public static function productosIDNombre() {
|
||||
return Producto::pluck('nombre', 'id',)->all();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -24,7 +24,7 @@ class Subpedido extends Model
|
|||
return $this->productos()->where('bono',1);
|
||||
}
|
||||
|
||||
private function productosSinBonos()
|
||||
public function productosSinBonos()
|
||||
{
|
||||
return $this->productos()->where('bono',false);
|
||||
}
|
||||
|
@ -41,7 +41,7 @@ class Subpedido extends Model
|
|||
}
|
||||
|
||||
//Subtotal de dinero de productos del pedido, sin bonos ni transporte
|
||||
public function getSubtotalProductos()
|
||||
public function totalSinBDT()
|
||||
{
|
||||
return $this->productosSinBonos()->sum('total');
|
||||
}
|
||||
|
@ -49,7 +49,7 @@ class Subpedido extends Model
|
|||
//Cantidad de bonos de transporte
|
||||
public function cantidadBDT()
|
||||
{
|
||||
return ceil($this->getSubtotalProductos() / 500);
|
||||
return ceil($this->totalSinBDT() / 500);
|
||||
}
|
||||
|
||||
//Subtotal de dinero de bonos de transporte
|
||||
|
@ -66,7 +66,7 @@ class Subpedido extends Model
|
|||
|
||||
public function getTotal()
|
||||
{
|
||||
return $this->getSubtotalProductos() + $this->getSubtotalBDT() + $this->getSubtotalBonos();
|
||||
return $this->totalSinBDT() + $this->getSubtotalBDT() + $this->getSubtotalBonos();
|
||||
}
|
||||
|
||||
//Actualiza el pedido, agregando o quitando del subpedido según sea necesario. Debe ser llamado desde el controlador de subpedidos, luego de validar que los parámetros $producto y $cantidad son correctos. También calcula el subtotal por producto.
|
||||
|
@ -90,4 +90,9 @@ class Subpedido extends Model
|
|||
$this->save();
|
||||
}
|
||||
|
||||
public function generarHTML() {
|
||||
$view = view("pdfgen.subpedido_tabla", ["subpedido" => $this]);
|
||||
return $view->render();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -16,7 +16,9 @@
|
|||
"laravel/sanctum": "^2.13",
|
||||
"laravel/tinker": "^2.5",
|
||||
"laravel/ui": "*",
|
||||
"league/csv": "^9.8"
|
||||
"league/csv": "^9.8",
|
||||
"mpdf/mpdf": "^8.1",
|
||||
"prexview/prexview": "^1.1"
|
||||
},
|
||||
"require-dev": {
|
||||
"facade/ignition": "^2.0",
|
||||
|
|
408
composer.lock
generated
408
composer.lock
generated
|
@ -4,7 +4,7 @@
|
|||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
||||
"This file is @generated automatically"
|
||||
],
|
||||
"content-hash": "8389a7c37eb75068185ce61fe4270621",
|
||||
"content-hash": "55c5266672a741b618c9da8a6e272450",
|
||||
"packages": [
|
||||
{
|
||||
"name": "asm89/stack-cors",
|
||||
|
@ -1666,6 +1666,142 @@
|
|||
],
|
||||
"time": "2021-10-01T21:08:31+00:00"
|
||||
},
|
||||
{
|
||||
"name": "mpdf/mpdf",
|
||||
"version": "v8.1.2",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/mpdf/mpdf.git",
|
||||
"reference": "a8a22f4874157e490d41b486053a20bec42e182c"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/mpdf/mpdf/zipball/a8a22f4874157e490d41b486053a20bec42e182c",
|
||||
"reference": "a8a22f4874157e490d41b486053a20bec42e182c",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"ext-gd": "*",
|
||||
"ext-mbstring": "*",
|
||||
"myclabs/deep-copy": "^1.7",
|
||||
"paragonie/random_compat": "^1.4|^2.0|^9.99.99",
|
||||
"php": "^5.6 || ^7.0 || ~8.0.0 || ~8.1.0",
|
||||
"php-http/message-factory": "^1.0",
|
||||
"psr/http-message": "^1.0",
|
||||
"psr/log": "^1.0 || ^2.0",
|
||||
"setasign/fpdi": "^2.1"
|
||||
},
|
||||
"require-dev": {
|
||||
"mockery/mockery": "^1.3.0",
|
||||
"mpdf/qrcode": "^1.1.0",
|
||||
"squizlabs/php_codesniffer": "^3.5.0",
|
||||
"tracy/tracy": "^2.4",
|
||||
"yoast/phpunit-polyfills": "^1.0"
|
||||
},
|
||||
"suggest": {
|
||||
"ext-bcmath": "Needed for generation of some types of barcodes",
|
||||
"ext-xml": "Needed mainly for SVG manipulation",
|
||||
"ext-zlib": "Needed for compression of embedded resources, such as fonts"
|
||||
},
|
||||
"type": "library",
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"Mpdf\\": "src/"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"GPL-2.0-only"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Matěj Humpál",
|
||||
"role": "Developer, maintainer"
|
||||
},
|
||||
{
|
||||
"name": "Ian Back",
|
||||
"role": "Developer (retired)"
|
||||
}
|
||||
],
|
||||
"description": "PHP library generating PDF files from UTF-8 encoded HTML",
|
||||
"homepage": "https://mpdf.github.io",
|
||||
"keywords": [
|
||||
"pdf",
|
||||
"php",
|
||||
"utf-8"
|
||||
],
|
||||
"support": {
|
||||
"docs": "http://mpdf.github.io",
|
||||
"issues": "https://github.com/mpdf/mpdf/issues",
|
||||
"source": "https://github.com/mpdf/mpdf"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
"url": "https://www.paypal.me/mpdf",
|
||||
"type": "custom"
|
||||
}
|
||||
],
|
||||
"time": "2022-08-15T08:15:09+00:00"
|
||||
},
|
||||
{
|
||||
"name": "myclabs/deep-copy",
|
||||
"version": "1.11.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/myclabs/DeepCopy.git",
|
||||
"reference": "14daed4296fae74d9e3201d2c4925d1acb7aa614"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/14daed4296fae74d9e3201d2c4925d1acb7aa614",
|
||||
"reference": "14daed4296fae74d9e3201d2c4925d1acb7aa614",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": "^7.1 || ^8.0"
|
||||
},
|
||||
"conflict": {
|
||||
"doctrine/collections": "<1.6.8",
|
||||
"doctrine/common": "<2.13.3 || >=3,<3.2.2"
|
||||
},
|
||||
"require-dev": {
|
||||
"doctrine/collections": "^1.6.8",
|
||||
"doctrine/common": "^2.13.3 || ^3.2.2",
|
||||
"phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13"
|
||||
},
|
||||
"type": "library",
|
||||
"autoload": {
|
||||
"files": [
|
||||
"src/DeepCopy/deep_copy.php"
|
||||
],
|
||||
"psr-4": {
|
||||
"DeepCopy\\": "src/DeepCopy/"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"description": "Create deep copies (clones) of your objects",
|
||||
"keywords": [
|
||||
"clone",
|
||||
"copy",
|
||||
"duplicate",
|
||||
"object",
|
||||
"object graph"
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/myclabs/DeepCopy/issues",
|
||||
"source": "https://github.com/myclabs/DeepCopy/tree/1.11.0"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
"url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy",
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2022-03-03T13:19:32+00:00"
|
||||
},
|
||||
{
|
||||
"name": "nesbot/carbon",
|
||||
"version": "2.55.2",
|
||||
|
@ -1883,6 +2019,110 @@
|
|||
},
|
||||
"time": "2021-04-09T13:42:10+00:00"
|
||||
},
|
||||
{
|
||||
"name": "paragonie/random_compat",
|
||||
"version": "v9.99.100",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/paragonie/random_compat.git",
|
||||
"reference": "996434e5492cb4c3edcb9168db6fbb1359ef965a"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/paragonie/random_compat/zipball/996434e5492cb4c3edcb9168db6fbb1359ef965a",
|
||||
"reference": "996434e5492cb4c3edcb9168db6fbb1359ef965a",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": ">= 7"
|
||||
},
|
||||
"require-dev": {
|
||||
"phpunit/phpunit": "4.*|5.*",
|
||||
"vimeo/psalm": "^1"
|
||||
},
|
||||
"suggest": {
|
||||
"ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes."
|
||||
},
|
||||
"type": "library",
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Paragon Initiative Enterprises",
|
||||
"email": "security@paragonie.com",
|
||||
"homepage": "https://paragonie.com"
|
||||
}
|
||||
],
|
||||
"description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7",
|
||||
"keywords": [
|
||||
"csprng",
|
||||
"polyfill",
|
||||
"pseudorandom",
|
||||
"random"
|
||||
],
|
||||
"support": {
|
||||
"email": "info@paragonie.com",
|
||||
"issues": "https://github.com/paragonie/random_compat/issues",
|
||||
"source": "https://github.com/paragonie/random_compat"
|
||||
},
|
||||
"time": "2020-10-15T08:29:30+00:00"
|
||||
},
|
||||
{
|
||||
"name": "php-http/message-factory",
|
||||
"version": "v1.0.2",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/php-http/message-factory.git",
|
||||
"reference": "a478cb11f66a6ac48d8954216cfed9aa06a501a1"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/php-http/message-factory/zipball/a478cb11f66a6ac48d8954216cfed9aa06a501a1",
|
||||
"reference": "a478cb11f66a6ac48d8954216cfed9aa06a501a1",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": ">=5.4",
|
||||
"psr/http-message": "^1.0"
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "1.0-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"Http\\Message\\": "src/"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Márk Sági-Kazár",
|
||||
"email": "mark.sagikazar@gmail.com"
|
||||
}
|
||||
],
|
||||
"description": "Factory interfaces for PSR-7 HTTP Message",
|
||||
"homepage": "http://php-http.org",
|
||||
"keywords": [
|
||||
"factory",
|
||||
"http",
|
||||
"message",
|
||||
"stream",
|
||||
"uri"
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/php-http/message-factory/issues",
|
||||
"source": "https://github.com/php-http/message-factory/tree/master"
|
||||
},
|
||||
"time": "2015-12-19T14:08:53+00:00"
|
||||
},
|
||||
{
|
||||
"name": "phpoption/phpoption",
|
||||
"version": "1.8.1",
|
||||
|
@ -1954,6 +2194,40 @@
|
|||
],
|
||||
"time": "2021-12-04T23:24:31+00:00"
|
||||
},
|
||||
{
|
||||
"name": "prexview/prexview",
|
||||
"version": "v1.1.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/prexview/prexview-php.git",
|
||||
"reference": "d5f44d7aa49ce1cb507a613427d0184e1952f1b7"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/prexview/prexview-php/zipball/d5f44d7aa49ce1cb507a613427d0184e1952f1b7",
|
||||
"reference": "d5f44d7aa49ce1cb507a613427d0184e1952f1b7",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"rmccue/requests": "^1.7"
|
||||
},
|
||||
"type": "library",
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"PrexView\\": "src/"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"description": "A composer library to use PrexView, a fast, scalable and friendly service for programatic HTML, PDF, PNG or JPG generation using JSON or XML data.",
|
||||
"support": {
|
||||
"issues": "https://github.com/prexview/prexview-php/issues",
|
||||
"source": "https://github.com/prexview/prexview-php/tree/master"
|
||||
},
|
||||
"time": "2017-07-28T00:29:38+00:00"
|
||||
},
|
||||
{
|
||||
"name": "psr/container",
|
||||
"version": "1.1.2",
|
||||
|
@ -2609,6 +2883,138 @@
|
|||
],
|
||||
"time": "2021-09-25T23:10:38+00:00"
|
||||
},
|
||||
{
|
||||
"name": "rmccue/requests",
|
||||
"version": "v1.8.1",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/WordPress/Requests.git",
|
||||
"reference": "82e6936366eac3af4d836c18b9d8c31028fe4cd5"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/WordPress/Requests/zipball/82e6936366eac3af4d836c18b9d8c31028fe4cd5",
|
||||
"reference": "82e6936366eac3af4d836c18b9d8c31028fe4cd5",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": ">=5.2"
|
||||
},
|
||||
"require-dev": {
|
||||
"dealerdirect/phpcodesniffer-composer-installer": "^0.7",
|
||||
"php-parallel-lint/php-console-highlighter": "^0.5.0",
|
||||
"php-parallel-lint/php-parallel-lint": "^1.3",
|
||||
"phpcompatibility/php-compatibility": "^9.0",
|
||||
"phpunit/phpunit": "^4.8 || ^5.7 || ^6.5 || ^7.5",
|
||||
"requests/test-server": "dev-master",
|
||||
"squizlabs/php_codesniffer": "^3.5",
|
||||
"wp-coding-standards/wpcs": "^2.0"
|
||||
},
|
||||
"type": "library",
|
||||
"autoload": {
|
||||
"psr-0": {
|
||||
"Requests": "library/"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"ISC"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Ryan McCue",
|
||||
"homepage": "http://ryanmccue.info"
|
||||
}
|
||||
],
|
||||
"description": "A HTTP library written in PHP, for human beings.",
|
||||
"homepage": "http://github.com/WordPress/Requests",
|
||||
"keywords": [
|
||||
"curl",
|
||||
"fsockopen",
|
||||
"http",
|
||||
"idna",
|
||||
"ipv6",
|
||||
"iri",
|
||||
"sockets"
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/WordPress/Requests/issues",
|
||||
"source": "https://github.com/WordPress/Requests/tree/v1.8.1"
|
||||
},
|
||||
"time": "2021-06-04T09:56:25+00:00"
|
||||
},
|
||||
{
|
||||
"name": "setasign/fpdi",
|
||||
"version": "v2.3.6",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/Setasign/FPDI.git",
|
||||
"reference": "6231e315f73e4f62d72b73f3d6d78ff0eed93c31"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/Setasign/FPDI/zipball/6231e315f73e4f62d72b73f3d6d78ff0eed93c31",
|
||||
"reference": "6231e315f73e4f62d72b73f3d6d78ff0eed93c31",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"ext-zlib": "*",
|
||||
"php": "^5.6 || ^7.0 || ^8.0"
|
||||
},
|
||||
"conflict": {
|
||||
"setasign/tfpdf": "<1.31"
|
||||
},
|
||||
"require-dev": {
|
||||
"phpunit/phpunit": "~5.7",
|
||||
"setasign/fpdf": "~1.8",
|
||||
"setasign/tfpdf": "1.31",
|
||||
"squizlabs/php_codesniffer": "^3.5",
|
||||
"tecnickcom/tcpdf": "~6.2"
|
||||
},
|
||||
"suggest": {
|
||||
"setasign/fpdf": "FPDI will extend this class but as it is also possible to use TCPDF or tFPDF as an alternative. There's no fixed dependency configured."
|
||||
},
|
||||
"type": "library",
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"setasign\\Fpdi\\": "src/"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Jan Slabon",
|
||||
"email": "jan.slabon@setasign.com",
|
||||
"homepage": "https://www.setasign.com"
|
||||
},
|
||||
{
|
||||
"name": "Maximilian Kresse",
|
||||
"email": "maximilian.kresse@setasign.com",
|
||||
"homepage": "https://www.setasign.com"
|
||||
}
|
||||
],
|
||||
"description": "FPDI is a collection of PHP classes facilitating developers to read pages from existing PDF documents and use them as templates in FPDF. Because it is also possible to use FPDI with TCPDF, there are no fixed dependencies defined. Please see suggestions for packages which evaluates the dependencies automatically.",
|
||||
"homepage": "https://www.setasign.com/fpdi",
|
||||
"keywords": [
|
||||
"fpdf",
|
||||
"fpdi",
|
||||
"pdf"
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/Setasign/FPDI/issues",
|
||||
"source": "https://github.com/Setasign/FPDI/tree/v2.3.6"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
"url": "https://tidelift.com/funding/github/packagist/setasign/fpdi",
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2021-02-11T11:37:01+00:00"
|
||||
},
|
||||
{
|
||||
"name": "swiftmailer/swiftmailer",
|
||||
"version": "v6.3.0",
|
||||
|
|
|
@ -0,0 +1,32 @@
|
|||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
class AgregarColumnaFilaEnPlanillaATablaDeProductos extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
Schema::table('productos', function (Blueprint $table) {
|
||||
$table->integer('fila')->after('id');
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
Schema::table('productos', function (Blueprint $table) {
|
||||
$table->dropColumn('fila');
|
||||
});
|
||||
}
|
||||
}
|
|
@ -13,6 +13,6 @@ class DatabaseSeeder extends Seeder
|
|||
public function run()
|
||||
{
|
||||
$this->call(GrupoDeCompraSeeder::class);
|
||||
$this->call(ProductoSeeder::class);
|
||||
$this->call(ImportarProductoSeeder::class);
|
||||
}
|
||||
}
|
||||
|
|
97
database/seeds/ImportarProductoSeeder.php
Normal file
97
database/seeds/ImportarProductoSeeder.php
Normal file
|
@ -0,0 +1,97 @@
|
|||
<?php
|
||||
|
||||
use Illuminate\Database\Seeder;
|
||||
use League\Csv\Reader;
|
||||
use App\Proveedor;
|
||||
|
||||
class ImportarProductoSeeder extends Seeder
|
||||
{
|
||||
const FILA_HEADER = "Tipo";
|
||||
const ULTIMA_FILA = "TOTAL";
|
||||
|
||||
/**
|
||||
* Run the database seeds.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function run()
|
||||
{
|
||||
$csv = Reader::createFromPath(resource_path('csv/productos.csv'), 'r');
|
||||
$csv->setDelimiter("|");
|
||||
$iHeader = $this->obtenerIndiceDeHeader($csv);
|
||||
$csv->setHeaderOffset($iHeader);
|
||||
$registros = $csv->getRecords();
|
||||
|
||||
$toInsert = [];
|
||||
$categoria = '';
|
||||
foreach($registros as $i => $registro){
|
||||
//filas que están arriba del header
|
||||
if ($i <= $iHeader){
|
||||
continue;
|
||||
}
|
||||
|
||||
//finalizar
|
||||
if ($registro[$this::FILA_HEADER] == $this::ULTIMA_FILA){
|
||||
break;
|
||||
}
|
||||
|
||||
//filas que no tienen tipo
|
||||
if (!Arr::has($registro,$this::FILA_HEADER)|| trim($registro[$this::FILA_HEADER]) == ''){
|
||||
var_dump("no hay tipo en la fila " . $i);
|
||||
continue;
|
||||
}
|
||||
|
||||
//saltear bono de transporte
|
||||
if ($registro[$this::FILA_HEADER] == "T"){
|
||||
continue;
|
||||
}
|
||||
|
||||
//obtener categoria
|
||||
if ($registro['Producto'] == '') {
|
||||
//es la pregunta de la copa?
|
||||
if (Str::contains($registro[$this::FILA_HEADER],"¿")) { continue; }
|
||||
$categoria = $registro[$this::FILA_HEADER];
|
||||
continue;
|
||||
}
|
||||
|
||||
//completar producto
|
||||
$toInsert[] = [
|
||||
'fila' => $i,
|
||||
'categoria' => $categoria,
|
||||
'nombre' => trim(str_replace('*', ' ',$registro['Producto'])),
|
||||
'precio' => $registro['Precio'],
|
||||
'proveedor_id' => $this->obtenerProveedor($registro['Producto']),
|
||||
'bono' => ($categoria == 'TRANSPORTE, BONOS Y FINANCIAMIENTO SORORO')
|
||||
];
|
||||
}
|
||||
|
||||
foreach (array_chunk($toInsert,DatabaseSeeder::CHUNK_SIZE) as $chunk)
|
||||
{
|
||||
DB::table('productos')->insert($chunk);
|
||||
}
|
||||
}
|
||||
|
||||
private function obtenerIndiceDeHeader($csv){
|
||||
$registros = $csv->getRecords();
|
||||
$iheader = 0;
|
||||
foreach ($registros as $i => $registro){
|
||||
if (strtolower($registro[0]) == strtolower($this::FILA_HEADER)) {
|
||||
$iheader = $i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return $iheader;
|
||||
}
|
||||
|
||||
private function obtenerProveedor($nombre) {
|
||||
$result = null;
|
||||
if (Str::contains($nombre,"*")){
|
||||
$result = Proveedor::firstOrCreate([
|
||||
'nombre' => 'Proveedor de economía solidaria',
|
||||
'economia_solidaria' => 1,
|
||||
'nacional' => 1
|
||||
])->id;
|
||||
}
|
||||
return $result;
|
||||
}
|
||||
}
|
2
dev-start
Executable file
2
dev-start
Executable file
|
@ -0,0 +1,2 @@
|
|||
#!/usr/bin/bash
|
||||
docker-compose up -d && docker-compose exec app npm run watch
|
|
@ -34,6 +34,8 @@ services:
|
|||
- dbdata:/var/lib/mysql
|
||||
networks:
|
||||
- app-network
|
||||
ports:
|
||||
- ${DB_PORT_EXPOSED}:3306
|
||||
|
||||
nginx:
|
||||
image: nginx:alpine
|
||||
|
|
13
package-lock.json
generated
13
package-lock.json
generated
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"name": "pedi2",
|
||||
"name": "www",
|
||||
"lockfileVersion": 2,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
|
@ -7,6 +7,7 @@
|
|||
"dependencies": {
|
||||
"animate.css": "^4.1.1",
|
||||
"bulma": "^0.9.4",
|
||||
"bulma-switch": "^2.0.4",
|
||||
"bulma-toast": "^2.4.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
|
@ -3006,6 +3007,11 @@
|
|||
"resolved": "https://registry.npmjs.org/bulma/-/bulma-0.9.4.tgz",
|
||||
"integrity": "sha512-86FlT5+1GrsgKbPLRRY7cGDg8fsJiP/jzTqXXVqiUZZ2aZT8uemEOHlU1CDU+TxklPEZ11HZNNWclRBBecP4CQ=="
|
||||
},
|
||||
"node_modules/bulma-switch": {
|
||||
"version": "2.0.4",
|
||||
"resolved": "https://registry.npmjs.org/bulma-switch/-/bulma-switch-2.0.4.tgz",
|
||||
"integrity": "sha512-kMu4H0Pr0VjvfsnT6viRDCgptUq0Rvy7y7PX6q+IHg1xUynsjszPjhAdal5ysAlCG5HNO+5YXxeiu92qYGQolw=="
|
||||
},
|
||||
"node_modules/bulma-toast": {
|
||||
"version": "2.4.1",
|
||||
"resolved": "https://registry.npmjs.org/bulma-toast/-/bulma-toast-2.4.1.tgz",
|
||||
|
@ -15942,6 +15948,11 @@
|
|||
"resolved": "https://registry.npmjs.org/bulma/-/bulma-0.9.4.tgz",
|
||||
"integrity": "sha512-86FlT5+1GrsgKbPLRRY7cGDg8fsJiP/jzTqXXVqiUZZ2aZT8uemEOHlU1CDU+TxklPEZ11HZNNWclRBBecP4CQ=="
|
||||
},
|
||||
"bulma-switch": {
|
||||
"version": "2.0.4",
|
||||
"resolved": "https://registry.npmjs.org/bulma-switch/-/bulma-switch-2.0.4.tgz",
|
||||
"integrity": "sha512-kMu4H0Pr0VjvfsnT6viRDCgptUq0Rvy7y7PX6q+IHg1xUynsjszPjhAdal5ysAlCG5HNO+5YXxeiu92qYGQolw=="
|
||||
},
|
||||
"bulma-toast": {
|
||||
"version": "2.4.1",
|
||||
"resolved": "https://registry.npmjs.org/bulma-toast/-/bulma-toast-2.4.1.tgz",
|
||||
|
|
|
@ -26,6 +26,7 @@
|
|||
"dependencies": {
|
||||
"animate.css": "^4.1.1",
|
||||
"bulma": "^0.9.4",
|
||||
"bulma-switch": "^2.0.4",
|
||||
"bulma-toast": "^2.4.1"
|
||||
}
|
||||
}
|
||||
|
|
14164
public/css/app.css
vendored
14164
public/css/app.css
vendored
File diff suppressed because it is too large
Load diff
2631
public/js/app.js
vendored
2631
public/js/app.js
vendored
File diff suppressed because one or more lines are too long
|
@ -1,45 +1,4 @@
|
|||
barrio|region|referente|telefono|correo
|
||||
BUCEO|ESTE|||
|
||||
MALVIN NORTE|ESTE|||
|
||||
PINAR|ESTE|||
|
||||
UNION|ESTE|||
|
||||
SANTO DOMINGO|NORTE|||
|
||||
21 DE FEBRERO|NORTE|||
|
||||
PIEDRAS BLANCAS|NORTE|||
|
||||
BELLA ITALIA|NORTE|||
|
||||
JARDINES|NORTE|||
|
||||
LA SOCIALISTA|NORTE|||
|
||||
VILLA GARCIA|NORTE|||
|
||||
LAS ACACIAS|NORTE|||
|
||||
MANGA|NORTE|||
|
||||
CERRITO|OESTE|||
|
||||
LEZICA|OESTE|||
|
||||
PEÑAROL|OESTE|||
|
||||
LAS PIEDRAS|OESTE|||
|
||||
A.C.T.E.O|OESTE|||
|
||||
NUEVO PARIS|OESTE|||
|
||||
SANTA CATALINA|OESTE|||
|
||||
BELVEDERE|OESTE|||
|
||||
BATLLE BERRES|OESTE|||
|
||||
CERRO PTI|OESTE|||
|
||||
COLECTIVO UTU LAVALLEJA|OESTE|||
|
||||
FOGONES|OESTE|||
|
||||
LAVALLEJA|OESTE|||
|
||||
REJUNTE|OESTE|||
|
||||
CAPURRO|OESTE|||
|
||||
PARQUE RODO|SUR|||
|
||||
REDUCTO|SUR|||
|
||||
AGUADA|SUR|||
|
||||
CASA DEL VECINO|SUR|||
|
||||
CIUDAD VIEJA|SUR|||
|
||||
COOP EJIDO|SUR|||
|
||||
COVIREUS|SUR|||
|
||||
LA BLANQUEADA|SUR|||
|
||||
NITEP|SUR|||
|
||||
LA CURVA|SUR|||
|
||||
PANADERIA VIDAL|SUR|||
|
||||
SUA|SUR|||
|
||||
ENTREVERO|SUR|||
|
||||
TRES CRUCES|SUR|||
|
||||
VILLA ESPAÑOLA|SUR|||
|
||||
AUDA|OTRA|||
|
||||
SINTEP|OTRA|||
|
||||
PRUEBA|SIN REGION|||
|
|
|
@ -1,359 +1,403 @@
|
|||
categoria|producto|precio|proveedor
|
||||
ALIMENTOS NO PERECEDEROS|Yerba Compuesta La Herboristería 1kg |140.3|
|
||||
ALIMENTOS NO PERECEDEROS|Yerba Yusa tradicional 1kg |121.8|
|
||||
ALIMENTOS NO PERECEDEROS|Yerba Yusa tradicional 500grs|65|
|
||||
ALIMENTOS NO PERECEDEROS|Yerba Sara tradicional 1kg|129.7|
|
||||
ALIMENTOS NO PERECEDEROS|Yerba Sara suave 1kg|132.2|
|
||||
ALIMENTOS NO PERECEDEROS|Yerba Kiero mate 500grs|72.5|
|
||||
ALIMENTOS NO PERECEDEROS|*Harina Santa Unión 000 1kg|27.3|Santa Unión
|
||||
ALIMENTOS NO PERECEDEROS|*Harina Santa Unión 0000 1kg|34.8|Santa Unión
|
||||
ALIMENTOS NO PERECEDEROS|*Harina de trigo integral Pasaná 1 kg|65|Pasaná
|
||||
ALIMENTOS NO PERECEDEROS|*Harina de arroz Pasaná 1 kg |65|Pasaná
|
||||
ALIMENTOS NO PERECEDEROS|*Harina de Garbanzos Pasaná 1 kg |140|Pasaná
|
||||
ALIMENTOS NO PERECEDEROS|*Mezcla para faina Pasaná 1 kg |150|Pasaná
|
||||
ALIMENTOS NO PERECEDEROS|*Fécula de Mandioca Pasaná 1 kg |85|Pasaná
|
||||
ALIMENTOS NO PERECEDEROS|Tres Harinas 500grs. |85|
|
||||
ALIMENTOS NO PERECEDEROS|*Harina Santa Unión 000 Bolsa 25kg|560.6|Santa Unión
|
||||
ALIMENTOS NO PERECEDEROS|*Polenta Santa Unión 450gr|15.4|Santa Unión
|
||||
ALIMENTOS NO PERECEDEROS|*Mezcla de Fainá Santa Unión 5kg|294.8|Santa Unión
|
||||
ALIMENTOS NO PERECEDEROS|*Fideos Caorsi Tirabuzón 1kg|59|Caorsi
|
||||
ALIMENTOS NO PERECEDEROS|*Fideos Caorsi Tallarín 1kg|69|Caorsi
|
||||
ALIMENTOS NO PERECEDEROS|*Fideos Caorsi Moñita 1kg|69|Caorsi
|
||||
ALIMENTOS NO PERECEDEROS|*Fideos Caorsi para sopa 1kg|59|Caorsi
|
||||
ALIMENTOS NO PERECEDEROS|*Fideos Caorsi para sopa 5kg|268|Caorsi
|
||||
ALIMENTOS NO PERECEDEROS|*Fideos Caorsi Tirabuzón 5kg|268|Caorsi
|
||||
ALIMENTOS NO PERECEDEROS|Arroz Blue Patna 1kg|40.2|
|
||||
ALIMENTOS NO PERECEDEROS|Arroz Shiva 1kg|27|
|
||||
ALIMENTOS NO PERECEDEROS|Arroz integral 1kg |55|
|
||||
ALIMENTOS NO PERECEDEROS|Arroz integral 3kg|155|
|
||||
ALIMENTOS NO PERECEDEROS|Aceite Condesa de Soja 900 cc.|84|
|
||||
ALIMENTOS NO PERECEDEROS|Aceite Uruguay de Girasol 900 cc.|108|
|
||||
ALIMENTOS NO PERECEDEROS|Aceite Optimo canola 900 cc.|82.4|
|
||||
ALIMENTOS NO PERECEDEROS|*Aceite de oliva 500 ml. |195|
|
||||
ALIMENTOS NO PERECEDEROS|Vinagre Uruguay 900ml|77.9|
|
||||
ALIMENTOS NO PERECEDEROS|Aceite de Oliva Cuatro Piedras 3 lt|1090|
|
||||
ALIMENTOS NO PERECEDEROS|*Salsa de soja La Posta 250 ml. |95|
|
||||
ALIMENTOS NO PERECEDEROS|*Aceitunas verdes sin carozo en frasco La Posta 500 gr. |180|La Posta
|
||||
ALIMENTOS NO PERECEDEROS|*Aceitunas negras sin carozo en frasco frasco La Posta 500 gr. |180|La Posta
|
||||
ALIMENTOS NO PERECEDEROS|Lata atún Golden Fish desmenuzado al aceite 170g|31.1|
|
||||
ALIMENTOS NO PERECEDEROS|Lata de arvejas Campero 300g|18.3|
|
||||
ALIMENTOS NO PERECEDEROS|Lata de choclo Cosecha 300g|22|
|
||||
ALIMENTOS NO PERECEDEROS|Lata de jardinera Cosecha|25|
|
||||
ALIMENTOS NO PERECEDEROS|Lata de porotos negros Cosecha|31.1|
|
||||
ALIMENTOS NO PERECEDEROS|Lata de porotos de frutilla Cosecha|31.1|
|
||||
ALIMENTOS NO PERECEDEROS|Lata de duraznos en almíbar Campero |66.6|
|
||||
ALIMENTOS NO PERECEDEROS|Mayonesa Uruguay 500g|77.9|
|
||||
ALIMENTOS NO PERECEDEROS|Azúcar Azucarlito 25kg|1007.5|
|
||||
ALIMENTOS NO PERECEDEROS|Azúcar Bella Unión 1kg|39.8|
|
||||
ALIMENTOS NO PERECEDEROS|Azúcar impalpable Hornex 200 gr|31|
|
||||
ALIMENTOS NO PERECEDEROS|Azúcar impalpable Hornex 1kg|104|
|
||||
ALIMENTOS NO PERECEDEROS|Almidón de maíz Hornex 1Kg|64.5|
|
||||
ALIMENTOS NO PERECEDEROS|Polvo de Hornear Hornex 1 kg|122|
|
||||
ALIMENTOS NO PERECEDEROS|Polvo de Hornear Hornex 100 g + 20 g|27.9|
|
||||
ALIMENTOS NO PERECEDEROS|*Esencia de vainilla La Posta 100ml|80|
|
||||
ALIMENTOS NO PERECEDEROS|Grasa Uruguay 400grs|50|
|
||||
ALIMENTOS NO PERECEDEROS|Levadura seca Hornex 125g|85.5|
|
||||
ALIMENTOS NO PERECEDEROS|Café Sorocabana glaseado p/máquina 500 grs|232.8|
|
||||
ALIMENTOS NO PERECEDEROS|Café Sorocabana natural p/máquina 500 grs |315.8|
|
||||
ALIMENTOS NO PERECEDEROS|Café Saint 170 gr Instantaneo|185.3|
|
||||
ALIMENTOS NO PERECEDEROS|Té Negro en hebras 90gr hornimans|30.7|
|
||||
ALIMENTOS NO PERECEDEROS|Galletas de arroz comunes Natural Rice 120 gr|34|
|
||||
ALIMENTOS NO PERECEDEROS|* Leche en polvo 250grs|65|
|
||||
ALIMENTOS NO PERECEDEROS|* Leche en polvo 1kg|220|
|
||||
ALIMENTOS NO PERECEDEROS|* Coco rallado 200gr|70|
|
||||
ALIMENTOS NO PERECEDEROS|* Coco rallado 1kg|275|
|
||||
ALIMENTOS NO PERECEDEROS|Cocoa Hornex 200gr|43|
|
||||
ALIMENTOS NO PERECEDEROS|Postre de chocolate Hornex 8 porciones|36.5|
|
||||
ALIMENTOS NO PERECEDEROS|Prostre LIGHT de vainilla Hornex 8 porciones (aprobado por ADU)|57|
|
||||
ALIMENTOS NO PERECEDEROS|Flan de vainilla Hornex 8 porciones|36.5|
|
||||
ALIMENTOS NO PERECEDEROS|Gelatina de frutilla Hornex 8 porciones|36.5|
|
||||
ALIMENTOS NO PERECEDEROS|Bizcochuelo de vainilla SIN GLUTEN 500gr Hornex|142|
|
||||
ALIMENTOS NO PERECEDEROS|Pizza SIN GLUTEN 320gr Hornex|137|
|
||||
ALIMENTOS NO PERECEDEROS|Pulpa de Tomate De Ley 1lt|43.5|
|
||||
ALIMENTOS NO PERECEDEROS|Pure de papa instantaneo De Ley 125g|21.3|
|
||||
ALIMENTOS NO PERECEDEROS|*Sal fina sin fluor Polenteados 500g|27|
|
||||
ALIMENTOS NO PERECEDEROS|*Sal gruesa sin fluor Polenteados 500g|27|
|
||||
ALIMENTOS NO PERECEDEROS|*Salsa de tomate casera (puro tomate) 1 lt|65|
|
||||
ALIMENTOS NO PERECEDEROS|*Barras de cereales (maní, sésamo, lino, girasol, avena, copos de arroz, copos de máiz, azúcar rubia y miel) - Pack x2 |65|
|
||||
ALIMENTOS NO PERECEDEROS|*Barras de cereales bañadas en chocolate (maní, sésamo, lino, girasol, avena, copos de arroz, copos de máiz, azúcar rubia y miel) - Pack x2|75|
|
||||
ALIMENTOS NO PERECEDEROS|*Granola artesanal 500 gr Ing: copos ,avena,miel, vainilla,coco rallado, chia,girasol,sésamo, lino,maní, almendras, castañas de caju, nueces, chips de chocolate.|210|
|
||||
ALIMENTOS NO PERECEDEROS|*Granola simple (avena+ girasol+ pasaUva) 1kg|160|
|
||||
ALIMENTOS NO PERECEDEROS|*Copos de maíz azucarados 500g|89|
|
||||
ALIMENTOS NO PERECEDEROS|*Copos de maíz naturales 500g|89|
|
||||
ALIMENTOS NO PERECEDEROS|*Crema untable de maní 250gr|89|
|
||||
ALIMENTOS NO PERECEDEROS|*Galletas de coco, avena y maní 400gr|100|
|
||||
ALIMENTOS NO PERECEDEROS|*Budin Panitep con cobertura de chocolate con almendras, maní, nueces y pasas 250grs|160|
|
||||
ALIMENTOS NO PERECEDEROS|*Budin Panitep con cobertura de almíbar y coco con almendras, maní, nueces y pasas 250grs|140|
|
||||
ALIMENTOS NO PERECEDEROS|*Budin Panitep de naranja 250grs|140|
|
||||
ALIMENTOS NO PERECEDEROS|*Chia 1/4 kg |65|
|
||||
ALIMENTOS NO PERECEDEROS|*Girasol 1/2 kg |85|
|
||||
ALIMENTOS NO PERECEDEROS|*Lino 1/4 kg |30|
|
||||
ALIMENTOS NO PERECEDEROS|*Sésamo 1/4 kg |55|
|
||||
ALIMENTOS NO PERECEDEROS|*Quinoa 1 kg |200|
|
||||
ALIMENTOS NO PERECEDEROS|*Dátiles con carozo 500 gr|180|
|
||||
ALIMENTOS NO PERECEDEROS|*Cacao en polvo 250 grs |100|
|
||||
ALIMENTOS NO PERECEDEROS|*Almendra pelada (sin tostar) Polenteados 100g|80|Polenteados
|
||||
ALIMENTOS NO PERECEDEROS|*Pasas de Uva Polenteados 250 gr|69|Polenteados
|
||||
ALIMENTOS NO PERECEDEROS|*Nueces Polenteados 100g|79|Polenteados
|
||||
ALIMENTOS NO PERECEDEROS|*Castañas tostadas SIN sal 100grs|76|Polenteados
|
||||
ALIMENTOS NO PERECEDEROS|*Avena laminada instantánea Polenteados 500g|49|Polenteados
|
||||
ALIMENTOS NO PERECEDEROS|*Pan de molde Gigor Lacteado 550g|55|Gigor
|
||||
ALIMENTOS NO PERECEDEROS|*Pan de molde Gigor Integral 550g|55|Gigor
|
||||
ALIMENTOS NO PERECEDEROS|*Galleta Malteada La Socialista 350g|56|La Socialista
|
||||
ALIMENTOS NO PERECEDEROS|*Galleta Malteada c/semillas (sésamo, chia, lino) La Socialista 380gr |74|La Socialista
|
||||
ALIMENTOS NO PERECEDEROS|*Galleta Cara Sucia La Socialista 350g|63|La Socialista
|
||||
ALIMENTOS NO PERECEDEROS|*Grisines La Socialista 350g|67|La Socialista
|
||||
ALIMENTOS NO PERECEDEROS|*Mezcla para panqueques La Socialista 2 x 250g|56|La Socialista
|
||||
ALIMENTOS NO PERECEDEROS|*Mezcla para salsa blanca La Socialista 2 x 50g|46|La Socialista
|
||||
ALIMENTOS NO PERECEDEROS|*Maní pelado frito y salado Polenteados 500g|89|Polenteados
|
||||
ALIMENTOS NO PERECEDEROS|*Maní pelado sin sal Polenteados 500g|89|Polenteados
|
||||
ALIMENTOS NO PERECEDEROS|*Garbanzo Polenteados 1kg|79|Polenteados
|
||||
ALIMENTOS NO PERECEDEROS|*Lentejas Polenteados 1kg|96|Polenteados
|
||||
ALIMENTOS NO PERECEDEROS|*Porotos negros Polenteados 1kg|86|Polenteados
|
||||
ALIMENTOS NO PERECEDEROS|*Porotos de manteca Polenteados 1kg |105|Polenteados
|
||||
ALIMENTOS NO PERECEDEROS|*Proteína de SOJA texturizada 1kg |125|
|
||||
CONDIMENTOS, PERECEDEROS Y BEBIDAS|*Tallarines frescos de yema Pastas Colon 1kg|155|Pastas Colón
|
||||
CONDIMENTOS, PERECEDEROS Y BEBIDAS|*Tallarines frescos de espinaca Pastas Colon 1kg|165|Pastas Colón
|
||||
CONDIMENTOS, PERECEDEROS Y BEBIDAS|*Tallarines frescos de morrón Pastas Colon 1kg|165|Pastas Colón
|
||||
CONDIMENTOS, PERECEDEROS Y BEBIDAS|*Salsa pomarola 300gr ex trabajadores de La Spezia|90|
|
||||
CONDIMENTOS, PERECEDEROS Y BEBIDAS|*Fetuccine integral de zanahoria, apto veganos 1kg|190|
|
||||
CONDIMENTOS, PERECEDEROS Y BEBIDAS|*Romanitos rellenos jamón y queso ex trabajadores de La Spezia 1kg|490|
|
||||
CONDIMENTOS, PERECEDEROS Y BEBIDAS|*Romanitos vegetarianos ex trabajadores de La Spezia 1kg|490|
|
||||
CONDIMENTOS, PERECEDEROS Y BEBIDAS|*Sorrentinos jamón y queso 1Kg ex trabajadores de La Spezia|450|
|
||||
CONDIMENTOS, PERECEDEROS Y BEBIDAS|*Sorrentinos Ricota y Nuez 1kg ex Trabajadores de La Spezia|450|
|
||||
CONDIMENTOS, PERECEDEROS Y BEBIDAS|*Raviolón vegetariano 1Kg ex trabajadores de La Spezia|450|
|
||||
CONDIMENTOS, PERECEDEROS Y BEBIDAS|*Raviolón Caprese 1kg ex Trabajadores de La Spezia|450|
|
||||
CONDIMENTOS, PERECEDEROS Y BEBIDAS|*Prepizza de 28cm ex trabajadores de La Spezia|85|
|
||||
CONDIMENTOS, PERECEDEROS Y BEBIDAS|*Milanesas de carne empanadas 1kg|365|
|
||||
CONDIMENTOS, PERECEDEROS Y BEBIDAS|*Milanesas de pollo empanadas 1kg|365|
|
||||
CONDIMENTOS, PERECEDEROS Y BEBIDAS|*Milanesas de seitan x6 |300|
|
||||
CONDIMENTOS, PERECEDEROS Y BEBIDAS|*Hamburguesas parrilleras de soja no transgénica, sal, harina de avena y adobo sin picante x6|300|
|
||||
CONDIMENTOS, PERECEDEROS Y BEBIDAS|*Jamón vegano (gluten de trigo, salsa de tomate, sabor ahumado, sal) horma 250 g|200|
|
||||
CONDIMENTOS, PERECEDEROS Y BEBIDAS|*Hummus 200cc |140|
|
||||
CONDIMENTOS, PERECEDEROS Y BEBIDAS|*Pate de zanahoria 200cc |140|
|
||||
CONDIMENTOS, PERECEDEROS Y BEBIDAS|*Pan rallado 1kg|55|
|
||||
CONDIMENTOS, PERECEDEROS Y BEBIDAS|*Pan rallado saborizado 1Kg|75|
|
||||
CONDIMENTOS, PERECEDEROS Y BEBIDAS|*Pimienta blanca 30g|20|
|
||||
CONDIMENTOS, PERECEDEROS Y BEBIDAS|*Orégano 25g|20|
|
||||
CONDIMENTOS, PERECEDEROS Y BEBIDAS|*Pimentón 30g|20|
|
||||
CONDIMENTOS, PERECEDEROS Y BEBIDAS|*Adobo 30g|20|
|
||||
CONDIMENTOS, PERECEDEROS Y BEBIDAS|*Ajo y Perejil 30g|20|
|
||||
CONDIMENTOS, PERECEDEROS Y BEBIDAS|*PACK "A" Curry, nuez moscada, ajo polvo, condimento verde, comino|80|
|
||||
CONDIMENTOS, PERECEDEROS Y BEBIDAS|*PACK "B" Pimienta Negra polvo / sal de ajo, aji molido, canela polvo y chimichurry|80|
|
||||
CONDIMENTOS, PERECEDEROS Y BEBIDAS|*PACK "C" Cebolla en escamas, tomillo, clavo de olor, pimienta blanca en grano, ajo en escamas|80|
|
||||
CONDIMENTOS, PERECEDEROS Y BEBIDAS|*Pimentón 250grs |75|
|
||||
CONDIMENTOS, PERECEDEROS Y BEBIDAS|*Orégano 250g|85|
|
||||
CONDIMENTOS, PERECEDEROS Y BEBIDAS|*Nuez moscada entera 2 unidades |21|
|
||||
CONDIMENTOS, PERECEDEROS Y BEBIDAS|*Canela en rama 10g|21|
|
||||
CONDIMENTOS, PERECEDEROS Y BEBIDAS|*Cúrcuma 20g |21|
|
||||
CONDIMENTOS, PERECEDEROS Y BEBIDAS|*Pack "Sabores exoticos" - Paprika, fenogreco y cardamomo|57|
|
||||
CONDIMENTOS, PERECEDEROS Y BEBIDAS|'''''''*Pack "Pa''''''''l mate" - Manzanilla, cedrón y carqueja'''''''|105|
|
||||
CONDIMENTOS, PERECEDEROS Y BEBIDAS|Pack "Medicinas de monte" - Tilo, malva y marcela|105|
|
||||
CONDIMENTOS, PERECEDEROS Y BEBIDAS|*Pack "Té helado light" - Té rojo, stevia y lemon grass|105|
|
||||
CONDIMENTOS, PERECEDEROS Y BEBIDAS|Vino Santero Marselán 1 lt.|198|
|
||||
CONDIMENTOS, PERECEDEROS Y BEBIDAS|Vino Tannat-Cabernet Paso del Roble 1 lt.|90|
|
||||
CONDIMENTOS, PERECEDEROS Y BEBIDAS|Vino Rosado dulce Paso del Roble 1 lt.|90|
|
||||
CONDIMENTOS, PERECEDEROS Y BEBIDAS|Frizzante de Maracuyá|205|
|
||||
CONDIMENTOS, PERECEDEROS Y BEBIDAS|Frizzante de Frutos del bosque|205|
|
||||
CONDIMENTOS, PERECEDEROS Y BEBIDAS|*Cerveza artesanal Sudaka Blonde 500cc|100|
|
||||
CONDIMENTOS, PERECEDEROS Y BEBIDAS|*Cerveza artesanal Sudaka Scottish 500cc|100|
|
||||
CONDIMENTOS, PERECEDEROS Y BEBIDAS|*Cerveza artesanal Punto Rojo Red Ipa 500cc|100|
|
||||
CONDIMENTOS, PERECEDEROS Y BEBIDAS|*Cerveza artesanal Punto Rojo Negra 500cc|100|
|
||||
CONDIMENTOS, PERECEDEROS Y BEBIDAS|*Cerveza artesanal APA Guillotina 1L|180|
|
||||
CONDIMENTOS, PERECEDEROS Y BEBIDAS|Fernet artesanal 780 ml|370|
|
||||
CONDIMENTOS, PERECEDEROS Y BEBIDAS|Jugo en polvo "Juguito" sabores surtidos|8.06|
|
||||
CONDIMENTOS, PERECEDEROS Y BEBIDAS|Jugo Big C 200ml sabores surtidos|13.14|
|
||||
CONDIMENTOS, PERECEDEROS Y BEBIDAS|*Refresco U Naranja 2lt|82|
|
||||
CONDIMENTOS, PERECEDEROS Y BEBIDAS|*Refresco U Mandarina 2lt|82|
|
||||
CONDIMENTOS, PERECEDEROS Y BEBIDAS|*Refresco U Pomelo 2lt|82|
|
||||
CONDIMENTOS, PERECEDEROS Y BEBIDAS|*Refresco U Limonada 2lt|82|
|
||||
CONDIMENTOS, PERECEDEROS Y BEBIDAS|*Agua 6 lts|84|
|
||||
CONDIMENTOS, PERECEDEROS Y BEBIDAS|*Queso Muzzarella 1/2 kg Unidad Cooperaria|130|
|
||||
CONDIMENTOS, PERECEDEROS Y BEBIDAS|*Queso Magro s/sal 1/2 kg Unidad Cooperaria|147.5|
|
||||
CONDIMENTOS, PERECEDEROS Y BEBIDAS|*Queso Magro c/sal 1/2 kg Uniddad Cooperaria|147.5|
|
||||
CONDIMENTOS, PERECEDEROS Y BEBIDAS|*Queso Danbo 1/2 kg Unidad Cooperaria|137.5|
|
||||
CONDIMENTOS, PERECEDEROS Y BEBIDAS|*Queso Sbrinz 1/2 kg Unidad Cooperaria|170|
|
||||
CONDIMENTOS, PERECEDEROS Y BEBIDAS|*Queso Colonia 1/2 Kg Unidad Cooperaria|160|
|
||||
CONDIMENTOS, PERECEDEROS Y BEBIDAS|*Queso parrillero 350g Unidad Cooperaria|165|
|
||||
CONDIMENTOS, PERECEDEROS Y BEBIDAS|*Queso de mandioca en horma 400 gr|200|
|
||||
CONDIMENTOS, PERECEDEROS Y BEBIDAS|*Queso saborizado con ciboulette 600grs (envasado al vacío)|230|
|
||||
CONDIMENTOS, PERECEDEROS Y BEBIDAS|*Queso saborizado con albahaca 600grs (envasado al vacío)|230|
|
||||
CONDIMENTOS, PERECEDEROS Y BEBIDAS|*Queso saborizado con orégano 500grs (envasado al vacío)|250|
|
||||
CONDIMENTOS, PERECEDEROS Y BEBIDAS|*Queso semiduro 500grs (envasado al vacío) Productores Ismael Cortinas|195|
|
||||
CONDIMENTOS, PERECEDEROS Y BEBIDAS|*Queso cuartirolo horma 1kg envasado al vacío|270|
|
||||
CONDIMENTOS, PERECEDEROS Y BEBIDAS|*Queso rallado 100grs|63|
|
||||
CONDIMENTOS, PERECEDEROS Y BEBIDAS|*Queso rallado 200grs|120|
|
||||
CONDIMENTOS, PERECEDEROS Y BEBIDAS|*Dulce de Leche 1 Kg Unidad Cooperaria|165|
|
||||
CONDIMENTOS, PERECEDEROS Y BEBIDAS|*Dulce de leche de coco 360 gr|300|
|
||||
CONDIMENTOS, PERECEDEROS Y BEBIDAS|*Morrones en vinagre 330 gr|140|
|
||||
CONDIMENTOS, PERECEDEROS Y BEBIDAS|*Berenjenas en vinagre 330 gr|140|
|
||||
CONDIMENTOS, PERECEDEROS Y BEBIDAS|*Mermelada de morrones 250 gr|140|
|
||||
CONDIMENTOS, PERECEDEROS Y BEBIDAS|*Mermelada de frutilla, 450 grs. |123|
|
||||
CONDIMENTOS, PERECEDEROS Y BEBIDAS|*Mermelada de durazno, 450 grs.|110|
|
||||
CONDIMENTOS, PERECEDEROS Y BEBIDAS|*Mermelada de ciruela, 450 grs. |115|
|
||||
CONDIMENTOS, PERECEDEROS Y BEBIDAS|*Mermelada de higo, 450 grs. |110|
|
||||
CONDIMENTOS, PERECEDEROS Y BEBIDAS|*Mermelada de zapallo, 450 grs.|110|
|
||||
CONDIMENTOS, PERECEDEROS Y BEBIDAS|*Mermelada de naranja, 450 grs. |115|
|
||||
CONDIMENTOS, PERECEDEROS Y BEBIDAS|*Mermelada de arándanos, 450 grs. |145|
|
||||
CONDIMENTOS, PERECEDEROS Y BEBIDAS|*Dulce de membrillo, 900grs |105|
|
||||
CONDIMENTOS, PERECEDEROS Y BEBIDAS|*Dulce de batata con chocolate 1kg|115|
|
||||
CONDIMENTOS, PERECEDEROS Y BEBIDAS|*Dulce de zapallo 1kg|115|
|
||||
CONDIMENTOS, PERECEDEROS Y BEBIDAS|'''''''*Dulce de higo 1kg'''|115|
|
||||
CONDIMENTOS, PERECEDEROS Y BEBIDAS|Miel artesanal 1 kg|210|
|
||||
CONDIMENTOS, PERECEDEROS Y BEBIDAS|*Canasta de frutas y verduras "34 Sur Productos Orgánicos"|630|
|
||||
CONDIMENTOS, PERECEDEROS Y BEBIDAS|*Romero 25grs, El Ombú PTIc|45|
|
||||
CONDIMENTOS, PERECEDEROS Y BEBIDAS|*Apio 25grs, El Ombú PTIc|45|
|
||||
CONDIMENTOS, PERECEDEROS Y BEBIDAS|*Menta 25grs, El Ombú PTIc|45|
|
||||
CONDIMENTOS, PERECEDEROS Y BEBIDAS|*Melissa 25grs, El Ombú Ptic|45|
|
||||
CONDIMENTOS, PERECEDEROS Y BEBIDAS|*Albahaca limón, El Ombú Ptic|45|
|
||||
CONDIMENTOS, PERECEDEROS Y BEBIDAS|*Llanten 25grs, El Ombú PTIc|45|
|
||||
ARTÍCULOS PERSONALES Y DE LIMPIEZA|Preservativos Prudence clasico x3|59.09|
|
||||
ARTÍCULOS PERSONALES Y DE LIMPIEZA|Tabaco Cerrito|99|
|
||||
ARTÍCULOS PERSONALES Y DE LIMPIEZA|Hojilla JOB x30 |22|
|
||||
ARTÍCULOS PERSONALES Y DE LIMPIEZA|*Shampoo Ainé Cuidado Total 500cc|230|
|
||||
ARTÍCULOS PERSONALES Y DE LIMPIEZA|*Shampoo Ainé Brillo Extremo 500cc|230|
|
||||
ARTÍCULOS PERSONALES Y DE LIMPIEZA|*Acondicionador Ainé Cuidado Total 500cc |230|
|
||||
ARTÍCULOS PERSONALES Y DE LIMPIEZA|*Acondicionador Ainé Brillo Extremo 500cc |230|
|
||||
ARTÍCULOS PERSONALES Y DE LIMPIEZA|*Acondicionador Ainé Dos Minutos 500cc |230|
|
||||
ARTÍCULOS PERSONALES Y DE LIMPIEZA|Shampoo Suave 930ml |144.09|
|
||||
ARTÍCULOS PERSONALES Y DE LIMPIEZA|Acondicionador Suave 930ml |144.09|
|
||||
ARTÍCULOS PERSONALES Y DE LIMPIEZA|Jabón de tocador IO, 80gs |12|
|
||||
ARTÍCULOS PERSONALES Y DE LIMPIEZA|Cepillo dental Introdento (medio)|29.74|
|
||||
ARTÍCULOS PERSONALES Y DE LIMPIEZA|Pasta Dental Introdento menta 102 grs. |36.72|
|
||||
ARTÍCULOS PERSONALES Y DE LIMPIEZA|Loción repelente de mosquitos, 200 ml|210|
|
||||
ARTÍCULOS PERSONALES Y DE LIMPIEZA|*Pack x3 jabones glicerina vegetal Natura|330|
|
||||
ARTÍCULOS PERSONALES Y DE LIMPIEZA|*Desodorante ecológico apto veganos Natura|160|
|
||||
ARTÍCULOS PERSONALES Y DE LIMPIEZA|*Pasta Dental Libre de Flúor Natura|165|
|
||||
ARTÍCULOS PERSONALES Y DE LIMPIEZA|*Shampoo artesanal pelo graso 250ml Natura|235|
|
||||
ARTÍCULOS PERSONALES Y DE LIMPIEZA|*Shampoo artesanal pelo seco 250ml Natura|230|
|
||||
ARTÍCULOS PERSONALES Y DE LIMPIEZA|*Shampoo sólido cabello seco y normal 50gr |340|
|
||||
ARTÍCULOS PERSONALES Y DE LIMPIEZA|Protector solar factor 65, 200 ml. NUEVO!!|550|
|
||||
ARTÍCULOS PERSONALES Y DE LIMPIEZA|*Shampoo sólido cabello graso 50gr |355|
|
||||
ARTÍCULOS PERSONALES Y DE LIMPIEZA|*Acondicionador sólido 50gr |350|
|
||||
ARTÍCULOS PERSONALES Y DE LIMPIEZA|Cepillo dental de bambú 97% biodegradable (niños y adultos)|165|
|
||||
ARTÍCULOS PERSONALES Y DE LIMPIEZA|*Talco pédico 200gr |205|
|
||||
ARTÍCULOS PERSONALES Y DE LIMPIEZA|*Bálsamo labial Herencias de aquelarre (protege y repara) |180|
|
||||
ARTÍCULOS PERSONALES Y DE LIMPIEZA|*Detergente ecológico grupo Flores Silvestres 500 grs|90|
|
||||
ARTÍCULOS PERSONALES Y DE LIMPIEZA|*Jabón en polvo Bonsai 800g|70|Bonsai
|
||||
ARTÍCULOS PERSONALES Y DE LIMPIEZA|*Jabón en polvo Bonsai 5kg|350|Bonsai
|
||||
ARTÍCULOS PERSONALES Y DE LIMPIEZA|*Suavizante Bonsai 1lt|70|Bonsai
|
||||
ARTÍCULOS PERSONALES Y DE LIMPIEZA|*Jabon liquido para lavarropas 900 cc Bonsai|80|Bonsai
|
||||
ARTÍCULOS PERSONALES Y DE LIMPIEZA|*Jabon liquido para lavarropas 3 lts Bonsai|220|Bonsai
|
||||
ARTÍCULOS PERSONALES Y DE LIMPIEZA|*Jabon liquido de Manos 500 cc Bonsai|50|Bonsai
|
||||
ARTÍCULOS PERSONALES Y DE LIMPIEZA|*Perfumador de telas 250 cc Bonsai|100|Bonsai
|
||||
ARTÍCULOS PERSONALES Y DE LIMPIEZA|*Limpiador desengarsante para cocinas y baños aroma cítrico 1 litro (no es para cañerías)|90|Bonsai
|
||||
ARTÍCULOS PERSONALES Y DE LIMPIEZA|*Entrebichitos - MEN 2lts. (graseras, pozos, cañerías, plantas)|180|Entrebichitos
|
||||
ARTÍCULOS PERSONALES Y DE LIMPIEZA|*Entrebichitos - MEN Limpieza 1lt (suelos, mesadas, paredes, combate hongos, bacterias y virus)|100|Entrebichitos
|
||||
ARTÍCULOS PERSONALES Y DE LIMPIEZA|*Entrebichitos - Pastilla grasera|80|Entrebichitos
|
||||
ARTÍCULOS PERSONALES Y DE LIMPIEZA|*Hipoclorito El Resistente 1800cc|66|El Resistente
|
||||
ARTÍCULOS PERSONALES Y DE LIMPIEZA|*Limpiador perfumado El Resistente (perfumol) 1800cc|66|El Resistente
|
||||
ARTÍCULOS PERSONALES Y DE LIMPIEZA|*Detergente El Resistente 500ml|43|El Resistente
|
||||
ARTÍCULOS PERSONALES Y DE LIMPIEZA|*KIT El Resistente (Hip./Perf./Det.)|161|El Resistente
|
||||
ARTÍCULOS PERSONALES Y DE LIMPIEZA|Jabon bulldog packx2|66.24|
|
||||
ARTÍCULOS PERSONALES Y DE LIMPIEZA|Rejilla de cocina 40 x 27.5 Tacuabé (ex Paylana) cm|22|
|
||||
ARTÍCULOS PERSONALES Y DE LIMPIEZA|Trapo de piso 55 x 55 Tacuabé (ex Paylana)|35|
|
||||
ARTÍCULOS PERSONALES Y DE LIMPIEZA|Esponja de cocina|22|
|
||||
ARTÍCULOS PERSONALES Y DE LIMPIEZA|Esponja de acero inoxidable|23|
|
||||
ARTÍCULOS PERSONALES Y DE LIMPIEZA|Repasador de algodón 43 x 65 cm|39|
|
||||
ARTÍCULOS PERSONALES Y DE LIMPIEZA|Franela 34 x 34|30|
|
||||
ARTÍCULOS PERSONALES Y DE LIMPIEZA|Escoba|97|
|
||||
ARTÍCULOS PERSONALES Y DE LIMPIEZA|Pala con mango|89|
|
||||
ARTÍCULOS PERSONALES Y DE LIMPIEZA|Balde 9 Lts |99|
|
||||
ARTÍCULOS PERSONALES Y DE LIMPIEZA|Bolsa de residuos 50x55 30 unidades |49|
|
||||
ARTÍCULOS PERSONALES Y DE LIMPIEZA|Lampazo |99|
|
||||
ARTÍCULOS PERSONALES Y DE LIMPIEZA|Guantes de latex talle M|80.1|
|
||||
ARTÍCULOS PERSONALES Y DE LIMPIEZA|Rollitos de alumnio x6 |27.3|
|
||||
ARTÍCULOS PERSONALES Y DE LIMPIEZA|*Vela de apagón|8.37|
|
||||
ARTÍCULOS PERSONALES Y DE LIMPIEZA|*Vela de citronela 1 mecha|122.2|
|
||||
ARTÍCULOS PERSONALES Y DE LIMPIEZA|Pastillas para mosquitos Sapolio 12 unidades |52.61|
|
||||
ARTÍCULOS PERSONALES Y DE LIMPIEZA|Pañales Babysec ULTRA XXG 24 unidades|312|
|
||||
ARTÍCULOS PERSONALES Y DE LIMPIEZA|Pañales Babysec ULTRA XG 24 unidades|312|
|
||||
ARTÍCULOS PERSONALES Y DE LIMPIEZA|Pañales Babysec ULTRA G 30 unidades|312|
|
||||
ARTÍCULOS PERSONALES Y DE LIMPIEZA|Pañales Babysec ULTRA M 36 unidades|312|
|
||||
ARTÍCULOS PERSONALES Y DE LIMPIEZA|Pañales Babysec ULTRA P 36 unidades|312|
|
||||
ARTÍCULOS PERSONALES Y DE LIMPIEZA|Toallita de bebé BabySec ultra 50un|67|
|
||||
ARTÍCULOS PERSONALES Y DE LIMPIEZA|Papel Higienico: Higienol Texturado x4|47|
|
||||
ARTÍCULOS PERSONALES Y DE LIMPIEZA|Papel de Cocina Sussex extra x 2 -120 paños-|57|
|
||||
TEXTIL|*Calza licra de algodon talle S|750|
|
||||
TEXTIL|*Calza licra de algodon talle M|750|
|
||||
TEXTIL|*Calza licra de algodon talle L|750|
|
||||
TEXTIL|*Calza licra de algodon talle XL|750|
|
||||
TEXTIL|*Calza licra de algodon talle 0|300|
|
||||
TEXTIL|*Calza licra de algodon talle 2 |300|
|
||||
TEXTIL|*Calza licra de algodon talle 4|300|
|
||||
TEXTIL|*Calza licra de algodon talle 6 |300|
|
||||
TEXTIL|*Calza licra de algodon talle 8 |300|
|
||||
TEXTIL|*Calza licra de algodon talle 10|300|
|
||||
TEXTIL|*Calza licra de algodon talle 12|300|
|
||||
TEXTIL|*Calza licra de algodon talle 14 |350|
|
||||
TEXTIL|*Calza licra de algodon talle 16 |350|
|
||||
TEXTIL|*Campera deportiva - Talle 0|350|
|
||||
TEXTIL|*Campera deportiva - Talle 2|350|
|
||||
TEXTIL|*Campera deportiva - Talle 4|350|
|
||||
TEXTIL|*Campera deportiva - Talle 6|400|
|
||||
TEXTIL|*Campera deportiva - Talle 8|400|
|
||||
TEXTIL|*Campera deportiva - Talle 10|400|
|
||||
TEXTIL|*Campera deportiva - Talle 12|450|
|
||||
TEXTIL|*Campera deportiva - Talle 14|450|
|
||||
TEXTIL|*Campera deportiva - Talle 16|450|
|
||||
TEXTIL|*Pantalón deportivo - Talle 0|250|
|
||||
TEXTIL|*Pantalón deportivo - Talle 2|250|
|
||||
TEXTIL|*Pantalón deportivo - Talle 4|250|
|
||||
TEXTIL|*Pantalón deportivo - Talle 6|300|
|
||||
TEXTIL|*Pantalón deportivo - Talle 8|300|
|
||||
TEXTIL|*Pantalón deportivo - Talle 10|300|
|
||||
TEXTIL|*Pantalón deportivo - Talle 12|350|
|
||||
TEXTIL|*Pantalón deportivo - Talle 14|350|
|
||||
TEXTIL|*Pantalón deportivo - Talle 16|350|
|
||||
TEXTIL|*Babucha deportiva en algodón - Talle 4|500|
|
||||
TEXTIL|*Babucha deportiva en algodón - Talle 6|500|
|
||||
TEXTIL|*Babucha deportiva en algodón - Talle 8 |500|
|
||||
TEXTIL|*Babucha deportiva en algodón - Talle 10 |600|
|
||||
TEXTIL|*Babucha deportiva en algodón - Talle 12 |600|
|
||||
TEXTIL|*Babucha deportiva en algodón - Talle 14 |600|
|
||||
TEXTIL|*Babucha deportiva en algodón - Talle 16 |600|
|
||||
TEXTIL|*Babucha deportiva en algodón - Talle 18 |600|
|
||||
TEXTIL|*Pantalón deportivo liso de algodón - Talle S|850|
|
||||
TEXTIL|*Pantalón deportivo liso de algodón - Talle M|850|
|
||||
TEXTIL|*Pantalón deportivo liso de algodón - Talle L|850|
|
||||
TEXTIL|*Pantalón deportivo liso de algodón - Talle XL |850|
|
||||
TEXTIL|*Canguro deportivo liso con capucha de algodón - TalleS |1000|
|
||||
TEXTIL|*Canguro deportivo liso con capucha de algodón - Talle M |1000|
|
||||
TEXTIL|*Canguro deportivo liso con capucha de algodón - Talle L |1000|
|
||||
TEXTIL|*Canguro deportivo liso con capucha de algodón - Talle XL|1000|
|
||||
TEXTIL|*Túnica niñe con cinto en espalda y tajo detrás- talles 6 a 16|480|
|
||||
TEXTIL|*Túnica niñe con martingala, festón y pinzas talles 6 a 16|480|
|
||||
TEXTIL|*Pintor verde - talles 2 a 8|300|
|
||||
TEXTIL|*Pintor azul - talles 2 a 8|300|
|
||||
TEXTIL|*Pintor rojo - talles 2 a 8|300|
|
||||
TEXTIL|*Pintor amarillo - talles 2 a 8|300|
|
||||
TEXTIL|*Túnicas adulto - talles 1 a 5|1100|
|
||||
TEXTIL|*Moña escolar satinada|50|
|
||||
TEXTIL|*Juego de sábanas de algodón 1 plaza|1000|
|
||||
TEXTIL|*Juego de sábanas de algodón 2 plazas (para sommier) |1200|
|
||||
TEXTIL|*Sábana sola sin elástico, 2 plazas (para sommier) |700|
|
||||
TEXTIL|*Sábana sola con elástico, 2 plazas (para sommier) |700|
|
||||
TEXTIL|*Juego de toallón y toalla de algodón |650|
|
||||
TEXTIL|*Toallón|500|
|
||||
TEXTIL|*Toalla de mano|250|
|
||||
TEXTIL|*Turbante toalla|350|
|
||||
TEXTIL|*Tapaboca de tela|50|
|
||||
ARTÍCULOS DE MADRES Y FAMILIARES|Pañuelo Madres y Familiares de Detenidos Desaparecidos|50|Madres y familiares
|
||||
ARTÍCULOS DE MADRES Y FAMILIARES|Balconera Madres y Familiares de Detenidos Desaparecidos|100|Madres y familiares
|
||||
ARTÍCULOS DE MADRES Y FAMILIARES|Pack 2 - 1 Pin redondo + Lapicera + Pegotines y Marcalibros|100|Madres y familiares
|
||||
PRODUCTOS DEL MPS|Pack de 5 pegotines del MPS (2 logos y 3 consignas, todo a color).|40|Madres y familiares
|
||||
BONOS Y FINANCIAMIENTO SORORO|Campaña solidaria MPS - apoyo a ollas y merenderos|20|MPS
|
||||
BONOS Y FINANCIAMIENTO SORORO|Financiamiento sororo para copa menstrual|20|
|
||||
BONOS Y FINANCIAMIENTO SORORO|Galpón de corrales|20|
|
||||
PRODUCTOS DE GESTIÓN MENSTRUAL|Copa menstrual de silicona, ecológica |750|
|
||||
PRODUCTOS DE GESTIÓN MENSTRUAL|Copa menstrual de silicona, ecológica (financiamiento sororo)|0|
|
||||
PRODUCTOS DE GESTIÓN MENSTRUAL|Vaso esterilizador para copa menstrual|290|
|
||||
PRODUCTOS DE GESTIÓN MENSTRUAL|*Toallita de tela Nocturna "Chúlin"|170|Chúlin
|
||||
PRODUCTOS DE GESTIÓN MENSTRUAL|*Toallita de tela para Colaless "Chúlin"|170|Chúlin
|
||||
PRODUCTOS DE GESTIÓN MENSTRUAL|*Toallitas de tela para Bombacha "Chúlin"|200|Chúlin
|
||||
PRODUCTOS DE GESTIÓN MENSTRUAL|*Protector Diario de tela "Chúlin"|160|Chúlin
|
||||
PRODUCTOS DE GESTIÓN MENSTRUAL|*Pack 1: 2 protectores diarios + 2 toallitas para bombacha "Chúlin"|610|Chúlin
|
||||
PRODUCTOS DE GESTIÓN MENSTRUAL|*Pack 2: 3 protectores diarios "Chúlin" |410|Chúlin
|
||||
PRODUCTOS DE GESTIÓN MENSTRUAL|Ladysoft Clasicas 8un|20.3|
|
||||
PRODUCTOS DE GESTIÓN MENSTRUAL|Tampones Medianos Ladysoft 10un|84.7|
|
||||
PRODUCTOS DE GESTIÓN MENSTRUAL|Tampones Grandes Ladysoft 10un|84.7|
|
||||
CANASTA 83 - Noviembre 2022|||||REFERENCIAS:
|
||||
S-G (SIN GLUTEN)
|
||||
S-S (SIN SAL AGREGADA)
|
||||
S-A (SIN AZUCAR AGREGADA)
|
||||
S-P-A (SIN PRODUCTOS DE ORIGEN ANIMAL)
|
||||
|||||||||Esta columna (sin el total) es la que hay que pegar en la columna Pedido de la planilla enviada por Compras|
|
||||
|||||||||||||||
|
||||
|Nombre del barrio|Total|0||||||||||||
|
||||
Tipo|Producto|Precio|flia 1|flia 2|flia 3|flia 4|flia 5|flia 6|flia 7|flia 8|flia 9|flia 10|flia 11|Cantidad total de productos|Monto total por producto ($)
|
||||
ALIMENTOS NO PERECEDEROS||||||||||||||0|0
|
||||
P|Yerba Compuesta La Herboristería 1kg|147.32||||||||||||0|0
|
||||
P|Yerba Yusa tradicional 1kg|121.8||||||||||||0|0
|
||||
P|Yerba Yusa tradicional 500grs|65||||||||||||0|0
|
||||
P|Yerba Sara tradicional 1kg (Sin TACC)|135.64||||||||||||0|0
|
||||
P|Yerba Sara suave 1kg (Sin TACC)|137.86||||||||||||0|0
|
||||
P|*Harina Santa Unión 000 1kg|37.7||||||||||||0|0
|
||||
P|*Harina Santa Unión 0000 1kg|43.6||||||||||||0|0
|
||||
P|*Harina de trigo integral Pasaná 1 kg|65.0||||||||||||0|0
|
||||
P|*Harina de arroz Pasaná 1 kg (Puede contener gluten)|65.0||||||||||||0|0
|
||||
P|*Harina de Garbanzos Pasaná 1 kg (Puede contener gluten)|140.0||||||||||||0|0
|
||||
P|*Mezcla para faina Pasaná 1 kg (Puede contener gluten)|150.0||||||||||||0|0
|
||||
P|*Fécula de Mandioca Pasaná 1 kg (Puede contener gluten)|90.0||||||||||||0|0
|
||||
P|Tres Harinas 500grs (Sin TAAC)|89||||||||||||0|0
|
||||
P|*Harina Santa Unión 000 Bolsa 25kg|816.72||||||||||||0|0
|
||||
P|*Polenta Santa Unión 450gr|19.51||||||||||||0|0
|
||||
P|*Mezcla de Fainá Santa Unión 5kg|477.25||||||||||||0|0
|
||||
P|*Fideos Caorsi Tirabuzón 1kg|68||||||||||||0|0
|
||||
P|*Fideos Caorsi Tallarín 1kg|76||||||||||||0|0
|
||||
P|*Fideos Caorsi Moñita 1kg|76||||||||||||0|0
|
||||
P|*Fideos Caorsi para sopa 1kg|68||||||||||||0|0
|
||||
P|*Fideos Caorsi para sopa 5kg|333||||||||||||0|0
|
||||
P|*Fideos Caorsi Tirabuzón 5kg|333||||||||||||0|0
|
||||
P|Arroz Blue Patna 1kg|42.23||||||||||||0|0
|
||||
P|Arroz Shiva 1kg|25.65||||||||||||0|0
|
||||
P|*Arroz integral 1kg|55||||||||||||0|0
|
||||
P|*Arroz integral 3kg|155||||||||||||0|0
|
||||
P|Aceite Condesa de Soja 900 cc.|93.3||||||||||||0|0
|
||||
P|Aceite Uruguay de Girasol 900 cc.|115.2||||||||||||0|0
|
||||
P|Aceite Optimo canola 900 cc.|102||||||||||||0|0
|
||||
P|*Aceite de oliva 500 ml.|210||||||||||||0|0
|
||||
P|Vinagre Uruguay 900ml|81.7||||||||||||0|0
|
||||
P|Aceite de Oliva Cuatro Piedras 3 lt|1190||||||||||||0|0
|
||||
P|*Salsa de soja La Posta 250 ml.|100||||||||||||0|0
|
||||
P|*Aceitunas verdes sin carozo en frasco La Posta 500 gr.|195||||||||||||0|0
|
||||
P|*Aceitunas negras sin carozo en frasco frasco La Posta 500 gr.|195||||||||||||0|0
|
||||
P|Lata atún Golden Fish desmenuzado al aceite 170g|38.55||||||||||||0|0
|
||||
P|Lata de arvejas Campero 300g|19||||||||||||0|0
|
||||
P|Lata de choclo Cosecha 300g|27.14||||||||||||0|0
|
||||
P|Lata de jardinera Cosecha|30.94||||||||||||0|0
|
||||
P|Lata de porotos negros Cosecha|34.75||||||||||||0|0
|
||||
P|Lata de porotos de frutilla Cosecha|34.75||||||||||||0|0
|
||||
P|Lata de duraznos en almíbar Campero|72||||||||||||0|0
|
||||
P|Mayonesa Uruguay 500g|85.7||||||||||||0|0
|
||||
P|Azúcar Bella Unión 1kg|44.3||||||||||||0|0
|
||||
P|Azúcar rubia Mascabo 500g|95||||||||||||0|0
|
||||
P|Azúcar impalpable Hornex 200 gr|37||||||||||||0|0
|
||||
P|Azúcar impalpable Hornex 1kg|121||||||||||||0|0
|
||||
P|Almidón de maíz Hornex 1Kg|76||||||||||||0|0
|
||||
P|Polvo de Hornear Hornex 1 kg|141||||||||||||0|0
|
||||
P|Polvo de Hornear Hornex 100 g + 20 g|36.5||||||||||||0|0
|
||||
P|*Esencia de vainilla La Posta 100ml|90.0||||||||||||0|0
|
||||
P|*Bicarbonato de sodio La Posta 250 gr|50||||||||||||0|0
|
||||
P|Grasa Uruguay 400grs|62||||||||||||0|0
|
||||
P|Levadura seca Hornex 125g|118||||||||||||0|0
|
||||
P|Café Sorocabana glaseado p/máquina 500 grs|356.51||||||||||||0|0
|
||||
P|Café Sorocabana natural p/máquina 500 grs|483.64||||||||||||0|0
|
||||
P|Café soluble Saint bollón 170 gr|192.7||||||||||||0|0
|
||||
P|Té Negro en hebras 90gr hornimans|35.85||||||||||||0|0
|
||||
P|Galletas de arroz SIN SAL Natural Rice 120 gr.|36.0||||||||||||0|0
|
||||
P|Galletas de arroz comunes Natural Rice 120 gr|36.0||||||||||||0|0
|
||||
P|Leche en polvo entera 200 gr|100.0||||||||||||0|0
|
||||
P|Leche en polvo entera 1kg|382.22||||||||||||0|0
|
||||
P|* Coco rallado 200gr|65||||||||||||0|0
|
||||
P|* Coco rallado 1kg|255.0||||||||||||0|0
|
||||
P|Cocoa Hornex 200gr|49.5||||||||||||0|0
|
||||
P|Postre de chocolate Hornex 8 porciones|41.5||||||||||||0|0
|
||||
P|Postre LIGHT de vainilla Hornex 8 porciones (aprobado por ADU)|66.0||||||||||||0|0
|
||||
P|Flan de vainilla Hornex 8 porciones|41.5||||||||||||0|0
|
||||
P|Gelatina de frutilla Hornex 8 porciones|41.5||||||||||||0|0
|
||||
P|Bizcochuelo de vainilla SIN GLUTEN 500gr Hornex|158||||||||||||0|0
|
||||
P|Pizza SIN GLUTEN 320gr Hornex|150||||||||||||0|0
|
||||
P|Pulpa de Tomate De Ley 1lt (S-G)|52.0||||||||||||0|0
|
||||
P|Pure de papa instantaneo De Ley 125g|25.2||||||||||||0|0
|
||||
P|*Sal fina sin fluor Polenteados 500g|28||||||||||||0|0
|
||||
P|*Sal gruesa sin fluor Polenteados 500g|28.0||||||||||||0|0
|
||||
P |*Salsa de tomate casera (puro tomate) 1 lt - (S-G) - azucar agregada: 1g/L - sal agregada: 0,25g/L|75.0||||||||||||0|0
|
||||
P|*Barras de cereales (maní, sésamo, lino, girasol, avena, copos de arroz, copos de máiz, azúcar rubia y miel) - Pack x2|75.0||||||||||||0|0
|
||||
P|*Barras de cereales bañadas en chocolate (maní, sésamo, lino, girasol, avena, copos de arroz, copos de máiz, azúcar rubia y miel) - Pack x2|85.0||||||||||||0|0
|
||||
P|*Granola artesanal 500 gr Ing: copos ,avena,miel, vainilla,coco rallado, chia,girasol,sésamo, lino,maní, almendras, castañas de caju, nueces, chips de chocolate.|235.0||||||||||||0|0
|
||||
P|*Granola simple (avena+ girasol+ pasaUva) 1kg|175.0||||||||||||0|0
|
||||
P|*Copos de maíz azucarados 500g|92.0||||||||||||0|0
|
||||
P|*Copos de maíz naturales 500g|92.0||||||||||||0|0
|
||||
P|*Crema untable de maní 250gr|92.0||||||||||||0|0
|
||||
P|Alfajor de coco 80 g (S-G) |44.0||||||||||||0|0
|
||||
P|Galletitas dulces sabor cacao, nueces, avena y sésamo 150 g (S-G, S-A)|108.0||||||||||||0|0
|
||||
P|Crackers saladas de remolacha y chía 180 g (S-G)|108.0||||||||||||0|0
|
||||
P|*Lino 1/4 kg|30.0||||||||||||0|0
|
||||
P|*Chía 1/4 kg|65.0||||||||||||0|0
|
||||
P|*Girasol 1/2 kg|85.0||||||||||||0|0
|
||||
P|*Sésamo 1/4 kg|55.0||||||||||||0|0
|
||||
P|*Quinoa 1 kg|200.0||||||||||||0|0
|
||||
P|*Dátiles con carozo 500 gr|185.0||||||||||||0|0
|
||||
P|*Cacao en polvo 250 grs (S-A)|100.0||||||||||||0|0
|
||||
P|*Almendra pelada (sin tostar) Polenteados 100g|80.0||||||||||||0|0
|
||||
P|*Pasas de Uva Polenteados 250 gr|69.0||||||||||||0|0
|
||||
P|*Nueces Polenteados 100g|81.0||||||||||||0|0
|
||||
P|*Castañas tostadas SIN sal 100grs|75.0||||||||||||0|0
|
||||
P|*Avena laminada instantánea Polenteados 500g|49.0||||||||||||0|0
|
||||
P|*Pan de molde Gory Lacteado 550g|59.0||||||||||||0|0
|
||||
P|*Pan de molde Integral Doña Erika 550g|59.0||||||||||||0|0
|
||||
P|*Galleta Malteada La Socialista 350g|69.0||||||||||||0|0
|
||||
P|*Galleta Malteada c/semillas (sésamo, chia, lino) La Socialista 380gr|88.0||||||||||||0|0
|
||||
P|*Galleta Cara Sucia La Socialista 350g|77.0||||||||||||0|0
|
||||
P|*Grisines La Socialista 350g|81.0||||||||||||0|0
|
||||
P|*Maní pelado frito y salado Polenteados 500g|93.0||||||||||||0|0
|
||||
P|*Maní pelado sin sal Polenteados 500g|93.0||||||||||||0|0
|
||||
P|*Garbanzo Polenteados 1kg|95.0||||||||||||0|0
|
||||
P|* Maiz para pop 500grs|54.0||||||||||||0|0
|
||||
P|*Lentejas Polenteados 1kg|96.0||||||||||||0|0
|
||||
P|*Porotos negros Polenteados 1kg|102.0||||||||||||0|0
|
||||
P|*Porotos de manteca Polenteados 1kg|115.0||||||||||||0|0
|
||||
P|*Proteína de SOJA texturizada 1kg|135||||||||||||0|0
|
||||
CONDIMENTOS, PERECEDEROS Y BEBIDAS||||||||||||||0|0
|
||||
P|*Tallarines frescos de yema Pastas Colon 1kg|175||||||||||||0|0
|
||||
P|*Tallarines frescos de espinaca Pastas Colon 1kg|185||||||||||||0|0
|
||||
P|*Tallarines frescos de morrón Pastas Colon 1kg|190.0||||||||||||0|0
|
||||
P|*Salsa pomarola 300gr ex trabajadores de La Spezia|90||||||||||||0|0
|
||||
P|*Fetuccine integral de zanahoria, apto veganos 1kg|190.0||||||||||||0|0
|
||||
P|*Romanitos rellenos jamón y queso ex trabajadores de La Spezia 1kg|510||||||||||||0|0
|
||||
P|*Romanitos vegetarianos ex trabajadores de La Spezia 1kg|510.0||||||||||||0|0
|
||||
P|*Sorrentinos jamón y queso 1Kg ex trabajadores de La Spezia|470.0||||||||||||0|0
|
||||
P|*Sorrentinos Ricota y Nuez 1kg ex Trabajadores de La Spezia|470.0||||||||||||0|0
|
||||
P|*Raviolón vegetariano 1Kg ex trabajadores de La Spezia|450.0||||||||||||0|0
|
||||
P|*Raviolón Caprese 1kg ex Trabajadores de La Spezia|450.0||||||||||||0|0
|
||||
P|*Prepizza de 28cm ex trabajadores de La Spezia|90.0||||||||||||0|0
|
||||
P|*Milanesas de carne empanadas 1kg|375.0||||||||||||0|0
|
||||
P|*Milanesas de pollo empanadas 1kg|365.0||||||||||||0|0
|
||||
P|*Empanada de pollo x 6|250.0||||||||||||0|0
|
||||
P|*Empanada de carne x 6|250.0||||||||||||0|0
|
||||
P|*Milanesas de seitan x6|350.0||||||||||||0|0
|
||||
P|*Hamburguesas parrilleras de soja no transgénica, sal, harina de avena y adobo sin picante x6 - (S-A)|320.0||||||||||||0|0
|
||||
P|*Jamón vegano (gluten de trigo, salsa de tomate, sabor ahumado, sal) horma 250 g - (S-A)|215.0||||||||||||0|0
|
||||
P|*Hummus 200cc|140.0||||||||||||0|0
|
||||
P|*Pate de zanahoria 200cc|140.0||||||||||||0|0
|
||||
P|*Pan rallado 1kg|65.0||||||||||||0|0
|
||||
P|*Pan rallado saborizado 1Kg|85.0||||||||||||0|0
|
||||
P|*Pimienta blanca 30g|20.0||||||||||||0|0
|
||||
P|*Orégano 25g|20.0||||||||||||0|0
|
||||
P|*Pimentón 30g|20.0||||||||||||0|0
|
||||
P|*Adobo 30g|20.0||||||||||||0|0
|
||||
P|*Ajo y Perejil 30g|20.0||||||||||||0|0
|
||||
P|*PACK "A" Curry, nuez moscada, ajo polvo, condimento verde, comino|100.0||||||||||||0|0
|
||||
P|*PACK "B" Pimienta Negra polvo / sal de ajo, aji molido, canela polvo y chimichurry|100.0||||||||||||0|0
|
||||
P|*PACK "C" Cebolla en escamas, tomillo, clavo de olor, pimienta blanca en grano, ajo en escamas|100.0||||||||||||0|0
|
||||
P|*Pimentón 250grs|95.0||||||||||||0|0
|
||||
P|*Orégano 250g|105.0||||||||||||0|0
|
||||
P|*Nuez moscada entera 2 unidades|23.0||||||||||||0|0
|
||||
P|*Canela en rama 10g|23.0||||||||||||0|0
|
||||
P|*Cúrcuma 20g|23.0||||||||||||0|0
|
||||
P|*Pack "Sabores exoticos" - Paprika, Espinaca en polvo, Mostaza en polvo.|62.0||||||||||||0|0
|
||||
P|*Pack "Mate Uruguayo" - Marcela, Cedrón, Boldo.|115.0||||||||||||0|0
|
||||
P|*Pack "Delicias del campo" Té rojo, Manzanilla, Pétalos de rosa.|115.0||||||||||||0|0
|
||||
P|*Pack "Té de las 5hs-Light" - Té verde, Lemon Grass, Hojas de Stevia.|115.0||||||||||||0|0
|
||||
P|Vino Santero Marselán 1 lt.|220.0||||||||||||0|0
|
||||
P|Vino Tannat-Cabernet Paso del Roble 1 lt.|98.0||||||||||||0|0
|
||||
P|Vino Rosado dulce Paso del Roble 1 lt.|98.0||||||||||||0|0
|
||||
P|Frizzante de Maracuyá|230.0||||||||||||0|0
|
||||
P|Frizzante de Frutos del bosque|230.0||||||||||||0|0
|
||||
P|*Cerveza artesanal Punto Rojo Red Ipa 500cc|100.0||||||||||||0|0
|
||||
P|*Cerveza artesanal APA Guillotina 1L|190.0||||||||||||0|0
|
||||
P|Fernet artesanal 780 ml|380.0||||||||||||0|0
|
||||
P|Jugo en polvo "Juguito" sabores surtidos|8.0||||||||||||0|0
|
||||
P|Jugo Big C 200ml sabores surtidos|15.5||||||||||||0|0
|
||||
P|*Refresco U Naranja 2lt|84.0||||||||||||0|0
|
||||
P|*Refresco U Mandarina 2lt|84.0||||||||||||0|0
|
||||
P|*Refresco U Pomelo 2lt|84.0||||||||||||0|0
|
||||
P|*Refresco U Limonada 2lt|84.0||||||||||||0|0
|
||||
P|*Agua 6 lts|85.0||||||||||||0|0
|
||||
P|*Queso Muzzarella 1/2 kg Unidad Cooperaria|150.0||||||||||||0|0
|
||||
P|*Queso Magro s/sal 1/2 kg Unidad Cooperaria|167.0||||||||||||0|0
|
||||
P|*Queso Magro c/sal 1/2 kg Uniddad Cooperaria|167.0||||||||||||0|0
|
||||
P|*Queso Danbo 1/2 kg Unidad Cooperaria|163.0||||||||||||0|0
|
||||
P|*Queso Sbrinz 1/2 kg Unidad Cooperaria|250.0||||||||||||0|0
|
||||
P|*Queso Colonia 1/2 Kg Unidad Cooperaria|172.0||||||||||||0|0
|
||||
P|*Queso parrillero 350g Unidad Cooperaria|175.0||||||||||||0|0
|
||||
P|*Queso de mandioca en horma 400 gr|230.0||||||||||||0|0
|
||||
P|*Queso saborizado con ciboulette 600grs (envasado al vacío)|254.0||||||||||||0|0
|
||||
P|*Queso saborizado con albahaca 600grs (envasado al vacío)|254.0||||||||||||0|0
|
||||
P|*Queso saborizado con orégano 500grs (envasado al vacío)|276.0||||||||||||0|0
|
||||
P|*Queso semiduro 500grs (envasado al vacío) Productores Ismael Cortinas|215.0||||||||||||0|0
|
||||
P|*Queso cuartirolo horma 1kg envasado al vacío|297.0||||||||||||0|0
|
||||
P|*Queso rallado 200grs|132.0||||||||||||0|0
|
||||
P|*Dulce de Leche 1 Kg Unidad Cooperaria|250.0||||||||||||0|0
|
||||
P|*Dulce de leche de coco 360 gr|330.0||||||||||||0|0
|
||||
P|*Morrones en vinagre 330 gr|180.0||||||||||||0|0
|
||||
P|*Berenjenas en vinagre 330 gr|180.0||||||||||||0|0
|
||||
P|*Mermelada de morrones 250 gr|180.0||||||||||||0|0
|
||||
P|*Mermelada de frutilla, 450 grs.|134.0||||||||||||0|0
|
||||
P|*Mermelada de durazno, 450 grs.|120.0||||||||||||0|0
|
||||
P|*Mermelada de ciruela, 450 grs.|134.0||||||||||||0|0
|
||||
P|*Mermelada de higo, 450 grs.|120.0||||||||||||0|0
|
||||
P|*Mermelada de zapallo, 450 grs.|115.0||||||||||||0|0
|
||||
P|*Mermelada de naranja, 450 grs.|128.0||||||||||||0|0
|
||||
P|*Mermelada de arándanos, 450 grs.|155.0||||||||||||0|0
|
||||
P|*Dulce de membrillo, 900grs|114.0||||||||||||0|0
|
||||
P|*Dulce de batata con chocolate 1kg|128.0||||||||||||0|0
|
||||
P|*Dulce de zapallo 1kg|119.0||||||||||||0|0
|
||||
P|*Dulce de higo 1kg|128.0||||||||||||0|0
|
||||
P|*Miel artesanal 1 kg|230.0||||||||||||0|0
|
||||
P|*Canasta de frutas y verduras "34 Sur Productos Orgánicos"|630.0||||||||||||0|0
|
||||
ARTÍCULOS PERSONALES Y DE LIMPIEZA||||||||||||||0|0
|
||||
P|Preservativos Prime ultrafinos x3|85.7||||||||||||0|0
|
||||
P|Tabaco Cerrito|107.7||||||||||||0|0
|
||||
P|Hojilla JOB x30|24.34||||||||||||0|0
|
||||
P|Shampoo Plusbelle 930ml|156.5||||||||||||0|0
|
||||
P|Acondicionador Plusbelle 930ml|156.5||||||||||||0|0
|
||||
P|Jabón de tocador IO, 80gs|13.7||||||||||||0|0
|
||||
P|Cepillo dental Introdento (medio)|32.79||||||||||||0|0
|
||||
P|Pasta Dental Introdento menta 102 grs.|40.5||||||||||||0|0
|
||||
P|*Pack x3 jabones glicerina vegetal Natura|330.0||||||||||||0|0
|
||||
P|*Desodorante ecológico apto veganos Natura|165.0||||||||||||0|0
|
||||
P|*Pasta Dental Libre de Flúor Natura|170.0||||||||||||0|0
|
||||
P|* Repelente 125 ml Natura|215.0||||||||||||0|0
|
||||
P|*Shampoo artesanal pelo seco 250 ml Natura|230.0||||||||||||0|0
|
||||
P|*Shampoo sólido cabello seco y normal 50 gr Natura|340.0||||||||||||0|0
|
||||
P|*Shampoo sólido cabello graso 50gr|355.0||||||||||||0|0
|
||||
P|*Acondicionador sólido 50gr Natura|350.0||||||||||||0|0
|
||||
P|*Cepillo dental de bambú 97% biodegradable (niños y adultos)|165.0||||||||||||0|0
|
||||
P|*Barrita quita manchas 75 gr Natura|100.0||||||||||||0|0
|
||||
P|*Talco pédico 200gr|205.0||||||||||||0|0
|
||||
P|*Jabón en polvo Bonsai 800g|70.0||||||||||||0|0
|
||||
P|*Jabón en polvo Bonsai 5kg|380.0||||||||||||0|0
|
||||
P|*Suavizante Bonsai 1lt|70.0||||||||||||0|0
|
||||
P|*Jabon liquido para lavarropas 900 cc Bonsai|80.0||||||||||||0|0
|
||||
P|*Jabon liquido para lavarropas 3 lts Bonsai|240.0||||||||||||0|0
|
||||
P|*Jabon liquido de Manos 500 cc Bonsai|50.0||||||||||||0|0
|
||||
P|*Perfumador de telas 250 cc Bonsai|110.0||||||||||||0|0
|
||||
P|*Limpiador desengarsante para cocinas y baños aroma cítrico 1 litro (no es para cañerías)|100.0||||||||||||0|0
|
||||
P|*Entrebichitos - MEN 2lts. (graseras, pozos, cañerías, plantas)|180.0||||||||||||0|0
|
||||
P|*Entrebichitos - MEN Limpieza 1lt (suelos, mesadas, paredes, combate hongos, bacterias y virus)|100.0||||||||||||0|0
|
||||
P|*Entrebichitos - Pastilla grasera|80.0||||||||||||0|0
|
||||
P|*Hipoclorito El Resistente 1800cc|72.0||||||||||||0|0
|
||||
P|*Limpiador perfumado El Resistente (perfumol) 1800cc|72.0||||||||||||0|0
|
||||
P|*Detergente El Resistente 500ml|48.0||||||||||||0|0
|
||||
P|*KIT El Resistente (Hip./Perf./Det.)|176.0||||||||||||0|0
|
||||
P|Jabon en barra Primor x1|29.4||||||||||||0|0
|
||||
P|Rejilla de cocina 40 x 27.5 Tacuabé (ex Paylana) cm|29.0||||||||||||0|0
|
||||
P|Trapo de piso 53 x 53 Tacuabé (ex Paylana)|37.0||||||||||||0|0
|
||||
P|Esponja de cocina|26.0||||||||||||0|0
|
||||
P|Esponja de acero inoxidable|29.0||||||||||||0|0
|
||||
P|Repasador de algodón 43 x 65 cm|53.0||||||||||||0|0
|
||||
P|Franela 34 x 34|37.0||||||||||||0|0
|
||||
P|Escoba|116.0||||||||||||0|0
|
||||
P|Pala con mango|99.0||||||||||||0|0
|
||||
P|Balde 9 Lts|109.0||||||||||||0|0
|
||||
P|Bolsa de residuos 50x55 30 unidades|63.0||||||||||||0|0
|
||||
P|Lampazo|119.0||||||||||||0|0
|
||||
P|Guantes de latex talle L|88.0||||||||||||0|0
|
||||
P|Rollitos de alumnio x6|30.0||||||||||||0|0
|
||||
P|*Vela de apagón|8.4||||||||||||0|0
|
||||
P|*Vela de citronela 1 mecha|122.2||||||||||||0|0
|
||||
P|Pañales Babysec ULTRA XXG 24 unidades|327.0||||||||||||0|0
|
||||
P|Pañales Babysec ULTRA XG 24 unidades|327.0||||||||||||0|0
|
||||
P|Pañales Babysec ULTRA G 30 unidades|327.0||||||||||||0|0
|
||||
P|Pañales Babysec ULTRA M 36 unidades|327.0||||||||||||0|0
|
||||
P|Pañales Babysec ULTRA P 36 unidades|327.0||||||||||||0|0
|
||||
P|Toallita de bebé BabySec ultra 50un|72.0||||||||||||0|0
|
||||
P|Papel Higienico: Higienol Texturado x4|42.0||||||||||||0|0
|
||||
P|Papel de Cocina Sussex extra x 2 -120 paños-|62.0||||||||||||0|0
|
||||
TEXTIL||||||||||||||0|0
|
||||
P|*Calza licra de algodon talle S|900.0||||||||||||0|0
|
||||
P|*Calza licra de algodon talle M|900||||||||||||0|0
|
||||
P|*Calza licra de algodon talle L|900||||||||||||0|0
|
||||
P|*Calza licra de algodon talle XL|900.0||||||||||||0|0
|
||||
P|*Conjunto primera muda 100% algodón color blanco liso (pack de pelele, bata y gorrito en bolsa de lienzo)|600.0||||||||||||0|0
|
||||
P|*Conjunto primera muda 100% algodón rayado azul, naranja, verde, amarillo, blanco (pack de pelele, bata y gorrito en bolsa de lienzo)|600.0||||||||||||0|0
|
||||
P|*Conjunto primera muda 100% algodón color rayado rojo, verde pálido, rosa pálido, blanco (pack de pelele, bata y gorrito en bolsa de lienzo)|600.0||||||||||||0|0
|
||||
P|*Calza licra de algodon talle 0|350||||||||||||0|0
|
||||
P|*Calza licra de algodon talle 2|350.0||||||||||||0|0
|
||||
P|*Calza licra de algodon talle 4|350.0||||||||||||0|0
|
||||
P|*Calza licra de algodon talle 6|450.0||||||||||||0|0
|
||||
P|*Calza licra de algodon talle 8|450.0||||||||||||0|0
|
||||
P|*Calza licra de algodon talle 10|450.0||||||||||||0|0
|
||||
P|*Calza licra de algodon talle 12|550.0||||||||||||0|0
|
||||
P|*Calza licra de algodon talle 14|550.0||||||||||||0|0
|
||||
P|*Calza licra de algodon talle 16|550.0||||||||||||0|0
|
||||
P|*Campera deportiva - Talle 0|350.0||||||||||||0|0
|
||||
P|*Campera deportiva - Talle 2|350.0||||||||||||0|0
|
||||
P|*Campera deportiva - Talle 4|350.0||||||||||||0|0
|
||||
P|*Campera deportiva - Talle 6|400.0||||||||||||0|0
|
||||
P|*Campera deportiva - Talle 8|400.0||||||||||||0|0
|
||||
P|*Campera deportiva - Talle 10|400.0||||||||||||0|0
|
||||
P|*Campera deportiva - Talle 12|450.0||||||||||||0|0
|
||||
P|*Campera deportiva - Talle 14|450.0||||||||||||0|0
|
||||
P|*Campera deportiva - Talle 16|450.0||||||||||||0|0
|
||||
P|*Pantalón deportivo - Talle 0|250.0||||||||||||0|0
|
||||
P|*Pantalón deportivo - Talle 2|250.0||||||||||||0|0
|
||||
P|*Pantalón deportivo - Talle 4|250.0||||||||||||0|0
|
||||
P|*Pantalón deportivo - Talle 6|300.0||||||||||||0|0
|
||||
P|*Pantalón deportivo - Talle 8|300.0||||||||||||0|0
|
||||
P|*Pantalón deportivo - Talle 10|300.0||||||||||||0|0
|
||||
P|*Pantalón deportivo - Talle 12|350.0||||||||||||0|0
|
||||
P|*Pantalón deportivo - Talle 14|350.0||||||||||||0|0
|
||||
P|*Pantalón deportivo - Talle 16|350.0||||||||||||0|0
|
||||
P|*Bikers licra de algodón - Talle S. |650.0||||||||||||0|0
|
||||
P|*Bikers licra de algodón - Talle M.|650.0||||||||||||0|0
|
||||
P|*Bikers licra de algodón - Talle L.|650.0||||||||||||0|0
|
||||
P|*Bikers licra de algodón - Talle XL. |650.0||||||||||||0|0
|
||||
P|* Bolsa estampada con logo MPS. Acción Solidaria. NUEVO!|155.0||||||||||||0|0
|
||||
P|*Túnica niñe con cinto en espalda y tajo detrás- talles 6 a 16|650.0||||||||||||0|0
|
||||
P|*Túnica niñe con martingala, festón y pinzas talles 6 a 16|650.0||||||||||||0|0
|
||||
P|*Pintor verde - talles 2 a 8|350.0||||||||||||0|0
|
||||
P|*Pintor azul - talles 2 a 8|350.0||||||||||||0|0
|
||||
P|*Pintor rojo - talles 2 a 8|350.0||||||||||||0|0
|
||||
P|*Pintor amarillo - talles 2 a 8|350.0||||||||||||0|0
|
||||
P|*Túnicas adulto - talles 1 a 5|1200.0||||||||||||0|0
|
||||
P|*Moña escolar satinada|70.0||||||||||||0|0
|
||||
P|*Juego de sábanas de algodón 1 plaza|1100.0||||||||||||0|0
|
||||
P|*Juego de sábanas de algodón 2 plazas (para sommier)|1300.0||||||||||||0|0
|
||||
P|*Sábana sola sin elástico, 2 plazas (para sommier)|750.0||||||||||||0|0
|
||||
P|*Sábana sola con elástico, 2 plazas (para sommier)|750.0||||||||||||0|0
|
||||
P|*Juego de toallón y toalla de algodón|700.0||||||||||||0|0
|
||||
P|*Toallón|550.0||||||||||||0|0
|
||||
P|*Toalla de mano|300.0||||||||||||0|0
|
||||
P|*Turbante toalla|400.0||||||||||||0|0
|
||||
P|*Delantal corto Colectiva en la Olla|450.0||||||||||||0|0
|
||||
P|*Delantal largo Colectiva en la Olla|600.0||||||||||||0|0
|
||||
ARTÍCULOS DE MADRES Y FAMILIARES||||||||||||||0|0
|
||||
P|Pañuelo Madres y Familiares de Detenidos Desaparecidos|50.0||||||||||||0|0
|
||||
P|Balconera Madres y Familiares de Detenidos Desaparecidos|100||||||||||||0|0
|
||||
P|Pack 5: 1 pin redondo + 1 libro La Sal de la Tierra|100.0||||||||||||0|0
|
||||
P|Pack 6: 1 gorro blanco + 1 pin redondo + pegotines y marcalibros|200.0||||||||||||0|0
|
||||
P|pacl 7: 1 gorro blanco + 1 libro la sal de la tierra + pegotines y marcalibros|200||||||||||||0|0
|
||||
P|pack 8: 1 gorro blanco + 1 lapicera + pegotines y marcalibros|200.0||||||||||||0|0
|
||||
LIBROS||||||||||||||0|0
|
||||
P|Libro "Raspando la Olla" |250.0||||||||||||0|0
|
||||
TRANSPORTE, BONOS Y FINANCIAMIENTO SORORO||||||||||||||0|0
|
||||
T|Por cada $ 500 de consumo, abonar $ 15 para transporte y gastos operativos, ej:$520 son $30|15.0|0|0|0|0|0|0|0|0|0|0|0|0|0
|
||||
B|Campaña solidaria MPS - apoyo a ollas y merenderos|20.0||||||||||||0|0
|
||||
F|Financiamiento sororo para copa menstrual|20.0||||||||||||0|0
|
||||
PRODUCTOS DE GESTIÓN MENSTRUAL||||||||||||||0|0
|
||||
¿Cuántas copas quieren y pueden comprar en el grupo?||||||||||||||0|0
|
||||
P|Copa menstrual de silicona, ecológica|750||||||||||||0|0
|
||||
¿Cuántas copas quieren adquirir a través del financiamiento sororo?||0||||||||||||0|0
|
||||
P|Copa menstrual de silicona, ecológica|0.0||||||||||||0|0
|
||||
P|*Toallita de tela Nocturna "Chúlin"|168||||||||||||0|0
|
||||
P|*Toallita de tela para Colaless "Chúlin"|133.0||||||||||||0|0
|
||||
P|*Toallitas de tela para Bombacha "Chúlin"|147.0||||||||||||0|0
|
||||
P|*Protector Diario de tela "Chúlin"|112.0||||||||||||0|0
|
||||
P|*Pack 1: 2 protectores diarios + 2 toallitas para bombacha "Chúlin"|462||||||||||||0|0
|
||||
P|*Pack 2: 3 protectores diarios "Chúlin"|301.0||||||||||||0|0
|
||||
P|Ladysoft Clasicas 8un|21.0||||||||||||0|0
|
||||
|TOTAL||0|0|0|0|0|0|0|0|0|0|0||0
|
||||
|||||||||||||||
|
||||
|||||||||||||||
|
||||
|||||||||||||||
|
||||
|||||||||||||||
|
||||
|||||||||||||||
|
||||
|||||||||||||||
|
||||
|||||||||||||||
|
||||
|||nombre|nombre|nombre||||||||||
|
||||
|*Calza licra de algodon talle S||||||||||||||
|
||||
|*Calza licra de algodon talle M||||||||||||||
|
||||
|*Calza licra de algodon talle L||||||||||||||
|
||||
|*Calza licra de algodon talle XL||||||||||||||
|
||||
|*Calza licra de algodon talle 0||||||||||||||
|
||||
|*Calza licra de algodon talle 2||||||||||||||
|
||||
|*Calza licra de algodon talle 4||||||||||||||
|
||||
|*Calza licra de algodon talle 6||||||||||||||
|
||||
|*Calza licra de algodon talle 8||||||||||||||
|
||||
|*Calza licra de algodon talle 10||||||||||||||
|
||||
|*Calza licra de algodon talle 12||||||||||||||
|
||||
|*Calza licra de algodon talle 14||||||||||||||
|
||||
|*Calza licra de algodon talle 16||||||||||||||
|
||||
|*Campera deportiva - Talle 0||||||||||||||
|
||||
|*Campera deportiva - Talle 2||||||||||||||
|
||||
|*Campera deportiva - Talle 4||||||||||||||
|
||||
|*Campera deportiva - Talle 6||||||||||||||
|
||||
|*Campera deportiva - Talle 8||||||||||||||
|
||||
|*Campera deportiva - Talle 10||||||||||||||
|
||||
|*Campera deportiva - Talle 12||||||||||||||
|
||||
|*Campera deportiva - Talle 14||||||||||||||
|
||||
|*Campera deportiva - Talle 16||||||||||||||
|
||||
|*Pantalón deportivo - Talle 0||||||||||||||
|
||||
|*Pantalón deportivo - Talle 2||||||||||||||
|
||||
|*Pantalón deportivo - Talle 4||||||||||||||
|
||||
|*Pantalón deportivo - Talle 6||||||||||||||
|
||||
|*Pantalón deportivo - Talle 8||||||||||||||
|
||||
|*Pantalón deportivo - Talle 10||||||||||||||
|
||||
|*Pantalón deportivo - Talle 12||||||||||||||
|
||||
|*Pantalón deportivo - Talle 14||||||||||||||
|
||||
|*Pantalón deportivo - Talle 16||||||||||||||
|
||||
|*Bikers licra de algodón - Talle S. ||||||||||||||
|
||||
|*Bikers licra de algodón - Talle M.||||||||||||||
|
||||
|*Bikers licra de algodón - Talle L.||||||||||||||
|
||||
|*Bikers licra de algodón - Talle XL. ||||||||||||||
|
||||
|*Túnica niñe con cinto en espalda y tajo detrás- talles 6 a 16||||||||||||||
|
||||
|*Túnica niñe con martingala, festón y pinzas talles 6 a 16||||||||||||||
|
||||
|*Pintor verde - talles 2 a 8||||||||||||||
|
||||
|*Pintor azul - talles 2 a 8||||||||||||||
|
||||
|*Pintor rojo - talles 2 a 8||||||||||||||
|
||||
|*Pintor amarillo - talles 2 a 8||||||||||||||
|
||||
|*Túnicas adulto - talles 1 a 5||||||||||||||
|
||||
|
|
Can't render this file because it has a wrong number of fields in line 86.
|
|
@ -6,7 +6,7 @@
|
|||
<div class="select">
|
||||
<select @change="onGDCSelected" v-model="gdc" name="name">
|
||||
<option :disabled="isDefaultDisabled==1" value=null>Seleccionar</option>
|
||||
<option v-for="gdc in gdcs" v-text="gdc.nombre + (isAdmin ? '_admin' : '')"
|
||||
<option v-for="(gdc, index) in gdcs" :key="index" v-text="gdc.nombre + (isAdmin ? '_admin' : '')"
|
||||
:name="gdc.nombre + (isAdmin ? '_admin' : '')">
|
||||
</option>
|
||||
</select>
|
||||
|
|
|
@ -1,42 +0,0 @@
|
|||
<template>
|
||||
<button class="button" :class="pedido.aprobado ? 'is-danger' : 'is-success'" @click="toggleAprobacion">
|
||||
<span class="icon is-small">
|
||||
<i class="fas" :class="pedido.aprobado ? 'fa-times' : 'fa-check'"></i>
|
||||
</span>
|
||||
<span>{{ mensaje }}</span>
|
||||
</button>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
name: "BotonAdminSubpedidoRow",
|
||||
props: {'subpedido': Object},
|
||||
data() {
|
||||
return {
|
||||
pedido: this.subpedido
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
mensaje: function () {
|
||||
return this.pedido.aprobado ? "Desaprobar" : "Aprobar"
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
toggleAprobacion() {
|
||||
this.aprobado = !this.aprobado;
|
||||
Event.$emit('aprobacion-subpedido', this.pedido.id, this.aprobado);
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
Event.$on('sync-aprobacion', (unSubpedido) => {
|
||||
if (this.pedido.id === unSubpedido.id) {
|
||||
this.pedido = unSubpedido
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
|
||||
</style>
|
|
@ -2,9 +2,16 @@
|
|||
<div v-show="visible" class="block">
|
||||
<div class="field">
|
||||
<label class="label">Contraseña del barrio</label>
|
||||
<p class="control">
|
||||
<input required class="input" type="password" name="password" placeholder="Contraseña del barrio">
|
||||
</p>
|
||||
<div class="field has-addons">
|
||||
<div class="control">
|
||||
<input required class="input" :type="this.passwordType" name="password" placeholder="Contraseña del barrio">
|
||||
</div>
|
||||
<div class="control">
|
||||
<a class="button is-info" @click="togglePassword">
|
||||
{{ (passwordVisible ? 'Ocultar' : 'Mostrar') + ' contraseña'}}
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
<p class="help">Si no la sabés, consultá a tus compañerxs.</p>
|
||||
</div>
|
||||
<div class="field">
|
||||
|
@ -17,10 +24,13 @@
|
|||
|
||||
<script>
|
||||
export default {
|
||||
name: 'Login',
|
||||
data() {
|
||||
return {
|
||||
visible: false,
|
||||
gdc: null
|
||||
gdc: null,
|
||||
passwordVisible: false,
|
||||
passwordType: "password",
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
|
@ -28,6 +38,13 @@
|
|||
this.gdc = gdc;
|
||||
this.visible = true;
|
||||
});
|
||||
},
|
||||
methods: {
|
||||
togglePassword() {
|
||||
if (this.passwordVisible) this.passwordType = "password";
|
||||
else this.passwordType = "text"
|
||||
this.passwordVisible = !this.passwordVisible
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
|
|
@ -2,9 +2,16 @@
|
|||
<div v-show="visible" class="block">
|
||||
<div class="field">
|
||||
<label class="label has-text-white">Contraseña de administración del barrio</label>
|
||||
<p class="control">
|
||||
<input required class="input" type="password" name="password" placeholder="Contraseña de admin del barrio">
|
||||
</p>
|
||||
<div class="field has-addons">
|
||||
<div class="control">
|
||||
<input required class="input" :type="this.passwordType" name="password" placeholder="Contraseña de admin del barrio">
|
||||
</div>
|
||||
<div class="control">
|
||||
<a class="button is-warning" @click="togglePassword">
|
||||
{{ (passwordVisible ? 'Ocultar' : 'Mostrar') + ' contraseña'}}
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
<p class="help has-text-white">Si no la sabés, consultá a la comisión informática.</p>
|
||||
</div>
|
||||
<div class="field">
|
||||
|
@ -17,11 +24,13 @@
|
|||
|
||||
<script>
|
||||
export default {
|
||||
name: "LoginAdmin.vue",
|
||||
name: "LoginAdmin",
|
||||
data() {
|
||||
return {
|
||||
visible: false,
|
||||
gdc: null
|
||||
gdc: null,
|
||||
passwordVisible: false,
|
||||
passwordType: "password",
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
|
@ -29,7 +38,14 @@
|
|||
this.gdc = gdc;
|
||||
this.visible = true;
|
||||
});
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
togglePassword() {
|
||||
if (this.passwordVisible) this.passwordType = "password";
|
||||
else this.passwordType = "text"
|
||||
this.passwordVisible = !this.passwordVisible
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
|
|
97
resources/js/components/PedidosAdminBody.vue
Normal file
97
resources/js/components/PedidosAdminBody.vue
Normal file
|
@ -0,0 +1,97 @@
|
|||
<template>
|
||||
<div class="container is-max-widescreen is-max-desktop animate__animated" :class="animation">
|
||||
<pedidos-admin-tabs-secciones></pedidos-admin-tabs-secciones>
|
||||
<div class="block" id="pedidos-seccion"
|
||||
:class="seccionActiva === 'pedidos-seccion' ? 'is-active' : 'is-hidden'">
|
||||
<div class="block" id="pedidos-tabla-y-dropdown" v-show="hayPedidos">
|
||||
<pedidos-admin-dropdown-descargar
|
||||
:gdc="gdc">
|
||||
</pedidos-admin-dropdown-descargar>
|
||||
<pedidos-admin-tabla-pedidos
|
||||
:pedidos="pedidos">
|
||||
</pedidos-admin-tabla-pedidos>
|
||||
</div>
|
||||
<p class="has-text-centered" v-show="!hayPedidos">
|
||||
Todavía no hay ningún pedido para administrar.
|
||||
</p>
|
||||
</div>
|
||||
<div class="block" id="bonos-seccion"
|
||||
:class="seccionActiva === 'bonos-seccion' ? 'is-active' : 'is-hidden'">
|
||||
<pedidos-admin-tabla-bonos v-show="hayAprobados"
|
||||
:pedidos="pedidos">
|
||||
</pedidos-admin-tabla-bonos>
|
||||
<p class="has-text-centered" v-show="!hayAprobados">
|
||||
Todavía no hay pedidos aprobados.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import PedidosAdminTabsSecciones from './PedidosAdminTabsSecciones.vue';
|
||||
import PedidosAdminDropdownDescargar from "./PedidosAdminDropdownDescargar.vue";
|
||||
import PedidosAdminTablaBonos from './PedidosAdminTablaBonos.vue';
|
||||
import PedidosAdminTablaPedidos from "./PedidosAdminTablaPedidos.vue";
|
||||
export default {
|
||||
name: "PedidosAdminBody",
|
||||
components: {
|
||||
PedidosAdminTabsSecciones,
|
||||
PedidosAdminDropdownDescargar,
|
||||
PedidosAdminTablaPedidos,
|
||||
PedidosAdminTablaBonos,
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
gdc: 0,
|
||||
pedidos: [],
|
||||
tabActiva: "pedidos",
|
||||
seccionActiva: "pedidos-seccion"
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
hayPedidos: function() {
|
||||
return this.pedidos.length !== 0
|
||||
},
|
||||
hayAprobados: function() {
|
||||
return this.pedidos.filter(p => p.aprobado).length > 0
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
fetchPedidos() {
|
||||
axios.get("/api/subpedidos/resources", {
|
||||
params: {
|
||||
grupo_de_compra: this.gdc
|
||||
}})
|
||||
.then(response => {
|
||||
this.pedidos = response.data.data
|
||||
});
|
||||
},
|
||||
totalAprobados() {
|
||||
let suma = 0;
|
||||
let aprobados = this.pedidos.filter(p => p.aprobado);
|
||||
for (let i = 0; i < aprobados.length; i++) {
|
||||
suma += parseFloat(aprobados[i].total.replace(/,/g, ''));
|
||||
}
|
||||
return suma;
|
||||
},
|
||||
setSeccionActiva(tabId) {
|
||||
this.tabActiva = tabId;
|
||||
this.seccionActiva = tabId + "-seccion";
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
Event.$on('sync-aprobacion', (_) => {
|
||||
this.fetchPedidos();
|
||||
});
|
||||
|
||||
axios.get("/admin/obtener_sesion").then(response => {
|
||||
this.gdc = response.data.gdc;
|
||||
this.fetchPedidos();
|
||||
});
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style>
|
||||
|
||||
</style>
|
54
resources/js/components/PedidosAdminDropdownDescargar.vue
Normal file
54
resources/js/components/PedidosAdminDropdownDescargar.vue
Normal file
|
@ -0,0 +1,54 @@
|
|||
<template>
|
||||
<div class="buttons is-right">
|
||||
<div class="dropdown" :class="{'is-active': dropdownActivo}" @mouseleave="dropdownActivo = false">
|
||||
<div class="dropdown-trigger">
|
||||
<button class="button" aria-haspopup="true" aria-controls="dropdown-menu" :disabled="!hayAprobados" @click="dropdownActivo = !dropdownActivo">
|
||||
<span class="icon is-small">
|
||||
<i class="fas fa-download"></i>
|
||||
</span>
|
||||
<span>Descargar pedido</span>
|
||||
<span class="icon is-small">
|
||||
<i class="fas fa-angle-down" aria-hidden="true"></i>
|
||||
</span>
|
||||
</button>
|
||||
</div>
|
||||
<div class="dropdown-menu" id="dropdown-menu" role="menu">
|
||||
<div class="dropdown-content">
|
||||
<a :href="'/admin/exportar-planillas-a-pdf/' + gdc" class="dropdown-item">
|
||||
Exportar planillas a pdf
|
||||
</a>
|
||||
<a :href="'/admin/exportar-pedido-a-csv/' + gdc" class="dropdown-item">
|
||||
Exportar pedido a csv
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
name: "PedidosAdminDropdownDescargar",
|
||||
props: {
|
||||
gdc: {
|
||||
type: Number,
|
||||
required: true
|
||||
},
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
dropdownActivo: false
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
hayAprobados: function() {
|
||||
return this.$parent.hayAprobados;
|
||||
}
|
||||
},
|
||||
|
||||
}
|
||||
</script>
|
||||
|
||||
<style>
|
||||
|
||||
</style>
|
22
resources/js/components/PedidosAdminFilaBono.vue
Normal file
22
resources/js/components/PedidosAdminFilaBono.vue
Normal file
|
@ -0,0 +1,22 @@
|
|||
<template>
|
||||
<tr>
|
||||
<td>{{ nombre }}</td>
|
||||
<td>{{ cantidad }}</td>
|
||||
<td>${{ total }}</td>
|
||||
</tr>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
name: "PedidosAdminFilaBono",
|
||||
props: {
|
||||
nombre: String,
|
||||
cantidad: Number,
|
||||
total: Number
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
|
||||
</style>
|
35
resources/js/components/PedidosAdminFilaPedido.vue
Normal file
35
resources/js/components/PedidosAdminFilaPedido.vue
Normal file
|
@ -0,0 +1,35 @@
|
|||
<template>
|
||||
<tr>
|
||||
<td>{{ pedido.nombre }}</td>
|
||||
<td>{{ pedido.total }}</td>
|
||||
<td>
|
||||
<pedidos-admin-switch-aprobacion
|
||||
:pedido="pedido">
|
||||
</pedidos-admin-switch-aprobacion>
|
||||
</td>
|
||||
</tr>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import PedidosAdminSwitchAprobacion from './PedidosAdminSwitchAprobacion.vue';
|
||||
export default {
|
||||
name: "PedidosAdminFilaPedido",
|
||||
components: {
|
||||
PedidosAdminSwitchAprobacion
|
||||
},
|
||||
props: {
|
||||
pedido: Object
|
||||
},
|
||||
mounted() {
|
||||
Event.$on('sync-aprobacion', (unPedido) => {
|
||||
if (this.pedido.id === unPedido.id) {
|
||||
this.pedido = unPedido
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
|
||||
</style>
|
47
resources/js/components/PedidosAdminSwitchAprobacion.vue
Normal file
47
resources/js/components/PedidosAdminSwitchAprobacion.vue
Normal file
|
@ -0,0 +1,47 @@
|
|||
<template>
|
||||
<div class="field">
|
||||
<input type="checkbox" name="switchRoundedSuccess" class="switch is-rounded is-success"
|
||||
:id="'switch'+this.pedido.id"
|
||||
:checked="pedido.aprobado"
|
||||
@change="toggleAprobacion">
|
||||
<label :for="'switch'+this.pedido.id">
|
||||
<span class="is-hidden-mobile">{{ mensaje }}</span>
|
||||
</label>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
name: "PedidosAdminSwitchAprobacion",
|
||||
props: {
|
||||
pedido: Object
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
aprobado: this.pedido.aprobado
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
mensaje: function () {
|
||||
return this.aprobado ? "Aprobado" : "No aprobado"
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
toggleAprobacion() {
|
||||
Event.$emit('aprobacion-subpedido', this.pedido.id, !this.aprobado);
|
||||
this.aprobado = !this.aprobado
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
Event.$on('sync-aprobacion', (unPedido) => {
|
||||
if (this.pedido.id === unPedido.id) {
|
||||
this.pedido = unPedido
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
|
||||
</style>
|
126
resources/js/components/PedidosAdminTablaBonos.vue
Normal file
126
resources/js/components/PedidosAdminTablaBonos.vue
Normal file
|
@ -0,0 +1,126 @@
|
|||
<template>
|
||||
<div class="block">
|
||||
<div class="block" v-show="!hayBonos">
|
||||
<p class="has-text-centered">
|
||||
Todavía no hay bonos pedidos.
|
||||
</p>
|
||||
</div>
|
||||
<div class="block">
|
||||
<table class="table is-fullwidth is-striped is-bordered">
|
||||
<thead>
|
||||
<tr>
|
||||
<th><abbr title="Bono">Bono</abbr></th>
|
||||
<th class="is-1"><abbr title="Cantidad">Cantidad</abbr></th>
|
||||
<th><abbr title="Total a Pagar">Total $</abbr></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tfoot>
|
||||
<tr v-show="hayBonos">
|
||||
<th></th>
|
||||
<th>Total bonos</th>
|
||||
<th>$ {{ totalBonos }}</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td> Bonos de Transporte </td>
|
||||
<td> {{ bonosDeTransporteAprobados }} </td>
|
||||
<td> $ {{ bonosDeTransporteAprobados * 15 }} </td>
|
||||
</tr>
|
||||
</tfoot>
|
||||
<tbody v-show="hayBonos">
|
||||
<pedidos-admin-fila-bono v-for="(bono, i) in bonosCantidadesTotales" :key="i"
|
||||
:nombre="bono.nombre"
|
||||
:cantidad="bono.cantidad"
|
||||
:total="bono.total">
|
||||
</pedidos-admin-fila-bono>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import PedidosAdminFilaBonoVue from './PedidosAdminFilaBono.vue'
|
||||
export default {
|
||||
name: "PedidosAdminTablaBonos",
|
||||
components: {
|
||||
PedidosAdminFilaBonoVue
|
||||
},
|
||||
props: {
|
||||
pedidos: {
|
||||
type: Array,
|
||||
required: true
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
hayPedidos: function() {
|
||||
return this.pedidos.length !== 0
|
||||
},
|
||||
hayAprobados: function() {
|
||||
return this.pedidosAprobados.length > 0
|
||||
},
|
||||
pedidosAprobados: function() {
|
||||
return this.pedidos.filter(p => p.aprobado);
|
||||
},
|
||||
bonosDeTransporteAprobados: function() {
|
||||
let bonosTransportePorPedido = this.pedidosAprobados.map(p => p.bonos_de_transporte);
|
||||
let cant = 0;
|
||||
bonosTransportePorPedido.forEach(bt => cant += bt);
|
||||
return cant
|
||||
},
|
||||
bonosCantidadesTotales: function() {
|
||||
let nombres = [];
|
||||
let cantidades = [];
|
||||
let precios = [];
|
||||
|
||||
let bonosAprobadosPorPedido = this.bonosPorPedido(this.pedidosAprobados);
|
||||
bonosAprobadosPorPedido.forEach(bs => {
|
||||
bs.forEach(b => {
|
||||
if (!nombres.includes(b.nombre)) {
|
||||
nombres.push(b.nombre);
|
||||
cantidades.push(b.pivot.cantidad);
|
||||
precios.push(b.precio);
|
||||
} else {
|
||||
for (let i = 0; i < nombres.length; i++) {
|
||||
if (b.nombre === nombres[i]) {
|
||||
cantidades[i] += b.pivot.cantidad;
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
let bonosAprobados = [];
|
||||
for (let i = 0; i < nombres.length; i++) {
|
||||
let bono = {
|
||||
nombre: nombres[i],
|
||||
cantidad: cantidades[i],
|
||||
total: cantidades[i] * precios[i]
|
||||
};
|
||||
bonosAprobados.push(bono);
|
||||
}
|
||||
|
||||
return bonosAprobados;
|
||||
},
|
||||
totalBonos: function() {
|
||||
let total = 0;
|
||||
let bonos = this.bonosCantidadesTotales;
|
||||
bonos.forEach(b => {
|
||||
total += b.total;
|
||||
});
|
||||
return total;
|
||||
},
|
||||
hayBonos: function() {
|
||||
return this.totalBonos !== 0;
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
bonosPorPedido(pedidosArray) {
|
||||
return pedidosArray.map(p => p.productos.filter(pr => pr.bono))
|
||||
}
|
||||
},
|
||||
}
|
||||
</script>
|
||||
|
||||
<style>
|
||||
|
||||
</style>
|
53
resources/js/components/PedidosAdminTablaPedidos.vue
Normal file
53
resources/js/components/PedidosAdminTablaPedidos.vue
Normal file
|
@ -0,0 +1,53 @@
|
|||
<template>
|
||||
<table class="table is-fullwidth is-striped is-bordered">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Núcleo</th>
|
||||
<th><abbr title="Total a Pagar">Total $</abbr></th>
|
||||
<th class="is-1"><abbr title="Aprobacion">Aprobación</abbr></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tfoot>
|
||||
<tr>
|
||||
<th></th>
|
||||
<th>Total de los aprobados</th>
|
||||
<th>$ {{ totalAprobados() }}</th>
|
||||
</tr>
|
||||
</tfoot>
|
||||
<tbody>
|
||||
<pedidos-admin-fila-pedido v-for="pedido in this.pedidos"
|
||||
:pedido="pedido" :key="pedido.id">
|
||||
</pedidos-admin-fila-pedido>
|
||||
</tbody>
|
||||
</table>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import PedidosAdminFilaPedidoVue from './PedidosAdminFilaPedido.vue';
|
||||
export default {
|
||||
name: "PedidosAdminTablaPedidos",
|
||||
components: {
|
||||
PedidosAdminFilaPedidoVue
|
||||
},
|
||||
props: {
|
||||
pedidos: {
|
||||
type: Array,
|
||||
required: true
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
totalAprobados() {
|
||||
let suma = 0;
|
||||
let aprobados = this.pedidos.filter(p => p.aprobado);
|
||||
for (let i = 0; i < aprobados.length; i++) {
|
||||
suma += parseFloat(aprobados[i].total.replace(/,/g, ''));
|
||||
}
|
||||
return suma;
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style>
|
||||
|
||||
</style>
|
62
resources/js/components/PedidosAdminTabsSecciones.vue
Normal file
62
resources/js/components/PedidosAdminTabsSecciones.vue
Normal file
|
@ -0,0 +1,62 @@
|
|||
<template>
|
||||
<div class="block">
|
||||
<div class="tabs is-boxed" id="tabs">
|
||||
<ul class="has-bottom-line">
|
||||
<li v-for="(tab, index) in tabs" class="is-size-6"
|
||||
:key="index"
|
||||
:id="tab.id + '-tab'"
|
||||
:class="{'is-active': tab.id === tabActiva}">
|
||||
<a @click="setTabActiva(tab.id)">
|
||||
<span>
|
||||
{{ tab.nombre }}
|
||||
</span>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
name: "PedidosAdminTabsSecciones",
|
||||
data() {
|
||||
return {
|
||||
tabActiva: "pedidos",
|
||||
tabs: [
|
||||
{
|
||||
id: "pedidos",
|
||||
nombre: "Pedidos"
|
||||
},
|
||||
{
|
||||
id: "bonos",
|
||||
nombre: "Bonos"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
setTabActiva(tabId) {
|
||||
this.$parent.setSeccionActiva(tabId);
|
||||
this.tabActiva = tabId
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
@import 'bulma';
|
||||
hr {
|
||||
border: none;
|
||||
height: 1px;
|
||||
}
|
||||
.has-bottom-line {
|
||||
border-bottom-color: #dbdbdb !important;
|
||||
border-bottom-style: solid !important;
|
||||
border-bottom-width: 1px !important;
|
||||
}
|
||||
.tabs li.is-active a {
|
||||
border-bottom-color: #e3342f;
|
||||
color: #e3342f;
|
||||
}
|
||||
</style>
|
|
@ -6,7 +6,7 @@
|
|||
<div class="select">
|
||||
<select @change="onRegionSelected" v-model="region">
|
||||
<option :disabled="isDefaultDisabled===1" value=null>Seleccionar</option>
|
||||
<option v-for="region in regiones" v-text="region" :name="region"></option>
|
||||
<option v-for="(region, index) in regiones" :key="index" v-text="region" :name="region"></option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -1,35 +0,0 @@
|
|||
<template>
|
||||
<tr>
|
||||
<td>{{ subpedido.nombre }}</td>
|
||||
<td>{{ subpedido.total }}</td>
|
||||
<td><boton-admin-subpedido-row :subpedido="subpedido"></boton-admin-subpedido-row></td>
|
||||
</tr>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import BotonAdminSubpedidoRow from "./BotonAdminSubpedidoRow";
|
||||
export default {
|
||||
name: "SubpedidoRow",
|
||||
components: {BotonAdminSubpedidoRow},
|
||||
props: {
|
||||
subpedido: Object
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
pedido: this.subpedido
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
Event.$on('sync-aprobacion', (unSubpedido) => {
|
||||
console.log(unSubpedido);
|
||||
if (this.pedido.id === unSubpedido.id) {
|
||||
this.pedido = unSubpedido
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
|
||||
</style>
|
|
@ -17,7 +17,7 @@
|
|||
<div v-if="subpedidosExistentes.length" class="block">
|
||||
<label class="label">Si ya comenzaste a hacer tu pedido este mes, elegilo en esta lista:</label>
|
||||
<p class="help">Podés seguir escribiendo en el campo de arriba para refinar la búsqueda.</p>
|
||||
<div class="columns is-mobile" v-for="(subpedidoExistente, index) in subpedidosExistentes" :class="{'has-background-grey-lighter': index % 2}">
|
||||
<div class="columns is-mobile" v-for="(subpedidoExistente, index) in subpedidosExistentes" :class="{'has-background-grey-lighter': index % 2}" :key="index">
|
||||
<div class="column is-half-mobile is-two-thirds-desktop is-two-thirds-tablet">
|
||||
<p style="padding-top: calc(.5em - 1px); margin-bottom: .5rem" v-text="subpedidoExistente.nombre"></p>
|
||||
</div>
|
||||
|
|
|
@ -1,76 +0,0 @@
|
|||
<template>
|
||||
<div class="container table-container chismosa-container is-max-widescreen is-max-desktop animate__animated" :class="animation" v-show="!init">
|
||||
<table v-show="this.subpedidos.length !== 0" class="table is-fullwidth is-striped is-bordered">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Núcleo</th>
|
||||
<th><abbr title="Total a Pagar">Total $</abbr></th>
|
||||
<th><abbr title="Aprobacion">Aprobación</abbr></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tfoot>
|
||||
<tr>
|
||||
<th></th>
|
||||
<th>Total de los aprobados</th>
|
||||
<th>$ {{ totalAprobados() }}</th>
|
||||
</tr>
|
||||
</tfoot>
|
||||
<tbody>
|
||||
<subpedido-row v-for="subpedido in this.subpedidos"
|
||||
:subpedido="subpedido" :key="subpedido.id">
|
||||
</subpedido-row>
|
||||
</tbody>
|
||||
</table>
|
||||
<p class="has-text-centered" v-show="this.subpedidos.length === 0">
|
||||
Todavía no hay ningún pedido para administrar.
|
||||
</p>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import SubpedidoRow from "./SubpedidoRow";
|
||||
export default {
|
||||
name: "SubpedidosGdc",
|
||||
components: {SubpedidoRow},
|
||||
data() {
|
||||
return {
|
||||
gdc: null,
|
||||
subpedidos: []
|
||||
}
|
||||
},
|
||||
beforeCreate() {
|
||||
axios.get("/admin/obtener_sesion").then(response => {
|
||||
this.gdc = response.data.gdc;
|
||||
this.fetchSubpedidos();
|
||||
});
|
||||
},
|
||||
methods: {
|
||||
fetchSubpedidos() {
|
||||
axios.get("/api/subpedidos/resources", {
|
||||
params: {
|
||||
grupo_de_compra: this.gdc
|
||||
}
|
||||
}).then(response => {
|
||||
this.subpedidos = response.data.data
|
||||
});
|
||||
},
|
||||
totalAprobados() {
|
||||
let suma = 0;
|
||||
let aprobados = this.subpedidos.filter(sp => sp.aprobado);
|
||||
for (let i = 0; i < aprobados.length; i++) {
|
||||
suma += parseFloat(aprobados[i].total.replace(/,/g, ''));
|
||||
}
|
||||
return suma;
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
Event.$on('sync-aprobacion', (_) => {
|
||||
this.fetchSubpedidos();
|
||||
})
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
|
||||
</style>
|
38
resources/sass/app.scss
vendored
38
resources/sass/app.scss
vendored
|
@ -4,6 +4,9 @@
|
|||
// Variables
|
||||
@import 'variables';
|
||||
|
||||
@import 'bulma';
|
||||
@import '~bulma-switch';
|
||||
|
||||
main.has-top-padding {
|
||||
padding-top: 4.5rem !important;
|
||||
}
|
||||
|
@ -24,4 +27,37 @@ table.table td {
|
|||
|
||||
main.chisma-abierta {
|
||||
padding-top: 25.5rem !important;
|
||||
}
|
||||
}
|
||||
|
||||
#main {
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.container {
|
||||
max-height: 100% !important;
|
||||
}
|
||||
|
||||
/*
|
||||
Author: Aseem Lalfakawma <alalfakawma.github.io>
|
||||
This SCSS mixin will allow sizing of table columns in Bulma CSS Framework.
|
||||
The Bulma framework does not support this yet, this small code snippet fixes this.
|
||||
|
||||
USAGE:
|
||||
* Should be applied on TH element, it controls all the columns under it *
|
||||
The class should be "is-#",
|
||||
is-1 will give the first widthamount, is-2 will give the second.
|
||||
Eg. The code below shows the widthAmounts as (1, 2.5, 3, 4 , 5, 6, 7)
|
||||
When typing <th class="is-2">, the width will be 2.5em, as the second value in widthAmounts array is 2.5
|
||||
*/
|
||||
|
||||
$widthAmounts: (15); // Just add the numbers here, you can use points too.
|
||||
$widthUnit: "em"; // Add the unit here (rem|em|px|%)
|
||||
|
||||
@each $width in $widthAmounts {
|
||||
$i: index($widthAmounts, $width);
|
||||
@media only screen and (min-width: 768px) {
|
||||
.table thead th.is-#{$i} {
|
||||
width: #{$width}#{$widthUnit} !important;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -21,10 +21,10 @@
|
|||
Contraseña incorrecta, intentalo nuevamente.
|
||||
</div>
|
||||
@enderror
|
||||
<region-select admin="true"></region-select>
|
||||
<region-select v-bind:admin="true"></region-select>
|
||||
<form method="post" action="login">
|
||||
@csrf
|
||||
<barrio-select admin="true"></barrio-select>
|
||||
<barrio-select v-bind:admin="true"></barrio-select>
|
||||
<login-admin></login-admin>
|
||||
</form>
|
||||
</div>
|
||||
|
|
|
@ -1,11 +1,13 @@
|
|||
@extends('layouts.app')
|
||||
|
||||
@section('content')
|
||||
<subpedidos-gdc></subpedidos-gdc>
|
||||
<pedidos-admin-body></pedidos-admin-body>
|
||||
@endsection
|
||||
<script>
|
||||
import SubpedidosGdc from "../../js/components/SubpedidosGdc";
|
||||
import PedidosAdminBody from "../../js/components/PedidosAdminBody.vue";
|
||||
export default {
|
||||
components: {SubpedidosGdc}
|
||||
components: {
|
||||
PedidosAdminBody
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
|
|
@ -12,7 +12,6 @@
|
|||
|
||||
<!-- Fonts -->
|
||||
<script src="https://kit.fontawesome.com/9235d1c676.js" crossorigin="anonymous"></script>
|
||||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bulma@0.9.3/css/bulma.min.css">
|
||||
<link rel="stylesheet" href="{{ asset('css/app.css') }}">
|
||||
@yield('stylesheets')
|
||||
|
||||
|
|
52
resources/views/pdfgen/subpedido_tabla.blade.php
Normal file
52
resources/views/pdfgen/subpedido_tabla.blade.php
Normal file
|
@ -0,0 +1,52 @@
|
|||
<!doctype html>
|
||||
<style>
|
||||
tr:nth-child(even) {
|
||||
background: #CCC
|
||||
}
|
||||
</style>
|
||||
<h3>{{$subpedido->nombre}}</h3>
|
||||
|
||||
<table style="width: 100%">
|
||||
<tr>
|
||||
<th>
|
||||
Producto
|
||||
</th>
|
||||
<th>
|
||||
Cantidad
|
||||
</th>
|
||||
<th>
|
||||
Control 1
|
||||
</th>
|
||||
<th>
|
||||
Control 2
|
||||
</th>
|
||||
<th>
|
||||
Control 3
|
||||
</th>
|
||||
</tr>
|
||||
|
||||
@foreach($subpedido->productos as $producto)
|
||||
@if(!$producto->bono)
|
||||
<tr>
|
||||
<td>
|
||||
{{ $producto->nombre }}
|
||||
</td>
|
||||
<td style="text-align: center">
|
||||
{{ $producto->pivot->cantidad }}
|
||||
</td>
|
||||
</tr>
|
||||
@endif
|
||||
@endforeach
|
||||
@foreach($subpedido->productos as $producto)
|
||||
@if($producto->bono)
|
||||
<tr>
|
||||
<td>
|
||||
{{ $producto->nombre }}
|
||||
</td>
|
||||
<td style="text-align: center">
|
||||
{{ $producto->pivot->cantidad }}
|
||||
</td>
|
||||
</tr>
|
||||
@endif
|
||||
@endforeach
|
||||
</table>
|
|
@ -25,8 +25,6 @@ Route::get('/productos', 'ProductoController@index')->name('productos.index');
|
|||
|
||||
Route::get('/admin', 'AdminController@show')->name('admin_login.show');
|
||||
|
||||
Route::get('/admin/pedidos', 'AdminController@index')->name('admin_login.index');
|
||||
|
||||
Route::get('/admin/obtener_sesion', function() {
|
||||
$sesion = [
|
||||
'gdc' => session("admin_gdc")
|
||||
|
@ -35,7 +33,11 @@ Route::get('/admin/obtener_sesion', function() {
|
|||
})->name('admin_obtener_sesion');
|
||||
|
||||
Route::middleware(['auth', 'admin'])->group( function () {
|
||||
|
||||
Route::get('/admin/pedidos', 'AdminController@index')->name('admin_login.index');
|
||||
|
||||
Route::get('/admin/exportar-planillas-a-pdf/{gdc}', 'AdminController@exportarPlanillasAPdf');
|
||||
|
||||
Route::get('/admin/exportar-pedido-a-csv/{gdc}', 'AdminController@exportarPedidoACSV');
|
||||
});
|
||||
|
||||
Route::middleware('auth')->group( function() {
|
||||
|
|
Loading…
Add table
Reference in a new issue