refactor(nestjs): organization build
This commit is contained in:
24
launch.json
Normal file
24
launch.json
Normal file
@@ -0,0 +1,24 @@
|
||||
|
||||
{
|
||||
"version": "0.2.0",
|
||||
"configurations": [
|
||||
{
|
||||
"type": "node",
|
||||
"request": "launch",
|
||||
"name": "Debug Nest Framework",
|
||||
"runtimeExecutable": "npm",
|
||||
"runtimeArgs": [
|
||||
"run",
|
||||
"start:debug",
|
||||
"--",
|
||||
"--inspect-brk"
|
||||
],
|
||||
"autoAttachChildProcesses": true,
|
||||
"restart": true,
|
||||
"sourceMaps": true,
|
||||
"stopOnEntry": false,
|
||||
"console": "integratedTerminal"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
"server2:start": "lerna run start:dev --scope \"@bigcapital/server2\"",
|
||||
"test:watch": "lerna run test:watch",
|
||||
"test:e2e": "lerna run test:e2e",
|
||||
"start:debug": "lerna run start:debug",
|
||||
"prepare": "husky install"
|
||||
},
|
||||
"devDependencies": {
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
import * as path from 'path';
|
||||
import { registerAs } from '@nestjs/config';
|
||||
|
||||
export default registerAs('tenantDatabase', () => ({
|
||||
@@ -6,4 +7,7 @@ export default registerAs('tenantDatabase', () => ({
|
||||
port: process.env.TENANT_DB_PORT || process.env.DB_PORT || 5432,
|
||||
user: process.env.TENANT_DB_USER || process.env.DB_USER,
|
||||
password: process.env.TENANT_DB_PASSWORD || process.env.DB_PASSWORD,
|
||||
dbNamePrefix: process.env.TENANT_DB_NAME_PERFIX || 'bigcapital_tenant_',
|
||||
migrationsDir: path.join(__dirname, '../../database/migrations'),
|
||||
seedsDir: path.join(__dirname, '../../database/migrations'),
|
||||
}));
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
exports.up = function (knex) {
|
||||
return knex.schema.createTable('accounts', (table) => {
|
||||
table.increments('id').comment('Auto-generated id');
|
||||
table.string('name').index();
|
||||
table.string('slug');
|
||||
table.string('account_type').index();
|
||||
table.integer('parent_account_id').unsigned().references('id').inTable('accounts');
|
||||
table.string('code', 10).index();
|
||||
table.text('description');
|
||||
table.boolean('active').defaultTo(true).index();
|
||||
table.integer('index').unsigned();
|
||||
table.boolean('predefined').defaultTo(false).index();
|
||||
table.decimal('amount', 15, 5);
|
||||
table.string('currency_code', 3).index();
|
||||
table.timestamps();
|
||||
}).raw('ALTER TABLE `ACCOUNTS` AUTO_INCREMENT = 1000');
|
||||
};
|
||||
|
||||
exports.down = (knex) => knex.schema.dropTableIfExists('accounts');
|
||||
@@ -0,0 +1,19 @@
|
||||
|
||||
exports.up = function (knex) {
|
||||
return knex.schema.createTable('items_categories', (table) => {
|
||||
table.increments();
|
||||
table.string('name').index();
|
||||
|
||||
table.text('description');
|
||||
table.integer('user_id').unsigned().index();
|
||||
|
||||
table.integer('cost_account_id').unsigned().references('id').inTable('accounts');
|
||||
table.integer('sell_account_id').unsigned().references('id').inTable('accounts');
|
||||
table.integer('inventory_account_id').unsigned().references('id').inTable('accounts');
|
||||
|
||||
table.string('cost_method');
|
||||
table.timestamps();
|
||||
});
|
||||
};
|
||||
|
||||
exports.down = (knex) => knex.schema.dropTableIfExists('items_categories');
|
||||
@@ -0,0 +1,30 @@
|
||||
|
||||
exports.up = function (knex) {
|
||||
return knex.schema.createTable('items', (table) => {
|
||||
table.increments();
|
||||
table.string('name').index();
|
||||
table.string('type').index();
|
||||
table.string('code');
|
||||
table.boolean('sellable').index();
|
||||
table.boolean('purchasable').index();
|
||||
table.decimal('sell_price', 13, 3).unsigned();
|
||||
table.decimal('cost_price', 13, 3).unsigned();
|
||||
table.string('currency_code', 3);
|
||||
table.string('picture_uri');
|
||||
table.integer('cost_account_id').nullable().unsigned().references('id').inTable('accounts');
|
||||
table.integer('sell_account_id').nullable().unsigned().references('id').inTable('accounts');
|
||||
table.integer('inventory_account_id').unsigned().references('id').inTable('accounts');
|
||||
table.text('sell_description').nullable();
|
||||
table.text('purchase_description').nullable();
|
||||
table.integer('quantity_on_hand');
|
||||
table.boolean('landed_cost').nullable();
|
||||
|
||||
table.text('note').nullable();
|
||||
table.boolean('active');
|
||||
table.integer('category_id').unsigned().index().references('id').inTable('items_categories');
|
||||
table.integer('user_id').unsigned().index();
|
||||
table.timestamps();
|
||||
}).raw('ALTER TABLE `ITEMS` AUTO_INCREMENT = 1000');
|
||||
};
|
||||
|
||||
exports.down = (knex) => knex.schema.dropTableIfExists('items');
|
||||
@@ -0,0 +1,15 @@
|
||||
|
||||
exports.up = function (knex) {
|
||||
return knex.schema.createTable('views', (table) => {
|
||||
table.increments();
|
||||
table.string('name').index();
|
||||
table.string('slug').index();
|
||||
table.boolean('predefined');
|
||||
table.string('resource_model').index();
|
||||
table.boolean('favourite');
|
||||
table.string('roles_logic_expression');
|
||||
table.timestamps();
|
||||
}).raw('ALTER TABLE `VIEWS` AUTO_INCREMENT = 1000');
|
||||
};
|
||||
|
||||
exports.down = (knex) => knex.schema.dropTableIfExists('views');
|
||||
@@ -0,0 +1,13 @@
|
||||
|
||||
exports.up = function (knex) {
|
||||
return knex.schema.createTable('settings', (table) => {
|
||||
table.increments();
|
||||
table.integer('user_id').unsigned().index();
|
||||
table.string('group').index();
|
||||
table.string('type');
|
||||
table.string('key').index();
|
||||
table.string('value');
|
||||
}).raw('ALTER TABLE `SETTINGS` AUTO_INCREMENT = 2000');
|
||||
};
|
||||
|
||||
exports.down = (knex) => knex.schema.dropTableIfExists('settings');
|
||||
@@ -0,0 +1,11 @@
|
||||
|
||||
exports.up = function (knex) {
|
||||
return knex.schema.createTable('view_has_columns', (table) => {
|
||||
table.increments();
|
||||
table.integer('view_id').unsigned().index().references('id').inTable('views');
|
||||
table.string('field_key');
|
||||
table.integer('index').unsigned();
|
||||
}).raw('ALTER TABLE `ITEMS_CATEGORIES` AUTO_INCREMENT = 1000');
|
||||
};
|
||||
|
||||
exports.down = (knex) => knex.schema.dropTableIfExists('view_has_columns');
|
||||
@@ -0,0 +1,19 @@
|
||||
exports.up = function (knex) {
|
||||
return knex.schema
|
||||
.createTable('view_roles', (table) => {
|
||||
table.increments();
|
||||
table.integer('index');
|
||||
table.string('field_key').index();
|
||||
table.string('comparator');
|
||||
table.string('value');
|
||||
table
|
||||
.integer('view_id')
|
||||
.unsigned()
|
||||
.index()
|
||||
.references('id')
|
||||
.inTable('views');
|
||||
})
|
||||
.raw('ALTER TABLE `VIEW_ROLES` AUTO_INCREMENT = 1000');
|
||||
};
|
||||
|
||||
exports.down = (knex) => knex.schema.dropTableIfExists('view_roles');
|
||||
@@ -0,0 +1,54 @@
|
||||
|
||||
exports.up = function(knex) {
|
||||
return knex.schema.createTable('contacts', table => {
|
||||
table.increments();
|
||||
|
||||
table.string('contact_service');
|
||||
table.string('contact_type');
|
||||
|
||||
table.decimal('balance', 13, 3).defaultTo(0);
|
||||
table.string('currency_code', 3);
|
||||
|
||||
table.decimal('opening_balance', 13, 3).defaultTo(0);
|
||||
table.date('opening_balance_at');
|
||||
|
||||
table.string('salutation').nullable();
|
||||
table.string('first_name').nullable();
|
||||
table.string('last_name').nullable();
|
||||
table.string('company_name').nullable();
|
||||
|
||||
table.string('display_name');
|
||||
|
||||
table.string('email').nullable();
|
||||
table.string('work_phone').nullable();
|
||||
table.string('personal_phone').nullable();
|
||||
table.string('website').nullable();
|
||||
|
||||
table.string('billing_address_1').nullable();
|
||||
table.string('billing_address_2').nullable();
|
||||
table.string('billing_address_city').nullable();
|
||||
table.string('billing_address_country').nullable();
|
||||
table.string('billing_address_email').nullable();
|
||||
table.string('billing_address_postcode').nullable();
|
||||
table.string('billing_address_phone').nullable();
|
||||
table.string('billing_address_state').nullable(),
|
||||
|
||||
table.string('shipping_address_1').nullable();
|
||||
table.string('shipping_address_2').nullable();
|
||||
table.string('shipping_address_city').nullable();
|
||||
table.string('shipping_address_country').nullable();
|
||||
table.string('shipping_address_email').nullable();
|
||||
table.string('shipping_address_postcode').nullable();
|
||||
table.string('shipping_address_phone').nullable();
|
||||
table.string('shipping_address_state').nullable();
|
||||
|
||||
table.text('note');
|
||||
table.boolean('active').defaultTo(true);
|
||||
|
||||
table.timestamps();
|
||||
});
|
||||
};
|
||||
|
||||
exports.down = function(knex) {
|
||||
return knex.schema.dropTableIfExists('contacts');
|
||||
};
|
||||
@@ -0,0 +1,36 @@
|
||||
exports.up = function (knex) {
|
||||
return knex.schema
|
||||
.createTable('accounts_transactions', (table) => {
|
||||
table.increments();
|
||||
table.decimal('credit', 13, 3);
|
||||
table.decimal('debit', 13, 3);
|
||||
table.string('transaction_type').index();
|
||||
table.string('reference_type').index();
|
||||
table.integer('reference_id').index();
|
||||
table
|
||||
.integer('account_id')
|
||||
.unsigned()
|
||||
.index()
|
||||
.references('id')
|
||||
.inTable('accounts');
|
||||
table.string('contact_type').nullable().index();
|
||||
table.integer('contact_id').unsigned().nullable().index();
|
||||
table.string('transaction_number').nullable().index();
|
||||
table.string('reference_number').nullable().index();
|
||||
table.integer('item_id').unsigned().nullable().index();
|
||||
table.integer('item_quantity').unsigned().nullable().index(),
|
||||
table.string('note');
|
||||
table.integer('user_id').unsigned().index();
|
||||
|
||||
table.integer('index_group').unsigned().index();
|
||||
table.integer('index').unsigned().index();
|
||||
|
||||
table.date('date').index();
|
||||
table.datetime('created_at').index();
|
||||
})
|
||||
.raw('ALTER TABLE `ACCOUNTS_TRANSACTIONS` AUTO_INCREMENT = 1000');
|
||||
};
|
||||
|
||||
exports.down = function (knex) {
|
||||
return knex.schema.dropTableIfExists('accounts_transactions');
|
||||
};
|
||||
@@ -0,0 +1,29 @@
|
||||
exports.up = function (knex) {
|
||||
return knex.schema
|
||||
.createTable('expenses_transactions', (table) => {
|
||||
table.increments();
|
||||
table.string('currency_code', 3);
|
||||
table.text('description');
|
||||
table
|
||||
.integer('payment_account_id')
|
||||
.unsigned()
|
||||
.references('id')
|
||||
.inTable('accounts');
|
||||
table.integer('payee_id').unsigned().references('id').inTable('contacts');
|
||||
table.string('reference_no');
|
||||
|
||||
table.decimal('total_amount', 13, 3);
|
||||
table.decimal('landed_cost_amount', 13, 3).defaultTo(0);
|
||||
table.decimal('allocated_cost_amount', 13, 3).defaultTo(0);
|
||||
|
||||
table.date('published_at').index();
|
||||
table.integer('user_id').unsigned().index();
|
||||
table.date('payment_date').index();
|
||||
table.timestamps();
|
||||
})
|
||||
.raw('ALTER TABLE `EXPENSES_TRANSACTIONS` AUTO_INCREMENT = 1000');
|
||||
};
|
||||
|
||||
exports.down = function (knex) {
|
||||
return knex.schema.dropTableIfExists('expenses');
|
||||
};
|
||||
@@ -0,0 +1,21 @@
|
||||
|
||||
exports.up = function(knex) {
|
||||
return knex.schema.createTable('manual_journals', (table) => {
|
||||
table.increments();
|
||||
table.string('journal_number').index();
|
||||
table.string('reference').index();
|
||||
table.string('journal_type').index();
|
||||
table.decimal('amount', 13, 3);
|
||||
table.string('currency_code', 3);
|
||||
table.date('date').index();
|
||||
table.string('description');
|
||||
table.date('published_at').index();
|
||||
table.string('attachment_file');
|
||||
table.integer('user_id').unsigned().index();
|
||||
table.timestamps();
|
||||
}).raw('ALTER TABLE `MANUAL_JOURNALS` AUTO_INCREMENT = 1000');
|
||||
};
|
||||
|
||||
exports.down = function(knex) {
|
||||
return knex.schema.dropTableIfExists('manual_journals');
|
||||
};
|
||||
@@ -0,0 +1,17 @@
|
||||
|
||||
exports.up = function(knex) {
|
||||
return knex.schema.createTable('manual_journals_entries', (table) => {
|
||||
table.increments();
|
||||
table.decimal('credit', 13, 3);
|
||||
table.decimal('debit', 13, 3);
|
||||
table.integer('index').unsigned();
|
||||
table.integer('account_id').unsigned().index().references('id').inTable('accounts');
|
||||
table.integer('contact_id').unsigned().nullable().index();
|
||||
table.string('note');
|
||||
table.integer('manual_journal_id').unsigned().index().references('id').inTable('manual_journals');
|
||||
}).raw('ALTER TABLE `MANUAL_JOURNALS_ENTRIES` AUTO_INCREMENT = 1000');
|
||||
};
|
||||
|
||||
exports.down = function(knex) {
|
||||
return knex.schema.dropTableIfExists('manual_journals_entries');
|
||||
};
|
||||
@@ -0,0 +1,14 @@
|
||||
|
||||
exports.up = function(knex) {
|
||||
return knex.schema.createTable('currencies', table => {
|
||||
table.increments();
|
||||
table.string('currency_name').index();
|
||||
table.string('currency_code', 4).index();
|
||||
table.string('currency_sign').index();
|
||||
table.timestamps();
|
||||
}).raw('ALTER TABLE `CURRENCIES` AUTO_INCREMENT = 1000');
|
||||
};
|
||||
|
||||
exports.down = function(knex) {
|
||||
return knex.schema.dropTableIfExists('currencies');
|
||||
};
|
||||
@@ -0,0 +1,14 @@
|
||||
|
||||
exports.up = function(knex) {
|
||||
return knex.schema.createTable('exchange_rates', table => {
|
||||
table.increments();
|
||||
table.string('currency_code', 4).index();
|
||||
table.decimal('exchange_rate');
|
||||
table.date('date').index();
|
||||
table.timestamps();
|
||||
}).raw('ALTER TABLE `EXCHANGE_RATES` AUTO_INCREMENT = 1000');
|
||||
};
|
||||
|
||||
exports.down = function(knex) {
|
||||
return knex.schema.dropTableIfExists('exchange_rates');
|
||||
};
|
||||
@@ -0,0 +1,12 @@
|
||||
|
||||
exports.up = function(knex) {
|
||||
return knex.schema.createTable('media', (table) => {
|
||||
table.increments();
|
||||
table.string('attachment_file');
|
||||
table.timestamps();
|
||||
});
|
||||
};
|
||||
|
||||
exports.down = function(knex) {
|
||||
return knex.schema.dropTableIfExists('media');
|
||||
};
|
||||
@@ -0,0 +1,13 @@
|
||||
|
||||
exports.up = function(knex) {
|
||||
return knex.schema.createTable('media_links', table => {
|
||||
table.increments();
|
||||
table.string('model_name').index();
|
||||
table.integer('media_id').unsigned().references('id').inTable('media');
|
||||
table.integer('model_id').unsigned().index();
|
||||
})
|
||||
};
|
||||
|
||||
exports.down = function(knex) {
|
||||
return knex.schema.dropTableIfExists('media_links');
|
||||
};
|
||||
@@ -0,0 +1,29 @@
|
||||
exports.up = function (knex) {
|
||||
return knex.schema
|
||||
.createTable('expense_transaction_categories', (table) => {
|
||||
table.increments();
|
||||
table
|
||||
.integer('expense_account_id')
|
||||
.unsigned()
|
||||
.index()
|
||||
.references('id')
|
||||
.inTable('accounts');
|
||||
table.integer('index').unsigned();
|
||||
table.text('description');
|
||||
table.decimal('amount', 13, 3);
|
||||
table.decimal('allocated_cost_amount', 13, 3).defaultTo(0);
|
||||
table.boolean('landed_cost').defaultTo(false);
|
||||
table
|
||||
.integer('expense_id')
|
||||
.unsigned()
|
||||
.index()
|
||||
.references('id')
|
||||
.inTable('expenses_transactions');
|
||||
table.timestamps();
|
||||
})
|
||||
.raw('ALTER TABLE `EXPENSE_TRANSACTION_CATEGORIES` AUTO_INCREMENT = 1000');
|
||||
};
|
||||
|
||||
exports.down = function (knex) {
|
||||
return knex.schema.dropTableIfExists('expense_transaction_categories');
|
||||
};
|
||||
@@ -0,0 +1,35 @@
|
||||
exports.up = function (knex) {
|
||||
return knex.schema.createTable('sales_estimates', (table) => {
|
||||
table.increments();
|
||||
table.decimal('amount', 13, 3);
|
||||
table.string('currency_code', 3);
|
||||
table
|
||||
.integer('customer_id')
|
||||
.unsigned()
|
||||
.index()
|
||||
.references('id')
|
||||
.inTable('contacts');
|
||||
table.date('estimate_date').index();
|
||||
table.date('expiration_date').index();
|
||||
table.string('reference');
|
||||
table.string('estimate_number').index();
|
||||
table.text('note');
|
||||
table.text('terms_conditions');
|
||||
table.text('send_to_email');
|
||||
|
||||
table.date('delivered_at').index();
|
||||
table.date('approved_at').index();
|
||||
table.date('rejected_at').index();
|
||||
|
||||
table.integer('user_id').unsigned().index();
|
||||
|
||||
table.integer('converted_to_invoice_id').unsigned();
|
||||
table.date('converted_to_invoice_at');
|
||||
|
||||
table.timestamps();
|
||||
});
|
||||
};
|
||||
|
||||
exports.down = function (knex) {
|
||||
return knex.schema.dropTableIfExists('sales_estimates');
|
||||
};
|
||||
@@ -0,0 +1,22 @@
|
||||
|
||||
exports.up = function(knex) {
|
||||
return knex.schema.createTable('sales_receipts', table => {
|
||||
table.increments();
|
||||
table.decimal('amount', 13, 3);
|
||||
table.string('currency_code', 3);
|
||||
table.integer('deposit_account_id').unsigned().index().references('id').inTable('accounts');
|
||||
table.integer('customer_id').unsigned().index().references('id').inTable('contacts');
|
||||
table.date('receipt_date').index();
|
||||
table.string('receipt_number').index();
|
||||
table.string('reference_no').index();
|
||||
table.string('send_to_email');
|
||||
table.text('receipt_message');
|
||||
table.text('statement');
|
||||
table.date('closed_at').index();
|
||||
table.timestamps();
|
||||
})
|
||||
};
|
||||
|
||||
exports.down = function(knex) {
|
||||
return knex.schema.dropTableIfExists('sales_receipts');
|
||||
};
|
||||
@@ -0,0 +1,34 @@
|
||||
exports.up = function (knex) {
|
||||
return knex.schema.createTable('sales_invoices', (table) => {
|
||||
table.increments();
|
||||
table
|
||||
.integer('customer_id')
|
||||
.unsigned()
|
||||
.index()
|
||||
.references('id')
|
||||
.inTable('contacts');
|
||||
|
||||
table.date('invoice_date').index();
|
||||
table.date('due_date');
|
||||
table.string('invoice_no').index();
|
||||
table.string('reference_no');
|
||||
|
||||
table.text('invoice_message');
|
||||
table.text('terms_conditions');
|
||||
|
||||
table.decimal('balance', 13, 3);
|
||||
table.decimal('payment_amount', 13, 3);
|
||||
table.string('currency_code', 3);
|
||||
table.decimal('credited_amount', 13, 3).defaultTo(0);
|
||||
|
||||
table.string('inv_lot_number').index();
|
||||
|
||||
table.date('delivered_at').index();
|
||||
table.integer('user_id').unsigned();
|
||||
table.timestamps();
|
||||
});
|
||||
};
|
||||
|
||||
exports.down = function (knex) {
|
||||
return knex.schema.dropTableIfExists('sales_invoices');
|
||||
};
|
||||
@@ -0,0 +1,30 @@
|
||||
const { knexSnakeCaseMappers } = require('objection');
|
||||
|
||||
exports.up = function (knex) {
|
||||
return knex.schema.createTable('payment_receives', (table) => {
|
||||
table.increments();
|
||||
table
|
||||
.integer('customer_id')
|
||||
.unsigned()
|
||||
.index()
|
||||
.references('id')
|
||||
.inTable('contacts');
|
||||
table.date('payment_date').index();
|
||||
table.decimal('amount', 13, 3).defaultTo(0);
|
||||
table.string('currency_code', 3);
|
||||
table.string('reference_no').index();
|
||||
table
|
||||
.integer('deposit_account_id')
|
||||
.unsigned()
|
||||
.references('id')
|
||||
.inTable('accounts');
|
||||
table.string('payment_receive_no').nullable();
|
||||
table.text('statement');
|
||||
table.integer('user_id').unsigned().index();
|
||||
table.timestamps();
|
||||
});
|
||||
};
|
||||
|
||||
exports.down = function (knex) {
|
||||
return knex.schema.dropTableIfExists('payment_receives');
|
||||
};
|
||||
@@ -0,0 +1,23 @@
|
||||
exports.up = function (knex) {
|
||||
return knex.schema.createTable('payment_receives_entries', (table) => {
|
||||
table.increments();
|
||||
table
|
||||
.integer('payment_receive_id')
|
||||
.unsigned()
|
||||
.index()
|
||||
.references('id')
|
||||
.inTable('payment_receives');
|
||||
table
|
||||
.integer('invoice_id')
|
||||
.unsigned()
|
||||
.index()
|
||||
.references('id')
|
||||
.inTable('sales_invoices');
|
||||
table.decimal('payment_amount', 13, 3).unsigned();
|
||||
table.integer('index').unsigned();
|
||||
});
|
||||
};
|
||||
|
||||
exports.down = function (knex) {
|
||||
return knex.schema.dropTableIfExists('payment_receives_entries');
|
||||
};
|
||||
@@ -0,0 +1,31 @@
|
||||
exports.up = function (knex) {
|
||||
return knex.schema.createTable('bills', (table) => {
|
||||
table.increments();
|
||||
table
|
||||
.integer('vendor_id')
|
||||
.unsigned()
|
||||
.index()
|
||||
.references('id')
|
||||
.inTable('contacts');
|
||||
table.string('bill_number');
|
||||
table.date('bill_date').index();
|
||||
table.date('due_date').index();
|
||||
table.string('reference_no').index();
|
||||
table.string('status').index();
|
||||
table.text('note');
|
||||
table.decimal('amount', 13, 3).defaultTo(0);
|
||||
table.string('currency_code');
|
||||
table.decimal('payment_amount', 13, 3).defaultTo(0);
|
||||
table.decimal('landed_cost_amount', 13, 3).defaultTo(0);
|
||||
table.decimal('allocated_cost_amount', 13, 3).defaultTo(0);
|
||||
table.decimal('credited_amount', 13, 3).defaultTo(0);
|
||||
table.string('inv_lot_number').index();
|
||||
table.date('opened_at').index();
|
||||
table.integer('user_id').unsigned();
|
||||
table.timestamps();
|
||||
});
|
||||
};
|
||||
|
||||
exports.down = function (knex) {
|
||||
return knex.schema.dropTableIfExists('bills');
|
||||
};
|
||||
@@ -0,0 +1,21 @@
|
||||
|
||||
exports.up = function(knex) {
|
||||
return knex.schema.createTable('bills_payments', table => {
|
||||
table.increments();
|
||||
table.integer('vendor_id').unsigned().index().references('id').inTable('contacts');
|
||||
table.decimal('amount', 13, 3).defaultTo(0);
|
||||
table.string('currency_code');
|
||||
table.integer('payment_account_id').unsigned().references('id').inTable('accounts');
|
||||
table.string('payment_number').nullable().index();
|
||||
table.date('payment_date').index();
|
||||
table.string('payment_method');
|
||||
table.string('reference');
|
||||
table.integer('user_id').unsigned().index();
|
||||
table.text('statement');
|
||||
table.timestamps();
|
||||
});
|
||||
};
|
||||
|
||||
exports.down = function(knex) {
|
||||
|
||||
};
|
||||
@@ -0,0 +1,24 @@
|
||||
exports.up = function (knex) {
|
||||
return knex.schema.createTable('inventory_transactions', (table) => {
|
||||
table.increments('id');
|
||||
table.date('date').index();
|
||||
table.string('direction').index();
|
||||
table
|
||||
.integer('item_id')
|
||||
.unsigned()
|
||||
.index()
|
||||
.references('id')
|
||||
.inTable('items');
|
||||
table.integer('quantity').unsigned();
|
||||
table.decimal('rate', 13, 3).unsigned();
|
||||
|
||||
table.string('transaction_type').index();
|
||||
table.integer('transaction_id').unsigned().index();
|
||||
|
||||
table.integer('entry_id').unsigned().index();
|
||||
table.integer('cost_account_id').unsigned();
|
||||
table.timestamps();
|
||||
});
|
||||
};
|
||||
|
||||
exports.down = function (knex) {};
|
||||
@@ -0,0 +1,21 @@
|
||||
exports.up = function (knex) {
|
||||
return knex.schema.createTable('bill_located_costs', (table) => {
|
||||
table.increments();
|
||||
|
||||
table.decimal('amount', 13, 3).unsigned();
|
||||
|
||||
table.integer('fromTransactionId').unsigned();
|
||||
table.string('fromTransactionType');
|
||||
table.integer('fromTransactionEntryId').unsigned();
|
||||
|
||||
table.string('allocationMethod');
|
||||
table.integer('costAccountId').unsigned();
|
||||
table.text('description');
|
||||
|
||||
table.integer('billId').unsigned();
|
||||
|
||||
table.timestamps();
|
||||
});
|
||||
};
|
||||
|
||||
exports.down = function (knex) {};
|
||||
@@ -0,0 +1,11 @@
|
||||
exports.up = function (knex) {
|
||||
return knex.schema.createTable('bill_located_cost_entries', (table) => {
|
||||
table.increments();
|
||||
|
||||
table.decimal('cost', 13, 3).unsigned();
|
||||
table.integer('entry_id').unsigned();
|
||||
table.integer('bill_located_cost_id').unsigned();
|
||||
});
|
||||
};
|
||||
|
||||
exports.down = function (knex) {};
|
||||
@@ -0,0 +1,11 @@
|
||||
exports.up = function (knex) {
|
||||
return knex.schema.createTable('inventory_transaction_meta', (table) => {
|
||||
table.increments('id');
|
||||
table.string('transaction_number');
|
||||
table.text('description');
|
||||
table.integer('inventory_transaction_id').unsigned();
|
||||
});
|
||||
};
|
||||
|
||||
exports.down = function (knex) {};
|
||||
|
||||
@@ -0,0 +1,39 @@
|
||||
exports.up = function (knex) {
|
||||
return knex.schema.createTable('items_entries', (table) => {
|
||||
table.increments();
|
||||
table.string('reference_type').index();
|
||||
table.string('reference_id').index();
|
||||
|
||||
table.integer('index').unsigned();
|
||||
table
|
||||
.integer('item_id')
|
||||
.unsigned()
|
||||
.index()
|
||||
.references('id')
|
||||
.inTable('items');
|
||||
table.text('description');
|
||||
table.integer('discount').unsigned();
|
||||
table.integer('quantity').unsigned();
|
||||
table.integer('rate').unsigned();
|
||||
|
||||
table
|
||||
.integer('sell_account_id')
|
||||
.unsigned()
|
||||
.references('id')
|
||||
.inTable('accounts');
|
||||
table
|
||||
.integer('cost_account_id')
|
||||
.unsigned()
|
||||
.references('id')
|
||||
.inTable('accounts');
|
||||
|
||||
table.boolean('landed_cost').defaultTo(false);
|
||||
table.decimal('allocated_cost_amount', 13, 3).defaultTo(0);
|
||||
|
||||
table.timestamps();
|
||||
});
|
||||
};
|
||||
|
||||
exports.down = function (knex) {
|
||||
return knex.schema.dropTableIfExists('items_entries');
|
||||
};
|
||||
@@ -0,0 +1,23 @@
|
||||
exports.up = function (knex) {
|
||||
return knex.schema.createTable('bills_payments_entries', (table) => {
|
||||
table.increments();
|
||||
table
|
||||
.integer('bill_payment_id')
|
||||
.unsigned()
|
||||
.index()
|
||||
.references('id')
|
||||
.inTable('bills_payments');
|
||||
table
|
||||
.integer('bill_id')
|
||||
.unsigned()
|
||||
.index()
|
||||
.references('id')
|
||||
.inTable('bills');
|
||||
table.decimal('payment_amount', 13, 3).unsigned();
|
||||
table.integer('index').unsigned();
|
||||
});
|
||||
};
|
||||
|
||||
exports.down = function (knex) {
|
||||
return knex.schema.dropTableIfExists('bills_payments_entries');
|
||||
};
|
||||
@@ -0,0 +1,26 @@
|
||||
exports.up = function (knex) {
|
||||
return knex.schema.createTable('inventory_cost_lot_tracker', (table) => {
|
||||
table.increments();
|
||||
table.date('date').index();
|
||||
table.string('direction').index();
|
||||
|
||||
table.integer('item_id').unsigned().index();
|
||||
table.integer('quantity').unsigned().index();
|
||||
table.decimal('rate', 13, 3);
|
||||
table.integer('remaining');
|
||||
table.decimal('cost', 13, 3);
|
||||
|
||||
table.string('transaction_type').index();
|
||||
table.integer('transaction_id').unsigned().index();
|
||||
|
||||
table.integer('entry_id').unsigned().index();
|
||||
table.integer('cost_account_id').unsigned();
|
||||
table.integer('inventory_transaction_id').unsigned().index();
|
||||
|
||||
table.datetime('created_at').index();
|
||||
});
|
||||
};
|
||||
|
||||
exports.down = function (knex) {
|
||||
return knex.schema.dropTableIfExists('inventory_cost_lot_tracker');
|
||||
};
|
||||
@@ -0,0 +1,19 @@
|
||||
|
||||
exports.up = function(knex) {
|
||||
return knex.schema.createTable('inventory_adjustments', table => {
|
||||
table.increments();
|
||||
table.date('date').index();
|
||||
table.string('type').index();
|
||||
table.integer('adjustment_account_id').unsigned().references('id').inTable('accounts');
|
||||
table.string('reason');
|
||||
table.string('reference_no').index();
|
||||
table.string('description');
|
||||
table.integer('user_id').unsigned();
|
||||
table.date('published_at');
|
||||
table.timestamps();
|
||||
});
|
||||
};
|
||||
|
||||
exports.down = function(knex) {
|
||||
return knex.schema.dropTableIfExists('inventory_adjustments');
|
||||
};
|
||||
@@ -0,0 +1,25 @@
|
||||
exports.up = function (knex) {
|
||||
return knex.schema.createTable('inventory_adjustments_entries', (table) => {
|
||||
table.increments();
|
||||
table
|
||||
.integer('adjustment_id')
|
||||
.unsigned()
|
||||
.index()
|
||||
.references('id')
|
||||
.inTable('inventory_adjustments');
|
||||
table.integer('index').unsigned();
|
||||
table
|
||||
.integer('item_id')
|
||||
.unsigned()
|
||||
.index()
|
||||
.references('id')
|
||||
.inTable('items');
|
||||
table.integer('quantity');
|
||||
table.decimal('cost', 13, 3).unsigned();
|
||||
table.decimal('value', 13, 3).unsigned();
|
||||
});
|
||||
};
|
||||
|
||||
exports.down = function (knex) {
|
||||
return knex.schema.dropTableIfExists('inventory_adjustments_entries');
|
||||
};
|
||||
@@ -0,0 +1,18 @@
|
||||
exports.up = (knex) => {
|
||||
return knex.schema.createTable('cashflow_transactions', (table) => {
|
||||
table.increments();
|
||||
table.date('date').index();
|
||||
table.decimal('amount', 13, 3);
|
||||
table.string('reference_no').index();
|
||||
table.string('transaction_type').index();
|
||||
table.string('transaction_number').index();
|
||||
table.string('description');
|
||||
table.date('published_at').index();
|
||||
table.integer('user_id').unsigned().index();
|
||||
table.timestamps();
|
||||
});
|
||||
};
|
||||
|
||||
exports.down = (knex) => {
|
||||
return knex.schema.dropTableIfExists('cashflow_transactions');
|
||||
};
|
||||
@@ -0,0 +1,23 @@
|
||||
exports.up = (knex) => {
|
||||
return knex.schema.createTable('cashflow_transaction_lines', (table) => {
|
||||
table.increments();
|
||||
table.integer('cashflow_transaction_id').unsigned();
|
||||
table
|
||||
.integer('cashflow_account_id')
|
||||
.unsigned()
|
||||
.references('id')
|
||||
.inTable('accounts');
|
||||
table
|
||||
.integer('credit_account_id')
|
||||
.unsigned()
|
||||
.references('id')
|
||||
.inTable('accounts');
|
||||
table.decimal('amount', 13, 3);
|
||||
table.integer('index').unsigned();
|
||||
table.timestamps();
|
||||
});
|
||||
};
|
||||
|
||||
exports.down = (knex) => {
|
||||
return knex.schema.dropTableIfExists('cashflow_transaction_lines');
|
||||
};
|
||||
@@ -0,0 +1,13 @@
|
||||
exports.up = (knex) => {
|
||||
return knex.schema.table('sales_invoices', (table) => {
|
||||
table.decimal('writtenoff_amount', 13, 3);
|
||||
table.date('writtenoff_at').index();
|
||||
});
|
||||
};
|
||||
|
||||
exports.down = (knex) => {
|
||||
return knex.schema.table('sales_invoices', (table) => {
|
||||
table.dropColumn('writtenoff_amount');
|
||||
table.dropColumn('writtenoff_at');
|
||||
});
|
||||
};
|
||||
@@ -0,0 +1,11 @@
|
||||
exports.up = (knex) => {
|
||||
return knex.schema.table('accounts_transactions', (table) => {
|
||||
table.boolean('costable');
|
||||
});
|
||||
};
|
||||
|
||||
exports.down = (knex) => {
|
||||
return knex.schema.table('accounts_transactions', (table) => {
|
||||
table.dropColumn('costable');
|
||||
});
|
||||
};
|
||||
@@ -0,0 +1,21 @@
|
||||
exports.up = (knex) => {
|
||||
return knex.schema
|
||||
.createTable('roles', (table) => {
|
||||
table.increments('id');
|
||||
table.string('name', 255).notNullable();
|
||||
table.string('slug');
|
||||
table.text('description');
|
||||
table.boolean('predefined');
|
||||
})
|
||||
.createTable('role_permissions', (table) => {
|
||||
table.increments('id');
|
||||
table.integer('role_id').unsigned().references('id').inTable('roles');
|
||||
table.string('subject');
|
||||
table.string('ability');
|
||||
table.boolean('value');
|
||||
});
|
||||
};
|
||||
|
||||
exports.down = (knex) => {
|
||||
return knex.schema.dropTable('roles').dropTable('role_permissions');
|
||||
};
|
||||
@@ -0,0 +1,19 @@
|
||||
exports.up = (knex) => {
|
||||
return knex.schema.createTable('users', (table) => {
|
||||
table.increments();
|
||||
table.string('first_name');
|
||||
table.string('last_name');
|
||||
table.string('email').index();
|
||||
table.string('phone_number').index();
|
||||
table.boolean('active').index();
|
||||
table.integer('role_id').unsigned().references('id').inTable('roles');
|
||||
table.integer('system_user_id').unsigned();
|
||||
table.dateTime('invited_at').index();
|
||||
table.dateTime('invite_accepted_at').index();
|
||||
table.timestamps();
|
||||
});
|
||||
};
|
||||
|
||||
exports.down = (knex) => {
|
||||
return knex.schema.dropTableIfExists('users');
|
||||
};
|
||||
@@ -0,0 +1,28 @@
|
||||
exports.up = (knex) => {
|
||||
return knex.schema.createTable('credit_notes', (table) => {
|
||||
table.increments();
|
||||
table
|
||||
.integer('customer_id')
|
||||
.unsigned()
|
||||
.references('id')
|
||||
.inTable('contacts');
|
||||
table.date('credit_note_date');
|
||||
table.string('credit_note_number');
|
||||
table.string('reference_no');
|
||||
table.decimal('amount', 13, 3);
|
||||
|
||||
table.decimal('refunded_amount', 13, 3).defaultTo(0);
|
||||
table.decimal('invoices_amount', 13, 3).defaultTo(0);
|
||||
|
||||
table.string('currency_code', 3);
|
||||
table.text('note');
|
||||
table.text('terms_conditions');
|
||||
table.date('opened_at').index();
|
||||
table.integer('user_id').unsigned().references('id').inTable('users');
|
||||
table.timestamps();
|
||||
});
|
||||
};
|
||||
|
||||
exports.down = (knex) => {
|
||||
return knex.schema.dropTableIfExists('credit_notescredit_notes');
|
||||
};
|
||||
@@ -0,0 +1,23 @@
|
||||
exports.up = (knex) => {
|
||||
return knex.schema.createTable('vendor_credits', (table) => {
|
||||
table.increments();
|
||||
table.integer('vendor_id').unsigned().references('id').inTable('contacts');
|
||||
table.decimal('amount', 13, 3);
|
||||
table.string('currency_code', 3);
|
||||
table.date('vendor_credit_date');
|
||||
table.string('vendor_credit_number');
|
||||
table.string('reference_no');
|
||||
|
||||
table.decimal('refunded_amount', 13, 3).defaultTo(0);
|
||||
table.decimal('invoiced_amount', 13, 3).defaultTo(0);
|
||||
|
||||
table.text('note');
|
||||
table.date('opened_at').index();
|
||||
table.integer('user_id').unsigned().references('id').inTable('users');
|
||||
table.timestamps();
|
||||
});
|
||||
};
|
||||
|
||||
exports.down = (knex) => {
|
||||
return knex.schema.dropTableIfExists('vendor_credits');
|
||||
};
|
||||
@@ -0,0 +1,45 @@
|
||||
exports.up = (knex) => {
|
||||
return knex.schema
|
||||
.createTable('refund_credit_note_transactions', (table) => {
|
||||
table.increments();
|
||||
table.date('date');
|
||||
table
|
||||
.integer('credit_note_id')
|
||||
.unsigned()
|
||||
.references('id')
|
||||
.inTable('credit_notes');
|
||||
table.decimal('amount', 13, 3);
|
||||
table.string('currency_code', 3);
|
||||
table.string('reference_no');
|
||||
table
|
||||
.integer('from_account_id')
|
||||
.unsigned()
|
||||
.references('id')
|
||||
.inTable('accounts');
|
||||
table.text('description');
|
||||
table.timestamps();
|
||||
})
|
||||
.createTable('refund_vendor_credit_transactions', (table) => {
|
||||
table.increments();
|
||||
table.date('date');
|
||||
table
|
||||
.integer('vendor_credit_id')
|
||||
.unsigned()
|
||||
.references('id')
|
||||
.inTable('vendor_credits');
|
||||
table.decimal('amount', 13, 3);
|
||||
table.string('currency_code', 3);
|
||||
table.string('reference_no');
|
||||
table
|
||||
.integer('deposit_account_id')
|
||||
.unsigned()
|
||||
.references('id')
|
||||
.inTable('accounts');
|
||||
table.text('description');
|
||||
table.timestamps();
|
||||
});
|
||||
};
|
||||
|
||||
exports.down = (knex) => {
|
||||
return knex.schema.dropTableIfExists('refund_transactions');
|
||||
};
|
||||
@@ -0,0 +1,35 @@
|
||||
exports.up = (knex) => {
|
||||
return knex.schema
|
||||
.createTable('credit_note_applied_invoice', (table) => {
|
||||
table.increments();
|
||||
table.decimal('amount', 13, 3);
|
||||
table
|
||||
.integer('credit_note_id')
|
||||
.unsigned()
|
||||
.references('id')
|
||||
.inTable('credit_notes');
|
||||
table
|
||||
.integer('invoice_id')
|
||||
.unsigned()
|
||||
.references('id')
|
||||
.inTable('sales_invoices');
|
||||
table.timestamps();
|
||||
})
|
||||
.createTable('vendor_credit_applied_bill', (table) => {
|
||||
table.increments();
|
||||
table.decimal('amount', 13, 3);
|
||||
table
|
||||
.integer('vendor_credit_id')
|
||||
.unsigned()
|
||||
.references('id')
|
||||
.inTable('vendor_credits');
|
||||
table.integer('bill_id').unsigned().references('id').inTable('bills');
|
||||
table.timestamps();
|
||||
});
|
||||
};
|
||||
|
||||
exports.down = (knex) => {
|
||||
return knex.schema
|
||||
.dropTableIfExists('vendor_credit_applied_bill')
|
||||
.dropTableIfExists('credit_note_applied_invoice');
|
||||
};
|
||||
@@ -0,0 +1,24 @@
|
||||
exports.up = (knex) => {
|
||||
return knex.schema.createTable('branches', (table) => {
|
||||
table.increments();
|
||||
|
||||
table.string('name');
|
||||
table.string('code');
|
||||
|
||||
table.string('address');
|
||||
table.string('city');
|
||||
table.string('country');
|
||||
|
||||
table.string('phone_number');
|
||||
table.string('email');
|
||||
table.string('website');
|
||||
|
||||
table.boolean('primary');
|
||||
|
||||
table.timestamps();
|
||||
});
|
||||
};
|
||||
|
||||
exports.down = (knex) => {
|
||||
return knex.schema.dropTableIfExists('branches');
|
||||
};
|
||||
@@ -0,0 +1,59 @@
|
||||
exports.up = (knex) => {
|
||||
return knex.schema
|
||||
.createTable('warehouses', (table) => {
|
||||
table.increments();
|
||||
table.string('name');
|
||||
table.string('code');
|
||||
|
||||
table.string('address');
|
||||
table.string('city');
|
||||
table.string('country');
|
||||
|
||||
table.string('phone_number');
|
||||
table.string('email');
|
||||
table.string('website');
|
||||
|
||||
table.boolean('primary');
|
||||
|
||||
table.timestamps();
|
||||
})
|
||||
.createTable('warehouses_transfers', (table) => {
|
||||
table.increments();
|
||||
table.date('date');
|
||||
table
|
||||
.integer('to_warehouse_id')
|
||||
.unsigned()
|
||||
.references('id')
|
||||
.inTable('warehouses');
|
||||
table
|
||||
.integer('from_warehouse_id')
|
||||
.unsigned()
|
||||
.references('id')
|
||||
.inTable('warehouses');
|
||||
table.string('transaction_number');
|
||||
|
||||
table.date('transfer_initiated_at');
|
||||
table.date('transfer_delivered_at');
|
||||
|
||||
table.timestamps();
|
||||
})
|
||||
.createTable('warehouses_transfers_entries', (table) => {
|
||||
table.increments();
|
||||
table.integer('index');
|
||||
table
|
||||
.integer('warehouse_transfer_id')
|
||||
.unsigned()
|
||||
.references('id')
|
||||
.inTable('warehouses_transfers');
|
||||
table.integer('item_id').unsigned().references('id').inTable('items');
|
||||
table.string('description');
|
||||
table.integer('quantity');
|
||||
table.decimal('cost');
|
||||
});
|
||||
};
|
||||
|
||||
exports.down = (knex) => {
|
||||
return knex.schema
|
||||
.dropTableIfExists('vendor_credit_applied_bill')
|
||||
.dropTableIfExists('credit_note_applied_invoice');
|
||||
};
|
||||
@@ -0,0 +1,16 @@
|
||||
exports.up = (knex) => {
|
||||
return knex.schema.createTable('items_warehouses_quantity', (table) => {
|
||||
table.integer('item_id').unsigned().references('id').inTable('items');
|
||||
table
|
||||
.integer('warehouse_id')
|
||||
.unsigned()
|
||||
.references('id')
|
||||
.inTable('warehouses');
|
||||
|
||||
table.integer('quantity_on_hand');
|
||||
});
|
||||
};
|
||||
|
||||
exports.down = (knex) => {
|
||||
return knex.schema.dropTableIfExists('items_warehouses_quantity');
|
||||
};
|
||||
@@ -0,0 +1,86 @@
|
||||
exports.up = (knex) => {
|
||||
return knex.schema
|
||||
.table('accounts_transactions', (table) => {
|
||||
table
|
||||
.integer('branch_id')
|
||||
.unsigned()
|
||||
.references('id')
|
||||
.inTable('branches');
|
||||
})
|
||||
.table('manual_journals', (table) => {
|
||||
table
|
||||
.integer('branch_id')
|
||||
.unsigned()
|
||||
.references('id')
|
||||
.inTable('branches');
|
||||
})
|
||||
.table('manual_journals_entries', (table) => {
|
||||
table
|
||||
.integer('branch_id')
|
||||
.unsigned()
|
||||
.references('id')
|
||||
.inTable('branches');
|
||||
})
|
||||
.table('expenses_transactions', (table) => {
|
||||
table
|
||||
.integer('branch_id')
|
||||
.unsigned()
|
||||
.references('id')
|
||||
.inTable('branches')
|
||||
.after('user_id');
|
||||
})
|
||||
.table('cashflow_transactions', (table) => {
|
||||
table
|
||||
.integer('branch_id')
|
||||
.unsigned()
|
||||
.references('id')
|
||||
.inTable('branches')
|
||||
.after('user_id');
|
||||
})
|
||||
.table('contacts', (table) => {
|
||||
table
|
||||
.integer('opening_balance_branch_id')
|
||||
.unsigned()
|
||||
.references('id')
|
||||
.inTable('branches')
|
||||
.after('opening_balance_at');
|
||||
})
|
||||
.table('refund_credit_note_transactions', (table) => {
|
||||
table
|
||||
.integer('branch_id')
|
||||
.unsigned()
|
||||
.references('id')
|
||||
.inTable('branches')
|
||||
.after('description');
|
||||
})
|
||||
.table('refund_vendor_credit_transactions', (table) => {
|
||||
table
|
||||
.integer('branch_id')
|
||||
.unsigned()
|
||||
.references('id')
|
||||
.inTable('branches')
|
||||
.after('description');
|
||||
});
|
||||
};
|
||||
|
||||
exports.down = (knex) => {
|
||||
return knex.schema
|
||||
.table('accounts_transactions', (table) => {
|
||||
table.dropColumn('branch_id');
|
||||
})
|
||||
.table('manual_journals', (table) => {
|
||||
table.dropColumn('branch_id');
|
||||
})
|
||||
.table('manual_journals_entries', (table) => {
|
||||
table.dropColumn('branch_id');
|
||||
})
|
||||
.table('cashflow_transactions', (table) => {
|
||||
table.dropColumn('branch_id');
|
||||
})
|
||||
.table('refund_credit_note_transactions', (table) => {
|
||||
table.dropColumn('branch_id');
|
||||
})
|
||||
.table('refund_vendor_credit_transactions', (table) => {
|
||||
table.dropColumn('branch_id');
|
||||
});
|
||||
};
|
||||
@@ -0,0 +1,65 @@
|
||||
exports.up = (knex) => {
|
||||
return knex.schema
|
||||
.table('bills', (table) => {
|
||||
table
|
||||
.integer('warehouse_id')
|
||||
.unsigned()
|
||||
.references('id')
|
||||
.inTable('warehouses');
|
||||
table
|
||||
.integer('branch_id')
|
||||
.unsigned()
|
||||
.references('id')
|
||||
.inTable('branches');
|
||||
})
|
||||
.table('bills_payments', (table) => {
|
||||
table
|
||||
.integer('branch_id')
|
||||
.unsigned()
|
||||
.references('id')
|
||||
.inTable('branches');
|
||||
})
|
||||
.table('vendor_credits', (table) => {
|
||||
table
|
||||
.integer('branch_id')
|
||||
.unsigned()
|
||||
.references('id')
|
||||
.inTable('branches');
|
||||
table
|
||||
.integer('warehouse_id')
|
||||
.unsigned()
|
||||
.references('id')
|
||||
.inTable('warehouses');
|
||||
})
|
||||
.table('inventory_adjustments', (table) => {
|
||||
table
|
||||
.integer('branch_id')
|
||||
.unsigned()
|
||||
.references('id')
|
||||
.inTable('branches');
|
||||
table
|
||||
.integer('warehouse_id')
|
||||
.unsigned()
|
||||
.references('id')
|
||||
.inTable('warehouses');
|
||||
});
|
||||
};
|
||||
|
||||
exports.down = (knex) => {
|
||||
return knex.schema
|
||||
.table('bills', (table) => {
|
||||
table.dropColumn('warehouse_id');
|
||||
table.dropColumn('branch_id');
|
||||
})
|
||||
.table('bills_payments', (table) => {
|
||||
table.dropColumn('branch_id');
|
||||
})
|
||||
.table('vendor_credits', (table) => {
|
||||
table.dropColumn('branch_id');
|
||||
table.dropColumn('warehouse_id');
|
||||
})
|
||||
.table('inventory_adjustments', (table) => {
|
||||
table.dropColumn('branch_id');
|
||||
table.dropColumn('warehouse_id');
|
||||
});
|
||||
};
|
||||
@@ -0,0 +1,84 @@
|
||||
exports.up = (knex) => {
|
||||
return knex.schema
|
||||
.table('sales_invoices', (table) => {
|
||||
table
|
||||
.integer('warehouse_id')
|
||||
.unsigned()
|
||||
.references('id')
|
||||
.inTable('warehouses');
|
||||
|
||||
table
|
||||
.integer('branch_id')
|
||||
.unsigned()
|
||||
.references('id')
|
||||
.inTable('branches');
|
||||
})
|
||||
.table('sales_estimates', (table) => {
|
||||
table
|
||||
.integer('warehouse_id')
|
||||
.unsigned()
|
||||
.references('id')
|
||||
.inTable('warehouses');
|
||||
table
|
||||
.integer('branch_id')
|
||||
.unsigned()
|
||||
.references('id')
|
||||
.inTable('branches');
|
||||
})
|
||||
.table('sales_receipts', (table) => {
|
||||
table
|
||||
.integer('warehouse_id')
|
||||
.unsigned()
|
||||
.references('id')
|
||||
.inTable('warehouses');
|
||||
|
||||
table
|
||||
.integer('branch_id')
|
||||
.unsigned()
|
||||
.references('id')
|
||||
.inTable('branches');
|
||||
})
|
||||
.table('payment_receives', (table) => {
|
||||
table
|
||||
.integer('branch_id')
|
||||
.unsigned()
|
||||
.references('id')
|
||||
.inTable('branches');
|
||||
})
|
||||
.table('credit_notes', (table) => {
|
||||
table
|
||||
.integer('warehouse_id')
|
||||
.unsigned()
|
||||
.references('id')
|
||||
.inTable('warehouses');
|
||||
|
||||
table
|
||||
.integer('branch_id')
|
||||
.unsigned()
|
||||
.references('id')
|
||||
.inTable('branches');
|
||||
});
|
||||
};
|
||||
|
||||
exports.down = (knex) => {
|
||||
return knex.schema
|
||||
.table('sales_invoices', (table) => {
|
||||
table.dropColumn('warehouse_id');
|
||||
table.dropColumn('branch_id');
|
||||
})
|
||||
.table('sales_estimates', (table) => {
|
||||
table.dropColumn('warehouse_id');
|
||||
table.dropColumn('branch_id');
|
||||
})
|
||||
.table('sales_receipts', (table) => {
|
||||
table.dropColumn('warehouse_id');
|
||||
table.dropColumn('branch_id');
|
||||
})
|
||||
.table('payment_receives', (table) => {
|
||||
table.dropColumn('branch_id');
|
||||
})
|
||||
.table('credit_notes', (table) => {
|
||||
table.dropColumn('warehouse_id');
|
||||
table.dropColumn('branch_id');
|
||||
});
|
||||
};
|
||||
@@ -0,0 +1,40 @@
|
||||
exports.up = (knex) => {
|
||||
return knex.schema
|
||||
.table('inventory_transactions', (table) => {
|
||||
table
|
||||
.integer('warehouse_id')
|
||||
.unsigned()
|
||||
.references('id')
|
||||
.inTable('warehouses');
|
||||
table
|
||||
.integer('branch_id')
|
||||
.unsigned()
|
||||
.references('id')
|
||||
.inTable('branches');
|
||||
})
|
||||
.table('inventory_cost_lot_tracker', (table) => {
|
||||
table
|
||||
.integer('warehouse_id')
|
||||
.unsigned()
|
||||
.references('id')
|
||||
.inTable('warehouses');
|
||||
|
||||
table
|
||||
.integer('branch_id')
|
||||
.unsigned()
|
||||
.references('id')
|
||||
.inTable('branches');
|
||||
});
|
||||
};
|
||||
|
||||
exports.down = (knex) => {
|
||||
return knex.schema
|
||||
.table('inventory_transactions', (table) => {
|
||||
table.dropColumn('warehouse_id');
|
||||
table.dropColumn('branch_id');
|
||||
})
|
||||
.table('inventory_cost_lot_tracker', (table) => {
|
||||
table.dropColumn('warehouse_id');
|
||||
table.dropColumn('branch_id');
|
||||
});
|
||||
};
|
||||
@@ -0,0 +1,15 @@
|
||||
exports.up = (knex) => {
|
||||
return knex.schema.table('items_entries', (table) => {
|
||||
table
|
||||
.integer('warehouse_id')
|
||||
.unsigned()
|
||||
.references('id')
|
||||
.inTable('warehouses');
|
||||
});
|
||||
};
|
||||
|
||||
exports.down = (knex) => {
|
||||
return knex.schema.table('items_entries', (table) => {
|
||||
table.dropColumn('warehouse_id');
|
||||
});
|
||||
};
|
||||
@@ -0,0 +1,114 @@
|
||||
exports.up = (knex) => {
|
||||
return knex.schema
|
||||
.table('sales_invoices', (table) => {
|
||||
table.decimal('exchange_rate', 13, 9).after('currency_code');
|
||||
})
|
||||
.table('sales_estimates', (table) => {
|
||||
table.decimal('exchange_rate', 13, 9);
|
||||
})
|
||||
.table('sales_receipts', (table) => {
|
||||
table.decimal('exchange_rate', 13, 9).after('currency_code');
|
||||
})
|
||||
.table('payment_receives', (table) => {
|
||||
table.decimal('exchange_rate', 13, 9).after('currency_code');
|
||||
})
|
||||
.table('bills', (table) => {
|
||||
table.decimal('exchange_rate', 13, 9).after('currency_code');
|
||||
})
|
||||
.table('bills_payments', (table) => {
|
||||
table.decimal('exchange_rate', 13, 9).after('currency_code');
|
||||
})
|
||||
.table('credit_notes', (table) => {
|
||||
table.decimal('exchange_rate', 13, 9).after('currency_code');
|
||||
})
|
||||
.table('vendor_credits', (table) => {
|
||||
table.decimal('exchange_rate', 13, 9).after('currency_code');
|
||||
})
|
||||
.table('accounts_transactions', (table) => {
|
||||
table.string('currency_code', 3).after('debit');
|
||||
table.decimal('exchange_rate', 13, 9).after('currency_code');
|
||||
})
|
||||
.table('manual_journals', (table) => {
|
||||
table.decimal('exchange_rate', 13, 9).after('currency_code');
|
||||
})
|
||||
.table('cashflow_transactions', (table) => {
|
||||
table.string('currency_code', 3).after('amount');
|
||||
table.decimal('exchange_rate', 13, 9).after('currency_code');
|
||||
})
|
||||
.table('expenses_transactions', (table) => {
|
||||
table.decimal('exchange_rate', 13, 9).after('currency_code');
|
||||
})
|
||||
.table('refund_credit_note_transactions', (table) => {
|
||||
table.decimal('exchange_rate', 13, 9).after('currency_code');
|
||||
})
|
||||
.table('refund_vendor_credit_transactions', (table) => {
|
||||
table.decimal('exchange_rate', 13, 9).after('currency_code');
|
||||
})
|
||||
.table('bill_located_costs', (table) => {
|
||||
table.string('currency_code', 3).after('amount');
|
||||
table.decimal('exchange_rate', 13, 9).after('currency_code');
|
||||
})
|
||||
.table('contacts', (table) => {
|
||||
table
|
||||
.decimal('opening_balance_exchange_rate', 13, 9)
|
||||
.after('opening_balance_at');
|
||||
})
|
||||
.table('items', (table) => {
|
||||
table.dropColumn('currency_code');
|
||||
});
|
||||
};
|
||||
|
||||
exports.down = (knex) => {
|
||||
return knex.schema
|
||||
.table('sales_invoices', (table) => {
|
||||
table.dropColumn('exchange_rate');
|
||||
})
|
||||
.table('sales_estimates', (table) => {
|
||||
table.dropColumn('exchange_rate');
|
||||
})
|
||||
.table('sales_receipts', (table) => {
|
||||
table.dropColumn('exchange_rate');
|
||||
})
|
||||
.table('payment_receives', (table) => {
|
||||
table.dropColumn('exchange_rate');
|
||||
})
|
||||
.table('bills', (table) => {
|
||||
table.dropColumn('exchange_rate');
|
||||
})
|
||||
.table('bills_payments', (table) => {
|
||||
table.dropColumn('exchange_rate');
|
||||
})
|
||||
.table('credit_notes', (table) => {
|
||||
table.dropColumn('exchange_rate');
|
||||
})
|
||||
.table('vendor_credits', (table) => {
|
||||
table.dropColumn('exchange_rate');
|
||||
})
|
||||
.table('accounts_transactions', (table) => {
|
||||
table.dropColumn('currency_code');
|
||||
table.dropColumn('exchange_rate');
|
||||
})
|
||||
.table('manual_journals', (table) => {
|
||||
table.dropColumn('exchange_rate');
|
||||
})
|
||||
.table('cashflow_transactions', (table) => {
|
||||
table.dropColumn('currency_code');
|
||||
table.dropColumn('exchange_rate');
|
||||
})
|
||||
.table('expenses_transactions', (table) => {
|
||||
table.dropColumn('exchange_rate');
|
||||
})
|
||||
.table('refund_credit_note_transactions', (table) => {
|
||||
table.dropColumn('exchange_rate');
|
||||
})
|
||||
.table('refund_vendor_credit_transactions', (table) => {
|
||||
table.dropColumn('exchange_rate');
|
||||
})
|
||||
.table('bill_located_costs', (table) => {
|
||||
table.dropColumn('currency_code');
|
||||
table.dropColumn('exchange_rate');
|
||||
})
|
||||
.table('contacts', (table) => {
|
||||
table.dropColumn('opening_balance_exchange_rate');
|
||||
});
|
||||
};
|
||||
@@ -0,0 +1,15 @@
|
||||
exports.up = (knex) => {
|
||||
return knex.schema.table('sales_invoices', (table) => {
|
||||
table
|
||||
.integer('writtenoff_expense_account_id')
|
||||
.unsigned()
|
||||
.references('id')
|
||||
.inTable('accounts');
|
||||
});
|
||||
};
|
||||
|
||||
exports.down = (knex) => {
|
||||
return knex.schema.table('sales_invoices', (table) => {
|
||||
table.dropColumn('writtenoff_expense_account_id');
|
||||
});
|
||||
};
|
||||
@@ -0,0 +1,19 @@
|
||||
exports.up = (knex) => {
|
||||
return knex.schema
|
||||
.raw(
|
||||
'ALTER TABLE CONTACTS CHANGE SHIPPING_ADDRESS_1 SHIPPING_ADDRESS1 VARCHAR(255)'
|
||||
)
|
||||
.raw(
|
||||
'ALTER TABLE CONTACTS CHANGE SHIPPING_ADDRESS_2 SHIPPING_ADDRESS2 VARCHAR(255)'
|
||||
)
|
||||
.raw(
|
||||
'ALTER TABLE CONTACTS CHANGE BILLING_ADDRESS_1 BILLING_ADDRESS1 VARCHAR(255)'
|
||||
)
|
||||
.raw(
|
||||
'ALTER TABLE CONTACTS CHANGE BILLING_ADDRESS_2 BILLING_ADDRESS2 VARCHAR(255)'
|
||||
);
|
||||
};
|
||||
|
||||
exports.down = (knex) => {
|
||||
return knex.schema.table('contacts', (table) => {});
|
||||
};
|
||||
@@ -0,0 +1,18 @@
|
||||
exports.up = (knex) => {
|
||||
return knex.schema.table('cashflow_transactions', (table) => {
|
||||
table
|
||||
.integer('cashflow_account_id')
|
||||
.unsigned()
|
||||
.references('id')
|
||||
.inTable('accounts');
|
||||
table
|
||||
.integer('credit_account_id')
|
||||
.unsigned()
|
||||
.references('id')
|
||||
.inTable('accounts');
|
||||
});
|
||||
};
|
||||
|
||||
exports.down = (knex) => {
|
||||
return knex.schema.table('cashflow_transactions', () => {});
|
||||
};
|
||||
@@ -0,0 +1,7 @@
|
||||
exports.up = (knex) => {
|
||||
return knex.schema.table('accounts', (table) => {
|
||||
table.date('seeded_at').after('currency_code').nullable();
|
||||
});
|
||||
};
|
||||
|
||||
exports.down = (knex) => {};
|
||||
@@ -0,0 +1,93 @@
|
||||
exports.up = (knex) => {
|
||||
return knex.schema
|
||||
.createTable('projects', (table) => {
|
||||
table.increments('id').comment('Auto-generated id');
|
||||
table.string('name');
|
||||
table.integer('contact_id').unsigned();
|
||||
table.date('deadline');
|
||||
table.decimal('cost_estimate');
|
||||
table.string('status');
|
||||
table.timestamps();
|
||||
})
|
||||
.createTable('tasks', (table) => {
|
||||
table.increments('id').comment('Auto-generated id');
|
||||
table.string('name');
|
||||
table.string('charge_type');
|
||||
table.decimal('rate');
|
||||
table.decimal('estimate_hours').unsigned();
|
||||
table.decimal('actual_hours').unsigned();
|
||||
table.decimal('invoiced_hours').unsigned().default(0);
|
||||
table
|
||||
.integer('project_id')
|
||||
.unsigned()
|
||||
.references('id')
|
||||
.inTable('projects');
|
||||
table.timestamps();
|
||||
})
|
||||
.createTable('times', (table) => {
|
||||
table.increments('id').comment('Auto-generated id');
|
||||
table.integer('duration').unsigned();
|
||||
table.string('description');
|
||||
table.date('date');
|
||||
|
||||
table.integer('taskId').unsigned().references('id').inTable('tasks');
|
||||
table
|
||||
.integer('project_id')
|
||||
.unsigned()
|
||||
.references('id')
|
||||
.inTable('projects');
|
||||
table.timestamps();
|
||||
})
|
||||
.table('accounts_transactions', (table) => {
|
||||
table
|
||||
.integer('projectId')
|
||||
.unsigned()
|
||||
.references('id')
|
||||
.inTable('projects');
|
||||
})
|
||||
.table('manual_journals_entries', (table) => {
|
||||
table
|
||||
.integer('projectId')
|
||||
.unsigned()
|
||||
.references('id')
|
||||
.inTable('projects');
|
||||
})
|
||||
.table('bills', (table) => {
|
||||
table
|
||||
.integer('projectId')
|
||||
.unsigned()
|
||||
.references('id')
|
||||
.inTable('projects');
|
||||
table.decimal('invoiced_amount').unsigned().defaultTo(0);
|
||||
})
|
||||
.table('items_entries', (table) => {
|
||||
table
|
||||
.integer('projectId')
|
||||
.unsigned()
|
||||
.references('id')
|
||||
.inTable('projects');
|
||||
|
||||
table.integer('project_ref_id').unsigned();
|
||||
table.string('project_ref_type');
|
||||
table.decimal('project_ref_invoiced_amount').unsigned().defaultTo(0);
|
||||
})
|
||||
.table('sales_invoices', (table) => {
|
||||
table
|
||||
.integer('projectId')
|
||||
.unsigned()
|
||||
.references('id')
|
||||
.inTable('projects');
|
||||
})
|
||||
.table('expenses_transactions', (table) => {
|
||||
table
|
||||
.integer('projectId')
|
||||
.unsigned()
|
||||
.references('id')
|
||||
.inTable('projects');
|
||||
table.decimal('invoiced_amount').unsigned().defaultTo(0);
|
||||
});
|
||||
};
|
||||
|
||||
exports.down = (knex) => {
|
||||
return knex.schema.dropTable('tasks');
|
||||
};
|
||||
@@ -0,0 +1,7 @@
|
||||
exports.up = (knex) => {
|
||||
return knex.schema.table('expense_transaction_categories', (table) => {
|
||||
table.integer('projectId').unsigned().references('id').inTable('projects');
|
||||
});
|
||||
};
|
||||
|
||||
exports.down = (knex) => {};
|
||||
@@ -0,0 +1,9 @@
|
||||
exports.up = function (knex) {
|
||||
return knex.schema.table('users', (table) => {
|
||||
table.dropColumn('phone_number');
|
||||
});
|
||||
};
|
||||
|
||||
exports.down = function (knex) {
|
||||
return knex.schema.table('users', (table) => {});
|
||||
};
|
||||
@@ -0,0 +1,52 @@
|
||||
exports.up = (knex) => {
|
||||
return knex.schema
|
||||
.createTable('tax_rates', (table) => {
|
||||
table.increments();
|
||||
table.string('name');
|
||||
table.string('code');
|
||||
table.decimal('rate');
|
||||
table.string('description');
|
||||
table.boolean('is_non_recoverable').defaultTo(false);
|
||||
table.boolean('is_compound').defaultTo(false);
|
||||
table.boolean('active').defaultTo(false);
|
||||
table.date('deleted_at');
|
||||
table.timestamps();
|
||||
})
|
||||
.table('items_entries', (table) => {
|
||||
table.boolean('is_inclusive_tax').defaultTo(false);
|
||||
table
|
||||
.integer('tax_rate_id')
|
||||
.unsigned()
|
||||
.references('id')
|
||||
.inTable('tax_rates');
|
||||
table.decimal('tax_rate').unsigned();
|
||||
})
|
||||
.table('sales_invoices', (table) => {
|
||||
table.boolean('is_inclusive_tax').defaultTo(false);
|
||||
table.decimal('tax_amount_withheld');
|
||||
})
|
||||
.createTable('tax_rate_transactions', (table) => {
|
||||
table.increments('id');
|
||||
table
|
||||
.integer('tax_rate_id')
|
||||
.unsigned()
|
||||
.references('id')
|
||||
.inTable('tax_rates');
|
||||
table.string('reference_type');
|
||||
table.integer('reference_id');
|
||||
table.decimal('rate').unsigned();
|
||||
table.integer('tax_account_id').unsigned();
|
||||
})
|
||||
.table('accounts_transactions', (table) => {
|
||||
table
|
||||
.integer('tax_rate_id')
|
||||
.unsigned()
|
||||
.references('id')
|
||||
.inTable('tax_rates');
|
||||
table.decimal('tax_rate').unsigned();
|
||||
});
|
||||
};
|
||||
|
||||
exports.down = (knex) => {
|
||||
return knex.schema.dropTableIfExists('tax_rates');
|
||||
};
|
||||
@@ -0,0 +1,10 @@
|
||||
exports.up = (knex) => {
|
||||
return knex.schema.table('bills', (table) => {
|
||||
table.boolean('is_inclusive_tax').defaultTo(false);
|
||||
table.decimal('tax_amount_withheld');
|
||||
});
|
||||
};
|
||||
|
||||
exports.down = (knex) => {
|
||||
return knex.schema.table('bills', () => {});
|
||||
};
|
||||
@@ -0,0 +1,18 @@
|
||||
exports.up = (knex) => {
|
||||
return knex.schema.table('items', (table) => {
|
||||
table
|
||||
.integer('sell_tax_rate_id')
|
||||
.unsigned()
|
||||
.references('id')
|
||||
.inTable('tax_rates');
|
||||
table
|
||||
.integer('purchase_tax_rate_id')
|
||||
.unsigned()
|
||||
.references('id')
|
||||
.inTable('tax_rates');
|
||||
});
|
||||
};
|
||||
|
||||
exports.down = (knex) => {
|
||||
return knex.schema.dropTableIfExists('tax_rates');
|
||||
};
|
||||
@@ -0,0 +1,14 @@
|
||||
exports.up = function (knex) {
|
||||
return knex.schema.createTable('storage', (table) => {
|
||||
table.increments('id').primary();
|
||||
table.string('key').notNullable();
|
||||
table.string('path').notNullable();
|
||||
table.string('extension').notNullable();
|
||||
table.integer('expire_in');
|
||||
table.timestamps();
|
||||
});
|
||||
};
|
||||
|
||||
exports.down = function (knex) {
|
||||
return knex.schema.dropTableIfExists('storage');
|
||||
};
|
||||
@@ -0,0 +1,9 @@
|
||||
exports.up = function (knex) {
|
||||
return knex.schema.alterTable('items_entries', (table) => {
|
||||
table.decimal('rate', 15, 5).alter();
|
||||
});
|
||||
};
|
||||
|
||||
exports.down = function (knex) {
|
||||
return knex.table('items_entries', (table) => {});
|
||||
};
|
||||
@@ -0,0 +1,14 @@
|
||||
exports.up = function (knex) {
|
||||
return knex.schema.createTable('plaid_items', (table) => {
|
||||
table.increments('id');
|
||||
table.integer('tenant_id').unsigned();
|
||||
table.string('plaid_item_id');
|
||||
table.string('plaid_institution_id');
|
||||
table.string('plaid_access_token');
|
||||
table.string('last_cursor');
|
||||
table.string('status');
|
||||
table.timestamps();
|
||||
});
|
||||
};
|
||||
|
||||
exports.down = function (knex) {};
|
||||
@@ -0,0 +1,9 @@
|
||||
exports.up = function (knex) {
|
||||
return knex.schema.table('accounts', (table) => {
|
||||
table.string('plaid_account_id');
|
||||
table.string('account_mask').nullable();
|
||||
table.decimal('bank_balance', 15, 5);
|
||||
});
|
||||
};
|
||||
|
||||
exports.down = function (knex) {};
|
||||
@@ -0,0 +1,7 @@
|
||||
exports.up = function (knex) {
|
||||
return knex.schema.table('cashflow_transactions', (table) => {
|
||||
table.string('plaid_transaction_id');
|
||||
});
|
||||
};
|
||||
|
||||
exports.down = function (knex) {};
|
||||
@@ -0,0 +1,28 @@
|
||||
exports.up = function (knex) {
|
||||
return knex.schema.createTable(
|
||||
'uncategorized_cashflow_transactions',
|
||||
(table) => {
|
||||
table.increments('id');
|
||||
table.date('date').index();
|
||||
table.decimal('amount');
|
||||
table.string('currency_code');
|
||||
table.string('reference_no').index();
|
||||
table.string('payee');
|
||||
table
|
||||
.integer('account_id')
|
||||
.unsigned()
|
||||
.references('id')
|
||||
.inTable('accounts');
|
||||
table.string('description');
|
||||
table.string('categorize_ref_type');
|
||||
table.integer('categorize_ref_id').unsigned();
|
||||
table.boolean('categorized').defaultTo(false);
|
||||
table.string('plaid_transaction_id');
|
||||
table.timestamps();
|
||||
}
|
||||
);
|
||||
};
|
||||
|
||||
exports.down = function (knex) {
|
||||
return knex.schema.dropTableIfExists('uncategorized_cashflow_transactions');
|
||||
};
|
||||
@@ -0,0 +1,10 @@
|
||||
exports.up = function (knex) {
|
||||
return knex.schema.table('accounts', (table) => {
|
||||
table.integer('uncategorized_transactions').defaultTo(0);
|
||||
table.boolean('is_system_account').defaultTo(true);
|
||||
table.boolean('is_feeds_active').defaultTo(false);
|
||||
table.datetime('last_feeds_updated_at').nullable();
|
||||
});
|
||||
};
|
||||
|
||||
exports.down = function (knex) {};
|
||||
@@ -0,0 +1,15 @@
|
||||
exports.up = function (knex) {
|
||||
return knex.schema.table('cashflow_transactions', (table) => {
|
||||
table
|
||||
.integer('uncategorized_transaction_id')
|
||||
.unsigned()
|
||||
.references('id')
|
||||
.inTable('uncategorized_cashflow_transactions');
|
||||
});
|
||||
};
|
||||
|
||||
exports.down = function (knex) {
|
||||
return knex.schema.table('cashflow_transactions', (table) => {
|
||||
table.dropColumn('uncategorized_transaction_id');
|
||||
});
|
||||
};
|
||||
@@ -0,0 +1,5 @@
|
||||
exports.up = function (knex) {
|
||||
return knex.schema.dropTableIfExists('storage');
|
||||
};
|
||||
|
||||
exports.down = function (knex) {};
|
||||
@@ -0,0 +1,14 @@
|
||||
exports.up = function (knex) {
|
||||
return knex.schema.createTable('documents', (table) => {
|
||||
table.increments('id').primary();
|
||||
table.string('key').notNullable();
|
||||
table.string('mime_type').notNullable();
|
||||
table.integer('size').unsigned();
|
||||
table.string('origin_name');
|
||||
table.timestamps();
|
||||
});
|
||||
};
|
||||
|
||||
exports.down = function (knex) {
|
||||
return knex.schema.dropTableIfExists('documents');
|
||||
};
|
||||
@@ -0,0 +1,14 @@
|
||||
exports.up = function (knex) {
|
||||
return knex.schema.createTable('document_links', (table) => {
|
||||
table.increments('id').primary();
|
||||
table.string('model_ref').notNullable();
|
||||
table.string('model_id').notNullable();
|
||||
table.integer('document_id').unsigned();
|
||||
table.datetime('expires_at').nullable();
|
||||
table.timestamps();
|
||||
});
|
||||
};
|
||||
|
||||
exports.down = function (knex) {
|
||||
return knex.schema.dropTableIfExists('document_links');
|
||||
};
|
||||
@@ -0,0 +1,45 @@
|
||||
exports.up = function (knex) {
|
||||
return knex.schema
|
||||
.createTable('bank_rules', (table) => {
|
||||
table.increments('id').primary();
|
||||
table.string('name');
|
||||
table.integer('order').unsigned();
|
||||
|
||||
table
|
||||
.integer('apply_if_account_id')
|
||||
.unsigned()
|
||||
.references('id')
|
||||
.inTable('accounts');
|
||||
table.string('apply_if_transaction_type');
|
||||
|
||||
table.string('assign_category');
|
||||
table
|
||||
.integer('assign_account_id')
|
||||
.unsigned()
|
||||
.references('id')
|
||||
.inTable('accounts');
|
||||
table.string('assign_payee');
|
||||
table.string('assign_memo');
|
||||
|
||||
table.string('conditions_type');
|
||||
|
||||
table.timestamps();
|
||||
})
|
||||
.createTable('bank_rule_conditions', (table) => {
|
||||
table.increments('id').primary();
|
||||
table
|
||||
.integer('rule_id')
|
||||
.unsigned()
|
||||
.references('id')
|
||||
.inTable('bank_rules');
|
||||
table.string('field');
|
||||
table.string('comparator');
|
||||
table.string('value');
|
||||
});
|
||||
};
|
||||
|
||||
exports.down = function (knex) {
|
||||
return knex.schema
|
||||
.dropTableIfExists('bank_rules')
|
||||
.dropTableIfExists('bank_rule_conditions');
|
||||
};
|
||||
@@ -0,0 +1,31 @@
|
||||
exports.up = function (knex) {
|
||||
return knex.schema.createTable('recognized_bank_transactions', (table) => {
|
||||
table.increments('id');
|
||||
table
|
||||
.integer('uncategorized_transaction_id')
|
||||
.unsigned()
|
||||
.references('id')
|
||||
.inTable('uncategorized_cashflow_transactions')
|
||||
.withKeyName('recognizedBankTransactionsUncategorizedTransIdForeign');
|
||||
table
|
||||
.integer('bank_rule_id')
|
||||
.unsigned()
|
||||
.references('id')
|
||||
.inTable('bank_rules');
|
||||
|
||||
table.string('assigned_category');
|
||||
table
|
||||
.integer('assigned_account_id')
|
||||
.unsigned()
|
||||
.references('id')
|
||||
.inTable('accounts');
|
||||
table.string('assigned_payee');
|
||||
table.string('assigned_memo');
|
||||
|
||||
table.timestamps();
|
||||
});
|
||||
};
|
||||
|
||||
exports.down = function (knex) {
|
||||
return knex.schema.dropTableIfExists('recognized_bank_transactions');
|
||||
};
|
||||
@@ -0,0 +1,16 @@
|
||||
exports.up = function (knex) {
|
||||
return knex.schema.table('uncategorized_cashflow_transactions', (table) => {
|
||||
table
|
||||
.integer('recognized_transaction_id')
|
||||
.unsigned()
|
||||
.references('id')
|
||||
.inTable('recognized_bank_transactions')
|
||||
.withKeyName('uncategorizedCashflowTransRecognizedTranIdForeign');
|
||||
});
|
||||
};
|
||||
|
||||
exports.down = function (knex) {
|
||||
return knex.schema.table('uncategorized_cashflow_transactions', (table) => {
|
||||
table.dropColumn('recognized_transaction_id');
|
||||
});
|
||||
};
|
||||
@@ -0,0 +1,18 @@
|
||||
exports.up = function (knex) {
|
||||
return knex.schema.createTable('matched_bank_transactions', (table) => {
|
||||
table.increments('id');
|
||||
table
|
||||
.integer('uncategorized_transaction_id')
|
||||
.unsigned()
|
||||
.references('id')
|
||||
.inTable('uncategorized_cashflow_transactions');
|
||||
table.string('reference_type');
|
||||
table.integer('reference_id').unsigned();
|
||||
table.decimal('amount');
|
||||
table.timestamps();
|
||||
});
|
||||
};
|
||||
|
||||
exports.down = function (knex) {
|
||||
return knex.schema.dropTableIfExists('matched_bank_transactions');
|
||||
};
|
||||
@@ -0,0 +1,11 @@
|
||||
exports.up = function (knex) {
|
||||
return knex.schema.table('uncategorized_cashflow_transactions', (table) => {
|
||||
table.datetime('excluded_at');
|
||||
});
|
||||
};
|
||||
|
||||
exports.down = function (knex) {
|
||||
return knex.schema.table('uncategorized_cashflow_transactions', (table) => {
|
||||
table.dropColumn('excluded_at');
|
||||
});
|
||||
};
|
||||
@@ -0,0 +1,11 @@
|
||||
exports.up = function (knex) {
|
||||
return knex.schema.table('uncategorized_cashflow_transactions', (table) => {
|
||||
table.string('batch');
|
||||
});
|
||||
};
|
||||
|
||||
exports.down = function (knex) {
|
||||
return knex.schema.table('uncategorized_cashflow_transactions', (table) => {
|
||||
table.dropColumn('batch');
|
||||
});
|
||||
};
|
||||
@@ -0,0 +1,11 @@
|
||||
exports.up = function (knex) {
|
||||
return knex.schema.table('settings', (table) => {
|
||||
table.text('value').alter();
|
||||
});
|
||||
};
|
||||
|
||||
exports.down = (knex) => {
|
||||
return knex.schema.table('settings', (table) => {
|
||||
table.string('value').alter();
|
||||
});
|
||||
};
|
||||
@@ -0,0 +1,60 @@
|
||||
exports.up = function (knex) {
|
||||
return knex('accounts_transactions')
|
||||
.whereIn('referenceType', [
|
||||
'OtherIncome',
|
||||
'OtherExpense',
|
||||
'OwnerDrawing',
|
||||
'OwnerContribution',
|
||||
'TransferToAccount',
|
||||
'TransferFromAccount',
|
||||
])
|
||||
.update({
|
||||
transactionType: knex.raw(`
|
||||
CASE
|
||||
WHEN REFERENCE_TYPE = 'OtherIncome' THEN 'OtherIncome'
|
||||
WHEN REFERENCE_TYPE = 'OtherExpense' THEN 'OtherExpense'
|
||||
WHEN REFERENCE_TYPE = 'OwnerDrawing' THEN 'OwnerDrawing'
|
||||
WHEN REFERENCE_TYPE = 'OwnerContribution' THEN 'OwnerContribution'
|
||||
WHEN REFERENCE_TYPE = 'TransferToAccount' THEN 'TransferToAccount'
|
||||
WHEN REFERENCE_TYPE = 'TransferFromAccount' THEN 'TransferFromAccount'
|
||||
END
|
||||
`),
|
||||
referenceType: knex.raw(`
|
||||
CASE
|
||||
WHEN REFERENCE_TYPE IN ('OtherIncome', 'OtherExpense', 'OwnerDrawing', 'OwnerContribution', 'TransferToAccount', 'TransferFromAccount') THEN 'CashflowTransaction'
|
||||
ELSE REFERENCE_TYPE
|
||||
END
|
||||
`),
|
||||
});
|
||||
};
|
||||
|
||||
exports.down = function (knex) {
|
||||
return knex('accounts_transactions')
|
||||
.whereIn('transactionType', [
|
||||
'OtherIncome',
|
||||
'OtherExpense',
|
||||
'OwnerDrawing',
|
||||
'OwnerContribution',
|
||||
'TransferToAccount',
|
||||
'TransferFromAccount',
|
||||
])
|
||||
.update({
|
||||
referenceType: knex.raw(`
|
||||
CASE
|
||||
WHEN TRANSACTION_TYPE = 'OtherIncome' THEN 'OtherIncome'
|
||||
WHEN TRANSACTION_TYPE = 'OtherExpense' THEN 'OtherExpense'
|
||||
WHEN TRANSACTION_TYPE = 'OwnerDrawing' THEN 'OwnerDrawing'
|
||||
WHEN TRANSACTION_TYPE = 'OwnerContribution' THEN 'OwnerContribution'
|
||||
WHEN TRANSACTION_TYPE = 'TransferToAccount' THEN 'TransferToAccount'
|
||||
WHEN TRANSACTION_TYPE = 'TransferFromAccount' THEN 'TransferFromAccount'
|
||||
ELSE REFERENCE_TYPE
|
||||
END
|
||||
`),
|
||||
transactionType: knex.raw(`
|
||||
CASE
|
||||
WHEN TRANSACTION_TYPE IN ('OtherIncome', 'OtherExpense', 'OwnerDrawing', 'OwnerContribution', 'TransferToAccount', 'TransferFromAccount') THEN NULL
|
||||
ELSE TRANSACTION_TYPE
|
||||
END
|
||||
`),
|
||||
});
|
||||
};
|
||||
@@ -0,0 +1,11 @@
|
||||
exports.up = function (knex) {
|
||||
return knex.schema.table('accounts', (table) => {
|
||||
table.string('plaid_item_id').nullable();
|
||||
});
|
||||
};
|
||||
|
||||
exports.down = function (knex) {
|
||||
return knex.schema.table('accounts', (table) => {
|
||||
table.dropColumn('plaid_item_id');
|
||||
});
|
||||
};
|
||||
@@ -0,0 +1,21 @@
|
||||
exports.up = function (knex) {
|
||||
return knex.schema
|
||||
.table('accounts', (table) => {
|
||||
table
|
||||
.boolean('is_syncing_owner')
|
||||
.defaultTo(false)
|
||||
.after('is_feeds_active');
|
||||
})
|
||||
.then(() => {
|
||||
return knex('accounts')
|
||||
.whereNotNull('plaid_item_id')
|
||||
.orWhereNotNull('plaid_account_id')
|
||||
.update('is_syncing_owner', true);
|
||||
});
|
||||
};
|
||||
|
||||
exports.down = function (knex) {
|
||||
return knex.schema.table('accounts', (table) => {
|
||||
table.dropColumn('is_syncing_owner');
|
||||
});
|
||||
};
|
||||
@@ -0,0 +1,18 @@
|
||||
// This migration changes the precision of the tax_amount_withheld column in the bills and sales_invoices tables from 8, 2 to 13, 2.
|
||||
// This migration is necessary to allow tax_amount_withheld filed to store values bigger than 999,999.99.
|
||||
|
||||
exports.up = function(knex) {
|
||||
return knex.schema.alterTable('bills', function (table) {
|
||||
table.decimal('tax_amount_withheld', 13, 2).alter();
|
||||
}).alterTable('sales_invoices', function (table) {
|
||||
table.decimal('tax_amount_withheld', 13, 2).alter();
|
||||
});
|
||||
};
|
||||
|
||||
exports.down = function(knex) {
|
||||
return knex.schema.alterTable('bills', function (table) {
|
||||
table.decimal('tax_amount_withheld', 8, 2).alter();
|
||||
}).alterTable('sales_invoices', function (table) {
|
||||
table.decimal('tax_amount_withheld', 8, 2).alter();
|
||||
});
|
||||
};
|
||||
@@ -0,0 +1,11 @@
|
||||
exports.up = function (knex) {
|
||||
return knex.schema.table('plaid_items', (table) => {
|
||||
table.datetime('paused_at');
|
||||
});
|
||||
};
|
||||
|
||||
exports.down = function (knex) {
|
||||
return knex.schema.table('plaid_items', (table) => {
|
||||
table.dropColumn('paused_at');
|
||||
});
|
||||
};
|
||||
@@ -0,0 +1,13 @@
|
||||
exports.up = function (knex) {
|
||||
return knex.schema.table('uncategorized_cashflow_transactions', (table) => {
|
||||
table.boolean('pending').defaultTo(false);
|
||||
table.string('pending_plaid_transaction_id').nullable();
|
||||
});
|
||||
};
|
||||
|
||||
exports.down = function (knex) {
|
||||
return knex.schema.table('uncategorized_cashflow_transactions', (table) => {
|
||||
table.dropColumn('pending');
|
||||
table.dropColumn('pending_plaid_transaction_id');
|
||||
});
|
||||
};
|
||||
@@ -0,0 +1,19 @@
|
||||
/**
|
||||
* @param { import("knex").Knex } knex
|
||||
* @returns { Promise<void> }
|
||||
*/
|
||||
exports.up = function (knex) {
|
||||
return knex.schema.table('payment_receives', (table) => {
|
||||
table.string('stripe_pintent_id').nullable();
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* @param { import("knex").Knex } knex
|
||||
* @returns { Promise<void> }
|
||||
*/
|
||||
exports.down = function (knex) {
|
||||
return knex.schema.table('payment_receives', (table) => {
|
||||
table.dropColumn('stripe_pintent_id');
|
||||
});
|
||||
};
|
||||
@@ -0,0 +1,75 @@
|
||||
/**
|
||||
* @param { import("knex").Knex } knex
|
||||
* @returns { Promise<void> }
|
||||
*/
|
||||
exports.up = function (knex) {
|
||||
return knex.schema
|
||||
.createTable('pdf_templates', (table) => {
|
||||
table.increments('id').primary();
|
||||
table.text('resource');
|
||||
table.text('template_name');
|
||||
table.json('attributes');
|
||||
table.boolean('predefined').defaultTo(false);
|
||||
table.boolean('default').defaultTo(false);
|
||||
table.timestamps();
|
||||
})
|
||||
.table('sales_invoices', (table) => {
|
||||
table
|
||||
.integer('pdf_template_id')
|
||||
.unsigned()
|
||||
.references('id')
|
||||
.inTable('pdf_templates');
|
||||
})
|
||||
.table('sales_estimates', (table) => {
|
||||
table
|
||||
.integer('pdf_template_id')
|
||||
.unsigned()
|
||||
.references('id')
|
||||
.inTable('pdf_templates');
|
||||
})
|
||||
.table('sales_receipts', (table) => {
|
||||
table
|
||||
.integer('pdf_template_id')
|
||||
.unsigned()
|
||||
.references('id')
|
||||
.inTable('pdf_templates');
|
||||
})
|
||||
.table('credit_notes', (table) => {
|
||||
table
|
||||
.integer('pdf_template_id')
|
||||
.unsigned()
|
||||
.references('id')
|
||||
.inTable('pdf_templates');
|
||||
})
|
||||
.table('payment_receives', (table) => {
|
||||
table
|
||||
.integer('pdf_template_id')
|
||||
.unsigned()
|
||||
.references('id')
|
||||
.inTable('pdf_templates');
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* @param { import("knex").Knex } knex
|
||||
* @returns { Promise<void> }
|
||||
*/
|
||||
exports.down = function (knex) {
|
||||
return knex.schema
|
||||
.table('payment_receives', (table) => {
|
||||
table.dropColumn('pdf_template_id');
|
||||
})
|
||||
.table('credit_notes', (table) => {
|
||||
table.dropColumn('pdf_template_id');
|
||||
})
|
||||
.table('sales_receipts', (table) => {
|
||||
table.dropColumn('pdf_template_id');
|
||||
})
|
||||
.table('sales_estimates', (table) => {
|
||||
table.dropColumn('pdf_template_id');
|
||||
})
|
||||
.table('sales_invoices', (table) => {
|
||||
table.dropColumn('pdf_template_id');
|
||||
})
|
||||
.dropTableIfExists('pdf_templates');
|
||||
};
|
||||
@@ -0,0 +1,25 @@
|
||||
/**
|
||||
* @param { import("knex").Knex } knex
|
||||
* @returns { Promise<void> }
|
||||
*/
|
||||
exports.up = function (knex) {
|
||||
return knex.schema.createTable('payment_integrations', (table) => {
|
||||
table.increments('id');
|
||||
table.string('service');
|
||||
table.string('name');
|
||||
table.string('slug');
|
||||
table.boolean('payment_enabled').defaultTo(false);
|
||||
table.boolean('payout_enabled').defaultTo(false);
|
||||
table.string('account_id');
|
||||
table.json('options');
|
||||
table.timestamps();
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* @param { import("knex").Knex } knex
|
||||
* @returns { Promise<void> }
|
||||
*/
|
||||
exports.down = function (knex) {
|
||||
return knex.schema.dropTableIfExists('payment_integrations');
|
||||
};
|
||||
@@ -0,0 +1,27 @@
|
||||
/**
|
||||
* @param { import("knex").Knex } knex
|
||||
* @returns { Promise<void> }
|
||||
*/
|
||||
exports.up = function (knex) {
|
||||
return knex.schema.createTable('transactions_payment_methods', (table) => {
|
||||
table.increments('id');
|
||||
table.integer('reference_id').unsigned();
|
||||
table.string('reference_type');
|
||||
table
|
||||
.integer('payment_integration_id')
|
||||
.unsigned()
|
||||
.index()
|
||||
.references('id')
|
||||
.inTable('payment_integrations');
|
||||
table.boolean('enable').defaultTo(false);
|
||||
table.json('options').nullable();
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* @param { import("knex").Knex } knex
|
||||
* @returns { Promise<void> }
|
||||
*/
|
||||
exports.down = function (knex) {
|
||||
return knex.schema.dropTableIfExists('transactions_payment_methods');
|
||||
};
|
||||
@@ -0,0 +1,44 @@
|
||||
/**
|
||||
* @param { import("knex").Knex } knex
|
||||
* @returns { Promise<void> }
|
||||
*/
|
||||
exports.up = function (knex) {
|
||||
return knex('pdf_templates').insert([
|
||||
{
|
||||
resource: 'SaleInvoice',
|
||||
templateName: 'Standard Template',
|
||||
predefined: true,
|
||||
default: true,
|
||||
},
|
||||
{
|
||||
resource: 'SaleEstimate',
|
||||
templateName: 'Standard Template',
|
||||
predefined: true,
|
||||
default: true,
|
||||
},
|
||||
{
|
||||
resource: 'SaleReceipt',
|
||||
templateName: 'Standard Template',
|
||||
predefined: true,
|
||||
default: true,
|
||||
},
|
||||
{
|
||||
resource: 'CreditNote',
|
||||
templateName: 'Standard Template',
|
||||
predefined: true,
|
||||
default: true,
|
||||
},
|
||||
{
|
||||
resource: 'PaymentReceive',
|
||||
templateName: 'Standard Template',
|
||||
predefined: true,
|
||||
default: true,
|
||||
},
|
||||
]);
|
||||
};
|
||||
|
||||
/**
|
||||
* @param { import("knex").Knex } knex
|
||||
* @returns { Promise<void> }
|
||||
*/
|
||||
exports.down = function (knex) {};
|
||||
@@ -0,0 +1,39 @@
|
||||
/**
|
||||
* @param { import("knex").Knex } knex
|
||||
* @returns { Promise<void> }
|
||||
*/
|
||||
exports.up = function (knex) {
|
||||
return knex.schema
|
||||
.table('items_entries', (table) => {
|
||||
table.decimal('quantity', 13, 3).alter();
|
||||
})
|
||||
.table('inventory_transactions', (table) => {
|
||||
table.decimal('quantity', 13, 3).alter();
|
||||
})
|
||||
.table('inventory_cost_lot_tracker', (table) => {
|
||||
table.decimal('quantity', 13, 3).alter();
|
||||
})
|
||||
.table('items', (table) => {
|
||||
table.decimal('quantityOnHand', 13, 3).alter();
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* @param { import("knex").Knex } knex
|
||||
* @returns { Promise<void> }
|
||||
*/
|
||||
exports.down = function (knex) {
|
||||
return knex.schema
|
||||
.table('items_entries', (table) => {
|
||||
table.integer('quantity').alter();
|
||||
})
|
||||
.table('inventory_transactions', (table) => {
|
||||
table.integer('quantity').alter();
|
||||
})
|
||||
.table('inventory_cost_lot_tracker', (table) => {
|
||||
table.integer('quantity').alter();
|
||||
})
|
||||
.table('items', (table) => {
|
||||
table.integer('quantityOnHand').alter();
|
||||
});
|
||||
};
|
||||
@@ -0,0 +1,23 @@
|
||||
/**
|
||||
* @param { import("knex").Knex } knex
|
||||
* @returns { Promise<void> }
|
||||
*/
|
||||
exports.up = function (knex) {
|
||||
return knex.schema.alterTable('sales_invoices', (table) => {
|
||||
table.decimal('discount', 10, 2).nullable().after('credited_amount');
|
||||
table.string('discount_type').nullable().after('discount');
|
||||
table.decimal('adjustment', 10, 2).nullable().after('discount_type');
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* @param { import("knex").Knex } knex
|
||||
* @returns { Promise<void> }
|
||||
*/
|
||||
exports.down = function (knex) {
|
||||
return knex.schema.alterTable('sale_invoices', (table) => {
|
||||
table.dropColumn('discount');
|
||||
table.dropColumn('discount_type');
|
||||
table.dropColumn('adjustment');
|
||||
});
|
||||
};
|
||||
@@ -0,0 +1,24 @@
|
||||
/**
|
||||
* @param { import("knex").Knex } knex
|
||||
* @returns { Promise<void> }
|
||||
*/
|
||||
exports.up = function(knex) {
|
||||
return knex.schema.alterTable('sales_estimates', (table) => {
|
||||
table.decimal('discount', 10, 2).nullable().after('amount');
|
||||
table.string('discount_type').nullable().after('discount');
|
||||
|
||||
table.decimal('adjustment', 10, 2).nullable().after('discount_type');
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* @param { import("knex").Knex } knex
|
||||
* @returns { Promise<void> }
|
||||
*/
|
||||
exports.down = function(knex) {
|
||||
return knex.schema.alterTable('sales_estimates', (table) => {
|
||||
table.dropColumn('discount');
|
||||
table.dropColumn('discount_type');
|
||||
table.dropColumn('adjustment');
|
||||
});
|
||||
};
|
||||
@@ -0,0 +1,24 @@
|
||||
/**
|
||||
* @param { import("knex").Knex } knex
|
||||
* @returns { Promise<void> }
|
||||
*/
|
||||
exports.up = function(knex) {
|
||||
return knex.schema.alterTable('sales_receipts', (table) => {
|
||||
table.decimal('discount', 10, 2).nullable().after('amount');
|
||||
table.string('discount_type').nullable().after('discount');
|
||||
|
||||
table.decimal('adjustment', 10, 2).nullable().after('discount_type');
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* @param { import("knex").Knex } knex
|
||||
* @returns { Promise<void> }
|
||||
*/
|
||||
exports.down = function(knex) {
|
||||
return knex.schema.alterTable('sales_receipts', (table) => {
|
||||
table.dropColumn('discount');
|
||||
table.dropColumn('discount_type');
|
||||
table.dropColumn('adjustment');
|
||||
});
|
||||
};
|
||||
@@ -0,0 +1,26 @@
|
||||
/**
|
||||
* @param { import("knex").Knex } knex
|
||||
* @returns { Promise<void> }
|
||||
*/
|
||||
exports.up = function(knex) {
|
||||
return knex.schema.alterTable('bills', (table) => {
|
||||
// Discount.
|
||||
table.decimal('discount', 10, 2).nullable().after('amount');
|
||||
table.string('discount_type').nullable().after('discount');
|
||||
|
||||
// Adjustment.
|
||||
table.decimal('adjustment', 10, 2).nullable().after('discount_type');
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* @param { import("knex").Knex } knex
|
||||
* @returns { Promise<void> }
|
||||
*/
|
||||
exports.down = function(knex) {
|
||||
return knex.schema.alterTable('bills', (table) => {
|
||||
table.dropColumn('discount');
|
||||
table.dropColumn('discount_type');
|
||||
table.dropColumn('adjustment');
|
||||
});
|
||||
};
|
||||
@@ -0,0 +1,23 @@
|
||||
/**
|
||||
* @param { import("knex").Knex } knex
|
||||
* @returns { Promise<void> }
|
||||
*/
|
||||
exports.up = function(knex) {
|
||||
return knex.schema.alterTable('credit_notes', (table) => {
|
||||
table.decimal('discount', 10, 2).nullable().after('exchange_rate');
|
||||
table.string('discount_type').nullable().after('discount');
|
||||
table.decimal('adjustment', 10, 2).nullable().after('discount_type');
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* @param { import("knex").Knex } knex
|
||||
* @returns { Promise<void> }
|
||||
*/
|
||||
exports.down = function(knex) {
|
||||
return knex.schema.alterTable('credit_notes', (table) => {
|
||||
table.dropColumn('discount');
|
||||
table.dropColumn('discount_type');
|
||||
table.dropColumn('adjustment');
|
||||
});
|
||||
};
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user