feat: custom view dynamic filter.

This commit is contained in:
a.bouhuolia
2021-08-04 15:01:43 +02:00
parent 3fc30d5240
commit 2822270ac3
42 changed files with 647 additions and 97 deletions

View File

@@ -9,8 +9,13 @@ import AccountTypesUtils from 'lib/AccountTypes';
import AccountSettings from './Account.Settings';
import ModelSettings from './ModelSetting';
import { ACCOUNT_TYPES } from 'data/AccountTypes';
import CustomViewBaseModel from './CustomViewBaseModel';
import { DEFAULT_VIEWS } from 'services/Accounts/constants';
export default class Account extends mixin(TenantModel, [ModelSettings]) {
export default class Account extends mixin(TenantModel, [
ModelSettings,
CustomViewBaseModel,
]) {
/**
* Table name.
*/
@@ -135,7 +140,7 @@ export default class Account extends mixin(TenantModel, [ModelSettings]) {
*/
filterByAccountNormal(query, accountNormal) {
const filterTypes = ACCOUNT_TYPES.filter(
(accountType) => accountType.normal === accountNormal,
(accountType) => accountType.normal === accountNormal
).map((accountType) => accountType.key);
query.whereIn('account_type', filterTypes);
@@ -248,4 +253,11 @@ export default class Account extends mixin(TenantModel, [ModelSettings]) {
static get meta() {
return AccountSettings;
}
/**
* Retrieve the default custom views, roles and columns.
*/
static get defaultViews() {
return DEFAULT_VIEWS;
}
}

View File

@@ -4,8 +4,13 @@ import { difference } from 'lodash';
import TenantModel from 'models/TenantModel';
import BillSettings from './Bill.Settings';
import ModelSetting from './ModelSetting';
import CustomViewBaseModel from './CustomViewBaseModel';
import { DEFAULT_VIEWS } from 'services/Purchases/constants';
export default class Bill extends mixin(TenantModel, [ModelSetting]) {
export default class Bill extends mixin(TenantModel, [
ModelSetting,
CustomViewBaseModel,
]) {
/**
* Table name
*/
@@ -303,4 +308,11 @@ export default class Bill extends mixin(TenantModel, [ModelSetting]) {
.where('id', billId)
[changeMethod]('payment_amount', Math.abs(amount));
}
/**
* Retrieve the default custom views, roles and columns.
*/
static get defaultViews() {
return DEFAULT_VIEWS;
}
}

View File

@@ -0,0 +1,16 @@
export default (Model) =>
class CustomViewBaseModel extends Model {
/**
* Retrieve the default custom views, roles and columns.
*/
static get defaultViews() {
return [];
}
/**
* Retrieve the default view by the given slug.
*/
static getDefaultViewBySlug(viewSlug) {
return this.defaultViews.find((view) => view.slug === viewSlug) || null;
}
};

View File

@@ -75,19 +75,13 @@ export default {
{ key: 'unpaid', label: 'Unpaid' },
],
columnable: true,
filterQuery: statusFieldFilterQuery,
filterCustomQuery: statusFieldFilterQuery,
},
},
};
function statusFieldFilterQuery(query, role) {
switch (role.value) {
case 'active':
query.modify('active');
break;
case 'inactive':
query.modify('inactive');
break;
case 'overdue':
query.modify('overdue');
break;

View File

@@ -1,9 +1,10 @@
import { Model, mixin } from 'objection';
import TenantModel from 'models/TenantModel';
import PaginationQueryBuilder from './Pagination';
import QueryParser from 'lib/LogicEvaluation/QueryParser';
import ModelSetting from './ModelSetting';
import CustomerSettings from './Customer.Settings';
import CustomViewBaseModel from './CustomViewBaseModel';
import { DEFAULT_VIEWS } from 'services/Contacts/Customers/constants';
class CustomerQueryBuilder extends PaginationQueryBuilder {
constructor(...args) {
@@ -17,7 +18,10 @@ class CustomerQueryBuilder extends PaginationQueryBuilder {
}
}
export default class Customer extends mixin(TenantModel, [ModelSetting]) {
export default class Customer extends mixin(TenantModel, [
ModelSetting,
CustomViewBaseModel,
]) {
/**
* Query builder.
*/
@@ -138,4 +142,11 @@ export default class Customer extends mixin(TenantModel, [ModelSetting]) {
static get meta() {
return CustomerSettings;
}
/**
* Retrieve the default custom views, roles and columns.
*/
static get defaultViews() {
return DEFAULT_VIEWS;
}
}

View File

@@ -3,8 +3,13 @@ import TenantModel from 'models/TenantModel';
import { viewRolesBuilder } from 'lib/ViewRolesBuilder';
import ModelSetting from './ModelSetting';
import ExpenseSettings from './Expense.Settings';
import CustomViewBaseModel from './CustomViewBaseModel';
import { DEFAULT_VIEWS } from 'services/Expenses/constants';
export default class Expense extends mixin(TenantModel, [ModelSetting]) {
export default class Expense extends mixin(TenantModel, [
ModelSetting,
CustomViewBaseModel,
]) {
/**
* Table name
*/
@@ -148,4 +153,11 @@ export default class Expense extends mixin(TenantModel, [ModelSetting]) {
static get meta() {
return ExpenseSettings;
}
/**
* Retrieve the default custom views, roles and columns.
*/
static get defaultViews() {
return DEFAULT_VIEWS;
}
}

View File

@@ -3,8 +3,13 @@ import TenantModel from 'models/TenantModel';
import { buildFilterQuery } from 'lib/ViewRolesBuilder';
import ItemSettings from './Item.Settings';
import ModelSetting from './ModelSetting';
import CustomViewBaseModel from './CustomViewBaseModel';
import { DEFAULT_VIEWS } from 'services/Items/constants';
export default class Item extends mixin(TenantModel, [ModelSetting]) {
export default class Item extends mixin(TenantModel, [
ModelSetting,
CustomViewBaseModel,
]) {
/**
* Table name
*/
@@ -116,4 +121,11 @@ export default class Item extends mixin(TenantModel, [ModelSetting]) {
static get meta() {
return ItemSettings;
}
/**
* Retrieve the default custom views, roles and columns.
*/
static get defaultViews() {
return DEFAULT_VIEWS;
}
}

View File

@@ -4,8 +4,13 @@ import TenantModel from 'models/TenantModel';
import { defaultToTransform } from 'utils';
import SaleEstimateSettings from './SaleEstimate.Settings';
import ModelSetting from './ModelSetting';
import CustomViewBaseModel from './CustomViewBaseModel';
import { DEFAULT_VIEWS } from 'services/Sales/Estimates/constants';
export default class SaleEstimate extends mixin(TenantModel, [ModelSetting]) {
export default class SaleEstimate extends mixin(TenantModel, [
ModelSetting,
CustomViewBaseModel,
]) {
/**
* Table name
*/
@@ -155,7 +160,7 @@ export default class SaleEstimate extends mixin(TenantModel, [ModelSetting]) {
query.modify('expired');
break;
}
}
},
};
}
@@ -198,4 +203,11 @@ export default class SaleEstimate extends mixin(TenantModel, [ModelSetting]) {
static get meta() {
return SaleEstimateSettings;
}
/**
* Retrieve the default custom views, roles and columns.
*/
static get defaultViews() {
return DEFAULT_VIEWS;
}
}

View File

@@ -3,8 +3,13 @@ import moment from 'moment';
import TenantModel from 'models/TenantModel';
import ModelSetting from './ModelSetting';
import SaleInvoiceMeta from './SaleInvoice.Settings';
import CustomViewBaseModel from './CustomViewBaseModel';
import { DEFAULT_VIEWS } from 'services/Sales/constants';
export default class SaleInvoice extends mixin(TenantModel, [ModelSetting]) {
export default class SaleInvoice extends mixin(TenantModel, [
ModelSetting,
CustomViewBaseModel,
]) {
/**
* Table name
*/
@@ -359,4 +364,11 @@ export default class SaleInvoice extends mixin(TenantModel, [ModelSetting]) {
static dueAmountFieldSortQuery(query, role) {
query.modify('sortByDueAmount', role.order);
}
/**
* Retrieve the default custom views, roles and columns.
*/
static get defaultViews() {
return DEFAULT_VIEWS;
}
}

View File

@@ -2,8 +2,13 @@ import { Model, mixin } from 'objection';
import TenantModel from 'models/TenantModel';
import ModelSetting from './ModelSetting';
import SaleReceiptSettings from './SaleReceipt.Settings';
import CustomViewBaseModel from './CustomViewBaseModel';
import { DEFAULT_VIEWS } from 'services/Sales/Receipts/constants';
export default class SaleReceipt extends mixin(TenantModel, [ModelSetting]) {
export default class SaleReceipt extends mixin(TenantModel, [
ModelSetting,
CustomViewBaseModel,
]) {
/**
* Table name
*/
@@ -80,7 +85,7 @@ export default class SaleReceipt extends mixin(TenantModel, [ModelSetting]) {
query.modify('closed');
break;
}
}
},
};
}
@@ -147,4 +152,11 @@ export default class SaleReceipt extends mixin(TenantModel, [ModelSetting]) {
static get meta() {
return SaleReceiptSettings;
}
/**
* Retrieve the default custom views, roles and columns.
*/
static get defaultViews() {
return DEFAULT_VIEWS;
}
}

View File

@@ -63,19 +63,11 @@ export default {
'status': {
label: 'Status',
options: [
{ key: 'active', label: 'Active' },
{ key: 'inactive', label: 'Inactive' },
{ key: 'overdue', label: 'Overdue' },
{ key: 'unpaid', label: 'Unpaid' },
],
query: (query, role) => {
filterCustomQuery: (query, role) => {
switch (role.value) {
case 'active':
query.modify('active');
break;
case 'inactive':
query.modify('inactive');
break;
case 'overdue':
query.modify('overdue');
break;

View File

@@ -3,6 +3,8 @@ import TenantModel from 'models/TenantModel';
import PaginationQueryBuilder from './Pagination';
import ModelSetting from './ModelSetting';
import VendorSettings from './Vendor.Settings';
import CustomViewBaseModel from './CustomViewBaseModel';
import { DEFAULT_VIEWS } from 'services/Contacts/Vendors/constants';
class VendorQueryBuilder extends PaginationQueryBuilder {
constructor(...args) {
@@ -16,7 +18,10 @@ class VendorQueryBuilder extends PaginationQueryBuilder {
}
}
export default class Vendor extends mixin(TenantModel, [ModelSetting]) {
export default class Vendor extends mixin(TenantModel, [
ModelSetting,
CustomViewBaseModel,
]) {
/**
* Query builder.
*/
@@ -67,7 +72,7 @@ export default class Vendor extends mixin(TenantModel, [ModelSetting]) {
/**
* Inactive/Active mode.
*/
inactiveMode(query, active = false) {
inactiveMode(query, active = false) {
query.where('active', !active);
},
@@ -89,10 +94,9 @@ export default class Vendor extends mixin(TenantModel, [ModelSetting]) {
overdue(query) {
query.select(
'*',
Vendor
.relatedQuery('overdueBills', query.knex())
Vendor.relatedQuery('overdueBills', query.knex())
.count()
.as('countOverdue'),
.as('countOverdue')
);
query.having('countOverdue', '>', 0);
},
@@ -101,7 +105,7 @@ export default class Vendor extends mixin(TenantModel, [ModelSetting]) {
*/
unpaid(query) {
query.whereRaw('`BALANCE` + `OPENING_BALANCE` <> 0');
}
},
};
}
@@ -129,12 +133,19 @@ export default class Vendor extends mixin(TenantModel, [ModelSetting]) {
},
filter: (query) => {
query.modify('overdue');
}
}
},
},
};
}
static get meta() {
return VendorSettings;
}
/**
* Retrieve the default custom views, roles and columns.
*/
static get defaultViews() {
return DEFAULT_VIEWS;
}
}