Projekt

Allgemein

Profil

« Zurück | Weiter » 

Revision a3e18a2a

Von Tamino Steinert vor etwa 1 Jahr hinzugefügt

  • ID a3e18a2af56576508d36eaf9fd53130c13a18706
  • Vorgänger 89ea5dd6
  • Nachfolger 8761a99f

Model::Record: update_for_save_as_new implementiert

Unterschiede anzeigen:

SL/Model/Record.pm
12 12
use SL::DB::Status;
13 13
use SL::DB::ValidityToken;
14 14

  
15
use SL::Util qw(trim);
15 16
use SL::Locale::String qw(t8);
16 17

  
17 18
sub new {
......
240 241
}
241 242

  
242 243
sub update_for_save_as_new {
243
  my ($class, $record, %params) = @_;
244
  my ($class, $saved_record, $changed_record, %params) = @_;
244 245

  
245 246
  # der übergebene beleg wurde mit new_from erstellt und muss nachbearbeitet werden:
246 247
  # - transadte, reqdate müssen überschrieben werden
247 248
  # - number muss überschrieben werden
248 249
  # - employee auf aktuellen setzen
249 250

  
251
  my $type_info = {
252
    # order
253
    sales_quotation => {
254
      get_new_reqdate => sub {
255
        if ($::instance_conf->get_reqdate_on) {
256
          return '';
257
        } else {
258
          return DateTime->today_local->next_workday(
259
            extra_days => $::instance_conf->get_reqdate_interval());
260
        }
261
      },
262
    },
263
    sales_order => {
264
      get_new_reqdate => sub {
265
        if ($::instance_conf->get_deliverydate_on) {
266
          return '';
267
        } else {
268
          return DateTime->today_local->next_workday(
269
            extra_days => $::instance_conf->get_delivery_date_interval());
270
        }
271
      },
272
    },
273
    request_quotation => {
274
      get_new_reqdate => sub { DateTime->today_local->next_workday(extra_days => 1); },
275
    },
276
    purchase_order => {
277
      get_new_reqdate => sub { DateTime->today_local->next_workday(extra_days => 1); },
278
    },
279
    # delivery_order
280
    rma_delivery_order => {
281
      get_new_reqdate => sub {
282
        DateTime->today_local->next_workday(extra_days => 1);
283
      },
284
    },
285
    sales_delivery_order => {
286
      get_new_reqdate => sub {
287
        DateTime->today_local->next_workday(extra_days => 1);
288
      },
289
    },
290
    supplier_delivery_order => {
291
      get_new_reqdate => sub {
292
        DateTime->today_local->next_workday(extra_days => 1);
293
      },
294
    },
295
    purchase_delivery_order => {
296
      get_new_reqdate => sub {
297
        DateTime->today_local->next_workday(extra_days => 1);
298
      },
299
    },
300
    # reclamation
301
    sales_reclamation => {
302
      get_new_reqdate => sub {
303
        '';
304
      },
305
    },
306
    purchase_reclamation => {
307
      get_new_reqdate => sub {
308
        '';
309
      },
310
    },
311
  };
312

  
313
  # changed_record
314
  my %new_attrs;
315
  # Lets assign a new number if the user hasn't changed the previous one.
316
  # If it has been changed manually then use it as-is.
317
  $new_attrs{number}    = (trim($changed_record->number) eq $saved_record->number)
318
                        ? ''
319
                        : trim($changed_record->number);
320

  
321
  # Clear transdate unless changed
322
  $new_attrs{transdate} = ($changed_record->transdate == $saved_record->transdate)
323
                        ? DateTime->today_local
324
                        : $changed_record->transdate;
325

  
326
  # Set new reqdate unless changed if it is enabled in client config
327
  if ($changed_record->reqdate == $saved_record->reqdate) {
328
      $new_attrs{reqdate} = $type_info->{$saved_record->type}->{get_new_reqdate}->();
329
  }
330

  
331
  # Update employee
332
  $new_attrs{employee}  = SL::DB::Manager::Employee->current;
333

  
334

  
335
  my $new_record = SL::Model::Record->new_from_workflow($changed_record, $saved_record->type, no_linked_records => 1, attributes => \%new_attrs);
336

  
250 337
  # return: nichts
251 338
  # fehler: exception
339
  return $new_record;
252 340
}
253 341

  
254 342

  
......
292 380
=head1 AUTHORS
293 381

  
294 382
Bernd Bleßmann E<lt>bernd@kivitendo-premium.deE<gt>
383
Tamino Steinert E<lt>tamino.steinert@tamino.stE<gt>
295 384
...
296 385

  
297 386
=cut

Auch abrufbar als: Unified diff