- feat: Sales estimates APIs.

- feat: Sales invoices APIs.
- feat: Sales receipts APIs.
- WIP: Sales payment receipts.
- WIP: Purchases bills.
- WIP: Purchases payments made.
This commit is contained in:
Ahmed Bouhuolia
2020-07-22 02:03:12 +02:00
parent 9d9c7c1568
commit 56278a25f0
83 changed files with 5330 additions and 76 deletions

29
server/src/models/Bill.js Normal file
View File

@@ -0,0 +1,29 @@
import { Model, mixin } from 'objection';
import moment from 'moment';
import TenantModel from '@/models/TenantModel';
import CachableQueryBuilder from '@/lib/Cachable/CachableQueryBuilder';
import CachableModel from '@/lib/Cachable/CachableModel';
export default class Bill extends mixin(TenantModel, [CachableModel]) {
/**
* Table name
*/
static get tableName() {
return 'bills';
}
/**
* Timestamps columns.
*/
get timestamps() {
return ['createdAt', 'updatedAt'];
}
/**
* Extend query builder model.
*/
static get QueryBuilder() {
return CachableQueryBuilder;
}
}

View File

@@ -0,0 +1,28 @@
import { mixin } from 'objection';
import TenantModel from '@/models/TenantModel';
import CachableQueryBuilder from '@/lib/Cachable/CachableQueryBuilder';
import CachableModel from '@/lib/Cachable/CachableModel';
export default class BillPayment extends mixin(TenantModel, [CachableModel]) {
/**
* Table name
*/
static get tableName() {
return 'bills_payments';
}
/**
* Timestamps columns.
*/
get timestamps() {
return ['createdAt', 'updatedAt'];
}
/**
* Extend query builder model.
*/
static get QueryBuilder() {
return CachableQueryBuilder;
}
}

View File

@@ -0,0 +1,46 @@
import { Model, mixin } from 'objection';
import moment from 'moment';
import TenantModel from '@/models/TenantModel';
import CachableQueryBuilder from '@/lib/Cachable/CachableQueryBuilder';
import CachableModel from '@/lib/Cachable/CachableModel';
export default class PaymentReceive extends mixin(TenantModel, [CachableModel]) {
/**
* Table name
*/
static get tableName() {
return 'payment_receives';
}
/**
* Timestamps columns.
*/
get timestamps() {
return ['created_at', 'updated_at'];
}
/**
* Extend query builder model.
*/
static get QueryBuilder() {
return CachableQueryBuilder;
}
/**
* Relationship mapping.
*/
static get relationMappings() {
const PaymentReceiveEntry = require('@/models/PaymentReceiveEntry');
return {
entries: {
relation: Model.HasManyRelation,
modelClass: this.relationBindKnex(PaymentReceiveEntry.default),
join: {
from: 'payment_receives.id',
to: 'payment_receives_entries.payment_receive_id',
},
},
};
}
}

View File

@@ -0,0 +1,45 @@
import { Model, mixin } from 'objection';
import TenantModel from '@/models/TenantModel';
import CachableQueryBuilder from '@/lib/Cachable/CachableQueryBuilder';
import CachableModel from '@/lib/Cachable/CachableModel';
export default class PaymentReceiveEntry extends mixin(TenantModel, [CachableModel]) {
/**
* Table name
*/
static get tableName() {
return 'payment_receives_entries';
}
/**
* Timestamps columns.
*/
get timestamps() {
return [];
}
/**
* Extend query builder model.
*/
static get QueryBuilder() {
return CachableQueryBuilder;
}
/**
* Relationship mapping.
*/
static get relationMappings() {
const PaymentReceive = require('@/models/PaymentReceive');
return {
entries: {
relation: Model.HasManyRelation,
modelClass: this.relationBindKnex(PaymentReceive.default),
join: {
from: 'payment_receives_entries.payment_receive_id',
to: 'payment_receives.id',
},
},
};
}
}

View File

