register, Grundpreis

This commit is contained in:
Kevin Adametz 2020-04-01 15:35:11 +02:00
parent f06d2d15a5
commit 8e4bb0c2f6
32 changed files with 965 additions and 216 deletions

5
.env
View file

@ -64,4 +64,7 @@ MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}"
MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}"
MIVITA_RENEWAL_DAYS=29
MIVITA_ABO_BOOKING_DAYS=14
MIVITA_REMIND_FIRST_DAYS=21
MIVITA_REMIND_SEC_DAYS=14
MIVITA_ABO_BOOKING_DAYS=7
MIVITA_REMIND_LAST_DAYS=2

82
.idea/workspace.xml generated
View file

@ -2,52 +2,37 @@
<project version="4">
<component name="ChangeListManager">
<list default="true" id="2fbaac5f-25ba-4502-a970-cc14728d7d55" name="Default Changelist" comment="">
<change afterPath="$PROJECT_DIR$/app/Mail/MailCustomMessage.php" afterDir="false" />
<change afterPath="$PROJECT_DIR$/app/Services/UserService.php" afterDir="false" />
<change afterPath="$PROJECT_DIR$/public/pdf/mivita_contract_de.php" afterDir="false" />
<change afterPath="$PROJECT_DIR$/resources/lang/de/register.php" afterDir="false" />
<change afterPath="$PROJECT_DIR$/resources/lang/de/membership.php" afterDir="false" />
<change afterPath="$PROJECT_DIR$/resources/lang/de/reminder.php" afterDir="false" />
<change afterPath="$PROJECT_DIR$/resources/views/emails/custom.blade.php" afterDir="false" />
<change afterPath="$PROJECT_DIR$/resources/views/sys/admin/cronjobs.blade.php" afterDir="false" />
<change beforePath="$PROJECT_DIR$/.env" beforeDir="false" afterPath="$PROJECT_DIR$/.env" afterDir="false" />
<change beforePath="$PROJECT_DIR$/.idea/inspectionProfiles/Project_Default.xml" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/.idea/jsLinters/jshint.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/jsLinters/jshint.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/app/Http/Controllers/Api/PayoneController.php" beforeDir="false" afterPath="$PROJECT_DIR$/app/Http/Controllers/Api/PayoneController.php" afterDir="false" />
<change beforePath="$PROJECT_DIR$/app/Http/Controllers/CronController.php" beforeDir="false" afterPath="$PROJECT_DIR$/app/Http/Controllers/CronController.php" afterDir="false" />
<change beforePath="$PROJECT_DIR$/app/Http/Controllers/LeadController.php" beforeDir="false" afterPath="$PROJECT_DIR$/app/Http/Controllers/LeadController.php" afterDir="false" />
<change beforePath="$PROJECT_DIR$/app/Http/Controllers/Pay/PayoneController.php" beforeDir="false" afterPath="$PROJECT_DIR$/app/Http/Controllers/Pay/PayoneController.php" afterDir="false" />
<change beforePath="$PROJECT_DIR$/app/Http/Controllers/Sys/AdminToolsController.php" beforeDir="false" afterPath="$PROJECT_DIR$/app/Http/Controllers/Sys/AdminToolsController.php" afterDir="false" />
<change beforePath="$PROJECT_DIR$/app/Http/Controllers/Web/CheckoutController.php" beforeDir="false" afterPath="$PROJECT_DIR$/app/Http/Controllers/Web/CheckoutController.php" afterDir="false" />
<change beforePath="$PROJECT_DIR$/app/Http/Controllers/Web/RegisterController.php" beforeDir="false" afterPath="$PROJECT_DIR$/app/Http/Controllers/Web/RegisterController.php" afterDir="false" />
<change beforePath="$PROJECT_DIR$/app/Http/Controllers/WizardController.php" beforeDir="false" afterPath="$PROJECT_DIR$/app/Http/Controllers/WizardController.php" afterDir="false" />
<change beforePath="$PROJECT_DIR$/app/Mail/MailReleaseAccount.php" beforeDir="false" afterPath="$PROJECT_DIR$/app/Mail/MailReleaseAccount.php" afterDir="false" />
<change beforePath="$PROJECT_DIR$/app/Models/UserAccount.php" beforeDir="false" afterPath="$PROJECT_DIR$/app/Models/UserAccount.php" afterDir="false" />
<change beforePath="$PROJECT_DIR$/app/Mail/MailCustomMessage.php" beforeDir="false" afterPath="$PROJECT_DIR$/app/Mail/MailCustomMessage.php" afterDir="false" />
<change beforePath="$PROJECT_DIR$/app/Models/Product.php" beforeDir="false" afterPath="$PROJECT_DIR$/app/Models/Product.php" afterDir="false" />
<change beforePath="$PROJECT_DIR$/app/Models/UserHistory.php" beforeDir="false" afterPath="$PROJECT_DIR$/app/Models/UserHistory.php" afterDir="false" />
<change beforePath="$PROJECT_DIR$/app/Services/Util.php" beforeDir="false" afterPath="$PROJECT_DIR$/app/Services/Util.php" afterDir="false" />
<change beforePath="$PROJECT_DIR$/config/app.php" beforeDir="false" afterPath="$PROJECT_DIR$/config/app.php" afterDir="false" />
<change beforePath="$PROJECT_DIR$/database/migrations/2019_02_29_170559_create_user_accounts_table.php" beforeDir="false" afterPath="$PROJECT_DIR$/database/migrations/2019_02_29_170559_create_user_accounts_table.php" afterDir="false" />
<change beforePath="$PROJECT_DIR$/public/js/custom.js" beforeDir="false" afterPath="$PROJECT_DIR$/public/js/custom.js" afterDir="false" />
<change beforePath="$PROJECT_DIR$/resources/lang/de.json" beforeDir="false" afterPath="$PROJECT_DIR$/resources/lang/de.json" afterDir="false" />
<change beforePath="$PROJECT_DIR$/app/User.php" beforeDir="false" afterPath="$PROJECT_DIR$/app/User.php" afterDir="false" />
<change beforePath="$PROJECT_DIR$/config/logging.php" beforeDir="false" afterPath="$PROJECT_DIR$/config/logging.php" afterDir="false" />
<change beforePath="$PROJECT_DIR$/config/mivita.php" beforeDir="false" afterPath="$PROJECT_DIR$/config/mivita.php" afterDir="false" />
<change beforePath="$PROJECT_DIR$/database/migrations/2018_10_21_164001_create_products_table.php" beforeDir="false" afterPath="$PROJECT_DIR$/database/migrations/2018_10_21_164001_create_products_table.php" afterDir="false" />
<change beforePath="$PROJECT_DIR$/resources/lang/de/email.php" beforeDir="false" afterPath="$PROJECT_DIR$/resources/lang/de/email.php" afterDir="false" />
<change beforePath="$PROJECT_DIR$/resources/lang/de/payment.php" beforeDir="false" afterPath="$PROJECT_DIR$/resources/lang/de/payment.php" afterDir="false" />
<change beforePath="$PROJECT_DIR$/resources/views/admin/country/form.blade.php" beforeDir="false" afterPath="$PROJECT_DIR$/resources/views/admin/country/form.blade.php" afterDir="false" />
<change beforePath="$PROJECT_DIR$/resources/views/admin/lead/edit.blade.php" beforeDir="false" afterPath="$PROJECT_DIR$/resources/views/admin/lead/edit.blade.php" afterDir="false" />
<change beforePath="$PROJECT_DIR$/resources/views/admin/lead/m_register_data.blade.php" beforeDir="false" afterPath="$PROJECT_DIR$/resources/views/admin/lead/m_register_data.blade.php" afterDir="false" />
<change beforePath="$PROJECT_DIR$/resources/views/admin/product/form.blade.php" beforeDir="false" afterPath="$PROJECT_DIR$/resources/views/admin/product/form.blade.php" afterDir="false" />
<change beforePath="$PROJECT_DIR$/resources/views/admin/product/index.blade.php" beforeDir="false" afterPath="$PROJECT_DIR$/resources/views/admin/product/index.blade.php" afterDir="false" />
<change beforePath="$PROJECT_DIR$/resources/views/emails/auth.blade.php" beforeDir="false" afterPath="$PROJECT_DIR$/resources/views/emails/auth.blade.php" afterDir="false" />
<change beforePath="$PROJECT_DIR$/resources/views/home.blade.php" beforeDir="false" afterPath="$PROJECT_DIR$/resources/views/home.blade.php" afterDir="false" />
<change beforePath="$PROJECT_DIR$/resources/views/layouts/application.blade.php" beforeDir="false" afterPath="$PROJECT_DIR$/resources/views/layouts/application.blade.php" afterDir="false" />
<change beforePath="$PROJECT_DIR$/resources/views/user/data_confirm.blade.php" beforeDir="false" afterPath="$PROJECT_DIR$/resources/views/user/data_confirm.blade.php" afterDir="false" />
<change beforePath="$PROJECT_DIR$/resources/views/user/form.blade.php" beforeDir="false" afterPath="$PROJECT_DIR$/resources/views/user/form.blade.php" afterDir="false" />
<change beforePath="$PROJECT_DIR$/resources/views/layouts/includes/layout-sidenav.blade.php" beforeDir="false" afterPath="$PROJECT_DIR$/resources/views/layouts/includes/layout-sidenav.blade.php" afterDir="false" />
<change beforePath="$PROJECT_DIR$/resources/views/user/membership/_abo_options.blade.php" beforeDir="false" afterPath="$PROJECT_DIR$/resources/views/user/membership/_abo_options.blade.php" afterDir="false" />
<change beforePath="$PROJECT_DIR$/resources/views/user/membership/_payment.blade.php" beforeDir="false" afterPath="$PROJECT_DIR$/resources/views/user/membership/_payment.blade.php" afterDir="false" />
<change beforePath="$PROJECT_DIR$/resources/views/user/membership/_payment_order.blade.php" beforeDir="false" afterPath="$PROJECT_DIR$/resources/views/user/membership/_payment_order.blade.php" afterDir="false" />
<change beforePath="$PROJECT_DIR$/resources/views/user/membership/index.blade.php" beforeDir="false" afterPath="$PROJECT_DIR$/resources/views/user/membership/index.blade.php" afterDir="false" />
<change beforePath="$PROJECT_DIR$/resources/views/user/user_form.blade.php" beforeDir="false" afterPath="$PROJECT_DIR$/resources/views/user/user_form.blade.php" afterDir="false" />
<change beforePath="$PROJECT_DIR$/resources/views/user/user_new_form.blade.php" beforeDir="false" afterPath="$PROJECT_DIR$/resources/views/user/user_new_form.blade.php" afterDir="false" />
<change beforePath="$PROJECT_DIR$/resources/views/user/wizard/_payment.blade.php" beforeDir="false" afterPath="$PROJECT_DIR$/resources/views/user/wizard/_payment.blade.php" afterDir="false" />
<change beforePath="$PROJECT_DIR$/resources/views/user/wizard/create_release.blade.php" beforeDir="false" afterPath="$PROJECT_DIR$/resources/views/user/wizard/create_release.blade.php" afterDir="false" />
<change beforePath="$PROJECT_DIR$/resources/views/user/wizard/register.blade.php" beforeDir="false" afterPath="$PROJECT_DIR$/resources/views/user/wizard/register.blade.php" afterDir="false" />
<change beforePath="$PROJECT_DIR$/resources/views/user/wizard/register_release.blade.php" beforeDir="false" afterPath="$PROJECT_DIR$/resources/views/user/wizard/register_release.blade.php" afterDir="false" />
<change beforePath="$PROJECT_DIR$/resources/views/web/layouts/includes/footer.blade.php" beforeDir="false" afterPath="$PROJECT_DIR$/resources/views/web/layouts/includes/footer.blade.php" afterDir="false" />
<change beforePath="$PROJECT_DIR$/resources/views/web/templates/_content_contact.blade.php" beforeDir="false" afterPath="$PROJECT_DIR$/resources/views/web/templates/_content_contact.blade.php" afterDir="false" />
<change beforePath="$PROJECT_DIR$/resources/views/web/templates/checkout-final.blade.php" beforeDir="false" afterPath="$PROJECT_DIR$/resources/views/web/templates/checkout-final.blade.php" afterDir="false" />
<change beforePath="$PROJECT_DIR$/resources/views/web/templates/checkout.blade.php" beforeDir="false" afterPath="$PROJECT_DIR$/resources/views/web/templates/checkout.blade.php" afterDir="false" />
<change beforePath="$PROJECT_DIR$/resources/views/web/templates/registrierung.blade.php" beforeDir="false" afterPath="$PROJECT_DIR$/resources/views/web/templates/registrierung.blade.php" afterDir="false" />
<change beforePath="$PROJECT_DIR$/resources/views/web/templates/registrierung_finish.blade.php" beforeDir="false" afterPath="$PROJECT_DIR$/resources/views/web/templates/registrierung_finish.blade.php" afterDir="false" />
<change beforePath="$PROJECT_DIR$/resources/views/web/user/layouts/includes/footer.blade.php" beforeDir="false" afterPath="$PROJECT_DIR$/resources/views/web/user/layouts/includes/footer.blade.php" afterDir="false" />
<change beforePath="$PROJECT_DIR$/routes/web.php" beforeDir="false" afterPath="$PROJECT_DIR$/routes/web.php" afterDir="false" />
</list>
<option name="SHOW_DIALOG" value="false" />
@ -270,13 +255,6 @@
<property name="settings.editor.selected.configurable" value="reference.webide.settings.project.settings.php.composer" />
</component>
<component name="RecentsManager">
<key name="CopyFile.RECENT_KEYS">
<recent name="$PROJECT_DIR$/resources/lang/de" />
<recent name="$PROJECT_DIR$/app/Mail" />
<recent name="$PROJECT_DIR$/resources/views/user/membership" />
<recent name="$PROJECT_DIR$/config" />
<recent name="$PROJECT_DIR$/resources/views/user/members" />
</key>
<key name="MoveFile.RECENT_KEYS">
<recent name="$PROJECT_DIR$/public/vendor/libs/dropzone" />
<recent name="$PROJECT_DIR$/public/vendor/libs" />
@ -284,6 +262,13 @@
<recent name="$PROJECT_DIR$/resources/views/admin/lead" />
<recent name="$PROJECT_DIR$/public/download" />
</key>
<key name="CopyFile.RECENT_KEYS">
<recent name="$PROJECT_DIR$/resources/lang/de" />
<recent name="$PROJECT_DIR$/resources/views/emails" />
<recent name="$PROJECT_DIR$/resources/views/sys/admin" />
<recent name="$PROJECT_DIR$/app/Mail" />
<recent name="$PROJECT_DIR$/resources/views/user/membership" />
</key>
</component>
<component name="RunManager">
<configuration default="true" type="ShConfigurationType">
@ -440,6 +425,11 @@
<workItem from="1584782149779" duration="14772000" />
<workItem from="1584954914592" duration="54000" />
<workItem from="1584965547046" duration="694000" />
<workItem from="1585396827913" duration="1986000" />
<workItem from="1585400638388" duration="9592000" />
<workItem from="1585576417290" duration="2940000" />
<workItem from="1585666412873" duration="6324000" />
<workItem from="1585729859738" duration="13087000" />
</task>
<servers />
</component>
@ -482,11 +472,12 @@
</state>
<state x="968" y="472" key="#com.intellij.openapi.updateSettings.impl.PluginUpdateInfoDialog/-2560.23.2560.1417/2560.-527.1440.2537/0.23.2560.1417@0.23.2560.1417" timestamp="1581691507125" />
<state x="968" y="472" key="#com.intellij.openapi.updateSettings.impl.PluginUpdateInfoDialog/-2560.23.2560.1417/2560.-571.1440.2537/0.23.2560.1417@0.23.2560.1417" timestamp="1578493681405" />
<state x="1019" y="499" key="#com.jetbrains.php.actions.copyPaste.importReferences.PhpImportReferencesDialog" timestamp="1584797806264">
<state x="1019" y="499" key="#com.jetbrains.php.actions.copyPaste.importReferences.PhpImportReferencesDialog" timestamp="1585733837456">
<screen x="0" y="23" width="2560" height="1417" />
</state>
<state x="1019" y="499" key="#com.jetbrains.php.actions.copyPaste.importReferences.PhpImportReferencesDialog/-2560.23.2560.1417/2560.-527.1440.2537/0.23.2560.1417@0.23.2560.1417" timestamp="1584797806264" />
<state x="1019" y="499" key="#com.jetbrains.php.actions.copyPaste.importReferences.PhpImportReferencesDialog/-2560.23.2560.1417/2560.-571.1440.2537/0.23.2560.1417@0.23.2560.1417" timestamp="1578836311908" />
<state x="1019" y="499" key="#com.jetbrains.php.actions.copyPaste.importReferences.PhpImportReferencesDialog/2560.-493.1440.2537/-2560.23.2560.1417/0.23.2560.1417@0.23.2560.1417" timestamp="1585733837456" />
<state width="239" height="457" key="HiddenNamespacesPopup" timestamp="1583573337041">
<screen x="0" y="23" width="2560" height="1417" />
</state>
@ -495,20 +486,23 @@
<screen x="0" y="23" width="2560" height="1417" />
</state>
<state x="1143" y="547" key="com.intellij.database.view.ui.DbObjectDialog/-2560.23.2560.1417/2560.-527.1440.2537/0.23.2560.1417@0.23.2560.1417" timestamp="1583573350583" />
<state x="1064" y="650" key="com.intellij.openapi.vcs.update.UpdateOrStatusOptionsDialogupdate-v2" timestamp="1578063343693">
<state x="1064" y="650" key="com.intellij.openapi.vcs.update.UpdateOrStatusOptionsDialogupdate-v2" timestamp="1585407329042">
<screen x="0" y="23" width="2560" height="1417" />
</state>
<state x="1064" y="650" key="com.intellij.openapi.vcs.update.UpdateOrStatusOptionsDialogupdate-v2/-2560.23.2560.1417/2560.-571.1440.2537/0.23.2560.1417@0.23.2560.1417" timestamp="1578063343693" />
<state x="805" y="444" width="1115" height="793" key="find.popup" timestamp="1584965671326">
<state x="1064" y="650" key="com.intellij.openapi.vcs.update.UpdateOrStatusOptionsDialogupdate-v2/2560.-493.1440.2537/-2560.23.2560.1417/0.23.2560.1417@0.23.2560.1417" timestamp="1585407329042" />
<state x="863" y="438" width="1115" height="793" key="find.popup" timestamp="1585747938758">
<screen x="0" y="23" width="2560" height="1417" />
</state>
<state x="805" y="444" width="1115" height="793" key="find.popup/-2560.23.2560.1417/2560.-527.1440.2537/0.23.2560.1417@0.23.2560.1417" timestamp="1584965671326" />
<state x="926" y="497" width="683" height="486" key="find.popup/-2560.23.2560.1417/2560.-571.1440.2537/0.23.2560.1417@0.23.2560.1417" timestamp="1578504136004" />
<state x="945" y="377" width="670" height="676" key="search.everywhere.popup" timestamp="1583747941947">
<state x="863" y="438" width="1115" height="793" key="find.popup/2560.-493.1440.2537/-2560.23.2560.1417/0.23.2560.1417@0.23.2560.1417" timestamp="1585747938758" />
<state x="945" y="377" width="670" height="676" key="search.everywhere.popup" timestamp="1585408665805">
<screen x="0" y="23" width="2560" height="1417" />
</state>
<state x="945" y="377" width="670" height="676" key="search.everywhere.popup/-2560.23.2560.1417/2560.-527.1440.2537/0.23.2560.1417@0.23.2560.1417" timestamp="1583747941947" />
<state x="945" y="377" width="670" height="676" key="search.everywhere.popup/-2560.23.2560.1417/2560.-571.1440.2537/0.23.2560.1417@0.23.2560.1417" timestamp="1578504893896" />
<state x="945" y="377" width="670" height="676" key="search.everywhere.popup/2560.-493.1440.2537/-2560.23.2560.1417/0.23.2560.1417@0.23.2560.1417" timestamp="1585408665805" />
</component>
<component name="XDebuggerManager">
<breakpoint-manager>

