register step

This commit is contained in:
Kevin Adametz 2020-03-26 09:46:06 +01:00
parent 1ada368ed4
commit f06d2d15a5
50 changed files with 748 additions and 276 deletions

View file

@ -4,12 +4,15 @@ namespace App\Http\Controllers;
use App\Mail\MailCustomMessage;
use App\Mail\MailVerifyAccount;
use App\Mail\MailVerifyContact;
use App\Mail\MailAccountActive;
use App\Models\UserAccount;
use App\Models\UserHistory;
use App\Repositories\ContractPDFRepository;
use App\Repositories\UserRepository;
use App\Services\UserService;
use App\User;
use Illuminate\Support\Facades\Mail;
use Input;
@ -190,23 +193,13 @@ class LeadController extends Controller
$user = $this->userRepo->getModel();
$unique = false;
do{
$confirmation_code = str_random(30);
if( User::where('confirmation_code', '=', $confirmation_code)->count() == 0){
$unique = true;
}
}
while(!$unique);
$confirmation_code = UserService::createConfirmationCode();
$user->lang = $user->getLandByCountry();
$user->confirmation_code = $confirmation_code;
//10 == start wizard form create Lead
$user->wizard = 10;
$user->save();
Mail::to($user->email)->send(new MailVerifyContact($confirmation_code, $user));
\Session()->flash('alert-save', true);
@ -221,47 +214,74 @@ class LeadController extends Controller
}
//user released when register is complete
public function newReleased($id){
public function released($action, $id){
$user = User::findOrFail($id);
$validator = Validator::make(Input::all(), []);
if(!$user->m_sponsor){
$validator->errors()->add('m_sponsor', __('Berater hat keinen Sponsor.'));
}
if(!$user->account->m_first_name){
$validator->errors()->add('m_first_name', __('Berater hat keinen Vornamen.'));
}
if(!$user->account->m_first_name){
$validator->errors()->add('m_last_name', __('Berater hat keinen Nachnamen.'));
}
if(!$user->account->m_account){
$validator->errors()->add('m_account', __('Berater hat keine Account ID'));
}
if ($validator->errors()->count()) {
return back()->withErrors($validator)->withInput(Input::all());
if($action === 'completed'){
$validator = Validator::make(Input::all(), []);
if(!$user->m_sponsor){
$validator->errors()->add('m_sponsor', __('Berater hat keinen Sponsor.'));
}
if(!$user->account->m_first_name){
$validator->errors()->add('m_first_name', __('Berater hat keinen Vornamen.'));
}
if(!$user->account->m_first_name){
$validator->errors()->add('m_last_name', __('Berater hat keinen Nachnamen.'));
}
if(!$user->account->m_account){
$validator->errors()->add('m_account', __('Berater hat keine Account ID'));
}
if ($validator->errors()->count()) {
return back()->withErrors($validator)->withInput(Input::all());
}
//create PDF
$pdf = new ContractPDFRepository($user);
$pdf->_set('disk', 'user');
$pdf->_set('dir', '/'.$user->id.'/documents/');
$pdf->_set('user_id', $user->id);
$pdf->_set('identifier', 'contract');
$pdf->createContractPDF();
//set wizard tp payments
$user->wizard = 20;
$user->active = 1;
$user->active_date = now();
$user->confirmation_code = null;
$user->confirmation_code_to = null;
$user->confirmation_code_remider = 0;
$user->save();
//mail with code to user?
Mail::to($user->email)->send(new MailAccountActive($user));
UserHistory::create(['user_id' => $user->id, 'action'=>'released_completed', 'status'=>0]);
\Session()->flash('alert-success', "Berater freigeschaltet!");
}
//create PDF
$pdf = new ContractPDFRepository($user);
$pdf->_set('disk', 'user');
$pdf->_set('dir', '/'.$user->id.'/documents/');
$pdf->_set('user_id', $user->id);
$pdf->_set('identifier', 'contract');
$pdf->createContractPDF();
if($action === 'incomplete'){
//set wizard tp payments
$user->wizard = 20;
$user->active = 1;
$user->active_date = now();
$user->confirmation_code = null;
$user->confirmation_code_to = null;
$user->confirmation_code_remider = 0;
$user->save();
//mail with code to user?
Mail::to($user->email)->send(new MailAccountActive($user));
\Session()->flash('alert-success', "Berater freigeschaltet!");
//reset release
$confirmation_code = UserService::createConfirmationCode();
$user->confirmation_code = $confirmation_code;
$user->confirmation_code_to = date('Y-m-d H:i:s', strtotime('+1 week'));
$user->confirmation_code_remider = 0;
$user->wizard = 1;
$user->release_account = null;
$user->save();
$input = Input::all();
$data = [
'subject' => $input['account_incomplete_subject'],
'message' => $input['account_incomplete_message'],
'confirmation_code' => $confirmation_code,
];
Mail::to($user->email)->send(new MailCustomMessage($user, $data, \Auth::user()));
UserHistory::create(['user_id' => $user->id, 'action'=>'released_incomplete', 'status'=>0]);
\Session()->flash('alert-success', "E-Mail an Berater gesendet.");
}
return redirect(route('admin_lead_edit', [$user->id]));
}
@ -270,28 +290,35 @@ class LeadController extends Controller
public function newMailVerified($id){
$user = User::findOrFail($id);
$unique = false;
do{
$confirmation_code = str_random(30);
if(User::where('confirmation_code', '=', $confirmation_code)->count() == 0){
$unique = true;
}
}
while(!$unique);
$confirmation_code = UserService::createConfirmationCode();
$user->confirmation_code = $confirmation_code;
$user->confirmation_code_to = date('Y-m-d H:i:s', strtotime('+1 week'));
$user->confirmation_code_remider = 0;
$user->save();
Mail::to($user->email)->send(new MailVerifyAccount($confirmation_code, $user));
\Session()->flash('alert-success', "E-Mail erneut gesendet");
UserHistory::create(['user_id' => $user->id, 'action'=>'new_mail_verified', 'status'=>0]);
\Session()->flash('alert-success', "E-Mail erneut gesendet");
return redirect(route('admin_lead_edit', [$user->id]));
}
public function deleteFile($user_id, $file_id, $relation){
if($relation === 'upload'){
$user = User::findOrFail($user_id);
$file = $user->files()->findOrFail($file_id);
//remove file
\Storage::disk('user')->delete($file->dir.$file->filename);
$file->delete();
\Session()->flash('alert-success', "Datei gelöscht");
}
return back();
}
public function getLeads()
{

View file

@ -76,15 +76,7 @@ class RegisterController extends Controller
$data = Input::all();
$user = $this->userRepo->create($data);
$unique = false;
do{
$confirmation_code = str_random(30);
if(User::where('confirmation_code', '=', $confirmation_code)->count() == 0){
$unique = true;
}
}
while(!$unique);
$confirmation_code = UserService::createConfirmationCode();
$user->lang = !empty(\App::getLocale()) ? \App::getLocale() : "de";
$user->confirmation_code = $confirmation_code;

View file

@ -149,6 +149,7 @@ class WizardController extends Controller
$rules = array(
'accepted_data_protection' => 'required',
'accepted_active' => 'required',
'accepted_contract' => 'required'
);
$validator = Validator::make(Input::all(), $rules);
if ($validator->fails()) {
@ -162,12 +163,17 @@ class WizardController extends Controller
return view('user.wizard.register', $data)->withErrors($validator);
}
$account = $user->account;
if($account->accepted_contract === null){
$account->accepted_contract = now();
}
if($account->data_protection === null){
$account->data_protection = now();
}
$account->save();
if($user->agreement === null){
$user->agreement = now();
}
$user->wizard = 1;
$user->save();
return redirect(route('wizard_register'));
@ -254,6 +260,7 @@ class WizardController extends Controller
if ($step == 4) {
$user->wizard = 5;
$user->release_account = now();
UserHistory::create(['user_id' => $user->id, 'action'=>'release_account', 'status'=>0]);
$user->save();
if($user->isTestMode()){
@ -297,14 +304,16 @@ class WizardController extends Controller
}
$account = $user->account;
if($account->accepted_contract === null){
$account->accepted_contract = now();
}
if($account->data_protection === null){
$account->data_protection = now();
}
$account->save();
if($user->agreement === null){
$user->agreement = now();
}
$account->save();
$user->agreement = now();
$user->wizard = 11;
$user->save();

View file

@ -0,0 +1,73 @@
<?php
namespace App\Mail;
use App\Models\UserMessage;
use App\User;
use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Contracts\Queue\ShouldQueue;
class MailCustomMessage extends Mailable
{
use Queueable, SerializesModels;
protected $data;
protected $user;
protected $sender;
public $subject;
public $message;
public function __construct(User $user, $data, $sender)
{
$this->data = $data;
$this->user = $user;
$this->sender = $sender;
$this->subject = isset($data['subject']) ? $data['subject'] : __('email.email_subject');
$this->message = isset($data['message']) ? $data['message'] : '';
}
public function build()
{
$salutation = __('email.salutation').",";
if($this->user->account){
if($this->user->account->salutation === "mr"){
$salutation = __('email.dear_sir')." ".$this->user->account->first_name.",";
}else{
$salutation = __('email.dear_mrs')." ".$this->user->account->first_name.",";
}
}
UserMessage::create([
'user_id' => $this->user->id,
'send_user_id' => $this->sender->id,
'email' => $this->user->email,
'subject' => $this->subject,
'message' => $this->message,
'send' => true,
'sent_at' => now(),
]);
$url = "";
$button = "";
if(isset($this->data['confirmation_code'])){
$url = route('register_verify', $this->data['confirmation_code']);
$button = __('email.button_account');
}
return $this->view('emails.auth')->with([
'url' => $url,
'salutation' => $salutation,
'button' => $button,
'copy1line' => $this->message,
'copy2line' => __('email.copy2line'),
'copy3line' => __('email.copy3line'),
'greetings' => __('email.greetings'),
'sender' => __('email.sender'),
]);
}
}

View file

@ -42,15 +42,14 @@ class MailReleaseAccount extends Mailable
$content .= "E-Mail: ".$this->user->email;
$copy1line = "Ein neuer Berater hat sich Registriert und wartet auf die Überprüfung und Freigabe seiner Daten."."\n";
$copy1line .= "+ Überprüfung Ausweisdaten"."\n";
$copy1line .= "+ Überprüfung Gewerbenachweis"."\n";
$copy1line = "Ein neuer Berater hat sich registriert und wartet auf die Überprüfung und Freigabe seiner Daten:"."\n";
$copy1line .= "+ Überprüfung der Ausweisdate"."\n";
$copy1line .= "+ Überprüfung des Gewerbenachweises"."\n";
$copy1line .= "+ Eintrag Account ID"."\n";
$copy1line .= "+ Überprüfung Karriere-Level/Sponsor"."\n";
$copy1line .= "+ Überprüfung Rechnungsdaten"."\n";
$copy1line .= 'Nach erfolgreicher Überprüfung mit dem Button "Daten vollständigt => Berater freischalten" den Berater freischalten.'."\n";
$copy1line .= 'Der Berater erhält eine Mail, dass sein Account freigeschaltet worden ist. In den Vertrag wird automatisch mit den eingetragenden Inhalten erstellt.'."\n";
$copy1line .= "+ Überprüfung / Kenntnisnahme Sponsor"."\n";
$copy1line .= "+ Überprüfung der Rechnungsdaten"."\n";
$copy1line .= 'Nach erfolgreicher Überprüfung mit dem Button „Daten vollständig => Berater freischalten“ den Berater freischalten.'."\n";
$copy1line .= 'Der Berater erhält eine Mail, dass sein Account freigeschaltet wurde. Der Vertrag wird automatisch mit den Daten des Vertriebspartners erstellt.'."\n";
return $this->view('emails.info')->with([
'url' => route('admin_lead_edit', $this->user->id).'?show=check_lead',

View file

@ -176,11 +176,16 @@ class UserAccount extends Model
$this->attributes['birthday'] = isset($value) ? (new Carbon($value))->format('Y-m-d') : NULL;
}
public function getDataProtectionFormat(){
public function getDataProtectionFormat(){
if(!$this->attributes['data_protection']){ return ""; }
return Carbon::parse($this->attributes['data_protection'])->format(\Util::formatDateTimeDB());
}
public function getAcceptContractFormat(){
if(!$this->attributes['accept_contract']){ return ""; }
return Carbon::parse($this->attributes['accept_contract'])->format(\Util::formatDateTimeDB());
}
public function getCountryAttrAs($attr, $as = false){
if($this->country){

View file

@ -47,6 +47,7 @@ class UserHistory extends Model
protected $table = 'user_histories';
protected $status_types = [
0 => 'info',
1 => 'store_payment',
2 => 'checkout_payment',
3 => 'payment_error',
@ -63,6 +64,7 @@ class UserHistory extends Model
50 => 'delete_membership'
];
protected $status_colors = [
0 => 'info',
1 => 'warning',
2 => 'warning',
3 => 'danger',

View file

@ -0,0 +1,69 @@
<?php
/**
* Created by Reliese Model.
*/
namespace App\Models;
use Carbon\Carbon;
use Illuminate\Database\Eloquent\Model;
/**
* Class UserMessage
*
* @property int $id
* @property int $user_id
* @property int $send_user_id
* @property string $email
* @property string $subject
* @property string $message
* @property bool $send
* @property bool $fail
* @property string $error
* @property Carbon $sent_at
* @property Carbon $scheduled_at
* @property Carbon $delivered_at
* @property Carbon $created_at
* @property Carbon $updated_at
*
* @property User $user
*
* @package App\Models
*/
class UserMessage extends Model
{
protected $table = 'user_messages';
protected $casts = [
'user_id' => 'int',
'send_user_id' => 'int',
'send' => 'bool',
'fail' => 'bool'
];
protected $dates = [
'sent_at',
'scheduled_at',
'delivered_at'
];
protected $fillable = [
'user_id',
'send_user_id',
'email',
'subject',
'message',
'send',
'fail',
'error',
'sent_at',
'scheduled_at',
'delivered_at'
];
public function user()
{
return $this->belongsTo(User::class);
}
}

View file

@ -0,0 +1,21 @@
<?php
namespace App\Services;
use App\User;
class UserService
{
public static function createConfirmationCode() {
$unique = false;
do{
$confirmation_code = str_random(30);
if(User::where('confirmation_code', '=', $confirmation_code)->count() == 0){
$unique = true;
}
}
while(!$unique);
return $confirmation_code;
}
}

View file

@ -1,8 +1,6 @@
<?php
namespace App\Services;
use App\Models\UserHistory;
class Util