Laravel - "Unable to write in the "/var/www/html/laraapp/public/storage/documents/appraisal_goal" directory" - laravel

I deployed my Laravel-5.8 application on Digital Ocean which uses Ubuntu-18. When I wanted to save image into my Laravel App on Digital Ocean:
public function create()
{
$userCompany = Auth::user()->company_id;
$userEmployee = Auth::user()->employee_id;
$identities = DB::table('appraisal_identity')->select('id','appraisal_name')->where('company_id', $userCompany)->where('is_current', 1)->first();
$employees = DB::table('hr_employees')->select('id')->where('id', $userEmployee)->first();
// dd($employees);
$goaltypes = AppraisalGoalType::where('company_id', $userCompany)->get();
$categories = AppraisalGoalType::with('children')->where('company_id', $userCompany)->whereNull('parent_id')->get();
return view('appraisal.appraisal_goals.create')
->with('goaltypes', $goaltypes)
->with('categories', $categories)
->with('identities', $identities)
->with('employees', $employees)
;
}
public function store(StoreAppraisalGoalRequest $request)
{
$appraisalStartDate = Carbon::parse($request->appraisal_start_date);
$appraisalEndDate = Carbon::parse($request->appraisal_end_date);
$userCompany = Auth::user()->company_id;
$employeeId = Auth::user()->employee_id;
$identities = DB::table('appraisal_identity')->select('id','appraisal_name')->where('company_id', $userCompany)->where('is_current', 1)->first();
$employees = DB::table('hr_employees')->select('id')->where('id', $employeeId)->first();
DB::beginTransaction();
try {
$goal = new AppraisalGoal();
$goal->goal_type_id = $request->goal_type_id;
$goal->appraisal_identity_id = $request->appraisal_identity_id;
$goal->employee_id = $request->employee_id; //$employeeId; //$request->employees_id
$goal->weighted_score = $request->weighted_score;
$goal->goal_title = $request->goal_title;
$goal->goal_description = $request->goal_description;
$goal->company_id = Auth::user()->company_id;
$goal->created_by = Auth::user()->id;
$goal->created_at = date("Y-m-d H:i:s");
$goal->is_active = 1;
if ($request->appraisal_doc != "") {
$appraisal_doc = $request->file('appraisal_doc');
$new_name = rand() . '.' . $appraisal_doc->getClientOriginalExtension();
$appraisal_doc->move(public_path('storage/documents/appraisal_goal'), $new_name);
$goal->appraisal_doc = $new_name;
}
$goal->save();
foreach ( $request->activity as $key => $activity){
$startDate = Carbon::parse($request->start_date[$key]);
$endDate = Carbon::parse($request->end_date[$key]);
$goaldetail = new AppraisalGoalDetail();
$goaldetail->kpi_description = $request->kpi_description[$key];
$goaldetail->appraisal_doc = $request->application_doc[$key];
$goaldetail->activity = $request->activity[$key];
$goaldetail->start_date = $startDate ->toDateTimeString();
$goaldetail->end_date = $endDate->toDateTimeString();
$goaldetail->appraisal_goal_id = $goal->id;
$goaldetail->appraisal_identity_id = $goal->appraisal_identity_id;
$goaldetail->employee_id = $goal->employee_id;
$goaldetail->company_id = Auth::user()->company_id;
$goaldetail->created_by = Auth::user()->id;
$goaldetail->created_at = date("Y-m-d H:i:s");
$goaldetail->is_active = 1;
$goaldetail->save();
}
$min_date = AppraisalGoalDetail::select('start_date')->where('appraisal_goal_id', $goal->id)->min('start_date');
$max_date = AppraisalGoalDetail::select('end_date')->where('appraisal_goal_id', $goal->id)->max('end_date');
$parentid = AppraisalGoalType::select('parent_id')->whereNotNull('parent_id')->where('company_id', $userCompany)->where('id', $goal->goal_type_id)->first();
$goal->update([
'appraisal_start_date' => $min_date,
'appraisal_end_date' => $max_date,
'parent_id' => $parentid->parent_id
]);
DB::commit();
Session::flash('success', 'Appraisal Goal is created successfully');
return redirect()->route('appraisal.appraisal_goals.index');
} catch (Exception $exception) {
dd($exception->getMessage());
DB::rollback();
Session::flash('error', 'Action failed! Please try again');
return redirect()->route('appraisal.appraisal_goals.index');
}
}
Everything works perfectly on the local server. But when I deployed it online to Digital Ocean. Then, when I click on submit, I got this error:
"Unable to write in the "/var/www/html/laraapp/public/storage/documents/appraisal_goal" directory"
How do I resolve it?
Thank you