View file

@ -141,11 +141,16 @@ class PayoneController extends Controller
foreach($shopping_order->shopping_order_items as $shopping_order_item){
if($shopping_order_item->product){
if($shopping_order_item->product->action){
$user = User::findOrFail($shopping_order->auth_user_id);
$user->save();
$send_link = true;
$date = date("Y-m-d H:i:s", strtotime("+1 years"));
//new date
$date = \Carbon::now()->modify('1 year');
if($user->payment_account && $user->daysActiveAccount()>0){
$date = \Carbon::parse($user->payment_account)->modify('1 year');
}
foreach ($shopping_order_item->product->action as $do){
if($shopping_order_item->product->getActionName($do) === 'payment_for_account'){
$user->payment_order_id = $shopping_order_item->product->id; //34
@ -167,7 +172,6 @@ class PayoneController extends Controller
}
$user->payment_shop = $user->payment_account; //same Date, is upgrade
$shopping_order->setUserHistoryValue(['status' => 9]);
}
$user->save();
}

View file

@ -2,9 +2,13 @@
namespace App\Http\Controllers;
use App\Mail\MailCustomMessage;
use App\Mail\MailVerifyAccount;
use App\Models\UserHistory;
use App\Models\UserMessage;
use App\Repositories\UserRepository;
use App\User;
use Carbon;
use Illuminate\Support\Facades\Mail;
@ -34,6 +38,15 @@ class CronController extends Controller
//Mail reminder
}
public function action($action = false, $key = false){
if($key !== 'key'){
abort(404);
}
if($action === 'check_payments_account'){
$this->checkPaymentsAccounts();
}
}
/**
* Show the application dashboard.
*
@ -61,10 +74,180 @@ class CronController extends Controller
$user->save();
}
}
die("okay");
}
public function checkPaymentsAccounts(){
/*RULES
reminders
> 21 remind_first_days = 31 reminder_first
> 21 remind_first_days + sepa = 32 reminder_first_sepa
> 14 remind_sec_days = 33 reminder_sec
> 2 remind_last_days = 34 reminder_last
> 0 deaktiv = 35 reminder_deaktiv
> 0 deaktiv + sepa = 36 reminder_deaktiv_sepa
== 7 abo_booking_days + sepa + cron = 37 reminder_collect_sepa
*/
//max Date for reminder
$renewalDate = Carbon::now()->modify('+'.(config('mivita.remind_first_days')+1).' days');
dump($renewalDate);
$users = User::where('payment_account', '!=', NULL)
->where('active', '=', 1)
->where('blocked', '!=', 1)
->where('payment_account', '<', $renewalDate)
->get();
$user = User::find(2);
/* $this->checkReminderPayments($user);
dump($user->daysActiveAccount());
dump($user->email." | ".$user->getPaymentAccountDateFormat());
die();*/
foreach ($users as $user){
//$this->checkReminderPayments($user);
// dump($user->nextRenewalAccount());
//$userHistoryWizardPayment = UserHistory::whereUserId($user->id)->whereAction('wizard_payment')->get()->last();
//UserHistory::create(['user_id' => $user->id, 'action'=>'released_completed', 'status'=>0]);
dump($user->daysActiveAccount());
dump($user->email." | ".$user->getPaymentAccountDateFormat());
}
die("");
}
private function checkReminderPayments(User $user){
$isSend = $this->checkIsReminderSend($user, 31);
$isSend = $this->checkIsReminderSend($user, 32);
$isSend = $this->checkIsReminderSend($user, 33);
$isSend = $this->checkIsReminderSend($user, 34);
$isSend = $this->checkIsReminderSend($user, 35);
$isSend = $this->checkIsReminderSend($user, 36);
return ;
//35 reminder_deaktiv, 36 reminder_deaktiv_sepa
if(!$user->isActiveAccount()){
if($user->isAboOption()){
$isSend = $this->checkIsReminderSend($user, 35);
return $isSend;
}
$isSend = $this->checkIsReminderSend($user, 36);
return $isSend;
}
//34 reminder_last
if($user->daysActiveAccount() <= config('mivita.remind_last_days')){
$isSend = $this->checkIsReminderSend($user, 34);
return $isSend;
}
//33 reminder_sec
if($user->daysActiveAccount() <= config('mivita.remind_sec_days')){
if(!$user->isAboOption()){
$isSend = $this->checkIsReminderSend($user, 33);
return $isSend;
}
}
//31 reminder_first, 32 reminder_first_sepa
if($user->daysActiveAccount() > config('mivita.remind_sec_days')){
if($user->isAboOption()){
$isSend = $this->checkIsReminderSend($user, 32);
return $isSend;
}
$isSend = $this->checkIsReminderSend($user, 31);
return $isSend;
}
}
private function checkIsReminderSend(User $user, $status){
$isSend = UserHistory::whereUserId($user->id)
->whereAction('reminder_payments')
->whereIdentifier($user->payment_account)
->whereStatus($status)
->get()->last();
if($isSend){
// return true;
}
$referenz = $this->sendReminderMail($user, $status);
//is not sent create
UserHistory::create(['user_id' => $user->id, 'action'=>'reminder_payments', 'referenz'=>$referenz, 'identifier'=>$user->payment_account, 'status'=>$status]);
return false;
}
private function sendReminderMail(User $user, $status){
$days = $user->daysActiveAccount();
if($days < 0){
$days = $days*-1;
}
$pay_date = Carbon::parse($user->payment_account)->modify('- '.config('mivita.abo_booking_days').' days')->format('d.m.Y');
$datetime = $user->getPaymentAccountDateFormat();
$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{
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;
}
}

