Merge branch 'helpdesk' into bilettm
This commit is contained in:
commit
643f833e10
|
|
@ -2,12 +2,17 @@
|
|||
|
||||
namespace App\Http\Controllers\Admin;
|
||||
|
||||
use App\Http\Requests\HelpTicketCommentRequest;
|
||||
use App\Models\HelpTicket;
|
||||
use App\Models\HelpTicketComment;
|
||||
use App\Notifications\TicketCommented;
|
||||
use Backpack\CRUD\app\Http\Controllers\CrudController;
|
||||
|
||||
// VALIDATION: change the requests to match your own file names if you need form validation
|
||||
use App\Http\Requests\HelpTicketRequest as StoreRequest;
|
||||
use App\Http\Requests\HelpTicketRequest as UpdateRequest;
|
||||
use Backpack\CRUD\CrudPanel;
|
||||
use Illuminate\Support\Facades\Notification;
|
||||
|
||||
/**
|
||||
* Class HelpTicletCrudController
|
||||
|
|
@ -34,11 +39,41 @@ class HelpTicketCrudController extends CrudController
|
|||
*/
|
||||
|
||||
// TODO: remove setFromDb() and manually define Fields and Columns
|
||||
$this->crud->setFromDb();
|
||||
// $this->crud->setFromDb();
|
||||
|
||||
$this->crud->setColumns([
|
||||
['name'=>'code','type'=>'text','label'=>'Code'],
|
||||
['name'=>'name','type'=>'text','label'=>'Name'],
|
||||
['name'=>'phone','type'=>'text','label'=>'Phone'],
|
||||
['name'=>'email','type'=>'email','label'=>'Email'],
|
||||
['name'=>'subject','type'=>'text','label'=>'Subject'],
|
||||
['name'=>'status','type'=>'text','label'=>'Status'],
|
||||
]);
|
||||
// add asterisk for fields that are required in HelpTicletRequest
|
||||
$this->crud->setRequiredFields(StoreRequest::class, 'create');
|
||||
$this->crud->setRequiredFields(UpdateRequest::class, 'edit');
|
||||
// $this->crud->setRequiredFields(StoreRequest::class, 'create');
|
||||
// $this->crud->setRequiredFields(UpdateRequest::class, 'edit');
|
||||
$this->crud->denyAccess('create');
|
||||
$this->crud->denyAccess('update');
|
||||
$this->crud->allowAccess('show');
|
||||
$this->crud->addButtonFromView('line', 'replay', 'replay', 'beginning');
|
||||
|
||||
}
|
||||
public function show($id)
|
||||
{
|
||||
$content = parent::show($id);
|
||||
|
||||
// $this->crud->addColumn([
|
||||
// 'name' => 'table',
|
||||
// 'label' => 'Table',
|
||||
// 'type' => 'table',
|
||||
// 'columns' => [
|
||||
// 'code' => 'Code',
|
||||
// 'name' => 'Name',
|
||||
// 'phone' => 'Phone',
|
||||
// ]
|
||||
// ]);
|
||||
|
||||
return $content;
|
||||
}
|
||||
|
||||
public function store(StoreRequest $request)
|
||||
|
|
@ -58,4 +93,30 @@ class HelpTicketCrudController extends CrudController
|
|||
// use $this->data['entry'] or $this->crud->entry
|
||||
return $redirect_location;
|
||||
}
|
||||
|
||||
public function replay($id){
|
||||
|
||||
$entry = HelpTicket::with(['comments','topic'])->findOrFail($id);
|
||||
return view('admin.HelpDeskTicket')
|
||||
->with('entry',$entry)
|
||||
->with('crud',$this->crud);
|
||||
}
|
||||
|
||||
public function replayPost(HelpTicketCommentRequest $request, $ticket_id){
|
||||
$ticket = HelpTicket::findOrFail($ticket_id,['id','email','name']);
|
||||
|
||||
$comment = HelpTicketComment::create([
|
||||
'help_ticket_id' => $ticket_id,
|
||||
'text' => $request->text,
|
||||
'name' => auth()->user()->full_name,
|
||||
'user_id' => auth()->id()
|
||||
]);
|
||||
|
||||
$ticket->update('status','waiting_replay');
|
||||
|
||||
Notification::route('mail', $ticket->email)
|
||||
->notify(new TicketCommented($comment));
|
||||
|
||||
return redirect()->route('ticket.replay',['id'=>$ticket_id]);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -39,7 +39,7 @@ class SectionCrudController extends CrudController
|
|||
// ['name'=>'section_no','type'=>'text','label'=>'Section No En'],
|
||||
['name'=>'section_no_ru','type'=>'text','label'=>'Section No Ru'],
|
||||
['name'=>'section_no_tk','type'=>'text','label'=>'Section No Tk'],
|
||||
// ['name'=>'description','type'=>'text','label'=>'Description En'],
|
||||
['name'=>'description','type'=>'text','label'=>'Notes'],
|
||||
// ['name'=>'description_ru','type'=>'text','label'=>'Description Ru'],
|
||||
// ['name'=>'description_tk','type'=>'text','label'=>'Description Tk'],
|
||||
['name' => 'venue_id', 'type'=>'select','entity'=>'venue','attribute'=>'venue_name_ru','label'=>'Venue'],
|
||||
|
|
@ -49,7 +49,7 @@ class SectionCrudController extends CrudController
|
|||
// ['name'=>'section_no','type'=>'text','label'=>'Section No'],
|
||||
['name'=>'section_no_ru','type'=>'text','label'=>'Section No Ru'],
|
||||
['name'=>'section_no_tk','type'=>'text','label'=>'Section No Tk'],
|
||||
// ['name'=>'description','type'=>'text','label'=>'Description'],
|
||||
['name'=>'description','type'=>'textarea','label'=>'Notes'],
|
||||
// ['name'=>'description_ru','type'=>'text','label'=>'Description Ru'],
|
||||
// ['name'=>'description_tk','type'=>'text','label'=>'Description Tk'],
|
||||
['name' => 'venue_id', 'type'=>'select','entity'=>'venue','attribute'=>'venue_name_ru','label'=>'Venue'],
|
||||
|
|
|
|||
|
|
@ -745,7 +745,7 @@ class EventAttendeesController extends MyBaseController
|
|||
'email_logo' => $attendee->event->organiser->full_logo_path,
|
||||
];
|
||||
|
||||
if ($request->get('notify_attendee') == '1') {
|
||||
if ($request->get('notify_attendee') == '1') {//todo queue this mail
|
||||
Mail::send('Emails.notifyCancelledAttendee', $data, function ($message) use ($attendee) {
|
||||
$message->to($attendee->email, $attendee->full_name)
|
||||
->from(config('attendize.outgoing_email_noreply'), $attendee->event->organiser->name)
|
||||
|
|
|
|||
|
|
@ -19,7 +19,9 @@ class EventCheckInController extends MyBaseController
|
|||
*/
|
||||
public function showCheckIn($event_id)
|
||||
{
|
||||
$event = Event::scope()->findOrFail($event_id);
|
||||
$event = Event::scope()->with('attendees')->findOrFail($event_id);
|
||||
|
||||
// dump($event->attendees->pluck('seat_no'));
|
||||
|
||||
$data = [
|
||||
'event' => $event,
|
||||
|
|
|
|||
|
|
@ -125,6 +125,7 @@ class EventCheckoutController extends Controller
|
|||
|
||||
$booked_tickets = Attendee::where('ticket_id',$ticket_id)
|
||||
->where('event_id',$event_id)
|
||||
->where('is_cancelled',false)
|
||||
->whereIn('seat_no',$seat_nos)
|
||||
->pluck('seat_no');
|
||||
|
||||
|
|
@ -356,7 +357,7 @@ class EventCheckoutController extends Controller
|
|||
$order->last_name = $request->get('order_last_name');
|
||||
$order->email = $request->get('order_email');
|
||||
$order->order_status_id = 5;//order awaiting payment
|
||||
$order->amount = $orderService->getGrandTotal();
|
||||
$order->amount = $ticket_order['order_total'];
|
||||
$order->booking_fee = $ticket_order['booking_fee'];
|
||||
$order->organiser_booking_fee = $ticket_order['organiser_booking_fee'];
|
||||
$order->discount = 0.00;
|
||||
|
|
|
|||
|
|
@ -6,10 +6,14 @@ namespace App\Http\Controllers;
|
|||
|
||||
use App\Http\Requests\HelpTicketCommentRequest;
|
||||
use App\Http\Requests\HelpTicketRequest;
|
||||
use App\Models\BackpackUser;
|
||||
use App\Models\HelpTicket;
|
||||
use App\Models\HelpTicketComment;
|
||||
use App\Models\HelpTopic;
|
||||
use App\Models\User;
|
||||
use App\Notifications\TicketCommented;
|
||||
use App\Notifications\TicketReceived;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
use Illuminate\Support\Facades\Notification;
|
||||
|
||||
class HelpDeskController extends Controller
|
||||
{
|
||||
|
|
@ -34,30 +38,50 @@ class HelpDeskController extends Controller
|
|||
}
|
||||
|
||||
public function store(HelpTicketRequest $request){
|
||||
//
|
||||
// try{
|
||||
|
||||
$ticekt = HelpTicket::create([
|
||||
try{
|
||||
|
||||
$ticket = HelpTicket::create([
|
||||
'name' => $request->get('name'),
|
||||
'email' => $request->get('email'),
|
||||
'text' => $request->get('text'),
|
||||
'phone' => $request->get('phone'),
|
||||
'subject' => $request->get('subject'),
|
||||
'ticket_category_id' => $request->get('topic'),
|
||||
'attachment' => $request->get('attachment')
|
||||
'attachment' => $request->file('attachment')
|
||||
]);
|
||||
// }
|
||||
// catch (\Exception $exception){
|
||||
// Log::error($exception);
|
||||
// }
|
||||
//todo fire event notify admin by mail, attachment
|
||||
|
||||
return redirect()->route('help.show',['code' => $ticekt->code]);
|
||||
|
||||
/**
|
||||
* Notify customer that ticket is received;
|
||||
*/
|
||||
$ticket->notify(new TicketReceived($ticket));
|
||||
|
||||
$this->notifyAdministrators(new TicketReceived($ticket)) ;
|
||||
|
||||
return redirect()->route('help.show',['code' => $ticket->code]);
|
||||
}
|
||||
catch (\Exception $exception){
|
||||
Log::error($exception);
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Notify administrators that ticket is arrived;
|
||||
*/
|
||||
private function notifyAdministrators(\Illuminate\Notifications\Notification $notification){
|
||||
|
||||
$administrators = BackpackUser::where('is_admin',1)->get(['id','email']);
|
||||
|
||||
Notification::send($administrators, $notification);
|
||||
}
|
||||
|
||||
public function comment(HelpTicketCommentRequest $request,$code){
|
||||
|
||||
$ticket = HelpTicket::select('id')
|
||||
$ticket = HelpTicket::select('id','name','email')
|
||||
->where('code',$code)
|
||||
->first();
|
||||
|
||||
|
|
@ -66,16 +90,14 @@ class HelpDeskController extends Controller
|
|||
|
||||
$comment = HelpTicketComment::create([
|
||||
'text' => $request->text,
|
||||
'help_ticket_id' => $ticket->id
|
||||
'help_ticket_id' => $ticket->id,
|
||||
'attachment' => $request->file('attachment'),
|
||||
'name' => $ticket->owner,
|
||||
]);
|
||||
|
||||
$ticket->update(['status' => 'pending']) ;
|
||||
|
||||
if($request->has('attachment')){
|
||||
|
||||
}
|
||||
|
||||
//todo notify, attachment
|
||||
$this->notifyAdministrators(new TicketCommented($comment));
|
||||
|
||||
return redirect()->route('help.show',['code' => $code]);
|
||||
|
||||
|
|
|
|||
|
|
@ -756,6 +756,7 @@ Route::group(
|
|||
'as' =>'help.comment',
|
||||
'uses' => 'HelpDeskController@comment'
|
||||
]);
|
||||
|
||||
// Route::get('/terms_and_conditions', [
|
||||
// 'as' => 'termsAndConditions',
|
||||
// function () {
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@ class SendOrderTickets extends Job implements ShouldQueue
|
|||
use InteractsWithQueue, SerializesModels, DispatchesJobs;
|
||||
|
||||
public $order;
|
||||
|
||||
public $maxExceptions = 3;
|
||||
/**
|
||||
* Create a new job instance.
|
||||
*
|
||||
|
|
|
|||
|
|
@ -48,11 +48,11 @@ class AttendeeMailer extends Mailer
|
|||
$message_object->account_id)->get();
|
||||
|
||||
foreach ($attendees as $attendee) {
|
||||
|
||||
|
||||
if ($attendee->is_cancelled) {
|
||||
continue;
|
||||
}
|
||||
|
||||
|
||||
$data = [
|
||||
'attendee' => $attendee,
|
||||
'event' => $event,
|
||||
|
|
|
|||
|
|
@ -21,4 +21,4 @@ class Mailer
|
|||
->subject($subject);
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -77,7 +77,9 @@ class Event extends MyBaseModel
|
|||
*/
|
||||
public function attendees()
|
||||
{
|
||||
return $this->hasMany(\App\Models\Attendee::class);
|
||||
return $this->hasMany(\App\Models\Attendee::class)
|
||||
->where('attendees.is_cancelled',false)
|
||||
->where('attendees.is_refunded',false);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -4,12 +4,13 @@ namespace App\Models;
|
|||
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
use Backpack\CRUD\CrudTrait;
|
||||
use Illuminate\Notifications\Notifiable;
|
||||
use Illuminate\Support\Str;
|
||||
|
||||
class HelpTicket extends Model
|
||||
{
|
||||
use CrudTrait;
|
||||
|
||||
use Notifiable;
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| GLOBAL VARIABLES
|
||||
|
|
@ -36,7 +37,7 @@ class HelpTicket extends Model
|
|||
|--------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
public function category(){
|
||||
public function topic(){
|
||||
return $this->belongsTo(HelpTopic::class,'ticket_category_id');
|
||||
}
|
||||
|
||||
|
|
@ -55,40 +56,27 @@ class HelpTicket extends Model
|
|||
|--------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
public function getOwnerAttribute(){
|
||||
return $this->name ?? $this->email;
|
||||
}
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| MUTATORS
|
||||
|--------------------------------------------------------------------------
|
||||
*/
|
||||
public function setAttachmentAttribute($value){
|
||||
public function setAttachmentAttribute($file){
|
||||
$attribute_name = "attachment";
|
||||
$disk = config('filesystems.default'); // or use your own disk, defined in config/filesystems.php
|
||||
$destination_path = "help"; // path relative to the disk above
|
||||
|
||||
// if the image was erased
|
||||
if ($value==null) {
|
||||
// delete the image from disk
|
||||
\Storage::disk($disk)->delete($this->{$attribute_name});
|
||||
if($file){
|
||||
$filename = md5($file.time()) . '.' . strtolower($file->getClientOriginalExtension());
|
||||
// 2. Move the new file to the correct path
|
||||
$file_path = $file->storeAs($destination_path, $filename, $disk);
|
||||
|
||||
// set null in the database column
|
||||
$this->attributes[$attribute_name] = null;
|
||||
$this->attributes[$attribute_name] = $file_path;
|
||||
}
|
||||
|
||||
// if a base64 was sent, store it in the db
|
||||
if (starts_with($value, 'data:image'))
|
||||
{
|
||||
// 0. Make the image
|
||||
$image = \Image::make($value)->encode('jpg', 90);
|
||||
// 1. Generate a filename.
|
||||
$filename = md5($value.time()).'.jpg';
|
||||
// 2. Store the image on disk.
|
||||
\Storage::disk($disk)->put($destination_path.'/'.$filename, $image->stream());
|
||||
// 3. Save the public path to the database
|
||||
// but first, remove "public/" from the path, since we're pointing to it from the root folder
|
||||
// that way, what gets saved in the database is the user-accesible URL
|
||||
$public_destination_path = Str::replaceFirst('public/', '', $destination_path);
|
||||
$this->attributes[$attribute_name] = $public_destination_path.'/'.$filename;
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Boot all of the bootable traits on the model.
|
||||
|
|
@ -103,13 +91,8 @@ class HelpTicket extends Model
|
|||
|
||||
static::deleting(function($obj) {
|
||||
$disk = config('filesystems.default');
|
||||
\Storage::disk($disk)->delete($obj->seats_image);
|
||||
\Storage::disk($disk)->delete($obj->attachment);
|
||||
|
||||
if (count((array)$obj->images)) {
|
||||
foreach ($obj->images as $file_path) {
|
||||
\Storage::disk('uploads')->delete($file_path);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -39,6 +39,10 @@ class HelpTicketComment extends Model
|
|||
public function ticket(){
|
||||
return $this->belongsTo(HelpTicket::class);
|
||||
}
|
||||
|
||||
public function user(){
|
||||
return $this->belongsTo(User::class);
|
||||
}
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| SCOPES
|
||||
|
|
@ -51,40 +55,26 @@ class HelpTicketComment extends Model
|
|||
|--------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
public function getOwnerAttribute(){
|
||||
return $this->user->full_name ?? $this->name;
|
||||
}
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| MUTATORS
|
||||
|--------------------------------------------------------------------------
|
||||
*/
|
||||
//todo use trait for image upload
|
||||
public function setAttachmentAttribute($value){
|
||||
public function setAttachmentAttribute($file){
|
||||
$attribute_name = "attachment";
|
||||
$disk = config('filesystems.default'); // or use your own disk, defined in config/filesystems.php
|
||||
$destination_path = "help"; // path relative to the disk above
|
||||
|
||||
// if the image was erased
|
||||
if ($value==null) {
|
||||
// delete the image from disk
|
||||
\Storage::disk($disk)->delete($this->{$attribute_name});
|
||||
if($file){
|
||||
$filename = md5($file.time()) . '.' . strtolower($file->getClientOriginalExtension());
|
||||
// 2. Move the new file to the correct path
|
||||
$file_path = $file->storeAs($destination_path, $filename, $disk);
|
||||
|
||||
// set null in the database column
|
||||
$this->attributes[$attribute_name] = null;
|
||||
}
|
||||
|
||||
// if a base64 was sent, store it in the db
|
||||
if (starts_with($value, 'data:image'))
|
||||
{
|
||||
// 0. Make the image
|
||||
$image = \Image::make($value)->encode('jpg', 90);
|
||||
// 1. Generate a filename.
|
||||
$filename = md5($value.time()).'.jpg';
|
||||
// 2. Store the image on disk.
|
||||
\Storage::disk($disk)->put($destination_path.'/'.$filename, $image->stream());
|
||||
// 3. Save the public path to the database
|
||||
// but first, remove "public/" from the path, since we're pointing to it from the root folder
|
||||
// that way, what gets saved in the database is the user-accesible URL
|
||||
$public_destination_path = Str::replaceFirst('public/', '', $destination_path);
|
||||
$this->attributes[$attribute_name] = $public_destination_path.'/'.$filename;
|
||||
$this->attributes[$attribute_name] = $file_path;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -99,11 +89,6 @@ class HelpTicketComment extends Model
|
|||
$disk = config('filesystems.default');
|
||||
\Storage::disk($disk)->delete($obj->seats_image);
|
||||
|
||||
if (count((array)$obj->images)) {
|
||||
foreach ($obj->images as $file_path) {
|
||||
\Storage::disk('uploads')->delete($file_path);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -87,8 +87,8 @@ class Ticket extends MyBaseModel
|
|||
|
||||
public function booked(){
|
||||
return $this->hasMany(Attendee::class)
|
||||
->where('is_cancelled',false)
|
||||
->where('is_refunded',false)
|
||||
->where('is_cancelled',0)
|
||||
->where('is_refunded',0)
|
||||
->orderBy('seat_no','asc');
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,63 @@
|
|||
<?php
|
||||
|
||||
namespace App\Notifications;
|
||||
|
||||
use App\Models\HelpTicketComment;
|
||||
use Illuminate\Bus\Queueable;
|
||||
use Illuminate\Notifications\Notification;
|
||||
use Illuminate\Contracts\Queue\ShouldQueue;
|
||||
use Illuminate\Notifications\Messages\MailMessage;
|
||||
|
||||
class TicketCommented extends Notification implements ShouldQueue
|
||||
{
|
||||
use Queueable;
|
||||
|
||||
/**
|
||||
* Create a new notification instance.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
protected $comment;
|
||||
|
||||
public function __construct(HelpTicketComment $comment)
|
||||
{
|
||||
$this->comment = $comment;
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the notification's delivery channels.
|
||||
*
|
||||
* @param mixed $notifiable
|
||||
* @return array
|
||||
*/
|
||||
public function via($notifiable)
|
||||
{
|
||||
return ['mail','database'];
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the mail representation of the notification.
|
||||
*
|
||||
* @param mixed $notifiable
|
||||
* @return \Illuminate\Notifications\Messages\MailMessage
|
||||
*/
|
||||
public function toMail($notifiable)
|
||||
{
|
||||
return (new MailMessage)
|
||||
->line('The introduction to the notification.')
|
||||
->action('Notification Action', url('/'))
|
||||
->line('Thank you for using our application!');
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the array representation of the notification.
|
||||
*
|
||||
* @param mixed $notifiable
|
||||
* @return array
|
||||
*/
|
||||
public function toDatabase($notifiable)
|
||||
{
|
||||
return $this->comment->toArray();
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,88 @@
|
|||
<?php
|
||||
|
||||
namespace App\Notifications;
|
||||
|
||||
use App\Models\HelpTicket;
|
||||
use Illuminate\Bus\Queueable;
|
||||
use Illuminate\Notifications\Notification;
|
||||
use Illuminate\Contracts\Queue\ShouldQueue;
|
||||
use Illuminate\Notifications\Messages\MailMessage;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
|
||||
class TicketReceived extends Notification implements ShouldQueue
|
||||
{
|
||||
use Queueable;
|
||||
|
||||
/**
|
||||
* Create a new notification instance.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
|
||||
/**
|
||||
* The maximum number of exceptions to allow before failing.
|
||||
*
|
||||
* @var int
|
||||
*/
|
||||
public $maxExceptions = 3;
|
||||
|
||||
protected $ticket;
|
||||
|
||||
public function __construct(HelpTicket $ticket)
|
||||
{
|
||||
$this->ticket = $ticket;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the notification's delivery channels.
|
||||
*
|
||||
* @param mixed $notifiable
|
||||
* @return array
|
||||
*/
|
||||
public function via($notifiable)
|
||||
{
|
||||
return $notifiable instanceof HelpTicket ? ['mail'] : ['mail','database'];
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the mail representation of the notification.
|
||||
*
|
||||
* @param mixed $notifiable
|
||||
* @return \Illuminate\Notifications\Messages\MailMessage
|
||||
*/
|
||||
public function toMail($notifiable)
|
||||
{
|
||||
Log::info($notifiable);
|
||||
try{
|
||||
if($notifiable instanceof HelpTicket){
|
||||
return (new MailMessage)->from(config('mail.from_help.address'),config('mail.from.name'))
|
||||
->view('Emails.Help.CustomerNotification',['ticket' => $this->ticket]);
|
||||
}
|
||||
else
|
||||
return (new MailMessage)
|
||||
->from(config('mail.from_help.address'),config('mail.from.name'))
|
||||
->line('You have new ticket')
|
||||
->line($this->ticket->text)
|
||||
->line($this->ticket->created_at)
|
||||
->action('Reply here', route('ticket.replay',['id'=>$this->ticket->id]))
|
||||
->line('Thank you for using our application!');
|
||||
|
||||
|
||||
}
|
||||
catch (\Exception $ex){
|
||||
Log::error($ex);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the array representation of the notification.
|
||||
*
|
||||
* @param mixed $notifiable
|
||||
* @return array
|
||||
*/
|
||||
public function toDatabase($notifiable)
|
||||
{
|
||||
return $this->ticket->toArray();
|
||||
}
|
||||
}
|
||||
|
|
@ -7,7 +7,7 @@ use Illuminate\Notifications\Notification;
|
|||
use Illuminate\Contracts\Queue\ShouldQueue;
|
||||
use Illuminate\Notifications\Messages\MailMessage;
|
||||
|
||||
class UserResetPassword extends Notification
|
||||
class UserResetPassword extends Notification implements ShouldQueue
|
||||
{
|
||||
use Queueable;
|
||||
|
||||
|
|
|
|||
|
|
@ -31,7 +31,7 @@ abstract class PaymentResponse
|
|||
public function errorMessage(){
|
||||
if(!$this->exception_message)
|
||||
{
|
||||
return $this->response_data['ErrorMessage'];}
|
||||
return $this->response_data['errorMessage'];}
|
||||
else
|
||||
return $this->exception_message;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -133,7 +133,7 @@ class EventOrderService
|
|||
|
||||
try {
|
||||
$request_data = $session_data['request_data'][0];
|
||||
$event = Event::findOrFail($order->id);
|
||||
$event = Event::findOrFail($order->event_id);
|
||||
$attendee_increment = 1;
|
||||
$ticket_questions = isset($request_data['ticket_holder_questions']) ? $request_data['ticket_holder_questions'] : [];
|
||||
$order->order_status_id = isset($request_data['pay_offline']) ? config('attendize.order_awaiting_payment') : config('attendize.order_complete');
|
||||
|
|
@ -311,7 +311,7 @@ class EventOrderService
|
|||
$attendee->first_name = $order->first_name;
|
||||
$attendee->last_name = $order->last_name;
|
||||
$attendee->email = $order->email;
|
||||
$attendee->event_id = $order->event_id;
|
||||
$attendee->event_id = $event->id;
|
||||
$attendee->order_id = $order->id;
|
||||
$attendee->ticket_id = $reserved->ticket_id;
|
||||
$attendee->account_id = $order->account_id;
|
||||
|
|
|
|||
|
|
@ -39,7 +39,7 @@ return [
|
|||
|
|
||||
*/
|
||||
|
||||
'url' => env('APP_URL', 'http://bilettm.com'),
|
||||
'url' => env('APP_URL', 'https://bilettm.com'),
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
@ -236,7 +236,7 @@ return [
|
|||
'HttpClient' => Vinelab\Http\Facades\Client::class,
|
||||
'Purifier' => Mews\Purifier\Facades\Purifier::class,
|
||||
'Markdown' => MaxHoffmann\Parsedown\ParsedownFacade::class,
|
||||
'Omnipay' => Omnipay\Omnipay::class,
|
||||
// 'Omnipay' => Omnipay\Omnipay::class,
|
||||
'LaravelLocalization' => Mcamara\LaravelLocalization\Facades\LaravelLocalization::class,
|
||||
'Agent' => Jenssegers\Agent\Facades\Agent::class,
|
||||
],
|
||||
|
|
|
|||
|
|
@ -28,7 +28,7 @@ return [
|
|||
|
|
||||
*/
|
||||
|
||||
'host' => env('MAIL_HOST', 'smtp.sendgrid.net'),
|
||||
'host' => env('MAIL_HOST', 'smtp.yandex.com'),
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
@ -55,7 +55,7 @@ return [
|
|||
*/
|
||||
|
||||
'from' => ['address' => env('MAIL_FROM_ADDRESS'), 'name' => env('MAIL_FROM_NAME')],
|
||||
|
||||
'from_help' => ['address' => env('MAIL_FROM_ADDRESS','maglumat@.bilettm.com'), 'name' => env('MAIL_FROM_NAME','Magulumat')],
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| E-Mail Encryption Protocol
|
||||
|
|
|
|||
|
|
@ -0,0 +1,35 @@
|
|||
<?php
|
||||
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
|
||||
class CreateNotificationsTable extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
Schema::create('notifications', function (Blueprint $table) {
|
||||
$table->uuid('id')->primary();
|
||||
$table->string('type');
|
||||
$table->morphs('notifiable');
|
||||
$table->text('data');
|
||||
$table->timestamp('read_at')->nullable();
|
||||
$table->timestamps();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
Schema::dropIfExists('notifications');
|
||||
}
|
||||
}
|
||||
|
|
@ -156,4 +156,16 @@ return [
|
|||
'checkout_fail_button' => 'Contact us',
|
||||
'redirect_payment_message' =>'Redirecting to payment gateway',
|
||||
'organiser' => 'Organiser',
|
||||
'support' => 'Tech. support',
|
||||
'submit_ticket' => 'Submit ticket',
|
||||
'support_form_text' => 'Lorem ipsum dolor sit amet, consectetur adipisicing elit. Doloremque libero mollitia nemo, nobis odit quasi quidem quisquam sunt. Cupiditate dolores nisi nostrum officiis provident quasi recusandae unde voluptate. Eos, suscipit!',
|
||||
'support_topic' => 'Topic',
|
||||
'choose_support_topic' => 'Please chose topic',
|
||||
'other' => 'Other',
|
||||
'attachment' => 'attachment',
|
||||
'support_subject' => 'Subject',
|
||||
'reply' => 'Reply',
|
||||
'new_ticket' => 'New ticket',
|
||||
'search_ticket' => 'Type ticket code here'
|
||||
|
||||
];
|
||||
|
|
|
|||
|
|
@ -154,7 +154,7 @@ return [
|
|||
'currency_code' => ' манат.',
|
||||
'booking_fee_text' => 'За билет взимается сервисный сбор в размере ',
|
||||
'checkout_fail_title' => 'Проблемы с оплатой',
|
||||
'checkout_fail_text' => '<p>Убедитесь, что средств на счету достаточно и введенные данные достоверны. В случае подтверждения оплаты банком, Вы получите смс-уведомление, а билеты придут на почту. Если в течении 15 минут проблема не решится, Ваш заказ отклонен. Попробуйте купить снова.</p>
|
||||
'checkout_fail_text' => '<p>Убедитесь, что средств на счету достаточно и введенные данные(Имя и фамилия,номер, срок и CVC код карты) достоверны. В случае подтверждения оплаты банком билеты придут на почту. Если в течение 15 минут проблема не решится, Ваш заказ отклонен. Попробуйте купить снова.</p>
|
||||
|
||||
<p>В случае, если оплата прошла успешно, но билеты не пришли на почту,</p>',
|
||||
'checkout_fail_button' => 'свяжитесь с нами!',
|
||||
|
|
@ -163,4 +163,17 @@ return [
|
|||
'search_result' => 'Результат поиска по',
|
||||
'search_showing' => 'Видно на странице',
|
||||
'organiser' => 'Организатор',
|
||||
|
||||
'support' => 'Tech. support',
|
||||
'submit_ticket' => 'Submit ticket',
|
||||
'support_form_text' => '<p>Перед тем как послать заявку в службу технической поддержки, Вы можете поискать решение проблемы в разделе “Вопросы и ответы”.</p>
|
||||
<p>Не создавайте несколько одинаковых заявок и не дублируйте вопросы заявки по e-mail. Сохраняйте терпение и будьте вежливы. Помните! Ни одна заявка не останется без ответа.</p>
|
||||
<p>Время ответа: от 10 минут до 24 часов. </p>',
|
||||
'support_topic' => 'Topic',
|
||||
'choose_support_topic' => 'Please chose topic',
|
||||
'other' => 'Other',
|
||||
'attachment' => 'attachment',
|
||||
'support_subject' => 'Subject',
|
||||
'reply' => 'Reply',
|
||||
'new_ticket' => 'New ticket',
|
||||
];
|
||||
|
|
|
|||
|
|
@ -151,7 +151,7 @@ return [
|
|||
'currency_code' => ' manat.',
|
||||
'booking_fee_text' => 'Her bilet üçin hyzmat ýygymy ',
|
||||
'checkout_fail_title' => 'Tölegiňiz geçmedi.',
|
||||
'checkout_fail_text' => '<p>Siziň tölegeňiz Bank tarapyndan işlenilýän bolup biler. Töleg geçenligi barada habar berýän SMS-e garaşyň.
|
||||
'checkout_fail_text' => '<p>Siziň tölegiňiz Bank tarapyndan işlenilýän bolup biler. Töleg geçenligi barada habar berýän SMS-e garaşyň.
|
||||
Eger-de siziň elektron poçtaňyza 15 minudyň dowamynda biletler gelmedik bolsa, siziň
|
||||
sargydyňyz Bank tarapyndan ýatyrylandyr. Biletleri täzeden satyn almaga synanşyp görüň.</p>
|
||||
<p>Ýalňyşlyk ýüze çykmaklygyň sebäpleri:</p>
|
||||
|
|
@ -168,4 +168,19 @@ sargydyňyz Bank tarapyndan ýatyrylandyr. Biletleri täzeden satyn almaga synan
|
|||
'search_result' => 'Gözleg netijesi:',
|
||||
'search_showing' => 'Sahypada görkezileni',
|
||||
'organiser' => 'Gurnaýjy',
|
||||
|
||||
'support' => 'Tehniki goldaw',
|
||||
'submit_ticket' => 'Arz et',
|
||||
'support_form_text' => '<p>Tehniki goldaw gullugyna ýüz tutmazdan öň, soragyňyzyň çözgüdini "Soraglar we jogaplar" bölüminde gözläp bilersiňiz.</p>
|
||||
<p>Sizden şol bir sorag boýunça birnäçe arza döretmezligiňizi, ýüz tutan wagtyňyz sabyrly we sypaýy bolmagyňyzy haýyş edýäris. Hiç bir ýüzlenme jogapsyz galmaz.</p>
|
||||
<p>
|
||||
Soragyň jogabyna 10 minutdan 24 sagada çenli garaşyp bilersiňiz.
|
||||
</p>',
|
||||
'support_topic' => 'Arza Mowzugy',
|
||||
'choose_support_topic' => 'Mowzuk saýlaň',
|
||||
'other' => 'Başga',
|
||||
'attachment' => 'goşundy',
|
||||
'support_subject' => 'Tema',
|
||||
'reply' => 'Jogapla',
|
||||
'new_ticket' => 'Arza döret',
|
||||
];
|
||||
|
|
|
|||
|
|
@ -0,0 +1,11 @@
|
|||
@extends('en.Emails.Layouts.Master')
|
||||
|
||||
@section('message_content')
|
||||
<div>
|
||||
Здраствуйте,<br><br>
|
||||
Чтобы сбросить ваш пароль, заполните данную форму: {{ route('password.reset', ['token' => $token]) }}.
|
||||
<br><br><br>
|
||||
Спасибо,<br>
|
||||
Команда Bilettm
|
||||
</div>
|
||||
@stop
|
||||
|
|
@ -0,0 +1,30 @@
|
|||
@extends('Emails.Layouts.Master')
|
||||
|
||||
@section('message_content')
|
||||
|
||||
<p>Здравствуйте! {{$first_name}}</p>
|
||||
<p>
|
||||
Спасибо за регистрацию на сайте {{ config('attendize.app_name') }}, в качестве организатора.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Вы можете создать мероприятие на сайте, подтвердив свой адрес электронной почты, используя ссылку ниже.
|
||||
</p>
|
||||
|
||||
<div style="padding: 5px; border: 1px solid #ccc;">
|
||||
{{route('confirmEmail', ['confirmation_code' => $confirmation_code])}}
|
||||
</div>
|
||||
<br><br>
|
||||
<p>
|
||||
Если у вас есть какие-либо вопросы, отзывы или предложения, обращайтесь к нам.
|
||||
</p>
|
||||
<p>
|
||||
Спасибо!
|
||||
</p>
|
||||
|
||||
@stop
|
||||
|
||||
@section('footer')
|
||||
|
||||
|
||||
@stop
|
||||
|
|
@ -0,0 +1,22 @@
|
|||
@extends('Emails.Layouts.Master')
|
||||
@section('message_content')
|
||||
<p>Здравствуйте! {{$first_name}}</p>
|
||||
<p>
|
||||
Спасибо за регистрацию на сайте {{ config('attendize.app_name') }}, в качестве организатора.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Вы можете создать мероприятие на сайте, подтвердив свой адрес электронной почты, используя ссылку ниже.
|
||||
</p>
|
||||
|
||||
<div style="padding: 5px; border: 1px solid #ccc;">
|
||||
{{route('confirmEmail', ['confirmation_code' => $confirmation_code])}}
|
||||
</div>
|
||||
<br><br>
|
||||
<p>
|
||||
Если у вас есть какие-либо вопросы, отзывы или предложения, обращайтесь к нам.
|
||||
</p>
|
||||
<p>
|
||||
Спасибо!
|
||||
</p>
|
||||
@endsection
|
||||
|
|
@ -0,0 +1,28 @@
|
|||
@extends('Emails.Layouts.Master')
|
||||
@section('message_content')
|
||||
<p><strong>Здравствуйте!</strong></p>
|
||||
<p>
|
||||
My poluchili wash zapros <a href="{{route('help.show',['code' => $ticket->code])}}"> No:{{ $ticket->code }}.</a> Ozhidayte uvedomlenie ob otwete.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
S uwazheniem, sluzhba podderzhki klientow
|
||||
</p>
|
||||
|
||||
<div style="margin-top: 10px; background-color: #ccc;">
|
||||
<p><strong>Salam!</strong></p>
|
||||
<p>
|
||||
My poluchili wash zapros <a href="{{route('help.show',['code' => $ticket->code])}}"> No:{{ $ticket->code }}.</a> Ozhidayte uvedomlenie ob otwete.
|
||||
</p>
|
||||
<p>
|
||||
Hormatlamak bilen, tehpodderzhka
|
||||
</p>
|
||||
</div>
|
||||
|
||||
|
||||
@endsection
|
||||
|
||||
@section('footer')
|
||||
|
||||
|
||||
@stop
|
||||
|
|
@ -0,0 +1,71 @@
|
|||
<html xmlns="http://www.w3.org/1999/xhtml" xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta name="viewport" content="width=device-width" />
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
|
||||
<title>
|
||||
@section('subject')
|
||||
Bilettm.com Email
|
||||
@show
|
||||
</title>
|
||||
</head>
|
||||
|
||||
<body style="background-color: #f7f7f7;margin: 0;padding: 0;font-family: "Helvetica Neue", "Helvetica", Helvetica, Arial, sans-serif;font-size: 100%;line-height: 1.6;-webkit-font-smoothing: antialiased;-webkit-text-size-adjust: none;width: 100% !important;height: 100%">
|
||||
|
||||
<!-- body -->
|
||||
<table class="body-wrap" style="background-color: #f7f7f7;margin: 0;padding: 20px;font-family: "Helvetica Neue", "Helvetica", Helvetica, Arial, sans-serif;font-size: 100%;line-height: 1.6;width: 100%">
|
||||
<tr style="margin: 0;padding: 0;font-family: "Helvetica Neue", "Helvetica", Helvetica, Arial, sans-serif;font-size: 100%;line-height: 1.6">
|
||||
<td style="margin: 0;padding: 0;font-family: "Helvetica Neue", "Helvetica", Helvetica, Arial, sans-serif;font-size: 100%;line-height: 1.6"></td>
|
||||
<td class="container" bgcolor="#FFFFFF" style="margin: 0 auto !important;padding: 0;font-family: "Helvetica Neue", "Helvetica", Helvetica, Arial, sans-serif;font-size: 100%;line-height: 1.6;border: 1px solid #f0f0f0;display: block !important;max-width: 800px !important;clear: both !important">
|
||||
|
||||
<!-- content -->
|
||||
<div class="content" style="color: #888;margin: 0 auto;padding: 20px;font-family: "Helvetica Neue", "Helvetica", Helvetica, Arial, sans-serif;font-size: 100%;line-height: 1.6;max-width: 700px;display: block">
|
||||
<table style="margin: 0;padding: 0;font-family: "Helvetica Neue", "Helvetica", Helvetica, Arial, sans-serif;font-size: 100%;line-height: 1.6;width: 100%">
|
||||
<tr style="margin: 0;padding: 0;font-family: "Helvetica Neue", "Helvetica", Helvetica, Arial, sans-serif;font-size: 100%;line-height: 1.6">
|
||||
<td style="text-align: center;padding: 10px;margin: 0;font-family: "Helvetica Neue", "Helvetica", Helvetica, Arial, sans-serif;font-size: 100%;line-height: 1.6">
|
||||
<img style="max-width: 110px;margin: 0;padding: 0;font-family: "Helvetica Neue", "Helvetica", Helvetica, Arial, sans-serif;font-size: 100%;line-height: 1.6" src="{{url(asset(isset($email_logo) ? $email_logo : 'assets/images/logo-dark.png'))}}" />
|
||||
</td>
|
||||
</tr>
|
||||
<tr style="margin: 0;padding: 0;font-family: "Helvetica Neue", "Helvetica", Helvetica, Arial, sans-serif;font-size: 100%;line-height: 1.6">
|
||||
<td style="margin: 0;padding: 0;font-family: "Helvetica Neue", "Helvetica", Helvetica, Arial, sans-serif;font-size: 100%;line-height: 1.6">
|
||||
@yield('message_content')
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<!-- /content -->
|
||||
|
||||
</td>
|
||||
<td style="margin: 0;padding: 0;font-family: "Helvetica Neue", "Helvetica", Helvetica, Arial, sans-serif;font-size: 100%;line-height: 1.6"></td>
|
||||
</tr>
|
||||
</table>
|
||||
<!-- /body -->
|
||||
|
||||
<!-- footer -->
|
||||
<table class="footer-wrap" style="margin: 0;padding: 0;font-family: "Helvetica Neue", "Helvetica", Helvetica, Arial, sans-serif;font-size: 100%;line-height: 1.6;width: 100%;clear: both !important">
|
||||
<tr style="margin: 0;padding: 0;font-family: "Helvetica Neue", "Helvetica", Helvetica, Arial, sans-serif;font-size: 100%;line-height: 1.6">
|
||||
<td style="margin: 0;padding: 0;font-family: "Helvetica Neue", "Helvetica", Helvetica, Arial, sans-serif;font-size: 100%;line-height: 1.6"></td>
|
||||
<td class="container" style="margin: 0 auto !important;padding: 0;font-family: "Helvetica Neue", "Helvetica", Helvetica, Arial, sans-serif;font-size: 100%;line-height: 1.6;display: block !important;max-width: 600px !important;clear: both !important">
|
||||
|
||||
<!-- content -->
|
||||
<div class="content" style="margin: 0 auto;padding: 20px;font-family: "Helvetica Neue", "Helvetica", Helvetica, Arial, sans-serif;font-size: 100%;line-height: 1.6;max-width: 600px;display: block">
|
||||
<table style="margin: 0;padding: 0;font-family: "Helvetica Neue", "Helvetica", Helvetica, Arial, sans-serif;font-size: 100%;line-height: 1.6;width: 100%">
|
||||
<tr style="margin: 0;padding: 0;font-family: "Helvetica Neue", "Helvetica", Helvetica, Arial, sans-serif;font-size: 100%;line-height: 1.6">
|
||||
<td align="center" style="margin: 0;padding: 0;font-family: "Helvetica Neue", "Helvetica", Helvetica, Arial, sans-serif;font-size: 100%;line-height: 1.6">
|
||||
{{--Attendize is provided free of charge on the condition the below hyperlink is left in place.--}}
|
||||
{{--See https://www.attendize.com/license.html for more information.--}}
|
||||
<p style="margin: 0;padding: 0;font-family: "Helvetica Neue", "Helvetica", Helvetica, Arial, sans-serif;font-size: 14px;line-height: 1.6;color: #666;margin-bottom: 10px;font-weight: normal">Работает на <a href="{{url('/')}}" style="margin: 0;padding: 0;font-family: "Helvetica Neue", "Helvetica", Helvetica, Arial, sans-serif;font-size: 100%;line-height: 1.6;color: #999">Bilettm.com</a>.
|
||||
</p>
|
||||
@yield('footer')
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div><!-- /content -->
|
||||
|
||||
</td>
|
||||
<td style="margin: 0;padding: 0;font-family: "Helvetica Neue", "Helvetica", Helvetica, Arial, sans-serif;font-size: 100%;line-height: 1.6"></td>
|
||||
</tr>
|
||||
</table>
|
||||
<!-- /footer -->
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -0,0 +1,121 @@
|
|||
@extends('Emails.Layouts.Master')
|
||||
|
||||
@section('message_content')
|
||||
Здравствуйте,<br><br>
|
||||
|
||||
Ваша покупка билета(ов) на мероприятие <b>{{$order->event->title}}</b> была успешна.<br><br>
|
||||
|
||||
Ваши билеты во вложении данного письма. Вы также, можете просмотреть информацию о заказе и скачать билеты по адресу: {{route('showOrderDetails', ['order_reference' => $order->order_reference])}}
|
||||
|
||||
|
||||
<h3>Информация о заказе</h3>
|
||||
Код заказа: <b>{{$order->order_reference}}</b><br>
|
||||
Имя покупателя: <b>{{$order->full_name}}</b><br>
|
||||
Дата заказа: <b>{{$order->created_at->toDayDateTimeString()}}</b><br>
|
||||
Электронная почта покупателя: <b>{{$order->email}}</b><br>
|
||||
|
||||
<h3>Подробности заказа</h3>
|
||||
<div style="padding:10px; background: #F9F9F9; border: 1px solid #f1f1f1;">
|
||||
<table style="width:100%; margin:10px;">
|
||||
<tr>
|
||||
<td>
|
||||
<b>Билет</b>
|
||||
</td>
|
||||
<td>
|
||||
<b>Количество.</b>
|
||||
</td>
|
||||
<td>
|
||||
<b>Цена</b>
|
||||
</td>
|
||||
<td>
|
||||
<b>Плата за обслуживание</b>
|
||||
</td>
|
||||
<td>
|
||||
<b>Итого</b>
|
||||
</td>
|
||||
</tr>
|
||||
@foreach($order->orderItems as $order_item)
|
||||
<tr>
|
||||
<td>
|
||||
{{$order_item->title}}
|
||||
</td>
|
||||
<td>
|
||||
{{$order_item->quantity}}
|
||||
</td>
|
||||
<td>
|
||||
@if((int)ceil($order_item->unit_price) == 0)
|
||||
БЕСПЛАТНО
|
||||
@else
|
||||
{{money($order_item->unit_price, $order->event->currency)}}
|
||||
@endif
|
||||
|
||||
</td>
|
||||
<td>
|
||||
@if((int)ceil($order_item->unit_price) == 0)
|
||||
-
|
||||
@else
|
||||
{{money($order_item->unit_booking_fee, $order->event->currency)}}
|
||||
@endif
|
||||
|
||||
</td>
|
||||
<td>
|
||||
@if((int)ceil($order_item->unit_price) == 0)
|
||||
БЕСПЛАТНО
|
||||
@else
|
||||
{{money(($order_item->unit_price + $order_item->unit_booking_fee) * ($order_item->quantity), $order->event->currency)}}
|
||||
@endif
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
@endforeach
|
||||
{{-- <tr>--}}
|
||||
{{-- <td>--}}
|
||||
{{-- </td>--}}
|
||||
{{-- <td>--}}
|
||||
{{-- </td>--}}
|
||||
{{-- <td>--}}
|
||||
{{-- </td>--}}
|
||||
{{-- <td>--}}
|
||||
{{-- <b>Промежуточный итог</b>--}}
|
||||
{{-- </td>--}}
|
||||
{{-- <td colspan="2">--}}
|
||||
{{-- {{$orderService->getOrderTotalWithBookingFee(true)}}--}}
|
||||
{{-- </td>--}}
|
||||
{{-- </tr>--}}
|
||||
@if($order->event->organiser->charge_tax == 1)
|
||||
<tr>
|
||||
<td>
|
||||
</td>
|
||||
<td>
|
||||
</td>
|
||||
<td>
|
||||
</td>
|
||||
<td>
|
||||
<b>{{$order->event->organiser->tax_name}}</b>
|
||||
</td>
|
||||
<td colspan="2">
|
||||
{{$orderService->getTaxAmount(true)}}
|
||||
</td>
|
||||
</tr>
|
||||
@endif
|
||||
<tr>
|
||||
<td>
|
||||
</td>
|
||||
<td>
|
||||
</td>
|
||||
<td>
|
||||
</td>
|
||||
<td>
|
||||
<b>Итог</b>
|
||||
</td>
|
||||
<td colspan="2">
|
||||
{{$orderService->getGrandTotal(true)}}
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<br><br>
|
||||
</div>
|
||||
<br><br>
|
||||
Спасибо!
|
||||
@stop
|
||||
|
|
@ -0,0 +1,129 @@
|
|||
@extends('Emails.Layouts.Master')
|
||||
|
||||
@section('message_content')
|
||||
Здравствуйте,<br><br>
|
||||
|
||||
Вы получили новый заказ на мероприятие <b>{{$order->event->title}}</b>.<br><br>
|
||||
|
||||
@if(!$order->is_payment_received)
|
||||
<b>Обратите внимание: этот заказ все еще требует оплаты.</b>
|
||||
<br><br>
|
||||
@endif
|
||||
|
||||
Итог заказа:
|
||||
<br><br>
|
||||
Код заказа: <b>{{$order->order_reference}}</b><br>
|
||||
Имя покупателя: <b>{{$order->full_name}}</b><br>
|
||||
Дата заказа: <b>{{$order->created_at->toDayDateTimeString()}}</b><br>
|
||||
Электронная почта покупателя: <b>{{$order->email}}</b><br>
|
||||
|
||||
|
||||
<h3>Подробности заказа</h3>
|
||||
<div style="padding:10px; background: #F9F9F9; border: 1px solid #f1f1f1;">
|
||||
|
||||
<table style="width:100%; margin:10px;">
|
||||
<tr>
|
||||
<th>
|
||||
Билет
|
||||
</th>
|
||||
<th>
|
||||
Количество
|
||||
</th>
|
||||
<th>
|
||||
Цена
|
||||
</th>
|
||||
<th>
|
||||
Плата за обслуживание
|
||||
</th>
|
||||
<th>
|
||||
Итого
|
||||
</th>
|
||||
</tr>
|
||||
@foreach($order->orderItems as $order_item)
|
||||
<tr>
|
||||
<td>
|
||||
{{$order_item->title}}
|
||||
</td>
|
||||
<td>
|
||||
{{$order_item->quantity}}
|
||||
</td>
|
||||
<td>
|
||||
@if((int)ceil($order_item->unit_price) == 0)
|
||||
БЕСПЛАТНО
|
||||
@else
|
||||
{{money($order_item->unit_price, $order->event->currency)}}
|
||||
@endif
|
||||
|
||||
</td>
|
||||
<td>
|
||||
@if((int)ceil($order_item->unit_price) == 0)
|
||||
-
|
||||
@else
|
||||
{{money($order_item->unit_booking_fee, $order->event->currency)}}
|
||||
@endif
|
||||
|
||||
</td>
|
||||
<td>
|
||||
@if((int)ceil($order_item->unit_price) == 0)
|
||||
БЕСПЛАТНО
|
||||
@else
|
||||
{{money(($order_item->unit_price + $order_item->unit_booking_fee) * ($order_item->quantity), $order->event->currency)}}
|
||||
@endif
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
@endforeach
|
||||
{{-- <tr>--}}
|
||||
{{-- <td>--}}
|
||||
{{-- </td>--}}
|
||||
{{-- <td>--}}
|
||||
{{-- </td>--}}
|
||||
{{-- <td>--}}
|
||||
{{-- </td>--}}
|
||||
{{-- <td>--}}
|
||||
{{-- <b>Промежуточный итог</b>--}}
|
||||
{{-- </td>--}}
|
||||
{{-- <td colspan="2">--}}
|
||||
{{-- {{$orderService->getOrderTotalWithBookingFee(true)}}--}}
|
||||
{{-- </td>--}}
|
||||
{{-- </tr>--}}
|
||||
@if($order->event->organiser->charge_tax == 1)
|
||||
<tr>
|
||||
<td>
|
||||
</td>
|
||||
<td>
|
||||
</td>
|
||||
<td>
|
||||
</td>
|
||||
<td>
|
||||
<b>{{$order->event->organiser->tax_name}}</b>
|
||||
</td>
|
||||
<td colspan="2">
|
||||
{{$orderService->getTaxAmount(true)}}
|
||||
</td>
|
||||
</tr>
|
||||
@endif
|
||||
<tr>
|
||||
<td>
|
||||
</td>
|
||||
<td>
|
||||
</td>
|
||||
<td>
|
||||
</td>
|
||||
<td>
|
||||
<b>Итого</b>
|
||||
</td>
|
||||
<td colspan="2">
|
||||
{{$orderService->getGrandTotal(true)}}
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
|
||||
<br><br>
|
||||
Вы можете управлять этим заказом на: {{route('showEventOrders', ['event_id' => $order->event->id, 'q'=>$order->order_reference])}}
|
||||
<br><br>
|
||||
</div>
|
||||
<br><br>
|
||||
Спасибо!
|
||||
@stop
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
Здравствуйте! {{{$attendee->first_name}}}<br><br>
|
||||
|
||||
Ваши билеты во вложении данного письма.<br><br>
|
||||
|
||||
Вы можете просмотреть информацию о заказе и скачать билеты на {{route('showOrderDetails', ['order_reference' => $attendee->order->order_reference])}} в любое время.<br><br>
|
||||
|
||||
Номер вашего заказа <b>{{$attendee->order->order_reference}}</b>.<br>
|
||||
|
||||
Спасибо!<br>
|
||||
|
||||
|
|
@ -0,0 +1,37 @@
|
|||
@extends('Emails.Layouts.Master')
|
||||
|
||||
@section('message_content')
|
||||
|
||||
<p>Здравствуйте</p>
|
||||
<p>
|
||||
{{$inviter->first_name.' '.$inviter->last_name}} вас добавил к {{ config('attendize.app_name') }}.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Вы можете войти {{url('/login')}}, используя следующие данные:<br><br>
|
||||
|
||||
имя пользователя: <b>{{$user->email}}</b> <br>
|
||||
пароль: <b>{{$temp_password}}</b>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Вы можете изменить свой временный пароль, после входа в систему.
|
||||
</p>
|
||||
|
||||
<div style="padding: 5px; border: 1px solid #ccc;" >
|
||||
{{route('login')}}
|
||||
</div>
|
||||
<br><br>
|
||||
<p>
|
||||
Вы можете изменить свой временный пароль, после входа в систему.
|
||||
</p>
|
||||
<p>
|
||||
Спасибо
|
||||
</p>
|
||||
|
||||
@stop
|
||||
|
||||
@section('footer')
|
||||
|
||||
|
||||
@stop
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
@extends('Emails.Layouts.Master')
|
||||
|
||||
@section('message_content')
|
||||
|
||||
<p>Здравствуйте,</p>
|
||||
<p>Вы получили сообщение от <b>{{ (isset($sender_name) ? $sender_name : $event->organiser->name) }}</b> касательно мероприятия <b>{{ $event->title }}</b>.</p>
|
||||
<p style="padding: 10px; margin:10px; border: 1px solid #f3f3f3;">
|
||||
{{nl2br($message_content)}}
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Вы можете связаться с <b>{{ (isset($sender_name) ? $sender_name : $event->organiser->name) }}</b> по электронному адресу <a href='mailto:{{ (isset($sender_email) ? $sender_email : $event->organiser->email) }}'>{{ (isset($sender_email) ? $sender_email : $event->organiser->email) }}</a>, или ответив на это письмо.
|
||||
</p>
|
||||
@stop
|
||||
|
||||
@section('footer')
|
||||
|
||||
|
||||
@stop
|
||||
|
|
@ -0,0 +1,17 @@
|
|||
@extends('Emails.Layouts.Master')
|
||||
|
||||
@section('message_content')
|
||||
|
||||
<p>Добрый день,</p>
|
||||
<p>
|
||||
Ваш билет на мероприятие <b>{{{$attendee->event->title}}}</b> был отменен.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Вы можете связаться с <b>{{{$attendee->event->organiser->name}}}</b> по электронному адресу <a href='mailto:{{{$attendee->event->organiser->email}}}'>{{{$attendee->event->organiser->email}}}</a> или ответив на это письмо, если вам потребуется дополнительная информация.
|
||||
</p>
|
||||
@stop
|
||||
|
||||
@section('footer')
|
||||
|
||||
@stop
|
||||
|
|
@ -0,0 +1,18 @@
|
|||
@extends('Emails.Layouts.Master')
|
||||
|
||||
@section('message_content')
|
||||
|
||||
<p>Добрый день,</p>
|
||||
<p>
|
||||
Вы получили возврат от имени вашего аннулированного билета за <b>{{{$attendee->event->title}}}</b>.
|
||||
<b>Чтобы сумма билетов: {{{ $refund_amount }}} была возвращена первоначальному получателю, вы должны увидеть платеж в течение нескольких дней.</b>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Вы можете связаться с <b>{{{ $attendee->event->organiser->name }}}</b> прямо на <a href='mailto:{{{$attendee->event->organiser->email}}}'>{{{$attendee->event->organiser->email}}}</a> или ответив на это письмо, если вам потребуется дополнительная информация.
|
||||
</p>
|
||||
@stop
|
||||
|
||||
@section('footer')
|
||||
|
||||
@stop
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
@extends('ru.Emails.Layouts.Master')
|
||||
|
||||
@section('message_content')
|
||||
Здравствуйте {{$attendee->first_name}},<br><br>
|
||||
|
||||
Вы были приглашены на мероприятие <b>{{$attendee->order->event->title}}</b>.<br/>
|
||||
Ваш билет на мероприятие прилагается к этому письму.
|
||||
|
||||
<br><br>
|
||||
С уважением!
|
||||
@stop
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
@extends('ru.Emails.Layouts.Master')
|
||||
|
||||
@section('message_content')
|
||||
Здравствуйте {{$attendee->first_name}},<br><br>
|
||||
|
||||
Ваш билет на мероприятие <b>{{$attendee->order->event->title}}</b> прикреплен к этому письму.
|
||||
|
||||
<br><br>
|
||||
Спасибо!
|
||||
@stop
|
||||
|
|
@ -0,0 +1,125 @@
|
|||
@extends('tk.Emails.Layouts.Master')
|
||||
|
||||
@section('message_content')
|
||||
Salam!<br><br>
|
||||
|
||||
Siziň <b>{{$order->event->title}}</b> çäresi üçin sargydyňyz üstünlikli ýerine ýetirildi.<br><br>
|
||||
|
||||
Siziň petekleriňiz şu poçta berkidilen. Siz şeýle hem petekleriňizi ýüklemek üçin we sargydyňyz barada maglumat görmek üçin şu link boýunça geçip bilersiňiz: {{route('showOrderDetails', ['order_reference' => $order->order_reference])}}
|
||||
|
||||
@if(!$order->is_payment_received)
|
||||
<br><br>
|
||||
<b>Haýyş edýäris üns beriň: Bu sargyt henizem tölegiň ýerine ýetirilmegini talap edýär. Töleg amala aşyrylmagy barada siz şu sahypada maglumat tapyp bilersiňiz: {{route('showOrderDetails', ['order_reference' => $order->order_reference])}}</b>
|
||||
<br><br>
|
||||
@endif
|
||||
<h3>Sargyt barada magumatlar</h3>
|
||||
Sargydyň belgisi: <b>{{$order->order_reference}}</b><br>
|
||||
Sargydyň ady: <b>{{$order->full_name}}</b><br>
|
||||
Sargydyň wagty: <b>{{$order->created_at->toDayDateTimeString()}}</b><br>
|
||||
Sargydyň poçtasy: <b>{{$order->email}}</b><br>
|
||||
<a href="{!! route('downloadCalendarIcs', ['event_id' => $order->event->id]) !!}">Add To Calendar</a>
|
||||
<h3>Sargydyň petekleri</h3>
|
||||
<div style="padding:10px; background: #F9F9F9; border: 1px solid #f1f1f1;">
|
||||
<table style="width:100%;border-collapse: collapse;" border="1" cellpadding="5">
|
||||
<tr>
|
||||
<td>
|
||||
<b>Petek</b>
|
||||
</td>
|
||||
<td>
|
||||
<b>Mukdary</b>
|
||||
</td>
|
||||
<td>
|
||||
<b>Bahasy</b>
|
||||
</td>
|
||||
<td>
|
||||
<b>Salgyt</b>
|
||||
</td>
|
||||
<td>
|
||||
<b>Umumy</b>
|
||||
</td>
|
||||
</tr>
|
||||
@foreach($order->orderItems as $order_item)
|
||||
<tr>
|
||||
<td>
|
||||
{{$order_item->title}}
|
||||
</td>
|
||||
<td>
|
||||
{{$order_item->quantity}}
|
||||
</td>
|
||||
<td>
|
||||
@if((int)ceil($order_item->unit_price) == 0)
|
||||
MUGT
|
||||
@else
|
||||
{{money($order_item->unit_price, $order->event->currency)}}
|
||||
@endif
|
||||
|
||||
</td>
|
||||
<td>
|
||||
@if((int)ceil($order_item->unit_price) == 0)
|
||||
-
|
||||
@else
|
||||
{{money($order_item->unit_booking_fee, $order->event->currency)}}
|
||||
@endif
|
||||
|
||||
</td>
|
||||
<td>
|
||||
@if((int)ceil($order_item->unit_price) == 0)
|
||||
MUGT
|
||||
@else
|
||||
{{money($order_item->unit_total, $order->event->currency)}}
|
||||
@endif
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
@endforeach
|
||||
<tr>
|
||||
<td>
|
||||
</td>
|
||||
<td>
|
||||
</td>
|
||||
<td>
|
||||
</td>
|
||||
<td>
|
||||
<b>Orta umumy</b>
|
||||
</td>
|
||||
<td colspan="2">
|
||||
{{$orderService->getOrderTotalWithBookingFee(true)}}
|
||||
</td>
|
||||
</tr>
|
||||
@if($order->event->organiser->charge_tax == 1)
|
||||
<tr>
|
||||
<td>
|
||||
</td>
|
||||
<td>
|
||||
</td>
|
||||
<td>
|
||||
</td>
|
||||
<td>
|
||||
<b>{{$order->event->organiser->tax_name}}</b>
|
||||
</td>
|
||||
<td colspan="2">
|
||||
{{$orderService->getTaxAmount(true)}}
|
||||
</td>
|
||||
</tr>
|
||||
@endif
|
||||
<tr>
|
||||
<td>
|
||||
</td>
|
||||
<td>
|
||||
</td>
|
||||
<td>
|
||||
</td>
|
||||
<td>
|
||||
<b>Umumy</b>
|
||||
</td>
|
||||
<td colspan="2">
|
||||
{{$orderService->getGrandTotal(true)}}
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<br><br>
|
||||
</div>
|
||||
<br><br>
|
||||
Sag boluň!
|
||||
@stop
|
||||
|
|
@ -0,0 +1,110 @@
|
|||
@extends("backpack::layout")
|
||||
@section('header')
|
||||
<section class="content-header">
|
||||
<h1>
|
||||
<span class="text-capitalize">{!! $crud->getHeading() ?? $crud->entity_name !!}</span>
|
||||
<small>{!! $crud->getSubheading() ?? '#'.$entry->code !!}.</small>
|
||||
</h1>
|
||||
<ol class="breadcrumb">
|
||||
<li><a href="{{ url(config('backpack.base.route_prefix'), 'dashboard') }}">{{ trans('backpack::crud.admin') }}</a></li>
|
||||
<li><a href="{{ url($crud->route) }}" class="text-capitalize">{{ $crud->entity_name_plural }}</a></li>
|
||||
<li class="active">{{ trans('backpack::crud.preview') }}</li>
|
||||
</ol>
|
||||
</section>
|
||||
@endsection
|
||||
|
||||
@section('content')
|
||||
@if ($crud->hasAccess('list'))
|
||||
<a href="{{ url($crud->route) }}" class="hidden-print"><i class="fa fa-angle-double-left"></i> {{ trans('backpack::crud.back_to_all') }} <span>{{ $crud->entity_name_plural }}</span></a>
|
||||
|
||||
<a href="javascript: window.print();" class="pull-right hidden-print"><i class="fa fa-print"></i></a>
|
||||
@endif
|
||||
|
||||
<div class="row">
|
||||
<div class="{{ $crud->getShowContentClass() }}">
|
||||
|
||||
<!-- Default box -->
|
||||
<div class="m-t-20">
|
||||
<div class="box no-padding no-border">
|
||||
<table class="table table-striped">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>
|
||||
<strong>Name :</strong>
|
||||
</td>
|
||||
<td>
|
||||
{{$entry->name}}
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<strong>
|
||||
Email :
|
||||
</strong>
|
||||
</td>
|
||||
<td>{{$entry->email}}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<strong>Phone :</strong>
|
||||
</td>
|
||||
<td>{{$entry->phone}}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>Subject : </strong></td>
|
||||
<td colspan="5">{{$entry->subject}}</td>
|
||||
</tr>
|
||||
|
||||
</tbody>
|
||||
</table>
|
||||
</div><!-- /.box-body -->
|
||||
</div><!-- /.box -->
|
||||
<div class="card">
|
||||
<div class="card-body">
|
||||
<div class="row">
|
||||
<div class="col-lg-8 col-md-8">
|
||||
<div class="alert alert-info" role="alert">
|
||||
<p><strong>{{$entry->owner}} : </strong>{{$entry->text}}</p>
|
||||
<br>
|
||||
@if($entry->attachment)
|
||||
<span><strong>Attachment:</strong> <a href="{{asset('user_content/'.$entry->attachment)}}">{{$entry->attachment}}</a></span>
|
||||
@endif
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@foreach($entry->comments as $comment)
|
||||
<div class="row">
|
||||
<div class="@if($comment->user_id)col-lg-offset-4 col-md-offset-4 @endif col-lg-8 col-md-8">
|
||||
<div class="alert alert-success" role="alert">
|
||||
<p><strong>{{$comment->name}} : </strong>{{$comment->text}}</p><br>
|
||||
@if($comment->attachment)
|
||||
<span><strong>Attachment:</strong> <a href="{{asset('user_content/'.$comment->attachment)}}">{{$comment->attachment}}</a></span>
|
||||
@endif
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endforeach
|
||||
</div>
|
||||
|
||||
<div class="card-footer">
|
||||
<form action="{{route('ticket.replay.post',['id' => $entry->getKey()])}}" method="post">
|
||||
@csrf
|
||||
<div class="form-group custom-theme {{ ($errors->has('text')) ? 'has-error' : '' }}">
|
||||
{!! Form::label('text', trans("ClientSide.text"), array('class'=>'control-label required')) !!}
|
||||
{!! Form::textarea('text', old('text'),
|
||||
array(
|
||||
'class'=>'form-control editable',
|
||||
'rows' => 5
|
||||
)) !!}
|
||||
@if($errors->has('text'))
|
||||
<p class="help-block">{{ $errors->first('text') }}</p>
|
||||
@endif
|
||||
</div>
|
||||
{!! Form::submit('Submit', ['class'=>"btn btn-success"]) !!}
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@endsection
|
||||
|
|
@ -1,124 +0,0 @@
|
|||
@extends('backpack::layout')
|
||||
|
||||
@section('header')
|
||||
<section class="content-header">
|
||||
<h1>
|
||||
<span class="text-capitalize">{!! $crud->getHeading() ?? $crud->entity_name_plural !!}</span>
|
||||
<small id="datatable_info_stack">{!! $crud->getSubheading() ?? trans('backpack::crud.all').'<span>'.$crud->entity_name_plural.'</span> '.trans('backpack::crud.in_the_database') !!}.</small>
|
||||
</h1>
|
||||
<ol class="breadcrumb">
|
||||
<li><a href="{{ url(config('backpack.base.route_prefix'), 'dashboard') }}">{{ trans('backpack::crud.admin') }}</a></li>
|
||||
<li><a href="{{ url($crud->route) }}" class="text-capitalize">{{ $crud->entity_name_plural }}</a></li>
|
||||
<li class="active">{{ trans('backpack::crud.list') }}</li>
|
||||
</ol>
|
||||
</section>
|
||||
@endsection
|
||||
|
||||
@section('content')
|
||||
<!-- Default box -->
|
||||
<div class="row">
|
||||
|
||||
<!-- THE ACTUAL CONTENT -->
|
||||
<div class="{{ $crud->getListContentClass() }}">
|
||||
<div class="">
|
||||
|
||||
<div class="row m-b-10">
|
||||
<div class="col-xs-6">
|
||||
@if ( $crud->buttons->where('stack', 'top')->count() || $crud->exportButtons())
|
||||
<div class="hidden-print {{ $crud->hasAccess('create')?'with-border':'' }}">
|
||||
|
||||
@include('crud::inc.button_stack', ['stack' => 'top'])
|
||||
|
||||
</div>
|
||||
@endif
|
||||
</div>
|
||||
<div class="col-xs-6">
|
||||
<div id="datatable_search_stack" class="pull-right"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{-- Backpack List Filters --}}
|
||||
@if ($crud->filtersEnabled())
|
||||
@include('crud::inc.filters_navbar')
|
||||
@endif
|
||||
|
||||
<div class="overflow-hidden">
|
||||
|
||||
<table id="crudTable" class="box table table-striped table-hover display responsive nowrap m-t-0" cellspacing="0">
|
||||
<thead>
|
||||
<tr>
|
||||
{{-- Table columns --}}
|
||||
@foreach ($crud->columns as $column)
|
||||
<th
|
||||
data-orderable="{{ var_export($column['orderable'], true) }}"
|
||||
data-priority="{{ $column['priority'] }}"
|
||||
data-visible-in-modal="{{ (isset($column['visibleInModal']) && $column['visibleInModal'] == false) ? 'false' : 'true' }}"
|
||||
data-visible="{{ !isset($column['visibleInTable']) ? 'true' : (($column['visibleInTable'] == false) ? 'false' : 'true') }}"
|
||||
data-visible-in-export="{{ (isset($column['visibleInExport']) && $column['visibleInExport'] == false) ? 'false' : 'true' }}"
|
||||
>
|
||||
{!! $column['label'] !!}
|
||||
</th>
|
||||
@endforeach
|
||||
|
||||
@if ( $crud->buttons->where('stack', 'line')->count() )
|
||||
<th data-orderable="false" data-priority="{{ $crud->getActionsColumnPriority() }}" data-visible-in-export="false">{{ trans('backpack::crud.actions') }}</th>
|
||||
@endif
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
</tbody>
|
||||
<tfoot>
|
||||
<tr>
|
||||
{{-- Table columns --}}
|
||||
@foreach ($crud->columns as $column)
|
||||
<th>{!! $column['label'] !!}</th>
|
||||
@endforeach
|
||||
|
||||
@if ( $crud->buttons->where('stack', 'line')->count() )
|
||||
<th>{{ trans('backpack::crud.actions') }}</th>
|
||||
@endif
|
||||
</tr>
|
||||
</tfoot>
|
||||
</table>
|
||||
|
||||
@if ( $crud->buttons->where('stack', 'bottom')->count() )
|
||||
<div id="bottom_buttons" class="hidden-print">
|
||||
@include('crud::inc.button_stack', ['stack' => 'bottom'])
|
||||
|
||||
<div id="datatable_button_stack" class="pull-right text-right hidden-xs"></div>
|
||||
</div>
|
||||
@endif
|
||||
|
||||
</div><!-- /.box-body -->
|
||||
|
||||
</div><!-- /.box -->
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
@endsection
|
||||
|
||||
@section('after_styles')
|
||||
<!-- DATA TABLES -->
|
||||
<link href="https://cdn.datatables.net/1.10.16/css/dataTables.bootstrap.min.css" rel="stylesheet" type="text/css" />
|
||||
<link rel="stylesheet" href="https://cdn.datatables.net/fixedheader/3.1.5/css/fixedHeader.dataTables.min.css">
|
||||
<link rel="stylesheet" href="https://cdn.datatables.net/responsive/2.2.1/css/responsive.bootstrap.min.css">
|
||||
|
||||
<link rel="stylesheet" href="{{ asset('vendor/backpack/crud/css/crud.css') }}">
|
||||
<link rel="stylesheet" href="{{ asset('vendor/backpack/crud/css/form.css') }}">
|
||||
<link rel="stylesheet" href="{{ asset('vendor/backpack/crud/css/list.css') }}">
|
||||
|
||||
<!-- CRUD LIST CONTENT - crud_list_styles stack -->
|
||||
@stack('crud_list_styles')
|
||||
@endsection
|
||||
|
||||
@section('after_scripts')
|
||||
@include('crud::inc.datatables_logic')
|
||||
|
||||
<script src="{{ asset('vendor/backpack/crud/js/crud.js') }}"></script>
|
||||
<script src="{{ asset('vendor/backpack/crud/js/form.js') }}"></script>
|
||||
<script src="{{ asset('vendor/backpack/crud/js/list.js') }}"></script>
|
||||
|
||||
<!-- CRUD LIST CONTENT - crud_list_scripts stack -->
|
||||
@stack('crud_list_scripts')
|
||||
@endsection
|
||||
|
|
@ -38,7 +38,7 @@
|
|||
<li class="list-group-item border-0 pl-0">
|
||||
<a class="text-dark capitalizer" href="{{route('about',['page'=>'partners'])}}">{{__("ClientSide.partners")}}</a></li>
|
||||
<li class="list-group-item border-0 pl-0">
|
||||
<a class="text-dark capitalizer" href="{{route('about',['page'=>'concert_halls'])}}">{{__("ClientSide.concert_halls")}}</a></li>
|
||||
<a class="text-dark capitalizer" href="{{route('venues')}}">{{__("ClientSide.concert_halls")}}</a></li>
|
||||
<li class="list-group-item border-0 pl-0">
|
||||
<a class="text-dark capitalizer" data-toggle="modal" data-target="#exampleModalCenter">{{__("ClientSide.addEvent")}}</a></li>
|
||||
</ul>
|
||||
|
|
|
|||
|
|
@ -4,45 +4,73 @@
|
|||
|
||||
<section class="movie-items-group firts-child my-5">
|
||||
<div class="container">
|
||||
<div class="row justify-content-around">
|
||||
<div>
|
||||
<h1>
|
||||
@lang('ClientSide.support')
|
||||
</h1>
|
||||
</div>
|
||||
<div>
|
||||
<form action="{{route('help.show',['code'=>''])}}" method="GET">
|
||||
{!! Form::text('code', null, array('class'=>'form-control','placeholder' => trans('ClientSide.search_ticket'))) !!}
|
||||
{!! Form::submit('search') !!}
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row justify-content-center">
|
||||
<p class="my-4">@lang('ClientSide.support_form_text')</p>
|
||||
<div class="col-6">
|
||||
<form action="{{route('help.create')}}" method="POST">
|
||||
<form action="{{route('help.create')}}" method="POST" enctype="multipart/form-data">
|
||||
@csrf
|
||||
|
||||
<div class="form-group">
|
||||
{!! Form::label('name', trans("ClientSide.name"), array('class'=>'control-label')) !!}
|
||||
{!! Form::text('name', old('name'),array('class'=>'form-control' )) !!}
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div class="form-group {{ ($errors->has('email')) ? 'has-error' : '' }}">
|
||||
{!! Form::label('email', trans("ClientSide.email"), array('class'=>'control-label required')) !!}
|
||||
{!! Form::text('email', old('email'),array('class'=>'form-control' )) !!}
|
||||
@if($errors->has('email'))
|
||||
<p class="help-block">{{ $errors->first('email') }}</p>
|
||||
@endif
|
||||
</div>
|
||||
<div class="form-group">
|
||||
{!! Form::label('phone', trans("ClientSide.phone"), array('class'=>'control-label')) !!}
|
||||
{!! Form::text('phone', old('phone'),array('class'=>'form-control' )) !!}
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
{!! Form::label('topic', trans("ClientSide.topic"), array('class'=>'control-label')) !!}
|
||||
<div class="form-group {{ ($errors->has('topic')) ? 'has-error' : '' }}">
|
||||
{!! Form::label('topic', trans("ClientSide.support_topic"), array('class'=>'control-label')) !!}
|
||||
{!! Form::select('topic',help_topics(), old('topic'), ['placeholder'=>trans('ClientSide.please_select'),'class' => 'form-control','id'=>'topic']) !!}
|
||||
@if($errors->has('topic'))
|
||||
<p class="help-block">{{ $errors->first('topic') }}</p>
|
||||
@endif
|
||||
</div>
|
||||
<div class="form-group d-none">
|
||||
{!! Form::label('subject', trans("ClientSide.subject"), array('class'=>'control-label')) !!}
|
||||
{!! Form::label('subject', trans("ClientSide.support_subject"), array('class'=>'control-label')) !!}
|
||||
{!! Form::text('subject', old('subject',trans('ClientSide.other')),array('class'=>'form-control' )) !!}
|
||||
</div>
|
||||
<div class="form-group custom-theme">
|
||||
{!! Form::label('text', trans("ClientSide.text"), array('class'=>'control-label required')) !!}
|
||||
<div class="form-group custom-theme {{ ($errors->has('text')) ? 'has-error' : '' }}">
|
||||
{!! Form::label('text', trans("ClientSide.message"), array('class'=>'control-label required')) !!}
|
||||
{!! Form::textarea('text', old('text'),
|
||||
array(
|
||||
'class'=>'form-control editable',
|
||||
'rows' => 5
|
||||
)) !!}
|
||||
@if($errors->has('text'))
|
||||
<p class="help-block">{{ $errors->first('text') }}</p>
|
||||
@endif
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div class="form-group {{ ($errors->has('attachment')) ? 'has-error' : '' }}">
|
||||
{!! Form::label('attachment', trans("ClientSide.attachment"), array('class'=>'control-label')) !!}
|
||||
{!! Form::file('attachment') !!}
|
||||
@if($errors->has('attachment'))
|
||||
<p class="help-block">{{ $errors->first('attachment') }}</p>
|
||||
@endif
|
||||
</div>
|
||||
{!! Form::submit(trans("ClientSide.create_ticket"), ['class'=>"btn btn-success"]) !!}
|
||||
{!! Form::submit(trans("ClientSide.submit_ticket"), ['class'=>"btn btn-success"]) !!}
|
||||
|
||||
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -51,21 +79,25 @@
|
|||
@endsection
|
||||
@section('after_scripts')
|
||||
<script>
|
||||
$('select[name="topic"]').on('change', function() {
|
||||
if(this.value == 0)
|
||||
$('select[name=topic]').on('change', function() {
|
||||
// alert(this.options[this.selectedIndex].text);
|
||||
let subject = $('input[name=subject]');
|
||||
if(this.options[this.selectedIndex].value == 0)
|
||||
{
|
||||
|
||||
$('input[name="subject"]').parent().removeClass('d-none');
|
||||
subject.parent().removeClass('d-none');
|
||||
|
||||
$('input[name="subject"]').val('');
|
||||
subject.val('');
|
||||
|
||||
}else{
|
||||
|
||||
$('input[name="subject"]').parent().addClass('d-none');
|
||||
subject.parent().addClass('d-none');
|
||||
|
||||
$('input[name="subject"]').val(this.options[this.selectedIndex].text);
|
||||
subject.val(this.options[this.selectedIndex].text);
|
||||
}
|
||||
|
||||
subject.trigger('change');
|
||||
|
||||
});
|
||||
</script>
|
||||
|
||||
|
|
|
|||
|
|
@ -3,8 +3,75 @@
|
|||
{{\DaveJamesMiller\Breadcrumbs\Facades\Breadcrumbs::render('help')}}
|
||||
<section class="movie-items-group firts-child my-5">
|
||||
<div class="container">
|
||||
<div class="row justify-content-around">
|
||||
<div>
|
||||
<h1>
|
||||
@lang('ClientSide.support') : {{$ticket->code}}
|
||||
</h1>
|
||||
</div>
|
||||
<div>
|
||||
<form action="{{route('help.show',['code'=>''])}}" method="GET">
|
||||
{!! Form::text('code', null, array('class'=>'form-control')) !!}}
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row justify-content-center">
|
||||
<div class="card">
|
||||
<div class="card-body">
|
||||
<div class="row">
|
||||
<div class="col-lg-8 col-md-8">
|
||||
<div class="alert alert-info" role="alert">
|
||||
<p><strong>{{$ticket->owner}} : </strong> <small>{{$ticket->created_at->diffForHumans()}}</small></p>
|
||||
<p>{{$ticket->text}}</p>
|
||||
<br>
|
||||
@if($ticket->attachment)
|
||||
<span><strong>Attachment:</strong> <a href="{{asset('user_content/'.$entry->attachment)}}">{{$entry->attachment}}</a></span>
|
||||
@endif
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@foreach($ticket->comments as $comment)
|
||||
<div class="row">
|
||||
<div class="@if($comment->user_id)col-lg-offset-4 col-md-offset-4 @endif col-lg-8 col-md-8">
|
||||
<div class="alert alert-success" role="alert">
|
||||
<p><strong>{{$comment->name}} : </strong><small>{{$comment->created_at->diffForHumans()}}</small></p>
|
||||
|
||||
<p>{{$comment->text}}</p>
|
||||
<br>
|
||||
@if($comment->attachment)
|
||||
<span><strong>Attachment:</strong> <a href="{{asset('user_content/'.$comment->attachment)}}">{{$comment->attachment}}</a></span>
|
||||
@endif
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endforeach
|
||||
</div>
|
||||
|
||||
<div class="card-footer">
|
||||
<form action="{{route('help.comment',['code' => $ticket->code])}}" method="post" enctype="multipart/form-data">
|
||||
@csrf
|
||||
<div class="form-group custom-theme {{ ($errors->has('text')) ? 'has-error' : '' }}">
|
||||
{!! Form::label('text', trans("ClientSide.message"), array('class'=>'control-label required')) !!}
|
||||
{!! Form::textarea('text', old('text'),
|
||||
array(
|
||||
'class'=>'form-control editable',
|
||||
'rows' => 5
|
||||
)) !!}
|
||||
@if($errors->has('text'))
|
||||
<p class="help-block">{{ $errors->first('text') }}</p>
|
||||
@endif
|
||||
</div>
|
||||
<div class="form-group {{ ($errors->has('attachment')) ? 'has-error' : '' }}">
|
||||
{!! Form::label('attachment', trans("ClientSide.attachment"), array('class'=>'control-label')) !!}
|
||||
{!! Form::file('attachment') !!}
|
||||
@if($errors->has('attachment'))
|
||||
<p class="help-block">{{ $errors->first('attachment') }}</p>
|
||||
@endif
|
||||
</div>
|
||||
{!! Form::submit(trans("ClientSide.reply"), ['class'=>"btn btn-success"]) !!}
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
|
|
|||
|
|
@ -73,6 +73,7 @@
|
|||
<div class="standard-box" style="position: relative; padding: 20px 0; user-select: none;">
|
||||
<h5 style="font-size: 24px;" class="text-center font-weight-bold">{{$ticket->section->section_no}} <small>{{$ticket->section->description}}</small></h5>
|
||||
|
||||
@if($ticket->section->seats)
|
||||
<table data-id="{{$ticket->id}}" style="margin: auto;position: relative; display: block; overflow-x: scroll"
|
||||
data-content='{!! zanitlananlar($ticket)!!}'>
|
||||
<tbody data-num="{{$ticket->price}}" data-max="{{$ticket->max_per_person}}" style="display: block; width: 1490px; margin: auto">
|
||||
|
|
@ -98,8 +99,9 @@
|
|||
<td></td>
|
||||
</tr>
|
||||
@endforeach
|
||||
</tbody></table>
|
||||
<!--<div class="seats-top-overlay" style="width: 70%"></div>-->
|
||||
</tbody>
|
||||
</table>
|
||||
@endif
|
||||
</div>
|
||||
|
||||
@endif
|
||||
|
|
|
|||
|
|
@ -75,7 +75,7 @@
|
|||
<meta property="availability" content="http://schema.org/InStock">
|
||||
<div class="standard-box" style="position: relative; padding: 20px 0; user-select: none;">
|
||||
<h5 style="font-size: 24px;" class="text-center font-weight-bold">{{$ticket->section->section_no}} <small>{{$ticket->section->description}}</small></h5>
|
||||
|
||||
@if($ticket->section->seats)
|
||||
<table data-id="{{$ticket->id}}" style="text-align: center; margin: auto;display: block;overflow-x: scroll" id="seats"
|
||||
data-content='{!! zanitlananlar($ticket)!!}'>
|
||||
<tbody data-num="{{$ticket->price}}" data-max="{{$ticket->max_per_person}}">
|
||||
|
|
@ -101,8 +101,9 @@
|
|||
<td></td>
|
||||
</tr>
|
||||
@endforeach
|
||||
</tbody></table>
|
||||
<!--<div class="seats-top-overlay" style="width: 70%"></div>-->
|
||||
</tbody>
|
||||
</table>
|
||||
@endif
|
||||
</div>
|
||||
|
||||
@endif
|
||||
|
|
|
|||
|
|
@ -26,7 +26,7 @@
|
|||
<li><a href='{{ backpack_url('section') }}'><i class='fa fa-align-center'></i> <span>Sections</span></a></li>
|
||||
<li><a href='{{ backpack_url('page') }}'><i class='fa fa-file-o'></i> <span>Pages</span></a></li>
|
||||
<li><a href='{{ backpack_url('subscriber') }}'><i class='fa fa-tag'></i> <span>Subscribers</span></a></li>
|
||||
<li><a href='{{ backpack_url('helpTicketCategory') }}'><i class='fa fa-tag'></i> <span>Help Topics</span></a></li>
|
||||
<li><a href='{{ backpack_url('helpTopic') }}'><i class='fa fa-tag'></i> <span>Help Topics</span></a></li>
|
||||
<li><a href='{{ backpack_url('setting') }}'><i class='fa fa-cog'></i> <span>Settings</span></a></li>
|
||||
<li><a href='{{ backpack_url('backup') }}'><i class='fa fa-hdd-o'></i> <span>Backups</span></a></li>
|
||||
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
<!-- This file is used to store topbar (right) items -->
|
||||
<li><a href='{{ backpack_url('event_request') }}'><i class='fa fa-tag'></i> <span>Event Requests</span></a></li>
|
||||
<li><a href='{{ backpack_url('event_request') }}'><span>Event Requests</span></a></li>
|
||||
|
||||
<li><a href='{{ backpack_url('helpTicket') }}'><i class='fa fa-tag'></i> <span>Help Desk</span></a></li>
|
||||
<li><a href='{{ backpack_url('helpTicket') }}'><span>Help Desk <span class="badge badge-danger">{{backpack_user()->unreadNotifications()->count()}}</span></span></a></li>
|
||||
{{--<li class="">
|
||||
<a href="{{ url(config('backpack.base.route_prefix', 'admin')) }}">
|
||||
<i class="fa fa-cog"></i> Direct Link
|
||||
|
|
|
|||
|
|
@ -0,0 +1 @@
|
|||
<a href="{{ route('ticket.replay',['id'=>$entry->getKey()]) }}" class="btn btn-xs btn-default"><i class="fa fa-reply"></i> Replay</a>
|
||||
|
|
@ -24,4 +24,6 @@ Route::group([
|
|||
CRUD::resource('account', 'AccountCrudController');
|
||||
CRUD::resource('helpTopic','HelpTopicCrudController');
|
||||
CRUD::resource('helpTicket','HelpTicketCrudController');
|
||||
Route::get('helpTicket/{id}/replay', 'HelpTicketCrudController@replay')->name('ticket.replay');
|
||||
Route::post('helpTicket/{id}/replay', 'HelpTicketCrudController@replayPost')->name('ticket.replay.post');
|
||||
}); // this should be the absolute last line of this file
|
||||
|
|
|
|||
|
|
@ -40,7 +40,7 @@ Breadcrumbs::for('search',function($trail){
|
|||
|
||||
Breadcrumbs::for('help',function($trail){
|
||||
$trail->parent('home');
|
||||
$trail->push(trans('ClientSide.help'));
|
||||
$trail->push(trans('ClientSide.support'));
|
||||
});
|
||||
|
||||
Breadcrumbs::for('add_event',function($trail){
|
||||
|
|
|
|||
Loading…
Reference in New Issue