You do not have necessary permission to write in storage folder.
Execute below command to provide necessary permission to write in storage folder
chmod 755 -R /var/www/html/laraapp/public/storage
chown www-data:www-data /var/www/html/laraapp/public/storage

Related

Mikrotik online users id is difference than normal user id

When i try to log mikrotik users activity we understood mikrotik assign another id to online users than when we created user with /ip/hotspot/user/add command, is there any solution to find which user connected to internet in mikrotik?
class MikrotikLoggerListener extends Command
{
protected $signature = 'mikrotik:logger';
protected $description = 'Mikrotik logger listener';
public function handle()
{
$users = User::all();
foreach ($users as $user) {
if ($user->log == 1) {
try {
$addRequest = new RouterOS\Request('/log print');
$result = (new RouterOS\Client($user->mikrotik_ip, $user->mikrotik_user, $user->mikrotik_password))->sendSync($addRequest);
foreach ($result as $object) {
$id = $object->getProperty('.id');
$time = $object->getProperty('time');
$topics = $object->getProperty('topics');
$message = $object->getProperty('message');
$exists = LogTemp::where('time','=',$time)->first();
if(!$exists) {
if (str_contains($message, 'logged out') || str_contains($message, 'disconnected')) {
$status = 'logged out';
$log = new LogTemp;
$log->user_id = $user->id;
$log->mikrotik_id = $id;
$log->time = $time;
$log->topics = $topics;
$log->message = $message;
$log->status = $status;
$log->save();
}
}
}
//--------------------------------------------------------------------------------------------------
$request = new RouterOS\Request('/ip/hotspot/active/print');
$router = new RouterOS\Client($user->mikrotik_ip, $user->mikrotik_user, $user->mikrotik_password);
$onlineUsers = $router->sendSync($request);
$count = $onlineUsers->count();
$this->info('customer: ' . $user->id . ' count: ' . $count);
for ($i = 0; $i < $count; $i++) {
if ($onlineUsers[$i]->getProperty('.id') != null) {
$mikrotik_id = $onlineUsers[$i]->getProperty('.id');
$current_user = LogTemp::where('user', '=', $onlineUsers[$i]->getProperty('user'))->first();
if ($current_user) {
$log = new LogTemp;
$log->user_id = $user->id;
$log->mikrotik_id = $mikrotik_id;
$log->user = $onlineUsers[$i]->getProperty('user') ?? '';
$log->address = $onlineUsers[$i]->getProperty('address') ?? '';
$log->mac_address = $onlineUsers[$i]->getProperty('mac-address') ?? '';
$log->login_by = $onlineUsers[$i]->getProperty('login-by') ?? '';
$log->bytes_in = $onlineUsers[$i]->getProperty('bytes-in') ?? '';
$log->bytes_out = $onlineUsers[$i]->getProperty('bytes-out') ?? '';
$log->packets_in = $onlineUsers[$i]->getProperty('packets-in') ?? '';
$log->packets_out = $onlineUsers[$i]->getProperty('packets-out') ?? '';
$log->status = 'online';
$log->save();
} else {
$log = new LogTemp();
$log->user_id = $user->id;
$log->mikrotik_id = $mikrotik_id;
$log->user = $onlineUsers[$i]->getProperty('user') ?? '';
$log->address = $onlineUsers[$i]->getProperty('address') ?? '';
$log->mac_address = $onlineUsers[$i]->getProperty('mac-address') ?? '';
$log->login_by = $onlineUsers[$i]->getProperty('login-by') ?? '';
$log->bytes_in = $onlineUsers[$i]->getProperty('bytes-in') ?? '';
$log->bytes_out = $onlineUsers[$i]->getProperty('bytes-out') ?? '';
$log->packets_in = $onlineUsers[$i]->getProperty('packets-in') ?? '';
$log->packets_out = $onlineUsers[$i]->getProperty('packets-out') ?? '';
$log->status = 'logged-in';
$log->save();
}
}
}
} catch (Exception $ignore) {
$this->info(' ->' . $ignore->getMessage());
}
try {
$addRequest = new RouterOS\Request('/log print');
$result = (new RouterOS\Client($user->mikrotik_ip, $user->mikrotik_user, $user->mikrotik_password))->sendSync($addRequest);
foreach ($result as $object) {
$message = $object->getProperty('message');
$mikrotik_id = $object->getProperty('.id');
if (str_contains($message, 'logged out') || str_contains($message, 'disconnected')) {
$current_user = LogTemp::where('user', '=', $mikrotik_id)->orderBy('id', 'DESC')->first();
if ($current_user) {
//dd($current_user);
$result = LogTemp::with('user')
->select([DB::raw('SUM(bytes_in) as download , SUM(bytes_out) as upload')])
->where('mikrotik_id','=',$mikrotik_id)
->groupBy('mikrotik_id')
->get();
$new_log = new UserConnectionsLog();
$new_log->user_id = $current_user->id;
$new_log->mikrotik_id = $current_user->mikrotik_id;
$new_log->user = $current_user->user;
$new_log->address = $current_user->address;
$new_log->mac_address = $current_user->mac_address;
$new_log->login_by = $current_user->login_by;
$new_log->bytes_in = $result['download'];
$new_log->bytes_out = $result['upload'];
$new_log->logged_in = $current_user->logged_in;
$new_log->logged_out = now();
//$new_log->save();
//LogTemp::where('mikrotik_id', '', $log->user)->delete();
}
}
}
} catch (Exception $ignore) {
$this->info('Log section error ->' . $ignore->getMessage());
}
}
}
}
}

