Revision 19238d86
Von Werner Hahn vor mehr als 7 Jahren hinzugefügt
SL/Controller/ShopOrder.pm | ||
---|---|---|
21 | 21 |
'scalar --get_set_init' => [ qw(shop_order shops transferred js) ], |
22 | 22 |
); |
23 | 23 |
|
24 |
__PACKAGE__->run_before('check_auth'); |
|
24 | 25 |
__PACKAGE__->run_before('setup'); |
25 | 26 |
|
26 | 27 |
use Data::Dumper; |
... | ... | |
224 | 225 |
|
225 | 226 |
sub setup { |
226 | 227 |
my ($self) = @_; |
227 |
$::auth->assert('invoice_edit'); |
|
228 |
|
|
228 |
$::auth->assert('shop_part_edit'); |
|
229 | 229 |
$::request->layout->use_javascript("${_}.js") for qw(kivi.ShopOrder); |
230 | 230 |
} |
231 | 231 |
|
232 |
sub check_auth { |
|
233 |
$::auth->assert('shop_part_edit'); |
|
234 |
} |
|
232 | 235 |
# |
233 | 236 |
# Helper |
234 | 237 |
# |
SL/Controller/ShopPart.pm | ||
---|---|---|
335 | 335 |
} |
336 | 336 |
|
337 | 337 |
sub check_auth { |
338 |
return 1; # TODO: implement shop rights |
|
339 |
# $::auth->assert('shop'); |
|
338 |
$::auth->assert('shop_part_edit'); |
|
340 | 339 |
} |
341 | 340 |
|
342 | 341 |
sub init_shop_part { |
SL/InstallationCheck.pm | ||
---|---|---|
39 | 39 |
{ name => "JSON", url => "http://search.cpan.org/~makamaka", debian => 'libjson-perl' }, |
40 | 40 |
{ name => "List::MoreUtils", version => '0.21', url => "http://search.cpan.org/~vparseval/", debian => 'liblist-moreutils-perl' }, |
41 | 41 |
{ name => "List::UtilsBy", url => "http://search.cpan.org/~pevans/", debian => 'liblist-utilsby-perl' }, |
42 |
{ name => "LWP::Authen::Digest", url => "http://search.cpan.org/~gaas/", debian => 'libwww-perl', dist_name => 'libwww-perl' }, |
|
43 |
{ name => "LWP::UserAgent", url => "http://search.cpan.org/~gaas/", debian => 'libwww-perl', dist_name => 'libwww-perl' }, |
|
42 | 44 |
{ name => "Params::Validate", url => "http://search.cpan.org/~drolsky/", debian => 'libparams-validate-perl' }, |
43 | 45 |
{ name => "PBKDF2::Tiny", version => '0.005', url => "http://search.cpan.org/~arodland/", }, |
44 | 46 |
{ name => "PDF::API2", version => '2.000', url => "http://search.cpan.org/~areibens/", debian => 'libpdf-api2-perl' }, |
doc/UPGRADE | ||
---|---|---|
4 | 4 |
|
5 | 5 |
** BITTE FERTIGEN SIE VOR DEM UPGRADE EIN BACKUP IHRER DATENBANK(EN) AN! ** |
6 | 6 |
|
7 |
Upgrade auf v3.5.1 |
|
8 |
|
|
9 |
* Neue Perlabhängigkeiten |
|
10 |
|
|
11 |
* LWP::Authen::Digest für WebshopApi |
|
12 |
* LWP::UserAgent für WebshopApi |
|
13 |
|
|
7 | 14 |
Upgrade auf v3.5.0 |
8 | 15 |
=========================== |
9 | 16 |
|
locale/de/all | ||
---|---|---|
24 | 24 |
'#1 proposal(s) saved.' => '#1 Vorschläge gespeichert.', |
25 | 25 |
'#1 proposal(s) with #2 invoice(s) saved.' => '#1 Vorschlag(e) mit #2 Rechnung(en) abgespeichert', |
26 | 26 |
'#1 section(s)' => '#1 Abschnitt(e)', |
27 |
'#1 shoporders has been fetched' => '#1 Shopbestellungen wurden geholt', |
|
28 | 27 |
'#1 text block(s) back' => '#1 Textlock/-blöcke vorne', |
29 | 28 |
'#1 text block(s) front' => '#1 Textblock/-blöcke hinten', |
30 | 29 |
'%' => '%', |
... | ... | |
647 | 646 |
'Contrary to Reduced Master Data this will be shown as discount in records.' => 'Im Gegensatz zu Abschlag wird der Rabatt in Belegen ausgewiesen', |
648 | 647 |
'Conversion of "birthday" contact person attribute' => 'Umstellung des Kontaktpersonenfeldes "Geburtstag"', |
649 | 648 |
'Conversion to PDF failed: #1' => 'Konvertierung zu PDF schlug fehl: #1', |
649 |
'Conversion:' => 'Konversiom', |
|
650 | 650 |
'Converting to deliveryorder' => 'Konvertiere zu Lieferschein', |
651 | 651 |
'Copies' => 'Kopien', |
652 | 652 |
'Copy' => 'Kopieren', |
... | ... | |
703 | 703 |
'Create and edit sales delivery orders' => 'Lieferscheine für Kunden erfassen und bearbeiten', |
704 | 704 |
'Create and edit sales orders' => 'Auftragsbestätigungen erfassen und bearbeiten', |
705 | 705 |
'Create and edit sales quotations' => 'Angebote erfassen und bearbeiten', |
706 |
'Create and edit shopparts' => 'Webshopartikel anlegen und bearbeiten', |
|
706 | 707 |
'Create and edit vendor invoices' => 'Eingangsrechnungen erfassen und bearbeiten', |
708 |
'Create and edit webshops' => 'Webshopeinstellungen bearbeiten', |
|
707 | 709 |
'Create and print all invoices' => 'Alle Rechnungen erzeugen und ausdrucken', |
708 | 710 |
'Create and print invoices' => 'Rechnungen erzeugen und ausdrucken', |
709 | 711 |
'Create and print invoices for all delivery orders matching the filter' => 'Rechnungen für alle den Suchkriterien entsprechenden Lieferscheine erzeugen und ausdrucken', |
... | ... | |
733 | 735 |
'Created on' => 'Erstellt am', |
734 | 736 |
'Creating Documents' => 'Erzeuge Dokumente', |
735 | 737 |
'Creating invoices' => 'Erzeuge Rechnungen', |
736 |
'Creating orders' => 'erstelle Äufträge', |
|
737 | 738 |
'Creating the PDF failed:' => 'PDF-Erzeugung fehlgeschlagen:', |
738 | 739 |
'Creation Date' => 'Erstelldatum', |
739 | 740 |
'Credit' => 'Haben', |
... | ... | |
1403 | 1404 |
'From' => 'Von', |
1404 | 1405 |
'From Date' => 'Von', |
1405 | 1406 |
'From bin' => 'Ausgelagert', |
1407 |
'From shop #1 : #2 shoporders has been fetched' => '#2 Bestellungen von Webshop #2 geholt', |
|
1406 | 1408 |
'From this version on a new feature is available.' => 'Ab dieser Version ist ein neues Feature verfügbar.', |
1407 | 1409 |
'From this version on it is necessary to name a default value.' => 'Ab dieser Version benötigt kivitendo eine Standardwährung.', |
1408 | 1410 |
'From this version on the partnumber of services, articles and assemblies have to be unique.' => 'Ab dieser Version müssen Artikelnummern eindeutig vergeben werden.', |
... | ... | |
1437 | 1439 |
'Generate and print sales delivery orders' => 'Erzeuge und drucke Lieferscheine', |
1438 | 1440 |
'Generic Tax Report' => 'USTVA Bericht', |
1439 | 1441 |
'Germany' => 'Deutschland', |
1442 |
'Get shoporders' => 'Shopbestellungen holen und bearbeiten', |
|
1440 | 1443 |
'Git revision: #1, #2 #3' => 'Git-Revision: #1, #2 #3', |
1441 | 1444 |
'Given Name' => 'Vorname', |
1442 | 1445 |
'Gldate' => 'Erfassungsdatum', |
... | ... | |
1844 | 1847 |
'Multiple addresses can be entered separated by commas.' => 'Mehrere Adressen können durch Kommata getrennt angegeben werden.', |
1845 | 1848 |
'MwSt. inkl.' => 'MwSt. inkl.', |
1846 | 1849 |
'Name' => 'Name', |
1850 |
'Name 2' => '', |
|
1851 |
'Name 3' => '', |
|
1847 | 1852 |
'Name and Street' => 'Name und Straße', |
1848 | 1853 |
'Name does not make sense without any bsooqr options' => 'Option "Name in gewählten Belegen" wird ignoriert.', |
1849 | 1854 |
'Name in Selected Records' => 'Name in gewählten Belegen', |
... | ... | |
1989 | 1994 |
'November' => 'November', |
1990 | 1995 |
'Number' => 'Nummer', |
1991 | 1996 |
'Number Format' => 'Zahlenformat', |
1997 |
'Number data sets' => 'Anzahl Datensätze', |
|
1992 | 1998 |
'Number missing in Row' => 'Nummer fehlt in Zeile', |
1999 |
'Number of Data: ' => '', |
|
1993 | 2000 |
'Number of bins' => 'Anzahl Lagerplätze', |
1994 | 2001 |
'Number of columns of custom variables in form details (second row)' => 'Anzahl der Spalten für benutzerdef. Variablen in den Formulardetails (zweite Positionszeile)', |
1995 | 2002 |
'Number of copies' => 'Anzahl Kopien', |
2003 |
'Number of data uploaded:' => 'Uploaded Datensätze', |
|
1996 | 2004 |
'Number of deliveryorders created:' => 'Anzahl erzeugter Lieferscheine:', |
1997 | 2005 |
'Number of deliveryorders printed:' => 'Anzahl gedruckter Lieferscheine:', |
1998 | 2006 |
'Number of entries changed: #1' => 'Anzahl geänderter Einträge: #1', |
... | ... | |
3068 | 3076 |
'The connection to the database could not be established.' => 'Die Verbindung zur Datenbank konnte nicht hergestellt werden.', |
3069 | 3077 |
'The connection to the template database failed:' => 'Die Verbindung zur Vorlagendatenbank schlug fehl:', |
3070 | 3078 |
'The connection to the webshop is not success. Message: #1 -- URL: #2 -- Datatype: #3' => 'Die Verbindung zum Webshop ist fehlgeschlagen. Meldung: #1 -- URL: #2 -- Datentyp: #3', |
3071 |
'The connection to the webshop is success. Version: #1 -- Revision: #2' => 'Die Verbindung zum Webshop ist erfolgreich Version: #1 -- Revision: #2',
|
|
3079 |
'The connection to the webshop was successful. Version: #1 -- Revision: #2' => 'Die Verbindung zum Webshop steht: Version #1 -- Revison: #2',
|
|
3072 | 3080 |
'The connection was established successfully.' => 'Die Verbindung zur Datenbank wurde erfolgreich hergestellt.', |
3073 | 3081 |
'The contact person attribute "birthday" is converted from a free-form text field into a date field.' => 'Das Kontaktpersonenfeld "Geburtstag" wird von einem freien Textfeld auf ein Datumsfeld umgestellt.', |
3074 | 3082 |
'The creation of the authentication database failed:' => 'Das Anlegen der Authentifizierungsdatenbank schlug fehl:', |
... | ... | |
3237 | 3245 |
'The shop has been created.' => 'Shop hinzugefügt', |
3238 | 3246 |
'The shop has been deleted.' => 'Shop gelöscht', |
3239 | 3247 |
'The shop has been saved.' => 'Shop gespeichert', |
3240 |
'The shop has been used and cannot be deleted.' => 'Der Shop ist gebraucht und kann nicht gelöscht werden',
|
|
3248 |
'The shop is in use and cannot be deleted.' => 'Der Webshop wird benutzt und kann nicht gelöscht werden',
|
|
3241 | 3249 |
'The shop part has been created.' => 'Shopartikel angelegt', |
3242 | 3250 |
'The shop part has been saved.' => 'Shopartikel gespeichert', |
3243 | 3251 |
'The shop part wasn\'t updated.' => 'Shopartikel wurde nicht aktualisiert!', |
... | ... | |
3563 | 3571 |
'Upload shopimage' => 'Upload Shopbild', |
3564 | 3572 |
'Uploaded at' => 'Hochgeladen um', |
3565 | 3573 |
'Uploaded on #1, size #2 kB' => 'Am #1 hochgeladen, Größe #2 kB', |
3574 |
'Uploading Data' => 'Uploading', |
|
3566 | 3575 |
'UsageE' => 'Lagerentnahme', |
3567 | 3576 |
'UsageWithout' => 'Entnommen (ohne Korr.)', |
3568 | 3577 |
'Use As New' => 'Als neu verwenden', |
locale/en/all | ||
---|---|---|
13 | 13 |
' Date missing!' => '', |
14 | 14 |
' bytes, max=' => '', |
15 | 15 |
' missing!' => '', |
16 |
' not found' => '', |
|
17 | 16 |
'#1 (custom variable)' => '', |
18 | 17 |
'#1 CB transactions and #1 OB transactions generated.' => '', |
19 | 18 |
'#1 MD' => '', |
... | ... | |
25 | 24 |
'#1 proposal(s) saved.' => '', |
26 | 25 |
'#1 proposal(s) with #2 invoice(s) saved.' => '', |
27 | 26 |
'#1 section(s)' => '', |
28 |
'#1 shoporders has been fetched' => '', |
|
29 | 27 |
'#1 text block(s) back' => '', |
30 | 28 |
'#1 text block(s) front' => '', |
31 | 29 |
'%' => '', |
... | ... | |
648 | 646 |
'Contrary to Reduced Master Data this will be shown as discount in records.' => '', |
649 | 647 |
'Conversion of "birthday" contact person attribute' => '', |
650 | 648 |
'Conversion to PDF failed: #1' => '', |
649 |
'Conversion:' => '', |
|
651 | 650 |
'Converting to deliveryorder' => '', |
652 | 651 |
'Copies' => '', |
653 | 652 |
'Copy' => '', |
... | ... | |
734 | 733 |
'Created on' => '', |
735 | 734 |
'Creating Documents' => '', |
736 | 735 |
'Creating invoices' => '', |
737 |
'Creating orders' => '', |
|
738 | 736 |
'Creating the PDF failed:' => '', |
739 | 737 |
'Creation Date' => '', |
740 | 738 |
'Credit' => '', |
... | ... | |
773 | 771 |
'Current version' => '', |
774 | 772 |
'Current year' => '', |
775 | 773 |
'Currently #1 delivery orders can be converted into invoices and printed.' => '', |
774 |
'Custom CSV format' => '', |
|
776 | 775 |
'Custom Variables' => '', |
777 | 776 |
'Custom shipto' => '', |
778 | 777 |
'Custom variables for module' => '', |
... | ... | |
805 | 804 |
'Customer/Vendor (database ID)' => '', |
806 | 805 |
'Customer/Vendor Name' => '', |
807 | 806 |
'Customer/Vendor Number' => '', |
808 |
'Customer/Vendor name' => '', |
|
809 |
'Customer/Vendor number' => '', |
|
810 | 807 |
'Customer/Vendor/Remote name' => '', |
811 | 808 |
'Customername' => '', |
812 | 809 |
'Customernumber' => '', |
... | ... | |
1405 | 1402 |
'From' => '', |
1406 | 1403 |
'From Date' => '', |
1407 | 1404 |
'From bin' => '', |
1405 |
'From shop #1 : #2 shoporders has been fetched' => '', |
|
1408 | 1406 |
'From this version on a new feature is available.' => '', |
1409 | 1407 |
'From this version on it is necessary to name a default value.' => '', |
1410 | 1408 |
'From this version on the partnumber of services, articles and assemblies have to be unique.' => '', |
... | ... | |
1907 | 1905 |
'No changes since previous version.' => '', |
1908 | 1906 |
'No clients have been created yet.' => '', |
1909 | 1907 |
'No contact selected to delete' => '', |
1908 |
'No contra account selected!' => '', |
|
1910 | 1909 |
'No customer has been selected yet.' => '', |
1911 | 1910 |
'No data was found.' => '', |
1912 | 1911 |
'No default currency' => '', |
... | ... | |
1998 | 1997 |
'Number of bins' => '', |
1999 | 1998 |
'Number of columns of custom variables in form details (second row)' => '', |
2000 | 1999 |
'Number of copies' => '', |
2000 |
'Number of data uploaded:' => '', |
|
2001 | 2001 |
'Number of deliveryorders created:' => '', |
2002 | 2002 |
'Number of deliveryorders printed:' => '', |
2003 | 2003 |
'Number of entries changed: #1' => '', |
... | ... | |
2123 | 2123 |
'Part Unit' => '', |
2124 | 2124 |
'Part classifications' => '', |
2125 | 2125 |
'Part picker' => '', |
2126 |
'Part with Partnumber: ' => '',
|
|
2126 |
'Part with partnumber: #1 not found' => '',
|
|
2127 | 2127 |
'PartClassAbbreviation' => '', |
2128 | 2128 |
'Part_br_Description' => 'Description', |
2129 | 2129 |
'Partdescriptipion' => '', |
... | ... | |
2551 | 2551 |
'SEPA message ID' => '', |
2552 | 2552 |
'SEPA message IDs' => '', |
2553 | 2553 |
'SEPA strings' => '', |
2554 |
'SWIFT MT940 format' => '', |
|
2554 | 2555 |
'Saldo' => '', |
2555 | 2556 |
'Saldo Credit' => '', |
2556 | 2557 |
'Saldo Debit' => '', |
... | ... | |
2747 | 2748 |
'Shoporder deleted -- ' => '', |
2748 | 2749 |
'Shoporder not found' => '', |
2749 | 2750 |
'Shoporderlock' => '', |
2751 |
'Shoporders' => '', |
|
2750 | 2752 |
'Shops' => '', |
2751 | 2753 |
'Short' => '', |
2752 | 2754 |
'Should ap transactions be and when should they be changeable or deleteable after posting?' => '', |
... | ... | |
2794 | 2796 |
'Show items from invoices individually' => '', |
2795 | 2797 |
'Show mappings (csv_import)' => '', |
2796 | 2798 |
'Show old dunnings' => '', |
2799 |
'Show only marked as paid invoices' => '', |
|
2797 | 2800 |
'Show order' => '', |
2798 | 2801 |
'Show overdue sales quotations and requests for quotations...' => '', |
2799 | 2802 |
'Show parts' => '', |
... | ... | |
3069 | 3072 |
'The connection to the database could not be established.' => '', |
3070 | 3073 |
'The connection to the template database failed:' => '', |
3071 | 3074 |
'The connection to the webshop is not success. Message: #1 -- URL: #2 -- Datatype: #3' => '', |
3072 |
'The connection to the webshop is success. Version: #1 -- Revision: #2' => '',
|
|
3075 |
'The connection to the webshop was successful. Version: #1 -- Revision: #2' => '',
|
|
3073 | 3076 |
'The connection was established successfully.' => '', |
3074 | 3077 |
'The contact person attribute "birthday" is converted from a free-form text field into a date field.' => '', |
3075 | 3078 |
'The creation of the authentication database failed:' => '', |
... | ... | |
3106 | 3109 |
'The documents have been sent to the printer \'#1\'.' => '', |
3107 | 3110 |
'The dunnings have been printed.' => '', |
3108 | 3111 |
'The email has been sent.' => '', |
3112 |
'The email was not sent due to the following error: #1.' => '', |
|
3109 | 3113 |
'The employee is missing.' => '', |
3110 | 3114 |
'The end date is the last day for which invoices will possibly be created.' => '', |
3111 | 3115 |
'The execution schedule is invalid.' => '', |
... | ... | |
3237 | 3241 |
'The shop has been created.' => '', |
3238 | 3242 |
'The shop has been deleted.' => '', |
3239 | 3243 |
'The shop has been saved.' => '', |
3240 |
'The shop has been used and cannot be deleted.' => '',
|
|
3244 |
'The shop is in use and cannot be deleted.' => '',
|
|
3241 | 3245 |
'The shop part has been created.' => '', |
3242 | 3246 |
'The shop part has been saved.' => '', |
3243 | 3247 |
'The shop part wasn\'t updated.' => '', |
... | ... | |
3563 | 3567 |
'Upload shopimage' => '', |
3564 | 3568 |
'Uploaded at' => '', |
3565 | 3569 |
'Uploaded on #1, size #2 kB' => '', |
3570 |
'Uploading Data' => '', |
|
3566 | 3571 |
'UsageE' => 'Report about stock withdrawal', |
3567 | 3572 |
'UsageWithout' => 'Usage (without correction)', |
3568 | 3573 |
'Use As New' => '', |
menus/user/00-erp.yaml | ||
---|---|---|
373 | 373 |
- parent: webshop |
374 | 374 |
id: webshop_import |
375 | 375 |
name: Webshop Import |
376 |
access: shop_order |
|
376 | 377 |
params: |
377 | 378 |
action: ShopOrder/list |
378 | 379 |
filter.transferred:eq_ignore_empty: 0 |
... | ... | |
382 | 383 |
- parent: webshop |
383 | 384 |
id: webshop_articles |
384 | 385 |
name: Webshop articles |
386 |
access: shop_part_edit |
|
385 | 387 |
params: |
386 | 388 |
action: ShopPart/list_articles |
387 | 389 |
db: shop_parts |
... | ... | |
1265 | 1267 |
id: system_shops |
1266 | 1268 |
name: Web shops |
1267 | 1269 |
order: 2350 |
1270 |
access: edit_shop_config |
|
1268 | 1271 |
params: |
1269 | 1272 |
action: Shop/list |
1270 | 1273 |
- parent: system |
sql/Pg-upgrade2-auth/webshop_api_rights.pl | ||
---|---|---|
1 |
# @tag: webshop_api_rights |
|
2 |
# @description: Setzt die Rechte Shopconfig, Shopbestellungen, Shopartikel, per Default erlaubt |
|
3 |
# @depends: release_3_5_0 |
|
4 |
package SL::DBUpgrade2::Auth::webshop_api_rights; |
|
5 |
|
|
6 |
use strict; |
|
7 |
use utf8; |
|
8 |
|
|
9 |
use parent qw(SL::DBUpgrade2::Base); |
|
10 |
|
|
11 |
use SL::DBUtils; |
|
12 |
|
|
13 |
sub run { |
|
14 |
my ($self) = @_; |
|
15 |
|
|
16 |
$self->db_query("INSERT INTO auth.master_rights (position, name, description) VALUES ( 550, 'shop_part_edit', 'Create and edit shopparts')"); |
|
17 |
$self->db_query("INSERT INTO auth.master_rights (position, name, description) VALUES ( 950, 'shop_order', 'Get shoporders')"); |
|
18 |
$self->db_query("INSERT INTO auth.master_rights (position, name, description) VALUES ( 4300, 'edit_shop_config', 'Create and edit webshops')"); |
|
19 |
|
|
20 |
my $groups = $main::auth->read_groups(); |
|
21 |
|
|
22 |
foreach my $group (values %{$groups}) { |
|
23 |
$group->{rights}->{shop_part_edit} = 1; |
|
24 |
$group->{rights}->{shop_order} = 1; |
|
25 |
$group->{rights}->{edit_shop_config} = 1; |
|
26 |
$main::auth->save_group($group); |
|
27 |
} |
|
28 |
|
|
29 |
return 1; |
|
30 |
} # end run |
|
31 |
|
|
32 |
1; |
templates/webpages/part/form.html | ||
---|---|---|
41 | 41 |
[%- IF CUSTOM_VARIABLES.size %] |
42 | 42 |
<li><a href="#custom_variables">[% 'Custom Variables' | $T8 %]</a></li> |
43 | 43 |
[%- END %] |
44 |
[% IF AUTH.assert('shop_part_edit', 1) %] |
|
44 | 45 |
<li><a href="#shop_variables">[% 'Shop variables' | $T8 %]</a></li> |
46 |
[% END %] |
|
45 | 47 |
</ul> |
46 | 48 |
|
47 | 49 |
<div id="basic_data"> |
... | ... | |
68 | 70 |
<div id="sales_price_information"> |
69 | 71 |
[% PROCESS part/_sales_price_information.html id=SELF.part.id %] |
70 | 72 |
</div> |
73 |
[% IF AUTH.assert('shop_part_edit', 1) %] |
|
71 | 74 |
<div id="shop_variables"> |
72 | 75 |
[% PROCESS 'part/_shop.html' %] |
73 | 76 |
</div> |
74 | 77 |
[%- END %] |
78 |
[%- END %] |
|
75 | 79 |
|
76 | 80 |
[%- IF CUSTOM_VARIABLES.size %] |
77 | 81 |
<div id="custom_variables"> |
Auch abrufbar als: Unified diff
Shopmodul: 3 Rechte für das Shopmodul
Shopartikel anlegen und bearbeiten,
Shopbestellugen holen und bearbeiten
Shopkonfiguration bearbeiten