+# _upgrade_get_legacy_reason_type is class method supposed to be used only
+# within the reason_Mixin class which will either find or create a reason_type
+sub _upgrade_get_legacy_reason_type {
+
+ my $class = shift;
+ my $table = shift;
+
+ my $reason_class =
+ ( $table =~ /void/ ) ? 'X' : 'F'; # see FS::reason_type (%class_name)
+ my $reason_type_params = { 'class' => $reason_class, 'type' => 'Legacy' };
+ my $reason_type = qsearchs( 'reason_type', $reason_type_params );
+ unless ($reason_type) {
+ $reason_type = new FS::reason_type($reason_type_params);
+ my $error = $reason_type->insert();
+ die "$class had error inserting FS::reason_type into database: $error\n"
+ if $error;
+ }
+ return $reason_type;
+}
+
+# _upgrade_get_no_reason is class method supposed to be used only within the
+# reason_Mixin class which will either find or create a default (no reason)
+# reason
+sub _upgrade_get_no_reason {
+
+ my $class = shift;
+ my $reason_type = shift;
+ return _upgrade_get_reason( $class, '(none)', $reason_type );
+}
+
+# _upgrade_get_reason is class method supposed to be used only within the
+# reason_Mixin class which will either find or create a reason
+sub _upgrade_get_reason {
+
+ my $class = shift;
+ my $reason_text = shift;
+ my $reason_type = shift;
+
+ my $reason_params = {
+ 'reason_type' => $reason_type->typenum,
+ 'reason' => $reason_text
+ };
+ my $reason = qsearchs( 'reason', $reason_params );
+ unless ($reason) {
+ $reason_params->{'disabled'} = 'Y';
+ $reason = new FS::reason($reason_params);
+ my $error = $reason->insert();
+ die "can't insert legacy reason '$reason_text' into database: $error\n"
+ if $error;
+ }
+ return $reason;
+}
+