setUser(\Auth::user()); } /** * @param Ardent $model * * @return bool */ public function destroy(Ardent $model) { $model->delete(); return true; } /** * @param array $data * * @return Ardent */ public function store(array $data) { $category = new \Category; $category->name = $data['name']; $category->class = 'Category'; $category->user()->associate($this->getUser()); if (!$category->validate()) { var_dump($category->errors()); exit(); } $category->save(); return $category; } /** * @param Ardent $model * @param array $data * * @return bool */ public function update(Ardent $model, array $data) { $model->name = $data['name']; if (!$model->validate()) { var_dump($model->errors()->all()); exit; } $model->save(); return true; } /** * Validates an array. Returns an array containing MessageBags * errors/warnings/successes. * * @param array $model * * @return array */ public function validate(array $model) { $warnings = new MessageBag; $successes = new MessageBag; $errors = new MessageBag; if (isset($model['name'])) { if (strlen($model['name']) < 1) { $errors->add('name', 'Name is too short'); } if (strlen($model['name']) > 200) { $errors->add('name', 'Name is too long'); } } else { $errors->add('name', 'Name is mandatory'); } $validator = \Validator::make($model, \Component::$rules); if ($validator->invalid()) { $errors->merge($validator->errors()); } if (!$errors->has('name')) { $successes->add('name', 'OK'); } return ['errors' => $errors, 'warnings' => $warnings, 'successes' => $successes]; } /** * Returns an object with id $id. * * @param int $id * * @return Ardent */ public function find($id) { // TODO: Implement find() method. throw new NotImplementedException; } /** * Finds an account type using one of the "$what"'s: expense, asset, revenue, opening, etc. * * @param $what * * @return \AccountType|null */ public function findByWhat($what) { // TODO: Implement findByWhat() method. throw new NotImplementedException; } /** * Returns all objects. * * @return Collection */ public function get() { return $this->getUser()->categories()->orderBy('name', 'ASC')->get(); } /** * @param array $ids * * @return Collection */ public function getByIds(array $ids) { // TODO: Implement getByIds() method. throw new NotImplementedException; } public function firstOrCreate($name) { return \Category::firstOrCreate(['user_id' => $this->getUser()->id, 'name' => $name]); } public function getTransactionJournals(\Category $category, $limit = 50) { $offset = intval(\Input::get('page')) > 0 ? intval(\Input::get('page')) * $limit : 0; $set = $category->transactionJournals()->withRelevantData()->take($limit)->offset($offset)->orderBy('date', 'DESC')->get(['transaction_journals.*']); $count = $category->transactionJournals()->count(); $items = []; foreach ($set as $entry) { $items[] = $entry; } return \Paginator::make($items, $count, $limit); } /** * @param \Category $budget * @param Carbon $date * * @return null */ public function repetitionOnStartingOnDate(\Category $category, Carbon $date) { return null; } /** * @param \Category $category * @param Carbon $date * * @return float */ public function spentInMonth(\Category $category, Carbon $date) { $end = clone $date; $date->startOfMonth(); $end->endOfMonth(); $sum = floatval($category->transactionjournals()->before($end)->after($date)->lessThan(0)->sum('amount')) * -1; return $sum; } }