Files
bigcapital/server/src/models/BillPayment.js
2021-03-03 20:07:33 +02:00

143 lines
3.3 KiB
JavaScript

import { Model } from "objection";
import TenantModel from "models/TenantModel";
export default class BillPayment extends TenantModel {
/**
* Table name
*/
static get tableName() {
return "bills_payments";
}
/**
* Timestamps columns.
*/
get timestamps() {
return ["createdAt", "updatedAt"];
}
static get resourceable() {
return true;
}
/**
* Relationship mapping.
*/
static get relationMappings() {
const BillPaymentEntry = require("models/BillPaymentEntry");
const AccountTransaction = require("models/AccountTransaction");
const Contact = require("models/Contact");
const Account = require("models/Account");
return {
entries: {
relation: Model.HasManyRelation,
modelClass: BillPaymentEntry.default,
join: {
from: "bills_payments.id",
to: "bills_payments_entries.billPaymentId",
},
},
vendor: {
relation: Model.BelongsToOneRelation,
modelClass: Contact.default,
join: {
from: "bills_payments.vendorId",
to: "contacts.id",
},
filter(query) {
query.where("contact_service", "vendor");
},
},
paymentAccount: {
relation: Model.BelongsToOneRelation,
modelClass: Account.default,
join: {
from: "bills_payments.paymentAccountId",
to: "accounts.id",
},
},
transactions: {
relation: Model.HasManyRelation,
modelClass: AccountTransaction.default,
join: {
from: "bills_payments.id",
to: "accounts_transactions.referenceId",
},
filter(builder) {
builder.where("reference_type", "BillPayment");
},
},
};
}
/**
* Resource fields.
*/
static get fields() {
return {
vendor: {
label: "Vendor name",
column: "vendor_id",
relation: "contacts.id",
relationColumn: "contacts.display_name",
},
amount: {
label: "Amount",
column: "amount",
columnType: "number",
fieldType: "number",
},
due_amount: {
label: "Due amount",
column: "due_amount",
columnType: "number",
fieldType: "number",
},
payment_account: {
label: "Payment account",
column: "payment_account_id",
relation: "accounts.id",
relationColumn: "accounts.name",
fieldType: "options",
optionsResource: "Account",
optionsKey: "id",
optionsLabel: "name",
},
payment_number: {
label: "Payment number",
column: "payment_number",
columnType: "string",
fieldType: "text",
},
payment_date: {
label: "Payment date",
column: "payment_date",
columnType: "date",
fieldType: "date",
},
reference_no: {
label: "Reference No.",
column: "reference",
columnType: "string",
fieldType: "text",
},
description: {
label: "Description",
column: "description",
columnType: "string",
fieldType: "text",
},
created_at: {
label: "Created at",
column: "created_at",
columnType: "date",
},
};
}
}