eliminate some false laziness in FS::Misc::send_email vs. msg_template/email.pm send_...
[freeside.git] / FS / FS / sched_item.pm
index 5f55188..f2a82c8 100644 (file)
@@ -2,7 +2,8 @@ package FS::sched_item;
 use base qw( FS::Record );
 
 use strict;
-#use FS::Record qw( qsearch qsearchs );
+use FS::Record qw( dbh ); # qsearch qsearchs );
+use FS::sched_avail;
 
 =head1 NAME
 
@@ -99,7 +100,7 @@ sub check {
 =item name
 
 Returns a name for this item; either the name of the associated employee (see
-L<FS::access_user), or the itemname field.
+L<FS::access_user>), or the itemname field.
 
 =cut
 
@@ -109,6 +110,43 @@ sub name {
   $access_user ? $access_user->name : $self->itemname;
 }
 
+=item replace_sched_avail SCHED_AVAIL, ...
+
+Replaces the existing availability schedule with the list of passed-in
+FS::sched_avail objects
+
+=cut
+
+sub replace_sched_avail {
+  my( $self, @new_sched_avail ) = @_;
+
+  my $oldAutoCommit = $FS::UID::AutoCommit;
+  local $FS::UID::AutoCommit = 0;
+  my $dbh = dbh;
+
+  foreach my $old_sched_avail ( $self->sched_avail ) {
+    my $error = $old_sched_avail->delete;
+    if ( $error ) {
+      $dbh->rollback if $oldAutoCommit;
+      return $error;
+    }
+  }
+
+  foreach my $new_sched_avail ( @new_sched_avail ) {
+    $new_sched_avail->itemnum( $self->itemnum );
+    my $error = $new_sched_avail->insert;
+    if ( $error ) {
+      $dbh->rollback if $oldAutoCommit;
+      return $error;
+    }
+  }
+
+  $dbh->commit or die $dbh->errstr if $oldAutoCommit;
+
+  '';
+
+}
+
 =back
 
 =head1 BUGS