@@ -0,0 +1,47 @@
import { Model, mixin } from 'objection';
import moment from 'moment';
import TenantModel from '@/models/TenantModel';
import CachableQueryBuilder from '@/lib/Cachable/CachableQueryBuilder';
import CachableModel from '@/lib/Cachable/CachableModel';
export default class SaleEstimate extends mixin(TenantModel, [CachableModel]) {
/**
* Table name
*/
static get tableName() {
return 'sales_estimates';
}
/**
* Timestamps columns.
*/
get timestamps() {
return ['createdAt', 'updatedAt'];
}
/**
* Extend query builder model.
*/
static get QueryBuilder() {
return CachableQueryBuilder;
}
/**
* Relationship mapping.
*/
static get relationMappings() {
const SaleEstimateEntry = require('@/models/SaleEstimateEntry');
return {
entries: {
relation: Model.HasManyRelation,
modelClass: this.relationBindKnex(SaleEstimateEntry.default),
join: {
from: 'sales_estimates.id',
to: 'sales_estimate_entries.id',
},
},
};
}
}

View File

@@ -0,0 +1,45 @@
import { Model, mixin } from 'objection';
import TenantModel from '@/models/TenantModel';
import CachableQueryBuilder from '@/lib/Cachable/CachableQueryBuilder';
import CachableModel from '@/lib/Cachable/CachableModel';
export default class SaleEstimateEntry extends mixin(TenantModel, [CachableModel]) {
/**
* Table name
*/
static get tableName() {
return 'sales_estimate_entries';
}
/**
* Timestamps columns.
*/
get timestamps() {
return [];
}
/**
* Extend query builder model.
*/
static get QueryBuilder() {
return CachableQueryBuilder;
}
/**
* Relationship mapping.
*/
static get relationMappings() {
const SaleEstimate = require('@/models/SaleEstimate');
return {
estimate: {
relation: Model.BelongsToOneRelation,
modelClass: this.relationBindKnex(SaleEstimate.default),
join: {
from: 'sales_estimates.id',
to: 'sales_estimate_entries.estimate_id',
},
},
};
}
}

View File

@@ -0,0 +1,46 @@
import { Model, mixin } from 'objection';
import moment from 'moment';
import TenantModel from '@/models/TenantModel';
import CachableQueryBuilder from '@/lib/Cachable/CachableQueryBuilder';
import CachableModel from '@/lib/Cachable/CachableModel';
export default class SaleInvoice extends mixin(TenantModel, [CachableModel]) {
/**
* Table name
*/
static get tableName() {
return 'sales_invoices';
}
/**
* Timestamps columns.
*/
get timestamps() {
return ['created_at', 'updated_at'];
}
/**
* Extend query builder model.
*/
static get QueryBuilder() {
return CachableQueryBuilder;
}
/**
* Relationship mapping.
*/
static get relationMappings() {
const SaleInvoiceEntry = require('@/models/SaleInvoiceEntry');
return {
entries: {
relation: Model.HasManyRelation,
modelClass: this.relationBindKnex(SaleInvoiceEntry.default),
join: {
from: 'sales_invoices.id',
to: 'sales_invoices_entries.sale_invoice_id',
},
},
};
}
}

View File

@@ -0,0 +1,46 @@
import { Model, mixin } from 'objection';
import moment from 'moment';
import TenantModel from '@/models/TenantModel';
import CachableQueryBuilder from '@/lib/Cachable/CachableQueryBuilder';
import CachableModel from '@/lib/Cachable/CachableModel';
export default class SaleInvoiceEntry extends mixin(TenantModel, [CachableModel]) {
/**
* Table name
*/
static get tableName() {
return 'sales_invoices_entries';
}
/**
* Timestamps columns.
*/
get timestamps() {
return [];
}
/**
* Extend query builder model.
*/
static get QueryBuilder() {
return CachableQueryBuilder;
}
/**
* Relationship mapping.
*/
static get relationMappings() {
const SaleInvoice = require('@/models/SaleInvoice');
return {
saleInvoice: {
relation: Model.BelongsToOneRelation,
modelClass: this.relationBindKnex(SaleInvoice.default),
join: {
from: 'sales_invoices_entries.sale_invoice_id',
to: 'sales_invoices.id',
},
},
};
}
}

