ultimatepos/Modules/Essentials/Resources/views/reminder/index.blade.php

367 lines
11 KiB
PHP
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

@extends('layouts.app')
@section('title', __('essentials::lang.reminders'))
@section('content')
@include('essentials::layouts.nav_essentials')
<section class="content">
<div class="row">
<div class="col-md-12">
<div class="box box-solid">
<div class="box-body">
<div class="row">
<div class="col-md-12">
<div class="box-tools pull-right">
<button data-href="#" class="btn btn-sm btn-primary add_reminder">
<i class="fa fa-plus"></i>
@lang('essentials::lang.add_reminder')
</button>
</div>
</div>
</div>
<div id="calendar">
</div>
</div>
</div>
</div>
</div>
@include('essentials::reminder.create')
</section>
<!-- show reminder modal -->
<div class="modal fade view_reminder" id="exampleModalCenter" tabindex="-1" role="dialog" aria-labelledby="exampleModalCenterTitle" aria-hidden="true"></div>
@endsection
@section('javascript')
@php
$fullcalendar_lang_file = session()->get('user.language', config('app.locale') ) . '.js';
@endphp
<!-- TODO -->
@if(file_exists(public_path() . '/plugins/fullcalendar/locale/' . $fullcalendar_lang_file))
<!-- <script src="{{ asset('plugins/fullcalendar/locale/' . $fullcalendar_lang_file . '?v=' . $asset_v) }}"></script> -->
@endif
<script type="text/javascript">
$(document).ready(function(){
var use_persian_calendar = true;
// Force native conversion; j-token behavior is inconsistent in this build.
var has_moment_jalali = false;
var jalali_month_names = ['فروردین', 'اردیبهشت', 'خرداد', 'تیر', 'مرداد', 'شهریور', 'مهر', 'آبان', 'آذر', 'دی', 'بهمن', 'اسفند'];
var persian_digits = ['۰', '۱', '۲', '۳', '۴', '۵', '۶', '۷', '۸', '۹'];
var arabic_digits = ['٠', '١', '٢', '٣', '٤', '٥', '٦', '٧', '٨', '٩'];
function to_english_digits(value) {
value = String(value || '');
for (var i = 0; i < 10; i++) {
value = value.replace(new RegExp(persian_digits[i], 'g'), String(i));
value = value.replace(new RegExp(arabic_digits[i], 'g'), String(i));
}
return value;
}
function parse_localized_int(value) {
return parseInt(to_english_digits(value), 10);
}
function safe_jalali_month_name(month_index) {
var idx = parseInt(month_index, 10);
if (!isFinite(idx) || idx < 1 || idx > 12) {
return 'ماه';
}
return jalali_month_names[idx - 1];
}
function safe_jalali_number(value, fallback) {
var n = parseInt(value, 10);
if (!isFinite(n)) {
return fallback;
}
return n;
}
function gregorian_to_jalali_parts(gy, gm, gd) {
var g_d_m = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334];
var gy2 = (gm > 2) ? (gy + 1) : gy;
var days = 355666 + (365 * gy) + Math.floor((gy2 + 3) / 4) - Math.floor((gy2 + 99) / 100) + Math.floor((gy2 + 399) / 400) + gd + g_d_m[gm - 1];
var jy = -1595 + (33 * Math.floor(days / 12053));
days %= 12053;
jy += 4 * Math.floor(days / 1461);
days %= 1461;
if (days > 365) {
jy += Math.floor((days - 1) / 365);
days = (days - 1) % 365;
}
var jm, jd;
if (days < 186) {
jm = 1 + Math.floor(days / 31);
jd = 1 + (days % 31);
} else {
jm = 7 + Math.floor((days - 186) / 30);
jd = 1 + ((days - 186) % 30);
}
return {jy: jy, jm: jm, jd: jd};
}
function get_jalali_parts_from_moment(m) {
if (has_moment_jalali) {
var parsed = {
jy: parse_localized_int(m.format('jYYYY')),
jm: parse_localized_int(m.format('jM')),
jd: parse_localized_int(m.format('jD'))
};
parsed.jy = safe_jalali_number(parsed.jy, parseInt(m.format('YYYY'), 10));
parsed.jm = safe_jalali_number(parsed.jm, 1);
parsed.jd = safe_jalali_number(parsed.jd, 1);
return parsed;
}
return gregorian_to_jalali_parts(
parseInt(m.format('YYYY'), 10),
parseInt(m.format('M'), 10),
parseInt(m.format('D'), 10)
);
}
function to_persian_digits(value) {
if (typeof persian_number === 'function') {
return persian_number(value);
}
return value;
}
function get_persian_calendar_title(view) {
if (!use_persian_calendar) {
return null;
}
var start = view.intervalStart ? view.intervalStart.clone() : view.start.clone();
var end = view.intervalEnd ? view.intervalEnd.clone().subtract(1, 'day') : view.end.clone().subtract(1, 'day');
var start_j = get_jalali_parts_from_moment(start);
var end_j = get_jalali_parts_from_moment(end);
if (view.name === 'month') {
var anchor_date = $('#calendar').fullCalendar('getDate');
if (anchor_date && anchor_date.isValid && anchor_date.isValid()) {
start_j = get_jalali_parts_from_moment(anchor_date.clone());
}
return to_persian_digits(safe_jalali_month_name(start_j.jm) + ' ' + safe_jalali_number(start_j.jy, '----'));
}
if (view.name === 'agendaWeek') {
if (start_j.jy === end_j.jy && start_j.jm === end_j.jm) {
return to_persian_digits(
safe_jalali_number(start_j.jd, 1) + ' - ' + safe_jalali_number(end_j.jd, 1) + ' ' + safe_jalali_month_name(end_j.jm) + ' ' + safe_jalali_number(end_j.jy, '----')
);
}
return to_persian_digits(
safe_jalali_number(start_j.jd, 1) + ' ' + safe_jalali_month_name(start_j.jm) + ' ' + safe_jalali_number(start_j.jy, '----') +
' - ' +
safe_jalali_number(end_j.jd, 1) + ' ' + safe_jalali_month_name(end_j.jm) + ' ' + safe_jalali_number(end_j.jy, '----')
);
}
return to_persian_digits(safe_jalali_number(start_j.jd, 1) + ' ' + safe_jalali_month_name(start_j.jm) + ' ' + safe_jalali_number(start_j.jy, '----'));
}
function patch_calendar_for_persian(view) {
if (!use_persian_calendar) {
return;
}
var custom_title = get_persian_calendar_title(view);
if (custom_title) {
setTimeout(function() {
$('#calendar').find('.fc-toolbar .fc-center h2, .fc-center h2').text(custom_title);
}, 0);
}
$('#calendar').find('.fc-day-top[data-date]').each(function() {
var date_value = $(this).attr('data-date');
if (!date_value) {
return;
}
var m = moment(date_value, 'YYYY-MM-DD');
if (!m.isValid()) {
return;
}
var j = get_jalali_parts_from_moment(m);
$(this).find('.fc-day-number').text(to_persian_digits(j.jd));
});
}
function refresh_calendar_title_for_persian() {
var current_view = $('#calendar').fullCalendar('getView');
if (current_view) {
patch_calendar_for_persian(current_view);
}
}
//on button click show modal
$('button.add_reminder').click( function(){
$('div.reminder').modal('show');
});
//call function when modal opened
$(".reminder").on('shown.bs.modal', function(){
//reminder_form validate
reminder_form_validator = $("form#reminder_form").validate();
//date-picker (use Persian calendar when enabled)
if (typeof initPersianDatepicker === 'function') {
initPersianDatepicker('form#reminder_form .datepicker', {
autoClose: true
});
} else {
$('form#reminder_form .datepicker').datepicker({
autoclose: true,
format:datepicker_date_format,
});
}
//time
__init_time_field('form#reminder_form input#time');
__init_time_field('form#reminder_form input#end_time');
});
//on hide reset reminder_form
$('.reminder').on('hidden.bs.modal', function(){
reminder_form_validator.destroy();
$("form#reminder_form")[0].reset();
});
//saving reminder
$(document).on("submit", "form#reminder_form", function(e){
e.preventDefault();
var data = $("form#reminder_form").serialize();
var url = $("form#reminder_form").attr("action");
$.ajax({
method: "POST",
url: url,
data: data,
dataType: "json",
success: function(result){
if(result.success == true){
$('.reminder').modal("hide");
reload_calendar();
toastr.success(result.msg);
} else {
toastr.error(result.msg);
}
}
});
});
//full calender
clickCount = 0;
$("#calendar").fullCalendar({
header:{
left: 'prev,next today',
center: 'title',
right: 'month,agendaWeek,agendaDay'
},
locale: (typeof app_locale !== 'undefined' ? app_locale : 'en'),
eventLimit: true,
events: '/essentials/reminder',
// timeFormat: 'h(:mm)t', // like '7p'
eventRender:function(event, element){
var eventname_html = event.name;
element.find('.fc-title').html(eventname_html);
element.attr('data-href', event.url);
element.attr('data-container', '.view_reminder');
element.addClass('btn-modal');
},
dayClick: function(date, jsEvent, view){
clickCount++;
if(clickCount == 2){
$('.reminder').modal("show");
}
var clickTimer = setInterval(function(){
clickCount = 0;
clearInterval(clickTimer);
}, 500);
},
viewRender: function(view) {
patch_calendar_for_persian(view);
},
eventAfterAllRender: function(view) {
patch_calendar_for_persian(view);
}
});
// Ensure title/day numbers stay patched after toolbar navigation.
setTimeout(refresh_calendar_title_for_persian, 0);
$(document).on('click', '#calendar .fc-prev-button, #calendar .fc-next-button, #calendar .fc-today-button, #calendar .fc-month-button, #calendar .fc-agendaWeek-button, #calendar .fc-agendaDay-button', function() {
setTimeout(refresh_calendar_title_for_persian, 0);
});
setInterval(refresh_calendar_title_for_persian, 500);
//reload_calendar
function reload_calendar()
{
$('#calendar').fullCalendar( 'refetchEvents' );
}
//on click show reminder
$(document).on('click', '.btn-modal', function(){
});
//call function when modal opened
$(".view_reminder").on('shown.bs.modal', function(){
$("form#update_reminder_repeat").validate();
});
//delete reminder
$(document).on('click', '#delete_reminder', function(){
var url = $(this).data("href");
swal({
title: LANG.sure,
icon: "warning",
buttons: true,
dangerMode: true,
}).then((confirmed) => {
if (confirmed) {
$.ajax({
method: "DELETE",
url: url,
dataType: "json",
success: function(result){
if(result.success == true){
$('.view_reminder').modal('hide');
reload_calendar();
toastr.success(result.msg);
} else {
toastr.error(result.msg);
}
}
});
}
});
});
//update reminder_repeat
$(document).on('submit', 'form#update_reminder_repeat', function(e){
e.preventDefault();
var url = $("form#update_reminder_repeat").attr("action");
var data = $("form#update_reminder_repeat").serialize();
$.ajax({
method: "PUT",
url: url,
data: data,
dataType: "json",
success: function(result){
if(result.success == true){
$('.view_reminder').modal('hide');
reload_calendar();
toastr.success(result.msg);
} else {
toastr.error(result.msg);
}
}
});
});
});
</script>
@endsection