Requesting solution for laravel 8 project

I'm an elementary web developer, I'm facing a problem. Please help me solve this. I'm creating both row and column dynamic. for save() is fine. But for update, only name is updated and other item
quantities cannot. Here is my codes.
//for save()
public function stockAdd(Request $request)
{
$validator = validator(request()->all(), ['stock_name' => 'required']);
if($validator->fails()) {
return back()->withErrors($validator);
}
$user_id = Auth::user()->user_id;
$stock_id = random_int(100000, 999999);
$stocks = new Stocks();
$stocks->stock_id = $stock_id;
$stocks->owner_id = $user_id;
$stocks->stock_name = request()->stock_name;
$stocks->my_stock = 0;
$stocks->disable = 0;
$stocks->save();
$brands = Brands::all();
$products = Products::all();
foreach ($brands as $brand){
foreach ($products as $product){
if($product['brand_id'] == $brand['id']){
$product_id = $product->product_id;
$stockitems = new StockItems();
$stockitems->stock_id = $stock_id;
$stockitems->product_id = $product->product_id;
$stockitems->owner_id = $user_id;
if(request()->$product_id > 0){
$stockitems->count = request()->$product_id;
}else{
$stockitems->count = 0;
}
$stockitems->save();
}
}
}
return redirect()->back()->with('successAddMsg','Successfully Added');
}
//for update()
public function stockUpdate(Request $request, $id)
{
$validator = validator(request()->all(), ['stock_name' => 'required']);
if($validator->fails()) {
return back()->withErrors($validator);
}
$stock = Stocks::findOrFail($id);
$stock->stock_name = request()->stock_name;
$stock->my_stock = 0;
$stock->disable = 0;
$stock->update();
$brands = Brands::all();
$products = Products::all();
foreach ($brands as $brand){
foreach ($products as $product){
if($product['brand_id'] == $brand['id']){
$product_id = $product->product_id;
//dd($product_id);
$stockitemitems = DB::table("stock_items")->select("*")->where("owner_id",Auth::user()->user_id)->where("stock_id",$stock->stock_id)->get();
$stockitems->count = $request->input($product_id);
$stockitems->update();
}
}
}
return redirect(route('user.stock-list'))->with('successAddMsg','Successfully Added');
}
The problem shows like this "Creating default object from empty value"

