diff --git a/.env b/.env index c6b5f9a..a54d6c9 100644 --- a/.env +++ b/.env @@ -3,7 +3,7 @@ APP_ENV=local APP_KEY=base64:w0K6RjfleoAOpuICea14JnaZ28PNc6EMzIFMQZ3MVtU= APP_DEBUG=true APP_URL=https://partner.gruene-seele.test -APP_API_DOMAIN=gruene-seele.bio +APP_API_DOMAIN=partner.gruene-seele.test APP_DOMAIN=partner.gruene-seele.test APP_PROMO_URL=https://testemich.test APP_PROMO_DOMAIN=testemich.test diff --git a/app/Console/Commands/PaymentsAccounts.php b/app/Console/Commands/PaymentsAccounts.php new file mode 100644 index 0000000..7b15fee --- /dev/null +++ b/app/Console/Commands/PaymentsAccounts.php @@ -0,0 +1,120 @@ +info('RUN Command Payments Account: '.date('d.m.Y H:i')); + $this->timeStart = microtime(true); + + $this->updateUserNextLevel(); + $this->updatePaymentsAccountsFree(); + $this->reminderPaymentsAccounts(); + + return 0; + + } + + private function updateUserNextLevel(){ + // now date - renewal_days + $count = 0; + $renewalDate = Carbon::now()->modify('+'.(config('main.renewal_days')).' days'); + $users = User::where('payment_account', '!=', NULL) + ->where('active', '=', 1) + ->where('blocked', '!=', 1) + ->where('payment_account', '<', $renewalDate) + ->whereColumn('m_level', '!=', 'next_m_level') + ->get(); + + foreach($users as $user){ + $user->m_level = $user->next_m_level; + $user->save(); + $count ++; + } + + $diff = microtime(true) - $this->timeStart; + $sec = intval($diff); + $micro = $diff - $sec; + $this->info('END Command updateUserNextLevel: '.$count.' | Time: '.$sec. 'sec :' . round($micro * 1000, 4) . " ms"); + } + + + private function updatePaymentsAccountsFree(){ + // now date - renewal_days -1 / user_levels.payment_year false is no payment + $count = 0; + $renewalDate = Carbon::now()->modify('+'.(config('main.renewal_days')-1).' days'); + $users = User::join('user_levels', 'm_level', '=', 'user_levels.id')->select('users.*') + ->where('users.payment_account', '!=', NULL) + ->where('users.active', '=', 1) + ->where('users.blocked', '!=', 1) + ->where('users.payment_account', '<', $renewalDate) + ->where('user_levels.payment_year', '=', 0) + ->get(); + + foreach($users as $user){ + $user->payment_account = Carbon::parse($user->payment_account)->modify('1 year'); + $user->save(); + $count ++; + } + + $diff = microtime(true) - $this->timeStart; + $sec = intval($diff); + $micro = $diff - $sec; + $this->info('END Command updatePaymentsAccountsFree: '.$count.' | Time: '.$sec. 'sec :' . round($micro * 1000, 4) . " ms"); + } + + private function reminderPaymentsAccounts() + { + + $count = 0; + $max_reminder_date = Carbon::now()->modify('+'.(config('main.remind_first_days')).' days'); + $users = User::where('payment_account', '!=', NULL) + ->where('active', '=', 1) + ->where('blocked', '!=', 1) + ->where('payment_account', '<', $max_reminder_date) + ->get(); + + foreach ($users as $user){ + $status = UserCheckPaymentsAccounts::userReminderPayments($user); + $this->info('reminderPaymentsAccounts Status: '.$status.' | User: '.$user->id.' '.$user->email.' | Date :' . $user->getPaymentAccountDateFormat() . ""); + $count ++; + } + + $diff = microtime(true) - $this->timeStart; + $sec = intval($diff); + $micro = $diff - $sec; + $this->info('END Command reminderPaymentsAccounts: '.$count.' | Time: '.$sec. 'sec :' . round($micro * 1000, 4) . " ms"); + + } +} diff --git a/app/Console/Kernel.php b/app/Console/Kernel.php index a8c5158..2ea397d 100644 --- a/app/Console/Kernel.php +++ b/app/Console/Kernel.php @@ -24,8 +24,10 @@ class Kernel extends ConsoleKernel */ protected function schedule(Schedule $schedule) { - // $schedule->command('inspire') - // ->hourly(); + $schedule->command('payments:accounts') + ->sendOutputTo("cron.log"); + //->hourly(); + // ->emailOutputTo('kevin@adametz.media'); } /** diff --git a/app/Cron/CronController.php b/app/Cron/CronController.php new file mode 100644 index 0000000..c9c34c2 --- /dev/null +++ b/app/Cron/CronController.php @@ -0,0 +1,87 @@ +month = $month; + $this->year = $year; + } + + + public function getUserBusinessByMonthYear(){ + return UserBusiness::select('user_businesses.*') + ->where('user_businesses.month', '=', $this->month) + ->where('user_businesses.year', '=', $this->year) + ->where(function($q) { + return $q->where('user_businesses.commission_team_total', '>', 0) + ->orWhere('user_businesses.commission_shop_sales', '>', 0); + }) + ->get(); + } + + public function addUserCreditItem($userBusiness) + { + $date = HTMLHelper::getMonth($userBusiness->month).' '.$userBusiness->year; + + if($userBusiness->commission_shop_sales > 0){ + if($this->hasNotUserCreditItem($userBusiness, 1)){ + UserCreditItem::create([ + 'user_id' => $userBusiness->user_id, + 'user_business_id' => $userBusiness->id, + 'credit' => $userBusiness->commission_shop_sales, + 'message' => 'Provision Shop '.$date, + 'status' => 1, + ]); + } + } + if($userBusiness->commission_team_total > 0){ + if($this->hasNotUserCreditItem($userBusiness, 2)){ + UserCreditItem::create([ + 'user_id' => $userBusiness->user_id, + 'user_business_id' => $userBusiness->id, + 'credit' => $userBusiness->commission_team_total, + 'message' => 'Provision Team '.$date, + 'status' => 2, + ]); + } + } + return $userBusiness; + + } + + public function getUserCreditItemUsersByMonthYear(){ + return UserCreditItem::select('user_credit_items.*') + ->where('paid', '=', false) + ->groupBy('user_id') + ->get(); + } + + public function makeCreditPaymentPDF($user_id, $credit_send_mail) + { + //$user_id = 2; + $user = User::findOrFail($user_id); + $data = []; + if($credit_send_mail){ + $data['credit_send_mail'] = true; + } + $credit_repo = new CreditRepository($user); + return $credit_repo->create($data); + } + + private function hasNotUserCreditItem($userBusiness, $status){ + return (UserCreditItem::where('user_business_id', $userBusiness->id) + ->where('user_id', $userBusiness->user_id)->where('status', $status)->count() > 0) ? false : true; + } +} diff --git a/app/Cron/UserCheckPaymentsAccounts.php b/app/Cron/UserCheckPaymentsAccounts.php new file mode 100644 index 0000000..4a9be9a --- /dev/null +++ b/app/Cron/UserCheckPaymentsAccounts.php @@ -0,0 +1,154 @@ + 29 renewal_days > set next_m_level to m_level + > 29 renewal_days $user->user_level->payment_year = 0 / false + 1 year + + > 21 remind_first_days = reminder_first //status 31 + > 14 remind_sec_days = reminder_sec //status 33 + > 2 remind_last_days = reminder_last //status 34 + > 0 deaktiv = reminder_deaktiv //status 35 + */ + + public static function userReminderPayments(User $user){ + //35 reminder_deaktiv + if(!$user->isActiveAccount()){ // payment_account gt now + return self::checkIsReminderSend($user, 35); + } + //34 reminder_last + if($user->daysActiveAccount() <= config('main.remind_last_days')){ + return self::checkIsReminderSend($user, 34); + } + //33 reminder_sec + if($user->daysActiveAccount() <= config('main.remind_sec_days')){ + return self::checkIsReminderSend($user, 33); + } + //31 reminder_first + if($user->daysActiveAccount() > config('main.remind_sec_days')){ + return self::checkIsReminderSend($user, 31); + } + } + + + private static function checkIsReminderSend(User $user, $status){ + + $isSend = UserHistory::whereUserId($user->id) + ->whereAction('reminder_payments') + ->whereIdentifier($user->payment_account) + ->whereStatus($status) + ->get()->last(); + + if($isSend){ + return 0; + } + $referenz = self::sendReminderMail($user, $status); + UserHistory::create(['user_id' => $user->id, 'action'=>'reminder_payments', 'referenz'=>$referenz, 'identifier'=>$user->payment_account, 'status'=>$status]); + return $status; + + } + + private function sendReminderMail(User $user, $status){ + + $days = $user->daysActiveAccount(); + if($days < 0){ + $days = $days*-1; + } + $datetime = $user->getPaymentAccountDateFormat(); + + $pay_date = 0; + $price = 0; + /*$pay_date = Carbon::parse($user->payment_account)->modify('- '.config('main.abo_booking_days').' days')->format('d.m.Y'); + $price = ""; + if($user->payment_order_id && isset($user->payment_order_product->price)){ + $price = 'von '.$user->payment_order_product->getFormattedPrice().' EUR'; + }*/ + + $message = __('reminder.copy_first_'.$status, ['days'=>$days, 'datetime'=>$datetime, 'price' =>$price, 'pay_date'=>$pay_date]); + $message_last = __('reminder.copy_last_'.$status, ['days'=>$days, 'datetime'=>$datetime, 'price' =>$price, 'pay_date'=>$pay_date]); + $button = __('reminder.button_'.$status); + + $message = preg_replace("/[\n\r]/","",$message); + $message_last = preg_replace("/[\n\r]/","",$message_last); + + $data = [ + 'subject' => __('reminder.subject')." | ID: ".$status, + 'message' => $message, + 'message_last' => $message_last, + 'url' => route('user_membership'), + 'button' => $button, + ]; + //dump($data); + $sender = User::find(1); + $customer_mail = UserMessage::create([ + 'user_id' => $user->id, + 'send_user_id' => $sender->id, + 'email' => $user->email, + 'subject' => $data['subject'], + 'message' => $data['message']." ".$data['message_last'], + ]); + try{ + if($status >= 34){ + Mail::to($user->email)->bcc(config('app.info_mail'))->send(new MailCustomMessage($user, $data, $sender, false)); + }else{ + Mail::to($user->email)->send(new MailCustomMessage($user, $data, $sender, false)); + } + } + catch(\Exception $e){ + \Log::channel('cron')->error('Mail Error: '.$e->getMessage()); + // Never reached + $customer_mail->fail = true; + $customer_mail->error = $e->getMessage(); + $customer_mail->save(); + return 0; + } + $customer_mail->send = true; + $customer_mail->sent_at = now(); + $customer_mail->save(); + return 1; + } + +} + + + /*public function checkConfirmation() + { + $now = date('Y-m-d H:i:s'); + $next = date('Y-m-d H:i:s', strtotime('+3 week')); + + $users = User::where('confirmed', '=', 0)->where('confirmation_code_to', '<', $now)->get(); + + foreach ($users as $user) { + + //delete user + if ($user->confirmation_code_remider == 1) { + $this->userRepo->deleteUser($user); + + } + //send new remider + if ($user->confirmation_code_remider == 0) { + Mail::to($user->email)->bcc(config('app.info_mail'))->send(new MailVerifyAccount($user->confirmation_code, $user)); + $user->confirmation_code_to = $next; + $user->confirmation_code_remider = 1; + $user->save(); + } + } + return "TOSK"; + }*/ + diff --git a/app/Http/Controllers/Api/AuthController.php b/app/Http/Controllers/Api/AuthController.php index 5de8cf7..93b692b 100755 --- a/app/Http/Controllers/Api/AuthController.php +++ b/app/Http/Controllers/Api/AuthController.php @@ -20,6 +20,11 @@ class AuthController extends Controller public $successStatus = 200; + public function test(Request $request) + { + var_dump("testing"); + die("test"); + } public function login(Request $request) { diff --git a/app/Http/Controllers/LeadController.php b/app/Http/Controllers/LeadController.php index c4101b0..c3e7ec5 100755 --- a/app/Http/Controllers/LeadController.php +++ b/app/Http/Controllers/LeadController.php @@ -230,7 +230,9 @@ class LeadController extends Controller if(!$user->account->m_last_name){ $validator->errors()->add('m_last_name', __('Vertriebspartner hat keinen Nachnamen.')); } - + if(!$user->m_level){ + $validator->errors()->add('m_level', __('Vertriebspartner hat keine Rolle')); + } if ($validator->errors()->count()) { return back()->withErrors($validator)->withRequest(Request::all()); } @@ -248,14 +250,8 @@ class LeadController extends Controller $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(); + //set wizard to payments / activate + $this->activeAccountPayment($user); //mail with code to user? try { @@ -274,8 +270,6 @@ class LeadController extends Controller } if($action === 'incomplete'){ - - //reset release $confirmation_code = UserService::createConfirmationCode(); $user->confirmation_code = $confirmation_code; @@ -303,9 +297,58 @@ class LeadController extends Controller } UserHistory::create(['user_id' => $user->id, 'action'=>'released_incomplete', 'status'=>0]); \Session()->flash('alert-success', "E-Mail an Vertriebspartner gesendet."); + } + if($action === 'reset_switch'){ + $user->wizard = 4; + $user->save(); + UserHistory::create(['user_id' => $user->id, 'action'=>'reset_switch', 'status'=>0]); + \Session()->flash('alert-success', "Vertriebspartner zurückgesetzt!"); + } + if($action === 'unlock'){ + $validator = Validator::make(Request::all(), []); + /*if(!$user->m_sponsor){ + $validator->errors()->add('m_sponsor', __('Vertriebspartner hat keinen Sponsor.')); + }*/ + if(!$user->account->m_first_name){ + $validator->errors()->add('m_first_name', __('Vertriebspartner hat keinen Vornamen.')); + } + if(!$user->account->m_last_name){ + $validator->errors()->add('m_last_name', __('Vertriebspartner hat keinen Nachnamen.')); + } + if(!$user->m_level){ + $validator->errors()->add('m_level', __('Vertriebspartner hat keine Rolle')); + } + + if ($validator->errors()->count()) { + return back()->withErrors($validator)->withRequest(Request::all()); + } + if(!$user->account->m_account){ + $user->account->m_account = UserAccount::withTrashed()->max('m_account') +1; + $user->account->save(); + } + + //set wizard to payments / activate + $this->activeAccountPayment($user); + + //mail with code to user? + try { + Mail::to($user->email)->bcc(config('app.info_mail'))->send(new MailAccountActive($user)); + } + catch(\Exception $e){ + SysLog::action('unlock', 'admin_lead', 5) + ->setUserId($user->id) + ->setModel($user->id, User::class) + ->setMessage('Error send released E-Mail: '.$e->getMessage()) + ->save(); + } + + UserHistory::create(['user_id' => $user->id, 'action'=>'unlock_completed', 'status'=>0]); + \Session()->flash('alert-success', "Vertriebspartner erneut freigeschaltet!"); } return redirect(route('admin_lead_edit', [$user->id])); + + } @@ -350,7 +393,6 @@ class LeadController extends Controller return back(); } - public function getLeads() { @@ -409,4 +451,30 @@ class LeadController extends Controller ->rawColumns(['id', 'confirmed', 'active', 'agreement', 'payment_account']) ->make(true); } + + private function activeAccountPayment($user){ + + if($user->user_level){ + if($user->user_level->payment_year){ + //if true = 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(); + }else{ + //if false = no payments for 1 year + $user->wizard = 100; + $user->payment_account = \Carbon::now()->modify('1 year'); + $user->active = 1; + $user->active_date = now(); + $user->confirmation_code = null; + $user->confirmation_code_to = null; + $user->confirmation_code_remider = 0; + $user->save(); + } + } + } } \ No newline at end of file diff --git a/app/Http/Controllers/MembershipController.php b/app/Http/Controllers/MembershipController.php index 8678b10..2ac6762 100755 --- a/app/Http/Controllers/MembershipController.php +++ b/app/Http/Controllers/MembershipController.php @@ -51,7 +51,7 @@ class MembershipController extends Controller 'userHistoryPaymentOrder' => $userHistoryPaymentOrder, 'userHistoryUpgradeOrder' => $userHistoryUpgradeOrder, 'userHistoryDeleteMembership' => $userHistoryDeleteMembership, - 'user_levels' => UserLevel::where('active', true)->get(), + 'user_levels' => UserLevel::where('active', true)->orderBy('pos')->get(), ]; return view('user.membership.index', $data); diff --git a/app/Http/Controllers/User/OrderController.php b/app/Http/Controllers/User/OrderController.php index 0c82029..aa34ed1 100755 --- a/app/Http/Controllers/User/OrderController.php +++ b/app/Http/Controllers/User/OrderController.php @@ -167,21 +167,24 @@ class OrderController extends Controller $data = Request::all(); $user = User::find(Auth::user()->id); + $rules = array( 'shipping_salutation' => 'required', - 'shipping_firstname'=>'required', - 'shipping_lastname'=>'required', - 'shipping_address'=>'required', - 'shipping_zipcode'=>'required', + 'shipping_firstname' => 'required', + 'shipping_lastname' => 'required', + 'shipping_address' => 'required', + 'shipping_zipcode' => 'required', 'shipping_city' => 'required', 'shipping_state' => 'required', ); + $validator = Validator::make(Request::all(), $rules); if ($validator->fails()) { return back()->withErrors($validator)->withInput(Request::all()); } - if(Yard::instance('shopping')->getNumComp() > 0){ + + if(Yard::instance('shopping')->getNumComp() > 0){ if(!isset($data['switchers-comp-product'])){ $validator->errors()->add('switchers-comp-product', __('Bitte wähle ein Kompensationsprodukt aus')); }else{ @@ -198,9 +201,12 @@ class OrderController extends Controller } } - /*do { + /* + do { $identifier = Util::getToken(); - } while( ShoppingInstance::where('identifier', $identifier)->count() );*/ + } while( ShoppingInstance::where('identifier', $identifier)->count() ); + */ + $identifier = Util::getToken(); $data['is_from'] = 'user_order'; $data['is_for'] = $for; @@ -219,7 +225,6 @@ class OrderController extends Controller 'country_id' => Yard::instance('shopping')->getShippingCountryId(), 'shopping_data' => $data, 'back' => url()->previous(), - ]); Yard::instance('shopping')->store($identifier); */ @@ -301,7 +306,6 @@ class OrderController extends Controller return \DataTables::eloquent($query) ->addColumn('product', function (Product $product) { - $cartItem = Yard::instance('shopping')->getCartItemByProduct($product->id); $qty = isset($cartItem->qty) ? $cartItem->qty : 0; $rowId = isset($cartItem->rowId) ? $cartItem->rowId : ''; @@ -318,7 +322,6 @@ class OrderController extends Controller '; }) /* - ->addColumn('add_card', function (Product $product) { return ' + + + + + +
+
+

