summaryrefslogtreecommitdiff
path: root/FS/FS/svc_Common.pm
diff options
context:
space:
mode:
authorJonathan Prykop <jonathan@freeside.biz>2015-04-24 22:19:34 -0500
committerJonathan Prykop <jonathan@freeside.biz>2015-04-24 22:19:34 -0500
commit4fda726fa9f8e709c68ec823edc5ae702723281c (patch)
tree1436b287dc8467b16aa2f11c6cdc62f36e2fae82 /FS/FS/svc_Common.pm
parent326075e45814387624303357207eae9069301f58 (diff)
RT#34289: Flag service fields as mandatory
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 8199ba1..b1f9d14 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;
}