mirror of
https://github.com/frappe/books.git
synced 2024-11-08 14:50:56 +00:00
Merge pull request #831 from frappe/bug_fix_recorddate_inconsistency
Bug fix recorddate inconsistency
This commit is contained in:
commit
8db453c2f0
@ -2,3 +2,4 @@
|
||||
**/dist_electron
|
||||
**/dummy/*.json
|
||||
**/.github/ISSUE_TEMPLATE/*.yml
|
||||
**/patches/v0_21_0/*
|
@ -5,6 +5,7 @@ import fixRoundOffAccount from './fixRoundOffAccount';
|
||||
import testPatch from './testPatch';
|
||||
import updateSchemas from './updateSchemas';
|
||||
import setPaymentReferenceType from './setPaymentReferenceType';
|
||||
import fixLedgerDateTime from './v0_21_0/fixLedgerDateTime';
|
||||
|
||||
export default [
|
||||
{ name: 'testPatch', version: '0.5.0-beta.0', patch: testPatch },
|
||||
@ -34,4 +35,9 @@ export default [
|
||||
version: '0.20.1',
|
||||
patch: setPaymentReferenceType,
|
||||
},
|
||||
{
|
||||
name: 'fixLedgerDateTime',
|
||||
version: '0.21.1',
|
||||
patch: fixLedgerDateTime,
|
||||
},
|
||||
] as Patch[];
|
||||
|
34
backend/patches/v0_21_0/fixLedgerDateTime.ts
Normal file
34
backend/patches/v0_21_0/fixLedgerDateTime.ts
Normal 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 */
|
@ -90,12 +90,31 @@ export class LedgerPosting {
|
||||
return map[account];
|
||||
}
|
||||
|
||||
// Timezone inconsistency fix (very ugly code for now)
|
||||
const entryDateTime = this.refDoc.date as string | Date;
|
||||
let dateTimeValue: Date;
|
||||
if (typeof entryDateTime === 'string' || entryDateTime instanceof String) {
|
||||
dateTimeValue = new Date(entryDateTime);
|
||||
} else {
|
||||
dateTimeValue = entryDateTime;
|
||||
}
|
||||
const dtFixedValue = dateTimeValue;
|
||||
const dtMinutes = dtFixedValue.getTimezoneOffset() % 60;
|
||||
const dtHours = (dtFixedValue.getTimezoneOffset() - dtMinutes) / 60;
|
||||
// Forcing the time to always be set to 00:00.000 for locale time
|
||||
dtFixedValue.setHours(0 - dtHours);
|
||||
dtFixedValue.setMinutes(0 - dtMinutes);
|
||||
dtFixedValue.setSeconds(0);
|
||||
dtFixedValue.setMilliseconds(0);
|
||||
|
||||
// end ugly timezone fix code
|
||||
|
||||
const ledgerEntry = this.fyo.doc.getNewDoc(
|
||||
ModelNameEnum.AccountingLedgerEntry,
|
||||
{
|
||||
account: account,
|
||||
party: (this.refDoc.party as string) ?? '',
|
||||
date: this.refDoc.date as string | Date,
|
||||
date: dtFixedValue,
|
||||
referenceType: this.refDoc.schemaName,
|
||||
referenceName: this.refDoc.name!,
|
||||
reverted: this.reverted,
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "frappe-books",
|
||||
"version": "0.21.0",
|
||||
"version": "0.21.1",
|
||||
"description": "Simple book-keeping app for everyone",
|
||||
"author": {
|
||||
"name": "Frappe Technologies Pvt. Ltd.",
|
||||
|
Loading…
Reference in New Issue
Block a user