summaryrefslogtreecommitdiff
path: root/FS/FS/part_pkg/global_Mixin.pm
blob: 59eaaaaec6469f9b02b174b5520b22df18b9e7ab (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
package FS::part_pkg::global_Mixin;

use strict;
use vars qw(%info);

use Tie::IxHash;
tie my %a2billing_types, 'Tie::IxHash', (
  0 => 'Prepaid',
  1 => 'Postpaid',
);

tie my %a2billing_simultaccess, 'Tie::IxHash', (
  0 => 'Disabled',
  1 => 'Enabled',
);

# much false laziness with FS::Record::ut_money
sub validate_moneyn {
  my ($option, $valref) = @_;
  if ( $$valref eq '' ) {
    return '';
  } elsif ( $$valref =~ /^\s*(\d*)(\.\d{1})\s*$/ ) {
    #handle one decimal place without barfing out
    $$valref = ( ($1||''). ($2.'0') ) || 0;
  } elsif ( $$valref =~ /^\s*(\d*)(\.\d{2})?\s*$/ ) {
    $$valref = ( ($1||''). ($2||'') ) || 0;
  } else {
    return "Illegal (money) $option: ". $$valref;
  }
  return '';
}

tie my %count_available_phones, 'Tie::IxHash', (
  0 => 'Provisioned phone services',
  1 => 'All available phone services',
);

%info = (
  'disabled' => 1,
  'fields' => {
    'setup_fee' => { 
      'name' => 'Setup fee for this package',
      'default' => 0,
      'validate' => \&validate_moneyn,
    },
    'recur_fee' => { 
      'name' => 'Recurring fee for this package',
      'default' => 0,
      'validate' => \&validate_moneyn,
    },
    'unused_credit_cancel' => {
      'name' => 'Credit the customer for the unused portion of service at '.
                 'cancellation',
      'type' => 'checkbox',
    },
    'unused_credit_suspend' => {
      'name' => 'Credit the customer for the unused portion of service when '.
                'suspending',
      'type' => 'checkbox',
    },
    'unused_credit_change' => {
      'name' => 'Credit the customer for the unused portion of service when '.
                'changing packages',
      'type' => 'checkbox',
    },
    'delay_cancel' => {
      'name' => 'Automatic suspension period before cancelling (configuration setting part_pkg-delay_cancel-days)',
      'type' => 'checkbox',
    },
    'count_available_phones' => { 'name' => 'Count taxable phone lines',
      'type' => 'radio',
      'options' => \%count_available_phones,
      'default' => 0,
    },

    # miscellany--maybe put this in a separate module?

    'a2billing_tariff' => {
      'name'        => 'A2Billing tariff group ID',
      'display_if'  => sub {
        FS::part_export->count("exporttype = 'a2billing'") > 0;
      }
    },
    'a2billing_type' => {
      'name'        => 'A2Billing card type',
      'display_if'  => sub {
        FS::part_export->count("exporttype = 'a2billing'") > 0;
      },
      'type'        => 'select',
      'select_options' => \%a2billing_types,
    },
    'a2billing_simultaccess' => {
      'name'        => 'A2Billing Simultaneous Access',
      'display_if'  => sub {
        FS::part_export->count("exporttype = 'a2billing'") > 0;
      },
      'type'        => 'select',
      'select_options' => \%a2billing_simultaccess,
    },  
    'a2billing_carrier_cost_min' => {
      'name'        => 'A2Billing inbound carrier cost',
      'display_if'  => sub {
        FS::part_export->count("exporttype = 'a2billing'") > 0;
      },
    },
   'a2billing_carrer_initblock_offp' => {
      'name'        => 'A2Billing inbound carrier min duration',
      'display_if'  => sub {
        FS::part_export->count("exporttype = 'a2billing'") > 0;
      },
    },
    'a2billing_carrier_increment_offp' => {
      'name'        => 'A2Billing inbound carrier billing block',
      'display_if'  => sub {
        FS::part_export->count("exporttype = 'a2billing'") > 0;
      },
    },
    'a2billing_retail_cost_min_offp' => {
      'name'        => 'A2Billing inbound retail cost',
      'display_if'  => sub {
        FS::part_export->count("exporttype = 'a2billing'") > 0;
      },
    },
    'a2billing_retail_initblock_offp' => {
      'name'        => 'A2Billing inbound retail min duration',
      'display_if'  => sub {
        FS::part_export->count("exporttype = 'a2billing'") > 0;
      },
    },
    'a2billing_retail_increment_offp' => {
      'name'        => 'A2Billing inbound retail billing block',
      'display_if'  => sub {
        FS::part_export->count("exporttype = 'a2billing'") > 0;
     },
   },

 },
  'fieldorder' => [ qw(
    setup_fee
    recur_fee
    unused_credit_cancel
    unused_credit_suspend
    unused_credit_change
    delay_cancel

    count_available_phones

    a2billing_tariff
    a2billing_type
    a2billing_simultaccess
    a2billing_carrier_cost_min
    a2billing_carrer_initblock_offp
    a2billing_carrier_increment_offp
    a2billing_retail_cost_min_offp
    a2billing_retail_initblock_offp
    a2billing_retail_increment_offp
  )],
);

1;