View File

@@ -0,0 +1,46 @@
import { Model, mixin } from 'objection';
import moment from 'moment';
import TenantModel from '@/models/TenantModel';
import CachableQueryBuilder from '@/lib/Cachable/CachableQueryBuilder';
import CachableModel from '@/lib/Cachable/CachableModel';
export default class SaleReceipt extends mixin(TenantModel, [CachableModel]) {
/**
* Table name
*/
static get tableName() {
return 'sales_receipts';
}
/**
* Timestamps columns.
*/
get timestamps() {
return ['created_at', 'updated_at'];
}
/**
* Extend query builder model.
*/
static get QueryBuilder() {
return CachableQueryBuilder;
}
/**
* Relationship mapping.
*/
static get relationMappings() {
const SaleReceiptEntry = require('@/models/SaleReceiptEntry');
return {
entries: {
relation: Model.BelongsToOneRelation,
modelClass: this.relationBindKnex(SaleReceiptEntry.default),
join: {
from: 'sales_receipts.id',
to: 'sales_receipt_entries.sale_receipt_id',
},
},
};
}
}

View File

@@ -0,0 +1,45 @@
import { Model, mixin } from 'objection';
import TenantModel from '@/models/TenantModel';
import CachableQueryBuilder from '@/lib/Cachable/CachableQueryBuilder';
import CachableModel from '@/lib/Cachable/CachableModel';
export default class SaleReceiptEntry extends mixin(TenantModel, [CachableModel]) {
/**
* Table name
*/
static get tableName() {
return 'sales_receipt_entries';
}
/**
* Timestamps columns.
*/
get timestamps() {
return [];
}
/**
* Extend query builder model.
*/
static get QueryBuilder() {
return CachableQueryBuilder;
}
/**
* Relationship mapping.
*/
static get relationMappings() {
const SaleReceipt = require('@/models/SaleReceipt');
return {
saleReceipt: {
relation: Model.BelongsToOneRelation,
modelClass: this.relationBindKnex(SaleReceipt.default),
join: {
from: 'sales_receipt_entries.sale_receipt_id',
to: 'sales_receipts.id',
},
},
};
}
}

View File

@@ -25,6 +25,24 @@ export default class View extends mixin(TenantModel, [CachableModel]) {
return CachableQueryBuilder;
}
static get modifiers() {
const TABLE_NAME = View.tableName;
return {
allMetadata(query) {
query.withGraphFetched('roles.field');
query.withGraphFetched('columns');
},
specificOrFavourite(query, viewId) {
if (viewId) {
query.where('id', viewId)
}
return query;
}
}
}
/**
* Relationship mapping.
*/

View File

@@ -0,0 +1,37 @@
import Customer from './Customer';
import Vendor from './Vendor';
import SaleEstimate from './SaleEstimate';
import SaleEstimateEntry from './SaleEstimateEntry';
import SaleReceipt from './SaleReceipt';
import SaleReceiptEntry from './SaleReceiptEntry';
import Item from './Item';
import Account from './Account';
import AccountTransaction from './AccountTransaction';
import SaleInvoice from './SaleInvoice';
import SaleInvoiceEntry from './SaleInvoiceEntry';
import PaymentReceive from './PaymentReceive';
import PaymentReceiveEntry from './PaymentReceiveEntry';
import Bill from './Bill';
import BillPayment from './BillPayment';
import Resource from './Resource';
import View from './View';
export {
Customer,
Vendor,
SaleEstimate,
SaleEstimateEntry,
SaleReceipt,
SaleReceiptEntry,
SaleInvoice,
SaleInvoiceEntry,
Item,
Account,
AccountTransaction,
PaymentReceive,
PaymentReceiveEntry,
Bill,
BillPayment,
Resource,
View,
};