summaryrefslogtreecommitdiff
path: root/FS/FS/svc_Common.pm
diff options
context:
space:
mode:
authorIvan Kohler <ivan@freeside.biz>2015-04-27 02:59:21 -0700
committerIvan Kohler <ivan@freeside.biz>2015-04-27 02:59:21 -0700
commitad3bcb39580173f0ac1b6357cb49515d48af7ddf (patch)
treeb375ba5593e04e332e93e836f136f55aa72645cb /FS/FS/svc_Common.pm
parent6be98dd167d1a77ff9f71c97c385bff65769f30d (diff)
parent911b5f2429377b0b989e8a10e9971b2463e554a7 (diff)
Merge branch 'master' of git.freeside.biz:/home/git/freeside
Diffstat (limited to 'FS/FS/svc_Common.pm')
-rw-r--r--FS/FS/svc_Common.pm37
1 files changed, 35 insertions, 2 deletions
diff --git a/FS/FS/svc_Common.pm b/FS/FS/svc_Common.pm
index 8199ba183..b1f9d146f 100644
--- a/FS/FS/svc_Common.pm
+++ b/FS/FS/svc_Common.pm
@@ -152,13 +152,46 @@ sub cust_linked {
Checks the validity of fields in this record.
-At present, this does nothing but call FS::Record::check (which, in turn,
-does nothing but run virtual field checks).
+Only checks fields marked as required in table_info or
+part_svc_column definition. Should be invoked by service-specific
+check using SUPER. Invokes FS::Record::check using SUPER.
=cut
sub check {
my $self = shift;
+
+ ## Checking required fields
+
+ # get fields marked as required in table_info
+ my $required = {};
+ my $labels = {};
+ my $tinfo = $self->can('table_info') ? $self->table_info : {};
+ my $fields = $tinfo->{'fields'} || {};
+ foreach my $field (keys %$fields) {
+ if (ref($fields->{$field}) && $fields->{$field}->{'required'}) {
+ $required->{$field} = 1;
+ $labels->{$field} = $fields->{$field}->{'label'};
+ }
+ }
+ # add fields marked as required in database
+ foreach my $column (
+ qsearch('part_svc_column',{
+ 'svcpart' => $self->svcpart,
+ 'required' => 'Y'
+ })
+ ) {
+ $required->{$column->columnname} = 1;
+ $labels->{$column->columnname} = $column->columnlabel;
+ }
+ # do the actual checking
+ foreach my $field (keys %$required) {
+ unless ($self->$field) {
+ my $name = $labels->{$field} || $field;
+ return "Field $name is required\n"
+ }
+ }
+
$self->SUPER::check;
}