Merge branch 'helpdesk' into bilettm

This commit is contained in:
merdan 2020-05-14 17:56:08 +05:00
commit 643f833e10
52 changed files with 1283 additions and 250 deletions

View File

@ -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]);
}
}

View File

@ -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'],

View File

@ -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)

View File

@ -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,

View File

@ -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;

View File

@ -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]);

View File

@ -756,6 +756,7 @@ Route::group(
'as' =>'help.comment',
'uses' => 'HelpDeskController@comment'
]);
// Route::get('/terms_and_conditions', [
// 'as' => 'termsAndConditions',
// function () {

View File

@ -14,7 +14,7 @@ class SendOrderTickets extends Job implements ShouldQueue
use InteractsWithQueue, SerializesModels, DispatchesJobs;
public $order;
public $maxExceptions = 3;
/**
* Create a new job instance.
*

View File

@ -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,

View File

@ -21,4 +21,4 @@ class Mailer
->subject($subject);
});
}
}
}

View File

@ -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);
}
/**

View File

@ -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);
}
}
});
}
}

View File

@ -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);
}
}
});
}
}

View File

@ -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');
}

View File

@ -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();
}
}

View File

@ -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();
}
}

View File

@ -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;

View File

@ -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;
}

View File

@ -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;

View File

@ -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,
],

View File

@ -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

View File

@ -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');
}
}

View File

@ -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'
];

View File

@ -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',
];

View File

@ -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',
];

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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: &quot;Helvetica Neue&quot;, &quot;Helvetica&quot;, 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: &quot;Helvetica Neue&quot;, &quot;Helvetica&quot;, Helvetica, Arial, sans-serif;font-size: 100%;line-height: 1.6;width: 100%">
<tr style="margin: 0;padding: 0;font-family: &quot;Helvetica Neue&quot;, &quot;Helvetica&quot;, Helvetica, Arial, sans-serif;font-size: 100%;line-height: 1.6">
<td style="margin: 0;padding: 0;font-family: &quot;Helvetica Neue&quot;, &quot;Helvetica&quot;, 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: &quot;Helvetica Neue&quot;, &quot;Helvetica&quot;, 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: &quot;Helvetica Neue&quot;, &quot;Helvetica&quot;, Helvetica, Arial, sans-serif;font-size: 100%;line-height: 1.6;max-width: 700px;display: block">
<table style="margin: 0;padding: 0;font-family: &quot;Helvetica Neue&quot;, &quot;Helvetica&quot;, Helvetica, Arial, sans-serif;font-size: 100%;line-height: 1.6;width: 100%">
<tr style="margin: 0;padding: 0;font-family: &quot;Helvetica Neue&quot;, &quot;Helvetica&quot;, Helvetica, Arial, sans-serif;font-size: 100%;line-height: 1.6">
<td style="text-align: center;padding: 10px;margin: 0;font-family: &quot;Helvetica Neue&quot;, &quot;Helvetica&quot;, Helvetica, Arial, sans-serif;font-size: 100%;line-height: 1.6">
<img style="max-width: 110px;margin: 0;padding: 0;font-family: &quot;Helvetica Neue&quot;, &quot;Helvetica&quot;, 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: &quot;Helvetica Neue&quot;, &quot;Helvetica&quot;, Helvetica, Arial, sans-serif;font-size: 100%;line-height: 1.6">
<td style="margin: 0;padding: 0;font-family: &quot;Helvetica Neue&quot;, &quot;Helvetica&quot;, 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: &quot;Helvetica Neue&quot;, &quot;Helvetica&quot;, 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: &quot;Helvetica Neue&quot;, &quot;Helvetica&quot;, Helvetica, Arial, sans-serif;font-size: 100%;line-height: 1.6;width: 100%;clear: both !important">
<tr style="margin: 0;padding: 0;font-family: &quot;Helvetica Neue&quot;, &quot;Helvetica&quot;, Helvetica, Arial, sans-serif;font-size: 100%;line-height: 1.6">
<td style="margin: 0;padding: 0;font-family: &quot;Helvetica Neue&quot;, &quot;Helvetica&quot;, Helvetica, Arial, sans-serif;font-size: 100%;line-height: 1.6"></td>
<td class="container" style="margin: 0 auto !important;padding: 0;font-family: &quot;Helvetica Neue&quot;, &quot;Helvetica&quot;, 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: &quot;Helvetica Neue&quot;, &quot;Helvetica&quot;, Helvetica, Arial, sans-serif;font-size: 100%;line-height: 1.6;max-width: 600px;display: block">
<table style="margin: 0;padding: 0;font-family: &quot;Helvetica Neue&quot;, &quot;Helvetica&quot;, Helvetica, Arial, sans-serif;font-size: 100%;line-height: 1.6;width: 100%">
<tr style="margin: 0;padding: 0;font-family: &quot;Helvetica Neue&quot;, &quot;Helvetica&quot;, Helvetica, Arial, sans-serif;font-size: 100%;line-height: 1.6">
<td align="center" style="margin: 0;padding: 0;font-family: &quot;Helvetica Neue&quot;, &quot;Helvetica&quot;, 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: &quot;Helvetica Neue&quot;, &quot;Helvetica&quot;, 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: &quot;Helvetica Neue&quot;, &quot;Helvetica&quot;, 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: &quot;Helvetica Neue&quot;, &quot;Helvetica&quot;, Helvetica, Arial, sans-serif;font-size: 100%;line-height: 1.6"></td>
</tr>
</table>
<!-- /footer -->
</body>
</html>

View File

@ -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

View File

@ -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

View File

@ -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>

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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

View File

@ -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

View File

@ -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>

View File

@ -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

View File

@ -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>

View File

@ -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

View 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){