laravel upload image getClientOriginalExtension send email but image not show

Image does't show when i am sending email message
here my code
<?php
namespace App\Http\Controllers\Admin;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Auth;
use App\Models\Message;
use App\Models\SecondMessage;
use App\Models\ThirdMessage;
class MessageController extends Controller
{
public function message(){
$msg = Message::where('user_id',auth::user()->id)->where('msg_type',1)->first();
return view('admin.create_message',compact('msg'));
}
public function messageStore(Request $request){
$message = Message::where('user_id',Auth::user()->id)->where('msg_type',1)->first();
if(isset($message->id)){
if($request->file){
$file = time().'.'.$request->file->getClientOriginalExtension();
$location = public_path('uploads/' .$file);
$request->file->move($location, $file);
}else{
$location = $message->file;
}
$message->subject = $request->subject;
$message->msg_body = $request->msg_body;
$message->file = $file??'';
$message->save();
}else{
if($request->file){
$file = time().'.'.$request->file->getClientOriginalExtension();
$location = public_path('/' .$file);
$request->file->move($location, $file);
}else{
$location = null;
}
$message = new Message;
$message->subject = $request->subject;
$message->msg_body = $request->msg_body;
$message->user_id = Auth::user()->id;
$message->msg_type = 1;
$message->file = $location;
$message->save();
}
return back()->with('success','First SMTP Message Added Successfully');
}
public function secondMessage(){
$second_msg = SecondMessage::where('user_id',Auth::user()->id)->get();
return view('admin.smtp.second_message',compact('second_msg'));
}
public function secondMessageCreate(){
return view('admin.smtp.second_message_create');
}
public function secondMessageStore(Request $request){
if($request->file){
$file = time().'.'.$request->file->getClientOriginalExtension();
$location = public_path('uploads/' .$file);
$request->file->move($location, $file);
}else{
$file = null;
}
$message = new SecondMessage;
$message->subject = $request->subject;
$message->msg_body = $request->msg_body;
$message->file_status = $request->file_status;
$message->file = $file;
$message->user_id = auth::user()->id;
if($message->save()){
$check = SecondMessage::where('user_id',auth::user()->id)->count();
$message->serial = $check;
}
$message->save();
return back()->with('success','Second SMTP Message Added Successfully');
}
public function secondMessageEdit($id){
$second_msg = SecondMessage::where('id',$id)->where('user_id',Auth::user()->id)->first();
return view('admin.smtp.second_message_edit',compact('second_msg'));
}
public function secondMessageUpdate(Request $request,$id){
$message = SecondMessage::find($id);
if($request->file){
$file = time().'.'.$request->file->getClientOriginalExtension();
$location = public_path('uploads/' .$file);
$request->file->move($location, $file);
}else{
$file = $message->file;
}
$message->subject = $request->subject;
$message->msg_body = $request->msg_body;
$message->file_status = $request->file_status;
$message->file = $file;
$message->save();
return back()->with('success','Second SMTP Message Updated Successfully');
}
public function thirdMessage(){
$third_msg = ThirdMessage::where('user_id',Auth::user()->id)->get();
return view('admin.smtp.third_message',compact('third_msg'));
}
public function thirdMessageCreate(){
return view('admin.smtp.third_message_create');
}
public function thirdMessageStore(Request $request){
if($request->file){
$file = time().'.'.$request->file->getClientOriginalExtension();
$location = public_path('uploads/' .$file);
$request->file->move($location, $file);
}else{
$file = null;
}
$message = new ThirdMessage;
$message->subject = $request->subject;
$message->msg_body = $request->msg_body;
$message->user_id = auth::user()->id;
$message->file = $file;
$message->file_status = $request->file_status;
if($message->save()){
$check = ThirdMessage::where('user_id',auth::user()->id)->count();
$message->serial = $check;
}
$message->save();
return back()->with('success','Third SMTP Message Added Successfully');
}
public function thirdMessageEdit($id){
$third_msg = ThirdMessage::where('id',$id)->where('user_id',auth::user()->id)->first();
return view('admin.smtp.third_message_edit',compact('third_msg'));
}
public function thirdMessageUpdate(Request $request,$id){
$third_msg = ThirdMessage::where('id',$id)->where('user_id',auth::user()->id)->first();
if($request->file){
$file = time().'.'.$request->file->getClientOriginalExtension();
$location = public_path('uploads/' .$file);
$request->file->move($location, $file);
}else{
$file = $third_msg->file;
}
$third_msg->subject = $request->subject;
$third_msg->msg_body = $request->msg_body;
$third_msg->file = $file;
$third_msg->file_status = $request->file_status;
$third_msg->save();
return back()->with('success','Third SMTP Message Updated Successfully');
}
}

