forked from nathalie/pedi2
Merge pull request 'Endpoint devuelve subpedido con totales' (#2) from precio-total-subpedido into master
Reviewed-on: nathalie/pedi2#2
This commit is contained in:
commit
bc7b7e2f22
|
@ -7,6 +7,7 @@ use Illuminate\Http\Request;
|
||||||
use App\Filtros\FiltroDeSubpedido;
|
use App\Filtros\FiltroDeSubpedido;
|
||||||
use App\Subpedido;
|
use App\Subpedido;
|
||||||
use App\GrupoDeCompra;
|
use App\GrupoDeCompra;
|
||||||
|
use App\Http\Resources\SubpedidoResource;
|
||||||
use Illuminate\Validation\Rule;
|
use Illuminate\Validation\Rule;
|
||||||
use Symfony\Component\HttpKernel\Exception\HttpException;
|
use Symfony\Component\HttpKernel\Exception\HttpException;
|
||||||
|
|
||||||
|
@ -53,4 +54,15 @@ class SubpedidoController extends Controller
|
||||||
]
|
]
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Display the specified resource.
|
||||||
|
*
|
||||||
|
* @param \App\Subpedido $subpedido
|
||||||
|
* @return \Illuminate\Http\Response
|
||||||
|
*/
|
||||||
|
public function show(Subpedido $subpedido)
|
||||||
|
{
|
||||||
|
return new SubpedidoResource($subpedido);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,28 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Resources;
|
||||||
|
|
||||||
|
use Illuminate\Http\Resources\Json\JsonResource;
|
||||||
|
|
||||||
|
class SubpedidoResource extends JsonResource
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Transform the resource into an array.
|
||||||
|
*
|
||||||
|
* @param \Illuminate\Http\Request $request
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function toArray($request)
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
'id' => $this->id,
|
||||||
|
'nombre' => $this->nombre,
|
||||||
|
'subtotal_productos' => $this->getSubtotalProductos(),
|
||||||
|
'subtotal_bonos' => $this->getSubtotalBonos(),
|
||||||
|
'bonos_de_transporte' => $this->cantidadBDT(),
|
||||||
|
'subtotal_bonos_de_transporte' => $this->getSubtotalBDT(),
|
||||||
|
'total' => $this->getTotal(),
|
||||||
|
'grupo_de_compra' => $this->grupoDeCompra
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
|
@ -15,18 +15,77 @@ class Subpedido extends Model
|
||||||
|
|
||||||
public function productos()
|
public function productos()
|
||||||
{
|
{
|
||||||
return $this->belongsToMany('App\Producto','pedidos_productos')->withPivot(["cantidad"]);
|
return $this->belongsToMany('App\Producto')->withPivot(["cantidad"]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//Bonos del MPS, Sororo, etc. NO devuelve bonos de transporte
|
||||||
|
private function bonos()
|
||||||
|
{
|
||||||
|
return $this->productos()->where('bono',1);
|
||||||
|
}
|
||||||
|
|
||||||
|
private function productosSinBonos()
|
||||||
|
{
|
||||||
|
return $this->productos()->where('bono',false);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
public function grupoDeCompra()
|
public function grupoDeCompra()
|
||||||
{
|
{
|
||||||
return $this->belongsTo('App\GrupoDeCompra');
|
return $this->belongsTo('App\GrupoDeCompra');
|
||||||
}
|
}
|
||||||
|
|
||||||
//Este método permite que se apliquen los filtros al hacer una request (por ejemplo, de búsqueda)
|
//Permite que se apliquen los filtros al hacer una request (por ejemplo, de búsqueda)
|
||||||
public function scopeFiltrar($query, FiltroDeSubpedido $filtros)
|
public function scopeFiltrar($query, FiltroDeSubpedido $filtros)
|
||||||
{
|
{
|
||||||
return $filtros->aplicar($query);
|
return $filtros->aplicar($query);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//Subtotal de dinero de productos del pedido, sin bonos ni transporte
|
||||||
|
public function getSubtotalProductos()
|
||||||
|
{
|
||||||
|
return $this->productosSinBonos()->sum('total');
|
||||||
|
}
|
||||||
|
|
||||||
|
//Cantidad de bonos de transporte
|
||||||
|
public function cantidadBDT()
|
||||||
|
{
|
||||||
|
return ceil($this->getSubtotalProductos() / 500);
|
||||||
|
}
|
||||||
|
|
||||||
|
//Subtotal de dinero de bonos de transporte
|
||||||
|
public function getSubtotalBDT()
|
||||||
|
{
|
||||||
|
return $this->cantidadBDT() * 15;
|
||||||
|
}
|
||||||
|
|
||||||
|
//Subtotal de dinero de bonos (MPS, Sororo, etc)
|
||||||
|
public function getSubtotalBonos()
|
||||||
|
{
|
||||||
|
return $this->bonos()->sum('total');
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public function getTotal()
|
||||||
|
{
|
||||||
|
return $this->getSubtotalProductos() + $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.
|
||||||
|
public function syncProducto(Producto $producto, Int $cantidad) {
|
||||||
|
if ($cantidad){
|
||||||
|
//si la cantidad es 1 o más se agrega el producto o actualiza la cantidad
|
||||||
|
$this->productos()->syncWithoutDetaching([
|
||||||
|
$producto->id => [
|
||||||
|
'cantidad' => $cantidad,
|
||||||
|
'total' => $cantidad * $producto->precio
|
||||||
|
]
|
||||||
|
]);
|
||||||
|
|
||||||
|
} else {
|
||||||
|
//si la cantidad es 0, se elimina el producto del subpedido
|
||||||
|
$this->productos()->detach($producto->id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,32 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
use Illuminate\Database\Migrations\Migration;
|
||||||
|
use Illuminate\Database\Schema\Blueprint;
|
||||||
|
use Illuminate\Support\Facades\Schema;
|
||||||
|
|
||||||
|
class AgregarColumnaBonoATablaDeProductos extends Migration
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Run the migrations.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function up()
|
||||||
|
{
|
||||||
|
Schema::table('productos', function (Blueprint $table) {
|
||||||
|
$table->boolean('bono')->after('apto_celiacxs');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reverse the migrations.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function down()
|
||||||
|
{
|
||||||
|
Schema::table('productos', function (Blueprint $table) {
|
||||||
|
$table->dropColumn('bono');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,32 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
use Illuminate\Database\Migrations\Migration;
|
||||||
|
use Illuminate\Database\Schema\Blueprint;
|
||||||
|
use Illuminate\Support\Facades\Schema;
|
||||||
|
|
||||||
|
class AgregarColumnaTotalATablaDeProductoSubpedido extends Migration
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Run the migrations.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function up()
|
||||||
|
{
|
||||||
|
Schema::table('producto_subpedido', function (Blueprint $table) {
|
||||||
|
$table->double('total',10,2)->after('cantidad')->default(0);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reverse the migrations.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function down()
|
||||||
|
{
|
||||||
|
Schema::table('producto_subpedido', function (Blueprint $table) {
|
||||||
|
$table->dropColumn('total');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
|
@ -27,7 +27,8 @@ class ProductoSeeder extends Seeder
|
||||||
'precio' => $registro['precio'],
|
'precio' => $registro['precio'],
|
||||||
'proveedor_id' => isset($registro['proveedor']) ? Proveedor::firstOrCreate([
|
'proveedor_id' => isset($registro['proveedor']) ? Proveedor::firstOrCreate([
|
||||||
'nombre' => $registro['proveedor']
|
'nombre' => $registro['proveedor']
|
||||||
])->id : null
|
])->id : null,
|
||||||
|
'bono' => $registro['categoria'] == 'BONOS Y FINANCIAMIENTO SORORO'
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -30,6 +30,7 @@ Route::middleware('api')->group(function () {
|
||||||
|
|
||||||
Route::prefix('subpedidos')->group(function () {
|
Route::prefix('subpedidos')->group(function () {
|
||||||
Route::get('/','Api\SubpedidoController@index');
|
Route::get('/','Api\SubpedidoController@index');
|
||||||
|
Route::get('{subpedido}','Api\SubpedidoController@show');
|
||||||
Route::post('/','Api\SubpedidoController@store');
|
Route::post('/','Api\SubpedidoController@store');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue