'type' => 'textarea',
},
+ {
+ 'key' => 'invoice_latextopmargin',
+ 'section' => 'invoicing',
+ 'description' => 'Optional LaTeX invoice topmargin setting. Include units.',
+ 'type' => 'text',
+ 'per_agent' => 1,
+ 'validate' => sub { shift =~
+ /^-?\d*\.?\d+(in|mm|cm|pt|em|ex|pc|bp|dd|cc|sp)$/
+ ? '' : 'Invalid LaTex length';
+ },
+ },
+
+ {
+ 'key' => 'invoice_latexheadsep',
+ 'section' => 'invoicing',
+ 'description' => 'Optional LaTeX invoice headsep setting. Include units.',
+ 'type' => 'text',
+ 'per_agent' => 1,
+ 'validate' => sub { shift =~
+ /^-?\d*\.?\d+(in|mm|cm|pt|em|ex|pc|bp|dd|cc|sp)$/
+ ? '' : 'Invalid LaTex length';
+ },
+ },
+
+ {
+ 'key' => 'invoice_latexaddresssep',
+ 'section' => 'invoicing',
+ 'description' => 'Optional LaTeX invoice separation between invoice header
+and customer address. Include units.',
+ 'type' => 'text',
+ 'per_agent' => 1,
+ 'validate' => sub { shift =~
+ /^-?\d*\.?\d+(in|mm|cm|pt|em|ex|pc|bp|dd|cc|sp)$/
+ ? '' : 'Invalid LaTex length';
+ },
+ },
+
+ {
+ 'key' => 'invoice_latextextheight',
+ 'section' => 'invoicing',
+ 'description' => 'Optional LaTeX invoice textheight setting. Include units.',
+ 'type' => 'text',
+ 'per_agent' => 1,
+ 'validate' => sub { shift =~
+ /^-?\d*\.?\d+(in|mm|cm|pt|em|ex|pc|bp|dd|cc|sp)$/
+ ? '' : 'Invalid LaTex length';
+ },
+ },
+
{
'key' => 'invoice_latexnotes',
'section' => 'invoicing',
'per_agent' => 1,
},
+ {
+ 'key' => 'invoice_latexextracouponspace',
+ 'section' => 'invoicing',
+ 'description' => 'Optional LaTeX invoice textheight space to reserve for a tear off coupon. Include units.',
+ 'type' => 'text',
+ 'per_agent' => 1,
+ 'validate' => sub { shift =~
+ /^-?\d*\.?\d+(in|mm|cm|pt|em|ex|pc|bp|dd|cc|sp)$/
+ ? '' : 'Invalid LaTex length';
+ },
+ },
+
+ {
+ 'key' => 'invoice_latexcouponfootsep',
+ 'section' => 'invoicing',
+ 'description' => 'Optional LaTeX invoice separation between tear off coupon and footer. Include units.',
+ 'type' => 'text',
+ 'per_agent' => 1,
+ 'validate' => sub { shift =~
+ /^-?\d*\.?\d+(in|mm|cm|pt|em|ex|pc|bp|dd|cc|sp)$/
+ ? '' : 'Invalid LaTex length';
+ },
+ },
+
+ {
+ 'key' => 'invoice_latexcouponamountenclosedsep',
+ 'section' => 'invoicing',
+ 'description' => 'Optional LaTeX invoice separation between total due and amount enclosed line. Include units.',
+ 'type' => 'text',
+ 'per_agent' => 1,
+ 'validate' => sub { shift =~
+ /^-?\d*\.?\d+(in|mm|cm|pt|em|ex|pc|bp|dd|cc|sp)$/
+ ? '' : 'Invalid LaTex length';
+ },
+ },
+ {
+ 'key' => 'invoice_latexcoupontoaddresssep',
+ 'section' => 'invoicing',
+ 'description' => 'Optional LaTeX invoice separation between invoice data and the to address (usually invoice_latexreturnaddress). Include units.',
+ 'type' => 'text',
+ 'per_agent' => 1,
+ 'validate' => sub { shift =~
+ /^-?\d*\.?\d+(in|mm|cm|pt|em|ex|pc|bp|dd|cc|sp)$/
+ ? '' : 'Invalid LaTex length';
+ },
+ },
+
{
'key' => 'invoice_latexreturnaddress',
'section' => 'invoicing',
'type' => 'textarea',
},
+ {
+ 'key' => 'invoice_latexverticalreturnaddress',
+ 'section' => 'invoicing',
+ 'description' => 'Place the return address under the company logo rather than beside it.',
+ 'type' => 'checkbox',
+ 'per_agent' => 1,
+ },
+
+ {
+ 'key' => 'invoice_latexcouponaddcompanytoaddress',
+ 'section' => 'invoicing',
+ 'description' => 'Add the company name to the To address on the remittance coupon because the return address does not contain it.',
+ 'type' => 'checkbox',
+ 'per_agent' => 1,
+ },
+
{
'key' => 'invoice_latexsmallfooter',
'section' => 'invoicing',
'select_enum' => [ 'none', 'countrycode+phonenum', 'disabled' ],
},
+ {
+ 'key' => 'global_unique-pbx_title',
+ 'section' => '',
+ 'description' => 'Global phone number uniqueness control: enabled (usual setting - title must e unique), or disabled turns off duplicate checking for this field.',
+ 'type' => 'select',
+ 'select_enum' => [ 'enabled', 'disabled' ],
+ },
+
{
'key' => 'svc_external-skip_manual',
'section' => 'UI',