mirror of
https://github.com/invoiceninja/invoiceninja.git
synced 2024-09-20 00:11:35 +02:00
Utils::processVariables count with year overlaps
Works fine with increments and decrements like this ":MONTH+1 :YEAR", ":QUARTER+1 :YEAR", ":MONTH-1 :YEAR" and ":QUARTER-1 :YEAR" Known issue: Does not work with multiple increments like this one ":MONTH+6 :YEAR, :MONTH+7 :YEAR, :MONTH+8 :YEAR" Signed-off-by: Kristián Feldsam <feldsam@gmail.com>
This commit is contained in:
parent
694de222a7
commit
925bcca617
@ -865,6 +865,7 @@ class Utils
|
|||||||
}
|
}
|
||||||
|
|
||||||
$variables = ['MONTH', 'QUARTER', 'YEAR', 'DATE_MONTH', 'DATE_YEAR'];
|
$variables = ['MONTH', 'QUARTER', 'YEAR', 'DATE_MONTH', 'DATE_YEAR'];
|
||||||
|
$yearOverlap = 0;
|
||||||
for ($i = 0; $i < count($variables); $i++) {
|
for ($i = 0; $i < count($variables); $i++) {
|
||||||
$variable = $variables[$i];
|
$variable = $variables[$i];
|
||||||
$regExp = '/:'.$variable.'[+-]?[\d]*/';
|
$regExp = '/:'.$variable.'[+-]?[\d]*/';
|
||||||
@ -886,6 +887,9 @@ class Utils
|
|||||||
$offset = intval($minArray[1]) * -1;
|
$offset = intval($minArray[1]) * -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$yearOverlap += self::getDateYearOverlap($variable, $offset);
|
||||||
|
if($variable === 'YEAR') $offset += $yearOverlap;
|
||||||
|
|
||||||
$locale = $client && $client->language_id ? $client->language->locale : null;
|
$locale = $client && $client->language_id ? $client->language->locale : null;
|
||||||
$val = self::getDatePart($variable, $offset, $locale);
|
$val = self::getDatePart($variable, $offset, $locale);
|
||||||
$str = str_replace($match, $val, $str);
|
$str = str_replace($match, $val, $str);
|
||||||
@ -911,6 +915,20 @@ class Utils
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static function getDateYearOverlap(string $part, int $offset): int
|
||||||
|
{
|
||||||
|
$offset = intval($offset);
|
||||||
|
|
||||||
|
switch ($part) {
|
||||||
|
case 'MONTH':
|
||||||
|
return self::getMonthYearOverlap($offset);
|
||||||
|
case 'QUARTER':
|
||||||
|
return self::getQuarterYearOverlap($offset);
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
public static function getDateMonth($offset, $locale)
|
public static function getDateMonth($offset, $locale)
|
||||||
{
|
{
|
||||||
$timestamp = time();
|
$timestamp = time();
|
||||||
@ -979,6 +997,34 @@ class Utils
|
|||||||
return 'Q'.$quarter;
|
return 'Q'.$quarter;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static function getMonthYearOverlap(int $offset): int
|
||||||
|
{
|
||||||
|
$month = intval(date('n')) - 1;
|
||||||
|
|
||||||
|
$month += $offset;
|
||||||
|
|
||||||
|
if($month < 0){
|
||||||
|
$month += 1;
|
||||||
|
return (((abs($month) / 12 % 12) + 1) * -1);
|
||||||
|
}
|
||||||
|
|
||||||
|
return ($month / 12 % 12);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static function getQuarterYearOverlap(int $offset): int
|
||||||
|
{
|
||||||
|
$month = intval(date('n')) - 1;
|
||||||
|
$quarter = floor(($month + 3) / 3);
|
||||||
|
$quarter += $offset - 1;
|
||||||
|
|
||||||
|
if($quarter < 0){
|
||||||
|
$quarter += 1;
|
||||||
|
return (((abs($quarter) / 4 % 4) + 1) * -1);
|
||||||
|
}
|
||||||
|
|
||||||
|
return ($quarter / 4 % 4);
|
||||||
|
}
|
||||||
|
|
||||||
private static function getYear($offset)
|
private static function getYear($offset)
|
||||||
{
|
{
|
||||||
$year = intval(date('Y'));
|
$year = intval(date('Y'));
|
||||||
|
@ -59,6 +59,7 @@ function copyObject(orig) {
|
|||||||
function processVariables(str) {
|
function processVariables(str) {
|
||||||
if (!str) return '';
|
if (!str) return '';
|
||||||
var variables = ['MONTH','QUARTER','YEAR'];
|
var variables = ['MONTH','QUARTER','YEAR'];
|
||||||
|
var yearOverlap = 0;
|
||||||
for (var i=0; i<variables.length; i++) {
|
for (var i=0; i<variables.length; i++) {
|
||||||
var variable = variables[i];
|
var variable = variables[i];
|
||||||
var regexp = new RegExp(':' + variable + '[+-]?[\\d]*', 'g');
|
var regexp = new RegExp(':' + variable + '[+-]?[\\d]*', 'g');
|
||||||
@ -74,6 +75,10 @@ function processVariables(str) {
|
|||||||
} else if (match.split('-').length > 1) {
|
} else if (match.split('-').length > 1) {
|
||||||
offset = parseInt(match.split('-')[1]) * -1;
|
offset = parseInt(match.split('-')[1]) * -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
yearOverlap += getDateYearOverlap(variable, offset);
|
||||||
|
if(variable === 'YEAR') offset += yearOverlap;
|
||||||
|
|
||||||
str = str.replace(match, getDatePart(variable, offset));
|
str = str.replace(match, getDatePart(variable, offset));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -95,6 +100,20 @@ function getDatePart(part, offset) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function getDateYearOverlap(part, offset)
|
||||||
|
{
|
||||||
|
offset = parseInt(offset);
|
||||||
|
|
||||||
|
switch (part) {
|
||||||
|
case 'MONTH':
|
||||||
|
return getMonthYearOverlap(offset);
|
||||||
|
case 'QUARTER':
|
||||||
|
return getQuarterYearOverlap(offset);
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
function getMonth(offset) {
|
function getMonth(offset) {
|
||||||
var today = new Date();
|
var today = new Date();
|
||||||
var months = [ "January", "February", "March", "April", "May", "June",
|
var months = [ "January", "February", "March", "April", "May", "June",
|
||||||
@ -125,6 +144,34 @@ function getQuarter(offset) {
|
|||||||
return 'Q' + quarter;
|
return 'Q' + quarter;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function getMonthYearOverlap(offset)
|
||||||
|
{
|
||||||
|
var today = new Date();
|
||||||
|
var month = today.getMonth();
|
||||||
|
month = parseInt(month) + offset;
|
||||||
|
|
||||||
|
if(month < 0){
|
||||||
|
month += 1;
|
||||||
|
return Math.ceil(((Math.abs(month) / 12 % 12) + 1) * -1);
|
||||||
|
}
|
||||||
|
|
||||||
|
return Math.floor(month / 12 % 12);
|
||||||
|
}
|
||||||
|
|
||||||
|
function getQuarterYearOverlap(offset)
|
||||||
|
{
|
||||||
|
var today = new Date();
|
||||||
|
var quarter = Math.floor((today.getMonth() + 3) / 3);
|
||||||
|
quarter += offset - 1;
|
||||||
|
|
||||||
|
if(quarter < 0){
|
||||||
|
quarter += 1;
|
||||||
|
return Math.ceil(((Math.abs(quarter) / 4 % 4) + 1) * -1);
|
||||||
|
}
|
||||||
|
|
||||||
|
return Math.floor(quarter / 4 % 4);
|
||||||
|
}
|
||||||
|
|
||||||
// https://gist.github.com/beiyuu/2029907
|
// https://gist.github.com/beiyuu/2029907
|
||||||
$.fn.selectRange = function(start, end) {
|
$.fn.selectRange = function(start, end) {
|
||||||
var e = document.getElementById($(this).attr('id')); // I don't know why... but $(this) don't want to work today :-/
|
var e = document.getElementById($(this).attr('id')); // I don't know why... but $(this) don't want to work today :-/
|
||||||
|
Loading…
Reference in New Issue
Block a user