I get this error when trying to verify the email of candidates, Array to String conversion

I have a laravel system that when someone registers, they get a link on their emails where they have to click on it to verify their email. Once they click the link, their information is stored in the users table and the candidates table.
However, values are only inserted in the users table and not the candidates table, and I get the error "Array to string conversion".
Also, the link works well in local host but not after hosting the system.
RegisiterController.php
Str.php`
public function registerCandidate(Request $request){
if(setting('general_enable_candidate_registration')!=1){
return abort(401);
}
$rules = [
'first_name'=>'required',
'last_name'=>'required',
'national_id'=>'required',
'gender'=>'required',
'email'=>'required|email|string|max:255|unique:users',
'date_of_birth_year'=>'required',
'date_of_birth_month'=>'required',
'date_of_birth_day'=>'required',
'categories'=>'required',
'picture' => 'nullable|max:'.config('app.upload_size').'|mimes:jpeg,png,gif',
'cv_path' => 'nullable|max:'.config('app.upload_size').'|mimes:'.config('app.upload_files'),
];
if(setting('general_candidate_captcha')==1){
$rules['captcha'] = 'required|captcha';
}
foreach(CandidateFieldGroup::where('registration',1)->orderBy('sort_order')->get() as $group){
foreach($group->candidateFields as $field){
if($field->type=='file'){
$required = '';
if($field->required==1){
$required = 'required|';
}
$rules['field_'.$field->id] = 'nullable|'.$required.'max:'.config('app.upload_size').'|mimes:'.config('app.upload_files');
}
elseif($field->required==1){
$rules['field_'.$field->id] = 'required';
}
}
}
$this->validate($request,$rules);
$requestData = $request->all();
$password= $request->password;
$requestData['name']= $request->first_name.' '.$request->last_name;
$requestData['display_name'] = $request->first_name;
$requestData['password'] = Hash::make($password);
$requestData['role_id'] = 3;
$fields = CandidateField::get();
//check if email verification is required
if(setting('general_candidate_verification')==1){
do{
$hash = Str::random(30);
}while(PendingUser::where('hash',$hash)->first());
$formData = $_POST;
$formData['name'] = $request->first_name.' '.$request->last_name;
$formData['display_name'] = $request->first_name;
$formData['role_id'] = 3;
if($request->hasFile('picture')) {
$path = $request->file('picture')->store(PENDING_USER_FILES,'public_uploads');
$file = UPLOAD_PATH.'/'.$path;
$img = Image::make($file);
$img->resize(500, null, function ($constraint) {
$constraint->aspectRatio();
$constraint->upsize();
});
$img->save($file);
$formData['picture'] = $file;
}
else{
$formData['picture'] =null;
}
if($request->hasFile('cv_path')) {
//$path = $request->file('cv_path')->store(CANDIDATES,'public_uploads');
$name = $_FILES['cv_path']['name'];
$extension = $request->cv_path->extension();
// dd($extension);
$name = str_ireplace('.'.$extension,'',$name);
$name = uniqid().'_'.time().'_'.safeUrl($name).'.'.$extension;
$path = $request->file('cv_path')->storeAs(PENDING_USER_FILES,$name,'public_uploads');
$file = UPLOAD_PATH.'/'.$path;
$formData['cv_path'] = $file;
}
else{
$formData['cv_path'] =null;
}
$pendingUser = PendingUser::create([
'role_id'=>3,
'data'=> serialize($formData),
'hash'=> $hash
]);
//scan for files
foreach($fields as $field){
if(isset($requestData['field_'.$field->id]) && $field->type=='file' && $request->hasFile('field_'.$field->id))
{
//generate name for file
$name = $_FILES['field_'.$field->id]['name'];
//dd($name);
$extension = $request->{'field_'.$field->id}->extension();
// dd($extension);
$name = str_ireplace('.'.$extension,'',$name);
$name = $pendingUser->id.'_'.time().'_'.safeUrl($name).'.'.$extension;
$path = $request->file('field_'.$field->id)->storeAs(PENDING_USER_FILES,$name,'public_uploads');
$file = UPLOAD_PATH.'/'.$path;
$pendingUser->pendingUserFiles()->create([
'file_name'=>$_FILES['field_'.$field->id]['name'],
'file_path'=>$file,
'field_id'=>$field->id
]);
}
}
//send email to user
$link = route('confirm.candidate',['hash'=>$hash]);
$this->sendEmail($request->email,__('site.confirm-your-email'),__('site.confirm-email-mail',['link'=>$link]));
return redirect()->route('register.confirm');
}
//First create user
$user= User::create($requestData);
//Calculate date of birth
$dateOfBirth = $request->date_of_birth_year.'-'.$request->date_of_birth_month.'-'.$request->date_of_birth_day;
$requestData['date_of_birth'] = $dateOfBirth;
//checkfor picture
if($request->hasFile('picture')) {
$path = $request->file('picture')->store(CANDIDATES,'public_uploads');
$file = UPLOAD_PATH.'/'.$path;
$img = Image::make($file);
$img->resize(500, null, function ($constraint) {
$constraint->aspectRatio();
$constraint->upsize();
});
$img->save($file);
$requestData['picture'] = $file;
}
else{
$requestData['picture'] =null;
}
if($request->hasFile('cv_path')) {
//$path = $request->file('cv_path')->store(CANDIDATES,'public_uploads');
$name = $_FILES['cv_path']['name'];
$extension = $request->cv_path->extension();
// dd($extension);
$name = str_ireplace('.'.$extension,'',$name);
$name = $user->id.'_'.time().'_'.safeUrl($name).'.'.$extension;
$path = $request->file('cv_path')->storeAs(CANDIDATE_FILES,$name,'public_uploads');
$file = UPLOAD_PATH.'/'.$path;
$requestData['cv_path'] = $file;
}
else{
$requestData['cv_path'] =null;
}
$user->candidate()->create($requestData);
//save categories
$user->candidate->categories()->attach($request->categories);
//now save custom fields
$customValues = [];
//attach custom values
foreach($fields as $field){
if(isset($requestData['field_'.$field->id]))
{
if($field->type=='file'){
if($request->hasFile('field_'.$field->id)){
//generate name for file
$name = $_FILES['field_'.$field->id]['name'];
$extension = $request->{'field_'.$field->id}->extension();
$name = str_ireplace('.'.$extension,'',$name);
$name = $user->id.'_'.time().'_'.safeUrl($name).'.'.$extension;
$path = $request->file('field_'.$field->id)->storeAs(CANDIDATE_FILES,$name,'public_uploads');
$file = UPLOAD_PATH.'/'.$path;
$customValues[$field->id] = ['value'=>$file];
}
}
else{
$customValues[$field->id] = ['value'=>$requestData['field_'.$field->id]];
}
}
}
$user->candidateFields()->sync($customValues);
$message = __('mails.new-account',[
'siteName'=>setting('general_site_name'),
'email'=>$requestData['email'],
'password'=>$password,
'link'=> url('/login')
]);
$subject = __('mails.new-account-subj',[
'siteName'=>setting('general_site_name')
]);
$this->sendEmail($requestData['email'],$subject,$message);
//now login user
Auth::login($user, true);
//redirect to relevant page
if(session()->exists('candidate_destination')){
$url = session()->get('candidate_destination');
session()->remove('candidate_destination');
return redirect($url);
}
else{
return redirect()->route('home');
}
}
public function confirmCandidate($hash){
//get pending user
$pendingUser = PendingUser::where('hash',$hash)->first();
if(!$pendingUser){
abort(404);
}
$requestData = unserialize($pendingUser->data);
$password = $requestData['password'];
$requestData['password'] = Hash::make($password);
//check for profile picture and move to new directory
if(!empty($requestData['picture']) && file_exists($requestData['picture'])){
$file = basename($requestData['picture']);
$newPath = UPLOAD_PATH.'/'.CANDIDATES.'/'.$file;
rename($requestData['picture'],$newPath);
$requestData['picture'] = $newPath;
}
if(!empty($requestData['cv_path']) && file_exists($requestData['cv_path'])){
$file = basename($requestData['cv_path']);
$newPath = UPLOAD_PATH.'/'.CANDIDATE_FILES.'/'.$file;
rename($requestData['cv_path'],$newPath);
$requestData['cv_path'] = $newPath;
}
//First create user
$user= User::create($requestData);
//Calculate date of birth
$dateOfBirth = $requestData['date_of_birth_year'].'-'.$requestData['date_of_birth_month'].'-'.$requestData['date_of_birth_day'];
$requestData['date_of_birth'] = $dateOfBirth;
$user->candidate()->create($requestData);
//save categories
if(isset($requestData['categories'])){
$user->candidate->categories()->attach($requestData['categories']);
}
$fields = CandidateField::get();
$customValues = [];
//attach custom values
foreach($fields as $field){
if($field->type=='file'){
$pendingFile = $pendingUser->pendingUserFiles()->where('field_id',$field->id)->first();
if($pendingFile){
//generate name for file
$name = $pendingFile->file_name;
$info = new \SplFileInfo($name);
$extension = $info->getExtension();
$name = str_ireplace('.'.$extension,'',$name);
$name = $user->id.'_'.time().'_'.safeUrl($name).'.'.$extension;
$file = UPLOAD_PATH.'/'.CANDIDATE_FILES.'/'.$name;
rename($pendingFile->file_path,$file);
$customValues[$field->id] = ['value'=>$file];
}
}
elseif(isset($requestData['field_'.$field->id])){
$customValues[$field->id] = ['value'=>$requestData['field_'.$field->id]];
}
}
$user->candidateFields()->sync($customValues);
$pendingUser->delete();
$message = __('mails.new-account',[
'siteName'=>setting('general_site_name'),
'email'=>$requestData['email'],
'password'=>$password,
'link'=> url('/login')
]);
$subject = __('mails.new-account-subj',[
'siteName'=>setting('general_site_name')
]);
$this->sendEmail($requestData['email'],$subject,$message);
//now login user
Auth::login($user, true);
//redirect to relevant page
if(session()->exists('candidate_destination')){
$url = session()->get('candidate_destination');
session()->remove('candidate_destination');
return redirect($url);
}
else{
return redirect()->route('home');
}
}
`

