Compare commits

..

380 Commits

Author SHA1 Message Date
felix 4b9bc8754b www/themes/new/templates/loginpage.tpl aktualisiert 2024-03-02 17:13:58 +01:00
felix 980b4d3056 www/themes/new/templates/loginpage.tpl aktualisiert 2024-03-02 17:10:16 +01:00
felix 602bd21f99 www/themes/new/templates/loginpage.tpl aktualisiert 2024-03-02 17:07:46 +01:00
felix 4e8c12b631 Dateien nach "www/themes/new/templates" hochladen 2024-03-02 17:04:28 +01:00
felix aff20577d0 www/themes/new/templates/sidebar_logo.svg gelöscht 2024-03-02 17:04:04 +01:00
felix 212789faa9 Dateien nach "www/themes/new/templates" hochladen 2024-03-02 16:58:49 +01:00
felix 3aba261ba3 www/themes/new/templates/sidebar_logo.svg gelöscht 2024-03-02 16:58:26 +01:00
felix e45e783d39 DBXE Rebranding 2024-03-02 16:55:47 +01:00
felix 962529cbc9 DBXE Rebranding
_old Suffix hinzugefügt
2024-03-02 16:54:55 +01:00
felix 93b1f8d61a upgrade/data/remote.json aktualisiert 2024-03-02 16:33:35 +01:00
felix a05d497774 upgrade/data/remote.json aktualisiert
http -> https
2024-03-02 16:22:01 +01:00
felix 7d4138dd18 DBXE Rebranding 2024-03-02 16:15:07 +01:00
felix d0f53eb1f4 DBXE Rebranding
_old Suffix hinzugefügt
2024-03-02 16:13:48 +01:00
felix d5de8365ee version.php aktualisiert 2024-02-25 11:19:42 +01:00
felix 12cf3f7767 DBXE Rebranding 2024-02-25 11:16:57 +01:00
felix b8f1efbe12 DBXE Rebranding 2024-02-25 11:13:28 +01:00
felix 5a040d69da Update Remote Pfad geändert 2024-02-23 10:29:12 +01:00
felix d69b2fb342 DBXE Rebranding 2024-02-23 10:28:32 +01:00
felix 70b7a63694 DBXE Rebranding 2024-02-23 09:47:00 +01:00
felix 50e232cae7 DBXE Rebranding 2024-02-23 09:46:38 +01:00
felix 0f06a5838d DBXE Rebranding 2024-02-23 09:39:26 +01:00
felix e297ff8669 DBXE Rebranding 2024-02-23 09:39:17 +01:00
felix cffe00216c www/themes/new/templates/sidebar.tpl aktualisiert 2024-02-23 09:38:42 +01:00
felix 051a0805b9 DBXE Rebranding 2024-02-23 09:37:56 +01:00
felix 3d0210dc6d DBXE Rebranding 2024-02-23 09:24:00 +01:00
felix c99958525e DBXE Rebranding 2024-02-23 09:22:59 +01:00
felix 308c2aefa8 DBXE Rebranding 2024-02-23 09:19:52 +01:00
felix 925b8bf56e DBXE Rebranding 2024-02-23 09:19:05 +01:00
felix 5adc7458b2 DBXE Rebranding 2024-02-23 09:15:28 +01:00
felix e7af1e1164 VERSION aktualisiert 2024-02-23 09:14:35 +01:00
felix 29f8fe38ca DBXE Rebranding 2024-02-23 09:13:23 +01:00
felix 0ef8c498a2 DBXE Rebranding 2024-02-23 09:10:19 +01:00
root cf266fb4aa Aenderungen an Loginpage 2024-02-23 08:40:16 +01:00
root 8b8474e6eb Aenderungen an Loginpage 2024-02-23 08:33:15 +01:00
felix 8b43c9c08d www/pages/upgrade.php aktualisiert
Auskommentierung wieder entfernt, da Datenbankupgrade nicht möglich ist und Klick auf "Upgrade" zu Fehlern führt.
2024-02-22 18:38:24 +01:00
felix b39a7e5adb www/pages/upgrade.php aktualisiert 2024-02-21 15:11:52 +01:00
felix 9f633a8fdd Dateien nach "www/themes/new/images" hochladen 2024-02-21 14:15:04 +01:00
felix 4d956f1e38 www/themes/new/images/login_screen_picture.jpg gelöscht 2024-02-21 14:14:31 +01:00
felix ca4825e84e www/themes/new/templates/loginpage.tpl aktualisiert 2024-02-21 13:56:41 +01:00
felix 1b952e3021 www/themes/new/templates/loginpage.tpl aktualisiert 2024-02-21 13:55:31 +01:00
OpenXE bce18dcece Merge branch 'amperios' 2024-02-19 19:40:02 +01:00
OpenXE 9fc07ca3df bugfix lieferantengutschrift positionen hinzufuegen 2024-02-19 12:50:37 +01:00
OpenXE 345bbc5a9d bugfix buchhaltung export erloes 2024-02-14 10:33:51 +01:00
OpenXE dd713c2286 bugfix lageretiketten 2024-02-12 19:45:43 +01:00
OpenXE c89c36e596 exportbuchhaltung added new verbindlichkeit, lieferantengutschrift 2024-02-10 18:07:29 +01:00
OpenXE 4d5b46e903 bugfix ticket htmlentities betreff 2024-02-09 21:00:57 +01:00
OpenXE 7b1d12d59b bugfix artikel instueckliste sum view 2024-02-09 14:53:14 +01:00
OpenXE c6ee9c0faf bugfix lieferantengutschrift menge max 2024-02-09 10:49:18 +01:00
OpenXE 324c7dbf17 lieferantengutschrift sortcols 2024-02-08 20:43:58 +01:00
OpenXE 4e5011c5f5 lieferantengutschrift artikel manuell bruttopreise 2024-02-08 20:37:07 +01:00
OpenXE 885cf37d29 FirmendatenSet -> AddNeuenFirmendatenWert 2024-02-08 17:56:01 +01:00
OpenXE e348560cf7 lieferantengutschrift artikell manuell 2024-02-08 16:15:39 +01:00
OpenXE c3cbf0d214 bugfix verbindlichkeit positionen 2024-02-08 14:17:56 +01:00
OpenXE c5cf7bcba4 angebot optional positions with ellipsis, added optional total 2024-02-07 20:45:34 +01:00
OpenXE ca4e320085 lieferantengutschrift positionen 2024-02-07 17:57:11 +01:00
OpenXE 8dc86fdddf Lieferantengutschrift initial 2024-02-05 21:58:08 +01:00
OpenXE 4a5a723a15 wareneingang reopen 2024-02-05 12:18:52 +01:00
OpenXE 0360d5657f bugfix angebot Alternativ Text Preis 2024-02-05 11:58:36 +01:00
OpenXE 2efc34c280 bugfix AN AB RE GS ust ausblenden 2024-02-04 21:54:43 +01:00
OpenXE 9d543e6635 database patch for belegvorlagen 2024-02-03 17:54:51 +01:00
OpenXE 2ff5c007c1 added belegvorlagen from OSS 20.1 2024-02-03 12:49:37 +01:00
OpenXE 4acb921b51 bugfix emailbackup testmail utf-8 2024-01-31 18:38:53 +01:00
OpenXE 40734ccd66 Bugfix emailbackup 2024-01-31 18:35:16 +01:00
OpenXE 15f4ef55f2 bugfix beleg editable einkaufspreise menu 2024-01-30 15:58:43 +01:00
OpenXE 2b29457763 mailsend bugfix UTF-8 2024-01-30 11:13:07 +01:00
OpenXE 2dcc5b664e export buchhaltung added internet from auftrag, zahlweise 2024-01-25 19:09:53 +01:00
OpenXE e8c7908d29 added einkaufspreise to editable column 2024-01-24 19:10:10 +01:00
OpenXE 63b85f213a angebot deckungsbeitrag 2024-01-24 18:27:34 +01:00
OpenXE f84e7af78a Added database entries for datatablelabels 2024-01-24 13:02:08 +01:00
OpenXE 24905d3674 emailbackup edit page form cleanup 2024-01-23 18:17:55 +01:00
OpenXE 4570cbc342 Bugfix rechnung abweichendebezeichnung 2024-01-23 14:38:24 +01:00
OpenXE 08d97478d1 bugfix rechnungslauf 2024-01-22 13:38:21 +01:00
OpenXE 8c1343dff1 cronjobs command.php added stacktrace to logfile 2024-01-22 12:25:15 +01:00
OpenXE a32b79e2a8 ignore www/themes/new/css/custom.css 2024-01-21 13:42:16 +01:00
OpenXE-ERP 00333f8762
Merge pull request #115 from creatronics-de/bugfix_rabatt_in_rechnung_erste_zeile_fehler
Fehler bei Änderung des Rabatts in der ersten Zeile von Angeboten, Rechnungen, etc.
2024-01-21 13:39:32 +01:00
OpenXE ce6ffb0580 bugfix crossselling shopexport 2024-01-21 13:36:58 +01:00
OpenXE e7911e973b added column produkt_ausgehend to shopexport_versandarten 2024-01-21 13:26:17 +01:00
OpenXE-ERP dd8421eac6
Merge pull request #113 from creatronics-de/231225-Alternative-Rechnungs-bezeichnung-als-standard
alternative Bezeichnung für Rechnungen als Standard
2024-01-20 13:52:45 +01:00
OpenXE 3c57df65e6 wareneingang bugfix limit menge 2024-01-19 13:46:29 +01:00
OpenXE 169a5c34c5 Berichte create report from preview 2024-01-19 10:02:27 +01:00
OpenXE 567976ecda Berichte Datenbankansicht 2024-01-18 19:47:20 +01:00
OpenXE f6129a6ef7 verbindlichkeit bugfix PDF merge error 2024-01-18 13:08:56 +01:00
OpenXE 5948b728d2 verbindlichkeit improvements 2024-01-17 17:32:14 +01:00
OpenXE cb49810251 wareneingang impovements 2024-01-17 17:03:34 +01:00
OpenXE 5abde88596 wareneingang from bestellung with kommentar 2024-01-16 11:14:46 +01:00
OpenXE c0de40ac86 verbindlichkeit preise 5 decimals 2024-01-16 10:26:41 +01:00
OpenXE fdad52f168 wareneingang manuell multifilter 2024-01-15 15:24:28 +01:00
OpenXE 1baf957891 bugfix verbindlichkeit set sachkonto 2024-01-15 14:58:20 +01:00
OpenXE b9bec98855 wareneingang add manuelle list, wareneingang filter abgeschlossene 2024-01-15 14:41:48 +01:00
OpenXE f148fbdf08 verbindlichkeit set sachkonto of multi positions 2024-01-13 12:46:14 +01:00
OpenXE 602bc38585 verbindlichkeit added bemerkung from wareneingang 2024-01-13 12:31:33 +01:00
OpenXE 500e8b5838 verbindlichkeitstatus 'abgeschlossen', refresh status from list, auto-set if everything is ok 2024-01-13 12:18:25 +01:00
OpenXE 2cd60b0bd8 bugfix differenz_auslieferung_tage < 2 2024-01-13 10:35:45 +01:00
OpenXE 3fe8fcd8aa verbindlichkeit added icon attachment missing, change in icons, added filters 2024-01-10 21:03:04 +01:00
OpenXE 63d6f2e7d4 verbindlichkeit bugfix multi action 2024-01-10 14:32:46 +01:00
OpenXE c764a387b4 verbindlichkeit bugfix sort belegnr, empty steuersatz 2024-01-07 10:19:27 +01:00
OpenXE a1affd18d8 wareneingang redesign adding to packet and booking 2024-01-06 19:10:22 +01:00
OpenXE 6c1f40aab9 adresse sachkonto tpl 2024-01-05 19:30:21 +01:00
OpenXE 346ff4cc4a verbindlichkeit bugfix sachkonto / steuer 2024-01-05 19:29:50 +01:00
OpenXE cfbecd780b verbindlichkeit positionen_edit, steuer & sachkonto auf position 2024-01-05 14:09:49 +01:00
OpenXE 3c4a4a8754 verbindlichkeit added usereditid 2024-01-05 11:48:57 +01:00
OpenXE f1a118af6b module_creator bugfix DisableModul 2024-01-05 11:44:45 +01:00
OpenXE 4c14f266e9 verbindlichkeit brutto positionen 2024-01-04 16:09:13 +01:00
OpenXE 3a023592e9 wareneingang datum_abgeschlossen, bearbeiter_abgeschlossen, manuell mit menge 2024-01-04 14:53:21 +01:00
OpenXE 6a6aab4304 verbindlichkeit mass processing, prevent approval without positions, get conditions from address 2024-01-04 13:24:52 +01:00
OpenXE e5393bb7de verbindlichkeit lock control 2024-01-04 10:49:46 +01:00
OpenXE 153c9652ee verbindlichkeit lookup bestellung status versendet added 2024-01-03 15:26:28 +01:00
OpenXE 2e3a7e7b73 verbindlichkeit steuersatz locked after freigabe 2024-01-03 11:23:14 +01:00
OpenXE c582cc1423 verbindlichkeit rundungsdifferenz 2024-01-02 21:21:00 +01:00
OpenXE 580aef2bf6 bugfix bestellung ohne preise PDF 2024-01-02 19:18:27 +01:00
OpenXE 0cde94e672 ticket added javascript confirm for ticketregel 2024-01-02 16:18:18 +01:00
OpenXE c424d79fd6 verbindlichkeit added findcols and filters 2024-01-02 13:21:06 +01:00
creatronics-de eae4644921
Merge branch 'OpenXE-org:master' into 231225-Alternative-Rechnungs-bezeichnung-als-standard 2023-12-31 17:36:24 +01:00
ibs 054bb882da An Angeboten, Rechnungen, etc. lässt sich der Rabatt in der ersten Zeile nicht ändern, der Server liefert einen Fehler 500 weil ein Mysql Query versucht, in der Rechnungstabelle "keinrabatterlaubt" zu setzen.
Der ganze Code ist mir ein Rätsel, ich wüsste nicht, wofür der gut sein könnte. Bei mir funktioniert es ohne diese 3 Zeilen.
2023-12-31 17:32:59 +01:00
OpenXE 0806785d91 verbindlichkeit positionen basic implementation (cosmetics tbd) 2023-12-31 15:00:40 +01:00
OpenXE fe273bb832 wareneingang removed auto set lagerartikel 2023-12-31 14:56:07 +01:00
OpenXE 7029295cb3 adresse added sachkonto for verbindlichkeit 2023-12-30 14:05:16 +01:00
OpenXE 7435a0605b artikel added kontorahmen 2023-12-30 12:49:23 +01:00
OpenXE 39409b0358 artikel readded buchhaltung options 2023-12-29 14:15:34 +01:00
OpenXE 2b95a3891a restored module kostenstellen 2023-12-29 13:44:31 +01:00
OpenXE f7c64bec79 Bugfix Warnung doppelte Seriennummern removed pointless SQL WHERE 2023-12-29 12:58:38 +01:00
OpenXE ae377e452f bugfix GetZahlungsweise empty array 2023-12-29 11:14:28 +01:00
OpenXE 38d0ac4c49 verbindlichkeit mengebetrag 2023-12-27 19:15:42 +01:00
OpenXE b18e8ff444 view fibu_buchungen_alle 2023-12-27 18:40:36 +01:00
OpenXE dc5de062b8 Merge branch 'verbindlichkeit' 2023-12-27 18:19:20 +01:00
OpenXE afd60b382b verbindlichkeit version 1 2023-12-27 18:17:30 +01:00
ibs 302bfee669 alternative Bezeichnung für Rechnungen als Standard per Settings festlegen 2023-12-25 23:28:04 +01:00
OpenXE 8f9ed4d7ae zwischenstand verbindlichkeit filert, multi-action, forms 2023-12-25 21:30:58 +01:00
OpenXE bef8e02217 api_accounts fillApiPermissions if empty 2023-12-15 19:03:16 +01:00
OpenXE-ERP 53b228b06c
Merge pull request #112 from creatronics-de/mysql-fix-quotes
missing quotes added in mysql class
2023-12-15 18:56:15 +01:00
ibs fa9b572e3e missing quotes added 2023-12-15 01:53:52 +01:00
OpenXE 8664e16c55 zwischenstand verbindlichkeit status, forms, positions 2023-12-13 18:27:08 +01:00
OpenXE 57f0e2f627 verbindlichkeit added positionen with sachkonto 2023-12-11 22:17:28 +01:00
OpenXE 042a64589b bugfix fibu_buchungen_alle_view decimal(10,2) instead of double 2023-12-10 13:09:45 +01:00
OpenXE-ERP 8ba116ccf1
Merge pull request #110 from OpenXE-org/exciler_pr
Exciler pr
2023-12-10 10:23:06 +01:00
OpenXE-ERP 33aa53b7c5
Merge pull request #103 from exciler/subscriptioncycle-zahlzyklus
Enable "Zahlzyklus" in "Abolauf"
2023-12-10 10:22:24 +01:00
OpenXE-ERP aabdc74af6
Merge pull request #104 from exciler/shopware-multiVersion
Make Shopware-Lib compatible with 6.x
2023-12-10 10:21:55 +01:00
OpenXE-ERP 6df9ba2d00
Merge pull request #105 from exciler/prestashop-import-keywords
Prestashop: import keywords and small bugfixes
2023-12-10 10:21:30 +01:00
OpenXE 3bc0eafc51 erpapi bugfix lager_seriennummern 2023-12-09 12:25:29 +01:00
OpenXE 90f38c9496 database added column rabatteportofestschreiben to angebot for shopimport 2023-12-07 20:48:40 +01:00
OpenXE 3c8588562b V.1.11 2023-12-07 16:39:29 +01:00
OpenXE 3e2b5f6ee8 added github link to commits history 2023-12-07 16:29:42 +01:00
OpenXE 7ffb9a86a5 upgrade added strict DB mode 2023-12-07 14:32:02 +01:00
OpenXE 5816dedbc0 lieferschein minor bugfixes 2023-12-05 15:22:11 +01:00
OpenXE 12f5ca8211 logistik ein-auslagern menu change to listview 2023-12-05 11:52:01 +01:00
OpenXE 8b9969176c lieferschein umlagern repeat 2023-12-05 11:47:15 +01:00
OpenXE a6f742ccc0 lieferschein bugfix standardlager 2023-12-05 11:32:53 +01:00
OpenXE 2129627a5b lager lieferschein umlagern 2023-12-02 15:21:11 +01:00
OpenXE bbf8b071c0 Zwischenstand 2023-12-02 15:05:14 +01:00
OpenXE 626c75bbc1 verbindlichkeit initial 2023-11-26 12:46:42 +01:00
OpenXE 22e411a6cc ticketregel bugfix warteschlange 0 2023-11-25 13:13:39 +01:00
OpenXE d7db78489c ticket add spam filter from list 2023-11-25 12:58:16 +01:00
OpenXE 088ad4555c ticketregeln added adresse 2023-11-25 11:24:23 +01:00
OpenXE 2cb1f91a43 ticket system attachments on ticket header 2023-11-19 14:07:16 +01:00
OpenXE dff342276e ticket added "mail to all" 2023-11-19 12:22:44 +01:00
OpenXE c76cb43bac Merge remote-tracking branch 'github/master' 2023-11-14 11:39:21 +01:00
OpenXE 72684cb092 auftrag deckungsbeitrag write einkaufspreis into auftrag_position 2023-11-14 11:38:14 +01:00
OpenXE-ERP 7624e01de4
Merge pull request #108 from OpenXE-org/OpenXE-ERP-patch-1
Update SERVER_INSTALL.md
2023-11-13 15:34:13 +01:00
OpenXE-ERP 9ebd5d2b2b
Update SERVER_INSTALL.md 2023-11-13 15:32:42 +01:00
OpenXE bf3dad7e83 auftrag deckungsbeitrag added umsatz, kosten 2023-11-13 10:21:45 +01:00
OpenXE b7f8c7b359 auftrag format deckungsbeitrag 2 decimals 2023-11-12 13:18:13 +01:00
OpenXE 54fe339c65 auftrag DB % 2 decimals 2023-11-12 12:11:19 +01:00
OpenXE 7d0a5a0eee Auftrag deckungsbeitrag added manual ek and status != abgeschlossen for calculate 2023-11-11 23:12:29 +01:00
OpenXE 7cfb87c2c5 Auftrag deckungsbeitrag implemented 2023-11-11 22:57:32 +01:00
OpenXE 2ae5e9f44a bugfix exportbuchhaltung steuer 2023-11-11 16:37:25 +01:00
OpenXE c106282b13 bugfix copy projekt 2023-11-07 09:57:59 +01:00
OpenXE e737d69a77 bugfix stringcleaner array vs. object 2023-11-07 09:44:44 +01:00
OpenXE 2f646a7715 versand added tracking for mail variables, minor bugfixes 2023-11-02 11:56:05 +01:00
OpenXE-ERP c67d91a7dd
Merge pull request #106 from tsgoff/testmailutf8
test mail utf8_encode
2023-11-02 10:45:42 +01:00
OpenXE 3e69b8d7e0 lieferschein added direct link paketmarke without versandmodul 2023-11-02 09:43:43 +01:00
OpenXE 77092171c3 auftrag show paket and tracking in minidetail 2023-11-01 21:07:05 +01:00
OpenXE a03d28ac69 lieferschein added multi action to set versand_status 2023-11-01 17:34:32 +01:00
OpenXE f55f801cee versandart added button to create versandart without modul 2023-11-01 17:20:54 +01:00
OpenXE 1fe0aea620 versandarten removed check if module is empty 2023-11-01 16:59:48 +01:00
OpenXE e474014b8c versandpakete extended handling of lieferschein_ohne_pos, tracking is editable if no versandmodul 2023-11-01 15:42:21 +01:00
OpenXE 3e70af8466 versandpakete bugfix check completion 2023-11-01 11:48:55 +01:00
OpenXE 662410fdc8 versand process added versand_status to lieferschein and status processing 2023-10-27 15:31:58 +02:00
OpenXE 7dcaae7fbb Paketmarke changed texts 2023-10-26 20:56:18 +02:00
OpenXE 18397a03c8 Paketmarke added info text Gewicht 2023-10-26 20:51:47 +02:00
OpenXE 504f0beb54 Paketmarke added doctype to text 2023-10-26 20:46:07 +02:00
OpenXE ecf986d33b versandpakete improvements 2023-10-26 20:23:19 +02:00
OpenXE eb00034a79 versandpakete bugfix 2023-10-25 13:49:27 +02:00
OpenXE a5be2e984a versandpakete improvements, added lieferungen view 2023-10-25 13:26:52 +02:00
OpenXE fb32cda643 versand bugfix no countries defined 2023-10-22 18:41:08 +02:00
OpenXE ca73f3dda5 versandpakete improvements 2023-10-22 18:27:01 +02:00
OpenXE 4488cf8688 versand icons and findcols 2023-10-22 16:02:11 +02:00
OpenXE ec7dc7b8a6 versandpakete update versender on shipping 2023-10-20 15:52:55 +02:00
OpenXE 6e857e6567 delivery icons 2023-10-20 15:48:53 +02:00
OpenXE a35ab21f7c versandpakete improvements 2023-10-20 15:47:37 +02:00
tsgoff f794b4db74
test mail utf8_encode 2023-10-20 15:40:47 +02:00
OpenXE e899b1c389 versandpakete intermediate 2023-10-18 14:35:35 +02:00
OpenXE b171dd7760 restored function VersandartMindestgewicht($id=0) in erpapi 2023-10-16 21:28:43 +02:00
OpenXE 4f7eb4049b versandpakete initial 2023-10-16 21:22:21 +02:00
OpenXE b838b63258 removed deprecated paketmarke functions from erpapi 2023-10-10 18:17:42 +02:00
OpenXE 5e1359f770 Bugfix ticket_edit betreff width 2023-10-09 19:18:24 +02:00
OpenXE 1bb701322b Wareneingang tabindex mengen 2023-10-07 13:49:26 +02:00
OpenXE 1e55ca1b3d Wareneingang enter press triggers save 2023-10-07 13:36:46 +02:00
OpenXE b34ba86421 Wareineingang bugfix lagerartikel, added some info text 2023-10-06 12:11:17 +02:00
OpenXE b2bf2f14f2 Wareneingang added empty and fill from bestellung 2023-10-04 12:31:02 +02:00
OpenXE bdb05c747a Wareneingang bugfix abschliessen, removed edit from minidetail 2023-10-01 19:48:21 +02:00
OpenXE b613a99791 Wareneingang added link to artikel 2023-10-01 19:33:05 +02:00
OpenXE 1dba7e9d7e Wareneingang save preliminary 2023-10-01 19:19:09 +02:00
OpenXE 60e21956ad class YUI removed <br> from tablesearch 2023-10-01 19:18:28 +02:00
OpenXE 545a39bbdc Wareneingang changed to booking all at once -> TBD: save preliminary, fill, empty 2023-09-30 11:40:59 +02:00
OpenXE 5ed516f9da ticket system betreff strip tags 2023-09-21 08:30:05 +02:00
Andreas Palm b759e2accd Prestashop: small fix to reduce errors in log 2023-09-19 14:39:00 +02:00
Andreas Palm 5d1201637f Prestashop: Import metakeywords 2023-09-19 14:39:00 +02:00
Andreas Palm c6dd3fdeff bugfix: check for divisionByZero 2023-09-19 14:39:00 +02:00
Andreas Palm 4dd8b01ea9 Shopware6: remove "v2" part from URL in Client-lib as well, set pseudolager default to 0 instead of empty string 2023-09-19 14:26:40 +02:00
Andreas Palm 150381a20f Enable "Zahlzyklus" in "Abolauf" 2023-09-19 14:02:01 +02:00
OpenXE 76c770aba3 Bugfix managementboard removed invalid reference RechnungslaufRechnungslauf 2023-09-11 20:42:14 +02:00
OpenXE c9aee26df7 removed .woff2 fonts 2023-08-31 10:31:54 +02:00
OpenXE 91c2dc88ba document send preselect default mail address from firmendaten 2023-08-15 12:37:16 +02:00
OpenXE be222cc581 bugfix wareneingang bemerkung 2023-08-14 20:57:21 +02:00
OpenXE a9f3292f8f Bugfix thousand separator and rounding in stueckliste 2023-08-10 21:38:09 +02:00
OpenXE-ERP ac723e9fda
Merge pull request #92 from RETROTEC-AG/pr/Positions-Menge_wird_immer_auf_1_aufgerundet
positions menge wird immer auf 1 aufgerundet bzw gerundet
2023-08-10 10:31:33 +02:00
OpenXE 5408f197fd improved date format conversion with exception on ticket import with wrongly specified date 2023-08-07 14:57:45 +02:00
OpenXE c0a9156f0e Bugfix MysqlCopyRow NULL values are converted to empty string 2023-08-07 13:12:57 +02:00
Roland Rusch fd0a5a5d4c #8 Positions-Menge wird immer auf 1 aufgerundet 2023-08-04 15:16:05 +02:00
Roland Rusch 1daf876976 #8 Positions-Menge wird immer auf 1 aufgerundet 2023-08-04 15:16:05 +02:00
Roland Rusch 7a29151bdd #8 Positions-Menge wird immer auf 1 aufgerundet 2023-08-04 14:08:31 +02:00
OpenXE 623b041a5f bugfix mustal use correct syntax for BTREE and HASH key types 2023-08-03 14:43:52 +02:00
OpenXE 6242024451 Bugfix ticket system filter for spam 2023-08-03 12:01:23 +02:00
OpenXE 0262c31e93 Added ticketregel from ticket button 2023-08-02 14:25:38 +02:00
OpenXE-ERP 5557c54fd6
Merge pull request #89 from exciler/prestashop-improve-import
Prestashop improve import
2023-07-27 10:56:14 +02:00
Andreas Palm 7df897d9d7 Prestashop: import meta infos 2023-07-26 18:47:44 +02:00
Andreas Palm 1a94af6b0b Prestashop: import support combinations 2023-07-26 15:26:01 +02:00
Andreas Palm fa4125d63b Prestashop: strip html tags from short description 2023-07-26 12:38:41 +02:00
OpenXE ac0048c788 removed duplicate column in db_schema 2023-07-25 12:00:00 +02:00
OpenXE-ERP f430b7f5ac
Merge pull request #83 from RETROTEC-AG/pr/#9_.htaccess-verbietet-den-Download-der-woff,-woff2-und-js.map-files
.htaccess verbietet den Download der woff, woff2 und js.map files
2023-07-25 11:54:26 +02:00
OpenXE-ERP 83e739d378
Merge pull request #87 from rrusch/missing_$_in_adresse.php
Add missing $
2023-07-25 11:50:42 +02:00
Roland Rusch a32c201a91
Add missing $ 2023-07-25 11:29:26 +02:00
Andreas Palm cb2b75a3ca Prestashop: Improve article import 2023-07-25 00:05:17 +02:00
OpenXE 1f27f9a5f5 bugfixes shopimporter_shopify 2023-07-22 13:14:43 +02:00
Roland Rusch 81e2cdb222 #9 .htaccess verbietet den Download der woff, woff2 und js.map files 2023-07-19 21:25:31 +02:00
Roland Rusch 5b49171a74
Update .htaccess 2023-07-19 20:51:31 +02:00
OpenXE-ERP 869c888947
Merge pull request #86 from RETROTEC-AG/pr/#7_Shopify-interface-does-not-work
shopify interface does not work
2023-07-19 18:13:17 +02:00
OpenXE-ERP 322ca715eb
Merge pull request #85 from RETROTEC-AG/feature/#12_Logfile-addLogFile-does-not-escape-the-given-parameters
Logfile::addLogFile() does not escape the given parameters
2023-07-19 18:11:20 +02:00
Roland Rusch ab4e9f001e #7 Shopify interface does not work 2023-07-19 17:54:59 +02:00
Roland Rusch 51b70aed0d #7 Shopify interface does not work 2023-07-19 17:54:59 +02:00
Roland Rusch 08579804a8 #7 Shopify interface does not work 2023-07-19 17:54:58 +02:00
Roland Rusch 64241842f6 #7 Shopify interface does not work 2023-07-19 17:54:58 +02:00
OpenXE-ERP f5c61ca6eb
Merge pull request #81 from RETROTEC-AG/feature/#1_OpenXE-does-not-run-on-Windows
Error Service "SystemConfigModule" was not found when run on windows
2023-07-19 16:47:24 +02:00
OpenXE-ERP aa32bd1276
Merge pull request #84 from RETROTEC-AG/pr/#5_Syntax-error-in-SQL-when-creating-new-address
Syntax error in SQL when creating new address
2023-07-19 16:43:29 +02:00
Roland Rusch e6960f0030 #12 Logfile::addLogFile() does not escape the given parameters 2023-07-19 15:31:09 +02:00
Roland Rusch b02da95c2f #12 Logfile::addLogFile() does not escape the given parameters 2023-07-19 15:18:04 +02:00
Roland Rusch 9994f8c18d #12 Logfile::addLogFile() does not escape the given parameters 2023-07-19 15:14:18 +02:00
Roland Rusch ce5f359a75 #5 Syntax error in SQL when creating new address 2023-07-19 14:58:28 +02:00
Roland Rusch 57e398e7d4 #9 .htaccess verbietet den Download der woff, woff2 und js.map files 2023-07-19 14:43:46 +02:00
Roland Rusch ca5e5c52a1 #1 OpenXE does not run on Windows 2023-07-14 08:53:01 +02:00
Roland Rusch 6f5272717f #1 OpenXE does not run on Windows 2023-07-13 20:24:16 +02:00
OpenXE 2eabd85b91 added message to do db upgrade after install 2023-07-10 19:10:31 +02:00
OpenXE 1be7ba66ee Release 1.10 2023-07-04 11:18:13 +02:00
OpenXE 56e743334a added rechnung_anzahlpapier_abweichend option for adresse 2023-06-26 19:59:25 +02:00
OpenXE e125a29fa9 bugfix kalender user intern 2023-06-26 09:56:01 +02:00
OpenXE 63a99b1a6e bugfix autoversand print number of invoices according to setting in adresse 2023-06-25 15:32:15 +02:00
OpenXE 1ea3d3a175 bugfix lager seriennummern typo 2023-06-25 15:04:02 +02:00
OpenXE fcb9b0aeb7 bugfix rechnung mahnwesen minidetail 2023-06-24 10:57:59 +02:00
OpenXE 53bb9fcdf9 bugfix ticket system warteschlange 2023-06-23 15:54:33 +02:00
OpenXE 2b2f84a020 emailbackup_edit minor GUI improvements 2023-06-23 08:42:45 +02:00
OpenXE f3587501f2 Bugfix ticket system autoresponder 2023-06-23 08:42:28 +02:00
OpenXE 4b40c27c84 bugfix scrolling to middle of page 2023-06-17 12:27:32 +02:00
OpenXE 265d815534 mahnwesen bugfix delete 2023-06-16 14:09:57 +02:00
OpenXE 7c17b2aed9 Merge remote-tracking branch 'github/master' 2023-06-16 14:04:36 +02:00
OpenXE 174909c178 bugfix mahnwesen status, error on mail 2023-06-16 14:02:58 +02:00
OpenXE b8cfa9efbb bugfix rechnung rechnung_zahlstatus_berechnen 2023-06-16 12:29:50 +02:00
OpenXE 5da0490260 bugfix mahnwesen neu 2023-06-16 12:20:21 +02:00
OpenXE 9fbd0eb85a mahnwesen added e-mail 2023-06-15 17:26:44 +02:00
OpenXE 1c1c7034f1 mahnwesen added CRM for printed dokumente (email not yet implemented) 2023-06-15 17:03:42 +02:00
OpenXE 2c7f113d6b mahnwesen initial 2023-06-13 18:35:59 +02:00
OpenXE 1f6caa8632 mahnwesen initial 2023-06-08 15:35:46 +02:00
OpenXE 73725a31bb rechnung calculate payment status with skonto 2023-06-07 15:40:36 +02:00
OpenXE 06686a6020 removed language selection from login 2023-06-05 14:41:39 +02:00
OpenXE-ERP 1e04647dae
Merge pull request #79 from tsgoff/tooltip
tooltip link
2023-06-05 09:37:19 +02:00
tsgoff 62cca6fe3c
tooltip link 2023-06-04 22:00:20 +02:00
OpenXE bf10c0d807 bugfix systemhealth db version 2023-06-01 14:15:11 +02:00
OpenXE d9ff872a98 artikelkategorien & artikelbaum 2023-05-31 17:46:03 +02:00
OpenXE 05699986eb .htaccess added ico and css.map 2023-05-31 14:45:22 +02:00
OpenXE dcedcec0f2 bugfix edit positions getpreise 2023-05-30 13:31:29 +02:00
OpenXE 6fc74f1bf3 bugfix AARLGPositionen removed formatmenge because the javascript screws up numbers above 1000 (decimal point vs thousands) 2023-05-25 17:17:54 +02:00
OpenXE 33b5c1e171 ticket system increased and colored red hidden eye icon 2023-05-25 15:55:57 +02:00
OpenXE 3f7cf88d99 fibu_buchungen added temp tables to db_schema.json 2023-05-24 19:29:43 +02:00
OpenXE 1ebaa24473 .htaccess include robots.txt 2023-05-24 15:44:15 +02:00
OpenXE 5ca3a7297b bugfix exportbuchhaltung date of differences 2023-05-24 10:35:56 +02:00
OpenXE 88e1e2ebc2 ticket system show ... ih subject of message is empty 2023-05-23 11:27:47 +02:00
OpenXE 5a4c73d9b8 ticket / mailclient added dump information on mail fetch error 2023-05-23 11:16:16 +02:00
OpenXE d294daa08b ticket system show embedded cid images in ticket view (insecure view) 2023-05-22 20:51:38 +02:00
OpenXE 75bd00770c ticket system show user's tickets and all tickets separately in sidebar 2023-05-22 18:42:20 +02:00
OpenXE 674c7b9958 bugfix send document with ',' in name 2023-05-22 14:01:34 +02:00
OpenXE 60611a2d03 bugfix gutschrift versenden, added column abweichendebezeichnung 2023-05-21 17:27:03 +02:00
OpenXE 2e70e1f2dc bugfix lager lager_bestand menue wrong id 2023-05-21 12:16:54 +02:00
OpenXE 7548c601f5 auftrag refresh PDF and protokoll on teillieferung (teilauftrag) 2023-05-21 11:32:35 +02:00
OpenXE ac8407faed exportbuchhaltung add ignore / export of differences 2023-05-20 14:15:25 +02:00
OpenXE 14e727500e projekt added additional option for calculation of brutto 2023-05-15 12:31:17 +02:00
OpenXE 011f2915c1 bugfix fibu_buchungen rounding 2023-05-12 12:23:43 +02:00
OpenXE 38cf7c3bc2 ticket system bugfix address with subdomain 2023-05-12 11:59:28 +02:00
OpenXE 209364f8c3 artikel stueckliste added referenz column 2023-05-09 10:33:49 +02:00
OpenXE fea7a173dc produktion bugfix display of used parts, bugfix produktion list 2023-05-08 17:24:49 +02:00
OpenXE 33d2ca9497 bestellung show wareneingang in minidetail 2023-05-07 19:02:58 +02:00
OpenXE 9002a66085 wareneingang expanded minidetail 2023-05-05 14:46:16 +02:00
OpenXE c8426bcbc0 wareneingang bugfix bestellung 2023-05-05 14:34:08 +02:00
OpenXE 25cf7de75b wareneingang usability improvements 2023-05-05 14:25:56 +02:00
OpenXE 2d938e96a0 wareneingang added column bestellung 2023-05-05 13:39:03 +02:00
OpenXE 4ffeafa5ac bugfix gruppensumme PDF Briefpapier::Cell_typed(): Argument #3 ($txt) must be of type string, null given 2023-05-05 09:58:15 +02:00
OpenXE 2533e4ca4f bugfix class.yui.php dragndrop positionen 2023-05-04 18:34:17 +02:00
OpenXE a144e2183b class.yui.php refactor count(null) 2023-05-04 16:39:18 +02:00
OpenXE 30ce445ac1 db_schema added explodiert_parent to bestellung_position and rechnung_posistion (seemed to be missing) 2023-05-04 15:51:47 +02:00
OpenXE 51d7ad7f17 bestellvorschlag bugfix html 2023-05-04 14:15:31 +02:00
OpenXE f6d71cbbc8 ticket system bugfix sent mails insecure display enabled 2023-05-03 08:45:57 +02:00
OpenXE 1bf58aa8ba ticket system clean tags 2023-05-02 21:05:32 +02:00
OpenXE 63dbedc1a8 report exclude readonly reports as default, added row preview 2023-05-02 18:57:13 +02:00
OpenXE cd3c0f2113 stueckliste import moved to importvorlage 2023-04-28 16:22:39 +02:00
OpenXE b497d65d81 cronjob lagerzahlen set cache_lagerplatzinhaltmenge only on success 2023-04-27 18:07:08 +02:00
OpenXE 87a884bd8a Bugfix auftrag vorkasse_ok 2023-04-26 11:10:07 +02:00
OpenXE 3efbcb82d9 db_schema.json changed order of fibu_objekte_view and fibu_buchungen_alle_view 2023-04-24 16:54:30 +02:00
OpenXE f0f468c94e mustal bugfix create table key type 2023-04-24 16:49:34 +02:00
OpenXE b82d17d6f4 Merge branch 'prerelease.1.9' 2023-04-24 16:23:37 +02:00
OpenXE 9db337ce95 release 1.9 2023-04-24 16:23:21 +02:00
OpenXE 62f6df1aeb fibu_buchungen added error when startdate is not set 2023-04-23 17:18:51 +02:00
OpenXE 828c1b1a75 Kontoauszuege removed "new" button. 2023-04-23 16:54:52 +02:00
OpenXE 7de88ca3b5 gutschrift freigabe with our without offsettung against rechnung, with offsetting creates fibu_buchung 2023-04-21 14:59:02 +02:00
OpenXE 5794301826 fibu_buchungen db_schema changed views, removed gutschrift vs. rechnung, fibu_objekte independent from zahlungsstatus 2023-04-21 14:52:48 +02:00
OpenXE 1a28b5d75b Prerelease 1.9, added EGPL 2023-04-18 19:14:59 +02:00
OpenXE df292c9c02 db_schema.json revert changes from 95d26d5c6e database upgrade to utf8mb4
reverted change from varchar(255) to text for many columns, due to utf8mb4 problems
2023-04-18 11:54:12 +02:00
OpenXE f0a24b7e5b ticket system improved logging on invalid date 2023-04-17 18:21:43 +02:00
OpenXE 50df55e35e bugfix auftrag offene status <> 'storniert' 2023-04-17 13:45:34 +02:00
OpenXE 4720cc8e94 fibu_buchungen einzelzuordnen multifilter 2023-04-15 18:45:09 +02:00
OpenXE 64d6b90312 fibu_buchungen usability improvements 2023-04-15 10:48:47 +02:00
OpenXE 17bdb1c5e1 auftrag set vorkasse_ok according to fibu_buchungen 2023-04-13 21:58:11 +02:00
OpenXE c1d42f6ceb removed fints-hbci, white-cup-filled-by-coffee.jpg 2023-04-12 22:17:57 +02:00
OpenXE c4eaaa966a removed fints-hbci, white-cup-filled-by-coffee.jpg 2023-04-12 22:16:52 +02:00
OpenXE a43ac720b6 fibu_buchungen single with sachkonto 2023-04-11 19:52:58 +02:00
OpenXE 170a33687f fibu_buchungen views fixed empty date on kontorahmen 2023-04-11 16:41:20 +02:00
OpenXE ea6a6a5dda rechnung removed all updates of `ist`, except from fibu_buchungen 2023-04-11 15:40:23 +02:00
OpenXE 69172672b2 fibu_buchhaltung belege zuordnen multi option 2023-04-11 15:20:40 +02:00
OpenXE 667b70eaf5 fibu_buchungen booking to kontorahmen 2023-04-08 17:48:39 +02:00
OpenXE 44af8f3b3d Bugfix erpapi lagernummern typo 2023-04-07 18:17:57 +02:00
OpenXE 82fc367405 fibu_buchungen einzelzuordnung 2023-04-06 15:33:53 +02:00
OpenXE 828af9ab50 fibu_buchungen check saldo for vorschlag 2023-04-05 20:38:31 +02:00
OpenXE e79f2839e2 fibu_objekte_view added sachkonto and is_beleg filter 2023-04-05 12:52:50 +02:00
OpenXE 7aab51a390 fibu_buchungen vorschlag now includes saldo info 2023-04-05 12:32:10 +02:00
OpenXE 3dfba163df fibu_buchungen zuordnen with tablesearch instead of easytable 2023-04-05 11:07:12 +02:00
OpenXE 4a4b1f8320 bugfix import kontoauszuege importfehler 2023-04-05 11:02:06 +02:00
OpenXE 03f0f7217b rechnung & gutschrift set zahlungsstatus according to saldo 2023-04-05 11:01:16 +02:00
OpenXE c6a4cf0d23 Usability improvement kontoauszuege and buchungen 2023-04-04 14:15:01 +02:00
OpenXE 92f016d06b bugfix kontoauszuege import decimals and sum display 2023-04-04 13:48:40 +02:00
OpenXE 222b0ac239 importvorlage kontoauszuege 2.betrag 2023-04-04 11:59:53 +02:00
OpenXE 1e59009862 gutschrift mark as offen or bezahlt rework 2023-04-04 11:34:07 +02:00
OpenXE 76740aee02 db_schema changed reference in fibu_buchungen_view from fibu_objekte to fibu_objekte_view 2023-04-04 10:59:49 +02:00
OpenXE 06bc38e66a fibu_buchungen improved cache refresh 2023-04-03 21:17:59 +02:00
OpenXE ad4599e381 fibu_buchungen_alle converted to cached view for better performance 2023-04-03 20:25:00 +02:00
OpenXE b1349afb6b fibu_buchungen bugfix search with multiple results 2023-04-03 16:47:44 +02:00
OpenXE 820dc9fec6 kontoauszuege bugfix importer date and filter import errors 2023-04-03 16:23:00 +02:00
OpenXE 46f9e0728d fibu_buchungen add date limit (firmendaten) 2023-04-03 16:10:28 +02:00
OpenXE 8bdedcb72f Develop version 1.8.1 2023-04-02 17:44:11 +02:00
OpenXE ebd50b4f28 fibu_buchungen document auto assign 2023-04-02 12:23:51 +02:00
OpenXE 85094921a0 bugfix inverted UNIQUE parameter in db_schema and mustal 2023-04-02 11:46:17 +02:00
OpenXE d97f41e293 db_schema adjustments mainly utf8mb3 2023-04-02 10:23:07 +02:00
OpenXE b701a880a4 Merge remote-tracking branch 'github/master' into develop.1.8.1 2023-04-01 22:39:15 +02:00
OpenXE 2b573268fa fibu buchungen 2023-04-01 20:42:37 +02:00
OpenXE 689fdb0490 Kontoauszuege konto overview and saldo 2023-03-30 19:29:46 +02:00
OpenXE c223e7c956 mustal improvement view handling 2023-03-30 15:21:33 +02:00
OpenXE a15d7b0b41 database utf8 rework 2023-03-30 15:21:09 +02:00
OpenXE 3715c2f205 firmendaten hotfix freifelder 2023-03-30 12:33:38 +02:00
OpenXE 95d26d5c6e database upgrade to utf8mb4 2023-03-30 11:24:14 +02:00
OpenXE 5bc7a64c8c mustal improvement on collation handling 2023-03-30 11:19:46 +02:00
OpenXE b7153c423c fibu_buchungen added, rework of zahlungen auftrag, rechnung, gutschrift 2023-03-28 12:30:57 +02:00
OpenXE 1637bf965a bugfix mustal default values forced lower case 2023-03-28 12:18:41 +02:00
OpenXE 9a6ed1ae75 fibu_buchungen_alle with type and id of editable item 2023-03-27 16:31:30 +02:00
OpenXE 49dfd255e4 Bugfix briefpapier freitexte width 2023-03-26 13:26:49 +02:00
OpenXE 791a12b731 Bugfix user avatar 2023-03-26 13:23:15 +02:00
OpenXE 62e16cfcc1 fibu_buchungen database definitions 2023-03-25 21:23:20 +01:00
OpenXE c220639e82 Zahlungsstatus Rechnung Gutschrift reworked with fibu_buchungen 2023-03-25 17:50:04 +01:00
OpenXE 6a566a99af Kontoauszuege module & importer 2023-03-22 20:37:17 +01:00
OpenXE e356051f5a Zahlungen improvements 2023-03-22 14:33:34 +01:00
OpenXE 1f52278758 mustal added handling of UNIQUE keys 2023-03-21 20:20:44 +01:00
OpenXE ab91715c20 Zahlungen minidetail and collation of relevant documents as tree 2023-03-16 11:49:45 +01:00
OpenXE 8dd78dfa55 Bugfix lager wert calculation of prices added geloescht != 1 and date range 2023-03-14 13:40:14 +01:00
OpenXE 71883d34ae Zahlungseingang Minidetail hacked rechnung, gutschrift 2023-03-13 17:12:38 +01:00
OpenXE 73dbbb061a Geschaeftskonto module restored (basic variant) 2023-03-13 14:22:39 +01:00
346 changed files with 67100 additions and 57602 deletions

1
.gitignore vendored
View File

@ -2,3 +2,4 @@ conf/user.inc.php
conf/user_defined.php
userdata
www/cache/
www/themes/new/css/custom.css

View File

@ -54,14 +54,11 @@ memory_limit = 256M
## Install additional zip
`sudo apt-get install zip`
## Install mysql client
`sudo apt-get install mysql-client`
## Install database server
`sudo apt-get install mariadb-server`
## Configure database server
`sudo mysql_secure_installation`
`sudo mariadb-secure-installation`
```
NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY!

View File

@ -128,7 +128,7 @@ final class ImapMailClient implements MailClientInterface
$message = $this->imap->getMessage($msgNumber);
} catch (Exception $e) {
throw new MessageNotFoundException(
sprintf('Message number %s not found.', $msgNumber)
sprintf("Message number %s could not be fetched.\n\r%s", $msgNumber,print_r($e,true))
);
}

View File

@ -5,6 +5,7 @@ declare(strict_types=1);
namespace Xentral\Components\MailClient\Data;
use DateTime;
use DateTimeImmutable;
use DateTimeInterface;
use JsonSerializable;
use Throwable;
@ -307,10 +308,13 @@ final class MailMessageData implements MailMessageInterface, JsonSerializable
if ($date === null) {
return null;
}
$dateTime = date_create($date->getValue());
/* $dateTime = date_create($date->getValue());
if ($dateTime === false) {
throw new InvalidArgumentException('Invalid date: '.$date->getValue());
return null;
}
}*/
$dateTime = new DateTimeImmutable($date->getValue());
return $dateTime;
}

View File

@ -20,7 +20,7 @@ final class ErrorPageData implements JsonSerializable
public function __construct($exception, $title = null)
{
$this->exception = $exception;
$this->title = !empty($title) ? (string)$title : 'OpenXE: Es ist ein unerwarteter Fehler aufgetreten!';
$this->title = !empty($title) ? (string)$title : 'DBXE: Es ist ein unerwarteter Fehler aufgetreten!';
}

View File

@ -35,7 +35,7 @@ final class Psr4ClassNameResolver
{
// Normalize inputs
$prefix = trim($prefix, '\\') . '\\';
$baseDir = rtrim($baseDir, '/') . '/';
$baseDir = rtrim($baseDir, '/\\') . DIRECTORY_SEPARATOR;
$this->prefixes[$prefix] = $baseDir;
}

View File

@ -492,6 +492,8 @@ final class ReportService
$testResult['messagetype'] = 'error';
$testResult['message'] = sprintf("QUERY FAILED:\n%s", $e->getMessage());
$testResult['message'] .= "\n\r".$compiled;
return $testResult;
}
@ -500,6 +502,9 @@ final class ReportService
if(count($rows) < 101){
$message = sprintf('Query successful: %s datasets found', count($rows));
}
$message .= "\n\r".print_r($rows[0],true);
$testResult = [
'messagetype' => 'success',
'message' => $message,

View File

@ -73,7 +73,7 @@ final class Shopware6Client
$request = new ClientRequest(
$method,
$this->url . 'v2/' . $endpoint,
$this->url . $endpoint,
$headerInformation,
empty($body) ? null : json_encode($body)
);

View File

@ -31,14 +31,14 @@ class SubscriptionModule implements SubscriptionModuleInterface
aa.id,
@start := GREATEST(aa.startdatum, aa.abgerechnetbis) as start,
@end := IF(aa.enddatum = '0000-00-00' OR aa.enddatum > :calcdate, :calcdate, aa.enddatum) as end,
@cycles := CASE
@cycles := GREATEST(aa.zahlzyklus, CASE
WHEN aa.preisart = 'monat' THEN
TIMESTAMPDIFF(MONTH, @start, @end)
WHEN aa.preisart = 'jahr' THEN
TIMESTAMPDIFF(YEAR, @start, @end)
WHEN aa.preisart = '30tage' THEN
FLOOR(TIMESTAMPDIFF(DAY, @start, @end) / 30)
END+1 as cycles,
END+1) as cycles,
CASE
WHEN aa.preisart = 'monat' THEN
DATE_ADD(@start, INTERVAL @cycles MONTH)

View File

@ -285,6 +285,7 @@ class TicketImportHelper
tr.dsgvo AS `is_gdpr_relevant`,
tr.prio AS `priority`,
tr.persoenlich AS `is_private`,
tr.adresse,
tr.warteschlange AS `queue_id`
FROM `ticket_regeln` AS `tr`
WHERE
@ -335,7 +336,7 @@ class TicketImportHelper
$queue_id = $this->mailAccount->getTicketQueueId();
if (!empty($queue_id)) {
$queue_label = $this->db->Select("SELECT label FROM warteschlangen WHERE id = ".$queue_id." LIMIT 1");
$queue_label = $this->db->Select("SELECT label FROM warteschlangen WHERE label = '".$queue_id."' LIMIT 1");
}
$insertTicket = "INSERT INTO `ticket` (
@ -408,9 +409,6 @@ class TicketImportHelper
$this->logger->error('Failed to insert ticket message into db', ['exception' => $e]);
}
$this->applyTicketRules($messageId);
return($result);
}
@ -440,7 +438,7 @@ class TicketImportHelper
foreach ($ruleArray as $rule) {
$this->logger->debug('ticket rule applies',['rule_id' => $rule['id']]);
$this->logger->debug('ticket rule applies',['rule_id' => $rule['id'],'rule' => print_r($rule,true)]);
/*
$update = $this->db->update();
@ -461,12 +459,16 @@ class TicketImportHelper
$this->db->perform($sql, ['ticket_id' => $ticketId]);
*/
if ($rule['is_spam'] === 1) {
$sql = "UPDATE `ticket_nachricht` SET `status` = \'spam\' WHERE `id` = '".$ticketMessageId."'";
$this->db->Update($sql);
if ($rule['is_spam'] == 1) {
$status = 'spam';
} else {
$status = 'neu';
}
$sql = "UPDATE `ticket` SET `dsgvo` = '".$rule['is_gdpr_relevant']."', `privat` = '".$rule['is_private']."', `prio` = '".$rule['priority']."', `warteschlange` = '".$rule['queue_id']."' WHERE `id` = '".$ticketId."'";
$sql = "UPDATE `ticket` SET `dsgvo` = '".$rule['is_gdpr_relevant']."', `privat` = '".$rule['is_private']."', `prio` = '".$rule['priority']."',`adresse` = '".$rule['adresse']."', `warteschlange` = '".$rule['queue_id']."', `status` = '".$status."' WHERE `id` = '".$ticketId."'";
$this->logger->debug('ticket rule sql',['sql' => $sql]);
$this->db->Update($sql);
}
}
@ -511,7 +513,10 @@ class TicketImportHelper
continue;
}
} catch (Throwable $e) {
$this->logger->error('Error during email import '.$messageNumber, ['message' => substr(print_r($message,true),0,1000)]);
$exception_message = $e->getMessage();
$this->logger->error('Error during email import '.$messageNumber, ['exc-message' => $exception_message ,'message2' => substr(print_r($message,true),0,1000)]);
continue;
}
}
@ -573,14 +578,17 @@ class TicketImportHelper
$this->logger->debug('Text (converted)',['plain' => $action, 'html' => $action_html]);
// Import database emailbackup
$date = $message->getDate();
if (is_null($date)) { // This should not be happening -> Todo check getDate function
$this->logger->debug('Null date',['subject' => $message->getSubject(), $message->getHeader('date')->getValue()]);
return(false);
} else {
$timestamp = $date->getTimestamp();
$frommd5 = md5($from . $subject . $timestamp);
try {
$date = $message->getDate();
}
catch (exception $e) {
$this->logger->debug('Invalid date',['exc-message' => $e->getMessage(),'subject' => $message->getSubject(), $message->getHeader('date')->getValue()]);
return(false);
}
$timestamp = $date->getTimestamp();
$frommd5 = md5($from . $subject . $timestamp);
$empfang = $date->format('Y-m-d H:i:s');
$sql = "SELECT COUNT(id)
FROM `emailbackup_mails`
@ -693,6 +701,12 @@ class TicketImportHelper
$from
);
// Only for new tickets: apply filter rules
if (!$ticketexists) {
$this->applyTicketRules($ticketnachricht);
}
if ($ticketnachricht > 0 && $emailbackup_mails_id > 0) {
$this->db->Update(
"UPDATE `emailbackup_mails`
@ -837,8 +851,8 @@ class TicketImportHelper
$this->mailAccount->isAutoresponseEnabled()
&& $this->mailAccount->getAutoresponseText() !== ''
&& (
$this->erpApi->AutoresponderBlacklist($from) !== 1
|| $this->mailAccount->isAutoresponseLimitEnabled() === false
// $this->erpApi->AutoresponderBlacklist($from) !== 1 ||
$this->mailAccount->isAutoresponseLimitEnabled() === false
)
) {

View File

@ -30,10 +30,10 @@ $factoryServiceMap = @include $serviceCacheFile;
if (!is_file($serviceCacheFile)) {
// Installer ausführen wenn ServiceMap nicht vorhanden ist
// Installer ausführen, wenn ServiceMap nicht vorhanden ist
$resolver = new Psr4ClassNameResolver();
$resolver->addNamespace('Xentral\\', __DIR__);
$resolver->excludeFile(__DIR__ . '/bootstrap.php');
$resolver->excludeFile(__DIR__ . DIRECTORY_SEPARATOR . 'bootstrap.php');
$generator = new ClassMapGenerator($resolver, __DIR__);
$installer = new Installer($generator, $resolver);

View File

@ -223,7 +223,7 @@ if ($task) {
} catch (Exception $e) {
$app->erp->LogFile(
$app->DB->real_escape_string(
'Prozessstarter Fehler bei Aufruf des Moduls ' . $task[$task_index]['parameter'] . ': ' . $e->getMessage()
'Prozessstarter Fehler bei Aufruf des Moduls ' . $task[$task_index]['parameter'] . ': ' . $e->getMessage()." Trace: ".$e->GetTraceAsString()
)
);
}

View File

@ -125,9 +125,9 @@ $firmendatenid = $app->DB->Select("SELECT MAX(id) FROM firmendaten LIMIT 1");
);
try {
if($anzargs > 2){
$message .= $app->erp->LagerSync($articleId, true, $shopByIds);
$message .= $app->erp->LagerSync($articleId, false, $shopByIds); // 2nd parameter is print_echo -> prints via echo to logfile (big print_r)
}else{
$message .= $app->erp->LagerSync($articleId, true);
$message .= $app->erp->LagerSync($articleId, false);
}
}
catch (Exception $exception) {

View File

@ -16729,7 +16729,9 @@ INSERT INTO `firmendaten_werte` (`id`, `name`, `typ`, `typ1`, `typ2`, `wert`, `d
(386, 'cleaner_shopimport_tage', 'int', '11', '', '90', '90', 0, 0),
(387, 'cleaner_adapterbox', 'tinyint', '1', '', '1', '1', 0, 0),
(388, 'cleaner_adapterbox_tage', 'int', '11', '', '90', '90', 0, 0),
(389, 'bcc3', 'varchar', '128', '', '', '', 0, 0)
(389, 'bcc3', 'varchar', '128', '', '', '', 0, 0),
(390, 'rechnungersatz_standard', 'int', '1', '', '0', '0', 0, 0)
;
INSERT INTO `geschaeftsbrief_vorlagen` (`id`, `sprache`, `betreff`, `text`, `subjekt`, `projekt`, `firma`) VALUES
@ -16749,6 +16751,44 @@ INSERT INTO `geschaeftsbrief_vorlagen` (`id`, `sprache`, `betreff`, `text`, `sub
(16, 'deutsch', 'Zusammenstellung Ihrer Bestellung', '{ANSCHREIBEN},<br><br>soeben wurde Ihr Bestellung zusammengestellt. Sie können Ihre Ware jetzt abholen. Sind Sie bereits bei uns gewesen, so sehen Sie diese E-Mail bitte als gegenstandslos an.<br><br>{VERSAND}<br><br>Ihr {FIRMA} Team<br>', 'Selbstabholer', 0, 1),
(17, 'deutsch', 'Ihre Gutschrift {BELEGNR} von {FIRMA}', '{ANSCHREIBEN},<br><br>anbei finden Sie Ihre Gutschrift. Gerne stehen wir Ihnen weiterhin zur Verfügung.<br><br>Ihre Gutschrift ist im PDF-Format erstellt worden. Um sich die Gutschrift ansehen zu können, klicken Sie auf den Anhang und es öffnet sich automatisch der Acrobat Reader. Sollten Sie keinen Acrobat Reader besitzen, haben wir für Sie den Link zum kostenlosen Download von Adobe Acrobat Reader mit angegeben. Er führt Sie automatisch auf die Downloadseite von Adobe. So können Sie sich Ihre Gutschrift auch für Ihre Unterlagen ausdrucken.<br><br>http://www.adobe.com/products/acrobat/readstep2.html<br><br>{IF}{INTERNET}{THEN}Internet-Bestellnr.: {INTERNET}{ELSE}{ENDIF}', 'Gutschrift', 1, 1);
/* DBXE 2024-01-24 für datatablelabel */
INSERT INTO `hook` (`name`, `aktiv`, `parametercount`, `alias`, `description`) VALUES
('eproosystem_ende', 1, 0, '', ''),
('parseuservars', 1, 0, '', ''),
('dokumentsend_ende', 1, 0, '', ''),
('auftrag_versand_ende', 1, 0, '', ''),
('transfer_document_incoming', 1, 0, '', '')
;
INSERT INTO `hook_register` (`hook_action`, `function`, `aktiv`, `position`, `hook`, `module`, `module_parameter`) VALUES
(0, 'DataTableLabelsInclude', 1, 3, (SELECT id FROM hook WHERE name = 'eproosystem_ende'), 'Datatablelabels', 0),
(0, 'DatatablelabelsParseUserVars', 1, 2, (SELECT id FROM hook WHERE name = 'parseuservars'), 'Datatablelabels', 0),
(0, 'DataTableLabelsDokumentSendHook', 1, 1, (SELECT id FROM hook WHERE name = 'dokumentsend_ende'), 'Datatablelabels', 0),
(0, 'DatatablelabelsOrderSent', 1, 1, (SELECT id FROM hook WHERE name = 'auftrag_versand_ende'), 'Datatablelabels', 0),
(0, 'DatatablelabelsTransferDocumentIncomming', 1, 1, (SELECT id FROM hook WHERE name = 'transfer_document_incoming'), 'Datatablelabels', 0);
/* DBXE 2024-01-24 für datatablelabel */
/* OpenXE 2024-02-03 für belegvorlagen */
INSERT INTO `hook` (`name`, `aktiv`, `parametercount`, `alias`, `description`) VALUES
('BelegPositionenButtons', 1, 3, '', ''),
('AARLGPositionen_cmds_end', 1, 1, '', ''),
('ajax_filter_hook1', 1, 1, '', '');
INSERT INTO `hook_register` (`hook_action`, `function`, `aktiv`, `position`, `hook`, `module`, `module_parameter`) VALUES
(0, 'BelegevorlagenAARLGPositionen_cmds_end', 1, 2, (SELECT id FROM hook WHERE name = 'AARLGPositionen_cmds_end' LIMIT 1), 'belegevorlagen', 0),
(0, 'Belegevorlagenajax_filter_hook1', 1, 2, (SELECT id FROM hook WHERE name = 'ajax_filter_hook1' LIMIT 1), 'belegevorlagen', 0),
(0, 'BelegevorlagenBelegPositionenButtons', 1, 2, (SELECT id FROM hook WHERE name = 'BelegPositionenButtons' LIMIT 1), 'belegevorlagen', 0)
;
/* DBXE 2024-02-03 für belegvorlagen */
/*
BelegPositionenButtons
Id,Hook_action,Function,Aktiv,Position,Hook,Module,Module_parameter
20,0,BelegevorlagenBelegPositionenButtons,1,2,16,belegevorlagen,0
*/
INSERT INTO `hook_menu` (`id`, `module`, `aktiv`) VALUES
(1, 'artikel', 1),
(2, 'provisionenartikel', 1),
@ -18170,7 +18210,7 @@ INSERT INTO `wiedervorlage_stages` (`id`, `kurzbezeichnung`, `name`, `hexcolor`,
(12, 'Stay', 'Stay (Erhalt)', '#A2D624', 0, 1, 4, 4, NULL),
(13, 'Okay', 'Okay (Befürwortung)', '#A2D624', 0, 1, 5, 4, NULL);
INSERT INTO `wiki` (`id`, `name`, `content`, `lastcontent`) VALUES
(1, 'StartseiteWiki', '\n<p>Herzlich Willkommen in Ihrem OpenXE, dem freien ERP.<br><br>Wir freuen uns Sie als Benutzer begrüßen zu dürfen. Mit OpenXE organisieren Sie Ihre Firma schnell und einfach. Sie haben alle wichtigen Zahlen und Vorgänge im Überblick.<br><br>Für Einsteiger sind die folgenden Themen wichtig:<br><br></p>\n<ul>\n<li> <a href="index.php?module=firmendaten&amp;action=edit" target="_blank"> Firmendaten</a> (dort richten Sie Ihr Briefpapier ein)</li>\n<li> <a href="index.php?module=adresse&amp;action=list" target="_blank"> Stammdaten / Adressen</a> (Kunden und Lieferanten anlegen)</li>\n<li> <a href="index.php?module=artikel&amp;action=list" target="_blank"> Artikel anlegen</a> (Ihr Artikelstamm)</li>\n<li> <a href="index.php?module=angebot&amp;action=list" target="_blank"> Angebot</a> / <a href="index.php?module=auftrag&amp;action=list" target="_blank"> Auftrag</a> (Alle Dokumente für Ihr Geschäft)</li>\n<li> <a href="index.php?module=rechnung&amp;action=list" target="_blank"> Rechnung</a> / <a href="index.php?module=gutschrift&amp;action=list" target="_blank"> Gutschrift</a></li>\n<li> <a href="index.php?module=lieferschein&amp;action=list" target="_blank"> Lieferschein</a></li>\n</ul>\n<p><br><br>Kennen Sie unsere Zusatzmodule die Struktur und Organisation in das tägliche Geschäft bringen?<br><br></p>\n<ul>\n<li> <a href="index.php?module=kalender&amp;action=list" target="_blank"> Kalender</a></li>\n<li> <a href="index.php?module=wiki&amp;action=list" target="_blank"> Wiki</a></li>\n</ul>', NULL);
(1, 'StartseiteWiki', '\n<p>Herzlich Willkommen in Ihrem DBXE, dem freien ERP.<br><br>Wir freuen uns Sie als Benutzer begrüßen zu dürfen. Mit DBXE organisieren Sie Ihre Firma schnell und einfach. Sie haben alle wichtigen Zahlen und Vorgänge im Überblick.<br><br>Für Einsteiger sind die folgenden Themen wichtig:<br><br></p>\n<ul>\n<li> <a href="index.php?module=firmendaten&amp;action=edit" target="_blank"> Firmendaten</a> (dort richten Sie Ihr Briefpapier ein)</li>\n<li> <a href="index.php?module=adresse&amp;action=list" target="_blank"> Stammdaten / Adressen</a> (Kunden und Lieferanten anlegen)</li>\n<li> <a href="index.php?module=artikel&amp;action=list" target="_blank"> Artikel anlegen</a> (Ihr Artikelstamm)</li>\n<li> <a href="index.php?module=angebot&amp;action=list" target="_blank"> Angebot</a> / <a href="index.php?module=auftrag&amp;action=list" target="_blank"> Auftrag</a> (Alle Dokumente für Ihr Geschäft)</li>\n<li> <a href="index.php?module=rechnung&amp;action=list" target="_blank"> Rechnung</a> / <a href="index.php?module=gutschrift&amp;action=list" target="_blank"> Gutschrift</a></li>\n<li> <a href="index.php?module=lieferschein&amp;action=list" target="_blank"> Lieferschein</a></li>\n</ul>\n<p><br><br>Kennen Sie unsere Zusatzmodule die Struktur und Organisation in das tägliche Geschäft bringen?<br><br></p>\n<ul>\n<li> <a href="index.php?module=kalender&amp;action=list" target="_blank"> Kalender</a></li>\n<li> <a href="index.php?module=wiki&amp;action=list" target="_blank"> Wiki</a></li>\n</ul>', NULL);
INSERT INTO `konten` (`id`, `bezeichnung`, `kurzbezeichnung`, `type`, `erstezeile`, `datevkonto`, `blz`, `konto`, `swift`, `iban`, `lastschrift`, `hbci`, `hbcikennung`, `inhaber`, `aktiv`, `keineemail`, `firma`, `schreibbar`, `importletztenzeilenignorieren`, `liveimport`, `liveimport_passwort`, `liveimport_online`, `importtrennzeichen`, `codierung`, `importerstezeilenummer`, `importdatenmaskierung`, `importnullbytes`, `glaeubiger`, `geloescht`, `projekt`, `saldo_summieren`, `saldo_betrag`, `saldo_datum`, `importfelddatum`, `importfelddatumformat`, `importfelddatumformatausgabe`, `importfeldbetrag`, `importfeldbetragformat`, `importfeldbuchungstext`, `importfeldbuchungstextformat`, `importfeldwaehrung`, `importfeldwaehrungformat`, `importfeldhabensollkennung`, `importfeldkennunghaben`, `importfeldkennungsoll`, `importextrahabensoll`, `importfeldhaben`, `importfeldsoll`, `cronjobaktiv`, `cronjobverbuchen`) VALUES

View File

@ -765,6 +765,7 @@ $tooltip['firmendaten']['edit']['bezeichnungangebotersatz']="Im Angebot gibt es
$tooltip['firmendaten']['edit']['angebotersatz_standard']="Mit dieser Option setzen Sie die alternative Bezeichnung im Angebot (Option drüber) als Standard. Dadurch ist der Haken beim Erstellen eines neuen Angebots immer gesetzt.";
$tooltip['firmendaten']['edit']['bezeichnungauftragersatz']="Im Auftrag gibt es einen Haken um den Betreff des Augtrag-Belegs umzubenennen.<br>Mit der Option hier legen Sie den Namen des alternativen Betreffs fest.";
$tooltip['firmendaten']['edit']['bezeichnungrechnungersatz']="In der Rechnung gibt es einen Haken um den Betreff des Rechnung-Belegs umzubenennen.<br>Mit der Option hier legen Sie den Namen des alternativen Betreffs fest.";
$tooltip['firmendaten']['edit']['rechnungersatz_standard']="Mit dieser Option setzen Sie die alternative Bezeichnung in der Rechnung (Option drüber) als Standard. Dadurch ist der Haken beim Erstellen einer neuen Rechnung immer gesetzt.";
$tooltip['firmendaten']['edit']['bezeichnunglieferscheinersatz']="Im Lieferschein gibt es einen Haken um den Betreff des Lieferschein-Belegs umzubenennen.<br>Mit der Option hier legen Sie den Namen des alternativen Betreffs fest.";
$tooltip['firmendaten']['edit']['bezeichnungbestellungersatz']="In der Bestellung gibt es einen Haken um den Betreff des Bestell-Belegs umzubenennen.<br>Mit der Option hier legen Sie den Namen des alternativen Betreffs fest.";
$tooltip['firmendaten']['edit']['bezeichnungproformarechnungersatz']="In der Proformarechnung gibt es einen Haken um den Betreff der Proformarechnung-Belegs umzubenennen.<br>Mit der Option hier legen Sie den Namen des alternativen Betreffs fest.";

View File

@ -1,361 +1,361 @@
<?php
/*
**** COPYRIGHT & LICENSE NOTICE *** DO NOT REMOVE ****
*
* Xentral (c) Xentral ERP Sorftware GmbH, Fuggerstrasse 11, D-86150 Augsburg, * Germany 2019
*
* This file is licensed under the Embedded Projects General Public License *Version 3.1.
*
* You should have received a copy of this license from your vendor and/or *along with this file; If not, please visit www.wawision.de/Lizenzhinweis
* to obtain the text of the corresponding license version.
*
**** END OF COPYRIGHT & LICENSE NOTICE *** DO NOT REMOVE ****
/*
**** COPYRIGHT & LICENSE NOTICE *** DO NOT REMOVE ****
*
* Xentral (c) Xentral ERP Sorftware GmbH, Fuggerstrasse 11, D-86150 Augsburg, * Germany 2019
*
* This file is licensed under the Embedded Projects General Public License *Version 3.1.
*
* You should have received a copy of this license from your vendor and/or *along with this file; If not, please visit www.wawision.de/Lizenzhinweis
* to obtain the text of the corresponding license version.
*
**** END OF COPYRIGHT & LICENSE NOTICE *** DO NOT REMOVE ****
*/
?>
<?php
/// represent a HTML Form structure
class HTMLForm
{
var $action;
var $method;
var $name;
var $id;
var $FieldList;
function __construct($action="",$method="post",$name="",$id="")
{
$this->action=$action;
$this->name=$name;
$this->method=$method;
$this->id=$id;
}
function Set($value)
{
}
function Get()
{
}
function GetClose()
{
}
}
class HTMLTextarea
{
var $name;
var $rows;
var $value;
var $cols;
var $id="";
var $readonly="";
var $disabled="";
var $class;
function __construct($name,$rows,$cols,$defvalue="",$id="",$readonly="",$disabled="",$class="")
{
$this->name = $name;
$this->rows = $rows;
$this->cols = $cols;
$this->class = $class;
$this->value = $defvalue;
$this->id = $id;
if($id=="")
$this->id = $name;
$this->readonly = $readonly;
$this->disabled = $disabled;
}
function Get()
{
// TEMP ACHTUNG HIER IST MIST!!!
$value = $this->value;
/*
if(!defined('WFHTMLTextareabr') || !WFHTMLTextareabr)$value = preg_replace('/<br\\s*?\/??>/i', "\n", $value);
*/
// $value = str_replace("\\r\\n","\n",$value);
$html = "<textarea rows=\"{$this->rows}\" id=\"{$this->id}\" class=\"{$this->class}\"
name=\"{$this->name}\" cols=\"{$this->cols}\"
{$this->readonly} {$this->disabled} [COMMONREADONLYINPUT]>$value</textarea>";
return $html;
}
function GetClose()
{
}
}
/// fuer Datenfelder die mit in die Datenbank o.ae. kommen sollen, aber nicht durch den
/// user in irgendeiner art und weise gesehen und manipuliert werden koennen
class BlindField
{
var $name;
var $value;
function __construct($name,$value)
{
$this->name = $name;
$this->value = $value;
}
function Get(){}
function GetClose(){}
}
class HTMLInput
{
var $name;
var $type;
var $value;
var $dbvalue;
var $checkvalue;
var $onchange;
var $onclick;
var $defvalue;
var $size;
var $maxlength;
var $tabindex;
var $id="";
var $readonly="";
var $disabled="";
var $placeholder="";
var $class;
var $checked;
function __construct($name,$type,$value,$size="",$maxlength="",$id="",$defvalue="",$checked="",$readonly="",$disabled="",$class="",$onclick="",$tabindex="",$placeholder="")
{
$this->name = $name;
$this->type = $type;
$this->value = $value;
$this->size = $size;
$this->maxlength = $maxlength;
$this->id = $id;
$this->readonly = $readonly;
$this->disabled = $disabled;
$this->class=$class;
$this->checked=$checked;
$this->tabindex=$tabindex;
$this->placeholder=$placeholder;
$this->defvalue=$defvalue; // if value is empty use this
$this->onclick=$onclick;
}
function Get()
{
if($this->id=="") $this->id = $this->name;
switch($this->type)
{
case "text":
$html = "<input type=\"{$this->type}\" id=\"{$this->id}\" class=\"{$this->class}\" tabindex=\"{$this->tabindex}\"
name=\"{$this->name}\" value=\"".preg_replace("/\"/","&quot;",$this->value)."\" size=\"{$this->size}\" placeholder=\"{$this->placeholder}\"
maxlength=\"{$this->maxlength}\" {$this->readonly} {$this->disabled} [COMMONREADONLYINPUT]>";
break;
case "password":
$html = "<input type=\"{$this->type}\" id=\"{$this->id}\" class=\"{$this->class}\" tabindex=\"{$this->tabindex}\"
name=\"{$this->name}\" value=\"{$this->value}\" size=\"{$this->size}\"
maxlength=\"{$this->maxlength}\" {$this->readonly} {$this->disabled} [COMMONREADONLYINPUT]>";
break;
case "checkbox":
$html = "<input type=\"{$this->type}\" id=\"{$this->id}\" class=\"{$this->class}\" tabindex=\"{$this->tabindex}\"
name=\"{$this->name}\" value=\"{$this->value}\" {$this->checked} onchange=\"{$this->onchange}\" onclick=\"{$this->onclick}\"
{$this->readonly} {$this->disabled} [COMMONREADONLYINPUT]>";
break;
case "radio":
if($this->value==$this->defvalue) $this->checked="checked";
$tmpname = str_replace('_'.$this->defvalue,'',$this->name);
$html = "<input type=\"{$this->type}\" id=\"{$this->id}\" class=\"{$this->class}\" tabindex=\"{$this->tabindex}\"
name=\"{$tmpname}\" value=\"{$this->defvalue}\" {$this->checked} onchange=\"{$this->onchange}\"
{$this->readonly} {$this->disabled} [COMMONREADONLYINPUT]>";
break;
case "submit":
$html = "<input type=\"{$this->type}\" id=\"{$this->id}\" class=\"{$this->class}\"
name=\"{$this->name}\" value=\"{$this->value}\"
{$this->readonly} {$this->disabled}>";
break;
case "hidden":
$html = "<input type=\"{$this->type}\" id=\"{$this->id}\" class=\"{$this->class}\"
name=\"{$this->name}\" value=\"{$this->value}\" size=\"{$this->size}\"
maxlength=\"{$this->maxlength}\" {$this->readonly} {$this->disabled}>";
break;
}
return $html;
}
function GetClose()
{
}
}
class HTMLCheckbox extends HTMLInput
{
function __construct($name,$value,$defvalue,$checkvalue="",$onclick="",$tabindex="")
{
if($checkvalue!="")
$this->checkvalue=$checkvalue;
else
$this->checkvalue=$value;
$this->name = $name;
$this->type = "checkbox";
$this->checkradiovalue = isset($okvalue)?$okvalue:null;
$this->defvalue = $defvalue;
$this->value = $value;
$this->onclick= $onclick;
$this->tabindex= $tabindex;
$this->orgvalue = $value;
}
function Get()
{
if(($this->value=="" && $this->defvalue==$this->checkvalue)) {
}
if($this->checkvalue==$this->value) {
$this->checked="checked";
}
if($this->value=="" && $this->defvalue!=$this->checkvalue)
$this->checked="";
$this->value = $this->checkvalue;
//$this->value=1;
return parent::Get();
}
function GetClose()
{
}
};
class HTMLSelect
{
var $name;
var $size;
var $id;
var $readonly;
var $disabled;
var $options;
var $onchange;
var $selected;
var $tabindex;
var $class;
function __construct($name,$size,$id="",$readonly=false,$disabled=false,$tabindex="")
{
$this->name=$name;
$this->size=$size;
$this->id=$id;
$this->readonly=$readonly;
$this->disabled=$disabled;
$this->tabindex=$tabindex;
$this->class="";
if($id=="")
$this->id = $name;
}
function AddOption($option,$value)
{
$this->options[] = array($option,$value);
}
function AddOptionsDimensionalArray($values)
{
foreach($values as $key=>$value)
{
$this->options[] = array($value[wert],$value[schluessel]);
}
}
function AddOptionsAsocSimpleArray($values)
{
foreach($values as $key=>$value)
$this->options[] = array($value,$key);
}
function AddOptionsSimpleArray($values)
{
if(is_array($values))
{
foreach($values as $key=>$value)
{
if(!is_numeric($key))
$this->options[] = array($value,$key);
else
$this->options[] = array($value,$value);
}
}
}
function AddOptions($values)
{
$number=0;
if(count($values)>0)
{
foreach($values as $key=>$row)
foreach($row as $value)
{
if($number==0){
$option=$value;
$number=1;
}
else {
$this->options[] = array($option,$value);
$number=0;
$option="";
}
}
}
}
function Get()
{
$html = "<select name=\"{$this->name}\" size=\"{$this->size}\" tabindex=\"{$this->tabindex}\"
id=\"{$this->id}\" class=\"{$this->class}\" onchange=\"{$this->onchange}\" [COMMONREADONLYSELECT]>";
if($this->options && count($this->options)>0)
{
foreach($this->options as $key=>$value)
{
if($this->value==$value[1])
$html .="<option value=\"{$value[1]}\" selected>{$value[0]}</option>";
else
$html .="<option value=\"{$value[1]}\">{$value[0]}</option>";
}
}
$html .="</select>";
return $html;
}
function GetClose()
{
}
}
<?php
/// represent a HTML Form structure
class HTMLForm
{
var $action;
var $method;
var $name;
var $id;
var $FieldList;
function __construct($action="",$method="post",$name="",$id="")
{
$this->action=$action;
$this->name=$name;
$this->method=$method;
$this->id=$id;
}
function Set($value)
{
}
function Get()
{
}
function GetClose()
{
}
}
class HTMLTextarea
{
var $name;
var $rows;
var $value;
var $cols;
var $id="";
var $readonly="";
var $disabled="";
var $class;
function __construct($name,$rows,$cols,$defvalue="",$id="",$readonly="",$disabled="",$class="")
{
$this->name = $name;
$this->rows = $rows;
$this->cols = $cols;
$this->class = $class;
$this->value = $defvalue;
$this->id = $id;
if($id=="")
$this->id = $name;
$this->readonly = $readonly;
$this->disabled = $disabled;
}
function Get()
{
// TEMP ACHTUNG HIER IST MIST!!!
$value = $this->value;
/*
if(!defined('WFHTMLTextareabr') || !WFHTMLTextareabr)$value = preg_replace('/<br\\s*?\/??>/i', "\n", $value);
*/
// $value = str_replace("\\r\\n","\n",$value);
$html = "<textarea rows=\"{$this->rows}\" id=\"{$this->id}\" class=\"{$this->class}\"
name=\"{$this->name}\" cols=\"{$this->cols}\"
{$this->readonly} {$this->disabled} [COMMONREADONLYINPUT]>$value</textarea>";
return $html;
}
function GetClose()
{
}
}
/// fuer Datenfelder die mit in die Datenbank o.ae. kommen sollen, aber nicht durch den
/// user in irgendeiner art und weise gesehen und manipuliert werden koennen
class BlindField
{
var $name;
var $value;
function __construct($name,$value)
{
$this->name = $name;
$this->value = $value;
}
function Get(){}
function GetClose(){}
}
class HTMLInput
{
var $name;
var $type;
var $value;
var $dbvalue;
var $checkvalue;
var $onchange;
var $onclick;
var $defvalue;
var $size;
var $maxlength;
var $tabindex;
var $id="";
var $readonly="";
var $disabled="";
var $placeholder="";
var $class;
var $checked;
function __construct($name,$type,$value,$size="",$maxlength="",$id="",$defvalue="",$checked="",$readonly="",$disabled="",$class="",$onclick="",$tabindex="",$placeholder="")
{
$this->name = $name;
$this->type = $type;
$this->value = $value;
$this->size = $size;
$this->maxlength = $maxlength;
$this->id = $id;
$this->readonly = $readonly;
$this->disabled = $disabled;
$this->class=$class;
$this->checked=$checked;
$this->tabindex=$tabindex;
$this->placeholder=$placeholder;
$this->defvalue=$defvalue; // if value is empty use this
$this->onclick=$onclick;
}
function Get()
{
if($this->id=="") $this->id = $this->name;
switch($this->type)
{
case "text":
$html = "<input type=\"{$this->type}\" id=\"{$this->id}\" class=\"{$this->class}\" tabindex=\"{$this->tabindex}\"
name=\"{$this->name}\" value=\"".preg_replace("/\"/","&quot;",$this->value)."\" size=\"{$this->size}\" placeholder=\"{$this->placeholder}\"
maxlength=\"{$this->maxlength}\" {$this->readonly} {$this->disabled} [COMMONREADONLYINPUT]>";
break;
case "password":
$html = "<input type=\"{$this->type}\" id=\"{$this->id}\" class=\"{$this->class}\" tabindex=\"{$this->tabindex}\"
name=\"{$this->name}\" value=\"{$this->value}\" size=\"{$this->size}\"
maxlength=\"{$this->maxlength}\" {$this->readonly} {$this->disabled} [COMMONREADONLYINPUT]>";
break;
case "checkbox":
$html = "<input type=\"{$this->type}\" id=\"{$this->id}\" class=\"{$this->class}\" tabindex=\"{$this->tabindex}\"
name=\"{$this->name}\" value=\"{$this->value}\" {$this->checked} onchange=\"{$this->onchange}\" onclick=\"{$this->onclick}\"
{$this->readonly} {$this->disabled} [COMMONREADONLYINPUT]>";
break;
case "radio":
if($this->value==$this->defvalue) $this->checked="checked";
$tmpname = str_replace('_'.$this->defvalue,'',$this->name);
$html = "<input type=\"{$this->type}\" id=\"{$this->id}\" class=\"{$this->class}\" tabindex=\"{$this->tabindex}\"
name=\"{$tmpname}\" value=\"{$this->defvalue}\" {$this->checked} onchange=\"{$this->onchange}\"
{$this->readonly} {$this->disabled} [COMMONREADONLYINPUT]>";
break;
case "submit":
$html = "<input type=\"{$this->type}\" id=\"{$this->id}\" class=\"{$this->class}\"
name=\"{$this->name}\" value=\"{$this->value}\"
{$this->readonly} {$this->disabled}>";
break;
case "hidden":
$html = "<input type=\"{$this->type}\" id=\"{$this->id}\" class=\"{$this->class}\"
name=\"{$this->name}\" value=\"{$this->value}\" size=\"{$this->size}\"
maxlength=\"{$this->maxlength}\" {$this->readonly} {$this->disabled}>";
break;
}
return $html;
}
function GetClose()
{
}
}
class HTMLCheckbox extends HTMLInput
{
function __construct($name,$value,$defvalue,$checkvalue="",$onclick="",$tabindex="")
{
if($checkvalue!="")
$this->checkvalue=$checkvalue;
else
$this->checkvalue=$value;
$this->name = $name;
$this->type = "checkbox";
$this->checkradiovalue = isset($okvalue)?$okvalue:null;
$this->defvalue = $defvalue;
$this->value = $value;
$this->onclick= $onclick;
$this->tabindex= $tabindex;
$this->orgvalue = $value;
}
function Get()
{
if(($this->value=="" && $this->defvalue==$this->checkvalue)) {
}
if($this->checkvalue==$this->value) {
$this->checked="checked";
}
if($this->value=="" && $this->defvalue!=$this->checkvalue)
$this->checked="";
$this->value = $this->checkvalue;
//$this->value=1;
return parent::Get();
}
function GetClose()
{
}
};
class HTMLSelect
{
var $name;
var $size;
var $id;
var $readonly;
var $disabled;
var $options;
var $onchange;
var $selected;
var $tabindex;
var $class;
function __construct($name,$size,$id="",$readonly=false,$disabled=false,$tabindex="")
{
$this->name=$name;
$this->size=$size;
$this->id=$id;
$this->readonly=$readonly;
$this->disabled=$disabled;
$this->tabindex=$tabindex;
$this->class="";
if($id=="")
$this->id = $name;
}
function AddOption($option,$value)
{
$this->options[] = array($option,$value);
}
function AddOptionsDimensionalArray($values)
{
foreach($values as $key=>$value)
{
$this->options[] = array($value[wert],$value[schluessel]);
}
}
function AddOptionsAsocSimpleArray($values)
{
foreach($values as $key=>$value)
$this->options[] = array($value,$key);
}
function AddOptionsSimpleArray($values)
{
if(is_array($values))
{
foreach($values as $key=>$value)
{
if(!is_numeric($key))
$this->options[] = array($value,$key);
else
$this->options[] = array($value,$value);
}
}
}
function AddOptions($values)
{
$number=0;
if(count($values)>0)
{
foreach($values as $key=>$row)
foreach($row as $value)
{
if($number==0){
$option=$value;
$number=1;
}
else {
$this->options[] = array($option,$value);
$number=0;
$option="";
}
}
}
}
function Get()
{
$html = "<select name=\"{$this->name}\" size=\"{$this->size}\" tabindex=\"{$this->tabindex}\"
id=\"{$this->id}\" class=\"{$this->class}\" onchange=\"{$this->onchange}\" [COMMONREADONLYSELECT]>";
if($this->options && count($this->options)>0)
{
foreach($this->options as $key=>$value)
{
if($this->value==$value[1])
$html .="<option value=\"{$value[1]}\" selected>{$value[0]}</option>";
else
$html .="<option value=\"{$value[1]}\">{$value[0]}</option>";
}
}
$html .="</select>";
return $html;
}
function GetClose()
{
}
}

View File

@ -1252,7 +1252,7 @@ Options -Indexes
# Deny access to all *.php
Order deny,allow
Allow from all
<FilesMatch "\.(css|jpg|jpeg|gif|png|svg|js)$">
<FilesMatch "\.(css|jpg|jpeg|gif|png|svg|js|ico|css.map|js.map)$">
Order Allow,Deny
Allow from all
</FilesMatch>
@ -1271,6 +1271,10 @@ Allow from all
Order Allow,Deny
Allow from all
</Files>
<Files robots.txt>
Order Allow,Deny
Allow from all
</Files>
# end
');

View File

@ -1230,7 +1230,7 @@ class DB{
$sql = "UPDATE `$tablename` SET ";
foreach($ArrCols as $key=>$value) {
if($key!=$pkname && (isset($ziel[$key]) || !$zielspalten)) {
$sqla[] = $key." = '".($escape?$this->real_escape_string($value):$value)."' ";
$sqla[] = "`".$key."` = '".($escape?$this->real_escape_string($value):$value)."' ";
}
}
if(!empty($sqla)) {
@ -1424,7 +1424,7 @@ class DB{
if(empty($TableName) || empty($IDFieldName) || empty($IDToDuplicate)) {
return null;
}
/*
$sql = "SELECT * FROM $TableName WHERE $IDFieldName = $IDToDuplicate";
$result = @mysqli_query($this->connection,$sql);
if(empty($result)) {
@ -1442,6 +1442,23 @@ class DB{
}
$sql .= $RowKeys[$i] . " = '" . $this->real_escape_string($RowValues[$i]) . "'";
}
@mysqli_query($this->connection,$sql);
*/
$sql = "INSERT INTO ".$TableName." SELECT ";
$fields = $this->GetColAssocArray($TableName);
$comma = "";
foreach ($fields as $field => $value) {
if ($field != $IDFieldName) {
$sql .= $comma."`".$field."`";
} else {
$sql .= "NULL";
}
$comma = ", ";
}
$sql .= " FROM ".$TableName." WHERE id = ".$IDToDuplicate;
@mysqli_query($this->connection,$sql);
$id = $this->GetInsertID();

View File

@ -1,451 +1,453 @@
<?php
/*
**** COPYRIGHT & LICENSE NOTICE *** DO NOT REMOVE ****
*
* Xentral (c) Xentral ERP Sorftware GmbH, Fuggerstrasse 11, D-86150 Augsburg, * Germany 2019
*
* This file is licensed under the Embedded Projects General Public License *Version 3.1.
*
* You should have received a copy of this license from your vendor and/or *along with this file; If not, please visit www.wawision.de/Lizenzhinweis
* to obtain the text of the corresponding license version.
*
**** END OF COPYRIGHT & LICENSE NOTICE *** DO NOT REMOVE ****
/*
**** COPYRIGHT & LICENSE NOTICE *** DO NOT REMOVE ****
*
* Xentral (c) Xentral ERP Sorftware GmbH, Fuggerstrasse 11, D-86150 Augsburg, * Germany 2019
*
* This file is licensed under the Embedded Projects General Public License *Version 3.1.
*
* You should have received a copy of this license from your vendor and/or *along with this file; If not, please visit www.wawision.de/Lizenzhinweis
* to obtain the text of the corresponding license version.
*
**** END OF COPYRIGHT & LICENSE NOTICE *** DO NOT REMOVE ****
*/
?>
<?php
class StringCleaner
{
private $elements;
private $htmlpuriferconfig;
private $htmlpurifer;
private $ruleregexps;
/** @var Application */
private $app;
/**
* StringCleaner constructor.
*
* @param null|Application $app
*/
public function __construct($app = null)
{
$this->app = $app;
if(class_exists('HTMLPurifier_Config')) {
$this->htmlpuriferconfig = HTMLPurifier_Config::createDefault();
$this->htmlpuriferconfig->set('Core.Encoding', 'UTF-8');
$this->htmlpuriferconfig->set('Attr.AllowedFrameTargets', ['_blank']); // Allow hyperlinks with target="_blank"
//$this->htmlpuriferconfig->set('HTML.AllowedElements', 'h1,h2,h3,h4,h5,h6,p,a,strong,em,ol,ul,li,img,param,div,br,form,label,fieldset,input,textarea,select,option');
$this->htmlpurifer = new HTMLPurifier($this->htmlpuriferconfig);
}
$this->elements = array('nohtml'=> array('ust_befreit','abweichendelieferadresse','bestellungsart','bearbeiter','datum','lieferdatum','name','anrede','partner','packstation_inhaber','packstation_station','packstation_ident','packstation_plz','packstation_ort','partnerid','kennen','ihrebestellnummer'
,'abteilung','unterabteilung','ansprechpartner','adresszusatz','strasse','land','bundesstaat','plz','ort','versandart','internet','transaktionsnummer','vertrieb','zahlungsweise'
,'lieferabteilung','lieferunterabteilung','lieferansprechpartner','lieferadresszusatz','lieferstrasse','lieferland','lieferbundesstaat','lieferplz','lieferort'
,'bank_inhaber','bank_institut','bank_blz','bank_konto'
,'email','telefon','telefax','ustid','partner','projekt','herstellernummer','ean','nummer','name_de','name_ean'),
'nojs' => array('anabregstext','anabregstext_en','uebersicht_de','uebersicht_en','kurztext_de','kurztext_en','internebemerkung','internebezeichnung','freitext'));
$this->rulechecks = array('digit'=>'/^[0-9]+$/'
,'alpha'=>'/^[a-zA-Z]+$/'
,'alphadigit'=>'/^[0-9a-zA-Z]+$/'
,'username'=>'/^[0-9a-zA-Z\.\-]+$/'
,'space'=>'/^[\x20]+$/'
,'module'=>'/^[0-9a-zA-Z\_]$/'
,'password'=>'/^[^\s\n]{1}[^\n]{5}.*$/'
,'email'=>'/^[^@\s\x00-\x20]+@[^@\s\x00-\x20\.]+\.[^@\s\x00-\x20\.]+[^@\s\x00-\x20]*$/'
);
$this->ruleregexps = array(
'digit'=>'/[^0-9]/'
,'username'=>'/[^0-9a-zA-Z\.\-]/'
,'alpha'=>'/[^a-zA-Z]/'
,'alphadigits'=>'/[^0-9a-zA-Z]/'
,'module'=>'/[^0-9a-zA-Z\_]/'
,'moduleminus'=>'/[^0-9a-zA-Z\_\-]/'
,'alphadigitsspecial'=>'/[^0-9a-zA-Z\_\.\(\)]/'
,'base64'=>'/[^0-9a-zA-Z\=\+\-\_\/]/'
);
}
function SyntaxByElement($key, $default = '')
{
foreach($this->elements as $type => $arr) {
if(in_array($key, $arr)) {
return $type;
}
}
return $default;
}
function CleanSQLReturn($value, $columnname, $default = '')
{
if($value == '' || is_numeric($value))
{
return $value;
}
if(in_array($columnname, array('nummer','name','kundennummer','bezeichnung','bezeichnunglieferant','lieferantennummer','mitarbeiternummer','name_de','name_en',
'kurzbezeichnung','abkuerzung',
'strasse','plz','ort','land','ansprechpartner','abteilung','unterabteilung',
'liefername','lieferstrasse','lieferplz','lieferort','lieferland','lieferansprechpartner','lieferabteilung','lieferunterabteilung'))){
return strip_tags($value);
}
if($default == 'xss_clean')
{
return $this->xss_clean($value, false);
}
if($this->htmlpurifer)
{
return $this->htmlpurifer->purify($value);
}
return $value;
}
function RuleCheck($string, $rule = null, &$found = false)
{
if(isset($this->rulechecks[$rule]))
{
$found = true;
return preg_match_all($this->rulechecks[$rule], $string, $dummy);
}
switch($rule)
{
case 'datum':
$found = true;
if(preg_match_all('/([0-9]+)\.([0-9]+)\.$/', $string, $matches))
{
$string = $matches[1][0].'.'.$matches[2][0].'.'.date('Y');
}
try {
if($x = new DateTime($string)) {
return $x->format('Y') > 0;
}
}
catch (Exception $e) {
return false;
}
return false;
break;
}
}
function CheckSQLHtml($sql)
{
$start = 0;
$len = strlen($sql);
$lvl = 0;
$col = 0;
$ret = array(0);
$instring = false;
for($i = $start; $i < $len; $i++)
{
$char = $sql[$i];
switch($char)
{
case "'":
if($instring)
{
if($sql[$i-1] != '\\')
{
$instring = false;
}
}else{
if($sql[$i-1] != '\\'){
$instring = true;
}
}
break;
case "(":
if($instring)
{
}else{
$lvl++;
}
break;
case ")":
if($instring)
{
}else{
$lvl--;
}
break;
case "<":
if($instring)
{
if(preg_match('/<[a-zA-Z]/',$char.$sql[$i+1]))
{
if($ret[$col] != 2)
{
$ret[$col] = 1;
}
}
}
break;
case ',':
if($instring)
{
}else{
if($lvl == 0)
{
$col++;
$ret[$col] = 0;
}
}
break;
case 'o':
case 'O':
if($instring)
{
if($i < $len -4)
{
if(strtolower(substr($sql, $i, 2)) == 'on')
{
if(preg_match('/^on[a-z]+(\s*)=/', substr($sql, $i)))
{
$ret[$col] = 2;
}
}
}
}
break;
case 'F':
case 'f':
if($instring)
{
}else{
if($lvl == 0)
{
if($i < $len - 4)
{
if(strtolower(substr($sql, $i, 4)) == 'from')
{
break 2;
}
}
}
}
break;
}
}
$where = strripos($sql, 'where');
$restsql = substr($sql, $i, $where - $i);
if(preg_match('/<[a-zA-Z]/', $restsql))
{
if(preg_match('/on[a-z]+(\s*)=/',$restsql))
{
if($ret)
{
foreach($ret as $k => $v)
{
$ret[$k] = 2;
}
}
}else{
if($ret)
{
foreach($ret as $k => $v)
{
if($v != 2)
{
$ret[$k] = 1;
}
}
}
}
}
return $ret;
}
public function CleanString($string, $rule = null, &$found = false)
{
if(is_null($rule))
{
$rule = 'nothml';
}
switch($rule)
{
case 'email':
if($this->RuleCheck($string, $rule))
{
return $string;
}
return '';
break;
case 'nohtml':
$found = true;
if($string == '' || is_numeric($string))
{
return $string;
}
if(strpos($string,'<') === false)
{
return $string;
}
return strip_tags($string);
break;
case 'datum':
$found = true;
$string_ = $string;
if(preg_match_all('/([0-9]+)\.([0-9]+)\.$/', $string, $matches))
{
$string_ = $matches[1][0].'.'.$matches[2][0].'.'.date('Y');
}
try
{
if($x = new DateTime($string_))
{
if($x->format('Y') <= 0)
{
return '';
}
return $string;
}
} catch (Exception $e) {
return '';
}
return '';
break;
case 'xss_clean':
$found = true;
if($string == '' || is_numeric($string))
{
return $string;
}
if(strpos($string,'<') === false){
return $string;
}
return $this->xss_clean($string, false);
break;
case 'nojs':
$found = true;
if($string == '' || is_numeric($string))return $string;
if(strpos($string,'<') === false)return $string;
if($this->htmlpurifer)
{
return $this->htmlpurifer->purify($string);
}
return $this->xss_clean($string);
break;
case 'id':
$found = true;
if((String)$string === '')
{
return $string;
}
return (int)$string;
break;
case 'doppelid':
$found = true;
if((String)$string === '')
{
return $string;
}
$stringa = explode('-', $string, 2);
if(count($stringa) == 1)return (int)$stringa[0];
return ($stringa[0]===''?'':(int)$stringa[0]).'-'.(int)$stringa[1];
break;
case 'module':
$found = true;
return preg_replace ($this->ruleregexps[$rule], '' , $string);
break;
default:
if(isset($this->ruleregexps[$rule]))
{
$found = true;
return preg_replace ($this->ruleregexps[$rule], '' , $string);
}
break;
}
return $string;
}
public function xss_clean($data, $usepurify = true)
{
if($usepurify && !empty($this->htmlpurifer))
{
return $this->htmlpurifer->purify($data);
}
// Fix &entity\n;
$data = str_replace(array('&amp;','&lt;','&gt;'), array('&amp;amp;','&amp;lt;','&amp;gt;'), $data);
$data = preg_replace('/(&#*\w+)[\x00-\x20]+;/u', '$1;', $data);
$data = preg_replace('/(&#x*[0-9A-F]+);*/iu', '$1;', $data);
$data = html_entity_decode($data, ENT_COMPAT, 'UTF-8');
return $data;
// Remove any attribute starting with "on" or xmlns
$data = preg_replace('#(<[^>]+?[\x00-\x20"\'])(?:on|xmlns)[^>]*+>#iu', '$1>', $data);
// Remove javascript: and vbscript: protocols
$data = preg_replace('#([a-z]*)[\x00-\x20]*=[\x00-\x20]*([`\'"]*)[\x00-\x20]*j[\x00-\x20]*a[\x00-\x20]*v[\x00-\x20]*a[\x00-\x20]*s[\x00-\x20]*c[\x00-\x20]*r[\x00-\x20]*i[\x00-\x20]*p[\x00-\x20]*t[\x00-\x20]*:#iu', '$1=$2nojavascript...', $data);
$data = preg_replace('#([a-z]*)[\x00-\x20]*=([\'"]*)[\x00-\x20]*v[\x00-\x20]*b[\x00-\x20]*s[\x00-\x20]*c[\x00-\x20]*r[\x00-\x20]*i[\x00-\x20]*p[\x00-\x20]*t[\x00-\x20]*:#iu', '$1=$2novbscript...', $data);
$data = preg_replace('#([a-z]*)[\x00-\x20]*=([\'"]*)[\x00-\x20]*-moz-binding[\x00-\x20]*:#u', '$1=$2nomozbinding...', $data);
// Only works in IE: <span style="width: expression(alert('Ping!'));"></span>
$data = preg_replace('#(<[^>]+?)style[\x00-\x20]*=[\x00-\x20]*[`\'"]*.*?expression[\x00-\x20]*\([^>]*+>#i', '$1>', $data);
$data = preg_replace('#(<[^>]+?)style[\x00-\x20]*=[\x00-\x20]*[`\'"]*.*?behaviour[\x00-\x20]*\([^>]*+>#i', '$1>', $data);
$data = preg_replace('#(<[^>]+?)style[\x00-\x20]*=[\x00-\x20]*[`\'"]*.*?s[\x00-\x20]*c[\x00-\x20]*r[\x00-\x20]*i[\x00-\x20]*p[\x00-\x20]*t[\x00-\x20]*:*[^>]*+>#iu', '$1>', $data);
// Remove namespaced elements (we do not need them)
$data = preg_replace('#</*\w+:\w[^>]*+>#i', '', $data);
do
{
// Remove really unwanted tags
$old_data = $data;
$data = preg_replace('#</*(?:applet|b(?:ase|gsound|link)|embed|frame(?:set)?|i(?:frame|layer)|l(?:ayer|ink)|meta|object|s(?:cript|tyle)|title|xml)[^>]*+>#i', '', $data);
}
while ($old_data !== $data);
return $data;
}
function XMLArray_clean(&$xml, $lvl = 0)
{
if(is_string($xml))
{
}elseif(is_array($xml))
{
if(count($xml) > 0)
{
foreach($xml as $k => $v)
{
if(is_string($v))
{
$xml[$k] = $this->CleanString($v, $this->SyntaxByElement($k,'nojs'));
}
if($lvl < 10)
{
$this->XMLArray_clean($v, $lvl + 1);
}
}
}
}elseif(is_object($xml))
{
if(count($xml) > 0)
{
foreach($xml as $k => $v)
{
if(count($v) > 0)
{
if($lvl < 10)
{
$this->XMLArray_clean($v, $lvl + 1);
}
}elseif((String)$v != '')
{
if(isset($xml->$k))
{
//$xml->$k = $this->CleanString($v, $this->SyntaxByElement($k,'nojs'));
}
}
}
}
}
return $xml;
}
}
<?php
class StringCleaner
{
private $elements;
private $htmlpuriferconfig;
private $htmlpurifer;
private $ruleregexps;
/** @var Application */
private $app;
/**
* StringCleaner constructor.
*
* @param null|Application $app
*/
public function __construct($app = null)
{
$this->app = $app;
if(class_exists('HTMLPurifier_Config')) {
$this->htmlpuriferconfig = HTMLPurifier_Config::createDefault();
$this->htmlpuriferconfig->set('Core.Encoding', 'UTF-8');
$this->htmlpuriferconfig->set('Attr.AllowedFrameTargets', ['_blank']); // Allow hyperlinks with target="_blank"
//$this->htmlpuriferconfig->set('HTML.AllowedElements', 'h1,h2,h3,h4,h5,h6,p,a,strong,em,ol,ul,li,img,param,div,br,form,label,fieldset,input,textarea,select,option');
$this->htmlpurifer = new HTMLPurifier($this->htmlpuriferconfig);
}
$this->elements = array('nohtml'=> array('ust_befreit','abweichendelieferadresse','bestellungsart','bearbeiter','datum','lieferdatum','name','anrede','partner','packstation_inhaber','packstation_station','packstation_ident','packstation_plz','packstation_ort','partnerid','kennen','ihrebestellnummer'
,'abteilung','unterabteilung','ansprechpartner','adresszusatz','strasse','land','bundesstaat','plz','ort','versandart','internet','transaktionsnummer','vertrieb','zahlungsweise'
,'lieferabteilung','lieferunterabteilung','lieferansprechpartner','lieferadresszusatz','lieferstrasse','lieferland','lieferbundesstaat','lieferplz','lieferort'
,'bank_inhaber','bank_institut','bank_blz','bank_konto'
,'email','telefon','telefax','ustid','partner','projekt','herstellernummer','ean','nummer','name_de','name_ean'),
'nojs' => array('anabregstext','anabregstext_en','uebersicht_de','uebersicht_en','kurztext_de','kurztext_en','internebemerkung','internebezeichnung','freitext'));
$this->rulechecks = array('digit'=>'/^[0-9]+$/'
,'alpha'=>'/^[a-zA-Z]+$/'
,'alphadigit'=>'/^[0-9a-zA-Z]+$/'
,'username'=>'/^[0-9a-zA-Z\.\-]+$/'
,'space'=>'/^[\x20]+$/'
,'module'=>'/^[0-9a-zA-Z\_]$/'
,'password'=>'/^[^\s\n]{1}[^\n]{5}.*$/'
,'email'=>'/^[^@\s\x00-\x20]+@[^@\s\x00-\x20\.]+\.[^@\s\x00-\x20\.]+[^@\s\x00-\x20]*$/'
);
$this->ruleregexps = array(
'digit'=>'/[^0-9]/'
,'username'=>'/[^0-9a-zA-Z\.\-]/'
,'alpha'=>'/[^a-zA-Z]/'
,'alphadigits'=>'/[^0-9a-zA-Z]/'
,'module'=>'/[^0-9a-zA-Z\_]/'
,'moduleminus'=>'/[^0-9a-zA-Z\_\-]/'
,'alphadigitsspecial'=>'/[^0-9a-zA-Z\_\.\(\)]/'
,'base64'=>'/[^0-9a-zA-Z\=\+\-\_\/]/'
);
}
function SyntaxByElement($key, $default = '')
{
foreach($this->elements as $type => $arr) {
if(in_array($key, $arr)) {
return $type;
}
}
return $default;
}
function CleanSQLReturn($value, $columnname, $default = '')
{
if($value == '' || is_numeric($value))
{
return $value;
}
if(in_array($columnname, array('nummer','name','kundennummer','bezeichnung','bezeichnunglieferant','lieferantennummer','mitarbeiternummer','name_de','name_en',
'kurzbezeichnung','abkuerzung',
'strasse','plz','ort','land','ansprechpartner','abteilung','unterabteilung',
'liefername','lieferstrasse','lieferplz','lieferort','lieferland','lieferansprechpartner','lieferabteilung','lieferunterabteilung'))){
return strip_tags($value);
}
if($default == 'xss_clean')
{
return $this->xss_clean($value, false);
}
if($this->htmlpurifer)
{
return $this->htmlpurifer->purify($value);
}
return $value;
}
function RuleCheck($string, $rule = null, &$found = false)
{
if(isset($this->rulechecks[$rule]))
{
$found = true;
return preg_match_all($this->rulechecks[$rule], $string, $dummy);
}
switch($rule)
{
case 'datum':
$found = true;
if(preg_match_all('/([0-9]+)\.([0-9]+)\.$/', $string, $matches))
{
$string = $matches[1][0].'.'.$matches[2][0].'.'.date('Y');
}
try {
if($x = new DateTime($string)) {
return $x->format('Y') > 0;
}
}
catch (Exception $e) {
return false;
}
return false;
break;
}
}
function CheckSQLHtml($sql)
{
$start = 0;
$len = strlen($sql);
$lvl = 0;
$col = 0;
$ret = array(0);
$instring = false;
for($i = $start; $i < $len; $i++)
{
$char = $sql[$i];
switch($char)
{
case "'":
if($instring)
{
if($sql[$i-1] != '\\')
{
$instring = false;
}
}else{
if($sql[$i-1] != '\\'){
$instring = true;
}
}
break;
case "(":
if($instring)
{
}else{
$lvl++;
}
break;
case ")":
if($instring)
{
}else{
$lvl--;
}
break;
case "<":
if($instring)
{
if(preg_match('/<[a-zA-Z]/',$char.$sql[$i+1]))
{
if($ret[$col] != 2)
{
$ret[$col] = 1;
}
}
}
break;
case ',':
if($instring)
{
}else{
if($lvl == 0)
{
$col++;
$ret[$col] = 0;
}
}
break;
case 'o':
case 'O':
if($instring)
{
if($i < $len -4)
{
if(strtolower(substr($sql, $i, 2)) == 'on')
{
if(preg_match('/^on[a-z]+(\s*)=/', substr($sql, $i)))
{
$ret[$col] = 2;
}
}
}
}
break;
case 'F':
case 'f':
if($instring)
{
}else{
if($lvl == 0)
{
if($i < $len - 4)
{
if(strtolower(substr($sql, $i, 4)) == 'from')
{
break 2;
}
}
}
}
break;
}
}
$where = strripos($sql, 'where');
$restsql = substr($sql, $i, $where - $i);
if(preg_match('/<[a-zA-Z]/', $restsql))
{
if(preg_match('/on[a-z]+(\s*)=/',$restsql))
{
if($ret)
{
foreach($ret as $k => $v)
{
$ret[$k] = 2;
}
}
}else{
if($ret)
{
foreach($ret as $k => $v)
{
if($v != 2)
{
$ret[$k] = 1;
}
}
}
}
}
return $ret;
}
public function CleanString($string, $rule = null, &$found = false)
{
if(is_null($rule))
{
$rule = 'nothml';
}
switch($rule)
{
case 'email':
if($this->RuleCheck($string, $rule))
{
return $string;
}
return '';
break;
case 'nohtml':
$found = true;
if($string == '' || is_numeric($string))
{
return $string;
}
if(strpos($string,'<') === false)
{
return $string;
}
return strip_tags($string);
break;
case 'datum':
$found = true;
$string_ = $string;
if(preg_match_all('/([0-9]+)\.([0-9]+)\.$/', $string, $matches))
{
$string_ = $matches[1][0].'.'.$matches[2][0].'.'.date('Y');
}
try
{
if($x = new DateTime($string_))
{
if($x->format('Y') <= 0)
{
return '';
}
return $string;
}
} catch (Exception $e) {
return '';
}
return '';
break;
case 'xss_clean':
$found = true;
if($string == '' || is_numeric($string))
{
return $string;
}
if(strpos($string,'<') === false){
return $string;
}
return $this->xss_clean($string, false);
break;
case 'nojs':
$found = true;
if($string == '' || is_numeric($string))return $string;
if(strpos($string,'<') === false)return $string;
if($this->htmlpurifer)
{
return $this->htmlpurifer->purify($string);
}
return $this->xss_clean($string);
break;
case 'id':
$found = true;
if((String)$string === '')
{
return $string;
}
return (int)$string;
break;
case 'doppelid':
$found = true;
if((String)$string === '')
{
return $string;
}
$stringa = explode('-', $string, 2);
if(count($stringa) == 1)return (int)$stringa[0];
return ($stringa[0]===''?'':(int)$stringa[0]).'-'.(int)$stringa[1];
break;
case 'module':
$found = true;
return preg_replace ($this->ruleregexps[$rule], '' , $string);
break;
default:
if(isset($this->ruleregexps[$rule]))
{
$found = true;
return preg_replace ($this->ruleregexps[$rule], '' , $string);
}
break;
}
return $string;
}
public function xss_clean($data, $usepurify = true)
{
if($usepurify && !empty($this->htmlpurifer))
{
return $this->htmlpurifer->purify($data);
}
// Fix &entity\n;
$data = str_replace(array('&amp;','&lt;','&gt;'), array('&amp;amp;','&amp;lt;','&amp;gt;'), $data);
$data = preg_replace('/(&#*\w+)[\x00-\x20]+;/u', '$1;', $data);
$data = preg_replace('/(&#x*[0-9A-F]+);*/iu', '$1;', $data);
$data = html_entity_decode($data, ENT_COMPAT, 'UTF-8');
return $data;
// Remove any attribute starting with "on" or xmlns
$data = preg_replace('#(<[^>]+?[\x00-\x20"\'])(?:on|xmlns)[^>]*+>#iu', '$1>', $data);
// Remove javascript: and vbscript: protocols
$data = preg_replace('#([a-z]*)[\x00-\x20]*=[\x00-\x20]*([`\'"]*)[\x00-\x20]*j[\x00-\x20]*a[\x00-\x20]*v[\x00-\x20]*a[\x00-\x20]*s[\x00-\x20]*c[\x00-\x20]*r[\x00-\x20]*i[\x00-\x20]*p[\x00-\x20]*t[\x00-\x20]*:#iu', '$1=$2nojavascript...', $data);
$data = preg_replace('#([a-z]*)[\x00-\x20]*=([\'"]*)[\x00-\x20]*v[\x00-\x20]*b[\x00-\x20]*s[\x00-\x20]*c[\x00-\x20]*r[\x00-\x20]*i[\x00-\x20]*p[\x00-\x20]*t[\x00-\x20]*:#iu', '$1=$2novbscript...', $data);
$data = preg_replace('#([a-z]*)[\x00-\x20]*=([\'"]*)[\x00-\x20]*-moz-binding[\x00-\x20]*:#u', '$1=$2nomozbinding...', $data);
// Only works in IE: <span style="width: expression(alert('Ping!'));"></span>
$data = preg_replace('#(<[^>]+?)style[\x00-\x20]*=[\x00-\x20]*[`\'"]*.*?expression[\x00-\x20]*\([^>]*+>#i', '$1>', $data);
$data = preg_replace('#(<[^>]+?)style[\x00-\x20]*=[\x00-\x20]*[`\'"]*.*?behaviour[\x00-\x20]*\([^>]*+>#i', '$1>', $data);
$data = preg_replace('#(<[^>]+?)style[\x00-\x20]*=[\x00-\x20]*[`\'"]*.*?s[\x00-\x20]*c[\x00-\x20]*r[\x00-\x20]*i[\x00-\x20]*p[\x00-\x20]*t[\x00-\x20]*:*[^>]*+>#iu', '$1>', $data);
// Remove namespaced elements (we do not need them)
$data = preg_replace('#</*\w+:\w[^>]*+>#i', '', $data);
do
{
// Remove really unwanted tags
$old_data = $data;
$data = preg_replace('#</*(?:applet|b(?:ase|gsound|link)|embed|frame(?:set)?|i(?:frame|layer)|l(?:ayer|ink)|meta|object|s(?:cript|tyle)|title|xml)[^>]*+>#i', '', $data);
}
while ($old_data !== $data);
return $data;
}
function XMLArray_clean(&$xml, $lvl = 0)
{
if(is_string($xml))
{
}elseif(is_array($xml))
{
if(count($xml) > 0)
{
foreach($xml as $k => $v)
{
if(is_string($v))
{
$xml[$k] = $this->CleanString($v, $this->SyntaxByElement($k,'nojs'));
}
if($lvl < 10)
{
$this->XMLArray_clean($v, $lvl + 1);
}
}
}
}elseif(is_object($xml))
{
$xml = (array) $xml;
if(count($xml) > 0)
{
foreach($xml as $k => $v)
{
$v = (array) $v;
if(count($v) > 0)
{
if($lvl < 10)
{
$this->XMLArray_clean($v, $lvl + 1);
}
}elseif((String)$v != '')
{
if(isset($xml->$k))
{
//$xml->$k = $this->CleanString($v, $this->SyntaxByElement($k,'nojs'));
}
}
}
}
}
return $xml;
}
}

File diff suppressed because it is too large Load Diff

View File

@ -388,7 +388,7 @@ class EasyTable {
{
$editcols = array(4,5,6,7);
}else{
$einkaufspreiseerlaubt = false;
$einkaufspreiseerlaubt = true;
if($einkaufspreiseerlaubt)
{
$editcols =array(4,5,6,7,8,9);

View File

@ -41,8 +41,16 @@ class PLACEHOLDER_MODULECLASSNAME {
$defaultorder = 1;
$defaultorderdesc = 0;
$aligncenter = array();
$alignright = array();
$numbercols = array();
$sumcol = array();
$dropnbox = "PLACEHOLDER_DROPNBOX";
$dropnbox = "PLACEHOLDER_DROPNBOX";
// $moreinfo = true; // Allow drop down details
// $moreinfoaction = "lieferschein"; // specify suffix for minidetail-URL to allow different minidetails
// $menucol = 11; // Set id col for moredata/menu
$menu = "<table cellpadding=0 cellspacing=0><tr><td nowrap>" . "<a href=\"index.php?module=PLACEHOLDER_MODULENAME&action=edit&id=%value%\"><img src=\"./themes/{$app->Conf->WFconf['defaulttheme']}/images/edit.svg\" border=\"0\"></a>&nbsp;<a href=\"#\" onclick=DeleteDialog(\"index.php?module=PLACEHOLDER_MODULENAME&action=delete&id=%value%\");>" . "<img src=\"themes/{$app->Conf->WFconf['defaulttheme']}/images/delete.svg\" border=\"0\"></a>" . "</td></tr></table>";
@ -93,7 +101,7 @@ class PLACEHOLDER_MODULECLASSNAME {
$id = $this->app->Secure->GetGET('id');
// Check if other users are editing this id
if($this->app->erp->DisableModul('artikel',$id))
if($this->app->erp->DisableModul('PLACEHOLDER_MODULENAME',$id))
{
return;
}
@ -118,6 +126,8 @@ class PLACEHOLDER_MODULECLASSNAME {
// Add checks here
// $input['projekt'] = $this->app->erp->ReplaceProjekt(true,$input['projekt'],true); // Parameters: Target db?, value, from form?
$columns = "id, ";
$values = "$id, ";
$update = "";
@ -153,11 +163,17 @@ class PLACEHOLDER_MODULECLASSNAME {
// Load values again from database
$dropnbox = "PLACEHOLDER_DROPNBOX";
$result = $this->app->DB->SelectArr("PLACEHOLDER_SQL_LIST"." WHERE id=$id");
$result = $this->app->DB->SelectArr("PLACEHOLDER_SQL_LIST"." WHERE id=$id");
foreach ($result[0] as $key => $value) {
$this->app->Tpl->Set(strtoupper($key), $value);
}
if (!empty($result)) {
$PLACEHOLDER_MODULENAME_from_db = $result[0];
} else {
return;
}
/*
* Add displayed items later
@ -166,9 +182,11 @@ class PLACEHOLDER_MODULECLASSNAME {
$this->app->Tpl->Add('KURZUEBERSCHRIFT2', $email);
$this->app->Tpl->Add('EMAIL', $email);
$this->app->Tpl->Add('ANGEZEIGTERNAME', $angezeigtername);
$this->app->YUI->AutoComplete("artikel", "artikelnummer");
*/
// $this->SetInput($input);
$this->app->Tpl->Parse('PAGE', "PLACEHOLDER_MODULENAME_edit.tpl");
}
@ -183,14 +201,4 @@ class PLACEHOLDER_MODULECLASSNAME {
return $input;
}
/*
* Set all fields in the page corresponding to $input
*/
function SetInput($input) {
// $this->app->Tpl->Set('EMAIL', $input['email']);
PLACEHOLDER_SET_INPUT
}
}
}

File diff suppressed because it is too large Load Diff

View File

@ -1,4 +1,4 @@
{
"host": "https://github.com/openxe-org/openxe.git",
"host": "http://repo.dbxe.de/dbxe/dbxe.git",
"branch": "master"
}

View File

@ -112,6 +112,12 @@ if (php_sapi_name() == "cli") {
$check_db = true;
} else {
}
if (in_array('-strict', $argv)) {
$strict_db = true;
} else {
$strict_db = false;
}
if (in_array('-do', $argv)) {
if (!$check_git && !$check_db) {
@ -127,7 +133,17 @@ if (php_sapi_name() == "cli") {
}
if ($check_git || $check_db || $do_git || $do_db) {
upgrade_main($directory,$verbose,$check_git,$do_git,$export_db,$check_db,$do_db,$force,$connection,$origin);
upgrade_main( directory: $directory,
verbose: $verbose,
check_git: $check_git,
do_git: $do_git,
export_db: $export_db,
check_db: $check_db,
strict_db: $strict_db,
do_db: $do_db,
force: $force,
connection: $connection,
origin: $origin);
} else {
info();
}
@ -139,7 +155,7 @@ if (php_sapi_name() == "cli") {
}
// -------------------------------- END
function upgrade_main(string $directory,bool $verbose, bool $check_git, bool $do_git, bool $export_db, bool $check_db, bool $do_db, bool $force, bool $connection, bool $origin) {
function upgrade_main(string $directory,bool $verbose, bool $check_git, bool $do_git, bool $export_db, bool $check_db, bool $strict_db, bool $do_db, bool $force, bool $connection, bool $origin) {
$mainfolder = dirname($directory);
$datafolder = $directory."/data";
@ -147,7 +163,7 @@ function upgrade_main(string $directory,bool $verbose, bool $check_git, bool $do
$remote_file_name = $datafolder."/remote.json";
$schema_file_name = "db_schema.json";
echo_out("--------------- OpenXE upgrade ---------------\n");
echo_out("--------------- DBXE upgrade ---------------\n");
echo_out("--------------- ".date("Y-m-d H:i:s")." ---------------\n");
//require_once($directory.'/../cronjobs/githash.php');
@ -365,6 +381,9 @@ function upgrade_main(string $directory,bool $verbose, bool $check_git, bool $do
foreach ($compare_differences as $compare_difference) {
$comma = "";
foreach ($compare_difference as $key => $value) {
if (is_array($value)) {
$value = implode(',',$value);
}
echo_out($comma."$key => [$value]");
$comma = ", ";
}
@ -376,7 +395,7 @@ function upgrade_main(string $directory,bool $verbose, bool $check_git, bool $do
echo_out("--------------- Calculating database upgrade for '$schema@$host'... ---------------\n");
$upgrade_sql = array();
$result = mustal_calculate_db_upgrade($compare_def, $db_def, $upgrade_sql, $mustal_replacers);
$result = mustal_calculate_db_upgrade($compare_def, $db_def, $upgrade_sql, $mustal_replacers, $strict_db);
if (!empty($result)) {
abort(count($result)." errors.\n");
@ -415,6 +434,10 @@ function upgrade_main(string $directory,bool $verbose, bool $check_git, bool $do
$counter++;
echo_out("\rUpgrade step $counter of $number_of_statements... ");
if ($verbose) {
echo_out("\n".$sql."\n");
}
$query_result = mysqli_query($mysqli, $sql);
if (!$query_result) {
$error = " not ok: ". mysqli_error($mysqli);
@ -462,8 +485,8 @@ function upgrade_main(string $directory,bool $verbose, bool $check_git, bool $do
}
function info() {
echo_out("OpenXE upgrade tool\n");
echo_out("Copyright 2022 (c) OpenXE project\n");
echo_out("DBXE upgrade tool\n");
echo_out("Copyright 2024 (c) DBXE project\n");
echo_out("\n");
echo_out("Upgrade files and database\n");
echo_out("Options:\n");
@ -475,6 +498,7 @@ function info() {
echo_out("\t-f: force override of existing files\n");
echo_out("\t-o: update from origin instead of remote.json\n");
echo_out("\t-connection use connection.json in data folder instead of user.inc.php\n");
echo_out("\t-strict: innodb_strict_mode=ON\n");
echo_out("\t-clean: (not yet implemented) create the needed SQL to remove items from the database not in the JSON\n");
echo_out("\n");
}

View File

@ -21,7 +21,7 @@ function mustal_compare_table_array(array $nominal, string $nominal_name, array
Compare two database structures
Returns a structured array containing information on all the differences.
function mustal_calculate_db_upgrade(array $compare_def, array $db_def, array &$upgrade_sql) : int
function mustal_calculate_db_upgrade(array $compare_def, array $db_def, array &$upgrade_sql, bool $strict) : int
Generate the SQL needed to upgrade the database to match the definition, based on a comparison.
Data structure in Array and JSON
@ -67,6 +67,7 @@ $mustal_replacers = [
['on update current_timestamp','on update current_timestamp()']
];
// Load all db_def from a DB connection into a db_def array
function mustal_load_tables_from_db(string $host, string $schema, string $user, string $passwd, array $replacers) : array {
@ -79,20 +80,22 @@ function mustal_load_tables_from_db(string $host, string $schema, string $user,
}
// Get db_def and views
$sql = "SHOW FULL tables WHERE Table_type = 'BASE TABLE'";
$sql = "SHOW TABLE STATUS WHERE engine IS NOT NULL";
$query_result = mysqli_query($mysqli, $sql);
if (!$query_result) {
return(array());
}
while ($row = mysqli_fetch_assoc($query_result)) {
$table = array();
$table['name'] = $row['Tables_in_'.$schema];
$table['type'] = $row['Table_type'];
$table['name'] = $row['Name'];
$table['collation'] = $row['Collation'];
$table['type'] = 'BASE TABLE';
$tables[] = $table; // Add table to list of tables
}
// Get and add columns of the table
foreach ($tables as &$table) {
$sql = "SHOW FULL COLUMNS FROM ".$table['name'];
$query_result = mysqli_query($mysqli, $sql);
@ -109,6 +112,10 @@ function mustal_load_tables_from_db(string $host, string $schema, string $user,
$column['Default'] = mustal_mysql_put_text_type_in_quotes($column['Type'],$column['Default']);
}
if (empty($column['Collation']) && mustal_is_string_type($column['Type'])) {
$column['Collation'] = $table['collation'];
}
$columns[] = $column; // Add column to list of columns
}
$table['columns'] = $columns;
@ -135,6 +142,13 @@ function mustal_load_tables_from_db(string $host, string $schema, string $user,
$composed_key['Key_name'] = $key['Key_name'];
$composed_key['Index_type'] = $key['Index_type'];
$composed_key['columns'][] = $key['Column_name'];
if ($key['Key_name'] != 'PRIMARY') {
$composed_key['Non_unique'] = ($key['Non_unique'] == 1)?'':'UNIQUE';
} else {
$composed_key['Non_unique'] = '';
}
$composed_keys[] = $composed_key;
} else {
// Given key, add column
@ -161,9 +175,16 @@ function mustal_load_tables_from_db(string $host, string $schema, string $user,
foreach ($views as &$view) {
$sql = "SHOW CREATE VIEW ".$view['name'];
$query_result = mysqli_query($mysqli, $sql);
try {
$query_result = mysqli_query($mysqli, $sql);
}
catch (exception $e) {
$query_result = false; // VIEW is erroneous
}
if (!$query_result) {
return(array());
$view['Create'] = '';
continue;
}
$viewdef = mysqli_fetch_assoc($query_result);
@ -330,19 +351,17 @@ function mustal_compare_table_array(array $nominal, string $nominal_name, array
// Compare the properties of the sql_indexs
if ($check_column_definitions) {
$found_sql_index = $found_table['keys'][$sql_index_key];
foreach ($sql_index as $key => $value) {
if ($found_sql_index[$key] != $value) {
// if ($key != 'permissions') {
$compare_difference = array();
$compare_difference['type'] = "Key definition";
$compare_difference['table'] = $database_table['name'];
$compare_difference['key'] = $sql_index['Key_name'];
$compare_difference['property'] = $key;
$compare_difference[$nominal_name] = implode(',',$value);
$compare_difference[$actual_name] = implode(',',$found_sql_index[$key]);
$compare_differences[] = $compare_difference;
// }
$compare_difference = array();
$compare_difference['type'] = "Key definition";
$compare_difference['table'] = $database_table['name'];
$compare_difference['key'] = $sql_index['Key_name'];
$compare_difference['property'] = $key;
$compare_difference[$nominal_name] = $value;
$compare_difference[$actual_name] = $found_sql_index[$key];
$compare_differences[] = $compare_difference;
}
}
unset($value);
@ -401,9 +420,11 @@ function mustal_compare_table_array(array $nominal, string $nominal_name, array
// Generate SQL to create or modify column
function mustal_column_sql_definition(string $table_name, array $column, array $reserved_words_without_quote) : string {
$column_is_string_type = mustal_is_string_type($column['Type']);
foreach($column as $key => &$value) {
$value = (string) $value;
$value = mustal_column_sql_create_property_definition($key,$value,$reserved_words_without_quote);
$value = mustal_column_sql_create_property_definition($key,$value,$reserved_words_without_quote,$column_is_string_type);
}
// Default handling here
@ -422,7 +443,7 @@ function mustal_column_sql_definition(string $table_name, array $column, array $
}
// Generate SQL to modify a single column property
function mustal_column_sql_create_property_definition(string $property, string $property_value, array $reserved_words_without_quote) : string {
function mustal_column_sql_create_property_definition(string $property, string $property_value, array $reserved_words_without_quote, $column_is_string_type) : string {
switch ($property) {
case 'Type':
@ -453,8 +474,10 @@ function mustal_column_sql_create_property_definition(string $property, string $
}
break;
case 'Collation':
if ($property_value != '') {
if ($property_value != '' && $column_is_string_type) {
$property_value = " COLLATE ".$property_value;
} else {
$property_value = "";
}
break;
default:
@ -468,9 +491,9 @@ function mustal_column_sql_create_property_definition(string $property, string $
// Replaces different variants of the same function mustal_to allow comparison
function mustal_sql_replace_reserved_functions(array &$column, array $replacers) {
$result = strtolower($column['Default']);
$result = $column['Default'];
foreach ($replacers as $replace) {
if ($result == $replace[0]) {
if (strtolower($column['Default']) == $replace[0]) {
$result = $replace[1];
}
}
@ -519,7 +542,7 @@ function mustal_implode_with_quote(string $quote, string $delimiter, array $arra
// 11 Table type upgrade not supported
// 12 Upgrade type not supported
function mustal_calculate_db_upgrade(array $compare_def, array $db_def, array &$upgrade_sql, array $replacers) : array {
function mustal_calculate_db_upgrade(array $compare_def, array $db_def, array &$upgrade_sql, array $replacers, bool $strict) : array {
$result = array();
$upgrade_sql = array();
@ -561,14 +584,7 @@ function mustal_calculate_db_upgrade(array $compare_def, array $db_def, array &$
if ($key['Key_name'] == 'PRIMARY') {
$keystring = "PRIMARY KEY ";
} else {
if(array_key_exists('Index_type', $key)) {
$index_type = $key['Index_type'];
} else {
$index_type = "";
}
$keystring = $index_type." KEY `".$key['Key_name']."` ";
$keystring = mustal_key_type(" ".$key['Non_unique']." KEY `".$key['Key_name']."` ",$key['Index_type']);
}
$sql .= $comma.$keystring."(`".implode("`,`",$key['columns'])."`) ";
}
@ -651,10 +667,7 @@ function mustal_calculate_db_upgrade(array $compare_def, array $db_def, array &$
if ($key_key !== false) {
$key = $table['keys'][$key_key];
$sql = "ALTER TABLE `$table_name` ADD KEY `".$key_name."` ";
$sql .= "(`".implode("`,`",$key['columns'])."`)";
$sql .= ";";
$sql = "ALTER TABLE `$table_name` ADD ".mustal_key_type(" ".$key['Non_unique']." KEY `".$key['Key_name']."` "."(`".implode("`,`",$key['columns'])."`)",$key['Index_type']).";";
$upgrade_sql[] = $sql;
}
else {
@ -682,7 +695,7 @@ function mustal_calculate_db_upgrade(array $compare_def, array $db_def, array &$
$sql = "ALTER TABLE `$table_name` DROP KEY `".$key_name."`;";
$upgrade_sql[] = $sql;
$sql = "ALTER TABLE `$table_name` ADD KEY `".$key_name."` ";
$sql = "ALTER TABLE `$table_name` ADD ".mustal_key_type(" ".$key['Non_unique']." KEY `".$key['Key_name']."` ",$key['Index_type']);
$sql .= "(`".implode("`,`",$key['columns'])."`)";
$sql .= ";";
$upgrade_sql[] = $sql;
@ -739,10 +752,40 @@ function mustal_calculate_db_upgrade(array $compare_def, array $db_def, array &$
$upgrade_sql = array_unique($upgrade_sql);
if (count($upgrade_sql) > 0) {
array_unshift($upgrade_sql,"SET SQL_MODE='ALLOW_INVALID_DATES';","SET SESSION innodb_strict_mode=OFF;");
array_unshift($upgrade_sql,"SET SQL_MODE='ALLOW_INVALID_DATES';");
if (!$strict) {
array_unshift($upgrade_sql,"SET SESSION innodb_strict_mode=OFF;");
}
}
return($result);
}
// Check if given type is a string, relevant for collation
function mustal_is_string_type(string $type) {
$mustal_string_types = array('varchar','char','text','tinytext','mediumtext','longtext');
foreach($mustal_string_types as $string_type) {
if (stripos($type,$string_type) === 0) {
return(true);
}
}
return(false);
}
// create correct index type syntax
function mustal_key_type(string $key_definition_string, string $key_type) {
// Key types with using syntax
$mustal_key_types_using_mapping = [
'BTREE',
'HASH'
];
if (in_array($key_type,$mustal_key_types_using_mapping)) {
return ($key_definition_string." USING ".$key_type);
} else {
return ($key_type." ".$key_definition_string);
}
}

View File

@ -1,7 +1,7 @@
<?php
$version="OSS";
$version_revision="1.8";
$version_revision="1.0.2";
$githash = file_get_contents("../githash.txt");
if (!empty($githash)) {
$version_revision .= " (".substr($githash,0,8).")";

View File

@ -4,7 +4,7 @@ Options -Indexes
# Deny access to all *.php
Order deny,allow
Allow from all
<FilesMatch "\.(css|jpg|jpeg|gif|png|svg|js)$">
<FilesMatch "\.(css|jpg|jpeg|gif|png|svg|js|ico|css.map|js.map)$">
Order Allow,Deny
Allow from all
</FilesMatch>
@ -23,4 +23,8 @@ Allow from all
Order Allow,Deny
Allow from all
</Files>
<Files robots.txt>
Order Allow,Deny
Allow from all
</Files>
# end

File diff suppressed because it is too large Load Diff

7
www/js/scrollfix.js Normal file
View File

@ -0,0 +1,7 @@
/*
* Fix scrolling to middle of page bug
*/
$(() => {
window.scrollTo(0, 0);
})

File diff suppressed because it is too large Load Diff

View File

@ -559,7 +559,7 @@ class Remote
$steuersatz_normal = 19;
}
$crossellingInstalled = $this->app->erp->ModulVorhanden('crossselling');
foreach($reta as $k => $ret)
foreach($reta as $k => $ret)
{
if(isset($ret['stueckliste'])){
$stuecklistenmechanik = $ret['stueckliste'];
@ -631,8 +631,17 @@ class Remote
}
$arr['projekt'] = $shopexportArr['projekt'];
$arr['name_de'] = $ret['name'];
$arr['uebersicht_de'] = isset($ret['uebersicht_de'])?$ret['uebersicht_de']:'';
$arr['kurztext_de'] = isset($ret['kurztext_de'])?$ret['kurztext_de']:'';
$arr['uebersicht_de'] = $ret['uebersicht_de'] ?? '';
$arr['kurztext_de'] = $ret['kurztext_de'] ?? '';
$arr['name_en'] = $ret['name_en'];
$arr['uebersicht_en'] = $ret['uebersicht_en'] ?? '';
$arr['kurztext_en'] = $ret['kurztext_en'] ?? '';
$arr['metakeywords_de'] = $ret['metakeywords_de'] ?? '';
$arr['metakeywords_en'] = $ret['metakeywords_en'] ?? '';
$arr['metatitle_de'] = $ret['metatitle_de'] ?? '';
$arr['metatitle_en'] = $ret['metatitle_en'] ?? '';
$arr['metadescription_de'] = $ret['metadescription_de'] ?? '';
$arr['metadescription_en'] = $ret['metadescription_en'] ?? '';
//$arr['anabregs_text'] = isset($ret['uebersicht_de'])?$ret['uebersicht_de']:'';
if(isset($ret['ean']) && $ret['ean'] != '')
{
@ -1577,14 +1586,20 @@ class Remote
$data[$i]['crosssellingartikel'] = [];
}
$gegenseitigzugewiesen = $this->app->DB->SelectArr("SELECT a.id, a.nummer, ak.bezeichnung as kategorie, a.name_de, a.name_en, ca.art, ca.gegenseitigzuweisen, af.nummer AS fremdnummer
$sql =
"SELECT a.id, a.nummer, ak.bezeichnung as kategorie, a.name_de, a.name_en, ca.art, ca.gegenseitigzuweisen, af.nummer AS fremdnummer
FROM crossselling_artikel ca
JOIN artikel a ON ca.artikel = a.id
LEFT JOIN artikelkategorien ak ON CONCAT(ak.id,'_kat') = a.typ
LEFT JOIN (SELECT af.id,af.nummer,af.artikel,af.shopid FROM artikelnummer_fremdnummern af JOIN (SELECT artikel, MAX(shopid) AS maxid FROM artikelnummer_fremdnummern WHERE aktiv=1 AND (shopid=0 OR shopid=2) GROUP BY artikel) x ON x.artikel = af.artikel AND af.shopid=x.maxid WHERE af.aktiv = 1) af ON af.artikel = a.id
LEFT JOIN (SELECT nummer,artikel FROM artikelnummer_fremdnummern WHERE shopid=0 OR shopid='$id' ORDER BY shopid DESC LIMIT 1 ) af2 ON af2.artikel = a.id
WHERE ca.crosssellingartikel='" . $tmp->GetId() . "' AND ca.gegenseitigzuweisen=1 AND (ca.shop='$id' OR ca.shop='0')
LEFT JOIN (SELECT nummer,artikel FROM artikelnummer_fremdnummern WHERE shopid=0 OR shopid='$id' ORDER BY shopid DESC LIMIT 1 ) af ON af.artikel = a.id
GROUP BY ca.artikel, ca.art");
GROUP BY ca.artikel, ca.art";
$gegenseitigzugewiesen = $this->app->DB->SelectArr($sql);
if (!empty($gegenseitigzugewiesen)) {
foreach ($gegenseitigzugewiesen as $gegenseitigzugewiesenercrosssellingartikel) {
$data[$i]['crosssellingartikel'][] = $gegenseitigzugewiesenercrosssellingartikel;

View File

@ -75,7 +75,8 @@ abstract class Versanddienstleister
$ret['lieferscheinId'] = $lieferscheinId;
$addressfields = ['name', 'adresszusatz', 'abteilung', 'ansprechpartner', 'unterabteilung', 'ort', 'plz',
'strasse', 'land'];
'strasse', 'land'];
$ret['original'] = array_filter($docArr, fn($key) => in_array($key, $addressfields), ARRAY_FILTER_USE_KEY);
$ret['name'] = empty(trim($docArr['ansprechpartner'])) ? trim($docArr['name']) : trim($docArr['ansprechpartner']);
@ -127,7 +128,7 @@ abstract class Versanddienstleister
if (!empty($docArr['ihrebestellnummer'])) {
$orderNumberParts[] = $docArr['ihrebestellnummer'];
}
$orderNumberParts[] = $docArr['belegnr'];
$orderNumberParts[] = ucfirst($sid)." ".$docArr['belegnr'];
$ret['order_number'] = implode(' / ', $orderNumberParts);
}
@ -369,7 +370,7 @@ abstract class Versanddienstleister
return true;
}
public function Paketmarke(string $target, string $docType, int $docId): void
public function Paketmarke(string $target, string $docType, int $docId, $versandpaket = null): void
{
$address = $this->GetAdressdaten($docId, $docType);
if (isset($_SERVER['CONTENT_TYPE']) && ($_SERVER['CONTENT_TYPE'] === 'application/json')) {
@ -378,25 +379,65 @@ abstract class Versanddienstleister
if ($json->submit == 'print') {
$result = $this->CreateShipment($json, $address);
if ($result->Success) {
$sql = "INSERT INTO versand
(adresse, lieferschein, versandunternehmen, gewicht, tracking, tracking_link, anzahlpakete)
VALUES
({$address['addressId']}, {$address['lieferscheinId']}, '$this->type',
'$json->weight', '$result->TrackingNumber', '$result->TrackingUrl', 1)";
$this->app->DB->Insert($sql);
if (empty($versandpaket)) {
$sql = "INSERT INTO versandpakete
(
lieferschein_ohne_pos,
gewicht,
tracking,
tracking_link,
status,
versandart,
versender
)
VALUES
(
{$address['lieferscheinId']},
'$json->weight',
'$result->TrackingNumber',
'$result->TrackingUrl',
'neu',
'$this->type',
'".$this->app->User->GetName()."'
)";
$this->app->DB->Insert($sql);
$versandpaket = $this->app->DB->GetInsertID();
}
else {
$sql = "UPDATE versandpakete SET
gewicht = '".$json->weight."',
tracking = '".$result->TrackingNumber."',
tracking_link = '".$result->TrackingUrl."'
WHERE id = '".$versandpaket."'
";
$this->app->DB->Update($sql);
}
$filename = $this->app->erp->GetTMP() . join('_', [$this->type, 'Label', $result->TrackingNumber]) . '.pdf';
file_put_contents($filename, $result->Label);
$this->app->printer->Drucken($this->labelPrinterId, $filename);
$filename = join('_', [$this->type, 'Label', $result->TrackingNumber]) . '.pdf';
$filefullpath = $this->app->erp->GetTMP() . $filename;
file_put_contents($filefullpath, $result->Label);
$this->app->erp->CreateDateiWithStichwort(
$filename,
'Paketmarke '.$this->type.' '.$result->TrackingNumber,
'Paketmarke Versandpaket Nr. '.$versandpaket,
'',
$filefullpath,
$this->app->User->GetName(),
'paketmarke',
'versandpaket',
$versandpaket
);
if (isset($result->ExportDocuments)) {
$filename = $this->app->erp->GetTMP() . join('_', [$this->type, 'ExportDoc', $result->TrackingNumber]) . '.pdf';
file_put_contents($filename, $result->ExportDocuments);
$this->app->printer->Drucken($this->documentPrinterId, $filename);
}
$ret['messages'][] = ['class' => 'info', 'text' => "Paketmarke wurde erfolgreich erstellt: $result->TrackingNumber"];
$this->app->printer->Drucken($this->labelPrinterId, $filefullpath);
if (isset($result->ExportDocuments)) {
$filefullpath = $this->app->erp->GetTMP() . join('_', [$this->type, 'ExportDoc', $result->TrackingNumber]) . '.pdf';
file_put_contents($filefullpath, $result->ExportDocuments);
$this->app->printer->Drucken($this->documentPrinterId, $filefullpath);
}
$ret['messages'][] = ['class' => 'info', 'text' => "Paketmarke wurde erfolgreich erstellt: $result->TrackingNumber"];
} else {
$ret['messages'] = array_map(fn(string $item) => ['class' => 'error', 'text' => $item], array_unique($result->Errors));
$ret['messages'] = array_map(fn(string $item) => ['class' => 'error', 'text' => $item], array_unique($result->Errors));
}
}
header('Content-Type: application/json');
@ -410,7 +451,12 @@ abstract class Versanddienstleister
$address['product'] = $products[0]->Id ?? '';
$countries = $this->app->DB->SelectArr("SELECT iso, bezeichnung_de name, eu FROM laender ORDER BY bezeichnung_de");
$countries = array_combine(array_column($countries, 'iso'), $countries);
if(!empty($countries)) {
$countries = array_combine(array_column($countries, 'iso'), $countries);
} else {
$countries = Array();
$this->app->Tpl->addMessage('error', 'L&auml;nderliste ist leer. Siehe Einstellungen -> L&auml;nderliste.', false, 'PAGE');
}
$json['form'] = $address;
$json['countries'] = $countries;

View File

@ -41,8 +41,15 @@ class AngebotPDF extends BriefpapierCustom {
{
// pruefe ob es mehr als ein steuersatz gibt // wenn ja dann darf man sie nicht ausblenden
$check = $this->app->erp->SteuerAusBeleg($this->doctype,$id);
if(!empty($check)?count($check):0>1)$this->ust_spalteausblende=false;
else $this->ust_spalteausblende=true;
$this->ust_spalteausblende=false;
if(!empty($check)) {
if (count($check) == 1) {
$this->ust_spalteausblende=true;
}
}
}
$briefpapier_bearbeiter_ausblenden = $this->app->erp->Firmendaten('briefpapier_bearbeiter_ausblenden');
@ -491,30 +498,29 @@ class AngebotPDF extends BriefpapierCustom {
"rabatt"=>$value['rabatt'],
"steuertext"=>$value['steuertext']));
if($positionenkaufmaenischrunden == 3){
$netto_gesamt = $value['menge'] * round($value['preis'] - ($value['preis'] / 100 * $value['rabatt']),2);
}else{
if (!$value['nicht_einrechnen']) {
$netto_gesamt = $value['menge'] * round($value['preis'] - ($value['preis'] / 100 * $value['rabatt']),2);
}
}else if (!$value['nicht_einrechnen']) {
$netto_gesamt = $value['menge'] * ($value['preis'] - ($value['preis'] / 100 * $value['rabatt']));
}
if($positionenkaufmaenischrunden)
{
$netto_gesamt = round($netto_gesamt, 2);
}
if($value['optional']!="1"){
if(!isset($summen[$value['steuersatz']])) {
$summen[$value['steuersatz']] = 0;
}
if($value['optional']!="1"){
if($value['explodiert_parent'] == 0 || !$berechnen_aus_teile)
{
$summe = $summe + $netto_gesamt;
if(!isset($summen[$value['steuersatz']]))$summen[$value['steuersatz']] = 0;
$summen[$value['steuersatz']] += ($netto_gesamt/100)*$value['steuersatz'];
$summe = $summe + $netto_gesamt;
$gesamtsteuern +=($netto_gesamt/100)*$value['steuersatz'];
}
/*
if($value['umsatzsteuer']=="" || $value['umsatzsteuer']=="normal")
{
$summeV = $summeV + (($netto_gesamt/100)*$this->app->erp->GetSteuersatzNormal(false,$id,"angebot"));
}
else {
$summeR = $summeR + (($netto_gesamt/100)*$this->app->erp->GetSteuersatzErmaessigt(false,$id,"angebot"));
}*/
}
} else {
$summe_netto_optional += $netto_gesamt;
$steuern_optional +=($netto_gesamt/100)*$value['steuersatz'];
}
}
@ -536,7 +542,7 @@ class AngebotPDF extends BriefpapierCustom {
if($this->app->erp->AngebotMitUmsatzeuer($id))
{
$this->setTotals(array("totalArticles"=>$summe,"total"=>$summe + $gesamtsteuern,"summen"=>$summen,"totalTaxV"=>0,"totalTaxR"=>0));
$this->setTotals(array("totalArticles"=>$summe,"total"=>$summe + $gesamtsteuern,"summen"=>$summen,"totalTaxV"=>0,"totalTaxR"=>0,"optional"=>$summe_netto_optional+$steuern_optional,"optional_netto"=>$summe_netto_optional));
//$this->setTotals(array("totalArticles"=>$summe,"totalTaxV"=>$summeV,"totalTaxR"=>$summeR,"total"=>$summe+$summeV+$summeR));
} else {
$this->setTotals(array("totalArticles"=>$summe,"total"=>$summe));

View File

@ -43,8 +43,13 @@ class AuftragPDF extends BriefpapierCustom {
{
// pruefe ob es mehr als ein steuersatz gibt // wenn ja dann darf man sie nicht ausblenden
$check = $this->app->erp->SteuerAusBeleg($this->doctype,$id);
if(!empty($check)?count($check):0>1)$this->ust_spalteausblende=false;
else $this->ust_spalteausblende=true;
$this->ust_spalteausblende=false;
if(!empty($check)) {
if (count($check) == 1) {
$this->ust_spalteausblende=true;
}
}
}
$briefpapier_bearbeiter_ausblenden = $this->app->erp->Firmendaten('briefpapier_bearbeiter_ausblenden');

View File

@ -1,406 +1,406 @@
<?php
/*
**** COPYRIGHT & LICENSE NOTICE *** DO NOT REMOVE ****
*
* Xentral (c) Xentral ERP Sorftware GmbH, Fuggerstrasse 11, D-86150 Augsburg, * Germany 2019
*
* This file is licensed under the Embedded Projects General Public License *Version 3.1.
*
* You should have received a copy of this license from your vendor and/or *along with this file; If not, please visit www.wawision.de/Lizenzhinweis
* to obtain the text of the corresponding license version.
*
**** END OF COPYRIGHT & LICENSE NOTICE *** DO NOT REMOVE ****
/*
**** COPYRIGHT & LICENSE NOTICE *** DO NOT REMOVE ****
*
* Xentral (c) Xentral ERP Sorftware GmbH, Fuggerstrasse 11, D-86150 Augsburg, * Germany 2019
*
* This file is licensed under the Embedded Projects General Public License *Version 3.1.
*
* You should have received a copy of this license from your vendor and/or *along with this file; If not, please visit www.wawision.de/Lizenzhinweis
* to obtain the text of the corresponding license version.
*
**** END OF COPYRIGHT & LICENSE NOTICE *** DO NOT REMOVE ****
*/
?>
<?php
if(!class_exists('BriefpapierCustom'))
{
class BriefpapierCustom extends Briefpapier
{
}
}
class BestellungPDF extends BriefpapierCustom {
public $doctype;
function __construct($app,$projekt="")
{
$this->app=$app;
//parent::Briefpapier();
$this->doctype="bestellung";
$this->doctypeOrig="Bestellung";
$this->bestellungohnepreis=0;
parent::__construct($this->app,$projekt);
}
function GetBestellung($id)
{
$this->doctypeid = $id;
$briefpapier_bearbeiter_ausblenden = $this->app->erp->Firmendaten('briefpapier_bearbeiter_ausblenden');
$this->setRecipientLieferadresse($id,"bestellung");
$data = $this->app->DB->SelectRow(
"SELECT adresse,projekt, sprache, angebot, ustid, keineartikelnummern, bestellbestaetigung, artikelnummerninfotext,
einkaeufer, belegnr, freitext, bodyzusatz, ohne_briefpapier, abweichendebezeichnung, bestellungohnepreis,
kundennummerlieferant AS kundennummer, DATE_FORMAT(datum,'%d.%m.%Y') AS datum, DATE_FORMAT(datum,'%Y%m%d') as datum2,
lieferantennummer
FROM bestellung
WHERE id='$id'
LIMIT 1"
);
extract($data,EXTR_OVERWRITE);
$adresse = $data['adresse'];
$sprache = $data['sprache'];
$angebot = $data['angebot'];
$ustid = $data['ustid'];
$projekt = $data['projekt'];
$keineartikelnummern = $data['keineartikelnummern'];
$bestellbestaetigung = $data['bestellbestaetigung'];
$artikelnummerninfotext = $data['artikelnummerninfotext'];
$einkaeufer = $data['einkaeufer'];
$belegnr = $data['belegnr'];
$freitext = $data['freitext'];
$bodyzusatz = $data['bodyzusatz'];
$ohne_briefpapier = $data['ohne_briefpapier'];
$abweichendebezeichnung = $data['abweichendebezeichnung'];
$bestellungohnepreis = $data['bestellungohnepreis'];
$kundennummer = $data['kundennummer'];
$datum = $data['datum'];
$datum2 = $data['datum2'];
$lieferantennummer = $data['lieferantennummer'];
$this->bestellungohnepreis=$data['bestellungohnepreis'];
if(empty($kundennummer)) {
$kundennummer = $this->app->DB->Select("SELECT kundennummerlieferant FROM adresse WHERE id='$adresse' LIMIT 1");
}
if($einkaeufer=='') {
$einkaeufer = $this->app->DB->Select("SELECT bearbeiter FROM bestellung WHERE id='$id' LIMIT 1");
}
if(empty($sprache)) {
$sprache = $this->app->DB->Select("SELECT sprache FROM adresse WHERE id='$adresse' LIMIT 1");
}
$kundennummer = $this->app->erp->ReadyForPDF($kundennummer);
$einkaeufer = $this->app->erp->ReadyForPDF($einkaeufer);
$angebot = $this->app->erp->ReadyForPDF($angebot);
$this->app->erp->BeschriftungSprache($sprache);
$this->sprache = $sprache;
$projektabkuerzung = $this->app->DB->Select(sprintf('SELECT abkuerzung FROM projekt WHERE id = %d', $projekt));
if($this->bestellungohnepreis) {
$this->nichtsichtbar_summe = 1;
}
if($ohne_briefpapier=='1') {
$this->logofile = '';
$this->briefpapier='';
$this->briefpapier2='';
}
if($belegnr=='' || $belegnr=='0') {
$belegnr = '- '.$this->app->erp->Beschriftung('dokument_entwurf');
}
$this->doctypeOrig=$this->app->erp->Beschriftung('dokument_bestellung')." $belegnr";
if($abweichendebezeichnung)
{
$this->doctypeOrig=($this->app->erp->Beschriftung('bezeichnungbestellungersatz')?$this->app->erp->Beschriftung('bezeichnungbestellungersatz'):$this->app->erp->Beschriftung('dokument_bestellung'))." $belegnr";
}
else {
$this->doctypeOrig=$this->app->erp->Beschriftung('dokument_bestellung')." $belegnr";
}
if($angebot=='') {
$angebot = '-';
}
if($kundennummer=='') {
$kundennummer= '-';
}
if(!$this->app->erp->BestellungMitUmsatzeuer($id)) {
$this->ust_befreit=true;
}
/** @var \Xentral\Modules\Company\Service\DocumentCustomizationService $service */
$service = $this->app->Container->get('DocumentCustomizationService');
if($block = $service->findActiveBlock('corr', 'suppliers_order', $projekt)) {
$sCD = $service->parseBlockAsArray($this->getLanguageCodeFrom($this->sprache),'corr', 'suppliers_order',[
'BESTELLNUMMER' => $belegnr,
'DATUM' => $datum,
'KUNDENNUMMER' => $kundennummer,
'EINKAEUFER' => $einkaeufer,
'LIEFERANTENNUMMER' => $lieferantennummer,
'PROJEKT' => $projektabkuerzung,
'EMAIL' => '',
'TELEFON' => '',
'BEARBEITER' => '',
'VERTRIEB' => '',
], $projekt);
if(!empty($sCD)) {
switch($block['fontstyle']) {
case 'f':
$this->setBoldCorrDetails($sCD);
break;
case 'i':
$this->setItalicCorrDetails($sCD);
break;
case 'fi':
$this->setItalicBoldCorrDetails($sCD);
break;
default:
$this->setCorrDetails($sCD, true);
break;
}
}
}
else{
if($briefpapier_bearbeiter_ausblenden){
$this->setCorrDetails(array($this->app->erp->Beschriftung("dokument_bestellung_angebotnummer") => $angebot,
$this->app->erp->Beschriftung("dokument_bestellung_unserekundennummer") => $kundennummer,
$this->app->erp->Beschriftung("dokument_bestelldatum") => $datum));
}else{
$this->setCorrDetails(array($this->app->erp->Beschriftung("dokument_bestellung_angebotnummer") => $angebot,
$this->app->erp->Beschriftung("dokument_bestellung_unserekundennummer") => $kundennummer,
$this->app->erp->Beschriftung("dokument_bestelldatum") => $datum,
$this->app->erp->Beschriftung("dokument_bestellung_einkauf") => $einkaeufer));
}
}
if(!$this->app->erp->BestellungMitUmsatzeuer($id) && $ustid!='' ) {
//$steuer = "\nSteuerfreie innergemeinschaftliche Lieferung. Ihre USt-IdNr. $ustid Land: $land";
$this->ust_befreit=true;
if($keinsteuersatz!='1') {
$steuer = $this->app->erp->Beschriftung('eu_lieferung_vermerk');
}
$steuer = str_replace('{USTID}',$ustid,$steuer);
$steuer = str_replace('{LAND}',$land,$steuer);
}
$body=$this->app->erp->Beschriftung('bestellung_header');
if($bodyzusatz!='') {
$body=$body."\r\n".$bodyzusatz;
}
$body = $this->app->erp->ParseUserVars('bestellung',$id,$body);
if($this->app->erp->Firmendaten('footer_reihenfolge_bestellung_aktivieren')=='1')
{
$footervorlage = $this->app->erp->Firmendaten('footer_reihenfolge_bestellung');
if($footervorlage==''){
$footervorlage = "{FOOTERFREITEXT}\r\n{FOOTERTEXTVORLAGEBESTELLUNG}";
}
$footervorlage = str_replace('{FOOTERFREITEXT}',$freitext,$footervorlage);
$footervorlage = str_replace('{FOOTERTEXTVORLAGEBESTELLUNG}',$this->app->erp->Beschriftung("bestellung_footer"),$footervorlage);
$footervorlage = $this->app->erp->ParseUserVars("bestellung",$id,$footervorlage);
$footer = $footervorlage;
} else {
$footer = $freitext."\r\n".$this->app->erp->ParseUserVars('bestellung',$id,$this->app->erp->Beschriftung("bestellung_footer"));
}
if($bestellbestaetigung) {
$this->setTextDetails(array(
"body"=>$body,
"footer"=>$footer."\r\n".$this->app->erp->Beschriftung('dokument_bestellung_bestaetigung')));
} else
{
$this->setTextDetails(array(
"body"=>$body,
"footer"=>$footer));
}
$artikel = $this->app->DB->SelectArr(
"SELECT bp.*, art.ean AS artean, art.nummer AS artnummer, art.herstellernummer AS artherstellernummer,
art.einheit as arteinheit, art.hersteller AS arthersteller
FROM bestellung_position AS bp
LEFT JOIN artikel AS art ON bp.artikel = art.id
WHERE bp.bestellung='$id'
ORDER By bp.sort"
);
if(empty($artikel)) {
$artikel = [];
}
$steuersatzV = $this->app->erp->GetSteuersatzNormal(false,$id,'bestellung');
$steuersatzR = $this->app->erp->GetSteuersatzErmaessigt(false,$id,'bestellung');
$gesamtsteuern = 0;
$mitumsatzsteuer = $this->app->erp->BestellungMitUmsatzeuer($id);
//$waehrung = $this->app->DB->Select("SELECT waehrung FROM bestellung_position WHERE bestellung='$id' LIMIT 1");
$summe = 0;
foreach($artikel as $key=>$value) {
$lieferdatum = $this->app->String->Convert($value['lieferdatum'],'%1-%2-%3','%3.%2.%1');
if($lieferdatum==='00.00.0000') {
$lieferdatum ='';
}//$this->app->erp->Beschriftung("dokument_lieferdatum_sofort");
if($value['umsatzsteuer'] !== 'ermaessigt' && $value['umsatzsteuer'] !== 'befreit') {
$value['umsatzsteuer'] = 'normal';
}
$tmpsteuersatz = null;
$tmpsteuertext = null;
$this->app->erp->GetSteuerPosition('bestellung', $value['id'],$tmpsteuersatz, $tmpsteuertext);
if($value['steuersatz'] === null || $value['steuersatz'] < 0) {
if($value['umsatzsteuer'] === 'ermaessigt') {
$value['steuersatz'] = $steuersatzR;
}
elseif($value['umsatzsteuer'] === 'befreit') {
$value['steuersatz'] = 0;
}else{
$value['steuersatz'] = $steuersatzV;
}
if($tmpsteuersatz !== null) {
$value['steuersatz'] = $tmpsteuersatz;
}
}
if($tmpsteuertext && !$value['steuertext']) {
$value['steuertext'] = $tmpsteuertext;
}
if(!$mitumsatzsteuer) {
$value['steuersatz'] = 0;
}
// if(!$this->app->erp->BestellungMitUmsatzeuer($id)) $value[umsatzsteuer] = "";
if($keineartikelnummern==1) {
$value['bestellnummer'] = $this->app->erp->Beschriftung('dokument_bestellung_keineartikelnummer');
}
$ohne_artikeltext = $this->app->DB->Select("SELECT ohne_artikeltext FROM ".$this->table." WHERE id='".$this->id."' LIMIT 1");
if($ohne_artikeltext=='1') {
$value['beschreibung']='';
}
$value['artikelnummer']= $value['artnummer'];// $this->app->DB->Select("SELECT nummer FROM artikel WHERE id='".$value['artikel']."' LIMIT 1");
if($artikelnummerninfotext) {
if($value['bestellnummer']!=''){
$value['beschreibung'] = $value['beschreibung'] . "\n" . $this->app->erp->Beschriftung('dokument_bestellung_bestellnummer') . ': ' . $value['bestellnummer'];
}
$value['bestellnummer']=$value['artikelnummer'];
} else {
if($value['artikelnummer']!=''){
$value['beschreibung'] = $value['beschreibung'] . "\n" . $this->app->erp->Beschriftung('dokument_bestellung_unsereartikelnummer') . ': ' . $value['artikelnummer'];
}
}
if($value['vpe'] > 1 && is_numeric($value['vpe'])) {
$value['beschreibung'] = $value['beschreibung']."\n".$this->app->erp->Beschriftung('dokument_bestellung_mengeinvpe').': '.$value['vpe'];
//umschalbar in der Zukunft
$value['preis'] = $value['preis']*$value['menge']/($value['menge'] / $value['vpe']);
$value['menge'] = round($value['menge'] / $value['vpe'],2);
$value['einheit'] = "VPE";
}
elseif((String)$value['einheit'] === '') {
$value['einheit'] = $value['arteinheit'];// $this->app->DB->Select("SELECT einheit FROM artikel WHERE id = '".$value['artikel']."' LIMIT 1");
if((String)$value['einheit'] === '') {
$value['einheit'] = $this->app->erp->Firmendaten('artikeleinheit_standard');
}
}
if($value['beschreibung']!='') {
$newline="\n";
}
if($this->bestellungohnepreis) {
$value['preis'] = '-';
}
if($value['waehrung']!='' && $value['waehrung']!=$this->waehrung){
$this->waehrung = $value['waehrung'];
}
$value['menge'] = (float)$value['menge'];
$value['herstellernummer'] = $value['artherstellernummer'];// $this->app->DB->Select("SELECT herstellernummer FROM artikel WHERE id='".$value['artikel']."' LIMIT 1");
$value['hersteller'] = $value['arthersteller'];//$this->app->DB->Select("SELECT hersteller FROM artikel WHERE id='".$value['artikel']."' LIMIT 1");
$this->addItem(
array(
'belegposition'=>$value['id'],
'artikel'=>$value['artikel'],
'currency'=>$value['waehrung'],
'amount'=>$value['menge'],
'price'=>$value['preis'],
'tax'=>$value['umsatzsteuer'],'steuersatz'=>$value['steuersatz'],
'steuertext'=>$value['steuertext'],
'vpe'=>$value['vpe'],
'unit'=>$value['einheit'],
'itemno'=>$value['bestellnummer'],
'desc'=>$value['beschreibung'].($lieferdatum!=''?$newline.$this->app->erp->Beschriftung('dokument_lieferdatum').': '.$lieferdatum:''),
'hersteller'=>$value['hersteller'],
'herstellernummer'=>$value['herstellernummer'],
'freifeld1'=>$value['freifeld1'],
'freifeld2'=>$value['freifeld2'],
'freifeld3'=>$value['freifeld3'],
'freifeld4'=>$value['freifeld4'],
'freifeld5'=>$value['freifeld5'],
'freifeld6'=>$value['freifeld6'],
'freifeld7'=>$value['freifeld7'],
'freifeld8'=>$value['freifeld8'],
'freifeld9'=>$value['freifeld9'],
'freifeld10'=>$value['freifeld10'],
'freifeld11'=>$value['freifeld11'],
'freifeld12'=>$value['freifeld12'],
'freifeld13'=>$value['freifeld13'],
'freifeld14'=>$value['freifeld14'],
'freifeld15'=>$value['freifeld15'],
'freifeld16'=>$value['freifeld16'],
'freifeld17'=>$value['freifeld17'],
'freifeld18'=>$value['freifeld18'],
'freifeld19'=>$value['freifeld19'],
'freifeld20'=>$value['freifeld20'],
'freifeld21'=>$value['freifeld21'],
'freifeld22'=>$value['freifeld22'],
'freifeld23'=>$value['freifeld23'],
'freifeld24'=>$value['freifeld24'],
'freifeld25'=>$value['freifeld25'],
'freifeld26'=>$value['freifeld26'],
'freifeld27'=>$value['freifeld27'],
'freifeld28'=>$value['freifeld28'],
'freifeld29'=>$value['freifeld29'],
'freifeld30'=>$value['freifeld30'],
'freifeld31'=>$value['freifeld31'],
'freifeld32'=>$value['freifeld32'],
'freifeld33'=>$value['freifeld33'],
'freifeld34'=>$value['freifeld34'],
'freifeld35'=>$value['freifeld35'],
'freifeld36'=>$value['freifeld36'],
'freifeld37'=>$value['freifeld37'],
'freifeld38'=>$value['freifeld38'],
'freifeld39'=>$value['freifeld39'],
'freifeld40'=>$value['freifeld40'],
"name"=>$value['bezeichnunglieferant']
)
);
$netto_gesamt = $value['menge']*$value['preis'];
$summe += $netto_gesamt;
if(!isset($summen[$value['steuersatz']])) {
$summen[$value['steuersatz']] = 0;
}
$summen[$value['steuersatz']] += ($netto_gesamt/100)*$value['steuersatz'];
$gesamtsteuern +=($netto_gesamt/100)*$value['steuersatz'];
}
/*
$summe = $this->app->DB->Select("SELECT SUM(menge*preis) FROM bestellung_position WHERE bestellung='$id'");
$summeV = $this->app->DB->Select("SELECT SUM(menge*preis) FROM bestellung_position WHERE bestellung='$id' AND (umsatzsteuer='normal' || umsatzsteuer='') ")/100 * $this->app->erp->GetSteuersatzNormal(false,$id,"bestellung");
$summeR = $this->app->DB->Select("SELECT SUM(menge*preis) FROM bestellung_position WHERE bestellung='$id' AND umsatzsteuer='ermaessigt'")/100 * $this->app->erp->GetSteuersatzErmaessigt(false,$id,"bestellung");
*/
if($this->bestellungohnepreis!=1)
{
if($this->app->erp->BestellungMitUmsatzeuer($id))
{
$this->setTotals(
array('totalArticles'=>$summe,'total'=>$summe + $gesamtsteuern,'summen'=>$summen,'totalTaxV'=>0,'totalTaxR'=>0)
);
//$this->setTotals(array("totalArticles"=>$summe,"total"=>$summe + $summeV + $summeR,"totalTaxV"=>$summeV,"totalTaxR"=>$summeR));
} else{
$this->setTotals(array('totalArticles' => $summe, 'total' => $summe));
}
}
/* Dateiname */
//$tmp_name = str_replace([' ','.'],'', trim($this->recipient['enterprise']));
$this->filename = $datum2.'_BE'.$belegnr.'.pdf';
$this->setBarcode($belegnr);
}
}
<?php
if(!class_exists('BriefpapierCustom'))
{
class BriefpapierCustom extends Briefpapier
{
}
}
class BestellungPDF extends BriefpapierCustom {
public $doctype;
function __construct($app,$projekt="")
{
$this->app=$app;
//parent::Briefpapier();
$this->doctype="bestellung";
$this->doctypeOrig="Bestellung";
$this->bestellungohnepreis=0;
parent::__construct($this->app,$projekt);
}
function GetBestellung($id)
{
$this->doctypeid = $id;
$briefpapier_bearbeiter_ausblenden = $this->app->erp->Firmendaten('briefpapier_bearbeiter_ausblenden');
$this->setRecipientLieferadresse($id,"bestellung");
$data = $this->app->DB->SelectRow(
"SELECT adresse,projekt, sprache, angebot, ustid, keineartikelnummern, bestellbestaetigung, artikelnummerninfotext,
einkaeufer, belegnr, freitext, bodyzusatz, ohne_briefpapier, abweichendebezeichnung, bestellungohnepreis,
kundennummerlieferant AS kundennummer, DATE_FORMAT(datum,'%d.%m.%Y') AS datum, DATE_FORMAT(datum,'%Y%m%d') as datum2,
lieferantennummer
FROM bestellung
WHERE id='$id'
LIMIT 1"
);
extract($data,EXTR_OVERWRITE);
$adresse = $data['adresse'];
$sprache = $data['sprache'];
$angebot = $data['angebot'];
$ustid = $data['ustid'];
$projekt = $data['projekt'];
$keineartikelnummern = $data['keineartikelnummern'];
$bestellbestaetigung = $data['bestellbestaetigung'];
$artikelnummerninfotext = $data['artikelnummerninfotext'];
$einkaeufer = $data['einkaeufer'];
$belegnr = $data['belegnr'];
$freitext = $data['freitext'];
$bodyzusatz = $data['bodyzusatz'];
$ohne_briefpapier = $data['ohne_briefpapier'];
$abweichendebezeichnung = $data['abweichendebezeichnung'];
$bestellungohnepreis = $data['bestellungohnepreis'];
$kundennummer = $data['kundennummer'];
$datum = $data['datum'];
$datum2 = $data['datum2'];
$lieferantennummer = $data['lieferantennummer'];
$this->bestellungohnepreis=$data['bestellungohnepreis'];
if(empty($kundennummer)) {
$kundennummer = $this->app->DB->Select("SELECT kundennummerlieferant FROM adresse WHERE id='$adresse' LIMIT 1");
}
if($einkaeufer=='') {
$einkaeufer = $this->app->DB->Select("SELECT bearbeiter FROM bestellung WHERE id='$id' LIMIT 1");
}
if(empty($sprache)) {
$sprache = $this->app->DB->Select("SELECT sprache FROM adresse WHERE id='$adresse' LIMIT 1");
}
$kundennummer = $this->app->erp->ReadyForPDF($kundennummer);
$einkaeufer = $this->app->erp->ReadyForPDF($einkaeufer);
$angebot = $this->app->erp->ReadyForPDF($angebot);
$this->app->erp->BeschriftungSprache($sprache);
$this->sprache = $sprache;
$projektabkuerzung = $this->app->DB->Select(sprintf('SELECT abkuerzung FROM projekt WHERE id = %d', $projekt));
if($this->bestellungohnepreis) {
$this->nichtsichtbar_summe = 1;
}
if($ohne_briefpapier=='1') {
$this->logofile = '';
$this->briefpapier='';
$this->briefpapier2='';
}
if($belegnr=='' || $belegnr=='0') {
$belegnr = '- '.$this->app->erp->Beschriftung('dokument_entwurf');
}
$this->doctypeOrig=$this->app->erp->Beschriftung('dokument_bestellung')." $belegnr";
if($abweichendebezeichnung)
{
$this->doctypeOrig=($this->app->erp->Beschriftung('bezeichnungbestellungersatz')?$this->app->erp->Beschriftung('bezeichnungbestellungersatz'):$this->app->erp->Beschriftung('dokument_bestellung'))." $belegnr";
}
else {
$this->doctypeOrig=$this->app->erp->Beschriftung('dokument_bestellung')." $belegnr";
}
if($angebot=='') {
$angebot = '-';
}
if($kundennummer=='') {
$kundennummer= '-';
}
if(!$this->app->erp->BestellungMitUmsatzeuer($id)) {
$this->ust_befreit=true;
}
/** @var \Xentral\Modules\Company\Service\DocumentCustomizationService $service */
$service = $this->app->Container->get('DocumentCustomizationService');
if($block = $service->findActiveBlock('corr', 'suppliers_order', $projekt)) {
$sCD = $service->parseBlockAsArray($this->getLanguageCodeFrom($this->sprache),'corr', 'suppliers_order',[
'BESTELLNUMMER' => $belegnr,
'DATUM' => $datum,
'KUNDENNUMMER' => $kundennummer,
'EINKAEUFER' => $einkaeufer,
'LIEFERANTENNUMMER' => $lieferantennummer,
'PROJEKT' => $projektabkuerzung,
'EMAIL' => '',
'TELEFON' => '',
'BEARBEITER' => '',
'VERTRIEB' => '',
], $projekt);
if(!empty($sCD)) {
switch($block['fontstyle']) {
case 'f':
$this->setBoldCorrDetails($sCD);
break;
case 'i':
$this->setItalicCorrDetails($sCD);
break;
case 'fi':
$this->setItalicBoldCorrDetails($sCD);
break;
default:
$this->setCorrDetails($sCD, true);
break;
}
}
}
else{
if($briefpapier_bearbeiter_ausblenden){
$this->setCorrDetails(array($this->app->erp->Beschriftung("dokument_bestellung_angebotnummer") => $angebot,
$this->app->erp->Beschriftung("dokument_bestellung_unserekundennummer") => $kundennummer,
$this->app->erp->Beschriftung("dokument_bestelldatum") => $datum));
}else{
$this->setCorrDetails(array($this->app->erp->Beschriftung("dokument_bestellung_angebotnummer") => $angebot,
$this->app->erp->Beschriftung("dokument_bestellung_unserekundennummer") => $kundennummer,
$this->app->erp->Beschriftung("dokument_bestelldatum") => $datum,
$this->app->erp->Beschriftung("dokument_bestellung_einkauf") => $einkaeufer));
}
}
if(!$this->app->erp->BestellungMitUmsatzeuer($id) && $ustid!='' ) {
//$steuer = "\nSteuerfreie innergemeinschaftliche Lieferung. Ihre USt-IdNr. $ustid Land: $land";
$this->ust_befreit=true;
if($keinsteuersatz!='1') {
$steuer = $this->app->erp->Beschriftung('eu_lieferung_vermerk');
}
$steuer = str_replace('{USTID}',$ustid,$steuer);
$steuer = str_replace('{LAND}',$land,$steuer);
}
$body=$this->app->erp->Beschriftung('bestellung_header');
if($bodyzusatz!='') {
$body=$body."\r\n".$bodyzusatz;
}
$body = $this->app->erp->ParseUserVars('bestellung',$id,$body);
if($this->app->erp->Firmendaten('footer_reihenfolge_bestellung_aktivieren')=='1')
{
$footervorlage = $this->app->erp->Firmendaten('footer_reihenfolge_bestellung');
if($footervorlage==''){
$footervorlage = "{FOOTERFREITEXT}\r\n{FOOTERTEXTVORLAGEBESTELLUNG}";
}
$footervorlage = str_replace('{FOOTERFREITEXT}',$freitext,$footervorlage);
$footervorlage = str_replace('{FOOTERTEXTVORLAGEBESTELLUNG}',$this->app->erp->Beschriftung("bestellung_footer"),$footervorlage);
$footervorlage = $this->app->erp->ParseUserVars("bestellung",$id,$footervorlage);
$footer = $footervorlage;
} else {
$footer = $freitext."\r\n".$this->app->erp->ParseUserVars('bestellung',$id,$this->app->erp->Beschriftung("bestellung_footer"));
}
if($bestellbestaetigung) {
$this->setTextDetails(array(
"body"=>$body,
"footer"=>$footer."\r\n".$this->app->erp->Beschriftung('dokument_bestellung_bestaetigung')));
} else
{
$this->setTextDetails(array(
"body"=>$body,
"footer"=>$footer));
}
$artikel = $this->app->DB->SelectArr(
"SELECT bp.*, art.ean AS artean, art.nummer AS artnummer, art.herstellernummer AS artherstellernummer,
art.einheit as arteinheit, art.hersteller AS arthersteller
FROM bestellung_position AS bp
LEFT JOIN artikel AS art ON bp.artikel = art.id
WHERE bp.bestellung='$id'
ORDER By bp.sort"
);
if(empty($artikel)) {
$artikel = [];
}
$steuersatzV = $this->app->erp->GetSteuersatzNormal(false,$id,'bestellung');
$steuersatzR = $this->app->erp->GetSteuersatzErmaessigt(false,$id,'bestellung');
$gesamtsteuern = 0;
$mitumsatzsteuer = $this->app->erp->BestellungMitUmsatzeuer($id);
//$waehrung = $this->app->DB->Select("SELECT waehrung FROM bestellung_position WHERE bestellung='$id' LIMIT 1");
$summe = 0;
foreach($artikel as $key=>$value) {
$lieferdatum = $this->app->String->Convert($value['lieferdatum'],'%1-%2-%3','%3.%2.%1');
if($lieferdatum==='00.00.0000') {
$lieferdatum ='';
}//$this->app->erp->Beschriftung("dokument_lieferdatum_sofort");
if($value['umsatzsteuer'] !== 'ermaessigt' && $value['umsatzsteuer'] !== 'befreit') {
$value['umsatzsteuer'] = 'normal';
}
$tmpsteuersatz = null;
$tmpsteuertext = null;
$this->app->erp->GetSteuerPosition('bestellung', $value['id'],$tmpsteuersatz, $tmpsteuertext);
if($value['steuersatz'] === null || $value['steuersatz'] < 0) {
if($value['umsatzsteuer'] === 'ermaessigt') {
$value['steuersatz'] = $steuersatzR;
}
elseif($value['umsatzsteuer'] === 'befreit') {
$value['steuersatz'] = 0;
}else{
$value['steuersatz'] = $steuersatzV;
}
if($tmpsteuersatz !== null) {
$value['steuersatz'] = $tmpsteuersatz;
}
}
if($tmpsteuertext && !$value['steuertext']) {
$value['steuertext'] = $tmpsteuertext;
}
if(!$mitumsatzsteuer) {
$value['steuersatz'] = 0;
}
// if(!$this->app->erp->BestellungMitUmsatzeuer($id)) $value[umsatzsteuer] = "";
if($keineartikelnummern==1) {
$value['bestellnummer'] = $this->app->erp->Beschriftung('dokument_bestellung_keineartikelnummer');
}
$ohne_artikeltext = $this->app->DB->Select("SELECT ohne_artikeltext FROM ".$this->table." WHERE id='".$this->id."' LIMIT 1");
if($ohne_artikeltext=='1') {
$value['beschreibung']='';
}
$value['artikelnummer']= $value['artnummer'];// $this->app->DB->Select("SELECT nummer FROM artikel WHERE id='".$value['artikel']."' LIMIT 1");
if($artikelnummerninfotext) {
if($value['bestellnummer']!=''){
$value['beschreibung'] = $value['beschreibung'] . "\n" . $this->app->erp->Beschriftung('dokument_bestellung_bestellnummer') . ': ' . $value['bestellnummer'];
}
$value['bestellnummer']=$value['artikelnummer'];
} else {
if($value['artikelnummer']!=''){
$value['beschreibung'] = $value['beschreibung'] . "\n" . $this->app->erp->Beschriftung('dokument_bestellung_unsereartikelnummer') . ': ' . $value['artikelnummer'];
}
}
if($value['vpe'] > 1 && is_numeric($value['vpe'])) {
$value['beschreibung'] = $value['beschreibung']."\n".$this->app->erp->Beschriftung('dokument_bestellung_mengeinvpe').': '.$value['vpe'];
//umschalbar in der Zukunft
$value['preis'] = $value['preis']*$value['menge']/($value['menge'] / $value['vpe']);
$value['menge'] = round($value['menge'] / $value['vpe'],2);
$value['einheit'] = "VPE";
}
elseif((String)$value['einheit'] === '') {
$value['einheit'] = $value['arteinheit'];// $this->app->DB->Select("SELECT einheit FROM artikel WHERE id = '".$value['artikel']."' LIMIT 1");
if((String)$value['einheit'] === '') {
$value['einheit'] = $this->app->erp->Firmendaten('artikeleinheit_standard');
}
}
if($value['beschreibung']!='') {
$newline="\n";
}
if($this->bestellungohnepreis) {
$value['preis'] = null;
}
if($value['waehrung']!='' && $value['waehrung']!=$this->waehrung){
$this->waehrung = $value['waehrung'];
}
$value['menge'] = (float)$value['menge'];
$value['herstellernummer'] = $value['artherstellernummer'];// $this->app->DB->Select("SELECT herstellernummer FROM artikel WHERE id='".$value['artikel']."' LIMIT 1");
$value['hersteller'] = $value['arthersteller'];//$this->app->DB->Select("SELECT hersteller FROM artikel WHERE id='".$value['artikel']."' LIMIT 1");
$this->addItem(
array(
'belegposition'=>$value['id'],
'artikel'=>$value['artikel'],
'currency'=>$value['waehrung'],
'amount'=>$value['menge'],
'price'=>$value['preis'],
'tax'=>$value['umsatzsteuer'],'steuersatz'=>$value['steuersatz'],
'steuertext'=>$value['steuertext'],
'vpe'=>$value['vpe'],
'unit'=>$value['einheit'],
'itemno'=>$value['bestellnummer'],
'desc'=>$value['beschreibung'].($lieferdatum!=''?$newline.$this->app->erp->Beschriftung('dokument_lieferdatum').': '.$lieferdatum:''),
'hersteller'=>$value['hersteller'],
'herstellernummer'=>$value['herstellernummer'],
'freifeld1'=>$value['freifeld1'],
'freifeld2'=>$value['freifeld2'],
'freifeld3'=>$value['freifeld3'],
'freifeld4'=>$value['freifeld4'],
'freifeld5'=>$value['freifeld5'],
'freifeld6'=>$value['freifeld6'],
'freifeld7'=>$value['freifeld7'],
'freifeld8'=>$value['freifeld8'],
'freifeld9'=>$value['freifeld9'],
'freifeld10'=>$value['freifeld10'],
'freifeld11'=>$value['freifeld11'],
'freifeld12'=>$value['freifeld12'],
'freifeld13'=>$value['freifeld13'],
'freifeld14'=>$value['freifeld14'],
'freifeld15'=>$value['freifeld15'],
'freifeld16'=>$value['freifeld16'],
'freifeld17'=>$value['freifeld17'],
'freifeld18'=>$value['freifeld18'],
'freifeld19'=>$value['freifeld19'],
'freifeld20'=>$value['freifeld20'],
'freifeld21'=>$value['freifeld21'],
'freifeld22'=>$value['freifeld22'],
'freifeld23'=>$value['freifeld23'],
'freifeld24'=>$value['freifeld24'],
'freifeld25'=>$value['freifeld25'],
'freifeld26'=>$value['freifeld26'],
'freifeld27'=>$value['freifeld27'],
'freifeld28'=>$value['freifeld28'],
'freifeld29'=>$value['freifeld29'],
'freifeld30'=>$value['freifeld30'],
'freifeld31'=>$value['freifeld31'],
'freifeld32'=>$value['freifeld32'],
'freifeld33'=>$value['freifeld33'],
'freifeld34'=>$value['freifeld34'],
'freifeld35'=>$value['freifeld35'],
'freifeld36'=>$value['freifeld36'],
'freifeld37'=>$value['freifeld37'],
'freifeld38'=>$value['freifeld38'],
'freifeld39'=>$value['freifeld39'],
'freifeld40'=>$value['freifeld40'],
"name"=>$value['bezeichnunglieferant']
)
);
$netto_gesamt = $value['menge']*$value['preis'];
$summe += $netto_gesamt;
if(!isset($summen[$value['steuersatz']])) {
$summen[$value['steuersatz']] = 0;
}
$summen[$value['steuersatz']] += ($netto_gesamt/100)*$value['steuersatz'];
$gesamtsteuern +=($netto_gesamt/100)*$value['steuersatz'];
}
/*
$summe = $this->app->DB->Select("SELECT SUM(menge*preis) FROM bestellung_position WHERE bestellung='$id'");
$summeV = $this->app->DB->Select("SELECT SUM(menge*preis) FROM bestellung_position WHERE bestellung='$id' AND (umsatzsteuer='normal' || umsatzsteuer='') ")/100 * $this->app->erp->GetSteuersatzNormal(false,$id,"bestellung");
$summeR = $this->app->DB->Select("SELECT SUM(menge*preis) FROM bestellung_position WHERE bestellung='$id' AND umsatzsteuer='ermaessigt'")/100 * $this->app->erp->GetSteuersatzErmaessigt(false,$id,"bestellung");
*/
if($this->bestellungohnepreis!=1)
{
if($this->app->erp->BestellungMitUmsatzeuer($id))
{
$this->setTotals(
array('totalArticles'=>$summe,'total'=>$summe + $gesamtsteuern,'summen'=>$summen,'totalTaxV'=>0,'totalTaxR'=>0)
);
//$this->setTotals(array("totalArticles"=>$summe,"total"=>$summe + $summeV + $summeR,"totalTaxV"=>$summeV,"totalTaxR"=>$summeR));
} else{
$this->setTotals(array('totalArticles' => $summe, 'total' => $summe));
}
}
/* Dateiname */
//$tmp_name = str_replace([' ','.'],'', trim($this->recipient['enterprise']));
$this->filename = $datum2.'_BE'.$belegnr.'.pdf';
$this->setBarcode($belegnr);
}
}

View File

@ -658,7 +658,7 @@ class Briefpapier extends SuperFPDF {
public function addItem($rdata){
// add rabatt
if($rdata['price']!='-'){
if($rdata['price']!='-' && is_numeric($rdata['price'])){
if($rdata['rabatt'] == 100){
$rdata['tprice'] = round($rdata['amount'] * ((double)$rdata['price'] - (double)($rdata['price'] / 100.00 * (double)$rdata['rabatt'])), 13);
}else{
@ -1775,7 +1775,12 @@ class Briefpapier extends SuperFPDF {
$total=$totalFullTax=$totalReducedTax=0;
$citems = !empty($this->items)?count($this->items):0;
for($i=0;$i<$citems;$i++) {
$total += $this->items[$i]['tprice'];
if (!$this->items[$i]['optional']) {
$total += $this->items[$i]['tprice'];
} else {
$totalOptional += $this->items[$i]['tprice'];
}
if($this->items[$i]['tax']=="USTV") {
$totalFullTax+= $this->items[$i]['tprice']*USTV;
}
@ -1783,7 +1788,7 @@ class Briefpapier extends SuperFPDF {
$totalReducedTax+= $this->items[$i]['tprice']*USTR;
}
}
return array($total,$totalFullTax,$totalReducedTax);
return array($total,$totalFullTax,$totalReducedTax,$totalOptional);
}
function GetFont()
@ -2498,7 +2503,6 @@ class Briefpapier extends SuperFPDF {
}
public function renderItems() {
$this->app->erp->RunHook('briefpapier_renderitems',1, $this);
// if($this->bestellungohnepreis) $this->doctype="lieferschein";
$posWidth = $this->getStyleElement("breite_position");
@ -2942,7 +2946,6 @@ class Briefpapier extends SuperFPDF {
if($this->doctype!=='zahlungsavis')
{
if($item['tax']!=='hidden'){
if($anzeigeBelegNettoAdrese){
//if(($this->anrede=="firma" || $this->app->erp->AnzeigeBelegNetto($this->anrede,$projekt) || $this->doctype=="bestellung" || $this->getStyleElement("immernettorechnungen",$projekt)=="1")
//&& $this->getStyleElement("immerbruttorechnungen",$projekt)!="1")
@ -3068,16 +3071,18 @@ class Briefpapier extends SuperFPDF {
// && $this->getStyleElement("immerbruttorechnungen",$projekt)!="1")
{
if(!$inventurohnepreis){
$this->Cell_typed($priceWidth,$cellhoehe,$item['ohnepreis']?'':$this->formatMoney((double)$item['tprice']),0,0,'R');
// $this->Cell_typed($priceWidth,$cellhoehe,$item['ohnepreis']?'':$this->formatMoney((double)$item['tprice']),0,0,'R');
$price_displayed = $item['ohnepreis']?'':$this->formatMoney((double)$item['tprice']);
}
}
else{
if(!$inventurohnepreis){
$this->Cell_typed($priceWidth, $cellhoehe, $item['ohnepreis'] ? '' : $this->formatMoney((double)$item['tprice'] * $item['tmptax']), 0, 0, 'R');
// $this->Cell_typed($priceWidth, $cellhoehe, $item['ohnepreis'] ? '' : $this->formatMoney((double)$item['tprice'] * $item['tmptax']), 0, 0, 'R');
$price_displayed = $item['ohnepreis'] ? '' : $this->formatMoney((double)$item['tprice'] * $item['tmptax']);
}
}
$this->Cell_typed($rabattWidth,$cellhoehe,"",0,0,'R');
// $this->Cell_typed($rabattWidth,$cellhoehe,"",0,0,'R');
}
}
}
@ -3093,7 +3098,7 @@ class Briefpapier extends SuperFPDF {
$this->Cell_typed($priceWidth, $cellhoehe, $item['ohnepreis'] ? '' : $this->formatMoney((double)$item['price'] * $item['tmptax']), 0, 0, 'R');
}
}
}
}
//$this->Cell_typed($sumWidth,$cellhoehe,$this->formatMoney($item['tprice']).' '.$item['currency'],0,0,'R');
if($this->rabatt=='1')
{
@ -3107,12 +3112,14 @@ class Briefpapier extends SuperFPDF {
//if(($this->anrede=="firma" || $this->app->erp->AnzeigeBelegNetto($this->anrede,$projekt) || $this->doctype=="bestellung" || $this->getStyleElement("immernettorechnungen",$projekt)=="1")
// && $this->getStyleElement("immerbruttorechnungen",$projekt)!="1")
if(!$inventurohnepreis){
$this->Cell_typed($sumWidth, $cellhoehe, $item['ohnepreis'] ? '' : $this->formatMoney((double)$item['tprice']), 0, 0, 'R');
// $this->Cell_typed($sumWidth, $cellhoehe, $item['ohnepreis'] ? '' : $this->formatMoney((double)$item['tprice']), 0, 0, 'R');
$price_displayed = $item['ohnepreis'] ? '' : $this->formatMoney((double)$item['tprice']);
}
}
else{
if(!$inventurohnepreis){
$this->Cell_typed($sumWidth, $cellhoehe, $item['ohnepreis'] ? '' : $this->formatMoney((double)$item['tprice'] * $item['tmptax']), 0, 0, 'R');
// $this->Cell_typed($sumWidth, $cellhoehe, $item['ohnepreis'] ? '' : $this->formatMoney((double)$item['tprice'] * $item['tmptax']), 0, 0, 'R');
$price_displayed = $item['ohnepreis'] ? '' : $this->formatMoney((double)$item['tprice'] * $item['tmptax']);
}
}
}
@ -3121,18 +3128,29 @@ class Briefpapier extends SuperFPDF {
// if(($this->anrede=="firma" || $this->app->erp->AnzeigeBelegNetto($this->anrede,$projekt) || $this->doctype=="bestellung" || $this->getStyleElement("immernettorechnungen",$projekt)=="1")
// && $this->getStyleElement("immerbruttorechnungen",$projekt)!="1")
if(!$inventurohnepreis){
$this->Cell_typed($sumWidth, $cellhoehe, $item['ohnepreis'] ? '' : $this->formatMoney((double)$item['tprice']), 0, 0, 'R');
// $this->Cell_typed($sumWidth, $cellhoehe, $item['ohnepreis'] ? '' : $this->formatMoney((double)$item['tprice']), 0, 0, 'R');
$price_displayed = $item['ohnepreis'] ? '' : $this->formatMoney((double)$item['tprice']);
}
}
else{
if(!$inventurohnepreis){
$this->Cell_typed($sumWidth, $cellhoehe, $item['ohnepreis'] ? '' : $this->formatMoney((double)$item['tprice'] * $item['tmptax']), 0, 0, 'R');
// $this->Cell_typed($sumWidth, $cellhoehe, $item['ohnepreis'] ? '' : $this->formatMoney((double)$item['tprice'] * $item['tmptax']), 0, 0, 'R');
$price_displayed = $item['ohnepreis'] ? '' : $this->formatMoney((double)$item['tprice'] * $item['tmptax']);
}
}
}
}
}
// OpenXE add price here
if (!empty($price_displayed)) {
if ($item['optional']) {
$this->Cell_typed($sumWidth, $cellhoehe, "(".$price_displayed.")", 0, 0, 'R');
} else {
$this->Cell_typed($sumWidth, $cellhoehe, $price_displayed, 0, 0, 'R');
}
}
}
else if(($this->doctype==='lieferschein' || $this->doctype==='preisanfrage') && $this->getStyleElement('artikeleinheit')=='1')
{
@ -4030,7 +4048,11 @@ class Briefpapier extends SuperFPDF {
}
$this->SetX($x+$abstand_links);
$this->Cell_typed($descWidth,4,$this->WriteHTML($html));
$text = $this->WriteHTML($html);
$text = empty($text)?"":$text;
$this->Cell_typed($descWidth,4,);
$this->SetX($x+$abstand_links+$descWidth);
//$this->SetX($x);
@ -4275,7 +4297,7 @@ class Briefpapier extends SuperFPDF {
$this->Cell_typed(40,3,'',0,0,'R');
}
$this->Ln();
}
}
$this->SetY($this->GetY()+2);
//$this->Line(110, $this->GetY(), 190,$this->GetY());
}
@ -4316,6 +4338,16 @@ class Briefpapier extends SuperFPDF {
$this->Line($differenz_wegen_abstand+5, $this->GetY(), 210-$this->getStyleElement('abstand_seitenrandrechts'),$this->GetY());
$this->Line($differenz_wegen_abstand+5, $this->GetY()+1, 210-$this->getStyleElement('abstand_seitenrandrechts'),$this->GetY()+1);
}
if(isset($this->totals['optional'])) {
$this->SetFont($this->GetFont(),'',$this->getStyleElement('schriftgroesse_gesamt'));
$this->Ln(2);
$this->Cell_typed($differenz_wegen_abstand,1,'',0);
$this->Cell_typed(30,5,"(".$this->app->erp->Beschriftung('dokument_gesamt_optional'),0,0,'L');
$this->Cell_typed(40,5,$this->formatMoney(round($this->totals['optional'],2), 2).' '.$this->waehrung.")",0,0,'R');
$this->Ln();
}
$this->SetY($this->GetY()+10);
}

View File

@ -1,201 +1,202 @@
<?php
/*
**** COPYRIGHT & LICENSE NOTICE *** DO NOT REMOVE ****
*
* Xentral (c) Xentral ERP Sorftware GmbH, Fuggerstrasse 11, D-86150 Augsburg, * Germany 2019
*
* This file is licensed under the Embedded Projects General Public License *Version 3.1.
*
* You should have received a copy of this license from your vendor and/or *along with this file; If not, please visit www.wawision.de/Lizenzhinweis
* to obtain the text of the corresponding license version.
*
**** END OF COPYRIGHT & LICENSE NOTICE *** DO NOT REMOVE ****
/*
**** COPYRIGHT & LICENSE NOTICE *** DO NOT REMOVE ****
*
* Xentral (c) Xentral ERP Sorftware GmbH, Fuggerstrasse 11, D-86150 Augsburg, * Germany 2019
*
* This file is licensed under the Embedded Projects General Public License *Version 3.1.
*
* You should have received a copy of this license from your vendor and/or *along with this file; If not, please visit www.wawision.de/Lizenzhinweis
* to obtain the text of the corresponding license version.
*
**** END OF COPYRIGHT & LICENSE NOTICE *** DO NOT REMOVE ****
*/
?>
<?php
use Xentral\Components\Barcode\BarcodeFactory;
include_once "class.superfpdf.php";
class EtikettenPDF extends SuperFPDF {
function __construct($app,$projekt="") {
$this->app=$app;
$this->page_definded=false;
}
function SetXML($xml)
{
if(empty($xml))return;
$xml = str_replace('&','&amp;', $xml);
try {
$label = new SimpleXMLElement($xml);
} catch (Exception $e) {
return;
}
foreach($label as $key=>$items)
{
switch($key)
{
case "settings":
if(!$this->page_definded)
{
parent::__construct('P','mm',array(trim($items->attributes()->width),trim($items->attributes()->height)));
$this->page_definded = true;
}
$this->SetAutoPageBreak(false);
$this->SetFont('Arial','B',4);
$this->SetLeftMargin(0);
$this->SetMargins(0,0,0);
$this->AddPage();
break;
case "line":
$this->SetXY(trim($items->attributes()->x),$items->attributes()->y,$items[0]);
$this->SetFont('Arial','',$items->attributes()->size*2);
$this->MultiCell(0,$items->attributes()->size,$items[0],0,'L');
break;
case "rectangle":
$attributes = $items->attributes();
$borderwidth = 1;
if(isset($attributes->size))$borderwidth = $attributes->size;
$this->SetLineWidth($borderwidth / 10);
$this->Rect($items->attributes()->x, $items->attributes()->y,trim($items->attributes()->width),trim($items->attributes()->height),'B');
break;
case "image":
$filename = '';
if(isset($items->attributes()->src))
{
$src = str_replace('&amp;','&',$items->attributes()->src);
if(stripos($src,'http://') === false && stripos($src,'https://') === false)
{
$src = 'http://'.$src;
}
$content = file_get_contents($src);
if($content)
{
$filename = rtrim($this->app->erp->GetTMP(),'/').'/'.md5(microtime(true).$items[0]);
file_put_contents($filename.'1.jpg', $content);
$bildbreite = trim($items->attributes()->width);
$bildhoehe = trim($items->attributes()->height);
if(!class_exists('image'))include_once(__DIR__.'/../class.image.php');
$img = new image($this->app);
if($bildbreite > 0)
{
$breite = $bildbreite;
}else{
$breite = 30;
}
if($bildhoehe > 0)
{
$hoehe = $bildhoehe;
}else{
$hoehe = $breite;
}
$_breite = $breite;
$_hoehe = $hoehe;
list($width, $height) = getimagesize($filename.'1.jpg');
if($width > 0 && $height > 0)
{
$scalex = $breite / $width;
$scaley = $hoehe / $height;
if($scalex < $scaley)
{
$hoehe /= $scaley / $scalex;
$hoehe = ceil($hoehe);
}else{
$breite /= $scalex / $scaley;
$breite = ceil($breite);
}
$str = $content;
$manipulator = new ImageManipulator($str);
$manipulator->resample($_breite*10, $_hoehe*10, false,true, true);
$typ = IMAGETYPE_JPEG;
$manipulator->save($filename.'2.jpg', $typ);
$items[0] = $filename.'2.jpg';
}
}
}
$type = exif_imagetype ( trim($items[0]) );
switch($type)
{
case IMAGETYPE_GIF: $type="gif"; break;
case IMAGETYPE_JPEG: $type="jpg"; break;
case IMAGETYPE_PNG: $type="png"; break;
default: $type="";
}
if($type!="")
{
$this->Image(trim($items[0]),trim($items->attributes()->x),trim($items->attributes()->y),trim($items->attributes()->width),trim($items->attributes()->height),$type);
}
if($filename != '')
{
unlink($filename.'1.jpg');
unlink($filename.'2.jpg');
}
break;
case "barcode":
if((String)($items->attributes()->type)=="E30") {
$this->EAN13($items->attributes()->x,$items->attributes()->y, $items[0],$items->attributes()->size);
}
else if((String)($items->attributes()->type)=="Code128" || (String)($items->attributes()->type)=="1") {
$this->Code128($items->attributes()->x, $items->attributes()->y, $items[0], $items->attributes()->width, $items->attributes()->size);
}
else if((String)($items->attributes()->type)=="GS1-128" || (String)($items->attributes()->type)=="1") {
//$items[0] = "!FNC1!0104012345012345!FNC1!081231!FNC1!1012345";
$tmp =explode("!FNC1!",$items[0]);
$codewithfnc1 = implode(chr(206),$tmp);
//echo chr(206)."0104012345012345".chr(206)."081231".chr(206)."1012345";
//$this->Code128($items->attributes()->x, $items->attributes()->y, chr(206)."0104012345012345".chr(206)."081231".chr(206)."1012345", $items->attributes()->width, $items->attributes()->size); // 206 = FNC1
$this->Code128($items->attributes()->x, $items->attributes()->y, $codewithfnc1, $items->attributes()->width, $items->attributes()->size); // 206 = FNC1
//$this->Code128($items->attributes()->x, $items->attributes()->y, chr(206).$items[0], $items->attributes()->width, $items->attributes()->size); // 206 = FNC1
}
else { // standard auf 2 bzw default
$this->Code39($items->attributes()->x,$items->attributes()->y, $items[0], 0.5, $items->attributes()->size);//, $printText=false)
}
break;
case "qrcode":
/** @var BarcodeFactory $factory */
$factory = $this->app->Container->get('BarcodeFactory');
$ecLevel = 'M';
$type = 'png';
$filename = rtrim($this->app->erp->GetTMP(),'/').'/'.md5(microtime(true).$items[0]).'.' . $type;
$qrText = (string) $items[0];
$qrcode = $factory->createQrCode($qrText, $ecLevel);
$width = $items->attributes()->width ?? $items->attributes()->size;
$height = $items->attributes()->height ?? $items->attributes()->size;
$image = $qrcode->toPng(trim($width), trim($height));
if(file_put_contents($filename, $image) === false) {
throw new RuntimeException('qrcode image cannot be created. Perhaps due to missing write permission');
}
unset($image);
$this->Image(
trim($filename),
trim((int) $items->attributes()->x),
trim((int) $items->attributes()->y),
trim((int) $width),
trim((int) $height),
$type
);
unlink($filename);
break;
}
}
}
}
<?php
use Xentral\Components\Barcode\BarcodeFactory;
include_once "class.superfpdf.php";
class EtikettenPDF extends SuperFPDF {
function __construct($app,$projekt="") {
$this->app=$app;
$this->page_definded=false;
$this->images = array();
}
function SetXML($xml)
{
if(empty($xml))return;
$xml = str_replace('&','&amp;', $xml);
try {
$label = new SimpleXMLElement($xml);
} catch (Exception $e) {
return;
}
foreach($label as $key=>$items)
{
switch($key)
{
case "settings":
if(!$this->page_definded)
{
parent::__construct('P','mm',array(trim($items->attributes()->width),trim($items->attributes()->height)));
$this->page_definded = true;
}
$this->SetAutoPageBreak(false);
$this->SetFont('Arial','B',4);
$this->SetLeftMargin(0);
$this->SetMargins(0,0,0);
$this->AddPage();
break;
case "line":
$this->SetXY(trim($items->attributes()->x),$items->attributes()->y,$items[0]);
$this->SetFont('Arial','',$items->attributes()->size*2);
$this->MultiCell(0,$items->attributes()->size,$items[0],0,'L');
break;
case "rectangle":
$attributes = $items->attributes();
$borderwidth = 1;
if(isset($attributes->size))$borderwidth = $attributes->size;
$this->SetLineWidth($borderwidth / 10);
$this->Rect($items->attributes()->x, $items->attributes()->y,trim($items->attributes()->width),trim($items->attributes()->height),'B');
break;
case "image":
$filename = '';
if(isset($items->attributes()->src))
{
$src = str_replace('&amp;','&',$items->attributes()->src);
if(stripos($src,'http://') === false && stripos($src,'https://') === false)
{
$src = 'http://'.$src;
}
$content = file_get_contents($src);
if($content)
{
$filename = rtrim($this->app->erp->GetTMP(),'/').'/'.md5(microtime(true).$items[0]);
file_put_contents($filename.'1.jpg', $content);
$bildbreite = trim($items->attributes()->width);
$bildhoehe = trim($items->attributes()->height);
if(!class_exists('image'))include_once(__DIR__.'/../class.image.php');
$img = new image($this->app);
if($bildbreite > 0)
{
$breite = $bildbreite;
}else{
$breite = 30;
}
if($bildhoehe > 0)
{
$hoehe = $bildhoehe;
}else{
$hoehe = $breite;
}
$_breite = $breite;
$_hoehe = $hoehe;
list($width, $height) = getimagesize($filename.'1.jpg');
if($width > 0 && $height > 0)
{
$scalex = $breite / $width;
$scaley = $hoehe / $height;
if($scalex < $scaley)
{
$hoehe /= $scaley / $scalex;
$hoehe = ceil($hoehe);
}else{
$breite /= $scalex / $scaley;
$breite = ceil($breite);
}
$str = $content;
$manipulator = new ImageManipulator($str);
$manipulator->resample($_breite*10, $_hoehe*10, false,true, true);
$typ = IMAGETYPE_JPEG;
$manipulator->save($filename.'2.jpg', $typ);
$items[0] = $filename.'2.jpg';
}
}
}
$type = exif_imagetype ( trim($items[0]) );
switch($type)
{
case IMAGETYPE_GIF: $type="gif"; break;
case IMAGETYPE_JPEG: $type="jpg"; break;
case IMAGETYPE_PNG: $type="png"; break;
default: $type="";
}
if($type!="")
{
$this->Image(trim($items[0]),trim($items->attributes()->x),trim($items->attributes()->y),trim($items->attributes()->width),trim($items->attributes()->height),$type);
}
if($filename != '')
{
unlink($filename.'1.jpg');
unlink($filename.'2.jpg');
}
break;
case "barcode":
if((String)($items->attributes()->type)=="E30") {
$this->EAN13($items->attributes()->x,$items->attributes()->y, $items[0],$items->attributes()->size);
}
else if((String)($items->attributes()->type)=="Code128" || (String)($items->attributes()->type)=="1") {
$this->Code128($items->attributes()->x, $items->attributes()->y, $items[0], $items->attributes()->width, $items->attributes()->size);
}
else if((String)($items->attributes()->type)=="GS1-128" || (String)($items->attributes()->type)=="1") {
//$items[0] = "!FNC1!0104012345012345!FNC1!081231!FNC1!1012345";
$tmp =explode("!FNC1!",$items[0]);
$codewithfnc1 = implode(chr(206),$tmp);
//echo chr(206)."0104012345012345".chr(206)."081231".chr(206)."1012345";
//$this->Code128($items->attributes()->x, $items->attributes()->y, chr(206)."0104012345012345".chr(206)."081231".chr(206)."1012345", $items->attributes()->width, $items->attributes()->size); // 206 = FNC1
$this->Code128($items->attributes()->x, $items->attributes()->y, $codewithfnc1, $items->attributes()->width, $items->attributes()->size); // 206 = FNC1
//$this->Code128($items->attributes()->x, $items->attributes()->y, chr(206).$items[0], $items->attributes()->width, $items->attributes()->size); // 206 = FNC1
}
else { // standard auf 2 bzw default
$this->Code39($items->attributes()->x,$items->attributes()->y, $items[0], 0.5, $items->attributes()->size);//, $printText=false)
}
break;
case "qrcode":
/** @var BarcodeFactory $factory */
$factory = $this->app->Container->get('BarcodeFactory');
$ecLevel = 'M';
$type = 'png';
$filename = rtrim($this->app->erp->GetTMP(),'/').'/'.md5(microtime(true).$items[0]).'.' . $type;
$qrText = (string) $items[0];
$qrcode = $factory->createQrCode($qrText, $ecLevel);
$width = $items->attributes()->width ?? $items->attributes()->size;
$height = $items->attributes()->height ?? $items->attributes()->size;
$image = $qrcode->toPng(trim($width), trim($height));
if(file_put_contents($filename, $image) === false) {
throw new RuntimeException('qrcode image cannot be created. Perhaps due to missing write permission');
}
unset($image);
$this->Image(
trim($filename),
trim((int) $items->attributes()->x),
trim((int) $items->attributes()->y),
trim((int) $width),
trim((int) $height),
$type
);
unlink($filename);
break;
}
}
}
}

View File

@ -43,8 +43,13 @@ class GutschriftPDF extends BriefpapierCustom {
{
// pruefe ob es mehr als ein steuersatz gibt // wenn ja dann darf man sie nicht ausblenden
$check = $this->app->erp->SteuerAusBeleg($this->doctype,$id);
if(!empty($check)?count($check):0>1)$this->ust_spalteausblende=false;
else $this->ust_spalteausblende=true;
$this->ust_spalteausblende=false;
if(!empty($check)) {
if (count($check) == 1) {
$this->ust_spalteausblende=true;
}
}
}
$briefpapier_bearbeiter_ausblenden = $this->app->erp->Firmendaten('briefpapier_bearbeiter_ausblenden');

View File

@ -43,15 +43,20 @@ class RechnungPDF extends BriefpapierCustom {
parent::__construct($this->app,$projekt,$styleData);
}
public function GetRechnung($id,$als="",$doppeltmp=0, $_datum = null)
public function GetRechnung($id, $titel_abw="",$doppeltmp=0, $_datum = null, $text_abw = '')
{
$this->parameter = $als;
if($this->app->erp->Firmendaten("steuerspalteausblenden")=="1")
{
// pruefe ob es mehr als ein steuersatz gibt // wenn ja dann darf man sie nicht ausblenden
$check = $this->app->erp->SteuerAusBeleg($this->doctype,$id);
if(!empty($check)?count($check):0>1)$this->ust_spalteausblende=false;
else $this->ust_spalteausblende=true;
$this->ust_spalteausblende=false;
if(!empty($check)) {
if (count($check) == 1) {
$this->ust_spalteausblende=true;
}
}
}
$lvl = null;
$briefpapier_bearbeiter_ausblenden = $this->app->erp->Firmendaten('briefpapier_bearbeiter_ausblenden');
@ -124,10 +129,10 @@ class RechnungPDF extends BriefpapierCustom {
$lieferschein = $this->app->DB->Select("SELECT belegnr FROM lieferschein WHERE id='$lieferscheinid' LIMIT 1");
if(empty($als) || $als === 'doppel') {
/* if(empty($als) || $als === 'doppel') {
$rechnungsnummeranzeigen = false;
}
elseif(!empty($belegnr)){
else*/if(!empty($belegnr)){
$rechnungsnummeranzeigen = true;
}
$projektabkuerzung = $this->app->DB->Select(sprintf('SELECT abkuerzung FROM projekt WHERE id = %d', $projekt));
@ -172,7 +177,7 @@ class RechnungPDF extends BriefpapierCustom {
$zahlungsweisetext = $this->app->erp->Zahlungsweisetext("rechnung",$id);
if($doppel==1) $als = "doppel";
// if($doppel==1) $als = "doppel";
if($belegnr=="" || $belegnr=="0") $belegnr = "- ".$this->app->erp->Beschriftung("dokument_entwurf");
else {
@ -181,7 +186,7 @@ class RechnungPDF extends BriefpapierCustom {
}
$posanzeigen = true;
if($als=="zahlungserinnerung")
/* if($als=="zahlungserinnerung")
{
$this->doctypeOrig=$this->app->erp->Beschriftung("dokument_zahlungserinnerung")." ".(is_null($_datum)?$mahnwesen_datum:$_datum);
if($this->app->erp->GetKonfiguration("mahnwesen_ze_pos") === '0')$posanzeigen = false;
@ -207,14 +212,12 @@ class RechnungPDF extends BriefpapierCustom {
if($this->app->erp->GetKonfiguration("mahnwesen_inkasso_pos") === '0')$posanzeigen = false;
}
else
{
{*/
if($rechnungersatz)
$this->doctypeOrig=($this->app->erp->Beschriftung("bezeichnungrechnungersatz")?$this->app->erp->Beschriftung("bezeichnungrechnungersatz"):$this->app->erp->Beschriftung("dokument_rechnung"))." $belegnr";
else
$this->doctypeOrig=$this->app->erp->Beschriftung("dokument_rechnung")." $belegnr";
}
// }
$this->zusatzfooter = " (RE$belegnr)";
@ -407,12 +410,12 @@ class RechnungPDF extends BriefpapierCustom {
if($als!="" && $als!="doppel")
/* if($als!="" && $als!="doppel")
{
$body = $this->app->erp->MahnwesenBody($id,$als,$_datum);
$footer =$this->app->erp->ParseUserVars("rechnung",$id, $this->app->erp->Beschriftung("rechnung_footer"));
}
else {
else {*/
$body = $this->app->erp->Beschriftung("rechnung_header");
if($bodyzusatz!="") $body=$body."\r\n".$bodyzusatz;
$body = $this->app->erp->ParseUserVars("rechnung",$id,$body);
@ -442,6 +445,14 @@ class RechnungPDF extends BriefpapierCustom {
$footer = $versandinfo."$freitext"."\r\n".$this->app->erp->ParseUserVars("rechnung",$id,$this->app->erp->Beschriftung("rechnung_footer").
"\r\n$steuer\r\n$zahlungsweisetext").$systemfreitext;
}
// }
if ($titel_abw != '') {
$this->doctypeOrig = $titel_abw;
}
if ($text_abw != '') {
$body = $text_abw;
}
$this->setTextDetails(array(
@ -686,10 +697,10 @@ class RechnungPDF extends BriefpapierCustom {
$tmp_name = str_replace(' ','',trim($this->recipient['enterprise']));
$tmp_name = str_replace('.','',$tmp_name);
if($als=="" || $als=="doppel")
$this->filename = $datum2."_RE".$belegnr.".pdf";
if($titel_abw != "")
$this->filename = $datum2."_RE".$belegnr."_INFO.pdf";
else
$this->filename = $datum2."_MA".$belegnr.".pdf";
$this->filename = $datum2."_RE".$belegnr.".pdf";
$this->setBarcode($belegnr);
}

View File

@ -137,7 +137,7 @@ SPDX-License-Identifier: LicenseRef-EGPL-3.1
<h2>{|Paket|}</h2>
<table>
<tr>
<td>{|Gewicht (in kg)|}:</td>
<td>{|Gewicht (in kg)</b>|}:</td>
<td><input type="text" v-model.number="form.weight"></td>
</tr>
<tr>
@ -157,7 +157,7 @@ SPDX-License-Identifier: LicenseRef-EGPL-3.1
<td>
<select v-model="form.product" required>
<option v-for="prod in products" :value="prod.Id" v-if="productAvailable(prod)">{{prod.Name}}</option>
</select>
</select><i>F&uuml;r Produktwahl Gewicht eingeben!</i>
</td>
</tr>
<tr v-if="serviceAvailable('premium')">
@ -168,11 +168,11 @@ SPDX-License-Identifier: LicenseRef-EGPL-3.1
</div>
<div class="clearfix"></div>
<div class="col-md-12">
<h2>{|Bestellung|}</h2>
<h2>{|Sonstiges|}</h2>
<table>
<tbody>
<tr>
<td>{|Bestellnummer|}:</td>
<td>{|Referenzen|}:</td>
<td><input type="text" size="36" v-model="form.order_number"></td>
</tr>
<tr>
@ -300,4 +300,4 @@ SPDX-License-Identifier: LicenseRef-EGPL-3.1
}
}
})
</script>
</script>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,238 +1,244 @@
<?php
/*
**** COPYRIGHT & LICENSE NOTICE *** DO NOT REMOVE ****
*
* Xentral (c) Xentral ERP Sorftware GmbH, Fuggerstrasse 11, D-86150 Augsburg, * Germany 2019
*
* This file is licensed under the Embedded Projects General Public License *Version 3.1.
*
* You should have received a copy of this license from your vendor and/or *along with this file; If not, please visit www.wawision.de/Lizenzhinweis
* to obtain the text of the corresponding license version.
*
**** END OF COPYRIGHT & LICENSE NOTICE *** DO NOT REMOVE ****
/*
**** COPYRIGHT & LICENSE NOTICE *** DO NOT REMOVE ****
*
* Xentral (c) Xentral ERP Sorftware GmbH, Fuggerstrasse 11, D-86150 Augsburg, * Germany 2019
*
* This file is licensed under the Embedded Projects General Public License *Version 3.1.
*
* You should have received a copy of this license from your vendor and/or *along with this file; If not, please visit www.wawision.de/Lizenzhinweis
* to obtain the text of the corresponding license version.
*
**** END OF COPYRIGHT & LICENSE NOTICE *** DO NOT REMOVE ****
*/
?>
<?php
class ObjGenVerbindlichkeit_Position
{
private $id;
private $verbindlichkeit;
private $sort;
private $artikel;
private $projekt;
private $bestellung;
private $nummer;
private $bestellnummer;
private $waehrung;
private $einheit;
private $vpe;
private $bezeichnung;
private $umsatzsteuer;
private $status;
private $beschreibung;
private $lieferdatum;
private $steuersatz;
private $steuertext;
private $preis;
private $menge;
private $kostenstelle;
public $app; //application object
public function __construct($app)
{
$this->app = $app;
}
public function Select($id)
{
if(is_numeric($id))
$result = $this->app->DB->SelectArr("SELECT * FROM `verbindlichkeit_position` WHERE (`id` = '$id')");
else
return -1;
$result = $result[0];
$this->id=$result['id'];
$this->verbindlichkeit=$result['verbindlichkeit'];
$this->sort=$result['sort'];
$this->artikel=$result['artikel'];
$this->projekt=$result['projekt'];
$this->bestellung=$result['bestellung'];
$this->nummer=$result['nummer'];
$this->bestellnummer=$result['bestellnummer'];
$this->waehrung=$result['waehrung'];
$this->einheit=$result['einheit'];
$this->vpe=$result['vpe'];
$this->bezeichnung=$result['bezeichnung'];
$this->umsatzsteuer=$result['umsatzsteuer'];
$this->status=$result['status'];
$this->beschreibung=$result['beschreibung'];
$this->lieferdatum=$result['lieferdatum'];
$this->steuersatz=$result['steuersatz'];
$this->steuertext=$result['steuertext'];
$this->preis=$result['preis'];
$this->menge=$result['menge'];
$this->kostenstelle=$result['kostenstelle'];
}
public function Create()
{
$sql = "INSERT INTO `verbindlichkeit_position` (`id`,`verbindlichkeit`,`sort`,`artikel`,`projekt`,`bestellung`,`nummer`,`bestellnummer`,`waehrung`,`einheit`,`vpe`,`bezeichnung`,`umsatzsteuer`,`status`,`beschreibung`,`lieferdatum`,`steuersatz`,`steuertext`,`preis`,`menge`,`kostenstelle`)
VALUES(NULL,'{$this->verbindlichkeit}','{$this->sort}','{$this->artikel}','{$this->projekt}','{$this->bestellung}','{$this->nummer}','{$this->bestellnummer}','{$this->waehrung}','{$this->einheit}','{$this->vpe}','{$this->bezeichnung}','{$this->umsatzsteuer}','{$this->status}','{$this->beschreibung}','{$this->lieferdatum}','{$this->steuersatz}','{$this->steuertext}','{$this->preis}','{$this->menge}','{$this->kostenstelle}')";
$this->app->DB->Insert($sql);
$this->id = $this->app->DB->GetInsertID();
}
public function Update()
{
if(!is_numeric($this->id)) {
return -1;
}
$sql = "UPDATE `verbindlichkeit_position` SET
`verbindlichkeit`='{$this->verbindlichkeit}',
`sort`='{$this->sort}',
`artikel`='{$this->artikel}',
`projekt`='{$this->projekt}',
`bestellung`='{$this->bestellung}',
`nummer`='{$this->nummer}',
`bestellnummer`='{$this->bestellnummer}',
`waehrung`='{$this->waehrung}',
`einheit`='{$this->einheit}',
`vpe`='{$this->vpe}',
`bezeichnung`='{$this->bezeichnung}',
`umsatzsteuer`='{$this->umsatzsteuer}',
`status`='{$this->status}',
`beschreibung`='{$this->beschreibung}',
`lieferdatum`='{$this->lieferdatum}',
`steuersatz`='{$this->steuersatz}',
`steuertext`='{$this->steuertext}',
`preis`='{$this->preis}',
`menge`='{$this->menge}',
`kostenstelle`='{$this->kostenstelle}'
WHERE (`id`='{$this->id}')";
$this->app->DB->Update($sql);
}
public function Delete($id='')
{
if(is_numeric($id))
{
$this->id=$id;
}
else
return -1;
$sql = "DELETE FROM `verbindlichkeit_position` WHERE (`id`='{$this->id}')";
$this->app->DB->Delete($sql);
$this->id='';
$this->verbindlichkeit='';
$this->sort='';
$this->artikel='';
$this->projekt='';
$this->bestellung='';
$this->nummer='';
$this->bestellnummer='';
$this->waehrung='';
$this->einheit='';
$this->vpe='';
$this->bezeichnung='';
$this->umsatzsteuer='';
$this->status='';
$this->beschreibung='';
$this->lieferdatum='';
$this->steuersatz='';
$this->steuertext='';
$this->preis='';
$this->menge='';
$this->kostenstelle='';
}
public function Copy()
{
$this->id = '';
$this->Create();
}
/**
Mit dieser Funktion kann man einen Datensatz suchen
dafuer muss man die Attribute setzen nach denen gesucht werden soll
dann kriegt man als ergebnis den ersten Datensatz der auf die Suche uebereinstimmt
zurueck. Mit Next() kann man sich alle weiteren Ergebnisse abholen
**/
public function Find()
{
//TODO Suche mit den werten machen
}
public function FindNext()
{
//TODO Suche mit den alten werten fortsetzen machen
}
/** Funktionen um durch die Tabelle iterieren zu koennen */
public function Next()
{
//TODO: SQL Statement passt nach meiner Meinung nach noch nicht immer
}
public function First()
{
//TODO: SQL Statement passt nach meiner Meinung nach noch nicht immer
}
/** dank dieser funktionen kann man die tatsaechlichen werte einfach
ueberladen (in einem Objekt das mit seiner klasse ueber dieser steht)**/
public function SetId($value) { $this->id=$value; }
public function GetId() { return $this->id; }
public function SetVerbindlichkeit($value) { $this->verbindlichkeit=$value; }
public function GetVerbindlichkeit() { return $this->verbindlichkeit; }
public function SetSort($value) { $this->sort=$value; }
public function GetSort() { return $this->sort; }
public function SetArtikel($value) { $this->artikel=$value; }
public function GetArtikel() { return $this->artikel; }
public function SetProjekt($value) { $this->projekt=$value; }
public function GetProjekt() { return $this->projekt; }
public function SetBestellung($value) { $this->bestellung=$value; }
public function GetBestellung() { return $this->bestellung; }
public function SetNummer($value) { $this->nummer=$value; }
public function GetNummer() { return $this->nummer; }
public function SetBestellnummer($value) { $this->bestellnummer=$value; }
public function GetBestellnummer() { return $this->bestellnummer; }
public function SetWaehrung($value) { $this->waehrung=$value; }
public function GetWaehrung() { return $this->waehrung; }
public function SetEinheit($value) { $this->einheit=$value; }
public function GetEinheit() { return $this->einheit; }
public function SetVpe($value) { $this->vpe=$value; }
public function GetVpe() { return $this->vpe; }
public function SetBezeichnung($value) { $this->bezeichnung=$value; }
public function GetBezeichnung() { return $this->bezeichnung; }
public function SetUmsatzsteuer($value) { $this->umsatzsteuer=$value; }
public function GetUmsatzsteuer() { return $this->umsatzsteuer; }
public function SetStatus($value) { $this->status=$value; }
public function GetStatus() { return $this->status; }
public function SetBeschreibung($value) { $this->beschreibung=$value; }
public function GetBeschreibung() { return $this->beschreibung; }
public function SetLieferdatum($value) { $this->lieferdatum=$value; }
public function GetLieferdatum() { return $this->lieferdatum; }
public function SetSteuersatz($value) { $this->steuersatz=$value; }
public function GetSteuersatz() { return $this->steuersatz; }
public function SetSteuertext($value) { $this->steuertext=$value; }
public function GetSteuertext() { return $this->steuertext; }
public function SetPreis($value) { $this->preis=$value; }
public function GetPreis() { return $this->preis; }
public function SetMenge($value) { $this->menge=$value; }
public function GetMenge() { return $this->menge; }
public function SetKostenstelle($value) { $this->kostenstelle=$value; }
public function GetKostenstelle() { return $this->kostenstelle; }
}
<?php
class ObjGenVerbindlichkeit_Position
{
private $id;
private $verbindlichkeit;
private $sort;
private $artikel;
private $projekt;
private $bestellung;
private $nummer;
private $bestellnummer;
private $waehrung;
private $einheit;
private $vpe;
private $bezeichnung;
private $umsatzsteuer;
private $status;
private $beschreibung;
private $lieferdatum;
private $steuersatz;
private $steuertext;
private $preis;
private $menge;
private $kostenstelle;
private $sachkonto;
public $app; //application object
public function __construct($app)
{
$this->app = $app;
}
public function Select($id)
{
if(is_numeric($id))
$result = $this->app->DB->SelectArr("SELECT * FROM `verbindlichkeit_position` WHERE (`id` = '$id')");
else
return -1;
$result = $result[0];
$this->id=$result['id'];
$this->verbindlichkeit=$result['verbindlichkeit'];
$this->sort=$result['sort'];
$this->artikel=$result['artikel'];
$this->projekt=$result['projekt'];
$this->bestellung=$result['bestellung'];
$this->nummer=$result['nummer'];
$this->bestellnummer=$result['bestellnummer'];
$this->waehrung=$result['waehrung'];
$this->einheit=$result['einheit'];
$this->vpe=$result['vpe'];
$this->bezeichnung=$result['bezeichnung'];
$this->umsatzsteuer=$result['umsatzsteuer'];
$this->status=$result['status'];
$this->beschreibung=$result['beschreibung'];
$this->lieferdatum=$result['lieferdatum'];
$this->steuersatz=$result['steuersatz'];
$this->steuertext=$result['steuertext'];
$this->preis=$result['preis'];
$this->menge=$result['menge'];
$this->kostenstelle=$result['kostenstelle'];
$this->sachkonto=$result['sachkonto'];
}
public function Create()
{
$sql = "INSERT INTO `verbindlichkeit_position` (`id`,`verbindlichkeit`,`sort`,`artikel`,`projekt`,`bestellung`,`nummer`,`bestellnummer`,`waehrung`,`einheit`,`vpe`,`bezeichnung`,`umsatzsteuer`,`status`,`beschreibung`,`lieferdatum`,`steuersatz`,`steuertext`,`preis`,`menge`,`kostenstelle`)
VALUES(NULL,'{$this->verbindlichkeit}','{$this->sort}','{$this->artikel}','{$this->projekt}','{$this->bestellung}','{$this->nummer}','{$this->bestellnummer}','{$this->waehrung}','{$this->einheit}','{$this->vpe}','{$this->bezeichnung}','{$this->umsatzsteuer}','{$this->status}','{$this->beschreibung}','{$this->lieferdatum}','{$this->steuersatz}','{$this->steuertext}','{$this->preis}','{$this->menge}','{$this->kostenstelle}','{$this->sachkonto}')";
$this->app->DB->Insert($sql);
$this->id = $this->app->DB->GetInsertID();
}
public function Update()
{
if(!is_numeric($this->id)) {
return -1;
}
$sql = "UPDATE `verbindlichkeit_position` SET
`verbindlichkeit`='{$this->verbindlichkeit}',
`sort`='{$this->sort}',
`artikel`='{$this->artikel}',
`projekt`='{$this->projekt}',
`bestellung`='{$this->bestellung}',
`nummer`='{$this->nummer}',
`bestellnummer`='{$this->bestellnummer}',
`waehrung`='{$this->waehrung}',
`einheit`='{$this->einheit}',
`vpe`='{$this->vpe}',
`bezeichnung`='{$this->bezeichnung}',
`umsatzsteuer`='{$this->umsatzsteuer}',
`status`='{$this->status}',
`beschreibung`='{$this->beschreibung}',
`lieferdatum`='{$this->lieferdatum}',
`steuersatz`='{$this->steuersatz}',
`steuertext`='{$this->steuertext}',
`preis`='{$this->preis}',
`menge`='{$this->menge}',
`kostenstelle`='{$this->kostenstelle}',
`sachkonto`='{$this->sachkonto}'
WHERE (`id`='{$this->id}')";
$this->app->DB->Update($sql);
}
public function Delete($id='')
{
if(is_numeric($id))
{
$this->id=$id;
}
else
return -1;
$sql = "DELETE FROM `verbindlichkeit_position` WHERE (`id`='{$this->id}')";
$this->app->DB->Delete($sql);
$this->id='';
$this->verbindlichkeit='';
$this->sort='';
$this->artikel='';
$this->projekt='';
$this->bestellung='';
$this->nummer='';
$this->bestellnummer='';
$this->waehrung='';
$this->einheit='';
$this->vpe='';
$this->bezeichnung='';
$this->umsatzsteuer='';
$this->status='';
$this->beschreibung='';
$this->lieferdatum='';
$this->steuersatz='';
$this->steuertext='';
$this->preis='';
$this->menge='';
$this->kostenstelle='';
$this->sachkonto='';
}
public function Copy()
{
$this->id = '';
$this->Create();
}
/**
Mit dieser Funktion kann man einen Datensatz suchen
dafuer muss man die Attribute setzen nach denen gesucht werden soll
dann kriegt man als ergebnis den ersten Datensatz der auf die Suche uebereinstimmt
zurueck. Mit Next() kann man sich alle weiteren Ergebnisse abholen
**/
public function Find()
{
//TODO Suche mit den werten machen
}
public function FindNext()
{
//TODO Suche mit den alten werten fortsetzen machen
}
/** Funktionen um durch die Tabelle iterieren zu koennen */
public function Next()
{
//TODO: SQL Statement passt nach meiner Meinung nach noch nicht immer
}
public function First()
{
//TODO: SQL Statement passt nach meiner Meinung nach noch nicht immer
}
/** dank dieser funktionen kann man die tatsaechlichen werte einfach
ueberladen (in einem Objekt das mit seiner klasse ueber dieser steht)**/
public function SetId($value) { $this->id=$value; }
public function GetId() { return $this->id; }
public function SetVerbindlichkeit($value) { $this->verbindlichkeit=$value; }
public function GetVerbindlichkeit() { return $this->verbindlichkeit; }
public function SetSort($value) { $this->sort=$value; }
public function GetSort() { return $this->sort; }
public function SetArtikel($value) { $this->artikel=$value; }
public function GetArtikel() { return $this->artikel; }
public function SetProjekt($value) { $this->projekt=$value; }
public function GetProjekt() { return $this->projekt; }
public function SetBestellung($value) { $this->bestellung=$value; }
public function GetBestellung() { return $this->bestellung; }
public function SetNummer($value) { $this->nummer=$value; }
public function GetNummer() { return $this->nummer; }
public function SetBestellnummer($value) { $this->bestellnummer=$value; }
public function GetBestellnummer() { return $this->bestellnummer; }
public function SetWaehrung($value) { $this->waehrung=$value; }
public function GetWaehrung() { return $this->waehrung; }
public function SetEinheit($value) { $this->einheit=$value; }
public function GetEinheit() { return $this->einheit; }
public function SetVpe($value) { $this->vpe=$value; }
public function GetVpe() { return $this->vpe; }
public function SetBezeichnung($value) { $this->bezeichnung=$value; }
public function GetBezeichnung() { return $this->bezeichnung; }
public function SetUmsatzsteuer($value) { $this->umsatzsteuer=$value; }
public function GetUmsatzsteuer() { return $this->umsatzsteuer; }
public function SetStatus($value) { $this->status=$value; }
public function GetStatus() { return $this->status; }
public function SetBeschreibung($value) { $this->beschreibung=$value; }
public function GetBeschreibung() { return $this->beschreibung; }
public function SetLieferdatum($value) { $this->lieferdatum=$value; }
public function GetLieferdatum() { return $this->lieferdatum; }
public function SetSteuersatz($value) { $this->steuersatz=$value; }
public function GetSteuersatz() { return $this->steuersatz; }
public function SetSteuertext($value) { $this->steuertext=$value; }
public function GetSteuertext() { return $this->steuertext; }
public function SetPreis($value) { $this->preis=$value; }
public function GetPreis() { return $this->preis; }
public function SetMenge($value) { $this->menge=$value; }
public function GetMenge() { return $this->menge; }
public function SetKostenstelle($value) { $this->kostenstelle=$value; }
public function GetKostenstelle() { return $this->kostenstelle; }
public function SetSachkonto($value) { $this->sachkonto=$value; }
public function GetSachkonto() { return $this->sachkonto; }
}

View File

@ -1,59 +1,59 @@
<?php
/*
**** COPYRIGHT & LICENSE NOTICE *** DO NOT REMOVE ****
*
* Xentral (c) Xentral ERP Sorftware GmbH, Fuggerstrasse 11, D-86150 Augsburg, * Germany 2019
*
* This file is licensed under the Embedded Projects General Public License *Version 3.1.
*
* You should have received a copy of this license from your vendor and/or *along with this file; If not, please visit www.wawision.de/Lizenzhinweis
* to obtain the text of the corresponding license version.
*
**** END OF COPYRIGHT & LICENSE NOTICE *** DO NOT REMOVE ****
/*
**** COPYRIGHT & LICENSE NOTICE *** DO NOT REMOVE ****
*
* Xentral (c) Xentral ERP Sorftware GmbH, Fuggerstrasse 11, D-86150 Augsburg, * Germany 2019
*
* This file is licensed under the Embedded Projects General Public License *Version 3.1.
*
* You should have received a copy of this license from your vendor and/or *along with this file; If not, please visit www.wawision.de/Lizenzhinweis
* to obtain the text of the corresponding license version.
*
**** END OF COPYRIGHT & LICENSE NOTICE *** DO NOT REMOVE ****
*/
?>
<?php
class GenAdresse {
function __construct(&$app) {
$this->app=&$app;
$this->app->ActionHandlerInit($this);
$this->app->ActionHandler("create","AdresseCreate");
$this->app->ActionHandler("edit","AdresseEdit");
$this->app->ActionHandler("copy","AdresseCopy");
$this->app->ActionHandler("list","AdresseList");
$this->app->ActionHandler("delete","AdresseDelete");
$this->app->Tpl->Set("HEADING","Adresse"); //$this->app->ActionHandlerListen($app);
}
function AdresseCreate(){
$this->app->Tpl->Set("HEADING","Adresse (Anlegen)");
$this->app->PageBuilder->CreateGen("adresse_create.tpl");
}
function AdresseEdit(){
$this->app->Tpl->Set("HEADING","Adresse (Bearbeiten)");
$this->app->PageBuilder->CreateGen("adresse_edit.tpl");
}
function AdresseCopy(){
$this->app->Tpl->Set("HEADING","Adresse (Kopieren)");
$this->app->PageBuilder->CreateGen("adresse_copy.tpl");
}
function AdresseDelete(){
$this->app->Tpl->Set("HEADING","Adresse (L&ouml;schen)");
$this->app->PageBuilder->CreateGen("adresse_delete.tpl");
}
function AdresseList(){
$this->app->Tpl->Set("HEADING","Adresse (&Uuml;bersicht)");
$this->app->PageBuilder->CreateGen("adresse_list.tpl");
}
}
?>
<?php
class GenAdresse {
function __construct(&$app) {
$this->app=&$app;
$this->app->ActionHandlerInit($this);
$this->app->ActionHandler("create","AdresseCreate");
$this->app->ActionHandler("edit","AdresseEdit");
$this->app->ActionHandler("copy","AdresseCopy");
$this->app->ActionHandler("list","AdresseList");
$this->app->ActionHandler("delete","AdresseDelete");
$this->app->Tpl->Set("HEADING","Adresse"); //$this->app->ActionHandlerListen($app);
}
function AdresseCreate(){
$this->app->Tpl->Set("HEADING","Adresse (Anlegen)");
$this->app->PageBuilder->CreateGen("adresse_create.tpl");
}
function AdresseEdit(){
$this->app->Tpl->Set("HEADING","Adresse (Bearbeiten)");
$this->app->PageBuilder->CreateGen("adresse_edit.tpl");
}
function AdresseCopy(){
$this->app->Tpl->Set("HEADING","Adresse (Kopieren)");
$this->app->PageBuilder->CreateGen("adresse_copy.tpl");
}
function AdresseDelete(){
$this->app->Tpl->Set("HEADING","Adresse (L&ouml;schen)");
$this->app->PageBuilder->CreateGen("adresse_delete.tpl");
}
function AdresseList(){
$this->app->Tpl->Set("HEADING","Adresse (&Uuml;bersicht)");
$this->app->PageBuilder->CreateGen("adresse_list.tpl");
}
}
?>

View File

@ -2054,7 +2054,7 @@ $table_kontakte = '';
$ckontakte = !empty($kontakte)?count($kontakte):0;
for($i=0;$i<$ckontakte;$i++)
{
$tabindex = $tabindex+i;
$tabindex = $tabindex+$i;
$table_kontakte .= "<tr><td>".$kontakte[$i]['bezeichnung'].":&nbsp;
</td><td><input type=text name=\"adresse_kontakte[".$kontakte[$i]['id']."]\" value=\"".$kontakte[$i]['kontakt']."\" size=\"30\" tabindex=\"$tabindex\">&nbsp;<a href=\"#\" onclick=\"if(!confirm('".$kontakte[$i]['bezeichnung']." wirklich entfernen?')) return false; else window.location.href='index.php?module=adresse&action=delkontakt&id=".$id."&lid=".$kontakte[$i]['id']."';\">x</a></td></tr>";
}
@ -6417,7 +6417,7 @@ function AdresseVerein()
if(bearbeiter!="",bearbeiter,a2.name) as bearbeiter,
CONCAT(UCASE(LEFT(d.typ, 1)), SUBSTRING(d.typ, 2)) as art,
CONCAT(IF(d.sent = 1, "JA", "NEIN"),"<a data-type=dokumente data-id=", d.id, "></a>") as gesendet,
"" as pdf,
concat("<a href=\"index.php?module=dateien&action=send&id=",(SELECT datei FROM datei_stichwoerter WHERE subjekt="anhang" AND objekt="dokument" AND parameter = d.id LIMIT 1),"\"><img src=./themes/' . $this->app->Conf->WFconf['defaulttheme'] . '/images/pdf.svg></a>") as pdf,
concat("1","-",d.id) as did,
d.content as suchtext,
d.internebezeichnung

View File

@ -350,9 +350,9 @@ class Ajax {
$id = $this->app->Secure->GetPOST('id');
$objekt = $this->app->Secure->GetPOST('typ');
$parameter = $this->app->Secure->GetPOST('parameter');
if($objekt === 'adresse'){
$objekt = 'Adressen';
}
$module = strtolower($objekt);
$objekt = $this->app->YUI->dateien_module_objekt_map($objekt);
$data = $this->app->DB->SelectRow(
"SELECT d.*, s.subjekt
@ -363,12 +363,6 @@ class Ajax {
LIMIT 1"
);
$module = strtolower($objekt);
if($module === 'adressen'){
$module = 'adresse';
}
$typen = $this->app->erp->getDateiTypen($module);
$found = false;
foreach($typen as $typ) {
@ -431,10 +425,10 @@ class Ajax {
$titel = $this->app->Secure->GetPOST('titel');
$beschreibung = $this->app->Secure->GetPOST('beschreibung');
$subjekt = $this->app->Secure->GetPOST('subjekt');
if($objekt == 'adresse')
{
$objekt = 'Adressen';
}
$module = strtolower($objekt);
$objekt = $this->app->YUI->dateien_module_objekt_map($module);
$ersteller = $this->app->DB->real_escape_string($this->app->User->GetName());
$datei = $this->app->DB->SelectArr("SELECT d.id, s.id as sid FROM datei d LEFT JOIN datei_stichwoerter s ON d.id=s.datei LEFT JOIN datei_version v ON v.datei=d.id WHERE s.objekt LIKE '$objekt' AND s.parameter='$parameter' AND d.geloescht=0 AND d.id = '$id' LIMIT 1");
if($datei)
@ -654,6 +648,9 @@ class Ajax {
$cmd = trim($this->app->Secure->GetGET('cmd'));
$id = (int)$this->app->Secure->GetGET('id');
$module = strtolower($cmd);
$cmd = $this->app->YUI->dateien_module_objekt_map($cmd);
if(!empty($cmd) && $id
&& (!in_array($cmd, $cmds) || (in_array($cmd, $cmds) && $this->app->erp->RechteVorhanden($cmd,'dateien')))) {
$datei = $this->app->DB->SelectRow(
@ -661,7 +658,7 @@ class Ajax {
"SELECT dv.id, ds.parameter, dv.dateiname
FROM datei_version AS dv
INNER JOIN datei_stichwoerter ds ON ds.datei = dv.datei
WHERE dv.datei = %d AND (ds.objekt like '%s'".($cmd === 'adresse'?" OR ds.objekt like 'Adressen' ":'').")
WHERE dv.datei = %d AND (ds.objekt like '%s')
ORDER BY dv.datei DESC, dv.version DESC
LIMIT 1",
$id, $cmd
@ -677,6 +674,7 @@ class Ajax {
echo $str;
exit;
}
if(!empty($datei['parameter'])) {
if($cmd === 'projekt') {
if(!$this->app->erp->UserProjektRecht($datei['parameter'])) {
@ -694,7 +692,7 @@ class Ajax {
$projekt = $this->app->DB->Select(
sprintf(
'SELECT `projekt` FROM `%s` WHERE `id` = %d LIMIT 1',
$cmd, $datei[0]['parameter']
$module, $datei[0]['parameter']
)
);
if(!$this->app->erp->UserProjektRecht($projekt)) {
@ -710,8 +708,7 @@ class Ajax {
}
}
}
//Rechte prüfen
//Rechte prüfen
$userdata = isset($this->app->Conf->WFuserdata)
?$this->app->Conf->WFuserdata
:(str_replace('index.php', '', $_SERVER['SCRIPT_FILENAME']).'../userdata');
@ -749,34 +746,17 @@ class Ajax {
exit;
break;
case 'application/pdf':
$str = file_get_contents(dirname(__DIR__) . '/themes/new/images/pdf.svg');
$str = file_get_contents(dirname(__DIR__) . '/themes/new/images/pdf.png');
header('Content-type: image/png');
echo $str;
exit;
break;
default:
$str = file_get_contents(dirname(__DIR__) . '/themes/new/images/pdf.svg');
if(substr(strtolower($datei['dateiname']),-4) === '.gif'){
header('Content-type: image/gif');
echo $str;
exit;
}
if(substr(strtolower($datei['dateiname']),-4) === '.png'){
header('Content-type: image/png');
echo $str;
exit;
}
if(substr(strtolower($datei['dateiname']),-4) === '.jpg'
|| substr(strtolower($datei['dateiname']),-4) === 'jpeg'){
header('Content-type: image/jpg');
echo $str;
exit;
}
default:
break;
}
}
}
if(file_exists($cachefolder.'/'.$datei['id'].'_100_100')) {
$type = is_file($path.'/'.$datei['id'])? false : mime_content_type($path.'/'.$datei['id']);
if($type === false) {
@ -1597,11 +1577,17 @@ select a.kundennummer, (SELECT name FROM adresse a2 WHERE a2.kundennummer = a.ku
if($artikel_freitext1_suche)
{
$felder[] = 'art.freifeld1';
} else {
$artikel_freitext1_suche = 'true';
}
$subwhere = $this->AjaxFilterWhere($termorig,$felder);
$arr = $this->app->DB->SelectArr("SELECT CONCAT(art.nummer,' ',art.name_de) as name FROM artikel art
$subwhere = $this->AjaxFilterWhere($termorig,$felder);
$sql = "SELECT CONCAT(art.nummer,' ',art.name_de) as name FROM artikel art
INNER JOIN $doctype"."_position ap ON ap.artikel = art.id AND $doctype = '$doctypeid'
WHERE art.geloescht=0 AND ($artikel_freitext1_suche) AND art.geloescht=0 AND art.intern_gesperrt!=1 LIMIT 20");
WHERE
art.geloescht=0 AND ($artikel_freitext1_suche) AND art.geloescht=0 AND art.intern_gesperrt!=1 AND
(name_de LIKE '%$term%' OR art.nummer LIKE '%$term%')
LIMIT 20";
$arr = $this->app->DB->SelectArr($sql);
$carr = !empty($arr)?count($arr):0;
for($i = 0; $i < $carr; $i++) {
$newarr[] = $arr[$i]['name'];
@ -2072,6 +2058,20 @@ select a.kundennummer, (SELECT name FROM adresse a2 WHERE a2.kundennummer = a.ku
$newarr[] = $arr[$i]['name'];
break;
case "fibu_objekte":
$arr = $this->app->DB->SelectArr("SELECT CONCAT(".$this->app->erp->FormatUCfirst('typ').",'-',id,'-',info) as objekt FROM fibu_objekte WHERE info LIKE '%$term%' LIMIT 20");
$carr = !empty($arr)?count($arr):0;
for($i = 0; $i < $carr; $i++)
$newarr[] = $arr[$i]['objekt'];
break;
case "fibu_belege":
$arr = $this->app->DB->SelectArr("SELECT CONCAT(".$this->app->erp->FormatUCfirst('typ').",'-',id,'-',info) as objekt FROM fibu_objekte WHERE info LIKE '%$term%' AND typ IN ('auftrag','rechnung','gutschrift','verbindlichkeit') LIMIT 20");
$carr = !empty($arr)?count($arr):0;
for($i = 0; $i < $carr; $i++)
$newarr[] = $arr[$i]['objekt'];
break;
case "vpeartikel":
$arr = $this->app->DB->SelectArr("SELECT DISTINCT vpe FROM verkaufspreise WHERE geloescht=0 AND vpe LIKE '%$term%' ORDER by vpe");
$carr = !empty($arr)?count($arr):0;
@ -2362,7 +2362,14 @@ select a.kundennummer, (SELECT name FROM adresse a2 WHERE a2.kundennummer = a.ku
for($i = 0; $i < $carr; $i++)
$newarr[] = $arr[$i]['name'];
break;
case "sachkonto_aufwendungen":
$arr = $this->app->DB->SelectArr("SELECT CONCAT(sachkonto,' ',beschriftung) as name FROM kontorahmen
WHERE art = 1 AND (beschriftung LIKE '%$term%' OR sachkonto LIKE '%$term%' OR sachkonto LIKE '%$term2%' OR sachkonto LIKE '%$term3%' OR beschriftung LIKE '%$term2%' OR beschriftung LIKE '%$term3%') AND ausblenden!=1 $andprojekt ORDER by sachkonto");
$carr = !empty($arr)?count($arr):0;
for($i = 0; $i < $carr; $i++)
$newarr[] = $arr[$i]['name'];
break;
case "lieferbedingungen":
$arr = $this->app->DB->SelectArr("SELECT CONCAT(lieferbedingungen) as name FROM lieferbedingungen
WHERE (lieferbedingungen LIKE '%$term%' OR lieferbedingungen LIKE '%$term2%' OR lieferbedingungen LIKE '%$term3%') ORDER by lieferbedingungen");
@ -2441,6 +2448,7 @@ select a.kundennummer, (SELECT name FROM adresse a2 WHERE a2.kundennummer = a.ku
$subwhere = $this->AjaxFilterWhere($termorig,$felder);
$arr = $this->app->DB->SelectArr("SELECT CONCAT(nummer,' ',beschreibung) as name FROM kostenstellen WHERE $subwhere ORDER by nummer");
$carr = !empty($arr)?count($arr):0;
for($i = 0; $i < $carr; $i++)
$newarr[] = $arr[$i]['name'];
@ -2465,7 +2473,7 @@ select a.kundennummer, (SELECT name FROM adresse a2 WHERE a2.kundennummer = a.ku
$adresse = $this->app->DB->Select("SELECT id FROM adresse WHERE kundennummer = '".$kunde[0]."' AND kundennummer <> '' LIMIT 1");
}
$beleg = str_replace('kunden','',$filtername);
$arr = $this->app->DB->SelectArr("SELECT CONCAT(id,' ',if(belegnr <> '',belegnr,'ENTWURF'),' ',kundennummer,' ',name) as name FROM $beleg WHERE (belegnr LIKE '%$term%' OR name LIKE '%$term%' OR kundennummer LIKE '$%term%') AND (status = 'angelegt' OR status = 'freigegeben')
$arr = $this->app->DB->SelectArr("SELECT CONCAT(belegnr,' ',kundennummer,' ',name) as name FROM $beleg WHERE (belegnr <> '') AND (belegnr LIKE '%$term%' OR name LIKE '%$term%' OR kundennummer LIKE '$%term%') AND (status IN ('angelegt','freigegeben','versendet'))
".($adresse?" AND adresse = '$adresse' ":'')." ".$this->app->erp->ProjektRechte('projekt')."
ORDER by belegnr LIMIT 20");
$carr = !empty($arr)?count($arr):0;
@ -2481,7 +2489,7 @@ select a.kundennummer, (SELECT name FROM adresse a2 WHERE a2.kundennummer = a.ku
$adresse = $this->app->DB->Select("SELECT id FROM adresse WHERE lieferantennummer = '".$lieferant[0]."' AND lieferantennummer <> '' LIMIT 1");
}
$beleg = str_replace('lieferanten','',$filtername);
$arr = $this->app->DB->SelectArr("SELECT CONCAT(id,' ',if(belegnr <> '',belegnr,'ENTWURF'),' ',lieferantennummer,' ',name) as name FROM $beleg WHERE (belegnr LIKE '%$term%' OR name LIKE '%$term%' OR lieferantennummer LIKE '$%term%') AND (status = 'angelegt' OR status = 'freigegeben')
$arr = $this->app->DB->SelectArr("SELECT CONCAT(belegnr,' ',lieferantennummer,' ',name) as name FROM $beleg WHERE (belegnr <> '') AND (belegnr LIKE '%$term%' OR name LIKE '%$term%' OR lieferantennummer LIKE '$%term%') AND (status = 'versendet' OR status = 'freigegeben')
".($adresse?" AND adresse = '$adresse' ":'')." ".$this->app->erp->ProjektRechte('projekt')."
ORDER by belegnr LIMIT 20" );
$carr = !empty($arr)?count($arr):0;
@ -3824,10 +3832,13 @@ select a.kundennummer, (SELECT name FROM adresse a2 WHERE a2.kundennummer = a.ku
$term = str_replace(',','',$term);
}
$adresse = (int)$this->app->Secure->GetGET('adresse');
if (!empty($adresse)) {
$subwhere .= " AND a.id = ".$adresse;
}
$sql =
"SELECT CONCAT(v.id,
IF(IFNULL(v.belegnr, '') <> '' AND v.belegnr!=v.id,
CONCAT(' Nr. ',v.belegnr),''),
"SELECT CONCAT(v.belegnr,
' Betrag: ',".$this->app->erp->FormatPreis('v.betrag',2).",
if(v.skonto <> 0,CONCAT(' mit Skonto ',v.skonto,'% ',
".$this->app->erp->FormatPreis("v.betrag-((v.betrag/100.0)*v.skonto)",2)."),''),' ',
@ -3840,7 +3851,7 @@ select a.kundennummer, (SELECT name FROM adresse a2 WHERE a2.kundennummer = a.ku
a.name,' (Lieferant ',a.lieferantennummer,if(a.lieferantennummer_buchhaltung!='' AND a.lieferantennummer <> a.lieferantennummer_buchhaltung,CONCAT(' ',a.lieferantennummer_buchhaltung),''),') RE ',v.rechnung,' Rechnungsdatum ',DATE_FORMAT(v.rechnungsdatum,'%d.%m.%Y')) as bezeichnung
FROM verbindlichkeit AS v
LEFT JOIN adresse AS a ON a.id=v.adresse
WHERE ($subwhere) AND bezahlt!=1 AND status!='storniert'
WHERE ($subwhere) AND bezahlt!=1 AND status!='storniert' AND belegnr <> ''
ORDER by v.id DESC"; //AND v.status!='bezahlt' // heute wieder raus
$arr = $this->app->DB->SelectArr($sql);

View File

@ -307,21 +307,52 @@ class Angebot extends GenAngebot
{
$id = $this->app->Secure->GetGET('id');
if(!$this->app->DB->Select("SELECT deckungsbeitragcalc FROM angebot WHERE id='$id' LIMIT 1")) {
$this->app->erp->BerechneDeckungsbeitrag($id,'angebot');
// Deckungsbeitrag
if (!$this->app->erp->RechteVorhanden('angebot','einkaufspreise')) {
$this->app->Tpl->Set('DBHIDDEN','hidden');
} else {
$sql = "
SELECT
umsatz_netto_gesamt,
artikel,
menge,
einkaufspreis
FROM
`angebot_position`
WHERE
`angebot` = ".$id."
";
$positionen = $this->app->DB->SelectArr($sql);
$umsatz_gesamt = 0;
$kosten_gesamt = 0;
$db_gesamt = 0;
foreach ($positionen as $position) {
if (empty($position['einkaufspreis'])) {
$position['einkaufspreis'] = $this->app->erp->GetEinkaufspreis($position['artikel'],$position['menge']);
}
$kosten = ($position['einkaufspreis']*$position['menge']);
$db_gesamt += $position['umsatz_netto_gesamt']-$kosten;
$kosten_gesamt += $kosten;
$umsatz_gesamt += $position['umsatz_netto_gesamt'];
}
$this->app->Tpl->Set('NETTOGESAMT',$this->app->erp->number_format_variable($umsatz_gesamt,2));
$this->app->Tpl->Set('KOSTEN',$this->app->erp->number_format_variable($kosten_gesamt,2));
$this->app->Tpl->Set('DECKUNGSBEITRAG',$this->app->erp->number_format_variable($db_gesamt,2));
$this->app->Tpl->Set( 'DBPROZENT',
$umsatz_gesamt==0?
"-":
$this->app->erp->number_format_variable(
round(
$db_gesamt/$umsatz_gesamt*100,2
)
)."%"
);
}
$auftragArr = $this->app->DB->SelectArr("SELECT * FROM angebot WHERE id='$id' LIMIT 1");
$kundennummer = $this->app->DB->Select("SELECT kundennummer FROM adresse WHERE id='{$auftragArr[0]['adresse']}' LIMIT 1");
$projekt = $this->app->DB->Select("SELECT abkuerzung FROM projekt WHERE id='{$auftragArr[0]['projekt']}' LIMIT 1");
$kundenname = $this->app->DB->Select("SELECT name FROM adresse WHERE id='{$auftragArr[0]['adresse']}' LIMIT 1");
$this->app->Tpl->Set('KUNDE',"<a href=\"index.php?module=adresse&action=edit&id=".$auftragArr[0]['adresse']."\" target=\"_blank\">".$kundennummer."</a> ".$kundenname);
//$this->app->Tpl->Set('KUNDE',$kundennummer." ".$kundenname);
$this->app->Tpl->Set('DECKUNGSBEITRAG',0);
$this->app->Tpl->Set('DBPROZENT',0);
if($this->app->erp->RechteVorhanden('projekt','dashboard')){
$this->app->Tpl->Set('PROJEKT', "<a href=\"index.php?module=projekt&action=dashboard&id=" . $auftragArr[0]['projekt'] . "\" target=\"_blank\">$projekt</a>");
}
@ -1694,6 +1725,11 @@ class Angebot extends GenAngebot
$this->app->erp->AnsprechpartnerAlsLieferadresseButton($adresse);
$this->app->erp->AdresseAlsLieferadresseButton($adresse);
}
if ($schreibschutz != 1 AND $status != 'abgeschlossen') {
$this->app->erp->BerechneDeckungsbeitrag($id,'angebot');
}
if($nummer!="")
{

File diff suppressed because it is too large Load Diff

View File

@ -1,298 +1,304 @@
<?php
/*
**** COPYRIGHT & LICENSE NOTICE *** DO NOT REMOVE ****
*
* Xentral (c) Xentral ERP Sorftware GmbH, Fuggerstrasse 11, D-86150 Augsburg, * Germany 2019
*
* This file is licensed under the Embedded Projects General Public License *Version 3.1.
*
* You should have received a copy of this license from your vendor and/or *along with this file; If not, please visit www.wawision.de/Lizenzhinweis
* to obtain the text of the corresponding license version.
*
**** END OF COPYRIGHT & LICENSE NOTICE *** DO NOT REMOVE ****
/*
**** COPYRIGHT & LICENSE NOTICE *** DO NOT REMOVE ****
*
* Xentral (c) Xentral ERP Sorftware GmbH, Fuggerstrasse 11, D-86150 Augsburg, * Germany 2019
*
* This file is licensed under the Embedded Projects General Public License *Version 3.1.
*
* You should have received a copy of this license from your vendor and/or *along with this file; If not, please visit www.wawision.de/Lizenzhinweis
* to obtain the text of the corresponding license version.
*
**** END OF COPYRIGHT & LICENSE NOTICE *** DO NOT REMOVE ****
*/
?>
<?php
use Xentral\Components\Http\JsonResponse;
class Api_account
{
/** @var Application $app */
protected $app;
const MODULE_NAME = 'ApiAccount';
/** @var string[] $javascript */
public $javascript = [
'./classes/Modules/ApiAccount/www/js/api_account.js',
];
/**
* @param Application $app
* @param string $name
* @param array $erlaubtevars
*
* @return array
*/
public static function TableSearch($app, $name, $erlaubtevars)
{
switch($name)
{
case 'api_account_list':
$allowed['api_account'] = array('list');
$heading = array('API Account ID', 'Bezeichnung', 'Aktiv', 'Men&uuml;');
$width = array('10%', '79%', '10%', '1%');
$findcols = array('aa.id', 'bezeichnung', "if(aktiv = 1, 'ja','nein')", 'id');
$searchsql = array('bezeichnung');
$defaultorder = 1; //Optional wenn andere Reihenfolge gewuenscht
$defaultorderdesc = 1;
$menucol = 3;
$menu = "<table cellpadding=0 cellspacing=0><tr><td nowrap><a data-id=\"%value%\" class=\"get\" href=\"#\"><img src=\"themes/{$app->Conf->WFconf['defaulttheme']}/images/edit.svg\" border=\"0\"></a></td></tr></table>";
$sql = "SELECT aa.id, aa.id, aa.bezeichnung,
if(aa.aktiv = 1, 'ja','nein') as aktiv,
aa.id
FROM `api_account` AS `aa`
";
$fastcount = "SELECT COUNT(`aa`.`id`) FROM `api_account` AS `aa`";
break;
}
$erg = [];
foreach($erlaubtevars as $k => $v) {
if(isset($$v)) {
$erg[$v] = $$v;
}
}
return $erg;
}
/**
* Api_account constructor.
*
* @param Application $app
* @param bool $intern
*/
public function __construct($app, $intern = false)
{
$this->app=$app;
if($intern) {
return;
}
$this->app->ActionHandlerInit($this);
$this->app->ActionHandler("create","Api_AccountCreate");
$this->app->ActionHandler("edit","Api_AccountEdit");
$this->app->ActionHandler("list","Api_AccountList");
$this->app->ActionHandler("delete","Api_AccountDelete");
$this->app->DefaultActionHandler('list');
$this->app->ActionHandlerListen($app);
}
function Api_AccountCreate(){
}
function Api_AccountEdit(){
}
public function Api_AccountDelete(){
$id = $this->app->Secure->GetGET('id');
$this->app->DB->Delete(sprintf('DELETE FROM `api_account` WHERE `id` = %d', $id));
$this->app->Location->execute('index.php?module=api_account&action=list');
}
/**
* @return JsonResponse
*/
public function HandleGetAjaxAction()
{
$id = (int)$this->app->Secure->GetPOST('id');
if($id === 0) {
$data = [
'aktiv' => 0,
'id' => '',
'bezeichnung' => '',
'projekt' => '',
'remotedomain' => '',
'initkey' => '',
'importwarteschlange' => 0,
'importwarteschlange_name' => '',
'event_url' => '',
'cleanutf8' => 0,
'apitempkey' => '',
'ishtmltransformation' => 0,
];
return new JsonResponse($data);
}
if($id > 0) {
$data = $this->app->DB->SelectRow(
sprintf(
"SELECT a.id, a.bezeichnung, a.aktiv, p.abkuerzung AS `projekt`, a.remotedomain, a.initkey,
a.importwarteschlange, a.importwarteschlange_name, a.cleanutf8, a.event_url, a.permissions, a.ishtmltransformation
FROM `api_account` AS `a`
LEFT JOIN `projekt` AS `p` ON a.projekt = p.id
WHERE a.id = %d",
$id
)
);
/** @var Api $api */
$api = $this->app->loadModule('api');
$data['apitempkey'] = $api->generateHashFromDomainAndKey($data['initkey'], $data['remotedomain']);
if(!empty($data)) {
return new JsonResponse($data);
}
}
return new JsonResponse(['error'=>'Account nicht gefunden'], JsonResponse::HTTP_BAD_REQUEST);
}
/**
* @return JsonResponse
*/
public function HandleSaveAjaxAction()
{
if(!$this->app->erp->RechteVorhanden('api_account', 'edit')) {
return new JsonResponse(['error'=>'Fehlende Rechte'], JsonResponse::HTTP_BAD_REQUEST);
}
$id = (int)$this->app->Secure->GetPOST('id');
$bezeichnung = $this->app->Secure->GetPOST('bezeichnung');
if(empty($bezeichnung)) {
return new JsonResponse(['error'=>'Bitte füllen Sie die Bezeichnung aus'], JsonResponse::HTTP_BAD_REQUEST);
}
$projekt = (string)$this->app->Secure->GetPOST('projekt');
if($projekt !== ''){
$projekt = (int)$this->app->erp->ReplaceProjekt(1, $projekt, 1);
}
else {
$projekt = 0;
}
$aktiv = (int)(bool)$this->app->Secure->GetPOST('aktiv');
$importwarteschlange = (int)(bool)$this->app->Secure->GetPOST('importwarteschlange');
$cleanutf8 = (int)(bool)$this->app->Secure->GetPOST('cleanutf8');
$remotedomain = $this->app->Secure->GetPOST('remotedomain');
$initkey = $this->app->Secure->GetPOST('initkey');
$importwarteschlange_name = $this->app->Secure->GetPOST('importwarteschlange_name');
$event_url = $this->app->Secure->GetPOST('event_url');
$isHtmlTransformation = (int)(bool)$this->app->Secure->GetPOST('ishtmltransformation');
$api_permissions = $this->prepareApiPermissions($this->app->Secure->GetPOST('api_permissions'));
if($id <= 0) {
$this->app->DB->Insert(
sprintf(
"INSERT INTO `api_account`
(`bezeichnung`, `initkey`, `importwarteschlange_name`, `event_url`, `remotedomain`, `aktiv`,
`importwarteschlange`, `cleanutf8`, `uebertragung_account`, `projekt`, `permissions`, `ishtmltransformation`)
VALUES ('%s', '%s', '%s', '%s', '%s', %d,
%d, %d, 0, %d, '%s', %d) ",
$bezeichnung, $initkey, $importwarteschlange_name, $event_url, $remotedomain, $aktiv,
$importwarteschlange, $cleanutf8, $projekt, $api_permissions, $isHtmlTransformation
)
);
$id = (int)$this->app->DB->GetInsertID();
if($id){
$data = ['success' => true, 'id' => $id];
return new JsonResponse($data);
}
return new JsonResponse(['error'=>'Account konnte nicht erstellt werden'], JsonResponse::HTTP_BAD_REQUEST);
}
$data = $this->app->DB->SelectRow(
sprintf(
"SELECT a.id, a.bezeichnung, a.aktiv, p.abkuerzung AS `projekt`, a.remotedomain, a.initkey,
a.importwarteschlange, a.importwarteschlange_name, a.cleanutf8, a.event_url, a.permissions, a.ishtmltransformation
FROM `api_account` AS `a`
LEFT JOIN `projekt` AS `p` ON a.projekt = p.id
WHERE a.id = %d",
$id
)
);
if(empty($data)) {
return new JsonResponse(['error'=>'Account nicht gefunden'], JsonResponse::HTTP_BAD_REQUEST);
}
$this->app->DB->Update(
sprintf(
"UPDATE `api_account`
SET `bezeichnung` = '%s',
`initkey` = '%s',
`importwarteschlange_name` = '%s',
`event_url` = '%s',
`remotedomain` = '%s',
`aktiv` = %d,
`importwarteschlange` = %d,
`cleanutf8` = %d,
`uebertragung_account` = 0,
`projekt` = %d ,
`permissions` = '%s',
`ishtmltransformation` = %d
WHERE `id` = %d",
$bezeichnung, $initkey, $importwarteschlange_name, $event_url, $remotedomain, $aktiv,
$importwarteschlange, $cleanutf8, $projekt, $api_permissions, $isHtmlTransformation, $id
)
);
if(empty($this->app->DB->error())) {
$data = ['success' => true, 'id' => $id];
return new JsonResponse($data);
}
return new JsonResponse(['error'=>'Account konnte nicht geändert werden'], JsonResponse::HTTP_BAD_REQUEST);
}
private function prepareApiPermissions(array $apiPermissions){
$cleanedPermissions = [];
foreach ($apiPermissions as $permission => $value){
if($value === 'true'){
$cleanedPermissions[] = $permission;
}
}
return json_encode($cleanedPermissions);
}
public function Api_AccountList(){
$cmd = $this->app->Secure->GetGET('cmd');
if($cmd === 'get') {
return $this->HandleGetAjaxAction();
}
if($cmd === 'save') {
return $this->HandleSaveAjaxAction();
}
$apiPermissions = $this->app->DB->SelectArr("SELECT * FROM `api_permission`");
$groupedApiPermissions = [];
foreach ($apiPermissions as $apiPermission){
$groupedApiPermissions[$apiPermission['group']][] =$apiPermission;
}
$apiPermissionsHtml = '';
foreach ($groupedApiPermissions as $group => $permissions) {
$apiPermissionsHtml .= '<tr>';
$apiPermissionsHtml .= "<td>{$group}</td>";
$apiPermissionsHtml .= "<td>";
foreach ($permissions as $permission){
$apiPermissionsHtml .= "<label for='{$permission['key']}'>";
$apiPermissionsHtml .= "<input class='permission-checkbox' type='checkbox' name='{$permission['key']}'>";
$apiPermissionsHtml .= "&nbsp;&nbsp;{$permission['key']}</label>";
$apiPermissionsHtml .= "<br>";
}
$apiPermissionsHtml .= "</td>";
$apiPermissionsHtml .= '</tr>';
}
$this->app->YUI->TableSearch('TAB1','api_account_list', 'show','','',basename(__FILE__), __CLASS__);
$this->app->erp->MenuEintrag('#', 'Neu');
$this->app->erp->MenuEintrag('index.php?module=api_account&action=list', '&Uuml;bersicht');
$this->app->erp->Headlines('API Account');
$this->app->Tpl->Set('API_PERMISSIONS_HTML', $apiPermissionsHtml);
$this->app->YUI->Autocomplete('projekt', 'projektname', 1);
$this->app->Tpl->Parse('PAGE','api_account_list.tpl');
}
}
<?php
use Xentral\Components\Http\JsonResponse;
class Api_account
{
/** @var Application $app */
protected $app;
const MODULE_NAME = 'ApiAccount';
/** @var string[] $javascript */
public $javascript = [
'./classes/Modules/ApiAccount/www/js/api_account.js',
];
/**
* @param Application $app
* @param string $name
* @param array $erlaubtevars
*
* @return array
*/
public static function TableSearch($app, $name, $erlaubtevars)
{
switch($name)
{
case 'api_account_list':
$allowed['api_account'] = array('list');
$heading = array('API Account ID', 'Bezeichnung', 'Aktiv', 'Men&uuml;');
$width = array('10%', '79%', '10%', '1%');
$findcols = array('aa.id', 'bezeichnung', "if(aktiv = 1, 'ja','nein')", 'id');
$searchsql = array('bezeichnung');
$defaultorder = 1; //Optional wenn andere Reihenfolge gewuenscht
$defaultorderdesc = 1;
$menucol = 3;
$menu = "<table cellpadding=0 cellspacing=0><tr><td nowrap><a data-id=\"%value%\" class=\"get\" href=\"#\"><img src=\"themes/{$app->Conf->WFconf['defaulttheme']}/images/edit.svg\" border=\"0\"></a></td></tr></table>";
$sql = "SELECT aa.id, aa.id, aa.bezeichnung,
if(aa.aktiv = 1, 'ja','nein') as aktiv,
aa.id
FROM `api_account` AS `aa`
";
$fastcount = "SELECT COUNT(`aa`.`id`) FROM `api_account` AS `aa`";
break;
}
$erg = [];
foreach($erlaubtevars as $k => $v) {
if(isset($$v)) {
$erg[$v] = $$v;
}
}
return $erg;
}
/**
* Api_account constructor.
*
* @param Application $app
* @param bool $intern
*/
public function __construct($app, $intern = false)
{
$this->app=$app;
if($intern) {
return;
}
$this->app->ActionHandlerInit($this);
$this->app->ActionHandler("create","Api_AccountCreate");
$this->app->ActionHandler("edit","Api_AccountEdit");
$this->app->ActionHandler("list","Api_AccountList");
$this->app->ActionHandler("delete","Api_AccountDelete");
$this->app->DefaultActionHandler('list');
$this->app->ActionHandlerListen($app);
}
function Api_AccountCreate(){
}
function Api_AccountEdit(){
}
public function Api_AccountDelete(){
$id = $this->app->Secure->GetGET('id');
$this->app->DB->Delete(sprintf('DELETE FROM `api_account` WHERE `id` = %d', $id));
$this->app->Location->execute('index.php?module=api_account&action=list');
}
/**
* @return JsonResponse
*/
public function HandleGetAjaxAction()
{
$id = (int)$this->app->Secure->GetPOST('id');
if($id === 0) {
$data = [
'aktiv' => 0,
'id' => '',
'bezeichnung' => '',
'projekt' => '',
'remotedomain' => '',
'initkey' => '',
'importwarteschlange' => 0,
'importwarteschlange_name' => '',
'event_url' => '',
'cleanutf8' => 0,
'apitempkey' => '',
'ishtmltransformation' => 0,
];
return new JsonResponse($data);
}
if($id > 0) {
$data = $this->app->DB->SelectRow(
sprintf(
"SELECT a.id, a.bezeichnung, a.aktiv, p.abkuerzung AS `projekt`, a.remotedomain, a.initkey,
a.importwarteschlange, a.importwarteschlange_name, a.cleanutf8, a.event_url, a.permissions, a.ishtmltransformation
FROM `api_account` AS `a`
LEFT JOIN `projekt` AS `p` ON a.projekt = p.id
WHERE a.id = %d",
$id
)
);
/** @var Api $api */
$api = $this->app->loadModule('api');
$data['apitempkey'] = $api->generateHashFromDomainAndKey($data['initkey'], $data['remotedomain']);
if(!empty($data)) {
return new JsonResponse($data);
}
}
return new JsonResponse(['error'=>'Account nicht gefunden'], JsonResponse::HTTP_BAD_REQUEST);
}
/**
* @return JsonResponse
*/
public function HandleSaveAjaxAction()
{
if(!$this->app->erp->RechteVorhanden('api_account', 'edit')) {
return new JsonResponse(['error'=>'Fehlende Rechte'], JsonResponse::HTTP_BAD_REQUEST);
}
$id = (int)$this->app->Secure->GetPOST('id');
$bezeichnung = $this->app->Secure->GetPOST('bezeichnung');
if(empty($bezeichnung)) {
return new JsonResponse(['error'=>'Bitte füllen Sie die Bezeichnung aus'], JsonResponse::HTTP_BAD_REQUEST);
}
$projekt = (string)$this->app->Secure->GetPOST('projekt');
if($projekt !== ''){
$projekt = (int)$this->app->erp->ReplaceProjekt(1, $projekt, 1);
}
else {
$projekt = 0;
}
$aktiv = (int)(bool)$this->app->Secure->GetPOST('aktiv');
$importwarteschlange = (int)(bool)$this->app->Secure->GetPOST('importwarteschlange');
$cleanutf8 = (int)(bool)$this->app->Secure->GetPOST('cleanutf8');
$remotedomain = $this->app->Secure->GetPOST('remotedomain');
$initkey = $this->app->Secure->GetPOST('initkey');
$importwarteschlange_name = $this->app->Secure->GetPOST('importwarteschlange_name');
$event_url = $this->app->Secure->GetPOST('event_url');
$isHtmlTransformation = (int)(bool)$this->app->Secure->GetPOST('ishtmltransformation');
$api_permissions = $this->prepareApiPermissions($this->app->Secure->GetPOST('api_permissions'));
if($id <= 0) {
$this->app->DB->Insert(
sprintf(
"INSERT INTO `api_account`
(`bezeichnung`, `initkey`, `importwarteschlange_name`, `event_url`, `remotedomain`, `aktiv`,
`importwarteschlange`, `cleanutf8`, `uebertragung_account`, `projekt`, `permissions`, `ishtmltransformation`)
VALUES ('%s', '%s', '%s', '%s', '%s', %d,
%d, %d, 0, %d, '%s', %d) ",
$bezeichnung, $initkey, $importwarteschlange_name, $event_url, $remotedomain, $aktiv,
$importwarteschlange, $cleanutf8, $projekt, $api_permissions, $isHtmlTransformation
)
);
$id = (int)$this->app->DB->GetInsertID();
if($id){
$data = ['success' => true, 'id' => $id];
return new JsonResponse($data);
}
return new JsonResponse(['error'=>'Account konnte nicht erstellt werden'], JsonResponse::HTTP_BAD_REQUEST);
}
$data = $this->app->DB->SelectRow(
sprintf(
"SELECT a.id, a.bezeichnung, a.aktiv, p.abkuerzung AS `projekt`, a.remotedomain, a.initkey,
a.importwarteschlange, a.importwarteschlange_name, a.cleanutf8, a.event_url, a.permissions, a.ishtmltransformation
FROM `api_account` AS `a`
LEFT JOIN `projekt` AS `p` ON a.projekt = p.id
WHERE a.id = %d",
$id
)
);
if(empty($data)) {
return new JsonResponse(['error'=>'Account nicht gefunden'], JsonResponse::HTTP_BAD_REQUEST);
}
$this->app->DB->Update(
sprintf(
"UPDATE `api_account`
SET `bezeichnung` = '%s',
`initkey` = '%s',
`importwarteschlange_name` = '%s',
`event_url` = '%s',
`remotedomain` = '%s',
`aktiv` = %d,
`importwarteschlange` = %d,
`cleanutf8` = %d,
`uebertragung_account` = 0,
`projekt` = %d ,
`permissions` = '%s',
`ishtmltransformation` = %d
WHERE `id` = %d",
$bezeichnung, $initkey, $importwarteschlange_name, $event_url, $remotedomain, $aktiv,
$importwarteschlange, $cleanutf8, $projekt, $api_permissions, $isHtmlTransformation, $id
)
);
if(empty($this->app->DB->error())) {
$data = ['success' => true, 'id' => $id];
return new JsonResponse($data);
}
return new JsonResponse(['error'=>'Account konnte nicht geändert werden'], JsonResponse::HTTP_BAD_REQUEST);
}
private function prepareApiPermissions(array $apiPermissions){
$cleanedPermissions = [];
foreach ($apiPermissions as $permission => $value){
if($value === 'true'){
$cleanedPermissions[] = $permission;
}
}
return json_encode($cleanedPermissions);
}
public function Api_AccountList(){
$cmd = $this->app->Secure->GetGET('cmd');
if($cmd === 'get') {
return $this->HandleGetAjaxAction();
}
if($cmd === 'save') {
return $this->HandleSaveAjaxAction();
}
$apiPermissions = $this->app->DB->SelectArr("SELECT * FROM `api_permission`");
if (empty($apiPermissions)) {
$api = $this->app->loadModule('api');
$api->fillApiPermissions();
$apiPermissions = $this->app->DB->SelectArr("SELECT * FROM `api_permission`");
}
$groupedApiPermissions = [];
foreach ($apiPermissions as $apiPermission){
$groupedApiPermissions[$apiPermission['group']][] =$apiPermission;
}
$apiPermissionsHtml = '';
foreach ($groupedApiPermissions as $group => $permissions) {
$apiPermissionsHtml .= '<tr>';
$apiPermissionsHtml .= "<td>{$group}</td>";
$apiPermissionsHtml .= "<td>";
foreach ($permissions as $permission){
$apiPermissionsHtml .= "<label for='{$permission['key']}'>";
$apiPermissionsHtml .= "<input class='permission-checkbox' type='checkbox' name='{$permission['key']}'>";
$apiPermissionsHtml .= "&nbsp;&nbsp;{$permission['key']}</label>";
$apiPermissionsHtml .= "<br>";
}
$apiPermissionsHtml .= "</td>";
$apiPermissionsHtml .= '</tr>';
}
$this->app->YUI->TableSearch('TAB1','api_account_list', 'show','','',basename(__FILE__), __CLASS__);
$this->app->erp->MenuEintrag('#', 'Neu');
$this->app->erp->MenuEintrag('index.php?module=api_account&action=list', '&Uuml;bersicht');
$this->app->erp->Headlines('API Account');
$this->app->Tpl->Set('API_PERMISSIONS_HTML', $apiPermissionsHtml);
$this->app->YUI->Autocomplete('projekt', 'projektname', 1);
$this->app->Tpl->Parse('PAGE','api_account_list.tpl');
}
}

View File

@ -907,14 +907,14 @@ class Artikel extends GenArtikel {
$defaultorder = 7;
// headings
$heading = array('Artikel', 'Nummer','Menge', 'Einheit', 'Lager', 'Reserviert', 'Men&uuml;');
$width = array('50%', '10%', '5%', '5%','5%', '5%', '9%');
$findcols = array('a.name_de', 'a.nummer', 's.menge','a.einheit',
$heading = array('Artikel', 'Nummer','Referenz','Menge', 'Einheit', 'Lager', 'Reserviert', 'Men&uuml;');
$width = array('50%', '10%', '5%', '5%', '5%','5%', '5%', '9%');
$findcols = array('a.name_de', 'a.nummer','s.referenz', 's.menge','a.einheit',
'lag.menge', 'CASE WHEN (SELECT SUM(lr.menge) FROM lager_reserviert lr WHERE lr.artikel=a.id) > 0
THEN (SELECT SUM(lr.menge) FROM lager_reserviert lr WHERE lr.artikel=a.id)
ELSE 0
END','id');
$searchsql = array('a.name_de', 'a.nummer','a.einheit', 's.menge','s.art',"CONCAT(IF(s.art='' OR s.art='et','Einkaufsteil',''),IF(s.art='it','Informationsteil/Dienstleistung',''),IF(s.art='bt','Beistellung',''))");
$searchsql = array('a.name_de', 'a.nummer','s.referenz','a.einheit', 's.menge','s.art',"CONCAT(IF(s.art='' OR s.art='et','Einkaufsteil',''),IF(s.art='it','Informationsteil/Dienstleistung',''),IF(s.art='bt','Beistellung',''))");
$menu = "<table cellpadding=0 cellspacing=0>";
$menu .= "<tr>";
@ -932,20 +932,19 @@ class Artikel extends GenArtikel {
$alignright = array(3,5,6);
// SQL statement
$sql = "SELECT SQL_CALC_FOUND_ROWS s.id,
CONCAT('<a href=\"index.php?module=artikel&action=edit&id=',a.id,'\" target=\"_blank\">',a.name_de,'</a>&nbsp;',
IF(s.art='it','<br><i style=color:#999>- Informationsteil/Dienstleistung</i>',''),IF(s.art='bt','<br><i style=color:#999>- Beistellung</i>',''), COALESCE((SELECT GROUP_CONCAT('<br><i style=color:#999>- ', art.nummer, ' ', art.name_de, ' (', alt.reason, ')', '</i>' SEPARATOR '') FROM parts_list_alternative AS alt INNER JOIN artikel AS art ON art.id = alt.alternative_article_id WHERE alt.parts_list_id = s.id), '')) as artikel,
CONCAT('<a href=\"index.php?module=artikel&action=edit&id=',a.id,'\" target=\"_blank\">',a.nummer,'</a>') as nummer,
".$this->app->erp->FormatMenge('s.menge').' as menge, a.einheit,
'.$this->app->erp->FormatMenge('ifnull(lag.menge,0)').' as lager,
CASE WHEN (SELECT SUM(lr.menge) FROM lager_reserviert lr WHERE lr.artikel=a.id) > 0
THEN (SELECT '.$this->app->erp->FormatMenge('SUM(lr.menge)')." FROM lager_reserviert lr WHERE lr.artikel=a.id)
ELSE 0
END as reserviert,
s.id as menu
$sql = "SELECT SQL_CALC_FOUND_ROWS
s.id,
CONCAT('<a href=\"index.php?module=artikel&action=edit&id=',a.id,'\" target=\"_blank\">',a.name_de,'</a>&nbsp;',
IF(s.art='it','<br><i style=color:#999>- Informationsteil/Dienstleistung</i>',''),IF(s.art='bt','<br><i style=color:#999>- Beistellung</i>',''), COALESCE((SELECT GROUP_CONCAT('<br><i style=color:#999>- ', art.nummer, ' ', art.name_de, ' (', alt.reason, ')', '</i>' SEPARATOR '') FROM parts_list_alternative AS alt INNER JOIN artikel AS art ON art.id = alt.alternative_article_id WHERE alt.parts_list_id = s.id), '')) as artikel,
CONCAT('<a href=\"index.php?module=artikel&action=edit&id=',a.id,'\" target=\"_blank\">',a.nummer,'</a>') as nummer,
s.referenz,
trim(s.menge)+0 as menge, a.einheit,
".$this->app->erp->FormatMenge('ifnull(lag.menge,0)').' as lager,
CASE WHEN (SELECT SUM(lr.menge) FROM lager_reserviert lr WHERE lr.artikel=a.id) > 0
THEN (SELECT '.$this->app->erp->FormatMenge('SUM(lr.menge)')." FROM lager_reserviert lr WHERE lr.artikel=a.id)
ELSE 0
END as reserviert,
s.id as menu
FROM stueckliste s
INNER JOIN artikel a ON s.artikel=a.id
LEFT JOIN (SELECT sum(lpi.menge) as menge ,lpi.artikel
@ -1801,22 +1800,35 @@ class Artikel extends GenArtikel {
// SQL statement
if (!empty($this->app->Conf->WFdbType) && $this->app->Conf->WFdbType == 'postgre') {
$sql = 'SELECT s.id, a.name_de as artikel,a.nummer as nummer, trim(s.menge)+0 as menge,
CASE WHEN (SELECT SUM(l.menge) FROM lager_platz_inhalt l WHERE l.artikel=a.id) > 0
THEN (SELECT SUM(l.menge) FROM lager_platz_inhalt l WHERE l.artikel=a.id)
ELSE 0
END as lager, s.artikel as menu
$sql = 'SELECT
s.id,
a.name_de as artikel,
a.nummer as nummer,
trim(SUM(s.menge))+0 as menge,
CASE
WHEN (SELECT SUM(l.menge) FROM lager_platz_inhalt l WHERE l.artikel=a.id) > 0
THEN (SELECT SUM(l.menge) FROM lager_platz_inhalt l WHERE l.artikel=a.id)
ELSE 0
END as lager,
s.artikel as menu
FROM stueckliste s LEFT JOIN artikel a ON s.artikel=a.id ';
} else {
$sql = 'SELECT SQL_CALC_FOUND_ROWS s.id, a.name_de as artikel,a.nummer as nummer, trim(s.menge)+0 as menge,
s.stuecklistevonartikel
as menu
FROM stueckliste s LEFT JOIN artikel a ON s.stuecklistevonartikel=a.id ';
$sql = ' SELECT SQL_CALC_FOUND_ROWS
s.id,
a.name_de as artikel,
a.nummer as nummer,
trim(SUM(s.menge))+0 as menge,
s.stuecklistevonartikel AS menu
FROM
stueckliste s
LEFT JOIN artikel a ON s.stuecklistevonartikel=a.id ';
}
// Fester filter
$where = "s.artikel='$id' ";
$groupby = " GROUP BY a.id";
// gesamt anzahl
$count = "SELECT COUNT(s.id) FROM stueckliste s WHERE s.stuecklistevonartikel='$id' ";
break;
@ -6090,7 +6102,7 @@ class Artikel extends GenArtikel {
$stueck = $this->app->erp->ArtikelAnzahlLagerStueckliste($id);
$this->ArtikelStuecklisteImport('TAB3');
// $this->ArtikelStuecklisteImport('TAB3');
$url = 'index.php?module=artikel&action=stueckliste&cmd=getbaum&id='.$id;
$this->app->Tpl->Set('URL',$url);
$this->app->Tpl->Add('TAB1',"<center>");
@ -6255,8 +6267,8 @@ class Artikel extends GenArtikel {
{
$id = $this->app->Secure->GetGET('id');
if($id > 0){
$result = $this->app->DB->SelectArr("SELECT a.nummer, a.name_de, a.hersteller,a.herstellernummer, REPLACE(TRIM(s.menge)+0,'.',',') as menge, s.referenz, s.place, s.layer, s.wert, s.bauform, s.zachse,s.xpos, s.ypos, s.art FROM stueckliste s
LEFT JOIN artikel a ON a.id=s.artikel WHERE s.stuecklistevonartikel='$id'");
$sql = "SELECT avon.nummer as stuecklistevon, a.nummer, a.name_de, a.hersteller,a.herstellernummer, REPLACE(TRIM(s.menge)+0,'.',',') as menge, s.referenz, s.place, s.layer, s.wert, s.bauform, s.zachse,s.xpos, s.ypos, s.art FROM stueckliste s LEFT JOIN artikel a ON a.id=s.artikel LEFT JOIN artikel avon ON avon.id=s.stuecklistevonartikel WHERE s.stuecklistevonartikel='$id'";
$result = $this->app->DB->SelectArr($sql);
}
header('Content-type: text/csv');
header('Content-Disposition: attachment; filename=file.csv');
@ -6322,7 +6334,7 @@ class Artikel extends GenArtikel {
$id = (int)$this->app->Secure->GetPOST('id');
$data = $this->app->DB->SelectRow('SELECT s.id, s.artikel, '.$this->app->erp->FormatMenge("s.menge")." as menge, s.art, s.referenz, s.layer, s.place, s.wert, s.bauform, s.zachse, s.xpos, s.ypos FROM stueckliste s WHERE s.id = '$id' LIMIT 1");
$data = $this->app->DB->SelectRow("SELECT s.id, s.artikel, trim(s.menge)+0 as menge, s.art, s.referenz, s.layer, s.place, s.wert, s.bauform, s.zachse, s.xpos, s.ypos FROM stueckliste s WHERE s.id = '$id' LIMIT 1");
if($data){
if($data['artikel'] == 0){

View File

@ -1,15 +1,15 @@
<?php
/*
**** COPYRIGHT & LICENSE NOTICE *** DO NOT REMOVE ****
*
* Xentral (c) Xentral ERP Sorftware GmbH, Fuggerstrasse 11, D-86150 Augsburg, * Germany 2019
*
* This file is licensed under the Embedded Projects General Public License *Version 3.1.
*
* You should have received a copy of this license from your vendor and/or *along with this file; If not, please visit www.wawision.de/Lizenzhinweis
* to obtain the text of the corresponding license version.
*
**** END OF COPYRIGHT & LICENSE NOTICE *** DO NOT REMOVE ****
/*
**** COPYRIGHT & LICENSE NOTICE *** DO NOT REMOVE ****
*
* Xentral (c) Xentral ERP Sorftware GmbH, Fuggerstrasse 11, D-86150 Augsburg, * Germany 2019
*
* This file is licensed under the Embedded Projects General Public License *Version 3.1.
*
* You should have received a copy of this license from your vendor and/or *along with this file; If not, please visit www.wawision.de/Lizenzhinweis
* to obtain the text of the corresponding license version.
*
**** END OF COPYRIGHT & LICENSE NOTICE *** DO NOT REMOVE ****
*/
?>
<?php
@ -122,7 +122,8 @@ class Artikelbaum
public function ArtikelbaumList()
{
$this->app->erp->MenuEintrag('index.php?module=artikelbaum&action=list','&Uuml;bersicht');
$this->app->erp->MenuEintrag('index.php?module=artikelkategorien&action=list','Artikelkategorien');
$this->app->erp->MenuEintrag('index.php?module=artikelbaum&action=list','Artikelbaum');
$id = $this->app->Secure->GetGET('id');
$url = 'index.php?module=artikelbaum&action=baumajax&id='.$id;
$this->app->Tpl->Set('URL',$url);

View File

@ -0,0 +1,249 @@
<?php
/*
* Copyright (c) 2022 OpenXE project
*/
use Xentral\Components\Database\Exception\QueryFailureException;
class Artikelkategorien {
function __construct($app, $intern = false) {
$this->app = $app;
if ($intern)
return;
$this->app->ActionHandlerInit($this);
$this->app->ActionHandler("list", "artikelkategorien_list");
$this->app->ActionHandler("create", "artikelkategorien_edit"); // This automatically adds a "New" button
$this->app->ActionHandler("edit", "artikelkategorien_edit");
$this->app->ActionHandler("delete", "artikelkategorien_delete");
$this->app->DefaultActionHandler("list");
$this->app->ActionHandlerListen($app);
}
public function Install() {
/* Fill out manually later */
}
static function TableSearch(&$app, $name, $erlaubtevars) {
switch ($name) {
case "artikelkategorien_list":
$allowed['artikelkategorien_list'] = array('list');
$heading = array('','','Bezeichnung', 'Projekt','Gel&ouml;scht', 'Men&uuml;');
$width = array('1%','1%','30%','10%','1%','1%'); // Fill out manually later
// columns that are aligned right (numbers etc)
// $alignright = array(4,5,6,7,8);
$findcols = array('a.id','a.id','a.bezeichnung', 'a.projekt');
$searchsql = array('a.bezeichnung');
$defaultorder = 1;
$defaultorderdesc = 0;
$dropnbox = "'<img src=./themes/new/images/details_open.png class=details>' AS `open`, CONCAT('<input type=\"checkbox\" name=\"auswahl[]\" value=\"',a.id,'\" />') AS `auswahl`";
$menu = "<table cellpadding=0 cellspacing=0><tr><td nowrap>" . "<a href=\"index.php?module=artikelkategorien&action=edit&id=%value%\"><img src=\"./themes/{$app->Conf->WFconf['defaulttheme']}/images/edit.svg\" border=\"0\"></a>&nbsp;<a href=\"#\" onclick=DeleteDialog(\"index.php?module=artikelkategorien&action=delete&id=%value%\");>" . "<img src=\"themes/{$app->Conf->WFconf['defaulttheme']}/images/delete.svg\" border=\"0\"></a>" . "</td></tr></table>";
$sql = "SELECT SQL_CALC_FOUND_ROWS a.id, $dropnbox, a.bezeichnung, p.abkuerzung, a.geloescht, a.id FROM artikelkategorien a LEFT JOIN projekt p ON a.projekt = p.id";
$where = "1";
$count = "SELECT count(DISTINCT id) FROM artikelkategorien WHERE $where";
// $groupby = "";
break;
}
$erg = false;
foreach ($erlaubtevars as $k => $v) {
if (isset($$v)) {
$erg[$v] = $$v;
}
}
return $erg;
}
function artikelkategorien_list() {
$this->app->erp->MenuEintrag("index.php?module=artikelkategorien&action=list", "&Uuml;bersicht");
$this->app->erp->MenuEintrag("index.php?module=artikelkategorien&action=create", "Neu anlegen");
$this->app->erp->MenuEintrag("index.php?module=artikelbaum&action=list", "Artikelbaum");
// $this->app->erp->MenuEintrag("index.php", "Zur&uuml;ck");
$this->app->YUI->TableSearch('TAB1', 'artikelkategorien_list', "show", "", "", basename(__FILE__), __CLASS__);
$this->app->Tpl->Parse('PAGE', "artikelkategorien_list.tpl");
}
public function artikelkategorien_delete() {
$id = (int) $this->app->Secure->GetGET('id');
$this->app->DB->Delete("DELETE FROM `artikelkategorien` WHERE `id` = '{$id}'");
$this->app->Tpl->Set('MESSAGE', "<div class=\"error\">Der Eintrag wurde gel&ouml;scht.</div>");
$this->artikelkategorien_list();
}
/*
* Edit artikelkategorien item
* If id is empty, create a new one
*/
function artikelkategorien_edit() {
$id = $this->app->Secure->GetGET('id');
// Check if other users are editing this id
if($this->app->erp->DisableModul('artikel',$id))
{
return;
}
$this->app->Tpl->Set('ID', $id);
$this->app->erp->MenuEintrag("index.php?module=artikelkategorien&action=edit&id=$id", "Details");
$this->app->erp->MenuEintrag("index.php?module=artikelkategorien&action=list", "Zur&uuml;ck zur &Uuml;bersicht");
$id = $this->app->Secure->GetGET('id');
$input = $this->GetInput();
$submit = $this->app->Secure->GetPOST('submit');
if (empty($id)) {
// New item
$id = 'NULL';
}
if ($submit != '')
{
// Write to database
// Add checks here
$input['projekt'] = $this->app->erp->ReplaceProjekt(true,$input['projekt'],true); // Parameters: Target db?, value, from form?
$columns = "id, ";
$values = "$id, ";
$update = "";
$fix = "";
foreach ($input as $key => $value) {
$columns = $columns.$fix.$key;
$values = $values.$fix."'".$value."'";
$update = $update.$fix.$key." = '$value'";
$fix = ", ";
}
// echo($columns."<br>");
// echo($values."<br>");
// echo($update."<br>");
$sql = "INSERT INTO artikelkategorien (".$columns.") VALUES (".$values.") ON DUPLICATE KEY UPDATE ".$update;
// echo($sql);
$this->app->DB->Update($sql);
if ($id == 'NULL') {
$msg = $this->app->erp->base64_url_encode("<div class=\"success\">Das Element wurde erfolgreich angelegt.</div>");
header("Location: index.php?module=artikelkategorien&action=list&msg=$msg");
} else {
$this->app->Tpl->Set('MESSAGE', "<div class=\"success\">Die Einstellungen wurden erfolgreich &uuml;bernommen.</div>");
}
}
// Load values again from database
$dropnbox = "'<img src=./themes/new/images/details_open.png class=details>' AS `open`, CONCAT('<input type=\"checkbox\" name=\"auswahl[]\" value=\"',a.id,'\" />') AS `auswahl`";
$result = $this->app->DB->SelectArr("SELECT SQL_CALC_FOUND_ROWS a.id, $dropnbox, a.bezeichnung, a.next_nummer, a.projekt, a.geloescht, a.externenummer, a.parent, a.steuer_erloese_inland_normal, a.steuer_aufwendung_inland_normal, a.steuer_erloese_inland_ermaessigt, a.steuer_aufwendung_inland_ermaessigt, a.steuer_erloese_inland_steuerfrei, a.steuer_aufwendung_inland_steuerfrei, a.steuer_erloese_inland_innergemeinschaftlich, a.steuer_aufwendung_inland_innergemeinschaftlich, a.steuer_erloese_inland_eunormal, a.steuer_erloese_inland_nichtsteuerbar, a.steuer_erloese_inland_euermaessigt, a.steuer_aufwendung_inland_nichtsteuerbar, a.steuer_aufwendung_inland_eunormal, a.steuer_aufwendung_inland_euermaessigt, a.steuer_erloese_inland_export, a.steuer_aufwendung_inland_import, a.steuertext_innergemeinschaftlich, a.steuertext_export, a.id FROM artikelkategorien a"." WHERE id=$id");
foreach ($result[0] as $key => $value) {
$this->app->Tpl->Set(strtoupper($key), $value);
}
/*
* Add displayed items later
*
$this->app->Tpl->Add('KURZUEBERSCHRIFT2', $email);
$this->app->Tpl->Add('EMAIL', $email);
$this->app->Tpl->Add('ANGEZEIGTERNAME', $angezeigtername);
*/
$this->app->Tpl->Set('PROJEKT',$this->app->erp->ReplaceProjekt(false,$result[0]['projekt'],false)); // Parameters: Target db?, value, from form?
$this->app->YUI->AutoComplete('projekt', 'projektname', 1);
// $this->SetInput($input);
$this->app->Tpl->Parse('PAGE', "artikelkategorien_edit.tpl");
}
/**
* Get all paramters from html form and save into $input
*/
public function GetInput(): array {
$input = array();
//$input['EMAIL'] = $this->app->Secure->GetPOST('email');
$input['bezeichnung'] = $this->app->Secure->GetPOST('bezeichnung');
$input['next_nummer'] = $this->app->Secure->GetPOST('next_nummer');
$input['projekt'] = $this->app->Secure->GetPOST('projekt');
$input['geloescht'] = $this->app->Secure->GetPOST('geloescht');
$input['externenummer'] = $this->app->Secure->GetPOST('externenummer');
$input['parent'] = $this->app->Secure->GetPOST('parent');
$input['steuer_erloese_inland_normal'] = $this->app->Secure->GetPOST('steuer_erloese_inland_normal');
$input['steuer_aufwendung_inland_normal'] = $this->app->Secure->GetPOST('steuer_aufwendung_inland_normal');
$input['steuer_erloese_inland_ermaessigt'] = $this->app->Secure->GetPOST('steuer_erloese_inland_ermaessigt');
$input['steuer_aufwendung_inland_ermaessigt'] = $this->app->Secure->GetPOST('steuer_aufwendung_inland_ermaessigt');
$input['steuer_erloese_inland_steuerfrei'] = $this->app->Secure->GetPOST('steuer_erloese_inland_steuerfrei');
$input['steuer_aufwendung_inland_steuerfrei'] = $this->app->Secure->GetPOST('steuer_aufwendung_inland_steuerfrei');
$input['steuer_erloese_inland_innergemeinschaftlich'] = $this->app->Secure->GetPOST('steuer_erloese_inland_innergemeinschaftlich');
$input['steuer_aufwendung_inland_innergemeinschaftlich'] = $this->app->Secure->GetPOST('steuer_aufwendung_inland_innergemeinschaftlich');
$input['steuer_erloese_inland_eunormal'] = $this->app->Secure->GetPOST('steuer_erloese_inland_eunormal');
$input['steuer_erloese_inland_nichtsteuerbar'] = $this->app->Secure->GetPOST('steuer_erloese_inland_nichtsteuerbar');
$input['steuer_erloese_inland_euermaessigt'] = $this->app->Secure->GetPOST('steuer_erloese_inland_euermaessigt');
$input['steuer_aufwendung_inland_nichtsteuerbar'] = $this->app->Secure->GetPOST('steuer_aufwendung_inland_nichtsteuerbar');
$input['steuer_aufwendung_inland_eunormal'] = $this->app->Secure->GetPOST('steuer_aufwendung_inland_eunormal');
$input['steuer_aufwendung_inland_euermaessigt'] = $this->app->Secure->GetPOST('steuer_aufwendung_inland_euermaessigt');
$input['steuer_erloese_inland_export'] = $this->app->Secure->GetPOST('steuer_erloese_inland_export');
$input['steuer_aufwendung_inland_import'] = $this->app->Secure->GetPOST('steuer_aufwendung_inland_import');
$input['steuertext_innergemeinschaftlich'] = $this->app->Secure->GetPOST('steuertext_innergemeinschaftlich');
$input['steuertext_export'] = $this->app->Secure->GetPOST('steuertext_export');
return $input;
}
/*
* Set all fields in the page corresponding to $input
*/
function SetInput($input) {
// $this->app->Tpl->Set('EMAIL', $input['email']);
$this->app->Tpl->Set('BEZEICHNUNG', $input['bezeichnung']);
$this->app->Tpl->Set('NEXT_NUMMER', $input['next_nummer']);
$this->app->Tpl->Set('PROJEKT', $input['projekt']);
$this->app->Tpl->Set('GELOESCHT', $input['geloescht']);
$this->app->Tpl->Set('EXTERNENUMMER', $input['externenummer']);
$this->app->Tpl->Set('PARENT', $input['parent']);
$this->app->Tpl->Set('STEUER_ERLOESE_INLAND_NORMAL', $input['steuer_erloese_inland_normal']);
$this->app->Tpl->Set('STEUER_AUFWENDUNG_INLAND_NORMAL', $input['steuer_aufwendung_inland_normal']);
$this->app->Tpl->Set('STEUER_ERLOESE_INLAND_ERMAESSIGT', $input['steuer_erloese_inland_ermaessigt']);
$this->app->Tpl->Set('STEUER_AUFWENDUNG_INLAND_ERMAESSIGT', $input['steuer_aufwendung_inland_ermaessigt']);
$this->app->Tpl->Set('STEUER_ERLOESE_INLAND_STEUERFREI', $input['steuer_erloese_inland_steuerfrei']);
$this->app->Tpl->Set('STEUER_AUFWENDUNG_INLAND_STEUERFREI', $input['steuer_aufwendung_inland_steuerfrei']);
$this->app->Tpl->Set('STEUER_ERLOESE_INLAND_INNERGEMEINSCHAFTLICH', $input['steuer_erloese_inland_innergemeinschaftlich']);
$this->app->Tpl->Set('STEUER_AUFWENDUNG_INLAND_INNERGEMEINSCHAFTLICH', $input['steuer_aufwendung_inland_innergemeinschaftlich']);
$this->app->Tpl->Set('STEUER_ERLOESE_INLAND_EUNORMAL', $input['steuer_erloese_inland_eunormal']);
$this->app->Tpl->Set('STEUER_ERLOESE_INLAND_NICHTSTEUERBAR', $input['steuer_erloese_inland_nichtsteuerbar']);
$this->app->Tpl->Set('STEUER_ERLOESE_INLAND_EUERMAESSIGT', $input['steuer_erloese_inland_euermaessigt']);
$this->app->Tpl->Set('STEUER_AUFWENDUNG_INLAND_NICHTSTEUERBAR', $input['steuer_aufwendung_inland_nichtsteuerbar']);
$this->app->Tpl->Set('STEUER_AUFWENDUNG_INLAND_EUNORMAL', $input['steuer_aufwendung_inland_eunormal']);
$this->app->Tpl->Set('STEUER_AUFWENDUNG_INLAND_EUERMAESSIGT', $input['steuer_aufwendung_inland_euermaessigt']);
$this->app->Tpl->Set('STEUER_ERLOESE_INLAND_EXPORT', $input['steuer_erloese_inland_export']);
$this->app->Tpl->Set('STEUER_AUFWENDUNG_INLAND_IMPORT', $input['steuer_aufwendung_inland_import']);
$this->app->Tpl->Set('STEUERTEXT_INNERGEMEINSCHAFTLICH', $input['steuertext_innergemeinschaftlich']);
$this->app->Tpl->Set('STEUERTEXT_EXPORT', $input['steuertext_export']);
}
}

View File

@ -848,7 +848,7 @@ class Auftrag extends GenAuftrag
FROM auftrag auf
INNER JOIN auftrag_position ON auf.id = auftrag_position.auftrag
INNER JOIN artikel ON auftrag_position.artikel = artikel.id
WHERE auf.status <> 'abgeschlossen' AND auf.belegnr <> ''
WHERE auf.status NOT IN ('abgeschlossen','storniert') AND auf.belegnr <> ''
ORDER BY urspruengliches_lieferdatum ASC, auf.belegnr ASC, auftrag_position.sort ASC
) a";
@ -1990,8 +1990,52 @@ class Auftrag extends GenAuftrag
$gebuchtezeit = str_replace(".", ",", round($gebuchtezeit,2));
}
$summebrutto = $this->app->DB->Select("SELECT gesamtsumme FROM auftrag WHERE id='$id' LIMIT 1");
$this->app->Tpl->Set('DECKUNGSBEITRAG',0);
$this->app->Tpl->Set('DBPROZENT',0);
// Deckungsbeitrag
if (!$this->app->erp->RechteVorhanden('auftrag','einkaufspreise')) {
$this->app->Tpl->Set('DBHIDDEN','hidden');
} else {
$sql = "
SELECT
umsatz_netto_gesamt,
artikel,
menge,
einkaufspreis
FROM
`auftrag_position`
WHERE
`auftrag` = ".$id."
";
$positionen = $this->app->DB->SelectArr($sql);
$umsatz_gesamt = 0;
$kosten_gesamt = 0;
$db_gesamt = 0;
foreach ($positionen as $position) {
if (empty($position['einkaufspreis'])) {
$position['einkaufspreis'] = $this->app->erp->GetEinkaufspreis($position['artikel'],$position['menge']);
}
$kosten = ($position['einkaufspreis']*$position['menge']);
$db_gesamt += $position['umsatz_netto_gesamt']-$kosten;
$kosten_gesamt += $kosten;
$umsatz_gesamt += $position['umsatz_netto_gesamt'];
}
$this->app->Tpl->Set('NETTOGESAMT',$this->app->erp->number_format_variable($umsatz_gesamt,2));
$this->app->Tpl->Set('KOSTEN',$this->app->erp->number_format_variable($kosten_gesamt,2));
$this->app->Tpl->Set('DECKUNGSBEITRAG',$this->app->erp->number_format_variable($db_gesamt,2));
$this->app->Tpl->Set( 'DBPROZENT',
$umsatz_gesamt==0?
"-":
$this->app->erp->number_format_variable(
round(
$db_gesamt/$umsatz_gesamt*100,2
)
)."%"
);
}
$this->app->Tpl->Set('GEBUCHTEZEIT',0);
if($auftragArr[0]['ust_befreit']==0){
@ -2270,7 +2314,7 @@ class Auftrag extends GenAuftrag
}
$this->app->Tpl->Set('PREISANFRAGE', implode('<br />', $priceRequestsHtml));
}
/*
$tmpVersand = !$hasDeliveryNotes?[]: $this->app->DB->SelectFirstCols(
"SELECT if(v.versendet_am!='0000-00-00',
CONCAT(DATE_FORMAT( v.versendet_am,'%d.%m.%Y'),' ',v.versandunternehmen),
@ -2353,6 +2397,39 @@ class Auftrag extends GenAuftrag
else {
$this->app->Tpl->Set('TRACKING',$tmpVersand);
}
*/
$sql = "SELECT SQL_CALC_FOUND_ROWS
v.id,
v.tracking as tracking,
v.tracking_link
FROM
versandpakete v
LEFT JOIN
versandpaket_lieferschein_position vlp ON v.id = vlp.versandpaket
LEFT JOIN
lieferschein_position lp ON lp.id = vlp.lieferschein_position
LEFT JOIN
lieferschein l ON lp.lieferschein = l.id
LEFT JOIN
lieferschein lop ON lop.id = v.lieferschein_ohne_pos
WHERE
l.auftragid = ".$id." OR lop.auftragid = ".$id."
GROUP BY
v.id
";
$tracking = $this->app->DB->SelectArr($sql);
$tracking_list = array();
foreach ($tracking as $single_tracking) {
$tracking_list[] = '<a href="index.php?module=versandpakete&action=edit&id='.$single_tracking['id'].'">Paket Nr.'.$single_tracking['id'].'</a>'.
' ('.'<a href="'.$single_tracking['tracking_link'].'">'.$single_tracking['tracking'].'</a>'.')';
}
$this->app->Tpl->Set('TRACKING',implode('<br>',$tracking_list));
$icons = $this->app->YUI->IconsSQL();
@ -3182,6 +3259,11 @@ class Auftrag extends GenAuftrag
);
}
$this->app->Tpl->Add(
'ZAHLUNGEN',
$this->AuftragZahlung(true)
);
// schaue ob es eine GS zu diesem Auftrag gibt
// schaue ob es eine GS zu diesem Auftrag gibt
//$gutschriftid = $this->app->DB->Select("SELECT id FROM gutschrift WHERE rechnungid='$rechnungid' LIMIT 1");
@ -3409,7 +3491,47 @@ class Auftrag extends GenAuftrag
<tr><td><b>Lieferadresse:</b><br><br>$lieferadresse</td></tr></table>";
}
/* Build the html output for minidetail containing the payments
* @param bool $return
*
* @return string
*/
function AuftragZahlung($return=false)
{
$id = $this->app->Secure->GetGET('id');
$zahlungen = $this->app->erp->GetZahlungen($id,'auftrag',true);
if (!empty($zahlungen)) {
$et = new EasyTable($this->app);
$et->headings = array('Datum','Beleg','Betrag','W&auml;hrung');
foreach ($zahlungen as $zahlung) {
$row = array(
$zahlung['datum'],
"<a href=\"index.php?module=".$zahlung['doc_typ']."&action=edit&id=".$zahlung['doc_id']."\">
".ucfirst($zahlung['doc_typ'])."
".$zahlung['doc_info']."
</a>",
$zahlung['betrag'],
$zahlung['waehrung']
);
$et->AddRow($row);
}
$salden = $this->app->erp->GetSaldenDokument($id,'auftrag',true);
foreach ($salden as $saldo) {
$row = array(
'',
'<b>Saldo</b>',
"<b>".$saldo['betrag']."</b>",
"<b>".$saldo['waehrung']."</b>"
);
$et->AddRow($row);
}
return($et->DisplayNew('return',""));
}
}
function AuftragZahlungsmail()
{
@ -4871,6 +4993,10 @@ class Auftrag extends GenAuftrag
$this->app->erp->AdresseAlsLieferadresseButton($adresse);
}
if ($schreibschutz != 1 AND $status != 'abgeschlossen') {
$this->app->erp->BerechneDeckungsbeitrag($id,'auftrag');
}
if($nummer!='') {
$this->app->Tpl->Set('NUMMER',$nummer);
if($this->app->erp->RechteVorhanden('adresse','edit')){
@ -5649,8 +5775,13 @@ Die Gesamtsumme stimmt nicht mehr mit urspr&uuml;nglich festgelegten Betrag '.
}
$this->app->DB->Update("UPDATE lieferschein SET
belegnr='$ls_belegnr', status='freigegeben', versand='".$this->app->User->GetDescription()."'
WHERE id='$lieferschein' LIMIT 1");
belegnr='$ls_belegnr',
status='freigegeben',
versand='".$this->app->User->GetDescription()."',
versand_status = 1
WHERE id='$lieferschein' LIMIT 1");
// Versand_status: 1 = process in versandpakete, 2 = finished, 3 = finished manually
$this->app->erp->LieferscheinProtokoll($lieferschein, 'Lieferschein freigegeben');
@ -5962,6 +6093,13 @@ Die Gesamtsumme stimmt nicht mehr mit urspr&uuml;nglich festgelegten Betrag '.
}
}
// Check for override in adresse
$sql = "SELECT rechnung_anzahlpapier, rechnung_anzahlpapier_abweichend FROM adresse WHERE id =".$adresse;
$rechnung_anzahlpapier = $this->app->DB->SelectArr($sql);
if ($rechnung_anzahlpapier[0]['rechnung_anzahlpapier_abweichend']) {
$autodruckrechnungstufe1menge = $rechnung_anzahlpapier[0]['rechnung_anzahlpapier'];
}
if($exportdruckrechnungstufe1)
{
if(!empty($projektarr))
@ -5975,9 +6113,6 @@ Die Gesamtsumme stimmt nicht mehr mit urspr&uuml;nglich festgelegten Betrag '.
$exportdruckrechnungstufe1 = $this->app->erp->Export($exportland);
}
if(($autodruckrechnungstufe1=='1' || $exportdruckrechnungstufe1) && $rechnung > 0)
{
$this->app->DB->Update("UPDATE rechnung SET status='versendet', versendet='1',schreibschutz='1' WHERE id='$rechnung' LIMIT 1");
@ -6293,7 +6428,7 @@ Die Gesamtsumme stimmt nicht mehr mit urspr&uuml;nglich festgelegten Betrag '.
$this->app->erp->MenuEintrag('index.php?module=auftrag&action=list','&Uuml;bersicht');
$this->app->erp->MenuEintrag('index.php?module=auftrag&action=create','Neuen Auftrag anlegen');
$this->app->erp->MenuEintrag('index.php?module=auftrag&action=offene','Offene Positionen');
$this->app->erp->MenuEintrag('index.php?module=auftrag&action=versandzentrum','Versandzentrum');
$this->app->erp->MenuEintrag('index.php?module=auftrag&action=versandzentrum','Versand&uuml;bergabe');
if(strlen($backurl)>5){
$this->app->erp->MenuEintrag("$backurl", 'Zur&uuml;ck zur &Uuml;bersicht');
@ -6338,7 +6473,7 @@ Die Gesamtsumme stimmt nicht mehr mit urspr&uuml;nglich festgelegten Betrag '.
$this->AuftraguebersichtMenu();
$targetMessage = 'AUTOVERSANDBERECHNEN';
$this->app->Tpl->Add('MESSAGE','<div class="info">Auftr&auml;ge an Versand übergeben mit automatischem Druck und Mailversand.</div>');
$this->app->Tpl->Add('MESSAGE','<div class="info">Auftr&auml;ge an Versand übergeben mit automatischem Druck und Mailversand. <a class="button" href="index.php?module=versandpakete&action=lieferungen">Zum Versand</a></div>');
$autoshipmentEnabled = true;
$this->app->erp->RunHook('OrderAutoShipment', 2, $targetMessage, $autoshipmentEnabled);
@ -6666,6 +6801,13 @@ Die Gesamtsumme stimmt nicht mehr mit urspr&uuml;nglich festgelegten Betrag '.
public function AuftragList()
{
// refresh all open items
$openids = $this->app->DB->SelectArr("SELECT id from auftrag WHERE status <> 'abgeschlossen'");
foreach ($openids as $openid) {
$this->app->erp->AuftragAutoversandBerechnen($openid['id']);
}
if($this->app->Secure->GetPOST('ausfuehren') && $this->app->erp->RechteVorhanden('auftrag', 'edit'))
{
$drucker = $this->app->Secure->GetPOST('seldrucker');
@ -7261,6 +7403,9 @@ Die Gesamtsumme stimmt nicht mehr mit urspr&uuml;nglich festgelegten Betrag '.
$this->app->DB->Update($sql);
}
$this->app->erp->AuftragProtokoll($id,"Teilauftrag $belegnr_neu erstellt");
$this->app->erp->PDFArchivieren('auftrag', $id, true);
header('Location: index.php?module=auftrag&action=edit&id='.$id_neu);
}

View File

@ -0,0 +1,238 @@
<?php
/*
**** COPYRIGHT & LICENSE NOTICE *** DO NOT REMOVE ****
*
* Xentral (c) Xentral ERP Sorftware GmbH, Fuggerstrasse 11, D-86150 Augsburg, * Germany 2019
*
* This file is licensed under the Embedded Projects General Public License *Version 3.1.
*
* You should have received a copy of this license from your vendor and/or *along with this file; If not, please visit www.wawision.de/Lizenzhinweis
* to obtain the text of the corresponding license version.
*
**** END OF COPYRIGHT & LICENSE NOTICE *** DO NOT REMOVE ****
*/
?>
<?php
class Belegevorlagen
{
static function TableSearch(&$app, $name, $erlaubtevars)
{
switch($name)
{
case "belegevorlagen_list":
$heading = array('Bezeichnung','Belegtyp','Projekt','Men&uuml;');
$width = array('40%','20%','29%','1%');
$findcols = array('b.bezeichnung','b.belegtyp','pr.abkuerzung','b.id');
$searchsql = array('b.bezeichnung','b.belegtyp','pr.abkuerzung');
$menu = "<table><tr><td nowrap><a href=\"#\" onclick=\"deletevorlage(%value%);\"><img src=\"themes/{$app->Conf->WFconf['defaulttheme']}/images/delete.svg\" border=\"0\"></a></td></tr></table>";
$sql = "SELECT SQL_CALC_FOUND_ROWS b.id, b.bezeichnung,CONCAT(UCASE(LEFT(b.belegtyp, 1)), SUBSTRING(b.belegtyp, 2)), pr.abkuerzung, b.id FROM belegevorlagen b LEFT JOIN projekt pr ON b.projekt = pr.id";
$where = $app->erp->ProjektRechte('b.projekt');
break;
case "belegevorlagen_list2":
$belegtyp = $app->Secure->GetGET('smodule');
$heading = array('Bezeichnung','Projekt','Men&uuml;');
$width = array('50%','49%','1%');
$findcols = array('b.bezeichnung','pr.abkuerzung','b.id');
$searchsql = array('b.bezeichnung','pr.abkuerzung');
$menu = "<table><tr><td nowrap><a href=\"#\" onclick=\"loadbelegvorlage(%value%);\"><img src=\"themes/{$app->Conf->WFconf['defaulttheme']}/images/forward.svg\" border=\"0\"></a>&nbsp;<a href=\"#\" onclick=\"deletevorlage(%value%);\"><img src=\"themes/{$app->Conf->WFconf['defaulttheme']}/images/delete.svg\" border=\"0\"></a></td></tr></table>";
$sql = "SELECT SQL_CALC_FOUND_ROWS b.id, b.bezeichnung, pr.abkuerzung, b.id FROM belegevorlagen b LEFT JOIN projekt pr ON b.projekt = pr.id";
$where = "belegtyp = '$belegtyp' ".$app->erp->ProjektRechte('b.projekt');
break;
}
$erg = false;
foreach($erlaubtevars as $k => $v)
{
if(isset($$v))$erg[$v] = $$v;
}
return $erg;
}
function __construct(&$app, $intern = false)
{
$this->app=&$app;
$this->artikel = $this->app->erp->GetKonfiguration('gesamtrabatt_artikel');
if($intern)return;
$this->app->ActionHandlerInit($this);
$this->app->ActionHandler("list","BelegevorlagenList");
$this->app->ActionHandler("einstellungen","BelegevorlagenEinstellungen");
$this->app->DefaultActionHandler("list");
$this->app->ActionHandlerListen($app);
}
function BelegevorlagenMenu(){
$this->app->erp->MenuEintrag("index.php?module=belegevorlagen&action=list","&Uuml;bersicht");
$this->app->erp->MenuEintrag("index.php?module=belegevorlagen&action=einstellungen","Einstellungen");
}
function BelegevorlagenList()
{
if($this->app->Secure->GetGET('cmd') == 'delvorlage')
{
$id = (int)$this->app->Secure->GetPOST('lid');
$this->app->DB->Delete("DELETE FROM belegevorlagen WHERE id = '$id' LIMIT 1");
echo json_encode(array('status'=>1));
exit;
}
$this->BelegevorlagenMenu();
$this->app->YUI->TableSearch('TAB1', "belegevorlagen_list", "show","","",basename(__FILE__), __CLASS__);
$this->app->Tpl->Parse('PAGE','belegevorlagen_list.tpl');
}
function BelegevorlagenEinstellungen()
{
$this->BelegevorlagenMenu();
$this->app->Tpl->Set('PREISEAKTUALISIEREN',$this->app->erp->GetKonfiguration('belegevorlagen_preiseaktualisieren')=='on'?'checked':'');
$this->app->YUI->AutoSaveKonfiguration('preiseaktualisieren','belegevorlagen_preiseaktualisieren');
$this->app->Tpl->Parse('PAGE','belegevorlagen_einstellungen.tpl');
}
function Install()
{
$this->app->erp->CheckTable('belegevorlagen');
$this->app->erp->CheckColumn("id","int(11)","belegevorlagen","DEFAULT '0' NOT NULL AUTO_INCREMENT");
$this->app->erp->CheckColumn("belegtyp", "varchar(255)", "belegevorlagen", "DEFAULT '' NOT NULL");
$this->app->erp->CheckColumn("bezeichnung", "varchar(255)", "belegevorlagen", "DEFAULT '' NOT NULL");
$this->app->erp->CheckColumn("projekt", "int(11)", "belegevorlagen", "DEFAULT '0' NOT NULL");
$this->app->erp->CheckColumn("json", "MEDIUMTEXT", "belegevorlagen", "DEFAULT '' NOT NULL");
$this->app->erp->CheckColumn("bearbeiter", "varchar(255)", "belegevorlagen", "DEFAULT '' NOT NULL");
$this->app->erp->CheckColumn("zeitstempel", "timestamp", "belegevorlagen","DEFAULT CURRENT_TIMESTAMP NOT NULL");
$this->app->erp->RegisterHook('BelegPositionenButtons', 'belegevorlagen', 'BelegevorlagenBelegPositionenButtons');
$this->app->erp->RegisterHook('AARLGPositionen_cmds_end', 'belegevorlagen', 'BelegevorlagenAARLGPositionen_cmds_end');
$this->app->erp->RegisterHook('ajax_filter_hook1', 'belegevorlagen', 'Belegevorlagenajax_filter_hook1');
}
function Belegevorlagenajax_filter_hook1($filtername,&$newarr, $term, $term2, $term3)
{
if($filtername == 'belegvorlagen')
{
$arr = $this->app->DB->SelectArr("SELECT CONCAT(b.id,' ',b.bezeichnung) as bezeichnung FROM belegevorlagen b
WHERE (b.bezeichnung LIKE '%$term%') ".$this->app->erp->ProjektRechte('b.projekt'));
if($arr)
{
for($i=0;$i<count($arr);$i++)
$newarr[] = $arr[$i]['bezeichnung'];
}
}
}
function BelegevorlagenBelegPositionenButtons($target, $module, $id)
{
if($module=="angebot" || $module=="auftrag" || $module=="rechnung" || $module=="lieferschein" || $module=="gutschrift" || $module=="proformarechnung")
{
$this->app->Tpl->Set('ID', $id);
$this->app->Tpl->Set('MODULE', $module);
$this->app->YUI->AutoComplete('bestehendevorlage','belegvorlagen');
$this->app->YUI->TableSearch('BELEGEVORLAGENTABELLE', "belegevorlagen_list2", "show","","",basename(__FILE__), __CLASS__);
$this->app->Tpl->Add($target, "<input type=\"button\" id=\"belegevorlagen\" value=\"Belegevorlagen\">&nbsp;".$this->app->Tpl->Parse($target,'belegevorlagen_widget.tpl'));
}
}
function BelegevorlagenAARLGPositionen_cmds_end($id){
$module = $this->app->Secure->GetGET('module');
if(!$module)return;
$projekt = $this->app->DB->Select("SELECT projekt FROM $module WHERE id='$id' LIMIT 1");
if($projekt <=0) $projekt=0;
if($this->app->Secure->GetGET('cmd') == 'deletebelegvorlage')
{
$status = 1;
$lid = (int)$this->app->Secure->GetPOST('lid');
$this->app->DB->Delete("DELETE FROM belegevorlagen WHERE id = '$lid' AND belegtyp = '$module' LIMIT 1");
echo json_encode(array('status'=>$status));
exit;
}
if($this->app->Secure->GetGET('cmd') == 'loadbelegvorlage')
{
$status = 0;
$lid = (int)$this->app->Secure->GetPOST('lid');
$json = (String)$this->app->DB->Select("SELECT json FROM belegevorlagen WHERE id = '$lid' AND belegtyp = '$module' LIMIT 1");
if($json !== '')
{
$json = json_decode($json, true);
$maxsort = (int)$this->app->DB->Select("SELECT max(sort) FROM $module"."_position WHERE $module = '$id' LIMIT 1");
if(isset($json['positionen']))
{
foreach($json['positionen'] as $v)
{
$v[$module] = $id;
if($this->app->erp->GetKonfiguration('belegevorlagen_preiseaktualisieren')=='on'){
if($v['artikel'] != '0'){
$v['preis'] = $this->app->erp->GetVerkaufspreis($v['artikel'],$v['menge']);
}
}
$v['sort'] += $maxsort;
$this->app->DB->Insert("INSERT INTO $module"."_position (id) VALUES ('')");
$idnew = $this->app->DB->GetInsertID();
$oldtonew[$v['id']] = $idnew;
if($v['explodiert_parent'] && isset($oldtonew) && isset($oldtonew[$v['explodiert_parent']]))$v['explodiert_parent'] = $oldtonew[$v['explodiert_parent']];
unset($v['id']);
$this->app->DB->UpdateArr($module.'_position',$idnew,"id",$v, true);
if(is_null($v['steuersatz']))$this->app->DB->Update("UPDATE ".$module."_position SET steuersatz = NULL WHERE id = '$idnew' LIMIT 1");
}
}
if(isset($json['zwischenpositionen']))
{
$maxpos = $this->app->DB->SelectArr("SELECT id,sort FROM beleg_zwischenpositionen WHERE doctype = '$module' AND doctypeid = '$id' AND pos='$maxsort' ORDER BY sort DESC LIMIT 1");
if($maxpos)
{
$sortoffset = 1 + $maxpos[0]['sort'];
}else{
$sortoffset = 0;
}
foreach($json['zwischenpositionen'] as $v)
{
if($v['pos'] == 0)$v['sort'] += $sortoffset;
$v['doctypeid'] = $id;
$v['pos'] += $maxsort;
unset($v['id']);
$this->app->DB->Insert("INSERT INTO beleg_zwischenpositionen (id) VALUES ('')");
$idnew = $this->app->DB->GetInsertID();
$this->app->DB->UpdateArr('beleg_zwischenpositionen',$idnew,"id",$v, true);
}
}
$status = 1;
$this->app->erp->ANABREGSNeuberechnen($id,$module);
}
echo json_encode(array('status'=>$status));
exit;
}
if($this->app->Secure->GetGET('cmd') == 'savebelegevorlage')
{
$json = null;
$status = 0;
$bestehendevorlage = (int)reset(explode(' ',$this->app->Secure->GetPOST('bestehendevorlage')));
$bezeichnung = (String)$this->app->Secure->GetPOST('bezeichnung');
$vorlagetyp = $this->app->Secure->GetPOST('vorlagetyp');
$bearbeiter = $this->app->DB->real_escape_string($this->app->User->GetName());
$lid = null;
if($vorlagetyp == 'neu')
{
if($bezeichnung !== '')
{
$this->app->DB->Insert("INSERT INTO belegevorlagen (bezeichnung, belegtyp, bearbeiter, zeitstempel,projekt) VALUES ('$bezeichnung','$module','$bearbeiter',now(),'$projekt')");
$lid = $this->app->DB->GetInsertID();
}
}else{
$lid = $this->app->DB->Select("SELECT id FROM belegevorlagen WHERE id = '$bestehendevorlage' LIMIT 1");
if($lid && $bezeichnung !== '')$this->app->DB->Update("UPDATE belegevorlagen set bezeichnung = '$bezeichnung' WHERE id = '$bestehendevorlage' LIMIT 1");
}
if($lid)
{
$json['positionen'] = $this->app->DB->SelectArr("SELECT * FROM $module"."_position WHERE $module = '$id' ORDER BY sort");
$json['zwischenpositionen'] = $this->app->DB->SelectArr("SELECT * FROM beleg_zwischenpositionen WHERE doctype = '$module' AND doctypeid = '$id' ORDER BY pos, sort");
$json = $this->app->DB->real_escape_string(json_encode($json));
$this->app->DB->Update("UPDATE belegevorlagen set json = '$json', zeitstempel = now(), bearbeiter = '$bearbeiter' WHERE id = '$lid' LIMIT 1");
$status = 1;
}
echo json_encode(array('status'=>$status));
exit;
}
}
}
?>

View File

@ -775,7 +775,8 @@ class Bestellung extends GenBestellung
$tmp3->DisplayNew('PDFARCHIV','Men&uuml;',"noAction");
}
/*
$wareneingangsbelege = $this->app->DB->SelectFirstCols("SELECT
CONCAT('<a href=\"index.php?module=receiptdocument&action=edit&id=',r.id,'\" target=\"_blank\"',if(r.status='storniert',' title=\"Wareneingangsbeleg storniert\"><s>','>'),if(r.document_number='0' OR document_number='','ENTWURF',r.document_number),if(r.status='storniert','</s>',''),'</a>&nbsp;<a href=\"index.php?module=receiptdocument&action=pdf&id=',r.id,'\" target=\"_blank\"><img src=\"./themes/new/images/pdf.svg\" title=\"Wareneingangsbeleg PDF\" border=\"0\"></a>&nbsp;
<a href=\"index.php?module=receiptdocument&action=edit&id=',r.id,'\" target=\"_blank\"><img src=\"./themes/new/images/edit.svg\" title=\"Wareneingangsbeleg bearbeiten\" border=\"0\"></a>') as wareneingangsbeleg
@ -787,6 +788,30 @@ class Bestellung extends GenBestellung
else{
$this->app->Tpl->Set('WARENEINGANGSBELEG', '-');
}
*/
$sql = "SELECT
CONCAT('<a href =\"index.php?module=wareneingang&action=distriinhalt&id=',pa.id,'\">',pa.id,'</a>') as wareneingang
FROM
paketannahme pa
INNER JOIN paketdistribution pd ON
pd.paketannahme = pa.id
INNER JOIN bestellung_position bp ON
pd.bestellung_position = bp.id
INNER JOIN bestellung b ON
b.id = bp.bestellung
WHERE
b.id = $id
GROUP BY
pa.id";
// echo($sql);
$wareneingangsbelege = $this->app->DB->SelectArr($sql);
if(!empty($wareneingangsbelege)){
$this->app->Tpl->Add('WARENEINGANGSBELEG', implode('<br />', array_column($wareneingangsbelege , 'wareneingang' )));
}
else{
$this->app->Tpl->Set('WARENEINGANGSBELEG', '-');
}
$this->app->Tpl->Set('ID', $id);

View File

@ -33,7 +33,7 @@
</tr>
<tr>
<td>Bearbeiter:</td>
<td colspan="3"><input type="text" name="von" id="von" value="[SENDER]" style="width: 370px;"></td>
<td colspan="3"><input type="text" name="von" id="von" value="[BEARBEITER]" style="width: 370px;"></td>
</tr>
<tr>
<td width="100">{|Projekt|}:</td>

View File

@ -45,7 +45,25 @@
</div>
</div>
<div style="background-color:white" [DBHIDDEN]>
<h2 class="greyh2">{|Deckungsbeitrag (netto)|}</h2>
<table width="100%">
<tbody>
<tr>
<td>Umsatz EUR</td>
<td>Kosten EUR</td>
<td>Deckungsbeitrag EUR</td>
<td>DB %</td>
</tr>
<tr>
<td class="greybox" width="25%">[NETTOGESAMT]</td>
<td class="greybox" width="25%">[KOSTEN]</td>
<td class="greybox" width="25%">[DECKUNGSBEITRAG]</td>
<td class="greybox" width="25%">[DBPROZENT]</td>
</tr>
</tbody>
</table>
</div>
<div style="background-color:white">
<h2 class="greyh2">Protokoll</h2>
@ -59,12 +77,6 @@
[PDFARCHIV]
</div>
</div>
<div style="background-color:white">
<h2 class="greyh2">Deckungsbeitrag</h2>
<div style="padding:10px">
<div class="info">Dieses Modul ist erst ab Version Professional verfügbar</div>
</div>
</div>
</div>

View File

@ -0,0 +1,455 @@
<div id="tabs">
<ul>
<li><a href="#tabs-1"></a></li>
</ul>
<!-- Example for multiple tabs
<ul hidden">
<li><a href="#tabs-1">First Tab</a></li>
<li><a href="#tabs-2">Second Tab</a></li>
</ul>
-->
<div id="tabs-1">
[MESSAGE]
<form action="" method="post">
[FORMHANDLEREVENT]
<div class="row">
<div class="row-height">
<div class="col-xs-12 col-md-12 col-md-height">
<div class="inside inside-full-height">
<fieldset>
<legend>{|Artikelkategorien|}</legend><i>Info like this.</i>
<table width="100%" border="0" class="mkTableFormular">
<tr>
<td>
{|Bezeichnung|}:
</td>
<td>
<input type="text" name="bezeichnung" id="bezeichnung" value="[BEZEICHNUNG]" size="20">
</td>
</tr>
<tr>
<td>
{|Next_nummer|}:
</td>
<td>
<input type="text" name="next_nummer" id="next_nummer" value="[NEXT_NUMMER]" size="20">
</td>
</tr>
<tr>
<td>
{|Projekt|}:
</td>
<td>
<input type="text" name="projekt" id="projekt" value="[PROJEKT]" size="20">
</td>
</tr>
<tr>
<td>
{|Geloescht|}:
</td>
<td>
<input type="text" name="geloescht" id="geloescht" value="[GELOESCHT]" size="20">
</td>
</tr>
<tr>
<td>
{|Externenummer|}:
</td>
<td>
<input type="text" name="externenummer" id="externenummer" value="[EXTERNENUMMER]" size="20">
</td>
</tr>
<tr>
<td>
{|Parent|}:
</td>
<td>
<input type="text" name="parent" id="parent" value="[PARENT]" size="20">
</td>
</tr>
<tr>
<td>
{|Steuer_erloese_inland_normal|}:
</td>
<td>
<input type="text" name="steuer_erloese_inland_normal" id="steuer_erloese_inland_normal" value="[STEUER_ERLOESE_INLAND_NORMAL]" size="20">
</td>
</tr>
<tr>
<td>
{|Steuer_aufwendung_inland_normal|}:
</td>
<td>
<input type="text" name="steuer_aufwendung_inland_normal" id="steuer_aufwendung_inland_normal" value="[STEUER_AUFWENDUNG_INLAND_NORMAL]" size="20">
</td>
</tr>
<tr>
<td>
{|Steuer_erloese_inland_ermaessigt|}:
</td>
<td>
<input type="text" name="steuer_erloese_inland_ermaessigt" id="steuer_erloese_inland_ermaessigt" value="[STEUER_ERLOESE_INLAND_ERMAESSIGT]" size="20">
</td>
</tr>
<tr>
<td>
{|Steuer_aufwendung_inland_ermaessigt|}:
</td>
<td>
<input type="text" name="steuer_aufwendung_inland_ermaessigt" id="steuer_aufwendung_inland_ermaessigt" value="[STEUER_AUFWENDUNG_INLAND_ERMAESSIGT]" size="20">
</td>
</tr>
<tr>
<td>
{|Steuer_erloese_inland_steuerfrei|}:
</td>
<td>
<input type="text" name="steuer_erloese_inland_steuerfrei" id="steuer_erloese_inland_steuerfrei" value="[STEUER_ERLOESE_INLAND_STEUERFREI]" size="20">
</td>
</tr>
<tr>
<td>
{|Steuer_aufwendung_inland_steuerfrei|}:
</td>
<td>
<input type="text" name="steuer_aufwendung_inland_steuerfrei" id="steuer_aufwendung_inland_steuerfrei" value="[STEUER_AUFWENDUNG_INLAND_STEUERFREI]" size="20">
</td>
</tr>
<tr>
<td>
{|Steuer_erloese_inland_innergemeinschaftlich|}:
</td>
<td>
<input type="text" name="steuer_erloese_inland_innergemeinschaftlich" id="steuer_erloese_inland_innergemeinschaftlich" value="[STEUER_ERLOESE_INLAND_INNERGEMEINSCHAFTLICH]" size="20">
</td>
</tr>
<tr>
<td>
{|Steuer_aufwendung_inland_innergemeinschaftlich|}:
</td>
<td>
<input type="text" name="steuer_aufwendung_inland_innergemeinschaftlich" id="steuer_aufwendung_inland_innergemeinschaftlich" value="[STEUER_AUFWENDUNG_INLAND_INNERGEMEINSCHAFTLICH]" size="20">
</td>
</tr>
<tr>
<td>
{|Steuer_erloese_inland_eunormal|}:
</td>
<td>
<input type="text" name="steuer_erloese_inland_eunormal" id="steuer_erloese_inland_eunormal" value="[STEUER_ERLOESE_INLAND_EUNORMAL]" size="20">
</td>
</tr>
<tr>
<td>
{|Steuer_erloese_inland_nichtsteuerbar|}:
</td>
<td>
<input type="text" name="steuer_erloese_inland_nichtsteuerbar" id="steuer_erloese_inland_nichtsteuerbar" value="[STEUER_ERLOESE_INLAND_NICHTSTEUERBAR]" size="20">
</td>
</tr>
<tr>
<td>
{|Steuer_erloese_inland_euermaessigt|}:
</td>
<td>
<input type="text" name="steuer_erloese_inland_euermaessigt" id="steuer_erloese_inland_euermaessigt" value="[STEUER_ERLOESE_INLAND_EUERMAESSIGT]" size="20">
</td>
</tr>
<tr>
<td>
{|Steuer_aufwendung_inland_nichtsteuerbar|}:
</td>
<td>
<input type="text" name="steuer_aufwendung_inland_nichtsteuerbar" id="steuer_aufwendung_inland_nichtsteuerbar" value="[STEUER_AUFWENDUNG_INLAND_NICHTSTEUERBAR]" size="20">
</td>
</tr>
<tr>
<td>
{|Steuer_aufwendung_inland_eunormal|}:
</td>
<td>
<input type="text" name="steuer_aufwendung_inland_eunormal" id="steuer_aufwendung_inland_eunormal" value="[STEUER_AUFWENDUNG_INLAND_EUNORMAL]" size="20">
</td>
</tr>
<tr>
<td>
{|Steuer_aufwendung_inland_euermaessigt|}:
</td>
<td>
<input type="text" name="steuer_aufwendung_inland_euermaessigt" id="steuer_aufwendung_inland_euermaessigt" value="[STEUER_AUFWENDUNG_INLAND_EUERMAESSIGT]" size="20">
</td>
</tr>
<tr>
<td>
{|Steuer_erloese_inland_export|}:
</td>
<td>
<input type="text" name="steuer_erloese_inland_export" id="steuer_erloese_inland_export" value="[STEUER_ERLOESE_INLAND_EXPORT]" size="20">
</td>
</tr>
<tr>
<td>
{|Steuer_aufwendung_inland_import|}:
</td>
<td>
<input type="text" name="steuer_aufwendung_inland_import" id="steuer_aufwendung_inland_import" value="[STEUER_AUFWENDUNG_INLAND_IMPORT]" size="20">
</td>
</tr>
<tr>
<td>
{|Steuertext_innergemeinschaftlich|}:
</td>
<td>
<input type="text" name="steuertext_innergemeinschaftlich" id="steuertext_innergemeinschaftlich" value="[STEUERTEXT_INNERGEMEINSCHAFTLICH]" size="20">
</td>
</tr>
<tr>
<td>
{|Steuertext_export|}:
</td>
<td>
<input type="text" name="steuertext_export" id="steuertext_export" value="[STEUERTEXT_EXPORT]" size="20">
</td>
</tr>
</table>
</fieldset>
</div>
</div>
</div>
</div>
<!-- Example for 2nd row
<div class="row">
<div class="row-height">
<div class="col-xs-12 col-md-12 col-md-height">
<div class="inside inside-full-height">
<fieldset>
<legend>{|Another legend|}</legend>
<table width="100%" border="0" class="mkTableFormular">
<tr>
<td>
{|Bezeichnung|}:
</td>
<td>
<input type="text" name="bezeichnung" id="bezeichnung" value="[BEZEICHNUNG]" size="20">
</td>
</tr>
<tr>
<td>
{|Next_nummer|}:
</td>
<td>
<input type="text" name="next_nummer" id="next_nummer" value="[NEXT_NUMMER]" size="20">
</td>
</tr>
<tr>
<td>
{|Projekt|}:
</td>
<td>
<input type="text" name="projekt" id="projekt" value="[PROJEKT]" size="20">
</td>
</tr>
<tr>
<td>
{|Geloescht|}:
</td>
<td>
<input type="text" name="geloescht" id="geloescht" value="[GELOESCHT]" size="20">
</td>
</tr>
<tr>
<td>
{|Externenummer|}:
</td>
<td>
<input type="text" name="externenummer" id="externenummer" value="[EXTERNENUMMER]" size="20">
</td>
</tr>
<tr>
<td>
{|Parent|}:
</td>
<td>
<input type="text" name="parent" id="parent" value="[PARENT]" size="20">
</td>
</tr>
<tr>
<td>
{|Steuer_erloese_inland_normal|}:
</td>
<td>
<input type="text" name="steuer_erloese_inland_normal" id="steuer_erloese_inland_normal" value="[STEUER_ERLOESE_INLAND_NORMAL]" size="20">
</td>
</tr>
<tr>
<td>
{|Steuer_aufwendung_inland_normal|}:
</td>
<td>
<input type="text" name="steuer_aufwendung_inland_normal" id="steuer_aufwendung_inland_normal" value="[STEUER_AUFWENDUNG_INLAND_NORMAL]" size="20">
</td>
</tr>
<tr>
<td>
{|Steuer_erloese_inland_ermaessigt|}:
</td>
<td>
<input type="text" name="steuer_erloese_inland_ermaessigt" id="steuer_erloese_inland_ermaessigt" value="[STEUER_ERLOESE_INLAND_ERMAESSIGT]" size="20">
</td>
</tr>
<tr>
<td>
{|Steuer_aufwendung_inland_ermaessigt|}:
</td>
<td>
<input type="text" name="steuer_aufwendung_inland_ermaessigt" id="steuer_aufwendung_inland_ermaessigt" value="[STEUER_AUFWENDUNG_INLAND_ERMAESSIGT]" size="20">
</td>
</tr>
<tr>
<td>
{|Steuer_erloese_inland_steuerfrei|}:
</td>
<td>
<input type="text" name="steuer_erloese_inland_steuerfrei" id="steuer_erloese_inland_steuerfrei" value="[STEUER_ERLOESE_INLAND_STEUERFREI]" size="20">
</td>
</tr>
<tr>
<td>
{|Steuer_aufwendung_inland_steuerfrei|}:
</td>
<td>
<input type="text" name="steuer_aufwendung_inland_steuerfrei" id="steuer_aufwendung_inland_steuerfrei" value="[STEUER_AUFWENDUNG_INLAND_STEUERFREI]" size="20">
</td>
</tr>
<tr>
<td>
{|Steuer_erloese_inland_innergemeinschaftlich|}:
</td>
<td>
<input type="text" name="steuer_erloese_inland_innergemeinschaftlich" id="steuer_erloese_inland_innergemeinschaftlich" value="[STEUER_ERLOESE_INLAND_INNERGEMEINSCHAFTLICH]" size="20">
</td>
</tr>
<tr>
<td>
{|Steuer_aufwendung_inland_innergemeinschaftlich|}:
</td>
<td>
<input type="text" name="steuer_aufwendung_inland_innergemeinschaftlich" id="steuer_aufwendung_inland_innergemeinschaftlich" value="[STEUER_AUFWENDUNG_INLAND_INNERGEMEINSCHAFTLICH]" size="20">
</td>
</tr>
<tr>
<td>
{|Steuer_erloese_inland_eunormal|}:
</td>
<td>
<input type="text" name="steuer_erloese_inland_eunormal" id="steuer_erloese_inland_eunormal" value="[STEUER_ERLOESE_INLAND_EUNORMAL]" size="20">
</td>
</tr>
<tr>
<td>
{|Steuer_erloese_inland_nichtsteuerbar|}:
</td>
<td>
<input type="text" name="steuer_erloese_inland_nichtsteuerbar" id="steuer_erloese_inland_nichtsteuerbar" value="[STEUER_ERLOESE_INLAND_NICHTSTEUERBAR]" size="20">
</td>
</tr>
<tr>
<td>
{|Steuer_erloese_inland_euermaessigt|}:
</td>
<td>
<input type="text" name="steuer_erloese_inland_euermaessigt" id="steuer_erloese_inland_euermaessigt" value="[STEUER_ERLOESE_INLAND_EUERMAESSIGT]" size="20">
</td>
</tr>
<tr>
<td>
{|Steuer_aufwendung_inland_nichtsteuerbar|}:
</td>
<td>
<input type="text" name="steuer_aufwendung_inland_nichtsteuerbar" id="steuer_aufwendung_inland_nichtsteuerbar" value="[STEUER_AUFWENDUNG_INLAND_NICHTSTEUERBAR]" size="20">
</td>
</tr>
<tr>
<td>
{|Steuer_aufwendung_inland_eunormal|}:
</td>
<td>
<input type="text" name="steuer_aufwendung_inland_eunormal" id="steuer_aufwendung_inland_eunormal" value="[STEUER_AUFWENDUNG_INLAND_EUNORMAL]" size="20">
</td>
</tr>
<tr>
<td>
{|Steuer_aufwendung_inland_euermaessigt|}:
</td>
<td>
<input type="text" name="steuer_aufwendung_inland_euermaessigt" id="steuer_aufwendung_inland_euermaessigt" value="[STEUER_AUFWENDUNG_INLAND_EUERMAESSIGT]" size="20">
</td>
</tr>
<tr>
<td>
{|Steuer_erloese_inland_export|}:
</td>
<td>
<input type="text" name="steuer_erloese_inland_export" id="steuer_erloese_inland_export" value="[STEUER_ERLOESE_INLAND_EXPORT]" size="20">
</td>
</tr>
<tr>
<td>
{|Steuer_aufwendung_inland_import|}:
</td>
<td>
<input type="text" name="steuer_aufwendung_inland_import" id="steuer_aufwendung_inland_import" value="[STEUER_AUFWENDUNG_INLAND_IMPORT]" size="20">
</td>
</tr>
<tr>
<td>
{|Steuertext_innergemeinschaftlich|}:
</td>
<td>
<input type="text" name="steuertext_innergemeinschaftlich" id="steuertext_innergemeinschaftlich" value="[STEUERTEXT_INNERGEMEINSCHAFTLICH]" size="20">
</td>
</tr>
<tr>
<td>
{|Steuertext_export|}:
</td>
<td>
<input type="text" name="steuertext_export" id="steuertext_export" value="[STEUERTEXT_EXPORT]" size="20">
</td>
</tr>
</table>
</fieldset>
</div>
</div>
</div>
</div> -->
<input type="submit" name="submit" value="Speichern" style="float:right"/>
</form>
</div>
<!-- Example for 2nd tab
<div id="tabs-2">
[MESSAGE]
<form action="" method="post">
[FORMHANDLEREVENT]
<div class="row">
<div class="row-height">
<div class="col-xs-12 col-md-12 col-md-height">
<div class="inside inside-full-height">
<fieldset>
<legend>{|...|}</legend>
<table width="100%" border="0" class="mkTableFormular">
...
</table>
</fieldset>
</div>
</div>
</div>
</div>
<input type="submit" name="submit" value="Speichern" style="float:right"/>
</form>
</div>
-->
</div>

View File

@ -0,0 +1,10 @@
<div id="tabs">
<ul>
<li><a href="#tabs-1">[TABTEXT1]</a></li>
</ul>
<div id="tabs-1">
[MESSAGE]
[TAB1]
[TAB1NEXT]
</div>
</div>

View File

@ -37,7 +37,7 @@
<tr><td class="auftraginfo_cell">{|Bestellung|}:</td><td class="auftraginfo_cell" >[BESTELLUNG]</td><td class="auftraginfo_cell">{|Eigene Umsatzsteuer ID|}:</td><td class="auftraginfo_cell">[DELIVERYTHRESHOLDVATID]</td></tr>
<tr><td class="auftraginfo_cell">{|Retoure|}:</td><td class="auftraginfo_cell" >[RETOURE]</td><td class="auftraginfo_cell"></td><td class="auftraginfo_cell"></td></tr>
<tr><td class="auftraginfo_cell">{|Preisanfrage|}:</td><td class="auftraginfo_cell" >[PREISANFRAGE]</td><td class="auftraginfo_cell"></td><td class="auftraginfo_cell"></td></tr>
<tr><td class="auftraginfo_cell">{|Tracking|}:</td><td class="auftraginfo_cell" >[TRACKING]</td><td class="auftraginfo_cell"></td><td class="auftraginfo_cell"></td></tr>
<tr><td class="auftraginfo_cell">{|Pakete|}:</td><td class="auftraginfo_cell" >[TRACKING]</td><td class="auftraginfo_cell"></td><td class="auftraginfo_cell"></td></tr>
</table>
<table width="100%">
@ -48,19 +48,14 @@
<td style="" width="50%">[VERSANDTEXT]</td>
[RMAENDIF]
</tr>
</table>
<div style="background-color:white">
<div style="padding:10px">
[RECHNUNGLIEFERADRESSE]
</div>
</div>
</div>
<div style="float:left; width:50%">
<div style="overflow:auto;max-height:550px;">
<div style="background-color:white;">
<h2 class="greyh2">Artikel</h2>
@ -69,63 +64,55 @@
<i style="color:#999">* Die linke Zahl zeigt die für den Kunden reservierten Einheiten und die rechte Zahl die global reservierte Anzahl.</i>
</div>
</div>
[MINIDETAILNACHARTIKEL]
<!--
<div style="background-color:white;">
<h2 class="greyh2">Lieferkette</h2>
<div style="padding:10px">
<table class="mkTable">
<tr><th>Art</th><th>Beleg</th><th>Datum</th><th>Lieferant</th><th>Status</th></tr>
<tr><td>Bestellung</td><td>ENTWURF</td><td></td><td>In-Circuit<br>200 x 777777 SMT USBprog 1)</td><td>-</td></tr>
<tr><td>Anlieferung</td><td>200000</td><td></td><td>In-Circuit<br>200 x 777777 ATMEGA32</td><td>offen</td></tr>
<tr><td>Bestellung</td><td>100023</td><td></td><td>Instanet<br>200 x USBprog 5.0 Spezial Elektor<br>200 x 777777 Flashen + Montieren</td><td>offen</td></tr>
<tr><td>Anlieferung</td><td>200002</td><td></td><td>Instanet<br>200 x 777777 SMT USBprog 1)<br>200 x 122222 Gehäuse</td><td>offen</td></tr>
</table>
<div style="background-color:white" [DBHIDDEN]>
<h2 class="greyh2">{|Deckungsbeitrag (netto)|}</h2>
<table width="100%">
<tbody>
<tr>
<td>Umsatz EUR</td>
<td>Kosten EUR</td>
<td>Deckungsbeitrag EUR</td>
<td>DB %</td>
</tr>
<tr>
<td class="greybox" width="25%">[NETTOGESAMT]</td>
<td class="greybox" width="25%">[KOSTEN]</td>
<td class="greybox" width="25%">[DECKUNGSBEITRAG]</td>
<td class="greybox" width="25%">[DBPROZENT]</td>
</tr>
</tbody>
</table>
</div>
</div>
-->
<div style="background-color:white">
<h2 class="greyh2">{|Zahlungseingang|}</h2>
<h2 class="greyh2">{|Zahlungen|}</h2>
<div style="padding:10px">
[ZAHLUNGEN]
</div>
</div>
<div style="background-color:white">
<h2 class="greyh2">{|Protokoll|}</h2>
<div style="padding:10px;">
[PROTOKOLL]
</div>
</div>
[VORPRODUKTIONPROTOKOLL]
[PRODUKTIONPROTOKOLL]
[NACHPRODUKTIONPROTOKOLL]
<!--
<div style="background-color:white">
<h2 class="greyh2">{|RMA Prozess|}</h2>
<div style="padding:10px">
[RMA]
</div>
<h2 class="greyh2">{|RMA Prozess|}</h2>
<div style="padding:10px">
[RMA]
</div>
</div>
-->
<div style="background-color:white">
<h2 class="greyh2">{|PDF-Archiv|}</h2>
<div style="padding:10px;overflow:auto;">
[PDFARCHIV]
</div>
</div>
<div style="background-color:white">
<h2 class="greyh2">{|Deckungsbeitrag|}</h2>
<div style="padding:10px">
<div class="info">{|Dieses Modul ist erst ab Version Professional verfügbar|}</div>
</div>
</div>
[INTERNEBEMERKUNGEDIT]
</div>
</div>

View File

@ -0,0 +1,20 @@
<div id="tabs">
<ul>
<li><a href="#tabs-1"><!--[TABTEXT]--></a></li>
</ul>
<!-- ende gehort zu tabview -->
<!-- erstes tab -->
<div id="tabs-1">
[MESSAGE]
<fieldset>
<legend>Einstellungen</legend>
<input type="checkbox" name="preiseaktualisieren" id="preiseaktualisieren" [PREISEAKTUALISIEREN] /> <label for="preiseaktualisieren">Aktuelle Artikelpreise verwenden wenn Belegvorlage geladen wird.</label>
</fieldset>
[TAB1]
[TAB1NEXT]
</div>
<!-- tab view schließen -->
</div>

View File

@ -0,0 +1,38 @@
<div id="tabs">
<ul>
<li><a href="#tabs-1"><!--[TABTEXT]--></a></li>
</ul>
<!-- ende gehort zu tabview -->
<!-- erstes tab -->
<div id="tabs-1">
[MESSAGE]
[TAB1]
[TAB1NEXT]
</div>
<!-- tab view schließen -->
</div>
<script type="text/javascript">
function deletevorlage(belegid)
{
if(confirm('Vorlage wirklich löschen?'))
{
$('#belegevorlagendiv').dialog('close');
$.ajax({
url: 'index.php?module=belegevorlagen&action=list&cmd=delvorlage',
type: 'POST',
dataType: 'json',
data: {lid:belegid},
success: function(data) {
var oTable = $('#belegevorlagen_list').DataTable( );
oTable.ajax.reload();
},
beforeSend: function() {
}
});
}
}
</script>

View File

@ -1,4 +1,7 @@
<div id="tabs">
<ul>
<li><a href="#tabs-1">Allgemein</a></li>
</ul>
<div id="tabs-1">
[MESSAGE]
<form action="" method="post">
@ -11,11 +14,11 @@
<legend>{|Einstellungen|}</legend>
<td>{|Absatz ber&uuml;cksichtigen (Monate)|}:</td>
<td><input type="number" min="0" name="monate_absatz" id="monate_absatz" value="[MONATE_ABSATZ]" size="20""></td>
<td><input type="number" min="0" name="monate_absatz" id="monate_absatz" value="[MONATE_ABSATZ]" size="20"></td>
</tr>
<tr>
<td>{|Vorausplanen (Monate)|}:</td>
<td><input type="number" min="0" name="monate_voraus" id="monate_voraus" value="[MONATE_VORAUS]" size="20""></td>
<td><input type="number" min="0" name="monate_voraus" id="monate_voraus" value="[MONATE_VORAUS]" size="20"></td>
</tr>
</table>
</fieldset>

View File

@ -68,13 +68,13 @@
<td width="25%" style="position:relative"><a href="index.php?module=versandarten&action=list"><img src="./themes/[THEME]/images/einstellungen/Icons_dunkel_16.gif" border="0" width="30%"></a></td>
<td width="25%" style="position:relative"><a href="index.php?module=zahlungsweisen&action=list"><img src="./themes/[THEME]/images/einstellungen/Icons_dunkel_16.gif" border="0" width="30%"></a></td>
<td width="25%" style="position:relative"><a [LIEFERBEDINGUNGENLINK]><img src="./themes/[THEME]/images/einstellungen/Icons_dunkel_16.gif" border="0" width="30%"></a>[GREYLIEFERBEDINGUNGEN]</td>
<td width="25%"></td>
<td width="25%" style="position:relative"><a href="index.php?module=mahnwesen&action=einstellungen"><img src="./themes/[THEME]/images/einstellungen/Icons_dunkel_11.gif" border="0" width="30%"></a></td>
</tr>
<tr align="center">
<td><a href="index.php?module=versandarten&action=list">{|Versandarten|}</a></td>
<td><a href="index.php?module=zahlungsweisen&action=list">{|Zahlungsweisen|}</a></td>
<td><a [LIEFERBEDINGUNGENLINK]>{|Lieferbedingungen|}</a></td>
<td></td>
<td><a href="index.php?module=mahnwesen&action=einstellungen">{|Mahnwesen|}</a></td>
</tr>
</table>

View File

@ -1,179 +1,346 @@
<div id="tabs">
<ul>
<li><a href="#tabs-1"></a></li>
</ul>
<!-- Example for multiple tabs
<ul>
<li>
<a href="#tabs-1"></a>
</li>
</ul>
<!-- Example for multiple tabs
<ul hidden">
<li><a href="#tabs-1">First Tab</a></li>
<li><a href="#tabs-2">Second Tab</a></li>
</ul>
-->
<div id="tabs-1">
[MESSAGE]
<form action="" method="post">
[FORMHANDLEREVENT]
<div class="row">
<div class="row-height">
<div class="col-xs-12 col-md-12 col-md-height">
<div class="inside inside-full-height">
<fieldset>
<legend>{|Allgemein|}</legend>
<table width="100%" border="0" class="mkTableFormular">
<tr><td>{|E-Mail-Adresse|}:</td><td><input type="text" name="email" value="[EMAIL]" size="40"></td></tr>
<tr><td>{|Angezeigter Name|}:</td><td><input type="text" name="angezeigtername" value="[ANGEZEIGTERNAME]" size="40"></td></tr>
<tr><td>{|Interne Beschreibung|}:</td><td><input type="text" name="internebeschreibung" value="[INTERNEBESCHREIBUNG]" size="40"></td></tr>
<tr><td>{|Benutzername|}:</td><td><input type="text" name="benutzername" value="[BENUTZERNAME]" size="40"></td></tr>
<tr><td>{|Passwort|}:</td><td><input type="password" name="passwort" value="[PASSWORT]" size="40"></td></tr>
</table>
</fieldset>
</div>
</div>
</div>
</div>
<div class="row">
<div class="row-height">
<div class="col-xs-12 col-md-12 col-md-height">
<div class="inside inside-full-height">
<fieldset>
<legend>{|SMTP|}</legend>
<table width="100%" border="0" class="mkTableFormular">
<tr><td>{|SMTP benutzen|}:</td><td><input type="text" name="smtp_extra" value="[SMTP_EXTRA]" size="40"><i>0 = nein, 1 = ja</i></td></tr>
<tr><td>{|Server|}:</td><td><input type="text" name="smtp" value="[SMTP]" size="40"></td></tr>
<tr><td>{|Verschl&uuml;sselung|}:</td><td><input type="text" name="smtp_ssl" value="[SMTP_SSL]" size="40"><i>0 = keine, 1 = TLS, 2 = SSL</i></td></tr>
<tr><td>{|Port|}:</td><td><input type="text" name="smtp_port" value="[SMTP_PORT]" size="40"></td></tr>
<tr><td>{|Authtype|}:</td><td><input type="text" name="smtp_authtype" value="[SMTP_AUTHTYPE]" size="40"><i>'', 'smtp', 'oauth_google'</i></td></tr>
<tr><td>{|Authparam|}:</td><td><input type="text" name="smtp_authparam" value="[SMTP_AUTHPARAM]" size="40"></td></tr>
<tr><td>{|Client_alias|}:</td><td><input type="text" name="client_alias" value="[CLIENT_ALIAS]" size="40"></td></tr>
<tr><td>{|Loglevel|}:</td><td><input type="text" name="smtp_loglevel" value="[SMTP_LOGLEVEL]" size="40"></td></tr>
<tr><td width="50">Testmail:</td><td>
<input type="submit" form="smtp_test" value="Testmail senden" id="testmail-senden-button">&nbsp;<i>Bitte erst speichern und dann senden!</i>
</td></tr>
</table>
</fieldset>
</div>
</div>
</div>
</div>
<div class="row">
<div class="row-height">
<div class="col-xs-12 col-md-12 col-md-height">
<div class="inside inside-full-height">
<fieldset>
<legend>{|IMAP|}</legend>
<table width="100%" border="0" class="mkTableFormular">
<tr><td>{|IMAP server|}:</td><td><input type="text" name="server" value="[SERVER]" size="40"></td></tr>
<tr><td>{|imap_sentfolder_aktiv|}:</td><td><input type="text" name="imap_sentfolder_aktiv" value="[IMAP_SENTFOLDER_AKTIV]" size="40"></td></tr>
<tr><td>{|imap_sentfolder|}:</td><td><input type="text" name="imap_sentfolder" value="[IMAP_SENTFOLDER]" size="40"></td></tr>
<tr><td>{|imap_port|}:</td><td><input type="text" name="imap_port" value="[IMAP_PORT]" size="40"></td></tr>
<tr><td>{|imap_type|}:</td><td><input type="text" name="imap_type" value="[IMAP_TYPE]" size="40"><i>1 = standard, 3 = SSL, 5 = OAuth</i></td></tr>
<tr><td width="50">Testmail:</td><td>
<input type="submit" form="imap_test" value="IMAP testen" id="testimap-button">&nbsp;<i>Bitte erst speichern und dann testen!</i>
</td></tr>
</table>
</fieldset>
</div>
</div>
</div>
</div>
<div class="row">
<div class="row-height">
<div class="col-xs-12 col-md-12 col-md-height">
<div class="inside inside-full-height">
<fieldset>
<legend>{|Archiv|}</legend>
<table width="100%" border="0" class="mkTableFormular">
<tr><td>{|E-Mailarchiv aktiv|}:</td><td><input type="text" name="emailbackup" value="[EMAILBACKUP]" size="40"></td></tr>
<tr><td>{|Löschen nach wievielen Tagen?|}:</td><td><input type="text" name="loeschtage" value="[LOESCHTAGE]" size="40"></td></tr>
</table>
</fieldset>
</div>
</div>
</div>
</div>
<div class="row">
<div class="row-height">
<div class="col-xs-12 col-md-12 col-md-height">
<div class="inside inside-full-height">
<fieldset>
<legend>{|Ticketsystem|}</legend>
<table width="100%" border="0" class="mkTableFormular">
<tr><td>{|ticket|}:</td><td><input type="text" name="ticket" value="[TICKET]" size="40"></td></tr>
<tr><td>{|ticketprojekt|}:</td><td><input type="text" name="ticketprojekt" value="[TICKETPROJEKT]" size="40"></td></tr>
<tr><td>{|ticketqueue|}:</td><td><input type="text" name="ticketqueue" value="[TICKETQUEUE]" size="40"></td></tr>
<tr><td>{|abdatum|}:</td><td><input type="text" name="abdatum" value="[ABDATUM]" size="40"></td></tr>
<tr><td>{|ticketloeschen|}:</td><td><input type="text" name="ticketloeschen" value="[TICKETLOESCHEN]" size="40"></td></tr>
<tr><td>{|ticketabgeschlossen|}:</td><td><input type="text" name="ticketabgeschlossen" value="[TICKETABGESCHLOSSEN]" size="40"></td></tr>
<tr><td>{|ticketemaileingehend|}:</td><td><input type="text" name="ticketemaileingehend" value="[TICKETEMAILEINGEHEND]" size="40"></td></tr>
</table>
</fieldset>
</div>
</div>
</div>
</div>
<div class="row">
<div class="row-height">
<div class="col-xs-12 col-md-12 col-md-height">
<div class="inside inside-full-height">
<fieldset>
<legend>{|Sonstiges|}</legend>
<table width="100%" border="0" class="mkTableFormular">
<tr><td>{|autosresponder_blacklist|}:</td><td><input type="text" name="autosresponder_blacklist" value="[AUTOSRESPONDER_BLACKLIST]" size="40"></td></tr>
<tr><td>{|eigenesignatur|}:</td><td><input type="text" name="eigenesignatur" value="[EIGENESIGNATUR]" size="40"></td></tr>
<tr><td>{|signatur|}:</td><td><input type="text" name="signatur" value="[SIGNATUR]" size="40"></td></tr>
<tr><td>{|adresse|}:</td><td><input type="text" name="adresse" value="[ADRESSE]" size="40"></td></tr>
<tr><td>{|firma|}:</td><td><input type="text" name="firma" value="[FIRMA]" size="40"></td></tr>
<tr><td>{|geloescht|}:</td><td><input type="text" name="geloescht" value="[GELOESCHT]" size="40"></td></tr>
<tr><td>{|mutex|}:</td><td><input type="text" name="mutex" value="[MUTEX]" size="40"></td></tr>
<tr><td>{|autoresponder|}:</td><td><input type="text" name="autoresponder" value="[AUTORESPONDER]" size="40"></td></tr>
<tr><td>{|geschaeftsbriefvorlage|}:</td><td><input type="text" name="geschaeftsbriefvorlage" value="[GESCHAEFTSBRIEFVORLAGE]" size="40"></td></tr>
<tr><td>{|autoresponderbetreff|}:</td><td><input type="text" name="autoresponderbetreff" value="[AUTORESPONDERBETREFF]" size="40"></td></tr>
<tr><td>{|autorespondertext|}:</td><td><input type="text" name="autorespondertext" value="[AUTORESPONDERTEXT]" size="40"></td></tr>
<tr><td>{|projekt|}:</td><td><input type="text" name="projekt" value="[PROJEKT]" size="40"></td></tr>
</table>
</fieldset>
</div>
</div>
</div>
</div>
<input type="submit" name="submit" value="Speichern" style="float:right"/>
</form>
</div>
<!-- Example for 2nd tab
<div id="tabs-2">
[MESSAGE]
<form action="" method="post">
[FORMHANDLEREVENT]
<div class="row">
<div class="row-height">
<div class="col-xs-12 col-md-12 col-md-height">
<div class="inside inside-full-height">
<fieldset>
<legend>{|...|}</legend>
<table width="100%" border="0" class="mkTableFormular">
...
</table>
</fieldset>
</div>
</div>
</div>
</div>
<input type="submit" name="submit" value="Speichern" style="float:right"/>
</form>
</div>
-->
</div>
<form id="smtp_test" action = "index.php">
<input type="text" name="module" value="emailbackup" style="display:none">
<input type="text" name="action" value="test_smtp" style="display:none">
<input type="text" name="id" value="[ID]" style="display:none">
<div id="tabs-1"> [MESSAGE]
<form action="" method="post"> [FORMHANDLEREVENT]
<div class="row">
<div class="row-height">
<div class="col-xs-12 col-md-12 col-md-height">
<div class="inside inside-full-height">
<fieldset>
<legend>{|Allgemein|}</legend>
<input type="submit" name="submit" value="Speichern" style="float:right" />
<table width="100%" border="0" class="mkTableFormular">
<tr>
<td width="200">{|E-Mail-Adresse|}:</td>
<td>
<input type="text" name="email" value="[EMAIL]" size="40">
</td>
</tr>
<tr>
<td>{|Angezeigter Name|}:</td>
<td>
<input type="text" name="angezeigtername" value="[ANGEZEIGTERNAME]" size="40">
</td>
</tr>
<tr>
<td>{|Interne Beschreibung|}:</td>
<td>
<input type="text" name="internebeschreibung" value="[INTERNEBESCHREIBUNG]" size="40">
</td>
</tr>
<tr>
<td>{|Benutzername|}:</td>
<td>
<input type="text" name="benutzername" value="[BENUTZERNAME]" size="40">
</td>
</tr>
<tr>
<td>{|Passwort|}:</td>
<td>
<input type="password" name="passwort" value="[PASSWORT]" size="40">
</td>
</tr>
</table>
</fieldset>
</div>
</div>
</div>
</div>
<div class="row">
<div class="row-height">
<div class="col-xs-12 col-md-12 col-md-height">
<div class="inside inside-full-height">
<fieldset>
<legend>{|SMTP|}</legend>
<table width="100%" border="0" class="mkTableFormular">
<tr>
<td width="200">{|SMTP benutzen|}:</td>
<td>
<input type="checkbox" name="smtp_extra" value="1" [SMTP_EXTRA]>
</td>
</tr>
<tr>
<td>{|Server|}:</td>
<td>
<input type="text" name="smtp" value="[SMTP]" size="40">
</td>
</tr>
<tr>
<td>{|Verschl&uuml;sselung|}:</td>
<td>
<select name="smtp_ssl">
[SMTP_SSL_SELECT]
</select>
</td>
</tr>
<tr>
<td>{|Port|}:</td>
<td>
<input type="text" name="smtp_port" value="[SMTP_PORT]" size="40">
</td>
</tr>
<tr>
<td>{|Authtype|}:</td>
<td>
<select name="smtp_authtype">
[SMTP_AUTHTYPE_SELECT]
</select>
</td>
</tr>
<tr>
<td>{|Authparam|}:</td>
<td>
<input type="text" name="smtp_authparam" value="[SMTP_AUTHPARAM]" size="40">
</td>
</tr>
<tr>
<td>{|Client alias|}:</td>
<td>
<input type="text" name="client_alias" value="[CLIENT_ALIAS]" size="40">
</td>
</tr>
<tr>
<td>{|SMTP Debug|}:</td>
<td>
<input type="checkbox" name="smtp_loglevel" value="1" [SMTP_LOGLEVEL]>
</td>
</tr>
<tr>
<td width="50">Testmail:</td>
<td>
<input type="submit" form="smtp_test" value="Testmail senden" id="testmail-senden-button">&nbsp;<i>Bitte erst speichern und dann senden!</i>
</td>
</tr>
</table>
</fieldset>
</div>
</div>
</div>
</div>
<div class="row">
<div class="row-height">
<div class="col-xs-12 col-md-12 col-md-height">
<div class="inside inside-full-height">
<fieldset>
<legend>{|IMAP|}</legend>
<table width="100%" border="0" class="mkTableFormular">
<tr>
<td width="200">{|IMAP server|}:</td>
<td>
<input type="text" name="server" value="[SERVER]" size="40">
</td>
</tr>
<tr>
<td>{|Gesendete Mails in IMAP-Ordner legen|}:</td>
<td>
<input type="checkbox" name="imap_sentfolder_aktiv" value="1" [IMAP_SENTFOLDER_AKTIV]>
</td>
</tr>
<tr>
<td>{|IMAP-Ordner|}:</td>
<td>
<input type="text" name="imap_sentfolder" value="[IMAP_SENTFOLDER]" size="40">
</td>
</tr>
<tr>
<td>{|IMAP-Port|}:</td>
<td>
<input type="text" name="imap_port" value="[IMAP_PORT]" size="40">
</td>
</tr>
<tr>
<td>{|IMAP-Typ|}:</td>
<td>
<select name="imap_type">
[IMAP_TYPE_SELECT]
</select>
</td>
</tr>
<tr>
<td width="50">Testmail:</td>
<td>
<input type="submit" form="imap_test" value="IMAP testen" id="testimap-button">&nbsp;<i>Bitte erst speichern und dann testen!</i>
</td>
</tr>
</table>
</fieldset>
</div>
</div>
</div>
</div>
<div class="row">
<div class="row-height">
<div class="col-xs-12 col-md-12 col-md-height">
<div class="inside inside-full-height">
<fieldset>
<legend>{|Archiv|}</legend>
<table width="100%" border="0" class="mkTableFormular">
<tr>
<td width="200">{|E-Mailarchiv aktiv|}:</td>
<td>
<input type="checkbox" name="emailbackup" value="1" [EMAILBACKUP]>
</td>
</tr>
<tr>
<td>{|Löschen nach wievielen Tagen?|}:</td>
<td>
<input type="text" name="loeschtage" value="[LOESCHTAGE]" size="40">
</td>
</tr>
</table>
</fieldset>
</div>
</div>
</div>
</div>
<div class="row">
<div class="row-height">
<div class="col-xs-12 col-md-12 col-md-height">
<div class="inside inside-full-height">
<fieldset>
<legend>{|Ticketsystem|}</legend>
<table width="100%" border="0" class="mkTableFormular">
<tr>
<td width="200">{|Mails als Ticket importieren|}:</td>
<td>
<input type="checkbox" name="ticket" value="1" [TICKET]>
</td>
</tr>
<tr>
<td>{|Projekt f&uuml;r Ticket|}:</td>
<td>
<input type="text" id="ticketprojekt" name="ticketprojekt" value="[TICKETPROJEKT]" size="40">
</td>
</tr>
<tr>
<td>{|Warteschlange f&uuml;r Ticket|}:</td>
<td>
<input type="text" id="ticketqueue" name="ticketqueue" value="[TICKETQUEUE]" size="40">
</td>
</tr>
<tr>
<td>{|E-Mails ab Datum importieren|}:</td>
<td>
<input type="text" name="abdatum" id="abdatum" value="[ABDATUM]" size="40">
</td>
</tr>
<tr>
<td>{|E-Mail nach Import l&ouml;schen|}:</td>
<td>
<input type="checkbox" name="ticketloeschen" value="1" [TICKETLOESCHEN]>
</td>
</tr>
<tr>
<td>{|Ticket auf abgeschlossen setzen|}:</td>
<td>
<input type="checkbox" name="ticketabgeschlossen" value="1" [TICKETABGESCHLOSSEN]>
</td>
</tr>
<tr>
<td>{|Ausgehende E-Mailadresse|}:</td>
<td>
<input type="checkbox" name="ticketemaileingehend" value="1" [TICKETEMAILEINGEHEND]>
</td>
</tr>
</table>
</fieldset>
</div>
</div>
</div>
</div>
<div class="row">
<div class="row-height">
<div class="col-xs-12 col-md-12 col-md-height">
<div class="inside inside-full-height">
<fieldset>
<legend>{|Sonstiges|}</legend>
<table width="100%" border="0" class="mkTableFormular">
<tr>
<td>{|Automatisch antworten|}:</td>
<td>
<input type="checkbox" name="autoresponder" value="1" [AUTORESPONDER]>
</td>
</tr>
<tr>
<td width="200">{|Nur eine Antwort pro Tag|}:</td>
<td>
<input type="checkbox" name="autosresponder_blacklist" value="1" [AUTOSRESPONDER_BLACKLIST]>
</td>
</tr>
<tr>
<td>{|Automatische Antwort Betreff|}:</td>
<td>
<textarea id="autoresponderbetreff" name="autoresponderbetreff" rows="6" style="width:100%;">[AUTORESPONDERBETREFF]</textarea>
</td>
</tr>
<tr>
<td>{|Automatische Antwort Text|}:</td>
<td>
<textarea id="autorespondertext" name="autorespondertext" rows="6" style="width:100%;">[AUTORESPONDERTEXT]</textarea>
</td>
</tr>
<tr>
<td>{|Eigene Signatur verwenden|}:</td>
<td>
<input type="checkbox" name="eigenesignatur" value="1" [EIGENESIGNATUR]>
</td>
</tr>
<tr>
<td>{|Signatur|}:</td>
<td>
<textarea id="signatur" name="signatur" rows="6" style="width:100%;">[SIGNATUR]</textarea>
</td>
</tr>
<tr>
<td>{|Adresse|}:</td>
<td>
<input type="text" id="adresse" name="adresse" value="[ADRESSE]" size="40">
</td>
</tr>
<tr>
<td>{|Projekt|}:</td>
<td>
<input type="text" id="projekt" name="projekt" value="[PROJEKT]" size="40">
</td>
</tr>
<tr>
<td>{|Firma|}:</td>
<td>
<input type="text" name="firma" value="[FIRMA]" size="40">
</td>
<tr>
<td>{|Gesch&auml;ftsbriefvorlage|}:</td>
<td>
<input type="text" name="geschaeftsbriefvorlage" value="[GESCHAEFTSBRIEFVORLAGE]" size="40">
</td>
</tr>
</tr>
</table>
</fieldset>
</div>
</div>
</div>
</div>
<input type="submit" name="submit" value="Speichern" style="float:right" />
</form>
</div>
<form id="smtp_test" action="index.php">
<input type="text" name="module" value="emailbackup" style="display:none">
<input type="text" name="action" value="test_smtp" style="display:none">
<input type="text" name="id" value="[ID]" style="display:none">
</form>
<form id="imap_test" action = "index.php">
<input type="text" name="module" value="emailbackup" style="display:none">
<input type="text" name="action" value="test_imap" style="display:none">
<input type="text" name="id" value="[ID]" style="display:none">
<form id="imap_test" action="index.php">
<input type="text" name="module" value="emailbackup" style="display:none">
<input type="text" name="action" value="test_imap" style="display:none">
<input type="text" name="id" value="[ID]" style="display:none">
</form>

View File

@ -27,6 +27,10 @@
<td>{|Verbindlichkeiten:|}</td>
<td><input type="checkbox" name="verbindlichkeit" value="1" [VBCHECKED] /></td>
</tr>
<tr>
<td>{|Lieferantengutschriften:|}</td>
<td><input type="checkbox" name="lieferantengutschrift" value="1" [LGCHECKED] /></td>
</tr>
<tr>
<td>Datum von:</td>
<td><input type="text" name="von" id="von" value="[VON]" /></td>
@ -39,6 +43,14 @@
<td>Projekt:</td>
<td><input type="text" name="projekt" id="projekt" value="[PROJEKT]" /></td>
</tr>
<tr>
<td>Differenzen (Kopf/Positionen) ignorieren:</td>
<td><input type="checkbox" name="diffignore" value="1" [DIFFIGNORE] /></td>
</tr>
<tr>
<td>Konto f&uuml;r Differenzen:</td>
<td><input type="text" name="sachkonto" id="sachkonto" value="[SACHKONTO]" /></td>
</tr>
</table>
</fieldset>
</div>

View File

@ -0,0 +1,204 @@
<div id="tabs">
<ul>
<li><a href="#tabs-1"></a></li>
</ul>
<!-- Example for multiple tabs
<ul hidden">
<li><a href="#tabs-1">First Tab</a></li>
<li><a href="#tabs-2">Second Tab</a></li>
</ul>
-->
<div id="tabs-1">
[MESSAGE]
<form action="" method="post">
[FORMHANDLEREVENT]
<div class="row">
<div class="row-height">
<div class="col-xs-12 col-md-12 col-md-height">
<div class="inside inside-full-height">
<fieldset>
<legend>{|Einzelbuchung bearbeiten.|}</legend>
<table width="100%" border="0" class="mkTableFormular">
<tr>
<tr>
<td>
{|Von|}:
</td>
<td>
<a href="index.php?module=[VON_TYP]&id=[VON_ID]&action=edit">[VON]</a>
<input hidden type="text" name="von_typ" id="von_typ" value="[VON_TYP]" size="20">
<input hidden type="text" name="von_id" id="von_id" value="[VON_ID]" size="20">
</td>
</tr>
<tr>
<td>
{|Nach|}:
</td>
<td>
<a href="index.php?module=[NACH_TYP]&id=[NACH_ID]&action=edit">[NACH]</a>
<input hidden type="text" name="nach_typ" id="nach_typ" value="[NACH_TYP]" size="20">
<input hidden type="text" name="nach_id" id="nach_id" value="[NACH_ID]" size="20">
</td>
</tr>
<tr>
<td>
{|Betrag|}:
</td>
<td>
<input type="numeric" name="betrag" id="betrag" value="[BETRAG]" size="20">
</td>
</tr>
<tr>
<td>
{|W&auml;hrung|}:
</td>
<td>
<select name="waehrung">[WAEHRUNG]</select>
</td>
</tr>
<tr>
<td>
{|Benutzer|}:
</td>
<td>
[BENUTZER]
</td>
</tr>
<tr>
<td>
{|Datum|}:
</td>
<td>
<input type="text" name="datum" id="datum" value="[DATUM]" size="20">
</td>
</tr>
<tr>
<td>
{|Internebemerkung|}:
</td>
<td>
<textarea type="text" name="internebemerkung" id="internebemerkung" size="20">[INTERNEBEMERKUNG]</textarea>
</td>
</tr>
</table>
</fieldset>
<input type="submit" name="submit" value="Speichern" style="float:right"/>
</div>
</div>
</div>
</div>
[TAB1]
<!-- Example for 2nd row
<div class="row">
<div class="row-height">
<div class="col-xs-12 col-md-12 col-md-height">
<div class="inside inside-full-height">
<fieldset>
<legend>{|Another legend|}</legend>
<table width="100%" border="0" class="mkTableFormular">
<tr>
<td>
{|Von_typ|}:
</td>
<td>
<input type="text" name="von_typ" id="von_typ" value="[VON_TYP]" size="20">
</td>
</tr>
<tr>
<td>
{|Von_id|}:
</td>
<td>
<input type="text" name="von_id" id="von_id" value="[VON_ID]" size="20">
</td>
</tr>
<tr>
<td>
{|Nach_typ|}:
</td>
<td>
<input type="text" name="nach_typ" id="nach_typ" value="[NACH_TYP]" size="20">
</td>
</tr>
<tr>
<td>
{|Nach_id|}:
</td>
<td>
<input type="text" name="nach_id" id="nach_id" value="[NACH_ID]" size="20">
</td>
</tr>
<tr>
<td>
{|Betrag|}:
</td>
<td>
<input type="text" name="betrag" id="betrag" value="[BETRAG]" size="20">
</td>
</tr>
<tr>
<td>
{|Waehrung|}:
</td>
<td>
<input type="text" name="waehrung" id="waehrung" value="[WAEHRUNG]" size="20">
</td>
</tr>
<tr>
<td>
{|Benutzer|}:
</td>
<td>
<input type="text" name="benutzer" id="benutzer" value="[BENUTZER]" size="20">
</td>
</tr>
<tr>
<td>
{|Zeit|}:
</td>
<td>
<input type="text" name="zeit" id="zeit" value="[ZEIT]" size="20">
</td>
</tr>
<tr>
<td>
{|Internebemerkung|}:
</td>
<td>
<input type="text" name="internebemerkung" id="internebemerkung" value="[INTERNEBEMERKUNG]" size="20">
</td>
</tr>
</table>
</fieldset>
</div>
</div>
</div>
</div> -->
</form>
</div>
<!-- Example for 2nd tab
<div id="tabs-2">
[MESSAGE]
<form action="" method="post">
[FORMHANDLEREVENT]
<div class="row">
<div class="row-height">
<div class="col-xs-12 col-md-12 col-md-height">
<div class="inside inside-full-height">
<fieldset>
<legend>{|...|}</legend>
<table width="100%" border="0" class="mkTableFormular">
...
</table>
</fieldset>
</div>
</div>
</div>
</div>
<input type="submit" name="submit" value="Speichern" style="float:right"/>
</form>
</div>
-->
</div>

View File

@ -0,0 +1,105 @@
<form action="" method="post" id="buchungenform">
<div id="tabs">
<ul>
<li><a href="#tabs-1"><!--[TABTEXT]--></a></li>
</ul>
<div id="tabs-1">
[MESSAGE]
[FORMHANDLEREVENT]
<legend>{|Einzelsaldo zuordnen und auf mehrere Gegenbelege oder Sachkonto verbuchen.|}</legend>
<div class="row">
<div class="row-height">
<div class="col-xs-12 col-md-6 col-md-height">
<div class="inside inside-full-height">
<fieldset>
<table>
<tr>
<td>
"[DOC_ZUORDNUNG]"
</td>
</tr>
<tr>
<td>
Saldo: <u>[DOC_SALDO]</u>
</td>
</tr>
</table>
</fieldset>
</div>
</div>
<div class="col-xs-12 col-md-6 col-md-height">
<div class="inside inside-full-height">
<fieldset>
<table>
<tr>
<td>
Multifilter f&uuml;r "Info" (Trennzeichen ',; ')
</td>
</tr>
<tr>
<td>
<textarea type="text" name="multifilter" id="multifilter" style="width:100%;">[MULTIFILTER]</textarea>
</td>
<td>
<button name="submit" value="multifilter" class="ui-button-icon">{|Filtern|}</button>
</td>
</tr>
</table>
</fieldset>
</div>
</div>
</div>
</div>
<div class="row">
<div class="row-height">
<div class="col-xs-12 col-md-12 col-md-height">
<div class="inside inside-full-height">
[TAB1]
<fieldset>
<table>
<legend>Stapelverarbeitung</legend>
<tr>
<td><input type="checkbox" value="1" name="override" form="buchungenform" />&nbsp;Mit Abweichung buchen&nbsp;</td>
</tr>
<tr>
<td><input type="checkbox" value="1" id="autoalle" />&nbsp;alle markieren&nbsp;
<select id="sel_aktion" name="sel_aktion">
<option value="buchen">{|auf Ausgew&auml;hlte buchen|}</option>
<option value="buchen_diff_sachkonto">{|auf Ausgew&auml;hlte buchen, Gegenbeleg auf Sachkonto ausgleichen|}</option>
</select>&nbsp;Sachkonto:
<input type="text" id="sachkonto" name="sachkonto" value="">
<button name="submit" value="BUCHEN" class="ui-button-icon">{|BUCHEN|}</button>
</td>
</tr>
<tr>
<td>
<input type="number" name="abschlag" id="abschlag" value=[ABSCHLAG] />% Abschlag auf Buchungsbetrag</td>
</td>
</tr>
<tr>
<td>
<button name="submit" value="neuberechnen" class="ui-button-icon" style="width:100%;">
{|Buchungen neu berechnen|}
</button>
</td>
</tr>
</table>
</fieldset>
</div>
</div>
</div>
</div>
</div>
</div>
</form>
<script>
$('#autoalle').on('change',function(){
var wert = $(this).prop('checked');
$('#fibu_buchungen_einzelzuordnen').find('input[type="checkbox"]').prop('checked',wert);
$('#fibu_buchungen_einzelzuordnen').find('input[type="checkbox"]').first().trigger('change');
});
</script>

View File

@ -0,0 +1,62 @@
<div id="tabs">
<ul>
<li><a href="#tabs-1">Salden</a></li>
<li><a href="#tabs-2">Buchungen</a></li>
</ul>
<div id="tabs-1">
<legend>Salden&uuml;bersicht. Salden m&uuml;ssen &uuml;ber Gegenbuchungen ausgeglichen werden.<br><br></legend>
<form action="" enctype="multipart/form-data" method="POST">
[MESSAGE]
<div class="row">
<div class="row-height">
<div class="col-xs-12 col-md-10 col-md-height">
<div class="inside inside-full-height">
<fieldset>
[TAB1]
</fieldset>
</div>
</div>
<div class="col-xs-12 col-md-2 col-md-height">
<div class="inside inside-full-height">
<fieldset>
<table width="100%" border="0" class="mkTableFormular">
<legend>{|Aktionen|}</legend>
<td><button name="submit" value="neuberechnen" class="ui-button-icon" style="width:100%;">Buchungen neu berechnen</button></td></tr>
</table>
</fieldset>
</div>
</div>
</div>
</div>
</form>
[TAB1NEXT]
</div>
<div id="tabs-2">
<form action="#tabs-2" enctype="multipart/form-data" method="POST">
[MESSAGE]
<div class="row">
<div class="row-height">
<div class="col-xs-12 col-md-10 col-md-height">
<div class="inside inside-full-height">
<fieldset>
<legend>{|Einzelbuchungen|}</legend>
[TAB2]
</fieldset>
</div>
</div>
<div class="col-xs-12 col-md-2 col-md-height">
<div class="inside inside-full-height">
<fieldset>
<table width="100%" border="0" class="mkTableFormular">
<legend>{|Aktionen|}</legend>
<td><button name="submit" value="neuberechnen" class="ui-button-icon" style="width:100%;">Buchungen neu berechnen</button></td></tr>
</table>
</fieldset>
</div>
</div>
</div>
</div>
</form>
[TAB2NEXT]
</div>
</div>

View File

@ -0,0 +1,79 @@
<div id="tabs">
<ul>
<li><a href="#tabs-1"><!--[TABTEXT]--></a></li>
</ul>
<div id="tabs-1">
[MESSAGE]
[FORMHANDLEREVENT]
<div class="row">
<div class="row-height">
<div class="col-xs-12 col-md-12 col-md-height">
<div class="inside inside-full-height">
<fieldset>
<legend>{|Einzelsalden zuordnen und auf Gegenbelege oder Sachkonto verbuchen.|}</legend>
<div class="filter-box filter-usersave">
<div class="filter-block filter-inline">
<div class="filter-title">{|Filter|}</div>
<ul class="filter-list">
<li class="filter-item">
<label for="vorschlagfilter" class="switch">
<input type="checkbox" id="vorschlagfilter">
<span class="slider round"></span>
</label>
<label for="vorschlagfilter">{|Vorschl&auml;ge|}</label>
</li>
<li class="filter-item">
<label for="checkedfilter" class="switch">
<input type="checkbox" id="checkedfilter">
<span class="slider round"></span>
</label>
<label for="checkedfilter">{|Betrag korrekt|}</label>
</li>
</ul>
</div>
</div>
<form action="" method="post" id="buchungenform">
[TAB1]
</form>
</fieldset>
<fieldset>
<table>
<legend>Stapelverarbeitung</legend>
<tr>
<td><input type="checkbox" value="1" id="autoalle" />&nbsp;alle markieren&nbsp;
<select form="buchungenform" id="sel_aktion" name="sel_aktion">
<option value="vorschlag">{|auf Vorschlag buchen|}</option>
<option value="vorschlag_diff_sachkonto">{|auf Vorschlag buchen, Gegenbeleg auf Sachkonto ausgleichen|}</option>
<option value="sachkonto">{|auf Sachkonto buchen|}</option>
</select>&nbsp;Sachkonto:
<input type="text" form="buchungenform" id="sachkonto" name="sachkonto" value="">
<button name="submit" form="buchungenform" value="BUCHEN" class="ui-button-icon">{|BUCHEN|}</button>
</td>
</tr>
<tr>
<form action="" method="post">
<td>
<button name="submit" value="neuberechnen" class="ui-button-icon" style="width:100%;">
{|Buchungen neu berechnen|}
</button>
</td>
</form>
</tr>
</table>
</fieldset>
</div>
</div>
</div>
</div>
</div>
</div>
<script>
$('#autoalle').on('change',function(){
var wert = $(this).prop('checked');
$('#fibu_buchungen_zuordnen').find('input[type="checkbox"]').prop('checked',wert);
$('#fibu_buchungen_zuordnen').find('input[type="checkbox"]').first().trigger('change');
});
</script>

View File

@ -775,6 +775,10 @@
<td>Nächste Verbindlichkeitsnummer:</td><td><input type="text" name="next_verbindlichkeit" readonly value="[NEXT_VERBINDLICHKEIT]" size="40">
<input type="button" onclick="next_number('verbindlichkeit','[NEXT_VERBINDLICHKEIT]');" value="bearbeiten"></td>
</tr>
<tr>
<td>Nächste Lieferantengutschriftnummer:</td><td><input type="text" name="next_lieferantengutschrift" readonly value="[NEXT_LIEFERANTENGUTSCHRIFT]" size="40">
<input type="button" onclick="next_number('lieferantengutschrift','[NEXT_LIEFERANTENGUTSCHRIFT]');" value="bearbeiten"></td>
</tr>
<tr>
<td>N&auml;chste Kundennummer:</td><td><input type="text" name="next_kundennummer" readonly value="[NEXT_KUNDENNUMMER]" size="40">
<input type="button" onclick="next_number('kundennummer','[NEXT_KUNDENNUMMER]');" value="bearbeiten"></td>
@ -1101,6 +1105,26 @@
</div>
</div>
<div class="row">
<div class="row-height">
<div class="col-xs-12 col-md-6 col-md-height">
<div class="inside inside-full-height">
<fieldset>
<legend>{|Finanzbuchhaltung Einstellungen|}</legend>
<table width="100%">
<tr>
<td width="300">Buchungen erzeugen ab Datum:</td><td colspan="3"><input type="text" id= "fibu_buchungen_startdatum" name="fibu_buchungen_startdatum" size="10" value="[FIBU_BUCHUNGEN_STARTDATUM]"><i>F&uuml;r die Nutzung mit dem Modul Buchhaltung-Buchungen (Zahlungseingang, Zahlungsstatus, Mahnwesen)</i></td>
</tr>
<tr>
<td width="300">Konto f&uuml;r Rechnung-Skontobuchungen:</td><td colspan="3"><input type="text" id= "rechnung_skonto_kontorahmen" name="rechnung_skonto_kontorahmen" size="10" value="[RECHNUNG_SKONTO_KONTORAHMEN]"><i>Auf dieses Sachkonto werden Skontobuchungen mithilfe der Funktion "Zahlungsstatus berechnen" im Rechnungsmodul gebucht</i></td>
</tr>
</table>
</fieldset>
</div>
</div>
</div>
</div>
<!--
<fieldset><legend>Finanzbuchhaltung Export Kontenrahmen - Weitere Kostenarten</legend>
<table>
@ -1392,6 +1416,7 @@
<tr><td width="300">[BEZEICHNUNGANGEBOTERSATZ] als Standard:</td><td><input type="checkbox" name="angebotersatz_standard" [ANGEBOTERSATZ_STANDARD]></td></tr>
<tr><td width="300">Beschriftung Abweichend Auftrag:</td><td><input type="text" name="bezeichnungauftragersatz" data-lang="bezeichnungauftragersatz" value="[BEZEICHNUNGAUFTRAGERSATZ]">&nbsp;<i>Beschriftung im Auftrag</i></td></tr>
<tr><td width="300">Beschriftung Abweichend Rechnung:</td><td><input type="text" name="bezeichnungrechnungersatz" data-lang="bezeichnungrechnungersatz" value="[BEZEICHNUNGRECHNUNGERSATZ]">&nbsp;<i>Beschriftung in Rechnung</i></td></tr>
<tr><td width="300">[BEZEICHNUNGRECHNUNGERSATZ] als Standard:</td><td><input type="checkbox" name="rechnungersatz_standard" [RECHNUNGERSATZ_STANDARD]></td></tr>
<tr><td width="300">Beschriftung Abweichend Gutschrift:</td><td><input type="text" name="bezeichnungstornorechnung" data-lang="bezeichnungstornorechnung" value="[BEZEICHNUNGSTORNORECHNUNG]">&nbsp;<i>laut 06/2013 §14 UStG</i></td></tr>
<tr><td width="300">[BEZEICHNUNGSTORNORECHNUNG] als Standard:</td><td><input type="checkbox" name="stornorechnung_standard" [STORNORECHNUNG_STANDARD]></td></tr>
<tr><td width="300">Beschriftung Abweichend Lieferschein:</td><td><input type="text" name="bezeichnunglieferscheinersatz" data-lang="bezeichnunglieferscheinersatz" value="[BEZEICHNUNGLIEFERSCHEINERSATZ]">&nbsp;<i>Beschriftung in Lieferschein</i></td></tr>

View File

@ -15,7 +15,7 @@
<tr>
<td><input type="checkbox" id="angeboteoffen">&nbsp;Fehlende Artikel</td>
<td><input type="checkbox" id="angeboteoffen">&nbsp;Artikel im Zulauf</td>
<td><input type="checkbox" id="angeboteheute">&nbsp;Gersperrte Artikel</td>
<td><input type="checkbox" id="angeboteheute">&nbsp;Gesperrte Artikel</td>
<td>Artikelgruppen: <select><option>alle</option><option>Waren 700000</option></select></td>
</tr></table>
</center>
@ -121,7 +121,8 @@
<li>{|ZahlungDiff|} <i>{|Variablen|}: {AUFTRAG}, {DATUM}, {GESAMT}, {REST}, {ANSCHREIBEN}, {INTERNET}</i></li>
<li>{|Stornierung|} <i>{|Variablen|}: {AUFTRAG}, {DATUM}, {INTERNET}</i></li>
<li>{|ZahlungMiss|} <i>{|Variablen|}: {AUFTRAG}, {DATUM}, {GESAMT}, {REST}, {ANSCHREIBEN}, {INTERNET}</i></li>
<li>{|Versand|} <i>{|Variablen|}: {VERSAND}, {VERSANDTYPE}, {VERSANDBEZEICHNUNG}, {TRACKINGNUMMER}, {NAME}, {ANSCHREIBEN}, {BELEGNR}, {IHREBESTELLNUMMER}, {INTERNET}, {AUFTRAGDATUM}, {LIEFERADRESSE}, {LIEFERADRESSELANG}</i></li>
<li>Mahnung <i>Variablen: {BELEGNR}, {DATUM}, {OFFEN}, {MAHNGEBUEHR}, {HEUTE}</i></li>
<li>{|Versand|} <i>{|Variablen|}: {VERSAND}, {VERSANDTYPE}, {VERSANDBEZEICHNUNG}, {TRACKINGNUMMER}, {TRACKINGLINK}, {NAME}, {ANSCHREIBEN}, {BELEGNR}, {IHREBESTELLNUMMER}, {INTERNET}, {AUFTRAGDATUM}, {LIEFERADRESSE}, {LIEFERADRESSELANG}</i></li>
<li>{|VersandMailDokumente|} <i>{|Variablen|}: {NAME}, {ANSCHREIBEN}, {BELEGNR}, {IHREBESTELLNUMMER}, {INTERNET}, {AUFTRAGDATUM}</i></li>
<li>{|Erweiterte Freigabe|} <i>{|Variablen|}: {REQUESTER}, {LINK}, {LINKFREIGABEUEBERSICHT}, {DOCTYPE}, {DOCTYPE_ID}</i></li>
<li>{|Selbstabholer|}</li>

View File

@ -39,7 +39,7 @@
</div>
<div style="background-color:white">
<h2 class="greyh2">{|Zahlungseingang|}</h2>
<h2 class="greyh2">Buchungen</h2>
<div style="padding:10px">
[ZAHLUNGEN]
</div>
@ -58,12 +58,6 @@
</div>
</div>
<div style="background-color:white">
<h2 class="greyh2">Deckungsbeitrag</h2>
<div style="padding:10px">
<div class="info">Dieses Modul ist erst ab Version Professional verfügbar</div>
</div>
</div>
</div>

View File

@ -45,8 +45,8 @@
<input type="checkbox" id="auswahlalle" onchange="alleauswaehlen();" />&nbsp;{|alle markieren|}&nbsp;
<select id="sel_aktion" name="sel_aktion">
<option value="">{|bitte w&auml;hlen|} ...</option>
<option value="erledigtam">{|als erledigt markieren|}</option>
<option value="offen">{|erledigt Markierung entfernen|}</option>
[ALSBEZAHLTMARKIEREN]
<option value="offen">{|als offen markieren|}</option>
<option value="mail">{|per Mail versenden|}</option>
<option value="versendet">{|als versendet markieren|}</option>
<option value="pdf">{|Sammel-PDF|}</option>

View File

@ -6,7 +6,9 @@
<li><a href="#tabs-3">{|Zeiterfassung|}</a></li>
<li><a href="#tabs-4">{|Wiedervorlagen|}</a></li>
<li><a href="#tabs-5">{|Notizen|}</a></li>
<li><a href="#tabs-6">{|Kontorahmen|}</a></li>
<li><a href="#tabs-6">{|Kontenrahmen|}</a></li>
<li><a href="#tabs-7">{|Kontoauszug|}</a></li>
<li><a href="#tabs-8">{|St&uuml;ckliste|}</a></li>
</ul>
<div id="tabs-1">
@ -508,7 +510,7 @@
<div class="row">
<div class="col-xs-12 col-sm-1 col-sm-height">
<div class="inside inside-full-height">
<fieldset><legend>{|Kontorahmen|}</legend>
<fieldset><legend>{|Kontenrahmen|}</legend>
<table class="mkTable">
<tr>
<th>Variable</th>
@ -551,4 +553,143 @@
</div>
</div>
</div>
<div id="tabs-7">
<div class="row">
<div class="col-xs-12 col-sm-1 col-sm-height">
<div class="inside inside-full-height">
<fieldset><legend>{|Kontoauszug|}</legend>
<table class="mkTable">
<tr>
<th>Variable</th>
<th>Beschreibung</th>
<th>Kommentar</th>
</tr>
<tr>
<td>konto</td>
<td>Konto-Kurzbezeichnung</td>
<td></td>
</tr>
<tr>
<td>buchung</td>
<td>Buchungsdatum</td>
<td>Im Format DD.MM.YYYY</td>
</tr>
<tr>
<td>betrag</td>
<td>Betrag</td>
<td></td>
</tr>
<tr>
<td>betrag2</td>
<td>Betrag (wenn z.B. Soll / Haben getrennt)</td>
<td></td>
</tr>
<tr>
<td>waehrung</td>
<td>W&auml;hrung</td>
<td>Muss in den W&auml;hrungen vorhanden sein</td>
</tr>
<tr>
<td>buchungstext</td>
<td>Buchungstext</td>
<td>Wird für die Zuordnung verwendet</td>
</tr>
<tr>
<td>buchungstext2</td>
<td>Buchungstext</td>
<td>Wird für die Zuordnung verwendet</td>
</tr>
<tr>
<td>buchungstext3</td>
<td>Buchungstext</td>
<td>Wird für die Zuordnung verwendet</td>
</tr>
<tr>
<td>buchungstext4</td>
<td>Buchungstext</td>
<td>Wird für die Zuordnung verwendet</td>
</tr>
</table>
</fieldset>
</div>
</div>
</div>
</div>
<div id="tabs-8">
<div class="row">
<div class="col-xs-12 col-sm-1 col-sm-height">
<div class="inside inside-full-height">
<fieldset><legend>{|St&uuml;ckliste|}</legend>
<table class="mkTable">
<tr>
<th>Variable</th>
<th>Beschreibung</th>
<th>Kommentar</th>
</tr>
<tr>
<td>stuecklistevonartikel</td>
<td>Hauptartikel (muss eine St&uuml;ckliste sein)</td>
<td>Artikelnummer</td>
</tr>
<tr>
<td>artikel</td>
<td></td>
<td>Artikelnummer</td>
</tr>
<tr>
<td>menge</td>
<td>Zahl</td>
<td></td>
</tr>
<tr>
<td>referenz</td>
<td>Text</td>
<td>F&uuml;r Best&uuml;ckungen</td>
</tr>
<tr>
<td>place</td>
<td>Leer oder 'DNP' = Nicht platzieren</td>
<td>F&uuml;r Best&uuml;ckungen</td>
</tr>
<tr>
<td>layer</td>
<td>"top" oder "bottom"</td>
<td>F&uuml;r Best&uuml;ckungen</td>
</tr>
<tr>
<td>wert</td>
<td>Text</td>
<td>F&uuml;r Best&uuml;ckungen</td>
</tr>
<tr>
<td>bauform</td>
<td>Text</td>
<td>F&uuml;r Best&uuml;ckungen</td>
</tr>
<tr>
<td>zachse</td>
<td>Zahl</td>
<td>F&uuml;r Best&uuml;ckungen</td>
</tr>
<tr>
<td>xpos</td>
<td>Zahl</td>
<td>F&uuml;r Best&uuml;ckungen</td>
</tr>
<tr>
<td>ypos</td>
<td>Zahl</td>
<td>F&uuml;r Best&uuml;ckungen</td>
</tr>
<tr>
<td>art</td>
<td>Einkaufsteil "et",Informationsteil "it" oder Beistellung "bt"</td>
<td>Alternativposition?</td>
</tr>
</table>
</fieldset>
</div>
</div>
</div>
</div>
</div>

View File

@ -8,7 +8,7 @@
<!--<td width="25%"><a href="index.php?module=shopexport&action=list"><img src="./themes/[THEME]/images/einstellungen/Icons_dunkel_20.gif" border="0" width="30%"></a></td>-->
</tr>
<tr align="center">
<td><a href="index.php?module=importvorlage&action=list">{|Stammdaten|} <br>{|Import|}</a></td>
<td><a href="index.php?module=importvorlage&action=list">{|Daten|} <br>{|Import|}</a></td>
<td><a href="index.php?module=exportvorlage&action=list">{|Stammdaten|} <br>{|Export|}</a></td>
<!--<td><a href="index.php?module=adresse_import&action=list">{|Intranet|}</a></td>-->
<td><a href="index.php?module=shopimport&action=list">{|Import|}<br>({|Online-Shop|})</a></td>
@ -17,7 +17,7 @@
<tr><td colspan="99">&nbsp;</td></tr>
<tr align="center">
<td width="25%"><a href="index.php?module=exportbelegepositionen&action=export"><img src="./themes/[THEME]/images/einstellungen/Icons_dunkel_1.gif" border="0" width="30%"></a></td>
<td width="25%"><a href="index.php?module=exportbuchhaltung&action=export"><img src="./themes/[THEME]/images/einstellungen/Icons_dunkel_1.gif" border="0" width="30%"></a></td>
<td width="25%"><a href="index.php?module=exportbuchhaltung&action=export"><img src="./themes/[THEME]/images/einstellungen/Icons_dunkel_19.gif" border="0" width="30%"></a></td>
<td width="25%">[BELEGEIMPORTSTART]<a href="index.php?module=belegeimport&action=list"><img src="./themes/[THEME]/images/einstellungen/Icons_dunkel_1.gif" border="0" width="30%"></a>[BELEGEIMPORTEND]</td>
<!--<td width="25%"><a href="index.php?module=shopexport&action=list"><img src="./themes/[THEME]/images/einstellungen/Icons_dunkel_20.gif" border="0" width="30%"></a></td>-->
</tr>

View File

@ -18,37 +18,66 @@
<legend>{|Einstellungen|}</legend>
<table width="100%">
<tr>
<td width="150">{|Bezeichnung|}:</td>
<td><input type="text" name="bezeichnung" id="bezeichnung" size="40" rule="notempty"
msg="Pflichfeld!" tabindex="2" value="[BEZEICHNUNG]"></td>
<td width="150">
{|Kurzbezeichnung|}:
</td>
<td>
<input type="text" name="kurzbezeichnung" id="kurzbezeichnung" size="40" rule="notempty" msg="Pflichfeld!" tabindex="2" value="[KURZBEZEICHNUNG]" required><i>{|Muss eindeutig sein.|}</i>
</td>
</tr>
<tr>
<td width="150">
{|Bezeichnung|}:
</td>
<td>
<input type="text" name="bezeichnung" id="bezeichnung" size="40" rule="notempty" msg="Pflichfeld!" tabindex="2" value="[BEZEICHNUNG]" required>
</td>
</tr>
<tr>
<td>{|Typ|}:</td>
<td>
{|Typ|}:
</td>
<td>
<!--
<select name="type" id="type">
[TYPE]
</select>
-->
<input type="text" name="type" id="type" size="40" value="konto" required readonly>
</td>
</tr>
<tr>
<td>{|Projekt|}:</td>
<td><input type="text" size="30" name="projekt" id="projekt" value="[PROJEKT]"></td>
<td>
{|Projekt|}:
</td>
<td>
<input type="text" size="30" name="projekt" id="projekt" value="[PROJEKT]">
</td>
</tr>
<tr>
<td>{|Aktiv|}:</td>
<td><input type="checkbox" name="aktiv" id="aktiv" value="1"
[AKTIV]><i>{|Aktiv. Nicht mehr verwendete Konten k&ouml;nnen deaktiviert werden.|}</i>
<td>
{|Aktiv|}:
</td>
<td>
<input type="checkbox" name="aktiv" id="aktiv" value="1"
[AKTIV]><i>{|Aktiv. Nicht mehr verwendete Konten k&ouml;nnen deaktiviert werden.|}</i>
</td>
</tr>
<tr>
<td>{|Keine E-Mail|}:</td>
<td><input type="checkbox" name="keineemail" id="keineemail" value="1"
[KEINEEMAIL]><i>{|Normalerweise wird beim Zahlungseingang eine Mail an den Kunden gesendet. Soll dies unterdr&uuml;ckt werden muss diese Option gesetzt werden.|}</i>
<td>
{|Keine E-Mail|}:
</td>
<td>
<input type="checkbox" name="keineemail" id="keineemail" value="1"
[KEINEEMAIL]><i>{|Normalerweise wird beim Zahlungseingang eine Mail an den Kunden gesendet. Soll dies unterdr&uuml;ckt werden muss diese Option gesetzt werden.|}</i>
</td>
</tr>
<tr>
<td>{|&Auml;nderungen erlauben|}:</td>
<td><input type="checkbox" name="schreibbar" id="schreibbar" value="1"
<td>
{|&Auml;nderungen erlauben|}:
</td>
<td>
<input type="checkbox" name="schreibbar" id="schreibbar" value="1"
[SCHREIBBAR]><i>&nbsp;{|Es d&uuml;rfen nachtr&auml;glich Kontobuchungen ver&auml;ndert werden|}</i>
</td>
</tr>
@ -66,38 +95,71 @@
<legend>{|Bankverbindung (bei Typ Bank)|}</legend>
<table width="100%">
<tr>
<td width="150">{|Inhaber|}:</td>
<td><input type="text" name="inhaber" id="inhaber" size="40" value="[INHABER]"></td>
<td width="150">{|Inhaber|}:
</td>
<td>
<input type="text" name="inhaber" id="inhaber" size="40" value="[INHABER]">
</td>
<td>
</tr>
<tr>
<td>{|BIC|}:</td>
<td><input type="text" name="swift" id="swift" size="40" value="[SWIFT]"></td>
<td>
{|BIC|}:
</td>
<td>
<input type="text" name="swift" id="swift" size="40" value="[SWIFT]">
</td>
<td>
</tr>
<tr>
<td>{|IBAN|}:</td>
<td><input type="text" name="iban" id="iban" size="40" value="[IBAN]"></td>
<td>
{|IBAN|}:
</td>
<td>
<input type="text" name="iban" id="iban" size="40" value="[IBAN]">
</td>
<td>
</tr>
<tr>
<td>{|BLZ|}:</td>
<td><input type="text" name="blz" id="blz" size="40" value="[BLZ]"></td>
<td>
{|BLZ|}:
</td>
<td>
<input type="text" name="blz" id="blz" size="40" value="[BLZ]">
</td>
<td>
</tr>
<tr>
<td>{|Konto|}:</td>
<td><input type="text" name="konto" id="konto" size="40" value="[KONTO]"></td>
<td>
{|Konto|}:
</td>
<td>
<input type="text" name="konto" id="konto" size="40" value="[KONTO]">
</td>
<td>
</tr>
<tr>
<td>{|Gl&auml;ubiger ID|}:</td>
<td><input type="text" name="glaeubiger" id="glaeubiger" size="40" value="[GLAEUBIGER]"></td>
<td>
{|Gl&auml;ubiger ID|}:
</td>
<td>
<input type="text" name="glaeubiger" id="glaeubiger" size="40" value="[GLAEUBIGER]">
</td>
<td>
</tr>
<tr>
<td>{|Lastschrift|}:</td>
<td><input type="checkbox" name="lastschrift" id="lastschrift" value="1" [LASTSCHRIFT]></td>
<td>
{|Lastschrift|}:
</td>
<td>
<input type="checkbox" name="lastschrift" id="lastschrift" value="1" [LASTSCHRIFT]>
</td>
</tr>
</table>
</fieldset>
@ -113,9 +175,13 @@
<legend>{|DATEV|}</legend>
<table width="100%">
<tr>
<td width="150">{|Konto|}:</td>
<td><input type="text" name="datevkonto" id="datevkonto" size="40" value="[DATEVKONTO]"></td>
<td width="150">{|Konto|}:
</td>
<td>
<input type="text" name="datevkonto" id="datevkonto" size="40" value="[DATEVKONTO]">
</td>
<td>
</tr>
</table>
</fieldset>
@ -123,6 +189,7 @@
</div>
</div>
</div>
<!--
<div class="row">
<div class="row-height">
<div class="col-xs-12 col-md-12 col-md-height">
@ -131,46 +198,68 @@
<legend>{|CSV-Import|}</legend>
<table width="100%">
<tr>
<td width="150">{|Erste Datenzeile|}:</td>
<td><input type="text" name="importerstezeilenummer" id="importerstezeilenummer" size="15"
value="[IMPORTERSTEZEILENUMMER]">&nbsp;
<i>{|Zeilennummer in der echte Daten stehen (Erste Zeile: 1)|}</i></td>
</tr>
<tr>
<td width="150">{|Kodierung|}:</td>
<td><select name="codierung" id="codierung">[CODIERUNG]</select></td>
</tr>
<tr>
<td width="150">{|Trennzeichen|}:</td>
<td><select name="importtrennzeichen" id="importtrennzeichen">[IMPORTTRENNZEICHEN]</select></td>
</tr>
<tr>
<td width="150">{|Maskierung|}:</td>
<td width="150">{|Erste Datenzeile|}:
</td>
<td>
<input type="text" name="importerstezeilenummer" id="importerstezeilenummer" size="15"
value="[IMPORTERSTEZEILENUMMER]">&nbsp;
<i>{|Zeilennummer in der echte Daten stehen (Erste Zeile: 1)|}</i>
</td>
</tr>
<tr>
<td width="150">{|Kodierung|}:
</td>
<td>
<select name="codierung" id="codierung">[CODIERUNG]</select>
</td>
</tr>
<tr>
<td width="150">{|Trennzeichen|}:
</td>
<td>
<select name="importtrennzeichen" id="importtrennzeichen">[IMPORTTRENNZEICHEN]</select>
</td>
</tr>
<tr>
<td width="150">{|Maskierung|}:
</td>
<td>
<select name="importdatenmaskierung" id="importdatenmaskierung">
[IMPORTDATENMASKIERUNG]
</select>
</td>
</tr>
<tr>
<td width="150">{|Nullbytes entfernen|}:</td>
<td><input type="checkbox" name="importnullbytes" id="importnullbytes" value="1" [IMPORTNULLBYTES]>
<td width="150">{|Nullbytes entfernen|}:
</td>
<td>
<input type="checkbox" name="importnullbytes" id="importnullbytes" value="1" [IMPORTNULLBYTES]>
</td>
</tr>
<tr>
<td width="150">{|Letzte Zeilen ignorieren|}:</td>
<td><input type="text" size="15" name="importletztenzeilenignorieren"
id="importletztenzeilenignorieren" value="[IMPORTLETZTENZEILENIGNORIEREN]"></td>
<td width="150">{|Letzte Zeilen ignorieren|}:
</td>
<td>
<input type="text" size="15" name="importletztenzeilenignorieren"
id="importletztenzeilenignorieren" value="[IMPORTLETZTENZEILENIGNORIEREN]">
</td>
</tr>
</table>
<br><br>
<table>
<tr>
<td width="150">{|Spalte in CSV|}</td>
<td>{|Spalten 1 bis n (Spaltennummer in CSV).|}</tr>
<td width="150">{|Spalte in CSV|}
</td>
<td>
{|Spalten 1 bis n (Spaltennummer in CSV).|}</tr>
<tr>
<td width="150">{|Datum|}:</td>
<td><input type="text" name="importfelddatum" id="importfelddatum" size="15"
<td width="150">{|Datum|}:
</td>
<td>
<input type="text" name="importfelddatum" id="importfelddatum" size="15"
value="[IMPORTFELDDATUM]">
&nbsp;{|Eingabeformat|}:&nbsp;<input type="text" name="importfelddatumformat"
id="importfelddatumformat" size="20"
@ -179,67 +268,103 @@
id="importfelddatumformatausgabe" size="20"
value="[IMPORTFELDDATUMFORMATAUSGABE]">
<br><i>{|Bsp. 24.12.2016 in CSV entspricht Eingabeformat %1.%2.%3 und Ausgabeformat %3-%2-%1 (Ausgabe muss immer auf diese Format gebracht werden YYYY-MM-DD)|}</i>
</td>
</tr>
<tr>
<td width="150">{|Betrag|}:</td>
<td><input type="text" name="importfeldbetrag" id="importfeldbetrag" size="15"
value="[IMPORTFELDBETRAG]"></td>
</tr>
<tr>
<td width="150">{|Extra Haben u. Soll|}:</td>
<td><input type="checkbox" name="importextrahabensoll" id="importextrahabensoll" value="1" size="15"
[IMPORTEXTRAHABENSOLL] /></td>
</tr>
<tr>
<td></td>
<td width="150">{|Betrag|}:
</td>
<td>
<input type="text" name="importfeldbetrag" id="importfeldbetrag" size="15"
value="[IMPORTFELDBETRAG]">
</td>
</tr>
<tr>
<td width="150">{|Extra Haben u. Soll|}:
</td>
<td>
<input type="checkbox" name="importextrahabensoll" id="importextrahabensoll" value="1" size="15"
[IMPORTEXTRAHABENSOLL] />
</td>
</tr>
<tr>
<td>
</td>
<td>
<table>
<tr>
<td width="150">{|Haben|}:</td>
<td><input type="text" name="importfeldhaben" id="importfeldhaben" size="15"
value="[IMPORTFELDHABEN]"></td>
<td width="150">{|Haben|}:
</td>
<td>
<input type="text" name="importfeldhaben" id="importfeldhaben" size="15"
value="[IMPORTFELDHABEN]">
</td>
</tr>
<tr>
<td width="150">{|Soll|}:</td>
<td><input type="text" name="importfeldsoll" id="importfeldsoll" size="15"
value="[IMPORTFELDSOLL]"></td>
<td width="150">{|Soll|}:
</td>
<td>
<input type="text" name="importfeldsoll" id="importfeldsoll" size="15"
value="[IMPORTFELDSOLL]">
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td width="150">{|Buchungstext|}:</td>
<td><input type="text" name="importfeldbuchungstext" id="importfeldbuchungstext" size="15"
<td width="150">{|Buchungstext|}:
</td>
<td>
<input type="text" name="importfeldbuchungstext" id="importfeldbuchungstext" size="15"
value="[IMPORTFELDBUCHUNGSTEXT]">&nbsp;<i> {|Mit + mehre Spalten zusammenf&uuml;gen (aus dem Inhalt wird eine Pr&uuml;fsumme berechnet, daher so eindeutig wie m&ouml;glich machen.)|}</i>
</td>
</tr>
<tr>
<td width="150">{|W&auml;hrung|}:</td>
<td><input type="text" name="importfeldwaehrung" id="importfeldwaehrung" size="15"
value="[IMPORTFELDWAEHRUNG]">&nbsp;<i>{|Ziel: EUR, USD|}</i></td>
</tr>
<tr>
<td width="150">{|Haben/Soll Kennung|}:</td>
<td><input type="text" name="importfeldhabensollkennung" id="importfeldhabensollkennung" size="15"
value="[IMPORTFELDHABENSOLLKENNUNG]">&nbsp;<i>{|Extra Spalte in der steht was der Betrag ist.|}</i>
<td width="150">{|W&auml;hrung|}:
</td>
</tr>
<tr>
<td width="150"></td>
<td>
<input type="text" name="importfeldwaehrung" id="importfeldwaehrung" size="15"
value="[IMPORTFELDWAEHRUNG]">&nbsp;<i>{|Ziel: EUR, USD|}</i>
</td>
</tr>
<tr>
<td width="150">{|Haben/Soll Kennung|}:
</td>
<td>
<input type="text" name="importfeldhabensollkennung" id="importfeldhabensollkennung" size="15"
value="[IMPORTFELDHABENSOLLKENNUNG]">&nbsp;<i>{|Extra Spalte in der steht was der Betrag ist.|}</i>
</td>
</tr>
<tr>
<td width="150">
</td>
<td>
<table>
<tr>
<td width="150">{|Markierung Eingang|}:</td>
<td><input type="text" name="importfeldkennunghaben" id="importfeldkennunghaben" size="15"
value="[IMPORTFELDKENNUNGHABEN]">&nbsp;<i>{|z.B. H oder +|}</i></td>
<td width="150">{|Markierung Eingang|}:
</td>
<td>
<input type="text" name="importfeldkennunghaben" id="importfeldkennunghaben" size="15"
value="[IMPORTFELDKENNUNGHABEN]">&nbsp;<i>{|z.B. H oder +|}</i>
</td>
</tr>
<tr>
<td>{|Markierung Ausgang|}:&nbsp;</td>
<td><input type="text" name="importfeldkennungsoll" id="importfeldkennungsoll" size="15"
value="[IMPORTFELDKENNUNGSOLL]">&nbsp;<i>{|z.B. S oder -|}</i></td>
<td>
{|Markierung Ausgang|}:&nbsp;
</td>
<td>
<input type="text" name="importfeldkennungsoll" id="importfeldkennungsoll" size="15"
value="[IMPORTFELDKENNUNGSOLL]">&nbsp;<i>{|z.B. S oder -|}</i>
</td>
</tr>
</table>
</td>
</tr>
</table>
@ -256,37 +381,56 @@
<legend>{|Live-Import|}</legend>
<table id="liveimport-table">
<tr>
<td>{|Live-Import aktiv|}:</td>
<td><input type="checkbox" name="liveimport_online" id="liveimport_online" value="1"
[LIVEIMPORT_ONLINE]></td>
<td>
{|Live-Import aktiv|}:
</td>
<td>
<input type="checkbox" name="liveimport_online" id="liveimport_online" value="1"
[LIVEIMPORT_ONLINE]>
</td>
</tr>
<tr>
<td>{|Zeitraum|}:</td>
<td>
{|Zeitraum|}:
</td>
<td>
<select name="importperiode_in_hours" id="importperiode_in_hours">
[IMPORTPERIODE_IN_HOURS]
</select> {|Stunden|}
</td>
</tr>
<tr>
<td>
{|zu Zeiten|}:
</td>
<td>
[SCHEDULER]
</td>
</tr>
[BEFORELIVEIMPORT]
<tr>
<td width="150">{|Zugangsdaten|}:</td>
<td><textarea rows="5" cols="100" name="liveimport" id="liveimport">[LIVEIMPORT]</textarea></td>
<td width="150">{|Zugangsdaten|}:
</td>
<td>
<textarea rows="5" cols="100" name="liveimport" id="liveimport">[LIVEIMPORT]</textarea>
</td>
</tr>
[AFTERLIVEIMPORT]
<tr>
<td>{|Passwort Tresor|}:</td>
<td><input type="button" value="{|Passwort setzen|}"
<td>
{|Passwort Tresor|}:
</td>
<td>
<input type="button" value="{|Passwort setzen|}"
id="setpassword"/>
<i>{|Der Inhalt des Passwort-Tresors kann in der Datenstruktur der Zugangsdaten über die Variable {PASSWORT} genutzt werden.|}</i>
</td>
</tr>
</table>
@ -316,13 +460,21 @@
<legend>{|Prozessstarter|}</legend>
<table>
<tr>
<td>{|Zahlungseing&auml;nge automatisch abholen|}:</td>
<td><input type="checkbox" name="cronjobaktiv" id="cronjobaktiv" value="1" [CRONJOBAKTIV]></td>
<td>
{|Zahlungseing&auml;nge automatisch abholen|}:
</td>
<td>
<input type="checkbox" name="cronjobaktiv" id="cronjobaktiv" value="1" [CRONJOBAKTIV]>
</td>
</tr>
<tr>
<td>{|Zahlungseing&auml;nge automatisch verbuchen|}:</td>
<td><input type="checkbox" name="cronjobverbuchen" id="cronjobverbuchen" value="1"
[CRONJOBVERBUCHEN]></td>
<td>
{|Zahlungseing&auml;nge automatisch verbuchen|}:
</td>
<td>
<input type="checkbox" name="cronjobverbuchen" id="cronjobverbuchen" value="1"
[CRONJOBVERBUCHEN]>
</td>
</tr>
</table>
</fieldset>
@ -330,6 +482,7 @@
</div>
</div>
</div>
-->
<div class="row">
<div class="row-height">
<div class="col-xs-12 col-md-12 col-md-height">
@ -338,20 +491,32 @@
<legend>{|Startwert für Konto|}</legend>
<table width="100%">
<tr>
<td width="150">{|Summieren|}:</td>
<td><input type="checkbox" name="saldo_summieren" id="saldo_summieren" value="1" [SALDO_SUMMIEREN]>
<td width="150">{|Summieren|}:
</td>
<td>
<input type="checkbox" name="saldo_summieren" id="saldo_summieren" value="1" [SALDO_SUMMIEREN]>
</td>
<td>
</tr>
<tr>
<td width="150">{|Datum Saldo|}:</td>
<td><input type="text" name="saldo_datum" id="saldo_datum" size="40" value="[SALDO_DATUM]"></td>
<td width="150">{|Datum Saldo|}:
</td>
<td>
<input type="text" name="saldo_datum" id="saldo_datum" size="40" value="[SALDO_DATUM]">
</td>
<td>
</tr>
<tr>
<td width="150">{|Betrag Saldo|}:</td>
<td><input type="text" name="saldo_betrag" id="saldo_betrag" size="40" value="[SALDO_BETRAG]"></td>
<td width="150">{|Betrag Saldo|}:
</td>
<td>
<input type="text" name="saldo_betrag" id="saldo_betrag" size="40" value="[SALDO_BETRAG]">
</td>
<td>
</tr>
</table>
</fieldset>
@ -359,8 +524,7 @@
</div>
</div>
</div>
<input type="hidden" name="save" value="1" />
<input type="submit" value="{|Speichern|}" style="float:right"/>
<input type="submit" name="submit" value="Speichern" style="float:right"/>
</form>
</div>
<!-- tab view schließen -->
@ -372,8 +536,11 @@
<input type="hidden" id="e_id" value="[ID]"/>
<table width="" cellspacing="0" cellpadding="0">
<tr>
<td width="110"><label for="e_passwort">{|Passwort|}:</label></td>
<td><input type="password" id="e_passwort" name="e_passwort" size="40"/></td>
<td width="110"><label for="e_passwort">{|Passwort|}:</label>
</td>
<td>
<input type="password" id="e_passwort" name="e_passwort" size="40"/>
</td>
</tr>
</table>
</div>

View File

@ -0,0 +1,151 @@
<div id="tabs">
<ul>
<li><a href="#tabs-1"></a></li>
</ul>
<!-- Example for multiple tabs
<ul hidden">
<li><a href="#tabs-1">First Tab</a></li>
<li><a href="#tabs-2">Second Tab</a></li>
</ul>
-->
<div id="tabs-1">
[MESSAGE]
<form action="" method="post">
[FORMHANDLEREVENT]
<div class="row">
<div class="row-height">
<div class="col-xs-12 col-md-12 col-md-height">
<div class="inside inside-full-height">
<fieldset>
<legend>{|Kontoauszug Eintrag|}</legend>
<table width="100%" border="0" class="mkTableFormular">
<tr>
<td>
{|Konto|}:
</td>
<td>
<input type="text" name="konto" id="konto" value="[KONTO]" size="20" disabled>
</td>
</tr>
<tr>
<td>
{|Datum|}:
</td>
<td>
<input type="text" name="buchung" id="buchung" value="[BUCHUNG]" size="20" disabled>
</td>
</tr>
<tr>
<td>
{|Betrag|}:
</td>
<td>
<input type="text" name="soll" id="soll" value="[SOLL]" size="20" disabled>
</td>
</tr>
<tr>
<td>
{|W&auml;hrung|}:
</td>
<td>
<input type="text" name="waehrung" id="waehrung" value="[WAEHRUNG]" size="20" disabled>
</td>
</tr>
<tr>
<td>
{|Fertig|}:
</td>
<td>
<input type="text" name="fertig" id="fertig" value="[FERTIG]" size="20" disabled>
</td>
</tr>
<tr>
<td>
{|Datev_abgeschlossen|}:
</td>
<td>
<input type="text" name="datev_abgeschlossen" id="datev_abgeschlossen" value="[DATEV_ABGESCHLOSSEN]" size="20" disabled>
</td>
</tr>
<tr>
<td>
{|Buchungstext|}:
</td>
<td>
<Textarea type="text" name="buchungstext" id="buchungstext" size="20" disabled>[BUCHUNGSTEXT]</textarea>
</td>
</tr>
<tr>
<td>
{|Bearbeiter|}:
</td>
<td>
<input type="text" name="bearbeiter" id="bearbeiter" value="[BEARBEITER]" size="20" disabled>
</td>
</tr>
<tr>
<td>
{|Internebemerkung|}:
</td>
<td>
<textarea type="text" name="internebemerkung" id="internebemerkung" size="20">[INTERNEBEMERKUNG]</textarea>
</td>
</tr>
<tr>
<td>
{|Importfehler|}:
</td>
<td>
<input type="text" name="importfehler" id="importfehler" value="[IMPORTFEHLER]" size="20" disabled>
</td>
</tr>
<tr>
<td>
{|Klaerfall|}:
</td>
<td>
<input type="text" name="klaerfall" id="klaerfall" value="[KLAERFALL]" size="20" disabled>
</td>
</tr>
<tr>
<td>
{|Klaergrund|}:
</td>
<td>
<input type="text" name="klaergrund" id="klaergrund" value="[KLAERGRUND]" size="20" disabled>
</td>
</tr>
</table>
</fieldset>
</div>
</div>
</div>
</div>
<input type="submit" name="submit" value="Speichern" style="float:right"/>
</form>
</div>
<!-- Example for 2nd tab
<div id="tabs-2">
[MESSAGE]
<form action="" method="post">
[FORMHANDLEREVENT]
<div class="row">
<div class="row-height">
<div class="col-xs-12 col-md-12 col-md-height">
<div class="inside inside-full-height">
<fieldset>
<legend>{|...|}</legend>
<table width="100%" border="0" class="mkTableFormular">
...
</table>
</fieldset>
</div>
</div>
</div>
</div>
<input type="submit" name="submit" value="Speichern" style="float:right"/>
</form>
</div>
-->
</div>

View File

@ -0,0 +1,14 @@
<div id="tabs">
<ul>
<li><a href="#tabs-1">[TABTEXT1]</a></li>
</ul>
<div id="tabs-1">
<form action="#tabs-1" id="frmauto" name="frmauto" method="post">
[MESSAGE]
<legend>Kontoausz&uuml;ge bitte &uuml;ber Importzentrale importieren.</legend>
[TAB1]
</form>
</div>
</div>

View File

@ -0,0 +1,46 @@
<div id="tabs">
<ul>
<li><a href="#tabs-1">[TABTEXT1]</a></li>
</ul>
<div id="tabs-1">
<form action="#tabs-1" id="frmauto" name="frmauto" method="post">
[MESSAGE]
<legend>[INFO]</legend>
<div class="filter-box filter-usersave">
<div class="filter-block filter-inline">
<div class="filter-title">{|Filter|}</div>
<ul class="filter-list">
[STATUSFILTER]
<li class="filter-item">
<label for="importfehler" class="switch">
<input type="checkbox" id="importfehler" />
<span class="slider round"></span>
</label>
<label for="meinetickets">{|Inkl. Importfehler|}</label>
</li>
</ul>
</div>
</div>
[TAB1]
<fieldset>
<table>
<legend>Stapelverarbeitung</legend>
<tr>
<td><input type="checkbox" value="1" id="autoalle" />&nbsp;alle markieren&nbsp;</td>
<td><input type="submit" class="btnBlue" name="ausfuehren" value="{|Importfehler|}" /></td>
</tr>
</table>
</fieldset>
</form>
</div>
</div>
<script>
$('#autoalle').on('change',function(){
var wert = $(this).prop('checked');
$('#kontoauszuege_list').find('input[type="checkbox"]').prop('checked',wert);
$('#kontoauszuege_list').find('input[type="checkbox"]').first().trigger('change');
});
</script>

View File

@ -0,0 +1,119 @@
<div id="tabs">
<ul>
<li><a href="#tabs-1"></a></li>
</ul>
<!-- Example for multiple tabs
<ul hidden">
<li><a href="#tabs-1">First Tab</a></li>
<li><a href="#tabs-2">Second Tab</a></li>
</ul>
-->
<div id="tabs-1">
[MESSAGE]
<form action="" method="post">
[FORMHANDLEREVENT]
<div class="row">
<div class="row-height">
<div class="col-xs-12 col-md-12 col-md-height">
<div class="inside inside-full-height">
<fieldset>
<legend>{|<!--Legend for this form area goes here>-->kostenstellen|}
<table width="100%" border="0" class="mkTableFormular">
<tr>
<td>
{|Nummer|}:
</td>
<td>
<input type="text" name="nummer" id="nummer" value="[NUMMER]" size="20">
</td>
</tr>
<tr>
<td>
{|Beschreibung|}:
</td>
<td>
<input type="text" name="beschreibung" id="beschreibung" value="[BESCHREIBUNG]" size="20">
</td>
</tr>
<tr>
<td>
{|Internebemerkung|}:
</td>
<td>
<input type="text" name="internebemerkung" id="internebemerkung" value="[INTERNEBEMERKUNG]" size="20">
</td>
</tr>
</table>
</fieldset>
</div>
</div>
</div>
</div>
<!-- Example for 2nd row
<div class="row">
<div class="row-height">
<div class="col-xs-12 col-md-12 col-md-height">
<div class="inside inside-full-height">
<fieldset>
<legend>{|Another legend|}</legend>
<table width="100%" border="0" class="mkTableFormular">
<tr>
<td>
{|Nummer|}:
</td>
<td>
<input type="text" name="nummer" id="nummer" value="[NUMMER]" size="20">
</td>
</tr>
<tr>
<td>
{|Beschreibung|}:
</td>
<td>
<input type="text" name="beschreibung" id="beschreibung" value="[BESCHREIBUNG]" size="20">
</td>
</tr>
<tr>
<td>
{|Internebemerkung|}:
</td>
<td>
<input type="text" name="internebemerkung" id="internebemerkung" value="[INTERNEBEMERKUNG]" size="20">
</td>
</tr>
</table>
</fieldset>
</div>
</div>
</div>
</div> -->
<input type="submit" name="submit" value="Speichern" style="float:right"/>
</form>
</div>
<!-- Example for 2nd tab
<div id="tabs-2">
[MESSAGE]
<form action="" method="post">
[FORMHANDLEREVENT]
<div class="row">
<div class="row-height">
<div class="col-xs-12 col-md-12 col-md-height">
<div class="inside inside-full-height">
<fieldset>
<legend>{|...|}</legend>
<table width="100%" border="0" class="mkTableFormular">
...
</table>
</fieldset>
</div>
</div>
</div>
</div>
<input type="submit" name="submit" value="Speichern" style="float:right"/>
</form>
</div>
-->
</div>

View File

@ -0,0 +1,10 @@
<div id="tabs">
<ul>
<li><a href="#tabs-1">[TABTEXT1]</a></li>
</ul>
<div id="tabs-1">
[MESSAGE]
[TAB1]
[TAB1NEXT]
</div>
</div>

View File

@ -0,0 +1,43 @@
<div id="tabs">
<ul>
<li><a href="#tabs-1">[TABTEXT1]</a></li>
</ul>
<div id="tabs-1">
[MESSAGE]
[MESSAGETABLE]
<fieldset>
<form action="" method="post" id="eprooform" name="eprooform">
<table class="tableborder" border="0" cellpadding="3" cellspacing="0" width="100%">
<tbody>
<tr valign="top" colspan="3">
<td>
<table width="80%" align="center">
<tr valign="top">
<td align="center">
<table width="90%">
<tr><td><b>{|Quelllager|}:</b></td><td><input type="text" id="quelllager" name="quelllager" value="[QUELLLAGER]" size="27" style="width:200px"></td></tr>
<tr>
<td>
</td>
<td>
<button name="submit" value="lieferschein" class="ui-button-icon" style="width:200px;">
Lieferschein erzeugen
</button>
</td>
</tr>
</table>
<br>
</td>
<td>
</td>
</tr>
</table>
<br>
<br>
</td>
</tr>
</table>
</form>
</fieldset>
</div>
</div>

View File

@ -0,0 +1,55 @@
[POSITIONENMESSAGE]
<form method="post" action="#tabs-2">
<div class="row" [POSITIONHINZUFUEGENHIDDEN]>
<div class="row-height">
<div class="col-xs-14 col-md-12 col-md-height">
<div class="inside inside-full-height">
<fieldset>
<legend style="float:left">Artikel hinzuf&uuml;gen:</legend>
<div class="filter-box filter-usersave" style="float:right;">
<div class="filter-block filter-inline">
<div class="filter-title">{|Filter|}</div>
<ul class="filter-list">
<li class="filter-item">
<label for="passende" class="switch">
<input type="checkbox" id="passende">
<span class="slider round"></span>
</label>
<label for="passende">{|Nur passende (Bestellung/Rechnungsnummer)|}</label>
</li>
</ul>
</div>
</div>
[ARTIKELMANUELL]
</fieldset>
</div>
</div>
<div class="col-xs-14 col-md-2 col-md-height">
<div class="inside inside-full-height">
<fieldset>
<table width="100%" border="0" class="mkTableFormular">
<legend>{|Aktionen|}</legend>
<tr [HINZUFUEGENHIDDEN]>
<td>
{|Multifilter|}:&nbsp;<img src="./themes/new/images/tooltip_grau.png" border="0" style="position: relative; left: 1px; top: 3px; z-index: 8;" class="wawitooltipicon" title="Auswahl mehrerer Artikel &uuml;ber Name oder Nummer">
</td>
</tr>
<tr>
<td><input type="checkbox" name="bruttoeingabe" value="1" />Bruttopreise eingeben</td>
</tr>
<tr [HINZUFUEGENHIDDEN]>
<td>
<input type="text" name="multifilter" id="multifilter" value="[MULTIFILTER]" size="20" style="width:98%;" form="">
</td>
</tr>
<tr>
<td><button [SAVEDISABLED] name="submit" value="artikel_manuell_hinzufuegen" class="ui-button-icon" style="width:100%;">Hinzuf&uuml;gen</button></td>
</tr>
</table>
</fieldset>
</div>
</div>
</div>
</div>
</form>

View File

@ -0,0 +1,219 @@
<div id="tabs">
<ul>
<li><a href="#tabs-1">Lieferantengutschrift</a></li>
<li [POSITIONENHIDDEN]><a href="#tabs-2">Positionen</a></li>
<li [POSITIONENHIDDEN]><a href="#tabs-4">Artikel manuell</a></li>
<li><a href="#tabs-3">Protokoll</a></li>
</ul>
<div id="tabs-1">
[MESSAGE]
<form action="" method="post">
[FORMHANDLEREVENT]
<div class="row">
<div class="row-height">
<div class="col-xs-12 col-md-6 col-md-height">
<div class="inside inside-full-height">
<div class="row">
<div class="row-height">
<div class="col-xs-12 col-md-8 col-md-height">
<div class="inside inside-full-height">
<fieldset style="float: left;">
<legend>{|<b>Lieferantengutschrift <font color="blue">[BELEGNR]</font></b> Lf-Nr. <a href="index.php?module=adresse&action=edit&id=[ADRESSE_ID]">[LIEFERANTENNUMMER]|}</a></legend>
[STATUSICONS]
</fieldset>
<fieldset style="float: right;">
<button name="submit" value="speichern" class="ui-button-icon" style="width:100%;">Speichern</button>
</fieldset>
</div>
</div>
</div>
</div>
<div class="row">
<div class="row-height">
<div class="col-xs-12 col-md-8 col-md-height">
<div class="inside inside-full-height">
<fieldset>
<table width="100%" border="0" class="mkTableFormular">
<tr>
<td>
{|Status|}:
</td>
<td>
<input type="text" value="[STATUS]" size="20" disabled>
</td>
</tr>
<tr>
<td>
{|Adresse|}:
</td>
<td>
<input type="text" name="adresse" id="adresse" value="[ADRESSE]" size="20" [ADRESSESAVEDISABLED] required>
</td>
</tr>
<tr>
<td>
{|Lieferantengutschrifts-Nr.|}:
</td>
<td>
<input type="text" name="rechnung" id="rechnung" value="[RECHNUNG]" size="20" [SAVEDISABLED] required>
</td>
</tr>
<tr>
<td>
{|Lieferantengutschriftsdatum|}:
</td>
<td>
<input type="text" name="rechnungsdatum" id="rechnungsdatum" value="[RECHNUNGSDATUM]" size="20" [SAVEDISABLED]>
</td>
</tr>
<tr>
<td>
{|Eingangsdatum|}:
</td>
<td>
<input type="text" name="eingangsdatum" id="eingangsdatum" value="[EINGANGSDATUM]" size="20" [SAVEDISABLED]>
</td>
</tr>
<tr>
<td>
{|Betrag brutto|}:
</td>
<td>
<input type="number" step="0.01" name="betrag" id="betrag" value="[BETRAG]" size="20" [SAVEDISABLED]>
<select name="waehrung" [SAVEDISABLED]>[WAEHRUNGSELECT]</select>
</td>
</tr>
<tr>
<td>
{|Betrag Positionen brutto|}:
</td>
<td>
<input type="number" step="0.01" name="betragbruttopos" id="betragbruttopos" value="[BETRAGBRUTTOPOS]" size="20" disabled><img class="wawitooltipicon" src="themes/new/images/tooltip_grau.png" title="Rundungsdifferenz [RUNDUNGSDIFFERENZ] wurde automatisch ber&uuml;cksichtigt" [RUNDUNGSDIFFERENZICONHIDDEN]>
</td>
</tr>
<tr>
<td>
{|Betrag Positionen netto|}:
</td>
<td>
<input type="number" step="0.01" name="betragnetto" id="betragnetto" value="[BETRAGNETTO]" size="20" disabled [SAVEDISABLED]>
</td>
</tr>
<tr>
<td>
{|Zahlbar bis|}:
</td>
<td>
<input type="text" name="zahlbarbis" id="zahlbarbis" value="[ZAHLBARBIS]" size="20" [SAVEDISABLED]>
</td>
</tr>
<tr>
<td>
{|Skonto %|}:
</td>
<td>
<input type="text" name="skonto" id="skonto" value="[SKONTO]" size="20" [SAVEDISABLED]>
</td>
</tr>
<tr>
<td>
{|Skonto bis|}:
</td>
<td>
<input type="text" name="skontobis" id="skontobis" value="[SKONTOBIS]" size="20" [SAVEDISABLED]>
</td>
</tr>
<tr>
<td>
{|Bestellung|}:
</td>
<td>
<input type="text" name="bestellung" id="bestellung" value="[BESTELLUNG]" size="20" [SAVEDISABLED]>
</td>
</tr>
<tr>
<td>
{|Waren-/Leistungsprüfung (Einkauf)|}:
</td>
<td>
<input type="checkbox" id="wareneingang" value="1" [WARENEINGANGCHECKED] size="20" disabled>
<a href="index.php?module=lieferantengutschrift&action=freigabeeinkauf&id=[ID]" title="freigeben" [FREIGABEEINKAUFHIDDEN]><img src="themes/new/images/forward.svg" border="0" class="textfeld_icon"></a>
<a href="index.php?module=lieferantengutschrift&action=ruecksetzeneinkauf&id=[ID]" title="r&uuml;cksetzen" [RUECKSETZENEINKAUFHIDDEN]><img src="themes/new/images/delete.svg" border="0" class="textfeld_icon"></a>
<i [EINKAUFINFOHIDDEN]>Wird automatisch gesetzt wenn Positionen vollst&auml;ndig</a>
</td>
</tr>
<tr>
<td>
{|Lieferantengutschriftseingangsprüfung (Buchhaltung)|}:
</td>
<td>
<input type="checkbox" id="rechnungsfreigabe" [RECHNUNGSFREIGABECHECKED] size="20" disabled>
<a href="index.php?module=lieferantengutschrift&action=freigabebuchhaltung&id=[ID]" title="freigeben" [FREIGABEBUCHHALTUNGHIDDEN]><img src="themes/new/images/forward.svg" border="0" class="textfeld_icon"></a>
<a href="index.php?module=lieferantengutschrift&action=ruecksetzenbuchhaltung&id=[ID]" title="r&uuml;cksetzen" [RUECKSETZENBUCHHALTUNGHIDDEN]><img src="themes/new/images/delete.svg" border="0" class="textfeld_icon"></a>
</td>
</tr>
<tr>
<td>
{|Bezahlt|}:
</td>
<td>
<input type="checkbox" id="zahlungsstatus" [BEZAHLTCHECKED] size="20" disabled>
<a href="index.php?module=lieferantengutschrift&action=freigabebezahlt&id=[ID]" title="auf &apos;bezahlt&apos; setzen" [FREIGABEBEZAHLTHIDDEN]><img src="themes/new/images/forward.svg" border="0" class="textfeld_icon"></a>
<a href="index.php?module=lieferantengutschrift&action=ruecksetzenbezahlt&id=[ID]" title="r&uuml;cksetzen" [RUECKSETZENBEZAHLTHIDDEN]><img src="themes/new/images/delete.svg" border="0" class="textfeld_icon"></a>
</td>
</tr>
<tr>
<td>
{|Projekt|}:
</td>
<td>
<input type="text" name="projekt" id="projekt" value="[PROJEKT]" size="20">
</td>
</tr>
<tr>
<td>
{|Kostenstelle|}:
</td>
<td>
<input type="text" name="kostenstelle" id="kostenstelle" value="[KOSTENSTELLE]" size="20">
</td>
</tr>
<tr>
<td>
{|Internebemerkung|}:
</td>
<td>
<textarea name="internebemerkung" id="internebemerkung" rows="6" style="width:100%;">[INTERNEBEMERKUNG]</textarea>
</td>
</tr>
</table>
</fieldset>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="col-xs-12 col-md-6 col-md-height">
<div class="inside inside-full-height">
<fieldset>
<legend>{|Vorschau|}</legend>
[INLINEPDF]
</fieldset>
</div>
</div>
</div>
</div>
</form>
</div>
<div id="tabs-2">
[POSITIONENTAB]
</div>
<div id="tabs-4">
[POSITIONENMANUELLTAB]
</div>
<div id="tabs-3">
[MINIDETAIL]
</div>
</div>

View File

@ -0,0 +1,93 @@
<div id="tabs">
<ul>
<li><a href="#tabs-1">[TABTEXT1]</a></li>
</ul>
<div id="tabs-1">
[MESSAGE]
<div class="filter-box filter-usersave">
<div class="filter-block filter-inline">
<div class="filter-title">{|Filter|}</div>
<ul class="filter-list">
<li class="filter-item">
<label for="anhang" class="switch">
<input type="checkbox" id="anhang">
<span class="slider round"></span>
</label>
<label for="anhang">{|Anhang fehlt|}</label>
</li>
<li class="filter-item">
<label for="wareneingang" class="switch">
<input type="checkbox" id="wareneingang">
<span class="slider round"></span>
</label>
<label for="wareneingang">{|Wareingang/Leistungspr&uuml;fung fehlt|}</label>
</li>
<li class="filter-item">
<label for="rechnungsfreigabe" class="switch">
<input type="checkbox" id="rechnungsfreigabe">
<span class="slider round"></span>
</label>
<label for="rechnungsfreigabe">{|Lieferantengutschriftseingangspr&uuml;fung fehlt|}</label>
</li>
<li class="filter-item">
<label for="nichtbezahlt" class="switch">
<input type="checkbox" id="nichtbezahlt">
<span class="slider round"></span>
</label>
<label for="nichtbezahlt">{|Nicht bezahlt|}</label>
</li>
<li class="filter-item">
<label for="stornierte" class="switch">
<input type="checkbox" id="stornierte">
<span class="slider round"></span>
</label>
<label for="stornierte">{|Inkl. stornierte|}</label>
</li>
<li class="filter-item">
<label for="abgeschlossen" class="switch">
<input type="checkbox" id="abgeschlossen">
<span class="slider round"></span>
</label>
<label for="abgeschlossen">{|Inkl. abgeschlossene|}</label>
</li>
<li class="filter-item">
<label for="zahlbarbis">{|Zahlbar bis|}:</label>
<input type="text" name="zahlbarbis" id="zahlbarbis" size="10">
</li>
<li class="filter-item">
<label for="skontobis">{|Skonto bis|}:</label>
<input type="text" name="skontobis" id="skontobis" size="10">
</li>
</ul>
<form method="post" action="#">
<button name="submit" value="status_berechnen" class="ui-button-icon">{|Status auffrischen|}</button>
</form>
</div>
</div>
<form method="post" action="#">
[TAB1]
<fieldset><legend>{|Stapelverarbeitung|}</legend>
<input type="checkbox" id="auswahlalle" onchange="alleauswaehlen();" />&nbsp;{|alle markieren|}&nbsp;
<select id="sel_aktion" name="sel_aktion">
<option value="">{|bitte w&auml;hlen|} ...</option>
[MANUELLFREIGABEEINKAUF]
[MANUELLFREIGABEBUCHHALTUNG]
[ALSBEZAHLTMARKIEREN]
</select>
<button name="submit" value="ausfuehren" class="ui-button-icon">{|Ausf&uuml;hren|}</button>
</fieldset>
</form>
[TAB1NEXT]
</div>
</div>
<script>
function alleauswaehlen()
{
var wert = $('#auswahlalle').prop('checked');
$('#lieferantengutschrift_list').find(':checkbox').prop('checked',wert);
}
</script>

View File

@ -0,0 +1,76 @@
[FORMHANDLEREVENT]
[MESSAGE]
<style>
.auftraginfo_cell {
color: #636363;border: 1px solid #ccc;padding: 5px;
}
.auftrag_cell {
color: #636363;border: 1px solid #fff;padding: 0px; margin:0px;
}
</style>
<div style="float:left; width:39%; padding-right:1%;">
<table width="100%" border="0">
<tr valign="top">
<td width="150">Lieferant:</td>
<td colspan="3">[ADRESSEAUTOSTART][ADRESSE][MSGADRESSE][ADRESSEAUTOEND]</td>
</tr>
<tr>
<td>Lieferantengutschrifts-Nr.:</td>
<td>[RECHNUNG][MSGRECHNUNG]</td>
</tr>
<tr>
<td>Lieferantengutschriftsdatum:</td>
<td width="250">[RECHNUNGSDATUM][MSGRECHNUNGSDATUM]</td>
<tr>
</tr>
</tr>
<td width="200">Zahlbar bis:</td>
<td>[ZAHLBARBIS][MSGZAHLBARBIS][DATUM_ZAHLBARBIS]</td>
</tr>
<td>Betrag/Total (Brutto):</td>
<td>[BETRAG][MSGBETRAG]&nbsp;[WAEHRUNG][MSGWAEHRUNG]</td>
<tr>
<td>Skonto in %:</td>
<td>[SKONTO][MSGSKONTO]</td>
</tr>
<tr>
<td>Skonto bis:</td>
<td>[SKONTOBIS][MSGSKONTOBIS][DATUM_SKONTOBIS]</td>
</tr>
<tr>
<td>Projekt:</td>
<td>[PROJEKT][MSGKOSTENSTELLE]</td>
<td>&nbsp;</td>
</tr>
<tr>
<td>Kostenstelle:</td>
<td>[KOSTENSTELLE][MSGKOSTENSTELLE]</td>
<td>&nbsp;</td>
</tr>
<tr>
<td>Interne Bemerkung:</td>
<td colspan="4">[INTERNEBEMERKUNG]</td>
</tr>
</table>
</div>
<div style="float:left; width:60%">
<div style="background-color:white">
<h2 class="greyh2">Artikel</h2>
<div style="padding:10px">
[ARTIKEL]
</div>
</div>
<div style="background-color:white">
<h2 class="greyh2">Buchungen</h2>
<div style="padding:10px">
[ZAHLUNGEN]
</div>
</div>
<div style="background-color:white">
<h2 class="greyh2">Protokoll</h2>
<div style="padding:10px;">
[PROTOKOLL]
</div>
</div>
</div>

View File

@ -0,0 +1,64 @@
<div id="tabs">
<ul>
<li><a href="#tabs-1"></a></li>
</ul>
<!-- Example for multiple tabs
<ul hidden">
<li><a href="#tabs-1">First Tab</a></li>
<li><a href="#tabs-2">Second Tab</a></li>
</ul>
-->
<div id="tabs-1">
[MESSAGE]
<form action="" method="post">
[FORMHANDLEREVENT]
<div class="row">
<div class="row-height">
<div class="col-xs-12 col-md-12 col-md-height">
<div class="inside inside-full-height">
<fieldset>
<legend>{|Position bearbeiten|}</legend><i></i>
<table width="100%" border="0" class="mkTableFormular">
<tr>
<td>
{|Menge|}:
</td>
<td>
<input type="number" name="menge" id="menge" value="[MENGE]" size="20" [SAVEDISABLED]>
</td>
</tr>
<tr>
<td>
{|Preis|}:
</td>
<td>
<input type="number" name="preis" id="preis" step="0.00001" value="[PREIS]" size="20" [SAVEDISABLED]>
</td>
</tr>
<tr>
<td>
{|Steuersatz %|}:
</td>
<td>
<input type="number" name="steuersatz" id="steuersatz" value="[STEUERSATZ]" size="20" [SAVEDISABLED]>
</td>
</tr>
<tr>
<td>
{|Sachkonto|}:
</td>
<td>
<input type="text" name="sachkonto" id="sachkonto" value="[SACHKONTO]" size="20" [SACHKONTOSAVEDISABLED]>
</td>
</tr>
</table>
</fieldset>
</div>
</div>
</div>
</div>
<input type="submit" name="submit" value="Speichern" style="float:right"/>
</form>
</div>
</div>

View File

@ -0,0 +1,88 @@
[POSITIONENMESSAGE]
<form method="post" action="#tabs-2">
<div class="row" [POSITIONHINZUFUEGENHIDDEN]>
<div class="row-height">
<div class="col-xs-14 col-md-12 col-md-height">
<div class="inside inside-full-height">
<fieldset>
<legend style="float:left">Artikel hinzuf&uuml;gen:</legend>
<div class="filter-box filter-usersave" style="float:right;">
<div class="filter-block filter-inline">
<div class="filter-title">{|Filter|}</div>
<ul class="filter-list">
<li class="filter-item">
<label for="passende" class="switch">
<input type="checkbox" id="passende">
<span class="slider round"></span>
</label>
<label for="passende">{|Nur passende (Bestellung/Rechnungsnummer)|}</label>
</li>
</ul>
</div>
</div>
[PAKETDISTRIBUTION]
</fieldset>
</div>
</div>
<div class="col-xs-14 col-md-2 col-md-height">
<div class="inside inside-full-height">
<fieldset>
<table width="100%" border="0" class="mkTableFormular">
<legend>{|Aktionen|}</legend>
<tr>
<td><input type="checkbox" id="auswahlallewareneingaenge" onchange="allewareneingaengeauswaehlen();" />{|alle markieren|}</td>
</tr>
<tr>
<td><button [SAVEDISABLED] name="submit" value="positionen_hinzufuegen" class="ui-button-icon" style="width:100%;">Hinzuf&uuml;gen</button></td>
</tr>
</table>
</fieldset>
</div>
</div>
</div>
</div>
</form>
<form method="post" action="#tabs-2">
<div class="row">
<div class="row-height">
<div class="col-xs-14 col-md-12 col-md-height">
<div class="inside inside-full-height">
[POSITIONEN]
</div>
</div>
<div class="col-xs-14 col-md-2 col-md-height">
<div class="inside inside-full-height">
<fieldset>
<table width="100%" border="0" class="mkTableFormular">
<legend>{|Aktionen|}</legend>
<tr [SACHKONTOCHANGEHIDDEN]>
<td><input type="checkbox" id="auswahlalle" onchange="alleauswaehlen();" />{|alle markieren|}</td>
</tr>
<tr [POSITIONHINZUFUEGENHIDDEN]>
<td><button [SAVEDISABLED] name="submit" value="positionen_entfernen" class="ui-button-icon" style="width:100%;">Entfernen</button></td>
</tr>
<tr [SACHKONTOCHANGEHIDDEN]>
<td><input type="text" name="positionen_sachkonto" id="positionen_sachkonto" value="" size="20"></td>
</tr>
<tr [SACHKONTOCHANGEHIDDEN]>
<td><button name="submit" value="positionen_kontorahmen_setzen" class="ui-button-icon" style="width:100%;">Sachkonto setzen</button></td>
</tr>
</table>
</fieldset>
</div>
</div>
</div>
</div>
</form>
<script>
function allewareneingaengeauswaehlen()
{
var wert = $('#auswahlallewareneingaenge').prop('checked');
$('#verbindlichkeit_positionen').find(':checkbox').prop('checked',wert);
}
function alleauswaehlen()
{
var wert = $('#auswahlalle').prop('checked');
$('#lieferantengutschrift_positionen').find(':checkbox').prop('checked',wert);
}
</script>

View File

@ -22,7 +22,7 @@
<tr><td class="auftraginfo_cell">Projekt:</td><td class="auftraginfo_cell">[PROJEKT]</td><td class="auftraginfo_cell">Angebotssumme:</td><td class="auftraginfo_cell">[GESAMTSUMME]</td></tr>
<tr><td class="auftraginfo_cell">Auftrag:</td><td class="auftraginfo_cell">[AUFTRAG]</td><td class="auftraginfo_cell">Versteuerung:</td><td class="auftraginfo_cell">[STEUER]</td></tr>
<tr><td class="auftraginfo_cell">Rechnung:</td><td class="auftraginfo_cell">[RECHNUNG]</td><td class="auftraginfo_cell">Gewicht (netto):</td><td class="auftraginfo_cell">[GEWICHT]</td></tr>
<tr><td class="auftraginfo_cell">Tracking:</td><td class="auftraginfo_cell">[TRACKING]</td><td class="auftraginfo_cell">Versandart:</td><td class="auftraginfo_cell">[VERSANDART]</td></tr>
<tr><td class="auftraginfo_cell">Pakete:</td><td class="auftraginfo_cell">[TRACKING]</td><td class="auftraginfo_cell">Versandart:</td><td class="auftraginfo_cell">[VERSANDART]</td></tr>
<tr><td class="auftraginfo_cell">Retoure:</td><td class="auftraginfo_cell">[RETOURE]</td><td class="auftraginfo_cell"></td><td class="auftraginfo_cell"></td></tr>
</table>

View File

@ -0,0 +1,45 @@
<div id="tabs">
<ul>
<li><a href="#tabs-1">[TABTEXT1]</a></li>
</ul>
<div id="tabs-1">
[MESSAGE]
[MESSAGETABLE]
<fieldset>
<form action="" method="post" id="eprooform" name="eprooform">
<table class="tableborder" border="0" cellpadding="3" cellspacing="0" width="100%">
<tbody>
<tr valign="top" colspan="3">
<td>
<table width="80%" align="center">
<tr valign="top">
<td align="center">
<table width="90%">
<tr><td><b>{|Quelllager|}:</b></td><td><input type="text" id="quelllager" name="quelllager" value="[QUELLLAGER]" size="27" style="width:200px"></td></tr>
<tr><td><b>{|Ziellager|}:</b></td><td><input type="text" id="ziellager" name="ziellager" value="[ZIELLAGER]" size="27" style="width:200px"></td></tr>
<tr>
<td>
<p [ERNEUT_UMLAGERN_HIDDEN]><input type="checkbox" name="erneut" id="erneut" value="1" size="20" [ERNEUT_CHECKED]>{|Erneut umlagern|}</input></p>
</td>
<td>
<button name="submit" value="umlagern" class="ui-button-icon" style="width:200px;">
Umlagern
</button>
</td>
</tr>
</table>
<br>
</td>
<td>
</td>
</tr>
</table>
<br>
<br>
</td>
</tr>
</table>
</form>
</fieldset>
</div>
</div>

View File

@ -17,33 +17,6 @@
<li class="filter-item"><input type="checkbox" id="anlieferanten"><label for="anlieferanten">{|an Lieferanten|}</label></li>
</ul>
</div>
<div class="filter-block filter-inline">
<div class="filter-title">{|Filter Versandzentrum|}</div>
<ul class="filter-list">
<li class="filter-item">
<label for="abgeschlossenlogistik" class="switch">
<input type="checkbox" id="abgeschlossenlogistik">
<span class="slider round"></span>
</label>
<label for="abgeschlossenlogistik">{|abgeschlossen &uuml;ber Logistik|}</label>
</li>
<li class="filter-item">
<label for="nochinlogistik" class="switch">
<input type="checkbox" id="nochinlogistik">
<span class="slider round"></span>
</label>
<label for="nochinlogistik">{|noch in Logistik|}</label>
</li>
<li class="filter-item">
<label for="manuellabgeschlossen" class="switch">
<input type="checkbox" id="manuellabgeschlossen">
<span class="slider round"></span>
</label>
<label for="manuellabgeschlossen">{|manuell abgeschlossen|}</label>
</li>
</ul>
</div>
</div>
[MESSAGE]
@ -56,6 +29,7 @@
<option value="offen">{|als offen markieren|}</option>
<option value="versendet">{|als versendet markieren|}</option>
<option value="storniert">{|als storniert markieren|}</option>
<option value="versanduebergabe">{|in Versand geben|}</option>
<option value="pdf">{|Sammel-PDF|}</option>
<option value="drucken">{|drucken|}</option>
</select>&nbsp;{|Drucker|}: <select name="seldrucker">[SELDRUCKER]</select>&nbsp;<input type="submit" class="btnBlue" name="ausfuehren" value="{|ausf&uuml;hren|}" />

View File

@ -0,0 +1,142 @@
<div id="tabs">
<ul>
<li><a href="#tabs-1"></a></li>
</ul>
<!-- Example for multiple tabs
<ul hidden">
<li><a href="#tabs-1">First Tab</a></li>
<li><a href="#tabs-2">Second Tab</a></li>
</ul>
-->
<div id="tabs-1">
[MESSAGE]
<form action="" method="post">
[FORMHANDLEREVENT]
<div class="row">
<div class="row-height">
<div class="col-xs-12 col-md-12 col-md-height">
<div class="inside inside-full-height">
<fieldset>
<legend>{|<!--Legend for this form area goes here>-->Mahnwesen-Einstellungen|}</legend>
<table width="100%" border="0" class="mkTableFormular">
<tr>
<td>
{|Name|}:
</td>
<td>
<input type="text" name="name" id="name" value="[NAME]" size="20"><i>Entspricht "Typ" in der Gesch&auml;ftsbrief-Vorlage</i>
</td>
</tr>
<tr>
<td>
{|Tage|}:
</td>
<td>
<input type="number" name="tage" id="tage" value="[TAGE]" size="20">
</td>
</tr>
<tr>
<td>
{|Gebuehr|}:
</td>
<td>
<input type="number" step="0.01" name="gebuehr" id="gebuehr" value="[GEBUEHR]" size="20">
</td>
</tr>
<tr>
<td>
{|E-Mail senden|}:
</td>
<td>
<input type="checkbox" name="mail" id="mail" [MAIL] size="20">
</td>
</tr>
<tr>
<td>
{|Mahnung ausdrucken|}:
</td>
<td>
<input type="checkbox" name="druck" id="druck" [DRUCK] size="20">
</td>
</tr>
</table>
</fieldset>
</div>
</div>
</div>
</div>
<!-- Example for 2nd row
<div class="row">
<div class="row-height">
<div class="col-xs-12 col-md-12 col-md-height">
<div class="inside inside-full-height">
<fieldset>
<legend>{|Another legend|}</legend>
<table width="100%" border="0" class="mkTableFormular">
<tr>
<td>
{|Name|}:
</td>
<td>
<input type="text" name="name" id="name" value="[NAME]" size="20">
</td>
</tr>
<tr>
<td>
{|Tage|}:
</td>
<td>
<input type="text" name="tage" id="tage" value="[TAGE]" size="20">
</td>
</tr>
<tr>
<td>
{|Gebuehr|}:
</td>
<td>
<input type="text" name="gebuehr" id="gebuehr" value="[GEBUEHR]" size="20">
</td>
</tr>
<tr>
<td>
{|Versandmethode|}:
</td>
<td>
<input type="text" name="versandmethode" id="versandmethode" value="[VERSANDMETHODE]" size="20">
</td>
</tr>
</table>
</fieldset>
</div>
</div>
</div>
</div> -->
<input type="submit" name="submit" value="Speichern" style="float:right"/>
</form>
</div>
<!-- Example for 2nd tab
<div id="tabs-2">
[MESSAGE]
<form action="" method="post">
[FORMHANDLEREVENT]
<div class="row">
<div class="row-height">
<div class="col-xs-12 col-md-12 col-md-height">
<div class="inside inside-full-height">
<fieldset>
<legend>{|...|}</legend>
<table width="100%" border="0" class="mkTableFormular">
...
</table>
</fieldset>
</div>
</div>
</div>
</div>
<input type="submit" name="submit" value="Speichern" style="float:right"/>
</form>
</div>
-->
</div>

View File

@ -0,0 +1,10 @@
<div id="tabs">
<ul>
<li><a href="#tabs-1">[TABTEXT1]</a></li>
</ul>
<div id="tabs-1">
[MESSAGE]
[TAB1]
[TAB1NEXT]
</div>
</div>

View File

@ -0,0 +1,64 @@
<div id="tabs">
<ul>
<li><a href="#tabs-1">[TABTEXT1]</a></li>
</ul>
<div id="tabs-1">
<form method="post" action="#">
<div class="filter-box filter-usersave">
<div class="filter-block filter-inline">
<div class="filter-title">{|Filter|}</div>
<ul class="filter-list">
<li class="filter-item">
<label for="zu_mahnen" class="switch">
<input type="checkbox" id="zu_mahnen">
<span class="slider round"></span>
</label>
<label for="zu_mahnen">{|Nur zu mahnende|}</label>
</li>
<li class="filter-item">
<label for="inkl_bezahlte" class="switch">
<input type="checkbox" id="inkl_bezahlte">
<span class="slider round"></span>
</label>
<label for="inkl_bezahlte">{|Inkl. bezahlte|}</label>
</li>
<li class="filter-item">
<label for="inkl_gesperrte" class="switch">
<input type="checkbox" id="inkl_gesperrte">
<span class="slider round"></span>
</label>
<label for="inkl_gesperrte">{|Inkl. gesperrte|}</label>
</li>
</ul>
<input type="submit" class="btnBlue" name="mahnstufe_berechnen" value="{|Mahnstufe berechnen|}" />
</div>
</div>
</form>
<form method="post" action="#">
[MESSAGE]
[TAB1]
[TAB1NEXT]
<fieldset>
<legend>{|Stapelverarbeitung|}</legend>
<input type="checkbox" id="auswahlalle" onchange="alleauswaehlen();" />&nbsp;{|alle markieren|}&nbsp;
<select id="sel_aktion" name="sel_aktion">
<option value="">{|bitte w&auml;hlen|} ...</option>
[ALSBEZAHLTMARKIEREN]
<option value="offen">{|als offen markieren|}</option>
<option value="mahnung_reset">{|Mahnstatus zur&uuml;cksetzen|}</option>
<option value="mahnen">{|Mahnung durchf&uuml;hren|}</option>
<!-- <option value="email">{|Mahnung durchf&uuml;hren (nur E-Mail)|}</option>
<option value="email">{|Mahnung durchf&uuml;hren (nur Drucken)|}</option> -->
</select>&nbsp;{|Drucker|}: <select name="seldrucker">[SELDRUCKER]</select>&nbsp;<input type="submit" class="btnBlue" name="ausfuehren" value="{|ausf&uuml;hren|}" />
</fieldset>
</form>
</div>
</div>
<script>
function alleauswaehlen()
{
var wert = $('#auswahlalle').prop('checked');
$('#mahnwesen_list').find(':checkbox').prop('checked',wert);
}
</script>

View File

@ -44,7 +44,7 @@
</div>
<div style="background-color:white">
<h2 class="greyh2">Zahlungseingang</h2>
<h2 class="greyh2">Buchungen</h2>
<div style="padding:10px">
[ZAHLUNGEN]
</div>
@ -69,15 +69,12 @@
[PDFARCHIV]
</div>
</div>
<div style="background-color:white">
<h2 class="greyh2">Deckungsbeitrag</h2>
<div style="padding:10px">
<div class="info">Dieses Modul ist erst ab Version Professional verfügbar</div>
</div>
</div>
</div>
<!--
<div style="background-color:white">
<h2 class="greyh2">Deckungsbeitrag</h2>
<div style="padding:10px">
<div class="info">Dieses Modul ist erst ab Version Professional verfügbar</div>
</div>
</div>
</div>
-->

View File

@ -8,6 +8,7 @@ SPDX-License-Identifier: LicenseRef-EGPL-3.1
<li><a href="#tabs-2">Aufträge</a></li>
</ul>
<div id="tabs-1">
[MESSAGE]
[MESSAGE_INVOICES]
<form method="post" action="#">
[TAB_INVOICES]
@ -19,6 +20,7 @@ SPDX-License-Identifier: LicenseRef-EGPL-3.1
</form>
</div>
<div id="tabs-2">
[MESSAGE]
[MESSAGE_ORDERS]
<form method="post" action="#">
[TAB_ORDERS]

View File

@ -39,9 +39,13 @@
<label for="rechnungenstorniert">{|Storniert|}</label>
</li>
</ul>
</div>
<form method="post" action="#">
<input type="submit" class="btnBlue" name="zahlungsstatus_berechnen" value="{|Zahlungsstatus berechnen|}" />
</form>
</div>
</div>
[MESSAGE]
<form method="post" action="#">
[TAB1]

View File

@ -0,0 +1,85 @@
<div id="tabs" class="report">
<ul>
<li><a href="#tabs-1">Tabellen</a></li>
<li><a href="#tabs-2">Struktur</a></li>
<li><a href="#tabs-3">Vorschau</a></li>
</ul>
<!-- ende gehort zu tabview -->
<!-- erstes tab -->
<div id="tabs-1">
[MESSAGE]
<div class="row" id="report_list_main">
<div class="row-height">
<div class="col-xs-12 col-sm-10 col-sm-height">
<div>
[TAB1]
</div>
</div>
</div>
</div>
[TAB1NEXT]
</div>
<div id="tabs-2">
[MESSAGE]
<div class="row" id="report_list_main">
<div class="row-height">
<div class="col-xs-12 col-sm-10 col-sm-height">
<legend style="float:left">
Tabelle&nbsp;[TABLENAME]
</legend>
<form method="post" action="#tabs-3">
<fieldset style="float: right;">
<input type="text" name="table" value="[TABLENAME]" hidden></input>
<table width="100%" border="0" class="mkTableFormular">
<tr>
<td style="padding-right:10px;"><input type="checkbox" id="auswahlalle" onchange="alleauswaehlen();"/>{|alle markieren|}</td>
<td><button name="submit" value="vorschau" class="ui-button-icon" style="width:100%;float:right;">Vorschau</button></td>
</tr>
</table>
</fieldset>
<p></p>
<div id="columnstab">
[TAB2]
</div>
</form>
</div>
</div>
</div>
[TAB2NEXT]
</div>
<div id="tabs-3">
[MESSAGE]
<div class="row" id="report_list_main">
<div class="row-height">
<div class="col-xs-12 col-sm-10 col-sm-height">
<legend style="float:left">
Tabelle&nbsp;[TABLENAME]
</legend>
<form method="post" action="#tabs-3">
<fieldset style="float: right;">
<input type="text" name="table" value="[TABLENAME]" hidden></input>
<table width="100%" border="0" class="mkTableFormular">
<tr>
<td><button name="submit" value="erzeugen" class="ui-button-icon" style="width:100%;float:right;">Bericht erzeugen</button></td>
</tr>
</table>
</fieldset>
</form>
<div>
[TAB3]
</div>
</div>
</div>
</div>
[TAB3NEXT]
</div>
<!-- tab view schließen -->
</div>
<script>
function alleauswaehlen()
{
var wert = $('#auswahlalle').prop('checked');
$('#columnstab').find(':checkbox').prop('checked',wert);
}
</script>

Some files were not shown because too many files have changed in this diff Show More