Source: products/argos-saleslogix/src/Integrations/BOE/Views/ERPInvoices/List.js

import declare from 'dojo/_base/declare';
import lang from 'dojo/_base/lang';
import action from 'crm/Action';
import crmFormat from 'crm/Format';
import List from 'argos/List';
import _GroupListMixin from 'crm/Views/_GroupListMixin';
import _MetricListMixin from 'crm/Views/_MetricListMixin';
import _RightDrawerListMixin from 'crm/Views/_RightDrawerListMixin';
import MODEL_NAMES from '../../Models/Names';
import utility from '../../Utility';
import getResource from 'argos/I18n';

const resource = getResource('erpInvoicesList');

/**
 * @class crm.Integrations.BOE.Views.ERPInvoces.List
 *
 * @extends argos.List
 */
const __class = declare('crm.Integrations.BOE.Views.ERPInvoices.List', [List, _RightDrawerListMixin, _MetricListMixin, _GroupListMixin], /** @lends crm.Integrations.BOE.Views.ERPInvoces.List# */ {
  formatter: crmFormat,
  util: utility,
  // Templates
  itemTemplate: new Simplate([
    '{% if ($.Account && $.Account.AccountName) { %}',
    '<p class="listview-heading"><label class="group-label">{%: $$.accountText %}</label> {%: $.Account.AccountName %}</p>',
    '<p class="micro-text"><label class="group-label">{%: $$.invoiceNumberText %}</label> {%: $.InvoiceNumber %}</p>',
    '{% } else { %}',
    '<p class="listview-heading"><label class="group-label">{%: $$.invoiceNumberText %}</label> {%: $.InvoiceNumber %}</p>',
    '{% } %}',
    '<p class="micro-text"><label class="group-label">{%: $$.statusText %}</label> {%: $.ErpStatus %}</p>',
    '<p class="micro-text"><label class="group-label">{%: $$.statusDateText %}</label> {%: $$.formatStatusDate($) %}</p>',
    '<p class="micro-text"><label class="group-label">{%: $$.termsText %}</label> {%: $.ErpPaymentTermId %}</p>',
    '<p class="micro-text"><label class="group-label">{%: $$.ownerText %} </label>{%: $.Owner.OwnerDescription %}</p>',
    '<p class="micro-text"><label class="group-label">{%: $$.extendedBaseAmountText %}</label> ',
    '{%: $$.util.formatMultiCurrency($.ErpExtendedBaseAmount, $.BaseCurrencyCode) %}',
    '</p>',
    '<p class="micro-text"><label class="group-label">{%: $$.extendedAmountText %}</label> ',
    '{%: $$.util.formatMultiCurrency($.ErpExtendedAmount, $.CurrencyCode) %}',
    '</p>',
    '<p class="micro-text"><label class="group-label">{%: $$.totalBaseAmountText %}</label> ',
    '{%: $$.util.formatMultiCurrency($.ErpTotalBaseAmount, $.BaseCurrencyCode) %}',
    '</p>',
    '<p class="micro-text"><label class="group-label">{%: $$.totalAmountText %}</label> ',
    '{%: $$.util.formatMultiCurrency($.GrandTotal, $.CurrencyCode) %}',
    '</p>',
    '<p class="micro-text"><label class="group-label">{%: $$.totalAmountText %}</label> ',
    '{%: $$.util.formatMultiCurrency($.GrandTotal, $.CurrencyCode) %}',
    '</p>',
    '<p class="micro-text"><label class="group-label">{%: $$.documentDateText %}</label> {%: $$.formatter.date($.ErpDocumentDate) %}</p>',
  ]),

  // Localization
  titleText: resource.titleText,
  invoiceNumberText: resource.invoiceNumberText,
  accountText: resource.accountText,
  descriptionText: resource.descriptionText,
  statusText: resource.statusText,
  termsText: resource.termsText,
  statusDateText: resource.statusDateText,
  ownerText: resource.ownerText,
  totalAmountText: resource.totalAmountText,
  totalBaseAmountText: resource.totalBaseAmountText,
  extendedAmountText: resource.extendedAmountText,
  extendedBaseAmountText: resource.extendedBaseAmountText,
  unknownText: resource.unknownText,
  viewAccountActionText: resource.viewAccountActionText,
  documentDateText: resource.documentDateText,

  // View Properties
  id: 'invoice_list',
  detailView: 'invoice_detail',
  modelName: MODEL_NAMES.ERPINVOICE,
  resourceKind: 'erpInvoices',
  allowSelection: true,
  enableActions: true,
  expose: true,
  security: 'Entities/ErpInvoice/View',
  insertSecurity: 'Entities/ErpInvoice/Add',

  // Card layout
  itemIconClass: 'document2',

  // Groups
  groupsEnabled: true,
  enableDynamicGroupLayout: true,
  entityName: 'ERPInvoice',

  createActionLayout: function createActionLayout() {
    return this.actions || (this.actions = [{
      id: 'viewAccount',
      label: this.viewAccountActionText,
      enabled: action.hasProperty.bindDelegate(this, 'Account.$key'),
      fn: action.navigateToEntity.bindDelegate(this, {
        view: 'account_detail',
        keyProperty: 'Account.$key',
        textProperty: 'Account.AccountName',
      }),
    }]);
  },
  formatSearchQuery: function formatSearchQuery(searchQuery) {
    const q = this.escapeSearchQuery(searchQuery.toUpperCase());
    return `upper(Account.AccountName) like "${q}%" or upper(InvoiceNumber) like "${q}%"`;
  },
  formatStatusDate: function formatStatusDate(entry) {
    return (entry && entry.ErpStatusDate) ? this.formatter.relativeDate(entry.ErpStatusDate) : this.unknownText;
  },
});

lang.setObject('crm.Views.ERPInvoices.List', __class);
export default __class;