public function save($input) { $publicId = isset($input['public_id']) ? $input['public_id'] : false; if ($publicId) { $expense = Expense::scope($publicId)->firstOrFail(); } else { $expense = Expense::createNew(); } // First auto fill $expense->fill($input); $expense->expense_date = Utils::toSqlDate($input['expense_date']); if (isset($input['private_notes'])) { $expense->private_notes = trim($input['private_notes']); } $expense->public_notes = trim($input['public_notes']); $expense->should_be_invoiced = isset($input['should_be_invoiced']) || $expense->client_id ? true : false; if (!$expense->expense_currency_id) { $expense->expense_currency_id = \Auth::user()->account->getCurrencyId(); } if (!$expense->invoice_currency_id) { $expense->invoice_currency_id = \Auth::user()->account->getCurrencyId(); } $rate = isset($input['exchange_rate']) ? Utils::parseFloat($input['exchange_rate']) : 1; $expense->exchange_rate = round($rate, 4); $expense->amount = round(Utils::parseFloat($input['amount']), 2); $expense->save(); return $expense; }
public function save($input, $expense = null) { $publicId = isset($input['public_id']) ? $input['public_id'] : false; if ($expense) { // do nothing } elseif ($publicId) { $expense = Expense::scope($publicId)->firstOrFail(); if (Utils::isNinjaDev()) { \Log::warning('Entity not set in expense repo save'); } } else { $expense = Expense::createNew(); } if ($expense->is_deleted) { return $expense; } // First auto fill $expense->fill($input); if (isset($input['expense_date'])) { $expense->expense_date = Utils::toSqlDate($input['expense_date']); } $expense->should_be_invoiced = isset($input['should_be_invoiced']) && floatval($input['should_be_invoiced']) || $expense->client_id ? true : false; if (!$expense->expense_currency_id) { $expense->expense_currency_id = \Auth::user()->account->getCurrencyId(); } if (!$expense->invoice_currency_id) { $expense->invoice_currency_id = \Auth::user()->account->getCurrencyId(); } $rate = isset($input['exchange_rate']) ? Utils::parseFloat($input['exchange_rate']) : 1; $expense->exchange_rate = round($rate, 4); if (isset($input['amount'])) { $expense->amount = round(Utils::parseFloat($input['amount']), 2); } $expense->save(); // Documents $document_ids = !empty($input['document_ids']) ? array_map('intval', $input['document_ids']) : []; foreach ($document_ids as $document_id) { // check document completed upload before user submitted form if ($document_id) { $document = Document::scope($document_id)->first(); if ($document && Auth::user()->can('edit', $document)) { $document->invoice_id = null; $document->expense_id = $expense->id; $document->save(); } } } // prevent loading all of the documents if we don't have to if (!$expense->wasRecentlyCreated) { foreach ($expense->documents as $document) { if (!in_array($document->public_id, $document_ids)) { // Not checking permissions; deleting a document is just editing the invoice $document->delete(); } } } return $expense; }
public function save($input, $expense = null) { $publicId = isset($input['public_id']) ? $input['public_id'] : false; if ($expense) { // do nothing } elseif ($publicId) { $expense = Expense::scope($publicId)->firstOrFail(); \Log::warning('Entity not set in expense repo save'); } else { $expense = Expense::createNew(); } // First auto fill $expense->fill($input); $expense->expense_date = Utils::toSqlDate($input['expense_date']); if (isset($input['private_notes'])) { $expense->private_notes = trim($input['private_notes']); } $expense->public_notes = trim($input['public_notes']); $expense->should_be_invoiced = isset($input['should_be_invoiced']) || $expense->client_id ? true : false; if (!$expense->expense_currency_id) { $expense->expense_currency_id = \Auth::user()->account->getCurrencyId(); } if (!$expense->invoice_currency_id) { $expense->invoice_currency_id = \Auth::user()->account->getCurrencyId(); } $rate = isset($input['exchange_rate']) ? Utils::parseFloat($input['exchange_rate']) : 1; $expense->exchange_rate = round($rate, 4); $expense->amount = round(Utils::parseFloat($input['amount']), 2); $expense->save(); // Documents $document_ids = !empty($input['document_ids']) ? array_map('intval', $input['document_ids']) : array(); foreach ($document_ids as $document_id) { $document = Document::scope($document_id)->first(); if ($document && Auth::user()->can('edit', $document)) { $document->invoice_id = null; $document->expense_id = $expense->id; $document->save(); } } if (!empty($input['documents']) && Auth::user()->can('create', ENTITY_DOCUMENT)) { // Fallback upload $doc_errors = array(); foreach ($input['documents'] as $upload) { $result = $this->documentRepo->upload($upload); if (is_string($result)) { $doc_errors[] = $result; } else { $result->expense_id = $expense->id; $result->save(); $document_ids[] = $result->public_id; } } if (!empty($doc_errors)) { Session::flash('error', implode('<br>', array_map('htmlentities', $doc_errors))); } } foreach ($expense->documents as $document) { if (!in_array($document->public_id, $document_ids)) { // Not checking permissions; deleting a document is just editing the invoice $document->delete(); } } return $expense; }