diff --git a/app/Http/Controllers/AccountApiController.php b/app/Http/Controllers/AccountApiController.php index fc90946135..193cf2d7c5 100644 --- a/app/Http/Controllers/AccountApiController.php +++ b/app/Http/Controllers/AccountApiController.php @@ -36,14 +36,14 @@ class AccountApiController extends BaseAPIController { if ( ! env(API_SECRET) || $request->api_secret !== env(API_SECRET)) { sleep(ERROR_DELAY); - return 'Invalid secret'; + return $this->errorResponse(['message'=>'Invalid secret'],401); } if (Auth::attempt(['email' => $request->email, 'password' => $request->password])) { return $this->processLogin($request); } else { sleep(ERROR_DELAY); - return 'Invalid credentials'; + return $this->errorResponse(['message'=>'Invalid credentials'],401); } } diff --git a/app/Http/Controllers/BaseAPIController.php b/app/Http/Controllers/BaseAPIController.php index 14f8dc79a9..3a3a1e0bec 100644 --- a/app/Http/Controllers/BaseAPIController.php +++ b/app/Http/Controllers/BaseAPIController.php @@ -113,13 +113,13 @@ class BaseAPIController extends Controller return Response::make($response, 200, $headers); } - protected function errorResponse($response) + protected function errorResponse($response, $httpErrorCode = 400) { $error['error'] = $response; $error = json_encode($error, JSON_PRETTY_PRINT); $headers = Utils::getApiHeaders(); - return Response::make($error, 400, $headers); + return Response::make($error, $httpErrorCode, $headers); } diff --git a/app/Http/Controllers/ClientApiController.php b/app/Http/Controllers/ClientApiController.php index a3fea1435f..4bac332366 100644 --- a/app/Http/Controllers/ClientApiController.php +++ b/app/Http/Controllers/ClientApiController.php @@ -136,11 +136,11 @@ class ClientApiController extends BaseAPIController { if ($request->action == ACTION_ARCHIVE) { - try { - $client = Client::scope($publicId)->withTrashed()->firstOrFail(); - } catch (ModelNotFoundException $e) { + + $client = Client::scope($publicId)->withTrashed()->first(); + + if(!$client) return $this->errorResponse(['message'=>'Record not found'], 400); - } $this->clientRepo->archive($client); @@ -154,7 +154,7 @@ class ClientApiController extends BaseAPIController $client = Client::scope($publicId)->withTrashed()->first(); if(!$client) - return $this->errorResponse(['message'=>'Client not found.']); + return $this->errorResponse(['message'=>'Client not found.'], 400); $this->clientRepo->restore($client); @@ -173,7 +173,7 @@ class ClientApiController extends BaseAPIController ->first(); if(!$client) - return $this->errorResponse(['message'=>'Client not found.']); + return $this->errorResponse(['message'=>'Client not found.'],400); $transformer = new ClientTransformer(Auth::user()->account, Input::get('serializer')); $data = $this->createItem($client, $transformer, ENTITY_CLIENT); diff --git a/app/Http/Controllers/ExpenseApiController.php b/app/Http/Controllers/ExpenseApiController.php new file mode 100644 index 0000000000..88ff5497ce --- /dev/null +++ b/app/Http/Controllers/ExpenseApiController.php @@ -0,0 +1,64 @@ +expenseRepo = $expenseRepo; + $this->expenseService = $expenseService; + } + + public function index() + { + + $expenses = Expense::scope() + ->withTrashed() + ->orderBy('created_at','desc'); + + $expenses = $expenses->paginate(); + + $transformer = new ExpenseTransformer(Auth::user()->account, Input::get('serializer')); + $paginator = Expense::scope()->withTrashed()->paginate(); + + $data = $this->createCollection($expenses, $transformer, ENTITY_EXPENSE, $paginator); + + return $this->response($data); + + } + + public function update() + { + //stub + + } + + public function store() + { + //stub + + } + + public function destroy() + { + //stub + + } + + +} \ No newline at end of file diff --git a/app/Http/Controllers/InvoiceApiController.php b/app/Http/Controllers/InvoiceApiController.php index f6a5b9b60b..54e527385d 100644 --- a/app/Http/Controllers/InvoiceApiController.php +++ b/app/Http/Controllers/InvoiceApiController.php @@ -1,6 +1,7 @@ firstOrFail(); + $invoice = Invoice::scope($data['id'])->withTrashed()->first(); + + if(!$invoice) + return $this->errorResponse(['message'=>'Invoice does not exist.'], 400); + + + $this->mailer->sendInvoice($invoice, false, false); - $this->mailer->sendInvoice($invoice); if($error) { - $response['error'] = "There was an error sending the invoice"; + return $this->errorResponse(['message'=>'There was an error sending the invoice'], 400); } else { $response = json_encode(RESULT_SUCCESS, JSON_PRETTY_PRINT); diff --git a/app/Http/Controllers/VendorApiController.php b/app/Http/Controllers/VendorApiController.php index 80236226dd..e2cec175ba 100644 --- a/app/Http/Controllers/VendorApiController.php +++ b/app/Http/Controllers/VendorApiController.php @@ -48,6 +48,7 @@ class VendorApiController extends BaseAPIController { $vendors = Vendor::scope() ->with($this->getIncluded()) + ->withTrashed() ->orderBy('created_at', 'desc') ->paginate(); diff --git a/app/Http/routes.php b/app/Http/routes.php index 04a34b2687..848d22bcdd 100644 --- a/app/Http/routes.php +++ b/app/Http/routes.php @@ -236,6 +236,7 @@ Route::group(['middleware' => 'api', 'prefix' => 'api/v1'], function() Route::resource('products', 'ProductApiController'); Route::resource('tax_rates', 'TaxRateApiController'); Route::resource('users', 'UserApiController'); + Route::resource('expenses','ExpenseApiController'); // Vendor Route::resource('vendors', 'VendorApiController'); diff --git a/app/Models/Vendor.php b/app/Models/Vendor.php index a93fc6e5d7..ce21a64463 100644 --- a/app/Models/Vendor.php +++ b/app/Models/Vendor.php @@ -124,6 +124,11 @@ class Vendor extends EntityModel return $this->belongsTo('App\Models\Industry'); } + public function expenses() + { + return $this->hasMany('App\Models\Expense','vendor_id','id'); + } + public function addVendorContact($data, $isPrimary = false) { $publicId = isset($data['public_id']) ? $data['public_id'] : false; diff --git a/app/Ninja/Mailers/ContactMailer.php b/app/Ninja/Mailers/ContactMailer.php index 8959602ce6..dc513c3e88 100644 --- a/app/Ninja/Mailers/ContactMailer.php +++ b/app/Ninja/Mailers/ContactMailer.php @@ -41,6 +41,8 @@ class ContactMailer extends Mailer $client = $invoice->client; $account = $invoice->account; + $response = null; + if ($client->trashed()) { return trans('texts.email_errors.inactive_client'); } elseif ($invoice->trashed()) { diff --git a/app/Ninja/Transformers/ExpenseTransformer.php b/app/Ninja/Transformers/ExpenseTransformer.php new file mode 100644 index 0000000000..26729f4ddb --- /dev/null +++ b/app/Ninja/Transformers/ExpenseTransformer.php @@ -0,0 +1,29 @@ + (int) $expense->public_id, + 'private_notes' => $expense->private_notes, + 'public_notes' => $expense->public_notes, + 'should_be_invoiced' => (bool) $expense->should_be_invoiced, + 'updated_at' => $this->getTimestamp($expense->updated_at), + 'archived_at' => $this->getTimestamp($expense->deleted_at), + 'transaction_id' => $expense->transaction_id, + 'bank_id' => $expense->bank_id, + 'expense_currency_id' => (int) $expense->expense_currency_id, + 'account_key' => $this->account->account_key, + 'amount' => (float) $expense->amount, + 'expense_date' => $expense->expense_date, + 'exchange_rate' => (float) $expense->exchange_rate, + 'invoice_currency_id' => (int) $expense->invoice_currency_id, + 'is_deleted' => (bool) $expense->is_deleted, + ]; + } +} \ No newline at end of file diff --git a/app/Ninja/Transformers/VendorTransformer.php b/app/Ninja/Transformers/VendorTransformer.php index c1714b27a1..f0b8fd0415 100644 --- a/app/Ninja/Transformers/VendorTransformer.php +++ b/app/Ninja/Transformers/VendorTransformer.php @@ -36,14 +36,15 @@ class VendorTransformer extends EntityTransformer */ protected $availableIncludes = [ - 'contacts', + 'vendorContacts', 'invoices', + 'expenses', ]; - public function includeContacts(Vendor $vendor) + public function includeVendorContacts(Vendor $vendor) { - $transformer = new ContactTransformer($this->account, $this->serializer); - return $this->includeCollection($vendor->contacts, $transformer, ENTITY_CONTACT); + $transformer = new VendorContactTransformer($this->account, $this->serializer); + return $this->includeCollection($vendor->vendorContacts, $transformer, ENTITY_CONTACT); } public function includeInvoices(Vendor $vendor) @@ -52,6 +53,12 @@ class VendorTransformer extends EntityTransformer return $this->includeCollection($vendor->invoices, $transformer, ENTITY_INVOICE); } + public function includeExpenses(Vendor $vendor) + { + $transformer = new ExpenseTransformer($this->account, $this->serializer); + return $this->includeCollection($vendor->expenses, $transformer, ENTITY_EXPENSE); + } + public function transform(Vendor $vendor) { return [