View file

@ -277,7 +277,7 @@ class LeadController extends Controller
'message' => $input['account_incomplete_message'],
'confirmation_code' => $confirmation_code,
];
Mail::to($user->email)->send(new MailCustomMessage($user, $data, \Auth::user()));
Mail::to($user->email)->send(new MailCustomMessage($user, $data, \Auth::user(), true));
UserHistory::create(['user_id' => $user->id, 'action'=>'released_incomplete', 'status'=>0]);
\Session()->flash('alert-success', "E-Mail an Berater gesendet.");

View file

@ -71,6 +71,7 @@ class PayoneController extends Controller
public function init($shopping_user, $shopping_order){
$this->shopping_user = $shopping_user;
$this->shopping_order = $shopping_order;
$this->default['mode'] = $this->shopping_order->mode;
}
public function getShoppingPayment(){
@ -328,7 +329,6 @@ class PayoneController extends Controller
];
$request = array_merge($this->default, $this->prepayment);
return Payone::sendRequest($request);
}
@ -348,9 +348,8 @@ class PayoneController extends Controller
// "language" => 'de',
];
$request = array_merge($this->default, $this->personalData, $this->deliveryData, $this->method, $this->prepayment, $this->urls);
// dd($request);
$request = array_merge($this->default, $this->personalData, $this->deliveryData, $this->method, $this->prepayment, $this->urls);
return Payone::sendRequest($request);
}

View file

@ -32,6 +32,38 @@ class AdminToolsController extends Controller
dd('index');
}
/**
* @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
*/
public function cronjobs()
{
//$user_shops = UserShop::all();
$text = "";
$values = [
'check_payments_account' => route('cron_jobs_action', ['check_payments_account', 'key'])
];
$data = [
'values' => $values,
'text' => $text,
];
return view('sys.admin.cronjobs', $data);
}
/**
* @param Request $request
* @return \Illuminate\Contracts\View\Factory|\Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector|\Illuminate\View\View
*/
public function cronjobsStore()
{
$data = Input::all();
\Session()->flash('alert-save', true);
return back();
}
/**
* @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
*/
@ -75,10 +107,8 @@ class AdminToolsController extends Controller
public function domainSSLStore()
{
$data = Input::all();
\Session()->flash('alert-save', true);
return back();
}

View file

