2
0
mirror of https://github.com/frappe/books.git synced 2024-12-22 10:58:59 +00:00

Changed how datetime was fixed for various timezones

This commit is contained in:
Isaac GC 2024-01-30 21:18:22 -08:00
parent 9b2382a1a8
commit 64ad73b390
5 changed files with 52 additions and 8 deletions

View File

@ -2,3 +2,4 @@
**/dist_electron **/dist_electron
**/dummy/*.json **/dummy/*.json
**/.github/ISSUE_TEMPLATE/*.yml **/.github/ISSUE_TEMPLATE/*.yml
**/patches/v0_21_0/*

View File

@ -5,6 +5,7 @@ import fixRoundOffAccount from './fixRoundOffAccount';
import testPatch from './testPatch'; import testPatch from './testPatch';
import updateSchemas from './updateSchemas'; import updateSchemas from './updateSchemas';
import setPaymentReferenceType from './setPaymentReferenceType'; import setPaymentReferenceType from './setPaymentReferenceType';
import fixLedgerDateTime from './v0_21_0/fixLedgerDateTime';
export default [ export default [
{ name: 'testPatch', version: '0.5.0-beta.0', patch: testPatch }, { name: 'testPatch', version: '0.5.0-beta.0', patch: testPatch },
@ -34,4 +35,9 @@ export default [
version: '0.20.1', version: '0.20.1',
patch: setPaymentReferenceType, patch: setPaymentReferenceType,
}, },
{
name: 'fixLedgerDateTime',
version: '0.21.1',
patch: fixLedgerDateTime,
},
] as Patch[]; ] as Patch[];

View File

@ -0,0 +1,34 @@
import { DatabaseManager } from '../../database/manager';
/* eslint-disable */
async function execute(dm: DatabaseManager) {
await dm.db!.knex!('AccountingLedgerEntry')
.select('name', 'date')
.then((trx: Array<{name: string; date: Date;}> ) => {
trx.forEach(async entry => {
const entryDate = new Date(entry['date']);
const timeZoneOffset = entryDate.getTimezoneOffset();
const offsetMinutes = timeZoneOffset % 60;
const offsetHours = (timeZoneOffset - offsetMinutes) / 60;
let daysToAdd = 0; // If behind or at GMT/Zulu time, don't need to add a day
if (timeZoneOffset < 0) {
// If ahead of GMT/Zulu time, need to advance a day forward first
daysToAdd = 1;
}
entryDate.setDate(entryDate.getDate() + daysToAdd);
entryDate.setHours(0 - offsetHours);
entryDate.setMinutes(0 - offsetMinutes);
entryDate.setSeconds(0);
entryDate.setMilliseconds(0);
await dm.db!.knex!('AccountingLedgerEntry')
.where({ name: entry['name'] })
.update({ date: entryDate.toISOString() });
});
});
}
export default { execute, beforeMigrate: true };
/* eslint-enable */

View File

@ -91,18 +91,21 @@ export class LedgerPosting {
} }
// Timezone inconsistency fix (very ugly code for now) // Timezone inconsistency fix (very ugly code for now)
let entryDateTime = this.refDoc.date as string | Date; const entryDateTime = this.refDoc.date as string | Date;
let dateTimeValue: Date; let dateTimeValue: Date;
if (typeof entryDateTime === 'string' || entryDateTime instanceof String) { if (typeof entryDateTime === 'string' || entryDateTime instanceof String) {
dateTimeValue = new Date(entryDateTime); dateTimeValue = new Date(entryDateTime);
} else { } else {
dateTimeValue = entryDateTime; dateTimeValue = entryDateTime;
} }
let dtFixedValue = dateTimeValue; const dtFixedValue = dateTimeValue;
let dtMinutes = dtFixedValue.getTimezoneOffset() % 60; const dtMinutes = dtFixedValue.getTimezoneOffset() % 60;
let dtHours = (dtFixedValue.getTimezoneOffset() - dtMinutes) / 60; const dtHours = (dtFixedValue.getTimezoneOffset() - dtMinutes) / 60;
dtFixedValue.setHours(dtFixedValue.getHours() - dtHours); // Forcing the time to always be set to 00:00.000 for locale time
dtFixedValue.setMinutes(dtFixedValue.getMinutes() - dtMinutes); dtFixedValue.setHours(0 - dtHours);
dtFixedValue.setMinutes(0 - dtMinutes);
dtFixedValue.setSeconds(0);
dtFixedValue.setMilliseconds(0);
// end ugly timezone fix code // end ugly timezone fix code

View File

@ -1,6 +1,6 @@
{ {
"name": "frappe-books", "name": "frappe-books",
"version": "0.21.0", "version": "0.21.1",
"description": "Simple book-keeping app for everyone", "description": "Simple book-keeping app for everyone",
"author": { "author": {
"name": "Frappe Technologies Pvt. Ltd.", "name": "Frappe Technologies Pvt. Ltd.",