Inhalte

+
+
+ + {!! Form::textarea('settings[partner_gs_contract_de][val]', \App\Models\Setting::getContentBySlug('partner_gs_contract_de'), array('class'=>'form-control', 'rows'=>10)) !!} + {{ Form::hidden('settings[partner_gs_contract_de][type]', 'full_text') }} +
- + {!! Form::close() !!} @endsection diff --git a/resources/views/dashboard.blade.php b/resources/views/dashboard.blade.php index a6d18b7..ba06811 100755 --- a/resources/views/dashboard.blade.php +++ b/resources/views/dashboard.blade.php @@ -149,9 +149,11 @@
@if($user->isActiveAccount() ) -
+
- {{__('Vertriebspartner-Mitgliedschaft aktiv')}} {{__('bis zum:')}} {{ $user->getPaymentAccountDateFormat() }}
+ {{__('Vertriebspartner-Mitgliedschaft aktiv')}} {{__('bis zum:')}} {{ $user->getPaymentAccountDateFormat() }} +
+

automatische Vertragsverlängerung am {{ $user->nextRenewalAccount() }}


{{__('Aktive Rolle')}}: @@ -258,13 +260,9 @@ @endif

@if($user->active == 1) - @if($user->files->count()) - @foreach($user->files()->whereIdentifier('contract')->get() as $file) - - @endforeach - @endif + @endif @@ -332,4 +330,25 @@
+ + + + + + + @endsection diff --git a/resources/views/layouts/app.blade.php b/resources/views/layouts/app.blade.php index fc6e8d4..a385fef 100644 --- a/resources/views/layouts/app.blade.php +++ b/resources/views/layouts/app.blade.php @@ -13,8 +13,7 @@ - - + diff --git a/resources/views/layouts/auth.blade.php b/resources/views/layouts/auth.blade.php index f60bcaa..b3020a2 100644 --- a/resources/views/layouts/auth.blade.php +++ b/resources/views/layouts/auth.blade.php @@ -12,7 +12,7 @@ - + diff --git a/resources/views/user/checkout/checkout.blade.php b/resources/views/user/checkout/checkout.blade.php index 03ffa33..c4f7bcb 100644 --- a/resources/views/user/checkout/checkout.blade.php +++ b/resources/views/user/checkout/checkout.blade.php @@ -786,7 +786,7 @@
- @if(Yard::instance('shopping')->getPaymentCredit()) + @if(Yard::instance('shopping')->reducePaymentCredit())
{{ Yard::instance('shopping')->totalWithShippingWithoutCredit() }} € Summe: diff --git a/resources/views/user/data_confirm.blade.php b/resources/views/user/data_confirm.blade.php index 586bbd1..9040ef8 100644 --- a/resources/views/user/data_confirm.blade.php +++ b/resources/views/user/data_confirm.blade.php @@ -20,7 +20,8 @@
- {!! File::get(public_path('pdf/gs_contract_de.php')); !!} + {{-- {!! File::get(public_path('pdf/gs_contract_de.php')); !!} --}} + {!! \App\Models\Setting::getContentBySlug('partner_gs_contract_de') !!}
diff --git a/resources/views/user/order/list.blade.php b/resources/views/user/order/list.blade.php index db268a9..d693b30 100644 --- a/resources/views/user/order/list.blade.php +++ b/resources/views/user/order/list.blade.php @@ -144,8 +144,7 @@
{!! Form::close() !!} - - +