@ -136,6 +136,7 @@ class CheckoutController extends Controller
//need precheck the card
if(Input::get('payment_method') === 'cc'){
$pay = new PayoneController();
$pay->init($shopping_user, $shopping_order);
$ret['cc'] = $pay->checkCreditCard($data);
if($ret['cc']['status'] === 'ERROR' || $ret['cc']['status'] === 'INVALID'){
/* PaymentTransaction::create([
@ -163,6 +164,7 @@ class CheckoutController extends Controller
//need precheck the card
if(Input::get('payment_method') === 'elv' && is_null(Input::get('mandate_identification'))){
$pay = new PayoneController();
$pay->init($shopping_user, $shopping_order);
$amount = (int) (float) Yard::instance('shopping')->totalWithShipping(2, '.', ',') *100;
$ret['elv'] = $pay->checkBankAccount($data, $amount, 'EUR', $shopping_user);

View file

@ -7,6 +7,7 @@ use App\Http\Controllers\Controller;
use App\Mail\MailContact;
use App\Mail\MailVerifyAccount;
use App\Repositories\UserRepository;
use App\Services\UserService;
use App\User;
use GuzzleHttp\Client;
use Input;

View file

@ -400,7 +400,6 @@ class WizardController extends Controller
Yard::instance('shopping')->destroy();
$product = Product::find(Input::get('switchers-package-wizard'));
$showAboOptions = false;
if(Input::get('abo_options')){
$showAboOptions = true;
$user->abo_options = true;

View file

@ -17,15 +17,19 @@ class MailCustomMessage extends Mailable
protected $sender;
public $subject;
public $message;
public $message_last;
protected $save;
public function __construct(User $user, $data, $sender)
public function __construct(User $user, $data, $sender, $save = false)
{
$this->save = $save;
$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'] : '';
$this->message_last = isset($data['message_last']) ? $data['message_last'] : '';
}
@ -39,18 +43,17 @@ class MailCustomMessage extends Mailable
$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(),
]);
if($this->save){
UserMessage::create([
'user_id' => $this->user->id,
'send_user_id' => $this->sender->id,
'email' => $this->user->email,
'subject' => $this->subject,
'message' => $this->message." ".$this->message_last,
'send' => true,
'sent_at' => now(),
]);
}
$url = "";
$button = "";
if(isset($this->data['confirmation_code'])){
@ -58,11 +61,18 @@ class MailCustomMessage extends Mailable
$button = __('email.button_account');
}
return $this->view('emails.auth')->with([
if(isset($this->data['url'])){
$url =$this->data['url'];
$button = $this->data['button'];
}
return $this->view('emails.custom')->with([
'url' => $url,
'salutation' => $salutation,
'title' => $salutation,
'button' => $button,
'copy1line' => $this->message,
'content' => $this->message,
'content_last' => $this->message_last,
'copy2line' => __('email.copy2line'),
'copy3line' => __('email.copy3line'),
'greetings' => __('email.greetings'),
@ -70,4 +80,4 @@ class MailCustomMessage extends Mailable
]);
}
}
}

View file

@ -2,6 +2,7 @@
namespace App\Models;
use App\Services\Util;
use Cviebrock\EloquentSluggable\Sluggable;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
@ -104,11 +105,6 @@ class Product extends Model
upgrade # need upgrade_to_id set user->payment_order_id to the package in the payment api
*/
protected $identifiers_types = [
'show_upgrade' => 'Kann gepdatet werden',
'show_order' => 'Wird immer als Option angezeigt',
'upgrade' => 'Produktupgrade zu upgrade_to_id',
];
protected $table = 'products';
protected $casts = [
@ -138,6 +134,8 @@ class Product extends Model
'points',
'weight',
'contents',
'contents_total',
'unit',
'number',
'icons',
'description',
@ -152,12 +150,28 @@ class Product extends Model
'upgrade_to_id'
];
public $identifiers_types = [
'' => '-',
'show_upgrade' => 'Kann gepdatet werden',
'show_order' => 'Wird immer als Option angezeigt',
'upgrade' => 'Produktupgrade zur Upgrade to ID',
];
public $unitTypes = [
0 => '',
1 => 'ml',
2 => 'g',
3 => 'Liter',
4 => 'KG',
];
public $showATs = [
0 => 'nur User Shop',
1 => 'User + Berater Shop',
2 => 'nur Berater Shop',
3 => 'Registrierung Shop',
4 => 'Mitgliedschaft Berater',
0 => 'Nur Kunden Shop',
1 => 'Kunden + Berater Shop',
2 => 'Nur Berater Shop',
3 => 'Registrierung / Mitgliedschaft Berater',
4 => 'Nur Mitgliedschaft Berater',
5 => 'Onboarding Berater',
];
public $actions = [
@ -221,50 +235,63 @@ class Product extends Model
public function getFormattedPrice()
{
if(!isset($this->attributes['price'])){
return "";
}
if(\App::getLocale() == "en"){
return number_format($this->attributes['price'], 2, '.', ',');
}
return number_format($this->attributes['price'], 2, ',', '.');
return isset($this->attributes['price']) ? Util::formatNumber($this->attributes['price']) : "";
}
public function getFormattedPriceEk()
{
if(!isset($this->attributes['price_ek'])){
return "";
}
if(\App::getLocale() == "en"){
return number_format($this->attributes['price_ek'], 2, '.', ',');
}
return number_format($this->attributes['price_ek'], 2, ',', '.');
return isset($this->attributes['price_ek']) ? Util::formatNumber($this->attributes['price_ek']) : "";
}
public function getFormattedTax()
{
if(!isset($this->attributes['tax'])){
return "";
}
if(\App::getLocale() == "en"){
return number_format($this->attributes['tax'], 2, '.', ',');
}
return number_format($this->attributes['tax'], 2, ',', '.');
return isset($this->attributes['tax']) ? Util::formatNumber($this->attributes['tax']) : "";
}
public function getFormattedPriceOld()
{
if(!isset($this->attributes['price_old'])){
return "";
}
if(\App::getLocale() == "en"){
return number_format($this->attributes['price_old'], 2, '.', ',');
}
return number_format($this->attributes['price_old'], 2, ',', '.');
return isset($this->attributes['price_old']) ? Util::formatNumber($this->attributes['price_old']) : "";
}
public function getBasePriceFormattedFull(){
if($price = $this->getBasePrice()){
$unit = $this->attributes['unit'];
//ml g
if($unit === 1 || $unit === 2){
return Util::formatNumber($price) . ' € 100/'.$this->getUnitType();
}
//l kg
if($unit === 3 || $unit === 4){
return Util::formatNumber($price) . ' € 1/'.$this->getUnitType();
}
}
return "";
}
public function getBasePriceFormatted(){
if($price = $this->getBasePrice()){
return Util::formatNumber($price);
}
return "";
}
public function getBasePrice(){
if(isset($this->attributes['unit']) && isset($this->attributes['contents_total']) && $this->attributes['contents_total'] != 0){
$unit = $this->attributes['unit'];
//ml g
if($unit === 1 || $unit === 2){
return $this->attributes['price'] * 100 / $this->attributes['contents_total'];
}
//l kg
if($unit === 3 || $unit === 4){
return $this->attributes['price'] * 1000 / $this->attributes['contents_total'];
}
}
return "";
}
public function getUnitType(){
return isset($this->unitTypes[$this->unit]) ? $this->unitTypes[$this->unit] : '-';
}
public function setPosAttribute($value){
$this->attributes['pos'] = is_numeric($value) ? $value : null;

View file

@ -61,6 +61,14 @@ class UserHistory extends Model
21 => 'payment_not_found',
22 => 'checkout_cancel',
23 => 'checkout_error',
31 => 'reminder_first',
32 => 'reminder_first_sepa',
33 => 'reminder_sec',
34 => 'reminder_last',
35 => 'reminder_deaktiv',
36 => 'reminder_deaktiv_sepa',
37 => 'reminder_collect_sepa',
50 => 'delete_membership'
];
protected $status_colors = [

View file

@ -110,7 +110,7 @@ class Util
public static function getUserHistoryValue($key){
if($user_history = self::getUserHistory()) {
return $user_history->{$user_history};
return $user_history->{$key};
}
return null;
}

View file

@ -239,7 +239,9 @@ class User extends Authenticatable
public function isAboOption(){
return ($this->abo_options && $this->account && $this->account->payment_data) ? true : false;
}
public function isActiveAccount(){
return $this->payment_account ? Carbon::parse($this->payment_account)->gt(Carbon::now()) : false;
}
@ -251,15 +253,15 @@ class User extends Authenticatable
public function isRenewalAccount()
{
if ($this->payment_account) {
return Carbon::parse($this->payment_account)->modify('-'.config('mivita.renewal_days').' days')->lt(Carbon::now());
return Carbon::parse($this->payment_account)->modify('-'.(config('mivita.renewal_days')+1).' days')->lt(Carbon::now());
}
return false;
}
public function nextRenewalAccount(){
return $this->payment_account ? Carbon::parse($this->payment_account)->modify('-'.config('mivita.renewal_days').' days')->format(\Util::formatDateTimeDB()) : false ;
}
public function daysActiveAccount(){
return Carbon::now()->diffInDays(Carbon::parse($this->payment_account), false);
}

View file

@ -38,6 +38,10 @@ return [
'driver' => 'single',
'path' => storage_path('logs/payone.log'),
],
'cron' => [
'driver' => 'single',
'path' => storage_path('logs/corn.log'),
],
'stack' => [
'driver' => 'stack',
'channels' => ['single'],

View file

@ -4,7 +4,10 @@ return [
'renewal_days' => env('MIVITA_RENEWAL_DAYS', '29'),
'abo_booking_days' => env('MIVITA_ABO_BOOKING_DAYS', '14'),
'abo_booking_days' => env('MIVITA_ABO_BOOKING_DAYS', '7'),
'remind_first_days' => env('MIVITA_REMIND_FIRST_DAYS', '21'),
'remind_sec_days' => env('MIVITA_REMIND_SEC_DAYS', '14'),
'remind_last_days' => env('MIVITA_REMIND_LAST_DAYS', '2'),
];

View file

@ -36,6 +36,9 @@ class CreateProductsTable extends Migration
$table->string('contents')->nullable();
$table->unsignedInteger('contents_total')->nullable();
$table->unsignedTinyInteger('unit')->nullable();
$table->string('number')->nullable();
$table->string('icons')->nullable(); //as array cast

View file

@ -42,7 +42,7 @@
'status_copy1line' => 'Status zu Deiner Bestellung auf mivita.care',
'footer_copy1' => 'mivita e.K. | Leinfeld 2 | 87755 Kirchhaslach | Telefon: +49 (0) 8333 946 98 90 | Fax: +49 (0) 8333 7268 E-Mail: info@mivita.care',
'footer_copy2' => 'Geschäftsinhaber: Alois Ried | Registergericht: Memmingen | Registernummer: HRA 12236 | USt-ID-Nr.: DE 244162340',
'footer_copy3' => '© 2019 All Rights Reserved',
'footer_copy3' => '© 2020 All Rights Reserved',
'checkout_mail_hl1' => 'Du hast folgende Artikel bestellt:',
'checkout_mail_shipping' => 'Verpackungs- u. Versandkosten',
'checkout_mail_status_info' => 'Statusinfo:',

View file

@ -0,0 +1,17 @@
<?php
return array (
'home_hl' => 'Mitgliedschaft / Jahresbeitrag',
'home_copy_alert_31' => 'Deine Mitgliedschaft läuft zum :datetime aus',
'home_copy_last_31' => 'Es bleiben Dir jetzt noch entspannte :days Tage Zeit, Deine Mitgliedschaft zu verlängern. Solltest Du allerdings die Frist verstreichen lassen, wird Dein Account solange automatisch pausiert bis Du Deine Mitgliedschaft erneuerst.',
'home_copy_SEPA_32' => 'Da Du uns ein SEPA-Lastschrift-Mandat erteilt hast, brauchst Du nicht weiter aktiv zu werden. Entsprechend dieses Mandates werden wir den Rechnungsbetrag :price am :pay_date von Deinem Konto abbuchen.',
'home_copy_last_33' => 'Es bleiben Dir jetzt noch :days Tage Zeit, Deine Mitgliedschaft zu verlängern. Solltest Du allerdings die Frist verstreichen lassen, wird Dein Account solange automatisch pausiert bis Du Deine Mitgliedschaft erneuerst.',
'home_copy_SEPA_33' => 'Von Deinem SEPA-Lastschrift-Mandat, das du uns erteilt hast, konnten wir bisher den Rechnungsbetrag :price am :pay_date nicht abbuchen.',
'home_copy_last_34' => 'huiii... jetzt wird es aber Zeit! Deine Mitgliedschaft läuft bereits in :days Tagen aus, und zwar exakt am :datetime. Solltest Du allerdings die Frist verstreichen lassen, wird Dein Account solange automatisch pausiert bis Du Deine Mitgliedschaft erneuerst.',
'home_copy_alert_35' => 'Deine Mitgliedschaft läuft heute aus!',
'home_copy_last_35' => 'huiii... jetzt wird es aber Zeit! Deine Mitgliedschaft läuft bereits heute aus, und zwar exakt am :datetime. Solltest Du allerdings die Frist verstreichen lassen, wird Dein Account solange automatisch pausiert bis Du Deine Mitgliedschaft erneuerst.',
'home_copy_alert_36_today' => 'Dein Mitgliedschaft ist heute am :datetime ausgelaufen!',
'home_copy_alert_36' => 'Dein Mitgliedschaft ist vor :days Tagen am :datetime ausgelaufen!',
'home_copy_last_36' => 'wie angekündigt, haben wir Deinen Berater-Account pausiert, da Du Deine Mitgliedschaft nicht rechtzeitig verlängert hast. Wenn Du wieder von den Vorteilen und Features bei MIVITA profitieren möchtest, kannst Du Deinen Account jederzeit reaktivieren.',
'home_copy_SEPA_36' => 'Leider war es uns nicht möglich, den fälligen Betrag per SEPA-Lastschrift-Mandat für die Mitgliedsgebühr von Deinem angegebenen Konto einzuziehen.'
);

View file

@ -0,0 +1,62 @@
<?php
return array (
'subject' => 'Deine Mitgliedschaft bei mivita.care',
'button_31' => 'MITGLIEDSCHAFT VERLÄNGERN',
'copy_first_31' => '<p>wir wollten Dir jetzt schon mal rechtzeitig Bescheid geben, dass Deine Mitgliedschaft zum :datetime ausläuft. Zur Zeit hast Du keine automatisierte Verlängerung mit SEPA-Lastschrift eingestellt. Daher solltest Du jetzt aktiv werden und rechtzeitig verlängern, damit Du weiterhin</p>
<ul>
<li>Produkte von MIVITA beziehen kannst</li>
<li>Kunden über Deinen Onlineshop einkaufen können (optional)</li>
<li>Du von Vertriebspartnerumsätzen partizipieren kannst</li>
</ul>
<p>Aber alles gut - es bleiben Dir jetzt noch entspannte :days Tage Zeit, Deine Mitgliedschaft zu verlängern. Solltest Du allerdings die Frist verstreichen lassen, wird Dein Account solange automatisch pausiert bis Du Deine Mitgliedschaft erneuerst.</p>
<p>Wir senden Dir schon ganz bald eine weitere Erinnerung zu, aber dann hast Du es jetzt schon mal im Hinterkopf. Falls Du jetzt schon für den Anschluss um 1 Jahr verlängern möchtest, kannst Du das mit Klick auf den Button unten tun. Was weg ist, ist weg :) ...</p>',
'copy_last_31' => '',
'button_32' => 'MITGLIEDSCHAFT VERWALTEN',
'copy_first_32' => '<p>wir wollten Dir jetzt schon mal rechtzeitig Bescheid geben, dass Deine Mitgliedschaft zum :datetime automatisch verlängert wird. Da Du uns ein SEPA-Lastschrift-Mandat erteilt hast, brauchst Du nicht weiter aktiv zu werden. Entsprechend dieses Mandates werden wir den Rechnungsbetrag :price am :pay_date von Deinem Konto abbuchen.</p>
<p>Deine Mitgliedschaft verlängert sich im Anschluss um ein weiteres Jahr, damit Du weiterhin</p>
<ul>
<li>Produkte von MIVITA beziehen kannst</li>
<li>Kunden über Deinen Onlineshop einkaufen können (optional)</li>
<li>Du von Vertriebspartnerumsätzen partizipieren kannst</li>
</ul>
<p>Soweit so gut. Solltest Du allerdings die Mitgliedschaft beenden bzw. erstmal pausieren wollen, dann kannst Du das in Deinem Mitgliederbereich selber einstellen. Folge dazu einfach dem grünen Button unten.</p>
<p>Für den Fall, dass Du erstmal nicht verlängern möchtest, wird Dein Account solange pausiert bis Du Deine Mitgliedschaft erneuerst. Beachte aber bitte, dass alle Vorteile und Funktionen, vom vergünstigten Einkaufen bis hin zur Provisionsabrechnung ebenfalls pausieren.</p>',
'copy_last_32' => '',
'button_33' => 'MITGLIEDSCHAFT VERLÄNGERN',
'copy_first_33' => '<p>hier nochmal eine kurze Erinnerung, dass Deine Mitgliedschaft zum :datetime ausläuft. Zur Zeit hast Du keine automatisierte Verlängerung mit SEPA-Lastschrift eingestellt. Daher solltest Du jetzt aktiv werden und rechtzeitig verlängern, damit Du weiterhin</p>
<ul>
<li>Produkte von MIVITA beziehen kannst</li>
<li>Kunden über Deinen Onlineshop einkaufen können (optional)</li>
<li>Du von Vertriebspartnerumsätzen partizipieren kannst</li>
</ul>
<p>Aber alles gut - es bleiben Dir jetzt noch entspannte :days Tage Zeit, Deine Mitgliedschaft zu verlängern. Solltest Du allerdings die Frist verstreichen lassen, wird Dein Account solange automatisch pausiert bis Du Deine Mitgliedschaft erneuerst.</p>
<p>Wir senden Dir schon ganz bald eine weitere Erinnerung zu, aber dann hast Du es jetzt schon mal im Hinterkopf. Falls Du jetzt schon für den Anschluss um 1 Jahr verlängern möchtest, kannst Du das mit Klick auf den Button unten tun. Was weg ist, ist weg :) ...</p>',
'copy_last_33' => '',
'button_34' => 'MITGLIEDSCHAFT VERLÄNGERN',
'copy_first_34' => '<p>huiii... jetzt wird es aber Zeit! Deine Mitgliedschaft läuft bereits in :days Tagen aus, und zwar exakt am :datetime. Zur Zeit hast Du keine automatisierte Verlängerung mit SEPA-Lastschrift eingestellt. Daher solltest Du jetzt aktiv werden und Deine Mitgliedschaft verlängern, da Dein Account sonst pausiert.</p>
<p>Wenn Du weiterhin</p>
<ul>
<li>Produkte von MIVITA beziehen</li>
<li>einen Onlineshop nutzen (optional)</li>
<li>und von Vertriebspartnerumsätzen partizipieren möchtest</li>
</ul>
<p>solltest Du jetzt schnell handeln und Deine Mitgliedschaft verlängern:</p>',
'copy_last_34' => '',
'button_35' => 'MITGLIEDSCHAFT VERWALTEN',
'copy_first_35' => '<p>wie angekündigt, haben wir Deinen Berater-Account pausiert, da Du Deine Mitgliedschaft nicht rechtzeitig verlängert hast. Wenn Du wieder von den Vorteilen und Features bei MIVITA profitieren möchtest, kannst Du Deinen Account jederzeit reaktivieren.</p>
<p>Klick auf den Button, falls Du Änderungen an Deiner Mitgliedschaft vornehmen möchtest:</p>',
'copy_last_35' => '<p><b>Hinweis:</b><br>Auch wenn Dein Account pausiert, werden Dir vergangene bzw. noch offene Provisionen selbstverständlich im nächsten Zahlungslauf ausgezahlt.Solltest Du Deinen Account vollständig löschen wollen, dann schreibe bitte eine Email an info@mivita.care. Unser Berater-Service wird sich dann umgehend darum kümmern.</p>
<p>Wir hoffen, Dich ganz bald wieder als aktives Mitglied der MIVITA Family begrüßen zu dürfen.</p>',
'button_36' => 'MITGLIEDSCHAFT VERWALTEN',
'copy_first_36' => '<p>leider war es uns nicht möglich, den fälligen Betrag für die Mitgliedsgebühr von Deinem angegebenen Konto einzuziehen.</p>
<p>Wie angekündigt, haben wir daher heute Deinen Berater-Account pausiert, da Du Deine Mitgliedschaft damit nicht rechtzeitig verlängern konntest. Wenn Du wieder von den Vorteilen und Features bei MIVITA profitieren möchtest, kannst Du Deinen Account jederzeit auch über eine andere Zahlungsweise reaktivieren (z. B. Paypal, Kreditkarte, SOFORT Überweisung oder Vorauskasse).</p>
<p>Klick dazu einfach auf folgenden Button und nimm entsprechende Einstellungen in Deinem Berater-Account vor:</p>',
'copy_last_36' => '<p><b>Hinweis:</b><br>Auch wenn Dein Account pausiert, werden Dir vergangene bzw. noch offene Provisionen selbstverständlich im nächsten Zahlungslauf ausgezahlt.Solltest Du Deinen Account vollständig löschen wollen, dann schreibe bitte eine Email an info@mivita.care. Unser Berater-Service wird sich dann umgehend darum kümmern.</p>
<p>Wir hoffen, Dich ganz bald wieder als aktives Mitglied der MIVITA Family begrüßen zu dürfen.</p>',
'button_37' => 'MITGLIEDSCHAFT VERWALTEN',
'copy_first_37' => '<p>wie angekündigt, haben wir heute gemäß Deines SEPA-Lastschriftmandates den Einzug von :price für ein weiteres Jahr der Mitgliedschaft bei MIVITA veranlasst. Dieser Rechnungsbetrag wird in den nächsten Tagen von Deinem Konto abgebucht. Bitte beachte, dass die Verlängerung erst nach Zahlungseingang aktiv ist.</p>
<p>Falls Du in Zukunft Änderungen vornehmen möchtest, kannst Du alle Funktionen sowie die Mitgliedschaft in Deinem Berater-Account einstellen.</p>
<p>Folge dazu einfach dem unten stehenden Button:</p>',
'copy_last_37' => '',
);

View file

@ -13,54 +13,41 @@
{!! Form::checkbox('active', 1, $product->active, ['class'=>'custom-control-input']) !!}
<span class="custom-control-label">{{__('aktiv')}}</span>
</label>
<label class="form-label" for="name">{{ __('Name') }}*</label>
<label class="form-label" for="name">{{ __('Produktname / Titel') }}*</label>
{{ Form::text('name', $product->name, array('placeholder'=>__('Name'), 'class'=>'form-control', 'id'=>'name', 'required')) }}
</div>
<div class="form-row">
<div class="form-group col-sm-6">
{{-- <div class="form-group col-sm-6">
<label class="form-label" for="title">{{ __('Title') }}</label>
{{ Form::text('title', $product->title, array('placeholder'=>__('Title'), 'class'=>'form-control', 'id'=>'title')) }}
</div>
<div class="form-group col-sm-3">
<label class="form-label" for="title">{{ __('Anzeigen') }}</label>
{{ Form::select('show_at', $product->showATs, $product->show_at, array('data-live-search'=>'false', 'class'=>'selectpicker', 'id'=>'show_at') ) }}
</div>
<div class="form-group col-sm-3">
<label class="form-label" for="identifier">{{ __('Kennung') }}</label>
{{ Form::text('identifier', $product->identifier, array('placeholder'=>__('Kennung'), 'class'=>'form-control', 'id'=>'identifier')) }}
</div>
--}}
</div>
<div class="form-row">
<div class="form-group col-sm-8">
<label class="form-label" for="title">{{ __('Kategorie(n)') }}</label>
<div class="form-group col-sm-5">
<label class="form-label" for="title">{{ __('Kategorie (Mehrfachauswahl)') }}</label>
<select class="selectpicker" name="categories[]" id="categories" data-style="btn-light" data-live-search="false" multiple>
{!! HTMLHelper::getCategoriesOptions($product->categories()->pluck('category_id')->toArray()) !!}
</select>
</div>
<div class="form-group col-sm-5">
<label class="form-label" for="show_at">{{ __('Produkt anzeigen') }}</label>
{{ Form::select('show_at', $product->showATs, $product->show_at, array('data-live-search'=>'false', 'class'=>'selectpicker', 'id'=>'show_at') ) }}
</div>
<div class="form-group col-sm-4">
<label class="form-label" for="pos">{{ __('pos') }}</label>
{{ Form::text('pos', $product->pos, array('placeholder'=>__('pos'), 'class'=>'form-control', 'id'=>'pos')) }}
<div class="form-group col-sm-2">
<label class="form-label" for="pos">{{ __('Listenposition') }}</label>
{{ Form::text('pos', $product->pos, array('placeholder'=>__('1, 2, 3, etc'), 'class'=>'form-control', 'id'=>'pos')) }}
</div>
</div>
<div class="form-group">
<label class="form-label" for="copy">{{ __('copy') }}</label>
{{ Form::textarea('copy', $product->copy , array('placeholder'=>__('Leistungen'), 'class'=>'form-control summernote', 'id'=>'copy')) }}
<label class="form-label" for="copy">{{ __('Produktbeschreibung') }}</label>
{{ Form::textarea('copy', $product->copy , array('placeholder'=>__('Produktbeschreibung'), 'class'=>'form-control summernote', 'id'=>'copy')) }}
</div>
<div class="form-row">
<div class="form-group col-sm-8">
<label class="form-label" for="action">{{ __('Action') }}</label>
{{ Form::select('action[]', $product->actions, $product->action, array('data-live-search'=>'false', 'class'=>'selectpicker', 'id'=>'action', 'multiple') ) }}
</div>
<div class="form-group col-sm-4">
<label class="form-label" for="upgrade_to_id">{{ __('Upgrade to ID') }}</label>
{{ Form::text('upgrade_to_id', $product->upgrade_to_id, array('placeholder'=>__('Product ID when need an upgrade'), 'class'=>'form-control', 'id'=>'upgrade_to_id')) }}
</div>
</div>
</div>
</div>
@ -117,28 +104,42 @@
{{ __('Inhalte') }}
</h5>
<div class="card-body">
<div class="form-group">
<label class="form-label" for="contents">{{ __('Menge Inhalt (ml / g)') }}</label>
{{ Form::text('contents', $product->contents, array('placeholder'=>__('contents'), 'class'=>'form-control', 'id'=>'contents')) }}
<div class="form-row">
<div class="form-group col-sm-5">
<label class="form-label" for="contents">{{ __('Menge Inhalt (ml / g) als Text') }}</label>
{{ Form::text('contents', $product->contents, array('placeholder'=>__('Bsp: 150 ml'), 'class'=>'form-control', 'id'=>'contents')) }}
</div>
<div class="form-group col-sm-3">
<label class="form-label" for="contents_total">{{ __('Gesamter Inhalt (ml / g) als Zahl') }}</label>
{{ Form::text('contents_total', $product->contents_total, array('placeholder'=>__('Bsp: 150'), 'class'=>'form-control', 'id'=>'contents_total')) }}
</div>
<div class="form-group col-sm-2">
<label class="form-label" for="contents">{{ __('Grundpreis Einheit') }}</label>
{{ Form::select('unit', $product->unitTypes, $product->unit, array('data-live-search'=>'false', 'class'=>'selectpicker', 'id'=>'unit') ) }}
</div>
<div class="form-group col-sm-2">
<label class="form-label" for="base_price">{{ __('Grundpreis') }}</label>
{{ Form::text('base_price', $product->getBasePriceFormattedFull(), array('placeholder'=>__(''), 'class'=>'form-control', 'id'=>'base_price', 'readonly')) }}
</div>
<div class="form-group">
<div class="form-group col-sm-4">
<label class="form-label" for="number">{{ __('Artikelnummer') }}</label>
{{ Form::text('number', $product->number, array('placeholder'=>__('number'), 'class'=>'form-control', 'id'=>'number')) }}
</div>
<div class="form-group">
<div class="form-group col-sm-4">
<label class="form-label" for="icons">{{ __('Icons') }}</label>
{{ Form::text('icons', $product->icons, array('placeholder'=>__('icons'), 'class'=>'form-control', 'id'=>'icons')) }}
</div>
<div class="form-group">
<div class="form-group col-sm-4">
<label class="form-label" for="title">{{ __('Attribute') }}</label>
<select class="selectpicker" name="attributes[]" id="attributes" data-style="btn-light" data-live-search="false" multiple>
{!! HTMLHelper::getAttributesOptions($product->attributes()->pluck('attribute_id')->toArray()) !!}
</select>
</div>
</div>
<div class="form-group">
<label class="form-label" for="description">{{ __('Beschreibung') }}</label>
@ -156,3 +157,25 @@
</div>
</div>
<div class="card mb-2">
<h5 class="card-header">
{{ __('Admin Einstellungen') }}
</h5>
<div class="card-body">
<div class="form-row">
<div class="form-group col-sm-5">
<label class="form-label" for="action">{{ __('Aktion beim Zahlungsprozess') }}</label>
{{ Form::select('action[]', $product->actions, $product->action, array('data-live-search'=>'false', 'class'=>'selectpicker', 'id'=>'action', 'multiple') ) }}
</div>
<div class="form-group col-sm-5">
<label class="form-label" for="identifier">{{ __('Kennzeichnung für die Anzeige') }}</label>
{{ Form::select('identifier', $product->identifiers_types, $product->identifier, array('data-live-search'=>'false', 'class'=>'selectpicker', 'id'=>'identifier') ) }}
</div>
<div class="form-group col-sm-2">
<label class="form-label" for="upgrade_to_id">{{ __('Upgrade to ID') }}</label>
{{ Form::text('upgrade_to_id', $product->upgrade_to_id, array('placeholder'=>__('Product ID when need an upgrade'), 'class'=>'form-control', 'id'=>'upgrade_to_id')) }}
</div>
</div>
</div>
</div>

View file

@ -14,6 +14,10 @@
<th>{{__('Bild')}}</th>
<th>{{__('Name')}}</th>
<th>{{__('Kategorie')}}</th>
<th>{{__('Preis')}}</th>
<th>{{__('Inhalt')}}</th>
<th>{{__('Einheit')}}</th>
<th>{{__('Grundpreis')}}</th>
<th>{{__('Status')}}</th>
<th></th>
</tr>
@ -32,17 +36,19 @@
<img class="img-fluid" alt="" style="max-height: 80px" src="{{ route('product_image', [$value->images->first()->slug]) }}">
@endif
</td>
<td>{{ $value->name }}</td>
<td>
@foreach($value->categories as $category)
{{ $category->category->name }}
@endforeach
</td>
<td>{{ $value->getFormattedPrice() }}</td>
<td>{{ $value->contents_total }}</td>
<td>{{ $value->getUnitType() }}</td>
<td>{{ $value->getBasePriceFormatted() }}</td>
<td data-sort="{{ $value->active }}">@if($value->active) <span class="badge badge-pill badge-success"><i class="fa fa-check"></i></span>@else<span class="badge badge-pill badge-danger"><i class="fa fa-times"></i></span>@endif</td>
<td><a class="text-info" href="{{ route('admin_product_copy', [$value->id]) }}" onclick="return confirm('{{__('Eintrag kopieren?')}}');"><i class="far fa-copy"></i></a> &nbsp;
<a class="text-danger" href="{{ route('admin_product_delete', [$value->id]) }}" onclick="return confirm('{{__('Really delete entry?')}}');"><i class="far fa-trash-alt"></i></a></td>
</tr>
@endforeach
</tbody>

View file

@ -95,7 +95,12 @@
<body class="body" style="padding:0; margin:0; display:block; background:#f8f8f8; -webkit-text-size-adjust:none" bgcolor="#f8f8f8">
<div style="display: none; mso-hide: all; width: 0px; height: 0px; max-width: 0px; max-height: 0px; font-size: 0px; line-height: 0px;">
{{ $copy1line }}
@if(isset($copy1line))
{{ strip_tags($copy1line) }}
@endif
@if(isset($content))
{{ strip_tags($content) }}
@endif
</div>
<table align="center" cellpadding="0" cellspacing="0" width="100%" height="100%">
@ -139,6 +144,7 @@
<b>{{ $salutation }} </b>
</td>
</tr>
@if(isset($copy1line))
<tr>
<td>
<center>
@ -155,6 +161,20 @@
</center>
</td>
</tr>
@endif
@if(isset($content))
<tr>
<td>
<table style="padding: 20px; border:1px solid #eee; background-color: #f6fdf5" cellpadding="2" cellspacing="0" width="100%">
<tr>
<td>
{!! nl2br($content) !!}
</td>
</tr>
</table>
</td>
</tr>
@endif
<tr>
<td>
<center>

View file

@ -0,0 +1,268 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>mivita.care</title>
<style type="text/css">
img {
max-width: 600px;
outline: none;
text-decoration: none;
-ms-interpolation-mode: bicubic;
}
a {
text-decoration: none;
border: 0;
outline: none;
color: #919f7a;
}
a:hover {
color: #b6b600;
}
a img {
border: none;
}
td, h1, h2, h3 {
font-family: Helvetica, Verdana, Arial, sans-serif;
font-weight: 400;
}
td {
text-align: left;
}
body {
-webkit-font-smoothing: antialiased;
-webkit-text-size-adjust: none;
width: 100%;
height: 100%;
color: #37302d;
background: #ffffff;
font-size: 14px;
line-height: 22px
}
table {
border-collapse: separate !important;
}
.headline {
color: #37302d;
font-size: 18px;
}
.sub_headline {
color: #788662;
font-size: 15px;
}
.force-full-width {
width: 100% !important;
}
hr {
border: none;
border-top: 1px solid #b7c59e;
}
</style>
<style type="text/css" media="screen">
@media screen {
/*Thanks Outlook 2013! http://goo.gl/XLxpyl*/
td, h1, h2, h3 {
font-family: Helvetica, Verdana, Arial, sans-serif;
}
}
</style>
<style type="text/css" media="only screen and (max-width: 480px)">
/* Mobile styles */
@media only screen and (max-width: 480px) {
table[class="w320"] {
width: 320px !important;
}
}
</style>
<!--[if mso]>
<style type="text/css">
body, table, td {
font-family: Helvetica, Arial, sans-serif !important;
}
</style>
<![endif]-->
</head>
<body class="body" style="padding:0; margin:0; display:block; background:#f8f8f8; -webkit-text-size-adjust:none" bgcolor="#f8f8f8">
<div style="display: none; mso-hide: all; width: 0px; height: 0px; max-width: 0px; max-height: 0px; font-size: 0px; line-height: 0px;">
{{ strip_tags($content) }}
</div>
<table align="left" cellpadding="0" cellspacing="0" width="100%" height="100%">
<tr>
<td align="left" valign="top" bgcolor="#f8f8f8" width="100%">
<br>
<table style="margin: 0 auto;" cellpadding="0" cellspacing="0" width="700" class="w320">
<tr>
<td align="left" valign="top">
<table style="margin: 0 auto;" cellpadding="0" cellspacing="0" width="100%">
<tr>
<td style=" text-align:center;">
<center>
<table width="100%" cellpadding="0" cellspacing="0" border="0" class="">
<tbody class="">
<tr class="">
<td align="center" valign="middle" style="font-size: 0px;" class="">
<center>
<picture style="text-align: center">
<img src="https://my.mivita.care/images/logo_mivita.png" alt="mivita.care" style="border:none" width="230">
</picture>
</center>
</td>
</tr>
<tr>
<td><br></td>
</tr>
</tbody>
</table>
</center>
</td>
</tr>
</table>
<table cellpadding="10" style="padding: 10px;" cellspacing="0" border="0" width="100%" bgcolor="#ffffff">
<tr>
<td class="headline" style="text-align: center">
<center>
<b>{{ $title }}</b>
</center>
</td>
</tr>
<tr>
<td>
<table style="padding: 0px 20px; border:1px solid #eee; background-color: #f6fdf5" cellpadding="2" cellspacing="0" width="100%">
<tr>
<td>
{!! nl2br($content) !!}
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td>
<center>
<table role="presentation" cellpadding="0" cellspacing="0" width="100%" border="0">
<tbody>
<tr>
<td style="word-wrap:break-word;background:transparent;font-size:0px;padding:10px 25px;" align="center" valign="top" background="data:image/gif;base64,">
<table role="presentation" cellpadding="0" cellspacing="0" align="center" border="0">
<tbody>
<tr>
<td style="border:none;border-radius:20px;color:#ffffff;cursor:auto;padding:15px 25px;" align="center" valign="middle" bgcolor="#b5c49b">
<p style="text-decoration:none;background:#b5c49b;color:#ffffff;font-family:Arial, sans-serif;font-size:13px;font-weight:normal;line-height:120%;text-transform:none;margin:0px;">
<a href="{{ $url }}" style="color:#ffffff;font-size:14px;font-weight:bold;text-align:center;text-decoration:none;-webkit-text-size-adjust:none;">{{ $button }}</a>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
</center>
</td>
<tr>
<tr>
<td style="color:#37302d;font-size: 14px;">
<center>
<table style="margin: 0 auto;" cellpadding="0" cellspacing="0" width="90%">
<tr>
<td style="color:#37302d; text-align: center">
{{ $copy2line }}<br>
<span style="color: #cabda9; font-weight: normal; font-size: 13px; text-decoration: underline; word-wrap: break-word;white-space: pre-line;">{{ $url }}</span>
</td>
</tr>
</table>
</center>
</td>
</tr>
@if(isset($content_last) && $content_last != "")
<tr>
<td>
<table style="padding: 0px 20px; border:1px solid #eee; background-color: #f6fdf5" cellpadding="2" cellspacing="0" width="100%">
<tr>
<td>
{!! nl2br($content_last) !!}
</td>
</tr>
</table>
</td>
</tr>
@endif
<tr>
<td style="color:#37302d;font-size: 14px;">
<center>
<table style="margin: 0 auto;" cellpadding="0" cellspacing="0" width="90%">
<tr>
<td style="color:#37302d; text-align: center">
{{ $copy3line }}
<br>
{{ $greetings }} <br><br><b>{{ $sender }}</b>
</td>
</tr>
<tr>
<td><br></td>
</tr>
</table>
</center>
</td>
</tr>
</table>
<center>
<table cellpadding="0" cellspacing="0" class="force-full-width"
bgcolor="#f8f8f8" style="margin: 0 auto; text-align: center">
<tr>
<td style="color:#7B7B7E; font-size:14px; text-align: center">
<p>
{{__('email.footer_copy1')}}
</p>
<a href="https://www.mivita.care" style="color: #7B7B7E; text-decoration: underline;">www.mivita.care</a>
<br>
</td>
</tr>
<tr>
<td style="color:#bbbbbb; font-size:12px; text-align: center">
<p>{{__('email.footer_copy2')}}</p>
<a href="https://www.mivita.care/datenschutz">Datenschutzerklärung</a> <br>
<p>{{__('email.footer_copy3')}}</p>
<br>
<br>
</td>
</tr>
</table>
</center>
</td>
</tr>
</table>
</td>
</tr>
</table>
</body>
</html>

View file

@ -27,36 +27,60 @@
<hr class="container-m-nx mt-0 mb-4">
<div class="row">
@if($user->active == 1)
@if($user->payment_account && $user->daysActiveAccount() <= config('mivita.renewal_days'))
@if($user->payment_account && $user->daysActiveAccount() <= config('mivita.remind_first_days'))
<div class="d-flex col-xl-12 align-items-stretch">
<!-- SHOP -->
<div class="card w-100 mb-4">
<h5 class="card-header">
{{__('Mitgliedschaft / Jahresbeitrag') }}
{{__('membership.home_hl') }}
</h5>
<div class="card-body">
<h5><strong>Achtung:</strong> Deine Mitgliedschaft wurde verlängert!</h5>
@if($user->daysActiveAccount() <= 0)
@if($user->isActiveAccount())
<h5 class="alert badge-danger">Dein Zahlungsfrist läuft heute aus, bitte aktualisiere jetzt Deine Mitgliedschaft!</h5>
<h5 class="alert badge-danger">{{__('membership.home_copy_alert_35')}}</h5>
<p>{{__('membership.home_copy_last_35', ['days'=>$user->daysActiveAccount(), 'datetime'=>$user->getPaymentAccountDateFormat()])}}</p>
@else
<h5 class="alert badge-danger">Dein Zahlungsfrist ist vor {{ $user->daysActiveAccount()*-1 }} Tagen ausgelaufen, bitte aktualisiere jetzt Deine Mitgliedschaft!</h5>
{{-- 35, 36 --}}
@if($user->daysActiveAccount() == 0)
<h5 class="alert badge-danger">{{__('membership.home_copy_alert_36_today', ['datetime'=>$user->getPaymentAccountDateFormat()])}}</h5>
@else
<h5 class="alert badge-danger">{{__('membership.home_copy_alert_36', ['days'=>$user->daysActiveAccount()*-1, 'datetime'=>$user->getPaymentAccountDateFormat()])}}</h5>
@endif
@elseif($user->daysActiveAccount() < config('mivita.abo_booking_days') )
<h5 class="alert badge-warning">Dein Zahlungsfrist läuft in {{$user->daysActiveAccount()}} Tagen aus, bitte aktualisiere jetzt Deine Mitgliedschaft!</h5>
@else
<h5 class="alert badge-default">Dein Zahlungsfrist läuft in {{$user->daysActiveAccount()}} Tagen aus, bitte aktualisiere jetzt Deine Mitgliedschaft!</h5>
@if($user->abo_options && $user->payment_account)
<p>Deine automatische Verlängerung ist aktiv, wir werden am <strong>{!! Carbon::parse($user->payment_account)->modify('-'.config('mivita.abo_booking_days').' days')->format('d.m.Y') !!}</strong> Deine Mitgliedschaftsgebühr automatisch per SEPA Mandat einziehen.<br>
@endif
@endif
<p>Erst wenn Dein Jahresbeitrag bei uns eingeht wird Deine Mitgliedschaft automastisch für ein Jahr verlängert. Die Verlängerung gilt ab erstes Abschlussdatum ein weiteres volles Jahr, bis zum <strong>{{$user->modifyActiveAccount()}}</strong>.
Sollte nach Ablauf der Zahlungsfrist Dein Jahresbeitrag nicht bei uns eingehen, wird Dein Account gesperrt.</p>
@if($user->payment_account && $user->isAboOption())
{{ __('membership.home_copy_SEPA_36', ['price'=> 'von '.$user->payment_order_product->getFormattedPrice().' EUR', 'pay_date'=>Carbon::parse($user->payment_account)->modify('- '.config('mivita.abo_booking_days').' days')->format('d.m.Y')]) }}
<hr>
@endif
<p>{{__('membership.home_copy_last_36', ['days'=>$user->daysActiveAccount(), 'datetime'=>$user->getPaymentAccountDateFormat()])}}</p>
@endif
@elseif($user->daysActiveAccount() < config('mivita.remind_last_days') )
{{-- 33 --}}
<h5 class="alert badge-warning">{{ __('membership.home_copy_alert_31', ['datetime'=>$user->getPaymentAccountDateFormat()]) }}</h5>
<p>{{__('membership.home_copy_last_34', ['days'=>$user->daysActiveAccount(), 'datetime'=>$user->getPaymentAccountDateFormat()])}}</p>
@elseif($user->daysActiveAccount() < config('mivita.remind_sec_days'))
{{-- 33 --}}
<h5 class="alert badge-warning">{{ __('membership.home_copy_alert_31', ['datetime'=>$user->getPaymentAccountDateFormat()]) }}</h5>
@if($user->payment_account && $user->isAboOption())
@if($user->daysActiveAccount() < config('mivita.abo_booking_days') )
<p>{{ __('membership.home_copy_SEPA_33', ['price'=> 'von '.$user->payment_order_product->getFormattedPrice().' EUR', 'pay_date'=>Carbon::parse($user->payment_account)->modify('- '.config('mivita.abo_booking_days').' days')->format('d.m.Y')]) }}</p>
@else
<p>{{ __('membership.home_copy_SEPA_32', ['price'=> 'von '.$user->payment_order_product->getFormattedPrice().' EUR', 'pay_date'=>Carbon::parse($user->payment_account)->modify('- '.config('mivita.abo_booking_days').' days')->format('d.m.Y')]) }}</p>
@endif
<hr>
@endif
<p>{{__('membership.home_copy_last_33', ['days'=>$user->daysActiveAccount()])}}</p>
@else
{{-- 32 / 31 --}}
<h5 class="alert badge-default">{{ __('membership.home_copy_alert_31', ['datetime'=>$user->getPaymentAccountDateFormat()]) }}</h5>
@if($user->payment_account && $user->isAboOption())
{{ __('membership.home_copy_SEPA_32', ['price'=> 'von '.$user->payment_order_product->getFormattedPrice().' EUR', 'pay_date'=>Carbon::parse($user->payment_account)->modify('- '.config('mivita.abo_booking_days').' days')->format('d.m.Y')]) }}
<hr>
@endif
<p>{{__('membership.home_copy_last_31', ['days'=>$user->daysActiveAccount()])}}</p>
@endif
</div>
<div class="card-footer py-3">
<a href="{{route('user_membership')}}" class="btn btn-info mb-3"><i class="ion ion-ios-refresh text-default mr-1"></i> Mitgliedschaft jetzt hier verwalten</a>

View file

@ -135,6 +135,9 @@
<div>{{ __('Tools') }}</div>
</a>
<ul class="sidenav-menu">
<li class="sidenav-item{{ Request::is('sysadmin/tools/cronjobs') ? ' active' : '' }}">
<a href="{{ route('sysadmin_tools_cronjobs') }}" class="sidenav-link"><i class="sidenav-icon ion ion-md-settings"></i><div>{{ __('Cron Jobs') }}</div></a>
</li>
<li class="sidenav-item{{ Request::is('sysadmin/tools/domainssl') ? ' active' : '' }}">
<a href="{{ route('sysadmin_tools_domainssl') }}" class="sidenav-link"><i class="sidenav-icon ion ion-md-lock"></i><div>{{ __('Domain SSL') }}</div></a>
</li>

View file

@ -0,0 +1,50 @@
@extends('layouts.layout-2')
@section('content')
@if ($errors->any())
<div class="row">
<div class="col-sm-12">
<div class="alert alert-danger">
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
</div>
</div>
@endif
<h4 class="font-weight-bold mb-4">
Cron Jobs
</h4>
<div class="card mb-4">
{{-- <div class="card-body">
<!-- Controls -->
{!! Form::open(['url' => url()->current(), 'class' => '']) !!}
<div class="form-group mb-1">
<label class="form-label" for="description">Description</label>
{{ Form::textarea('text', $text, array('class'=>'form-control', 'rows'=>20)) }}
</div>
<button type="submit" class="btn btn-primary"><i class="ion"></i> action</button>
{!! Form::close() !!}
</div>--}}
@if(count($values)>0)
<div class="card-body">
<!-- Controls -->
@foreach($values as $name=>$link)
<a href="{{$link}}" target="_blank">{{$name}} | {{$link}}</a><br><br>
@endforeach
</div>
@endif
</div>
@endsection

View file

@ -1,7 +1,7 @@
<hr>
<label class="custom-control custom-checkbox">
<input type="checkbox" class="custom-control-input" name="abo_options" @if($user && $user->abo_options) checked="checked" @endif>
<input type="checkbox" class="custom-control-input" name="abo_options" @if($user && $user->isAboOption()) checked="checked" @endif>
<span class="custom-control-label secondary"><strong>{{__('payment.status.auto_renewal_hl')}}:</strong> {{__('payment.status.auto_renewal_line_1')}}</span>
<p class="text-muted">{{__('payment.status.auto_renewal_line_2')}}</p>
</label>

View file

@ -41,7 +41,7 @@
</table>
</div>
<div class="text-left mt-3">
@if(!$user->abo_options)
@if(!$user->isAboOption())
<hr>
<label class="custom-control custom-checkbox">
<input type="checkbox" class="custom-control-input" name="abo_options">

View file

@ -26,13 +26,21 @@
@if($user->isRenewalAccount())
<div class="card w-100 mb-4">
<h5 class="card-header">Deine Mitglidschaft wurde am {!! Carbon::parse($user->payment_account)->modify('-'.config('mivita.abo_booking_days').' days')->format('d.m.Y') !!} verlänget.</h5>
<h5 class="card-header">Deine Mitglidschaft wurde am {{ $user->nextRenewalAccount() }} verlängert.</h5>
<div class="card-body">
@if($userHistoryPaymentOrder && $userHistoryPaymentOrder->status > 2)
<h6 class="alert badge-{{$userHistoryPaymentOrder->getStatusColor()}}">Eine Zahlung wurde ausgeführt. Status: {{ trans('payment.status.'.$userHistoryPaymentOrder->getStatusType())}}</h6>
@endif
@if($user->abo_options && $user->payment_account)
<p class="alert py-2 px-2 badge-secondary">Deine automatische Verlängerung ist aktiv, wir werden am <strong>{!! Carbon::parse($user->payment_account)->modify('-'.config('mivita.abo_booking_days').' days')->format('d.m.Y') !!}</strong> Deine Mitgliedschaftsgebühr automatisch per SEPA Mandat einziehen.<br>
@if($user->payment_account && $user->isAboOption())
@if($user->payment_account && $user->isAboOption())
@if($user->daysActiveAccount() < config('mivita.abo_booking_days') )
<p class="alert py-2 px-2 badge-secondary">Wir konnten am <strong>{!! Carbon::parse($user->payment_account)->modify('-'.config('mivita.abo_booking_days').' days')->format('d.m.Y') !!}</strong> Deine Mitgliedschaftsgebühr <strong>nicht</strong> automatisch per SEPA Mandat einziehen.<br>
@else
<p class="alert py-2 px-2 badge-secondary">Deine automatische Verlängerung ist aktiv, wir werden am <strong>{!! Carbon::parse($user->payment_account)->modify('-'.config('mivita.abo_booking_days').' days')->format('d.m.Y') !!}</strong> Deine Mitgliedschaftsgebühr automatisch per SEPA Mandat einziehen.<br>
@endif
<hr>
@endif
@else
@if($user->payment_order_id && $user->payment_order_product->identifier === 'show_upgrade')
<p></p>
@ -44,10 +52,9 @@
<p><strong>Du hast die Möglichkeit Dein Paket zu upgraden, wähle einfach das erweiterte Paket aus und gehe weiter zur Zahlung.</strong></p>
@endif
@if($user->payment_order_product->identifier === 'show_order')
<p><strong>Eine Änderung Deiner Berater-Mitgliedschaft ist nicht mehr möglich.</strong></p>
<p><strong>Eine Änderung Deines Berater-Paketes ist nicht mehr möglich.</strong></p>
@endif
@endif
@include('user.membership._payment_order')
</div>
</div>
@ -73,7 +80,7 @@
<div class="card w-100 mb-4">
<h5 class="card-header">{{__('Mitgliedschaft')}} {{__('anpassen')}}</h5>
<div class="card-body">
<h6 class="d-block text-dark">Ändere Deine Mitglidschaft für die nächste Vertragsverlängerung.</h6>
<h6 class="d-block text-dark">Du kannst Deine Mitglidschaft bis zur nächsten Vertragsverlängerung, am {{ $user->nextRenewalAccount() }}, ändern</h6>
<p>Die restlichen Läufzeiten bleiben erhalten, erst mit der Verlängerung wird das geänderte Paket aktiv.</p>
@include('user.membership._change')
</div>
@ -82,28 +89,30 @@
@endif
{{-- remove ABO Options --}}
@if($user->abo_options && $user->payment_account)
<div class="card w-100 mb-4">
{!! Form::open(['url' => route('user_membership_store', ['remove_abo']), 'class' => 'form-horizontal']) !!}
<h5 class="card-header">{{__('payment.status.auto_renewal_hl')}} {{__('deaktivieren')}}</h5>
<div class="card-body">
<p>Automatische Verlängerung dekativeren und SEPA Mandat zurückziehen.<br>
Die nächste Buchung ist am: <strong>{!! Carbon::parse($user->payment_account)->modify('-'.config('mivita.abo_booking_days').' days')->format('d.m.Y') !!}</strong></p>
{{-- remove ABO Options --}}
@if($user->payment_account && $user->isAboOption())
<div class="card w-100 mb-4">
{!! Form::open(['url' => route('user_membership_store', ['remove_abo']), 'class' => 'form-horizontal']) !!}
<h5 class="card-header">{{__('payment.status.auto_renewal_hl')}} {{__('deaktivieren')}}</h5>
<label class="custom-control custom-checkbox">
<input type="checkbox" class="custom-control-input" name="abo_options_remove">
<span class="custom-control-label secondary">Hiermit bestätige ich, mein SEPA zu löschen und die automatische Verlängerung dekativeren.</span>
</label>
<button type="submit" class="btn btn-secondary btn-sm">{{__('payment.status.auto_renewal_hl')}} {{__('deaktivieren')}}</button>&nbsp;
</div>
{!! Form::close() !!}
<div class="card-body">
<p>Automatische Verlängerung dekativeren und SEPA Mandat zurückziehen.<br>
Die nächste Buchung ist am: <strong>{!! Carbon::parse($user->payment_account)->modify('-'.config('mivita.abo_booking_days').' days')->format('d.m.Y') !!}</strong></p>
<label class="custom-control custom-checkbox">
<input type="checkbox" class="custom-control-input" name="abo_options_remove">
<span class="custom-control-label secondary">Hiermit bestätige ich, mein SEPA zu löschen und die automatische Verlängerung dekativeren.</span>
</label>
<button type="submit" class="btn btn-secondary btn-sm">{{__('payment.status.auto_renewal_hl')}} {{__('deaktivieren')}}</button>&nbsp;
</div>
@endif
{!! Form::close() !!}
</div>
@endif
@if($user->payment_account)
@if($user->payment_account)
<div class="card w-100 mb-4">
{!! Form::open(['url' => route('user_membership_store', ['delete_membership']), 'class' => 'form-horizontal']) !!}
<h5 class="card-header">{{__('Mitgliedschaft')}} {{__('beenden')}}</h5>
@ -115,27 +124,19 @@
@if($userHistoryDeleteMembership && $userHistoryDeleteMembership->status == 50)
<p class="alert py-2 px-2 badge-danger">Die Beendigung und Löschung Deiner MIVITA Mitgliedschaft ist beantragt.<br>
@else
<label class="custom-control custom-checkbox">
<input type="checkbox" class="custom-control-input" name="delete_membership_mivita">
<span class="custom-control-label secondary">Ja, ich möchte die MIVITA Mitgliedschaft beenden, ich verzichte auf jeglichen Anspruch gegenüber MIVITA und möchte, dass mein Account gelöscht wird!</span>
</label>
<button type="submit" class="btn btn-default btn-sm">{{ __('Mitgliedschaft hiermit beenden') }}</button>&nbsp;
@else
<label class="custom-control custom-checkbox">
<input type="checkbox" class="custom-control-input" name="delete_membership_mivita">
<span class="custom-control-label secondary">Ja, ich möchte die MIVITA Mitgliedschaft beenden, ich verzichte auf jeglichen Anspruch gegenüber MIVITA und möchte, dass mein Account gelöscht wird!</span>
</label>
<button type="submit" class="btn btn-default btn-sm">{{ __('Mitgliedschaft hiermit beenden') }}</button>&nbsp;
@endif
</div>
{!! Form::close() !!}
</div>
@endif
@endif
{{--
TODO
//cron sepa
//cron Mails erinnerungen
--}}
</div>
<div class="col-md-5 col-xl-4 order-1 order-md-2">
<!-- Project details -->
@ -179,7 +180,7 @@
@else
@if($user->payment_account)
<li class="list-group-item d-flex justify-content-between align-items-center">
<div class="text-muted">{{__('abgelaufen am')}}}</div>
<div class="text-muted">{{__('abgelaufen am')}}</div>
<div class="text-right">
{{ $user->getPaymentAccountDateFormat() }}
</div>
@ -217,7 +218,7 @@
<li class="list-group-item d-flex justify-content-between align-items-center">
<div class="text-muted">{{__('payment.status.auto_renewal_hl')}}</div>
<div class="text-right">
@if($user->abo_options)
@if($user->isAboOption())
<span class="badge badge-pill badge-success"><i class="fa fa-check"></i> {{ __('aktiv') }}</span>
@else
<span class="badge badge-pill badge-danger"><i class="fa fa-times"></i> {{ __('inaktiv') }}</span>

View file

@ -105,6 +105,8 @@ Route::domain(config('app.pre_url_main').config('app.domain').config('app.tld_ca
/* ROUTING FOR CRM my.mivita / CMS*/
Route::domain(config('app.pre_url_crm').config('app.domain').config('app.tld_care'))->group(function () {
Route::get('/cron/jobs/action/{action}/{key}', 'CronController@action')->name('cron_jobs_action');
Auth::routes();
Route::get('/logout', function(){
Auth::logout();
@ -173,7 +175,6 @@ Route::domain(config('app.pre_url_crm').config('app.domain').config('app.tld_car
Route::group(['middleware' => ['auth:user']], function()
{
Route::get('storage/{type?}/{file?}', function($type = null, $file = null)
{
if($type == 'xls'){
@ -337,12 +338,14 @@ Route::domain(config('app.pre_url_crm').config('app.domain').config('app.tld_car
});
//login pages for sysadmin
Route::group(['middleware' => ['sysadmin']], function() {
Route::get('/sysadmin/tools/domainssl', 'SyS\AdminToolsController@domainSSL')->name('sysadmin_tools_domainssl');
Route::post('/sysadmin/tools/domainssl', 'SyS\AdminToolsController@domainSSLStore')->name('sysadmin_tools_domainssl');
Route::get('/sysadmin/tools/cronjobs', 'SyS\AdminToolsController@cronjobs')->name('sysadmin_tools_cronjobsl');
Route::post('/sysadmin/tools/cronjobs', 'SyS\AdminToolsController@cronjobsStore')->name('sysadmin_tools_cronjobs');
Route::get('/sysadmin/tools/shopping_orders', 'SyS\AdminToolsController@shoppingOrders')->name('sysadmin_tools_shopping_orders');
Route::post('/sysadmin/tools/shopping_orders', 'SyS\AdminToolsController@shoppingOrdersStore')->name('sysadmin_tools_shopping_orders');
});