App\Ninja\Repositories\ExpenseRepository::save PHP Method

save() public method

public save ( $input, $expense = null )
    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;
    }

Usage Example

 /**
  * @param $data
  * @param null $expense
  * @return mixed|null
  */
 public function save($data, $expense = null)
 {
     if (isset($data['client_id']) && $data['client_id']) {
         $data['client_id'] = Client::getPrivateId($data['client_id']);
     }
     if (isset($data['vendor_id']) && $data['vendor_id']) {
         $data['vendor_id'] = Vendor::getPrivateId($data['vendor_id']);
     }
     return $this->expenseRepo->save($data, $expense);
 }
All Usage Examples Of App\Ninja\Repositories\ExpenseRepository::save