Laravel: Divide into monthly installments

On a controller store function, I have this code:
public function store(RegisterAccountsRequest $request){
if($request->installment > 1){
foreach(range(1, $request->installment) as $installment) {
$data = new Financial;
$data->type = $request->type[0];
$data->payment = $request->payment[0];
$data->description = $request->description;
$data->status = $request->status;
$data->name = $request->name . " ( {$installment} / {$request->installment} )";
$data->value = ( $request->value / $request->installment );
if ($request->amount_paid == '0.00') {
$data->effective = 0;
} else {
$data->effective = 1;
}
$data->installment = $installment;
$data->due_date = $request->due_date;
$data->save();
$cf = new ClientFinancial;
$cf->client_id = Auth::user()->id;
$cf->financial_id = Financial::orderBy('id', 'desc')->first()->id;
$cf->save();
}
} else {
$data = new Financial;
$data->type = $request->type[0];
$data->payment = $request->payment[0];
$data->description = $request->description;
$data->status = $request->status;
$data->name = $request->name;
$data->value = $request->value;
if ($request->amount_paid == '0.00') {
$data->effective = 0;
} else {
$data->effective = 1;
}
$data->installment = 1;
$data->due_date = $request->due_date;
$data->save();
$cf = new ClientFinancial;
$cf->client_id = Auth::user()->id;
$cf->financial_id = Financial::orderBy('id', 'desc')->first()->id;
$cf->save();
}
return redirect()->route('admin.financials.index')
->with('success', "Conta cadastrada com sucesso!", $data);
}
When $request->installment is bigger than 1, then runs the first part of the code e it should do some calculations which I'm not figuring out how to store each installment for each month, like:
due_date
________
30/10/2020
30/11/2020
30/12/2020
etc.
I hope I made myself clear enough.
Help, please!
I think you need something like this:
public function store(RegisterAccountsRequest $request){
if($request->installment > 1){
$dueDate = Carbon::createFromFormat('d/m/Y', $request->due_date);
foreach(range(1, $request->installment) as $installment) {
$data = new Financial;
$data->type = $request->type[0];
$data->payment = $request->payment[0];
$data->description = $request->description;
$data->status = $request->status;
$data->name = $request->name . " ( {$installment} / {$request->installment} )";
$data->value = ( $request->value / $request->installment );
if ($request->amount_paid == '0.00') {
$data->effective = 0;
} else {
$data->effective = 1;
}
$data->installment = $installment;
$data->due_date = $dueDate->format('d/m/Y');
$dueDate->addMonth();
$data->save();
$cf = new ClientFinancial;
$cf->client_id = Auth::user()->id;
$cf->financial_id = Financial::orderBy('id', 'desc')->first()->id;
$cf->save();
}
} else {
$data = new Financial;
$data->type = $request->type[0];
$data->payment = $request->payment[0];
$data->description = $request->description;
$data->status = $request->status;
$data->name = $request->name;
$data->value = $request->value;
if ($request->amount_paid == '0.00') {
$data->effective = 0;
} else {
$data->effective = 1;
}
$data->installment = 1;
$data->due_date = $request->due_date;
$data->save();
$cf = new ClientFinancial;
$cf->client_id = Auth::user()->id;
$cf->financial_id = Financial::orderBy('id', 'desc')->first()->id;
$cf->save();
}
return redirect()->route('admin.financials.index')
->with('success', "Conta cadastrada com sucesso!", $data);
}
In this case I make a Carbon(carbon docs) instance with date due_date.
After using the value like so $data->due_date = $dueDate->format('d/m/Y'); and then adding one month like so $dueDate->addMonth(); I have a new month available each iteration.

Resources