invoiceninja/app/Ninja/Repositories/ProductRepository.php
2016-07-14 22:37:04 +02:00

82 lines
1.9 KiB
PHP

<?php
namespace App\Ninja\Repositories;
use DB;
use App\Models\Product;
/**
* Class ProductRepository
*/
class ProductRepository extends BaseRepository
{
/**
* @return string
*/
public function getClassName()
{
return 'App\Models\Product';
}
/**
* @return mixed
*/
public function all()
{
return Product::scope()
->withTrashed()
->get();
}
/**
* @param $accountId
*
* @return $this
*/
public function find($accountId)
{
return DB::table('products')
->leftJoin('tax_rates', function($join) {
$join->on('tax_rates.id', '=', 'products.default_tax_rate_id')
->whereNull('tax_rates.deleted_at');
})
->where('products.account_id', '=', $accountId)
->where('products.deleted_at', '=', null)
->select(
'products.public_id',
'products.product_key',
'products.notes',
'products.cost',
'tax_rates.name as tax_name',
'tax_rates.rate as tax_rate',
'products.deleted_at'
);
}
/**
* @param array $data
* @param Product|null $product
*
* @return Product|mixed
*/
public function save(array $data, Product $product = null)
{
$publicId = isset($data['public_id']) ? $data['public_id'] : false;
if ($product) {
// do nothing
} elseif ($publicId) {
$product = Product::scope($publicId)->firstOrFail();
\Log::warning('Entity not set in product repo save');
} else {
$product = Product::createNew();
}
$product->fill($data);
$product->save();
return $product;
}
}