Projekt

Allgemein

Profil

« Zurück | Weiter » 

Revision 4cb3ecfd

Von Jan Büren vor mehr als 13 Jahren hinzugefügt

  • ID 4cb3ecfd6f144901ed89dae7acafdf1c124c53f4
  • Vorgänger 90221504
  • Nachfolger 66ddc388

Webdav-Komponente: Das Erstellen des Verzeichnisses ausgelagert. Ferner den Beleg auch in das Webdav-Verzeichnis kopieren.
Offen: Fehlerbehandlung in Common.pm - ggf. gleich revert

Unterschiede anzeigen:

SL/Common.pm
13 13

  
14 14
use Time::HiRes qw(gettimeofday);
15 15
use Data::Dumper;
16
use File::Copy;
16 17

  
17 18
use SL::DBUtils;
18 19

  
......
330 331
  $main::lxdebug->leave_sub();
331 332
}
332 333

  
334
#
335
# Legt ein entsprechendes Webdav-Verzeichnis an, falls
336
# Webdav als Option konfiguriert ist
337
#
333 338
sub webdav_folder {
334 339
  $main::lxdebug->enter_sub();
335 340

  
......
338 343
  return $main::lxdebug->leave_sub()
339 344
    unless ($::lx_office_conf{features}->{webdav} && $form->{id});
340 345

  
341
  my ($path, $number);
346
  my $path = get_webdav_folder($form); # ausgelagert, wg. D.R.Y.
342 347

  
343 348
  $form->{WEBDAV} = [];
344 349

  
345
  if ($form->{type} eq "sales_quotation") {
346
    ($path, $number) = ("angebote", $form->{quonumber});
347
  } elsif ($form->{type} eq "sales_order") {
348
    ($path, $number) = ("bestellungen", $form->{ordnumber});
349
  } elsif ($form->{type} eq "request_quotation") {
350
    ($path, $number) = ("anfragen", $form->{quonumber});
351
  } elsif ($form->{type} eq "purchase_order") {
352
    ($path, $number) = ("lieferantenbestellungen", $form->{ordnumber});
353
  } elsif ($form->{type} eq "sales_delivery_order") {
354
    ($path, $number) = ("verkaufslieferscheine", $form->{donumber});
355
  } elsif ($form->{type} eq "purchase_delivery_order") {
356
    ($path, $number) = ("einkaufslieferscheine", $form->{donumber});
357
  } elsif ($form->{type} eq "credit_note") {
358
    ($path, $number) = ("gutschriften", $form->{invnumber});
359
  } elsif ($form->{vc} eq "customer") {
360
    ($path, $number) = ("rechnungen", $form->{invnumber});
361
  } else {
362
    ($path, $number) = ("einkaufsrechnungen", $form->{invnumber});
363
  }
364

  
365
  return $main::lxdebug->leave_sub() unless ($path && $number);
366

  
367
  $number =~ s|[/\\]|_|g;
368

  
369
  $path = "webdav/${path}/${number}";
350
  return $main::lxdebug->leave_sub() unless ($path);
370 351

  
371 352
  if (!-d $path) {
372 353
    mkdir_with_parents($path);
......
573 554
  }
574 555
}
575 556

  
557
#
558
# Diese Routine baut aus dem Masken-Typ und der
559
# Beleg-Nummer, das entsprechende Webdav-Verzeichnis zusammen
560
# Nimmt leider noch die ganze Form entgegen und den if-elsif-Block
561
# sollte man schöner "dispatchen"
562
# Ergänzung 6.5.2011, den else-Zweig defensiver gestaltet und mit
563
# -1 als n.i.O. Rückgabewert versehen
564
#
565
sub get_webdav_folder {
566
  $main::lxdebug->enter_sub();
567

  
568
  my ($form) = @_;
569

  
570
  # TODO Ergänzung um check_params
571

  
572
  my ($path, $number);
573

  
574

  
575
  if ($form->{type} eq "sales_quotation") {
576
    ($path, $number) = ("angebote", $form->{quonumber});
577
  } elsif ($form->{type} eq "sales_order") {
578
    ($path, $number) = ("bestellungen", $form->{ordnumber});
579
  } elsif ($form->{type} eq "request_quotation") {
580
    ($path, $number) = ("anfragen", $form->{quonumber});
581
  } elsif ($form->{type} eq "purchase_order") {
582
    ($path, $number) = ("lieferantenbestellungen", $form->{ordnumber});
583
  } elsif ($form->{type} eq "sales_delivery_order") {
584
    ($path, $number) = ("verkaufslieferscheine", $form->{donumber});
585
  } elsif ($form->{type} eq "purchase_delivery_order") {
586
    ($path, $number) = ("einkaufslieferscheine", $form->{donumber});
587
  } elsif ($form->{type} eq "credit_note") {
588
    ($path, $number) = ("gutschriften", $form->{invnumber});
589
  } elsif ($form->{vc} eq "customer") {
590
    ($path, $number) = ("rechnungen", $form->{invnumber});
591
  } elsif ($form->{vc} eq "vendor") {
592
    ($path, $number) = ("einkaufsrechnungen", $form->{invnumber});
593
  } else {
594
    # wir befinden uns nicht in einer belegmaske
595
    # scheinbar wird diese routine auch bspw. bei waren
596
    # aufgerufen - naja, steuerung über Form.pm halt ...
597
    $main::lxdebug->leave_sub();
598
    return undef;
599
  }
600

  
601
  return $main::lxdebug->leave_sub() unless ($path && $number);
602

  
603
  $number =~ s|[/\\]|_|g;
604

  
605
  $path = "webdav/${path}/${number}";
606

  
607
  $main::lxdebug->leave_sub();
608

  
609
  return $path;
610

  
611
}
612

  
613
#
614
# Falls Webdav aktiviert ist, auch den generierten Beleg in das
615
# Webdav-Verzeichnis kopieren
616
#
617
#
618
sub copy_file_to_webdav_folder {
619
  $main::lxdebug->enter_sub();
620
  
621
  my ($form) = @_;  
622
  # leider die ganze form
623
  # da get_webdav_folder die auch noch benötigt
624
  # aber hier ein paar checks:
625
  # OFFEN: check_params kann ich ja nicht eine
626
  # abgespeckte $form übergeben, oder?
627
  $form->{type} = ''; 
628
  foreach my $item (qw(tmpdir tmpfile type)){
629
    if (!$form->{$item}){  # wahr, bei undef oder ''
630
      $main::lxdebug->message(0, 'Missing parameter'); 
631
      $main::form->error($main::locale->text("Missing parameter for webdav file copy"));
632
    }
633
  }
634

  
635
  # Den Webdav-Ordner ÜBER exakt denselben Mechanismus wie beim
636
  # Anlegen bestimmen
637
  # leider ist das auch das Kriterium, ob überhaupt ein "Anlegen"
638
  # erlaubt ist
639
  my $webdav_folder =  get_webdav_folder($form);
640

  
641
  # hier auch nochmal prüfen
642
  if (! $webdav_folder){
643
    $main::lxdebug->leave_sub();
644
    return undef; # s.o. erstmal so ...
645
    $main::form->error($main::locale->text("Cannot check correct webdav folder"));
646
  }
647

  
648
  if(!copy(join('/', $form->{tmpdir}, $form->{tmpfile}), join('/', $form->{cwd},  $webdav_folder))){ 
649
    my $j = join('/', $form->{tmpdir}, $form->{tmpfile});
650
    my $k = join('/', $form->{cwd},  $webdav_folder);
651
    $main::lxdebug->message(0, "Copy file from $j to $k failed");
652
    $main::form->error($main::locale->text("Copy file from #1 to #2 failed", $j, $k));
653
  }
654

  
655
  $main::lxdebug->leave_sub();
656
}
657

  
576 658
1;
SL/Form.pm
1203 1203
  local (*IN, *OUT);
1204 1204

  
1205 1205
  my $userspath = $::lx_office_conf{paths}->{userspath};
1206

  
1207 1206
  $self->{"cwd"} = getcwd();
1208 1207
  $self->{"tmpdir"} = $self->{cwd} . "/${userspath}";
1209 1208

  
......
1295 1294
    $result = $template->parse(*STDOUT);
1296 1295
  }
1297 1296

  
1297
  Common::copy_file_to_webdav_folder($self)  if ($self->{webdav});
1298 1298
  if (!$result) {
1299 1299
    $self->cleanup();
1300 1300
    $self->error("$self->{IN} : " . $template->get_error());

Auch abrufbar als: Unified diff