X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=SL%2FFile%2FBackend%2FWebdav.pm;h=bf8f9af61a2daa2f8e2c16b2677d587b148e6f85;hb=479d8db7bb8da885e476862101f5d0014fdc4fb2;hp=c457080afb02125f9076cb26d53e846b95656cbf;hpb=0ad9546c81f6f59bb8cd0df50e4d8a778697f7da;p=kivitendo-erp.git diff --git a/SL/File/Backend/Webdav.pm b/SL/File/Backend/Webdav.pm index c457080af..bf8f9af61 100644 --- a/SL/File/Backend/Webdav.pm +++ b/SL/File/Backend/Webdav.pm @@ -5,12 +5,13 @@ use strict; use parent qw(SL::File::Backend); use SL::DB::File; -#use SL::Webdav; +use SL::System::Process; use File::Copy; use File::Slurp; use File::Basename; use File::Path qw(make_path); use File::MimeInfo::Magic; +use File::stat; # # public methods @@ -74,8 +75,7 @@ sub get_mtime { $main::lxdebug->message(LXDebug->DEBUG2(), "version=" .$params{version}); my ($path, undef, undef) = $self->webdav_path($params{dbfile}); die "No file found in Backend: " . $path unless -f $path; - my @st = stat($path); - my $dt = DateTime->from_epoch(epoch => $st[9])->clone(); + my $dt = DateTime->from_epoch(epoch => stat($path)->mtime, time_zone => $::locale->get_local_time_zone()->name)->clone(); $main::lxdebug->message(LXDebug->DEBUG2(), "dt=" .$dt); return $dt; } @@ -113,47 +113,51 @@ sub enabled { # my %type_to_path = ( - sales_quotation => 'angebote', - sales_order => 'bestellungen', - request_quotation => 'anfragen', - purchase_order => 'lieferantenbestellungen', - sales_delivery_order => 'verkaufslieferscheine', - purchase_delivery_order => 'einkaufslieferscheine', - credit_note => 'gutschriften', - invoice => 'rechnungen', - purchase_invoice => 'einkaufsrechnungen', - part => 'waren', - service => 'dienstleistungen', - assembly => 'erzeugnisse', - letter => 'briefe', - general_ledger => 'dialogbuchungen', - gl_transaction => 'dialogbuchungen', - accounts_payable => 'kreditorenbuchungen', - shop_image => 'shopbilder', - customer => 'kunden', - vendor => 'lieferanten', + sales_quotation => 'angebote', + sales_order => 'bestellungen', + request_quotation => 'anfragen', + purchase_order => 'lieferantenbestellungen', + sales_delivery_order => 'verkaufslieferscheine', + purchase_delivery_order => 'einkaufslieferscheine', + credit_note => 'gutschriften', + invoice => 'rechnungen', + invoice_for_advance_payment => 'rechnungen', + final_invoice => 'rechnungen', + purchase_invoice => 'einkaufsrechnungen', + part => 'waren', + service => 'dienstleistungen', + assembly => 'erzeugnisse', + letter => 'briefe', + general_ledger => 'dialogbuchungen', + gl_transaction => 'dialogbuchungen', + accounts_payable => 'kreditorenbuchungen', + shop_image => 'shopbilder', + customer => 'kunden', + vendor => 'lieferanten', ); my %type_to_model = ( - sales_quotation => 'Order', - sales_order => 'Order', - request_quotation => 'Order', - purchase_order => 'Order', - sales_delivery_order => 'DeliveryOrder', - purchase_delivery_order => 'DeliveryOrder', - credit_note => 'Invoice', - invoice => 'Invoice', - purchase_invoice => 'PurchaseInvoice', - part => 'Part', - service => 'Part', - assembly => 'Part', - letter => 'Letter', - general_ledger => 'GLTransaction', - gl_transaction => 'GLTransaction', - accounts_payable => 'GLTransaction', - shop_image => 'Part', - customer => 'Customer', - vendor => 'Vendor', + sales_quotation => 'Order', + sales_order => 'Order', + request_quotation => 'Order', + purchase_order => 'Order', + sales_delivery_order => 'DeliveryOrder', + purchase_delivery_order => 'DeliveryOrder', + credit_note => 'Invoice', + invoice => 'Invoice', + invoice_for_advance_payment => 'Invoice', + final_invoice => 'Invoice', + purchase_invoice => 'PurchaseInvoice', + part => 'Part', + service => 'Part', + assembly => 'Part', + letter => 'Letter', + general_ledger => 'GLTransaction', + gl_transaction => 'GLTransaction', + accounts_payable => 'GLTransaction', + shop_image => 'Part', + customer => 'Customer', + vendor => 'Vendor', ); my %model_to_number = ( @@ -186,17 +190,18 @@ sub webdav_path { } $main::lxdebug->message(LXDebug->DEBUG2(), "file_name=" . $dbfile->file_name ." number=".$number); + my @fileparts = split(/_/, $dbfile->file_name); + my $number_ext = pop @fileparts; + my ($maynumber, $ext) = split(/\./, $number_ext, 2); + push @fileparts, $maynumber if $maynumber ne $number; + + my $basename = join('_', @fileparts); + my $path = File::Spec->catdir($self->get_rootdir, "webdav", $::auth->client->{id}, $type, $number); if (!-d $path) { File::Path::make_path($path, { chmod => 0770 }); } - # simply add the timestring before the last . - # fails for .tar.gz but the number extraction algorithm failed for all - # '123 Storno zu 456' cases and doubled the name like: - # Rechnung_123_Storno_zu_456_202113104 Storno zu 456_20211123_113023 - # TODO extension should be part of the File Model (filetype) - my ($filename, $ext) = split(/\.([^\.]+)$/, $dbfile->file_name); - my $fname = $filename . '_' . $dbfile->itime->strftime('%Y%m%d_%H%M%S'); + my $fname = $basename . '_' . $number . '_' . $dbfile->itime->strftime('%Y%m%d_%H%M%S'); $fname .= '.' . $ext if $ext; $main::lxdebug->message(LXDebug->DEBUG2(), "webdav path=" . $path . " filename=" . $fname); @@ -204,17 +209,7 @@ sub webdav_path { return (File::Spec->catfile($path, $fname), $path, $fname); } -sub get_rootdir { - my ($self) = @_; - - #TODO immer noch das alte Problem: - #je nachdem von woher der Aufruf kommt ist man in ./users oder . - my $rootdir = POSIX::getcwd(); - my $basename = basename($rootdir); - my $dirname = dirname($rootdir); - $rootdir = $dirname if $basename eq 'users'; - return $rootdir; -} +sub get_rootdir { SL::System::Process::exe_dir() } sub _get_number_from_model { my ($self, $dbfile) = @_; @@ -344,5 +339,3 @@ The synchronization must be tested and a periodical task is needed to synchroniz Martin Helmling Emartin.helmling@opendynamic.deE =cut - -