Author SHA1 Message Date
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
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
264 changed files with 30676 additions and 30152 deletions
+1 -4
View File
@@ -54,14 +54,11 @@ memory_limit = 256M
## Install additional zip ## Install additional zip
`sudo apt-get install zip` `sudo apt-get install zip`
## Install mysql client
`sudo apt-get install mysql-client`
## Install database server ## Install database server
`sudo apt-get install mariadb-server` `sudo apt-get install mariadb-server`
## Configure database server ## Configure database server
`sudo mysql_secure_installation` `sudo mariadb-secure-installation`
``` ```
NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY! SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY!
@@ -128,7 +128,7 @@ final class ImapMailClient implements MailClientInterface
$message = $this->imap->getMessage($msgNumber); $message = $this->imap->getMessage($msgNumber);
} catch (Exception $e) { } catch (Exception $e) {
throw new MessageNotFoundException( 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))
); );
} }
@@ -5,6 +5,7 @@ declare(strict_types=1);
namespace Xentral\Components\MailClient\Data; namespace Xentral\Components\MailClient\Data;
use DateTime; use DateTime;
use DateTimeImmutable;
use DateTimeInterface; use DateTimeInterface;
use JsonSerializable; use JsonSerializable;
use Throwable; use Throwable;
@@ -307,10 +308,13 @@ final class MailMessageData implements MailMessageInterface, JsonSerializable
if ($date === null) { if ($date === null) {
return null; return null;
} }
$dateTime = date_create($date->getValue()); /* $dateTime = date_create($date->getValue());
if ($dateTime === false) { if ($dateTime === false) {
throw new InvalidArgumentException('Invalid date: '.$date->getValue());
return null; return null;
} }*/
$dateTime = new DateTimeImmutable($date->getValue());
return $dateTime; return $dateTime;
} }
@@ -35,7 +35,7 @@ final class Psr4ClassNameResolver
{ {
// Normalize inputs // Normalize inputs
$prefix = trim($prefix, '\\') . '\\'; $prefix = trim($prefix, '\\') . '\\';
$baseDir = rtrim($baseDir, '/') . '/'; $baseDir = rtrim($baseDir, '/\\') . DIRECTORY_SEPARATOR;
$this->prefixes[$prefix] = $baseDir; $this->prefixes[$prefix] = $baseDir;
} }
+5
View File
@@ -492,6 +492,8 @@ final class ReportService
$testResult['messagetype'] = 'error'; $testResult['messagetype'] = 'error';
$testResult['message'] = sprintf("QUERY FAILED:\n%s", $e->getMessage()); $testResult['message'] = sprintf("QUERY FAILED:\n%s", $e->getMessage());
$testResult['message'] .= "\n\r".$compiled;
return $testResult; return $testResult;
} }
@@ -500,6 +502,9 @@ final class ReportService
if(count($rows) < 101){ if(count($rows) < 101){
$message = sprintf('Query successful: %s datasets found', count($rows)); $message = sprintf('Query successful: %s datasets found', count($rows));
} }
$message .= "\n\r".print_r($rows[0],true);
$testResult = [ $testResult = [
'messagetype' => 'success', 'messagetype' => 'success',
'message' => $message, 'message' => $message,
@@ -335,7 +335,7 @@ class TicketImportHelper
$queue_id = $this->mailAccount->getTicketQueueId(); $queue_id = $this->mailAccount->getTicketQueueId();
if (!empty($queue_id)) { 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` ( $insertTicket = "INSERT INTO `ticket` (
@@ -408,9 +408,6 @@ class TicketImportHelper
$this->logger->error('Failed to insert ticket message into db', ['exception' => $e]); $this->logger->error('Failed to insert ticket message into db', ['exception' => $e]);
} }
$this->applyTicketRules($messageId);
return($result); return($result);
} }
@@ -440,7 +437,7 @@ class TicketImportHelper
foreach ($ruleArray as $rule) { 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(); $update = $this->db->update();
@@ -461,12 +458,16 @@ class TicketImportHelper
$this->db->perform($sql, ['ticket_id' => $ticketId]); $this->db->perform($sql, ['ticket_id' => $ticketId]);
*/ */
if ($rule['is_spam'] === 1) { if ($rule['is_spam'] == 1) {
$sql = "UPDATE `ticket_nachricht` SET `status` = \'spam\' WHERE `id` = '".$ticketMessageId."'"; $status = 'spam';
$this->db->Update($sql); } 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']."', `warteschlange` = '".$rule['queue_id']."', `status` = '".$status."' WHERE `id` = '".$ticketId."'";
$this->logger->debug('ticket rule sql',['sql' => $sql]);
$this->db->Update($sql); $this->db->Update($sql);
} }
} }
@@ -511,7 +512,10 @@ class TicketImportHelper
continue; continue;
} }
} catch (Throwable $e) { } 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; continue;
} }
} }
@@ -573,14 +577,17 @@ class TicketImportHelper
$this->logger->debug('Text (converted)',['plain' => $action, 'html' => $action_html]); $this->logger->debug('Text (converted)',['plain' => $action, 'html' => $action_html]);
// Import database emailbackup // Import database emailbackup
$date = $message->getDate(); try {
if (is_null($date)) { // This should not be happening -> Todo check getDate function $date = $message->getDate();
$this->logger->debug('Null date',['subject' => $message->getSubject(), $message->getHeader('date')->getValue()]);
return(false);
} else {
$timestamp = $date->getTimestamp();
$frommd5 = md5($from . $subject . $timestamp);
} }
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'); $empfang = $date->format('Y-m-d H:i:s');
$sql = "SELECT COUNT(id) $sql = "SELECT COUNT(id)
FROM `emailbackup_mails` FROM `emailbackup_mails`
@@ -693,6 +700,12 @@ class TicketImportHelper
$from $from
); );
// Only for new tickets: apply filter rules
if (!$ticketexists) {
$this->applyTicketRules($ticketnachricht);
}
if ($ticketnachricht > 0 && $emailbackup_mails_id > 0) { if ($ticketnachricht > 0 && $emailbackup_mails_id > 0) {
$this->db->Update( $this->db->Update(
"UPDATE `emailbackup_mails` "UPDATE `emailbackup_mails`
@@ -837,8 +850,8 @@ class TicketImportHelper
$this->mailAccount->isAutoresponseEnabled() $this->mailAccount->isAutoresponseEnabled()
&& $this->mailAccount->getAutoresponseText() !== '' && $this->mailAccount->getAutoresponseText() !== ''
&& ( && (
$this->erpApi->AutoresponderBlacklist($from) !== 1 // $this->erpApi->AutoresponderBlacklist($from) !== 1 ||
|| $this->mailAccount->isAutoresponseLimitEnabled() === false $this->mailAccount->isAutoresponseLimitEnabled() === false
) )
) { ) {
+2 -2
View File
@@ -30,10 +30,10 @@ $factoryServiceMap = @include $serviceCacheFile;
if (!is_file($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 = new Psr4ClassNameResolver();
$resolver->addNamespace('Xentral\\', __DIR__); $resolver->addNamespace('Xentral\\', __DIR__);
$resolver->excludeFile(__DIR__ . '/bootstrap.php'); $resolver->excludeFile(__DIR__ . DIRECTORY_SEPARATOR . 'bootstrap.php');
$generator = new ClassMapGenerator($resolver, __DIR__); $generator = new ClassMapGenerator($resolver, __DIR__);
$installer = new Installer($generator, $resolver); $installer = new Installer($generator, $resolver);
+2 -2
View File
@@ -125,9 +125,9 @@ $firmendatenid = $app->DB->Select("SELECT MAX(id) FROM firmendaten LIMIT 1");
); );
try { try {
if($anzargs > 2){ 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{ }else{
$message .= $app->erp->LagerSync($articleId, true); $message .= $app->erp->LagerSync($articleId, false);
} }
} }
catch (Exception $exception) { catch (Exception $exception) {
+5 -1
View File
@@ -1252,7 +1252,7 @@ Options -Indexes
# Deny access to all *.php # Deny access to all *.php
Order deny,allow Order deny,allow
Allow from all 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 Order Allow,Deny
Allow from all Allow from all
</FilesMatch> </FilesMatch>
@@ -1271,6 +1271,10 @@ Allow from all
Order Allow,Deny Order Allow,Deny
Allow from all Allow from all
</Files> </Files>
<Files robots.txt>
Order Allow,Deny
Allow from all
</Files>
# end # end
'); ');
+18 -1
View File
@@ -1424,7 +1424,7 @@ class DB{
if(empty($TableName) || empty($IDFieldName) || empty($IDToDuplicate)) { if(empty($TableName) || empty($IDFieldName) || empty($IDToDuplicate)) {
return null; return null;
} }
/*
$sql = "SELECT * FROM $TableName WHERE $IDFieldName = $IDToDuplicate"; $sql = "SELECT * FROM $TableName WHERE $IDFieldName = $IDToDuplicate";
$result = @mysqli_query($this->connection,$sql); $result = @mysqli_query($this->connection,$sql);
if(empty($result)) { if(empty($result)) {
@@ -1442,6 +1442,23 @@ class DB{
} }
$sql .= $RowKeys[$i] . " = '" . $this->real_escape_string($RowValues[$i]) . "'"; $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); @mysqli_query($this->connection,$sql);
$id = $this->GetInsertID(); $id = $this->GetInsertID();
+2
View File
@@ -426,10 +426,12 @@
} }
}elseif(is_object($xml)) }elseif(is_object($xml))
{ {
$xml = (array) $xml;
if(count($xml) > 0) if(count($xml) > 0)
{ {
foreach($xml as $k => $v) foreach($xml as $k => $v)
{ {
$v = (array) $v;
if(count($v) > 0) if(count($v) > 0)
{ {
if($lvl < 10) if($lvl < 10)
+268 -112
View File
@@ -1259,7 +1259,7 @@ class YUI {
}elseif($check[0]['sort'] < $check2[0]['pos']) }elseif($check[0]['sort'] < $check2[0]['pos'])
{ {
$kinderartikel = $this->app->DB->SelectArr("SELECT id,sort FROM ".$module."_position WHERE explodiert_parent ='".$check[0]['id']."' ORDER BY sort ASC"); $kinderartikel = $this->app->DB->SelectArr("SELECT id,sort FROM ".$module."_position WHERE explodiert_parent ='".$check[0]['id']."' ORDER BY sort ASC");
if(count($kinderartikel)){ if((empty($kinderartikel)?0:count($kinderartikel))){
$maxsortkind = $this->app->DB->Select("SELECT max(sort) FROM ".$module."_position WHERE explodiert_parent ='".$check[0]['id']."'"); $maxsortkind = $this->app->DB->Select("SELECT max(sort) FROM ".$module."_position WHERE explodiert_parent ='".$check[0]['id']."'");
$zuverschiebendezwischenpositionen = $this->app->DB->SelectArr("SELECT ID,pos FROM beleg_zwischenpositionen WHERE doctype='$module' AND doctypeid='$id' AND pos <='$maxsortkind' AND pos >= '".$check[0]['sort']."'"); $zuverschiebendezwischenpositionen = $this->app->DB->SelectArr("SELECT ID,pos FROM beleg_zwischenpositionen WHERE doctype='$module' AND doctypeid='$id' AND pos <='$maxsortkind' AND pos >= '".$check[0]['sort']."'");
$zwipos = "(".implode(",", $zuverschiebendezwischenpositionen).")"; $zwipos = "(".implode(",", $zuverschiebendezwischenpositionen).")";
@@ -1273,13 +1273,13 @@ class YUI {
$this->app->DB->Update("UPDATE ".$module."_position SET sort = ".$check2[0]['pos']." WHERE $module = '$id' AND id = '".$check[0]['id']."'"); $this->app->DB->Update("UPDATE ".$module."_position SET sort = ".$check2[0]['pos']." WHERE $module = '$id' AND id = '".$check[0]['id']."'");
if(!empty($kinderartikel)){ if(!empty($kinderartikel)){
$elternsort = $check[0]['sort']; $elternsort = $check[0]['sort'];
$ckinderartikel = count($kinderartikel); $ckinderartikel = (empty($kinderartikel)?0:count($kinderartikel));
for ($i=0; $i < $ckinderartikel; $i++) { for ($i=0; $i < $ckinderartikel; $i++) {
$this->app->DB->Update("UPDATE beleg_zwischenpositionen SET pos = pos - 1 WHERE doctype = '".$module."' AND doctypeid = '$id' AND pos < '".($check2[0]['pos'])."' AND pos >= '".$check[0]['sort']."'"); $this->app->DB->Update("UPDATE beleg_zwischenpositionen SET pos = pos - 1 WHERE doctype = '".$module."' AND doctypeid = '$id' AND pos < '".($check2[0]['pos'])."' AND pos >= '".$check[0]['sort']."'");
$this->app->DB->Update("UPDATE ".$module."_position SET sort = sort - 1 WHERE $module = '$id' AND sort > '$elternsort' AND sort <= '".$check2[0]['pos']."'"); $this->app->DB->Update("UPDATE ".$module."_position SET sort = sort - 1 WHERE $module = '$id' AND sort > '$elternsort' AND sort <= '".$check2[0]['pos']."'");
$this->app->DB->Update("UPDATE ".$module."_position SET sort = '".($check2[0]['pos']-$i)."' WHERE $module = '$id' AND id = '".$kinderartikel[$i]['id']."' LIMIT 1"); $this->app->DB->Update("UPDATE ".$module."_position SET sort = '".($check2[0]['pos']-$i)."' WHERE $module = '$id' AND id = '".$kinderartikel[$i]['id']."' LIMIT 1");
} }
if(count($zuverschiebendezwischenpositionen)){ if((empty($zuverschiebendezwischenpositionen)?0:count($zuverschiebendezwischenpositionen))){
$positionsanzahl = $this->app->DB->Select("SELECT sort-".$check[0]['sort']." FROM auftrag_position WHERE id = '".$check[0]['id']."'"); $positionsanzahl = $this->app->DB->Select("SELECT sort-".$check[0]['sort']." FROM auftrag_position WHERE id = '".$check[0]['id']."'");
foreach ($zuverschiebendezwischenpositionen as $zkey => $zvalue) { foreach ($zuverschiebendezwischenpositionen as $zkey => $zvalue) {
$this->app->DB->Update("UPDATE beleg_zwischenpositionen SET pos = ".$zvalue['pos']." + $positionsanzahl WHERE id = '".$zvalue['ID']."'"); $this->app->DB->Update("UPDATE beleg_zwischenpositionen SET pos = ".$zvalue['pos']." + $positionsanzahl WHERE id = '".$zvalue['ID']."'");
@@ -1293,7 +1293,7 @@ class YUI {
{ {
$kinderartikel = $this->app->DB->SelectArr("SELECT id,sort FROM ".$module."_position WHERE explodiert_parent ='".$check[0]['id']."' ORDER BY sort ASC"); $kinderartikel = $this->app->DB->SelectArr("SELECT id,sort FROM ".$module."_position WHERE explodiert_parent ='".$check[0]['id']."' ORDER BY sort ASC");
$zuverschiebendezwischenpositionen= array(0); $zuverschiebendezwischenpositionen= array(0);
if(count($kinderartikel)){ if((empty($kinderartikel)?0:count($kinderartikel))){
$maxsortkind = $this->app->DB->Select("SELECT max(sort) FROM ".$module."_position WHERE explodiert_parent ='".$check[0]['id']."'"); $maxsortkind = $this->app->DB->Select("SELECT max(sort) FROM ".$module."_position WHERE explodiert_parent ='".$check[0]['id']."'");
$zuverschiebendezwischenpositionentmp = $this->app->DB->SelectArr("SELECT ID FROM beleg_zwischenpositionen WHERE doctype='$module' AND doctypeid='$id' AND pos <='$maxsortkind' AND pos >= '".$check[0]['sort']."'"); $zuverschiebendezwischenpositionentmp = $this->app->DB->SelectArr("SELECT ID FROM beleg_zwischenpositionen WHERE doctype='$module' AND doctypeid='$id' AND pos <='$maxsortkind' AND pos >= '".$check[0]['sort']."'");
$zuverschiebendezwischenpositionen = array(0); $zuverschiebendezwischenpositionen = array(0);
@@ -1319,7 +1319,7 @@ class YUI {
if(!empty($kinderartikel)){ if(!empty($kinderartikel)){
$elternsort = $check2[0]['pos']+1; $elternsort = $check2[0]['pos']+1;
$zielpos = $elternsort+1; $zielpos = $elternsort+1;
$ckinderartikel = count($kinderartikel); $ckinderartikel = (empty($kinderartikel)?0:count($kinderartikel));
for ($i=0; $i < $ckinderartikel; $i++) { for ($i=0; $i < $ckinderartikel; $i++) {
$this->app->DB->Update("UPDATE ".$module."_position SET sort = sort + 1 WHERE $module = '$id' AND sort < '".$kinderartikel[$i]['sort']."' AND sort > '".($elternsort+$i)."'"); $this->app->DB->Update("UPDATE ".$module."_position SET sort = sort + 1 WHERE $module = '$id' AND sort < '".$kinderartikel[$i]['sort']."' AND sort > '".($elternsort+$i)."'");
$this->app->DB->Update("UPDATE ".$module."_position SET sort = '".($zielpos+$i)."' WHERE $module = '$id' AND id = '".$kinderartikel[$i]['id']."' LIMIT 1"); $this->app->DB->Update("UPDATE ".$module."_position SET sort = '".($zielpos+$i)."' WHERE $module = '$id' AND id = '".$kinderartikel[$i]['id']."' LIMIT 1");
@@ -1355,12 +1355,12 @@ class YUI {
if($check[0]['sort'] < $check2[0]['sort']) if($check[0]['sort'] < $check2[0]['sort'])
{ {
$maxsort = $check[0]['sort']; $maxsort = $check[0]['sort'];
$zuverschiebendezwischenpositionen = ''; $zuverschiebendezwischenpositionen = array(0);
$kinderartikel = $this->app->DB->SelectArr("SELECT id,sort FROM ".$module."_position WHERE explodiert_parent ='".$check[0]['id']."' ORDER BY sort ASC"); $kinderartikel = $this->app->DB->SelectArr("SELECT id,sort FROM ".$module."_position WHERE explodiert_parent ='".$check[0]['id']."' ORDER BY sort ASC");
if(count($kinderartikel)){ if((empty($kinderartikel)?0:count($kinderartikel))){
$maxsortkind = $this->app->DB->Select("SELECT max(sort) FROM ".$module."_position WHERE explodiert_parent ='".$check[0]['id']."'"); $maxsortkind = $this->app->DB->Select("SELECT max(sort) FROM ".$module."_position WHERE explodiert_parent ='".$check[0]['id']."'");
$zuverschiebendezwischenpositionentmp = $this->app->DB->SelectArr("SELECT ID FROM beleg_zwischenpositionen WHERE doctype='$module' AND doctypeid='$id' AND pos >='$maxsort' AND pos <= '$maxsortkind'"); $zuverschiebendezwischenpositionentmp = $this->app->DB->SelectArr("SELECT ID FROM beleg_zwischenpositionen WHERE doctype='$module' AND doctypeid='$id' AND pos >='$maxsort' AND pos <= '$maxsortkind'");
$zuverschiebendezwischenpositionen = array(); $zuverschiebendezwischenpositionen = array(0);
if(is_array($zuverschiebendezwischenpositionentmp)){ if(is_array($zuverschiebendezwischenpositionentmp)){
foreach ($zuverschiebendezwischenpositionentmp as $key => $value) { foreach ($zuverschiebendezwischenpositionentmp as $key => $value) {
$zuverschiebendezwischenpositionen[] = $value['ID']; $zuverschiebendezwischenpositionen[] = $value['ID'];
@@ -1376,10 +1376,10 @@ class YUI {
$this->app->DB->Update("UPDATE ".$module."_position SET sort = '".$check2[0]['sort']."' WHERE $module = '$id' AND id = '".$check[0]['id']."' LIMIT 1"); $this->app->DB->Update("UPDATE ".$module."_position SET sort = '".$check2[0]['sort']."' WHERE $module = '$id' AND id = '".$check[0]['id']."' LIMIT 1");
if(!empty($kinderartikel)){ if(!empty($kinderartikel)){
$differenzwert = $check2[0]['sort'] - $check[0]['sort']-count($kinderartikel); $differenzwert = $check2[0]['sort'] - $check[0]['sort']-(empty($kinderartikel)?0:count($kinderartikel));
$this->app->DB->Update("UPDATE beleg_zwischenpositionen SET pos=pos+$differenzwert WHERE id IN $zwipos"); $this->app->DB->Update("UPDATE beleg_zwischenpositionen SET pos=pos+$differenzwert WHERE id IN $zwipos");
$elternsort = $check2[0]['sort']; $elternsort = $check2[0]['sort'];
$ckinderartikel = count($kinderartikel); $ckinderartikel = (empty($kinderartikel)?0:count($kinderartikel));
for ($i=0; $i < $ckinderartikel; $i++) { for ($i=0; $i < $ckinderartikel; $i++) {
$this->app->DB->Update("UPDATE ".$module."_position SET sort = sort - 1 WHERE $module = '$id' AND sort > '".$kinderartikel[$i]['sort']."' AND sort < '$elternsort'"); $this->app->DB->Update("UPDATE ".$module."_position SET sort = sort - 1 WHERE $module = '$id' AND sort > '".$kinderartikel[$i]['sort']."' AND sort < '$elternsort'");
$this->app->DB->Update("UPDATE ".$module."_position SET sort = '$elternsort' WHERE $module = '$id' AND id = '".$kinderartikel[$i]['id']."' LIMIT 1"); $this->app->DB->Update("UPDATE ".$module."_position SET sort = '$elternsort' WHERE $module = '$id' AND id = '".$kinderartikel[$i]['id']."' LIMIT 1");
@@ -1412,7 +1412,7 @@ class YUI {
$differenzwert = $check[0]['sort'] - ($check2[0]['sort'] + 1); $differenzwert = $check[0]['sort'] - ($check2[0]['sort'] + 1);
$this->app->DB->Update("UPDATE beleg_zwischenpositionen SET pos=pos-$differenzwert WHERE id IN $zwipos"); $this->app->DB->Update("UPDATE beleg_zwischenpositionen SET pos=pos-$differenzwert WHERE id IN $zwipos");
$elternsort = $check2[0]['sort']+1; $elternsort = $check2[0]['sort']+1;
$ckinderartikel = count($kinderartikel); $ckinderartikel = (empty($kinderartikel)?0:count($kinderartikel));
for ($i=0; $i < $ckinderartikel; $i++) { for ($i=0; $i < $ckinderartikel; $i++) {
$this->app->DB->Update("UPDATE beleg_zwischenpositionen SET pos = pos + 1 WHERE doctype = '".$module."' AND doctypeid = '$id' AND pos >= '".$check2[0]['sort']."' AND pos <= '$maxsortkind' AND NOT id IN $zwipos"); $this->app->DB->Update("UPDATE beleg_zwischenpositionen SET pos = pos + 1 WHERE doctype = '".$module."' AND doctypeid = '$id' AND pos >= '".$check2[0]['sort']."' AND pos <= '$maxsortkind' AND NOT id IN $zwipos");
$this->app->DB->Update("UPDATE ".$module."_position SET sort = sort + 1 WHERE $module = '$id' AND sort < '".$maxsortkind."' AND sort > '$elternsort'"); $this->app->DB->Update("UPDATE ".$module."_position SET sort = sort + 1 WHERE $module = '$id' AND sort < '".$maxsortkind."' AND sort > '$elternsort'");
@@ -1455,6 +1455,8 @@ class YUI {
$cmd = $this->app->Secure->GetGET('cmd'); $cmd = $this->app->Secure->GetGET('cmd');
} }
$priceCol = 'b.preis';
if($cmd === 'getpreise') { if($cmd === 'getpreise') {
$ret = null; $ret = null;
//$scol = $this->app->Secure->GetPOST('scol'); //$scol = $this->app->Secure->GetPOST('scol');
@@ -1472,7 +1474,6 @@ class YUI {
$projekt = $moduleArr['projekt'];//$this->app->DB->Select("SELECT projekt FROM $module WHERE id = '$id' LIMIT 1"); $projekt = $moduleArr['projekt'];//$this->app->DB->Select("SELECT projekt FROM $module WHERE id = '$id' LIMIT 1");
$adresse = $moduleArr['adresse'];//$this->app->DB->Select("SELECT adresse FROM $module WHERE id = '$id' LIMIT 1"); $adresse = $moduleArr['adresse'];//$this->app->DB->Select("SELECT adresse FROM $module WHERE id = '$id' LIMIT 1");
$funktion = ucfirst($module).'MitUmsatzeuer'; $funktion = ucfirst($module).'MitUmsatzeuer';
$priceCol = 'b.preis';
$join = ''; $join = '';
$anrede = 'firma'; $anrede = 'firma';
if(!$this->app->erp->AnzeigeBelegNettoAdresse($anrede, $module, $projekt, $adresse, $id) if(!$this->app->erp->AnzeigeBelegNettoAdresse($anrede, $module, $projekt, $adresse, $id)
@@ -1507,7 +1508,7 @@ class YUI {
$positionsIds = []; $positionsIds = [];
foreach($prices as $priceInForm) { foreach($prices as $priceInForm) {
$priceSplit = explode(':', $priceInForm); $priceSplit = explode(':', $priceInForm);
if(count($priceSplit) == 2) { if((empty($priceSplit)?0:count($priceSplit)) == 2) {
$elementId = $priceSplit[0]; $elementId = $priceSplit[0];
$price = trim($priceSplit[1]); $price = trim($priceSplit[1]);
$idSplit = explode('split', $elementId); $idSplit = explode('split', $elementId);
@@ -1519,7 +1520,7 @@ class YUI {
} }
foreach($quantities as $quantityInForm) { foreach($quantities as $quantityInForm) {
$quantitySplittet = explode(':', $quantityInForm); $quantitySplittet = explode(':', $quantityInForm);
if(count($quantitySplittet) == 2) { if((empty($quantitySplittet)?0:count($quantitySplittet)) == 2) {
$elementId = $quantitySplittet[0]; $elementId = $quantitySplittet[0];
$quantity = $this->app->erp->ReplaceMenge(1, trim($quantitySplittet[1]), 1); $quantity = $this->app->erp->ReplaceMenge(1, trim($quantitySplittet[1]), 1);
if(!is_numeric($quantity)) { if(!is_numeric($quantity)) {
@@ -1541,7 +1542,7 @@ class YUI {
if(!empty($positionsIds)) { if(!empty($positionsIds)) {
$positions = $this->app->DB->SelectArr( $positions = $this->app->DB->SelectArr(
sprintf( sprintf(
"SELECT b.id, %s AS `preis`, b.menge "SELECT b.id, %s AS `preis`, trim(b.menge)+0 as menge
FROM `%s` AS `b` FROM `%s` AS `b`
%s %s
WHERE b.`%s` = %d AND b.id IN (%s)", WHERE b.`%s` = %d AND b.id IN (%s)",
@@ -1560,8 +1561,8 @@ class YUI {
) { ) {
$price = rtrim(number_format($position['preis'], 8, ',', '.'), '0'); $price = rtrim(number_format($position['preis'], 8, ',', '.'), '0');
$priceSplit = explode(',', $price); $priceSplit = explode(',', $price);
if(strlen($priceSplit[count($priceSplit)-1]) < 2) { if(strlen($priceSplit[(empty($priceSplit)?0:count($priceSplit))-1]) < 2) {
$price .= str_repeat('0',2-strlen($priceSplit[count($priceSplit)-1])); $price .= str_repeat('0',2-strlen($priceSplit[(empty($priceSplit)?0:count($priceSplit))-1]));
} }
$ret[] = ['elid' => $arr[$positionId]['price_id'], 'value' => $price]; $ret[] = ['elid' => $arr[$positionId]['price_id'], 'value' => $price];
} }
@@ -2251,7 +2252,7 @@ class YUI {
$allestaffelpreise = array(); $allestaffelpreise = array();
$allestaffelpreise = $this->app->DB->SelectArr("SELECT * FROM verkaufspreise WHERE artikel='$artikel_id' AND geloescht = 0 AND (gueltig_bis >= '".date("Y-m-d")."' OR gueltig_bis = '0000-00-00') AND (gueltig_ab <= '".date("Y-m-d")."' OR gueltig_ab = '0000-00-00') AND (adresse='0' OR adresse='$adresse') AND (gruppe='0') AND inbelegausblenden=0"); $allestaffelpreise = $this->app->DB->SelectArr("SELECT * FROM verkaufspreise WHERE artikel='$artikel_id' AND geloescht = 0 AND (gueltig_bis >= '".date("Y-m-d")."' OR gueltig_bis = '0000-00-00') AND (gueltig_ab <= '".date("Y-m-d")."' OR gueltig_ab = '0000-00-00') AND (adresse='0' OR adresse='$adresse') AND (gruppe='0') AND inbelegausblenden=0");
$anzeigepreise = array(); $anzeigepreise = array();
for ($i=0; $i < count($allestaffelpreise); $i++) { for ($i=0; $i < (empty($allestaffelpreise)?0:count($allestaffelpreise)); $i++) {
if(!isset($anzeigepreise[$allestaffelpreise[$i]['ab_menge']])){ if(!isset($anzeigepreise[$allestaffelpreise[$i]['ab_menge']])){
$anzeigepreise[$allestaffelpreise[$i]['ab_menge']] = $allestaffelpreise[$i]; $anzeigepreise[$allestaffelpreise[$i]['ab_menge']] = $allestaffelpreise[$i];
}else{ }else{
@@ -2260,7 +2261,7 @@ class YUI {
} }
} }
} }
if(count($anzeigepreise)>1){ if((empty($anzeigepreise)?0:count($anzeigepreise))>1){
ksort($anzeigepreise); ksort($anzeigepreise);
$staffelpreistext = ''; $staffelpreistext = '';
$belegsprache = $this->app->DB->Select("SELECT sprache FROM $module WHERE id='$id' LIMIT 1"); $belegsprache = $this->app->DB->Select("SELECT sprache FROM $module WHERE id='$id' LIMIT 1");
@@ -2577,11 +2578,19 @@ class YUI {
if(CHAR_LENGTH(b.bezeichnung)>" . $this->app->erp->MaxArtikelbezeichnung() . ",CONCAT(SUBSTR(b.bezeichnung,1," . $this->app->erp->MaxArtikelbezeichnung() . "),'...'),b.bezeichnung)) if(CHAR_LENGTH(b.bezeichnung)>" . $this->app->erp->MaxArtikelbezeichnung() . ",CONCAT(SUBSTR(b.bezeichnung,1," . $this->app->erp->MaxArtikelbezeichnung() . "),'...'),b.bezeichnung))
) $erweiterte_ansicht) ) $erweiterte_ansicht)
as Artikel, as Artikel,
p.abkuerzung as projekt,
b.nummer as nummer,
DATE_FORMAT(lieferdatum,'%d.%m.%Y') as lieferdatum,
trim(b.menge)+0 as menge,
".$this->FormatPreis($preiscell)." as preis,
b.waehrung,
".$this->FormatPreis('b.rabatt')." as rabatt,";
if ($this->app->erp->RechteVorhanden('auftrag','einkaufspreise')) {
$sql .= $this->FormatPreis('einkaufspreis')." as einkaufspreis,
p.abkuerzung as projekt, b.nummer as nummer, DATE_FORMAT(lieferdatum,'%d.%m.%Y') as lieferdatum, ".$this->app->erp->FormatMenge('b.menge')." as menge, ".$this->FormatPreis($preiscell)." as preis,b.waehrung, ".$this->FormatPreis('b.rabatt')." as rabatt, "; CONCAT(".$this->app->erp->FormatPreis("ROUND(deckungsbeitrag*100,2)",2).",'%') AS DB,
";
}
$sql .= "b.id as id $sql .= "b.id as id
FROM $table b FROM $table b
@@ -2600,7 +2609,7 @@ class YUI {
as Artikel, as Artikel,
p.abkuerzung as projekt, b.nummer as nummer, DATE_FORMAT(lieferdatum,'%d.%m.%Y') as lieferdatum, ".$this->app->erp->FormatMenge('b.menge')." as menge, if(b.geliefert, ".$this->app->erp->FormatMenge('b.geliefert')." ,'-') as geliefert, b.id as id p.abkuerzung as projekt, b.nummer as nummer, DATE_FORMAT(lieferdatum,'%d.%m.%Y') as lieferdatum, trim(b.menge)+0 as menge, if(b.geliefert, ".$this->app->erp->FormatMenge('b.geliefert')." ,'-') as geliefert, b.id as id
FROM $table b FROM $table b
LEFT JOIN artikel a ON a.id=b.artikel LEFT JOIN projekt p ON b.projekt=p.id LEFT JOIN artikel a ON a.id=b.artikel LEFT JOIN projekt p ON b.projekt=p.id
WHERE b.$module='$id'"; WHERE b.$module='$id'";
@@ -2655,7 +2664,7 @@ class YUI {
p.abkuerzung as projekt, b.nummer as nummer, DATE_FORMAT(lieferdatum,'%d.%m.%Y') as lieferdatum, p.abkuerzung as projekt, b.nummer as nummer, DATE_FORMAT(lieferdatum,'%d.%m.%Y') as lieferdatum,
".$this->app->erp->FormatMenge('b.menge')." as menge, trim(b.menge)+0 as menge,
if(b.geliefert, ".$this->app->erp->FormatMenge('b.geliefert')." ,'-') as geliefert, if(b.geliefert, ".$this->app->erp->FormatMenge('b.geliefert')." ,'-') as geliefert,
if(b.menge_eingang, ".$this->app->erp->FormatMenge('b.menge_eingang')." ,'-') as `Eingang`, if(b.menge_eingang, ".$this->app->erp->FormatMenge('b.menge_eingang')." ,'-') as `Eingang`,
if(b.menge_gutschrift, ".$this->app->erp->FormatMenge('b.menge_gutschrift')." ,'-') as `Menge Gutschrift`, if(b.menge_gutschrift, ".$this->app->erp->FormatMenge('b.menge_gutschrift')." ,'-') as `Menge Gutschrift`,
@@ -2677,7 +2686,7 @@ class YUI {
as Artikel, as Artikel,
p.abkuerzung as projekt, b.nummer as nummer, ".$this->app->erp->FormatMenge('b.menge')." as menge, p.abkuerzung as projekt, b.nummer as nummer, trim(b.menge)+0 as menge,
".$this->FormatPreis(' b.preis')." as preis, ".$this->FormatPreis(' b.preis')." as preis,
b.id as id b.id as id
@@ -2694,7 +2703,7 @@ class YUI {
as Artikel, as Artikel,
p.abkuerzung as projekt, b.nummer as nummer, DATE_FORMAT(b.lieferdatum,'%d.%m.%Y') as lieferdatum, ".$this->app->erp->FormatMenge('b.menge')." as menge, p.abkuerzung as projekt, b.nummer as nummer, DATE_FORMAT(b.lieferdatum,'%d.%m.%Y') as lieferdatum, trim(b.menge)+0 as menge,
b.id as id b.id as id
FROM $table b FROM $table b
@@ -2716,7 +2725,7 @@ class YUI {
if(CHAR_LENGTH(b.bezeichnunglieferant)>" . $this->app->erp->MaxArtikelbezeichnung() . ",CONCAT(SUBSTR(CONCAT(b.bezeichnunglieferant,' *'),1," . $this->app->erp->MaxArtikelbezeichnung() . "),'...'),CONCAT(b.bezeichnunglieferant,' *')), if(CHAR_LENGTH(b.bezeichnunglieferant)>" . $this->app->erp->MaxArtikelbezeichnung() . ",CONCAT(SUBSTR(CONCAT(b.bezeichnunglieferant,' *'),1," . $this->app->erp->MaxArtikelbezeichnung() . "),'...'),CONCAT(b.bezeichnunglieferant,' *')),
if(CHAR_LENGTH(b.bezeichnunglieferant)>" . $this->app->erp->MaxArtikelbezeichnung() . ",CONCAT(SUBSTR(b.bezeichnunglieferant,1," . $this->app->erp->MaxArtikelbezeichnung() . "),'...'),b.bezeichnunglieferant))) if(CHAR_LENGTH(b.bezeichnunglieferant)>" . $this->app->erp->MaxArtikelbezeichnung() . ",CONCAT(SUBSTR(b.bezeichnunglieferant,1," . $this->app->erp->MaxArtikelbezeichnung() . "),'...'),b.bezeichnunglieferant)))
as Artikel, as Artikel,
p.abkuerzung as projekt, a.nummer as nummer, DATE_FORMAT(lieferdatum,'%d.%m.%Y') as lieferdatum,".$this->app->erp->FormatMenge('b.menge')." as menge, ".$this->FormatPreis(' b.preis')." as preis, b.waehrung, b.id as id p.abkuerzung as projekt, a.nummer as nummer, DATE_FORMAT(lieferdatum,'%d.%m.%Y') as lieferdatum, trim(b.menge)+0 as menge, ".$this->FormatPreis(' b.preis')." as preis, b.waehrung, b.id as id
FROM $table b FROM $table b
LEFT JOIN artikel a ON a.id=b.artikel LEFT JOIN projekt p ON b.projekt=p.id LEFT JOIN artikel a ON a.id=b.artikel LEFT JOIN projekt p ON b.projekt=p.id
WHERE b.$module='$id'"; WHERE b.$module='$id'";
@@ -3419,7 +3428,7 @@ class YUI {
$check = $this->app->DB->Select("SELECT id FROM `auftragsampel_auftrageinstellungen` LIMIT 1"); $check = $this->app->DB->Select("SELECT id FROM `auftragsampel_auftrageinstellungen` LIMIT 1");
$deaktivertok = false; $deaktivertok = false;
if(!$this->app->DB->error())$deaktivertok = true; if(!$this->app->DB->error())$deaktivertok = true;
$anzahl3 = count($auftragsampel); $anzahl3 = (empty($auftragsampel)?0:count($auftragsampel));
$anzahl += $anzahl3; $anzahl += $anzahl3;
$ifextra2a[] = " a.status = 'abgeschlossen' "; $ifextra2a[] = " a.status = 'abgeschlossen' ";
foreach($auftragsampel as $k => $ampel) foreach($auftragsampel as $k => $ampel)
@@ -3440,7 +3449,7 @@ class YUI {
if($deaktivertok) $_extra2e = "),'<img src=\"./themes/{$this->app->Conf->WFconf['defaulttheme']}/images/abgeschlossen.png\" title=\"Auftragsampel deaktivert\" border=\"0\" style=\"margin-right:1px\">' if($deaktivertok) $_extra2e = "),'<img src=\"./themes/{$this->app->Conf->WFconf['defaulttheme']}/images/abgeschlossen.png\" title=\"Auftragsampel deaktivert\" border=\"0\" style=\"margin-right:1px\">'
)"; )";
if($deaktivertok) $_extra2e = "),'".str_repeat($_extra2icon,count($auftragsampel))."')"; if($deaktivertok) $_extra2e = "),'".str_repeat($_extra2icon,(empty($auftragsampel)?0:count($auftragsampel)))."')";
$extra3 .= ",'".$abgeschlossen."'"; $extra3 .= ",'".$abgeschlossen."'";
$ifextra2a[] = " $ifextra2a[] = "
substring(ifnull(aac.status,'".str_repeat('0', $anzahl3)."'),$k2,1) = '1' "; substring(ifnull(aac.status,'".str_repeat('0', $anzahl3)."'),$k2,1) = '1' ";
@@ -3452,7 +3461,7 @@ class YUI {
$check = $this->app->DB->Select("SELECT id FROM `auftragsampel_auftrageinstellungen` LIMIT 1"); $check = $this->app->DB->Select("SELECT id FROM `auftragsampel_auftrageinstellungen` LIMIT 1");
$deaktivertok = false; $deaktivertok = false;
if(!$this->app->DB->error())$deaktivertok = true; if(!$this->app->DB->error())$deaktivertok = true;
$anzahl3 = count($auftragsampel); $anzahl3 = (empty($auftragsampel)?0:count($auftragsampel));
$anzahl += $anzahl3; $anzahl += $anzahl3;
$ifextra2a[] = " a.status = 'abgeschlossen' "; $ifextra2a[] = " a.status = 'abgeschlossen' ";
foreach($auftragsampel as $ampel) foreach($auftragsampel as $ampel)
@@ -3462,7 +3471,7 @@ class YUI {
if($deaktivertok) $_extra2a = ",if(isnull((SELECT aae.id FROM auftragsampel_auftrageinstellungen aae WHERE aae.auftrag = a.id AND aae.deaktiviert = 1 LIMIT 1)),concat(''"; if($deaktivertok) $_extra2a = ",if(isnull((SELECT aae.id FROM auftragsampel_auftrageinstellungen aae WHERE aae.auftrag = a.id AND aae.deaktiviert = 1 LIMIT 1)),concat(''";
$extra2 .= "IF(isnull( (SELECT aampa.id FROM auftragsampel_auftrag aampa WHERE aampa.auftrag = a.id AND aampa.auftragsampel = '".$ampel['id']."' AND aampa.erledigt = 1) ), "."'<img src=\"./pages/icons/".str_replace('_go_','_stop_',$ampel['icon'])."\" title=\"".$ampel['beschriftung']."\" border=\"0\" style=\"margin-right:1px\">'".","."'<img src=\"./pages/icons/".$ampel['icon']."\" title=\"".$ampel['beschriftung']."\" border=\"0\" style=\"margin-right:1px\">'". ") "; $extra2 .= "IF(isnull( (SELECT aampa.id FROM auftragsampel_auftrag aampa WHERE aampa.auftrag = a.id AND aampa.auftragsampel = '".$ampel['id']."' AND aampa.erledigt = 1) ), "."'<img src=\"./pages/icons/".str_replace('_go_','_stop_',$ampel['icon'])."\" title=\"".$ampel['beschriftung']."\" border=\"0\" style=\"margin-right:1px\">'".","."'<img src=\"./pages/icons/".$ampel['icon']."\" title=\"".$ampel['beschriftung']."\" border=\"0\" style=\"margin-right:1px\">'". ") ";
if($deaktivertok) $_extra2e = "),'<img src=\"./themes/{$this->app->Conf->WFconf['defaulttheme']}/images/abgeschlossen.png\" title=\"Auftragsampel deaktivert\" border=\"0\" style=\"margin-right:1px\">')"; if($deaktivertok) $_extra2e = "),'<img src=\"./themes/{$this->app->Conf->WFconf['defaulttheme']}/images/abgeschlossen.png\" title=\"Auftragsampel deaktivert\" border=\"0\" style=\"margin-right:1px\">')";
if($deaktivertok) $_extra2e = "),'".str_repeat($_extra2icon,count($auftragsampel))."')"; if($deaktivertok) $_extra2e = "),'".str_repeat($_extra2icon,(empty($auftragsampel)?0:count($auftragsampel)))."')";
$extra3 .= ",'".$abgeschlossen."'"; $extra3 .= ",'".$abgeschlossen."'";
$ifextra2a[] = " $ifextra2a[] = "
not isnull( (SELECT aampa.id FROM auftragsampel_auftrag aampa WHERE aampa.auftrag = a.id AND aampa.auftragsampel = '".$ampel['id']."' AND aampa.erledigt = 1) ) "; not isnull( (SELECT aampa.id FROM auftragsampel_auftrag aampa WHERE aampa.auftrag = a.id AND aampa.auftragsampel = '".$ampel['id']."' AND aampa.erledigt = 1) ) ";
@@ -3613,6 +3622,121 @@ class YUI {
'</td></tr></table>')"; '</td></tr></table>')";
} }
function IconsSQL_versandpaket() {
/*
status:
neu ->
Lagergo
lagergo_stop
lagerstop
Schein
summe_go
summe_stop
Auto
liefersperrego
liefersperrestop
marke
portogo
portostop
produktion_usn_gut
storno*/
$lieferschein_kein = "<img src=\"./themes/{$this->app->Conf->WFconf['defaulttheme']}/images/summe_stop.png\" title=\"Kein Lieferschein\" border=\"0\" style=\"margin-right:1px\">";
$lieferschein_ohne_pos = "<img src=\"./themes/{$this->app->Conf->WFconf['defaulttheme']}/images/summe_go.png\" title=\"Lieferschein ohne Positionen\" border=\"0\" style=\"margin-right:1px\">";
$lieferschein_voll = "<img src=\"./themes/{$this->app->Conf->WFconf['defaulttheme']}/images/lagergo.png\" title=\"Lieferschein vollst&auml;ndig\" border=\"0\" style=\"margin-right:1px\">";
$lieferschein_teil = "<img src=\"./themes/{$this->app->Conf->WFconf['defaulttheme']}/images/lagergo_teil.png\" title=\"Lieferschein teilweise\" border=\"0\" style=\"margin-right:1px\">";
$versendet = "<img src=\"./themes/{$this->app->Conf->WFconf['defaulttheme']}/images/liefersperrego.png\" title=\"Versendet\" border=\"0\" style=\"margin-right:1px\">";
$versendet_nicht = "<img src=\"./themes/{$this->app->Conf->WFconf['defaulttheme']}/images/liefersperrestop.png\" title=\"Nicht versendet\" border=\"0\" style=\"margin-right:1px\">";
$paketmarke = "<img src=\"./themes/{$this->app->Conf->WFconf['defaulttheme']}/images/portogo.png\" style=\"margin-right:1px\" title=\"Paketmarke\" border=\"0\">";
$paketmarke_keine = "<img src=\"./themes/{$this->app->Conf->WFconf['defaulttheme']}/images/portostop.png\" style=\"margin-right:1px\" title=\"Keine Paketmarke\" border=\"0\">";
$ausgeliefert = "<img src=\"./themes/{$this->app->Conf->WFconf['defaulttheme']}/images/delivery_ok.png\" style=\"margin-right:1px\" title=\"Ausgeliefert\" border=\"0\">";
$ausgeliefert_nicht = "<img src=\"./themes/{$this->app->Conf->WFconf['defaulttheme']}/images/delivery.png\" style=\"margin-right:1px\" title=\"Nicht ausgeliefert\" border=\"0\">";
$storno = "<img src=\"./themes/{$this->app->Conf->WFconf['defaulttheme']}/images/storno.png\" style=\"margin-right:1px\" title=\"Storniert\" border=\"0\">";
for ($z = 0;$z < 4;$z++) {
$abgeschlossen .= $ausgeliefert;
$storniert .= $storno;
}
return "CONCAT('<table><tr><td nowrap>',
CASE
WHEN status = 'storniert' THEN '$storniert'
ELSE CONCAT(
CASE
WHEN lieferscheine <> '' AND vmenge = lmenge THEN '$lieferschein_voll'
WHEN lieferschein_ohne_pos <> '' AND vmenge IS NULL THEN '$lieferschein_ohne_pos'
WHEN lieferscheine <> '' THEN '$lieferschein_teil'
ELSE
'$lieferschein_kein'
END,
CASE
WHEN tracking <> '' THEN '$paketmarke'
ELSE
'$paketmarke_keine'
END,
CASE
WHEN status = 'versendet' THEN '$versendet'
WHEN status = 'abgeschlossen' THEN '$versendet'
ELSE
'$versendet_nicht'
END,
CASE
WHEN status = 'abgeschlossen' THEN '$ausgeliefert'
ELSE
'$ausgeliefert_nicht'
END
)
END,
'</td></tr></table>')";
}
function IconsSQL_lieferung() {
$lieferschein_kein = "<img src=\"./themes/{$this->app->Conf->WFconf['defaulttheme']}/images/lagerstop.png\" title=\"Keine Artikel in Versandpaketen\" border=\"0\" style=\"margin-right:1px\">";
$lieferschein_ohne_pos = "<img src=\"./themes/{$this->app->Conf->WFconf['defaulttheme']}/images/summe_go.png\" title=\"Lieferschein ohne Positionen\" border=\"0\" style=\"margin-right:1px\">";
$lieferschein_voll = "<img src=\"./themes/{$this->app->Conf->WFconf['defaulttheme']}/images/lagergo.png\" title=\"Artikel vollst&auml;ndig in Versandpaketen\" border=\"0\" style=\"margin-right:1px\">";
$lieferschein_teil = "<img src=\"./themes/{$this->app->Conf->WFconf['defaulttheme']}/images/lagergo_stop.png\" title=\"Artikel teilweise in Versandpaketen\" border=\"0\" style=\"margin-right:1px\">";
$versendet = "<img src=\"./themes/{$this->app->Conf->WFconf['defaulttheme']}/images/liefersperrego.png\" title=\"Versendet\" border=\"0\" style=\"margin-right:1px\">";
$versendet_nicht = "<img src=\"./themes/{$this->app->Conf->WFconf['defaulttheme']}/images/liefersperrestop.png\" title=\"Nicht versendet\" border=\"0\" style=\"margin-right:1px\">";
$versendet_teil = "<img src=\"./themes/{$this->app->Conf->WFconf['defaulttheme']}/images/liefersperregostop.png\" title=\"Teilweise versendet\" border=\"0\" style=\"margin-right:1px\">";
$ausgeliefert = "<img src=\"./themes/{$this->app->Conf->WFconf['defaulttheme']}/images/delivery_ok.png\" style=\"margin-right:1px\" title=\"Ausgeliefert\" border=\"0\">";
$ausgeliefert_nicht = "<img src=\"./themes/{$this->app->Conf->WFconf['defaulttheme']}/images/delivery.png\" style=\"margin-right:1px\" title=\"Nicht ausgeliefert\" border=\"0\">";
$ausgeliefert_teil = "<img src=\"./themes/{$this->app->Conf->WFconf['defaulttheme']}/images/delivery_pending.png\" style=\"margin-right:1px\" title=\"Teilweise ausgeliefert\" border=\"0\">";
$storno = "<img src=\"./themes/{$this->app->Conf->WFconf['defaulttheme']}/images/storno.png\" style=\"margin-right:1px\" title=\"Storniert\" border=\"0\">";
return "CONCAT(
'<table><tr><td nowrap>',
CASE
WHEN vmenge >= lmenge THEN '$lieferschein_voll'
WHEN vmenge < lmenge AND vmenge <> 0 THEN '$lieferschein_teil'
ELSE '$lieferschein_kein'
END,
CASE
WHEN alle_abgeschlossen THEN '$versendet'
WHEN alle_versendet THEN '$versendet'
WHEN eins_versendet THEN '$versendet_teil'
ELSE '$versendet_nicht'
END,
CASE
WHEN alle_abgeschlossen THEN '$ausgeliefert'
WHEN eins_abgeschlossen THEN '$ausgeliefert_teil'
ELSE '$ausgeliefert_nicht'
END,
'</td></tr></table>')";
}
function TablePositionSearch($parsetarget, $name, $callback = "show", $gener) { function TablePositionSearch($parsetarget, $name, $callback = "show", $gener) {
$id = $this->app->Secure->GetGET("id"); $id = $this->app->Secure->GetGET("id");
@@ -3747,7 +3871,7 @@ class YUI {
$module = $this->app->Secure->GetGET("module"); $module = $this->app->Secure->GetGET("module");
$this->app->Tpl->Add('JAVASCRIPT', 'function ' . $name . 'fnFormatDetails ( nTr ) { $this->app->Tpl->Add('JAVASCRIPT', 'function ' . $name . 'fnFormatDetails ( nTr ) {
//var aData = oTable' . $name . '.fnGetData( nTr ); //var aData = oTable' . $name . '.fnGetData( nTr );
var str = aData[' . (isset($menucol)?$menucol:count($heading)-1) . ']; var str = aData[' . (isset($menucol)?$menucol:(empty($heading)?0:count($heading))-1) . '];
var match = str.match(/[1-9]{1}[0-9]*/); var match = str.match(/[1-9]{1}[0-9]*/);
@@ -3770,14 +3894,14 @@ url:strUrl, success:function(html){strReturn = html;}, async:false
} }
'); ');
} }
$colspan = count($heading); $colspan = (empty($heading)?0:count($heading));
//<tr><th colspan="' . $colspan . '"><br></th></tr> //<tr><th colspan="' . $colspan . '"><br></th></tr>
$this->app->Tpl->Add($parsetarget, ' $this->app->Tpl->Add($parsetarget, '
<table cellpadding="0" cellspacing="0" border="0" class="display" id="' . $name . '"> <table cellpadding="0" cellspacing="0" border="0" class="display" id="' . $name . '">
<thead> <thead>
<tr>'); <tr>');
for ($i = 0;$i < count($heading);$i++) { for ($i = 0;$i < (empty($heading)?0:count($heading));$i++) {
$this->app->Tpl->Add($parsetarget, '<th width="' . $width[$i] . '">' . $heading[$i] . '</th>'); $this->app->Tpl->Add($parsetarget, '<th width="' . $width[$i] . '">' . $heading[$i] . '</th>');
} }
$this->app->Tpl->Add($parsetarget, '</tr> $this->app->Tpl->Add($parsetarget, '</tr>
@@ -3791,7 +3915,7 @@ url:strUrl, success:function(html){strReturn = html;}, async:false
<tfoot> <tfoot>
<tr> <tr>
'); ');
for ($i = 0;$i < count($heading);$i++) { for ($i = 0;$i < (empty($heading)?0:count($heading));$i++) {
$this->app->Tpl->Add($parsetarget, '<th>' . $heading[$i] . '</th>'); $this->app->Tpl->Add($parsetarget, '<th>' . $heading[$i] . '</th>');
} }
$this->app->Tpl->Add($parsetarget, ' $this->app->Tpl->Add($parsetarget, '
@@ -5701,12 +5825,8 @@ url:strUrl, success:function(html){strReturn = html;}, async:false
} }
} }
// Fester filter // Fester filter
$more_data6 = $this->app->Secure->GetGET("more_data6");
$more_data7 = $this->app->Secure->GetGET("more_data7");
$more_data8 = $this->app->Secure->GetGET("more_data8");
$more_data4 = $this->app->Secure->GetGET("more_data4"); $more_data4 = $this->app->Secure->GetGET("more_data4");
/*
$versandjoin = ""; $versandjoin = "";
if(isset($parameter['offenversandzentrum']) && !empty($parameter['offenversandzentrum'])) if(isset($parameter['offenversandzentrum']) && !empty($parameter['offenversandzentrum']))
{ {
@@ -5740,7 +5860,7 @@ url:strUrl, success:function(html){strReturn = html;}, async:false
} }
if($versandjoin)$sql .= $versandjoin; if($versandjoin)$sql .= $versandjoin;
*/
if($more_data4 || (isset($parameter['ohnerechnung']) && !empty($parameter['ohnerechnung']))) { if($more_data4 || (isset($parameter['ohnerechnung']) && !empty($parameter['ohnerechnung']))) {
@@ -5816,7 +5936,22 @@ url:strUrl, success:function(html){strReturn = html;}, async:false
if ($more_data3 == 1) $subwhere[] = " l.lieferantenretoure=1 "; if ($more_data3 == 1) $subwhere[] = " l.lieferantenretoure=1 ";
// ENDE EXTRA more // ENDE EXTRA more
for ($j = 0;$j < count($subwhere);$j++) $tmp.= " AND " . $subwhere[$j]; $more_data6 = $this->app->Secure->GetGET("more_data6");
$more_data7 = $this->app->Secure->GetGET("more_data7");
$more_data8 = $this->app->Secure->GetGET("more_data8");
if ($more_data6) {
$subwhere[] = "l.versand_status = 3";
}
if ($more_data7) {
$subwhere[] = "l.versand_status = 1";
}
if ($more_data8) {
$subwhere[] = "l.versand_status IN (2,3)";
}
for ($j = 0;$j < (empty($subwhere)?0:count($subwhere));$j++) $tmp.= " AND " . $subwhere[$j];
$where = " l.id!='' AND l.status!='angelegt' $tmp " . $this->app->erp->ProjektRechte('p.id', true, 'l.vertriebid'); $where = " l.id!='' AND l.status!='angelegt' $tmp " . $this->app->erp->ProjektRechte('p.id', true, 'l.vertriebid');
/* STAMMDATEN */ /* STAMMDATEN */
@@ -6081,11 +6216,11 @@ r.land as land, p.abkuerzung as projekt, r.zahlungsweise as zahlungsweise,
$heading = array('', '', 'Gutschrift', 'Vom', 'Kd-Nr.', 'Kunde', 'Land', 'Projekt', $heading = array('', '', 'Gutschrift', 'Vom', 'Kd-Nr.', 'Kunde', 'Land', 'Projekt',
'Zahlweise', 'Betrag (brutto)', 'bezahlt','RE-Nr.', 'Status','Monitor' ,'Men&uuml;' 'Zahlweise', 'Betrag (brutto)', 'Zahlstatus','Differenz','RE-Nr.', 'Status','Monitor' ,'Men&uuml;'
); );
$width = array('1%', '1%', '10%', '10%', '10%', '25%', '5%', '1%', '1%', '1%', '1%', '1%','5%', '1%','1%', '1%'); $width = array('1%', '1%', '10%', '10%', '10%', '25%', '5%', '1%', '1%', '1%', '1%', '1%', '1%','5%', '1%','1%', '1%');
$findcols = array('open', 'r.belegnr', 'r.belegnr', 'r.datum', 'adr.kundennummer', 'r.name', 'r.land', 'p.abkuerzung', 'r.zahlungsweise', 'r.soll','re.belegnr', 'r.zahlungsstatus', 'r.status', 'pt.payement_status' ,'id'); $findcols = array('open', 'r.belegnr', 'r.belegnr', 'r.datum', 'adr.kundennummer', 'r.name', 'r.land', 'p.abkuerzung', 'r.zahlungsweise', 'r.soll', 'r.zahlungsstatus','r.soll-r.ist', 're.belegnr', 'r.status', 'id');
$searchsql = array('DATE_FORMAT(r.datum,\'%d.%m.%Y\')', 'r.belegnr', 'adr.kundennummer', 'r.name', 'r.land', 'p.abkuerzung','re.belegnr', 'r.status', "FORMAT(r.soll,2{$extended_mysql55})", 'adr.freifeld1', 'r.ihrebestellnummer','r.internebezeichnung','au.internet'); $searchsql = array('DATE_FORMAT(r.datum,\'%d.%m.%Y\')', 'r.belegnr', 'adr.kundennummer', 'r.name', 'r.land', 'p.abkuerzung','re.belegnr', 'r.status', "FORMAT(r.soll,2{$extended_mysql55})", 'adr.freifeld1', 'r.ihrebestellnummer','r.internebezeichnung','au.internet');
$defaultorder = 13; //Optional wenn andere Reihenfolge gewuenscht $defaultorder = 13; //Optional wenn andere Reihenfolge gewuenscht
@@ -6127,20 +6262,31 @@ r.land as land, p.abkuerzung as projekt, r.zahlungsweise as zahlungsweise,
$menu .= "</table>"; $menu .= "</table>";
$menucol = 14; $menucol = 15;
$parameter = $this->app->User->GetParameter('table_filter_gutschrift'); $parameter = $this->app->User->GetParameter('table_filter_gutschrift');
$parameter = base64_decode($parameter); $parameter = base64_decode($parameter);
$parameter = json_decode($parameter, true); $parameter = json_decode($parameter, true);
// SQL statement // SQL statement
$sql = "SELECT SQL_CALC_FOUND_ROWS r.id,'<img src=./themes/{$this->app->Conf->WFconf['defaulttheme']}/images/details_open.png class=details>' as open, concat('<input type=\"checkbox\" name=\"auswahl[]\" value=\"',r.id,'\" />')as auswahl, $sql = "SELECT SQL_CALC_FOUND_ROWS
r.belegnr, r.id,
DATE_FORMAT(r.datum,'%d.%m.%Y') as vom, adr.kundennummer as kundennummer, '<img src=./themes/{$this->app->Conf->WFconf['defaulttheme']}/images/details_open.png class=details>' as open,
CONCAT(" . $this->app->erp->MarkerUseredit("r.name", "r.useredittimestamp") . ", if(r.internebezeichnung!='',CONCAT('<br><i style=color:#999>',r.internebezeichnung,'</i>'),'')) as kunde, concat('<input type=\"checkbox\" name=\"auswahl[]\" value=\"',r.id,'\" />')as auswahl,
r.land as land, p.abkuerzung as projekt, r.zahlungsweise as zahlungsweise, r.belegnr,
FORMAT(r.soll,2{$extended_mysql55}) as soll, r.zahlungsstatus as zahlung, re.belegnr as rechnung, UPPER(r.status) as status, DATE_FORMAT(r.datum,'%d.%m.%Y') as vom,
".$this->IconsSQLReturnOrder()." ,r.id adr.kundennummer as kundennummer,
CONCAT(" . $this->app->erp->MarkerUseredit("r.name", "r.useredittimestamp") . ", if(r.internebezeichnung!='',CONCAT('<br><i style=color:#999>',r.internebezeichnung,'</i>'),'')) as kunde,
r.land as land,
p.abkuerzung as projekt,
r.zahlungsweise as zahlungsweise,
".$this->app->erp->FormatMenge('r.soll',2)." as soll,
r.zahlungsstatus as zahlung,
".$this->app->erp->FormatMenge('r.soll-r.ist',2)." as differenz,
re.belegnr as rechnung,
UPPER(r.status) as status,
".$this->IconsSQLReturnOrder().",
r.id
FROM gutschrift r FROM gutschrift r
LEFT JOIN rechnung re ON re.id=r.rechnungid LEFT JOIN rechnung re ON re.id=r.rechnungid
LEFT JOIN projekt p ON p.id=r.projekt LEFT JOIN projekt p ON p.id=r.projekt
@@ -6173,7 +6319,7 @@ r.land as land, p.abkuerzung as projekt, r.zahlungsweise as zahlungsweise,
$tmp = ''; $tmp = '';
if (!is_null($subwhere)) { if (!is_null($subwhere)) {
for ($j = 0;$j < count($subwhere);$j++) $tmp.= " AND " . $subwhere[$j]; for ($j = 0;$j < (empty($subwhere)?0:count($subwhere));$j++) $tmp.= " AND " . $subwhere[$j];
} }
$where = " r.status!='angelegt' AND r.id!='' ".$tmp ." ". $this->app->erp->ProjektRechte('p.id', true, 'r.vertriebid'); $where = " r.status!='angelegt' AND r.id!='' ".$tmp ." ". $this->app->erp->ProjektRechte('p.id', true, 'r.vertriebid');
@@ -6551,13 +6697,24 @@ r.land as land, p.abkuerzung as projekt, r.zahlungsweise as zahlungsweise,
// $columnfilter = true; // $columnfilter = true;
// SQL statement // SQL statement
$sql = "SELECT SQL_CALC_FOUND_ROWS r.id,'<img src=./themes/{$this->app->Conf->WFconf['defaulttheme']}/images/details_open.png class=details>' as open,concat('<input type=\"checkbox\" name=\"auswahl[]\" value=\"',r.id,'\" />')as auswahl, r.belegnr, DATE_FORMAT(r.datum,'%d.%m.%Y') as vom, $sql = "SELECT SQL_CALC_FOUND_ROWS
if(r.kundennummer <> '',r.kundennummer,adr.kundennummer), r.id,
'<img src=./themes/{$this->app->Conf->WFconf['defaulttheme']}/images/details_open.png class=details>' as open,
CONCAT(" . $this->app->erp->MarkerUseredit("r.name", "r.useredittimestamp") . ", if(r.internebezeichnung!='',CONCAT('<br><i style=color:#999>',r.internebezeichnung,'</i>'),'')) as kunde, concat('<input type=\"checkbox\" name=\"auswahl[]\" value=\"',r.id,'\" />') as auswahl,
r.land as land, p.abkuerzung as projekt, r.zahlungsweise as zahlungsweise, FORMAT(r.soll,2{$extended_mysql55} ) as soll, ifnull(r.waehrung,'EUR'), r.belegnr,
if(r.soll-r.ist+r.skonto_gegeben!=0 AND r.ist > 0 AND r.zahlungsstatus!='bezahlt','teilbezahlt',r.zahlungsstatus) as zahlung, DATE_FORMAT(r.datum,'%d.%m.%Y') as vom,
if(r.soll-r.ist+r.skonto_gegeben!=0 AND r.ist > 0,FORMAT(r.ist-r.soll+r.skonto_gegeben,2{$extended_mysql55}),FORMAT((r.soll-r.ist+r.skonto_gegeben)*-1,2{$extended_mysql55})) as fehlt, if(r.status = 'storniert' AND r.teilstorno = 1,'TEILSTORNO',UPPER(r.status)) as status, ".(!empty($zusatzcols)?implode(', ',$zusatzcols).',':'')." r.id if(r.kundennummer <> '',r.kundennummer,adr.kundennummer),
CONCAT(" . $this->app->erp->MarkerUseredit("r.name", "r.useredittimestamp") . ", if(r.internebezeichnung!='',CONCAT('<br><i style=color:#999>',r.internebezeichnung,'</i>'),'')) as kunde,
r.land as land,
p.abkuerzung as projekt,
r.zahlungsweise as zahlungsweise,
FORMAT(r.soll,2{$extended_mysql55} ) as soll,
ifnull(r.waehrung,'EUR'),
r.zahlungsstatus as zahlung,
if(r.soll-r.ist!=0 AND r.ist > 0,FORMAT(r.ist-r.soll,2{$extended_mysql55}),FORMAT((r.soll-r.ist)*-1,2{$extended_mysql55})) as fehlt,
if(r.status = 'storniert' AND r.teilstorno = 1,'TEILSTORNO',UPPER(r.status)) as status,
".(!empty($zusatzcols)?implode(', ',$zusatzcols).',':'')."
r.id
FROM rechnung r LEFT JOIN projekt p ON p.id=r.projekt LEFT JOIN adresse adr ON r.adresse=adr.id LEFT JOIN auftrag au ON au.id = r.auftragid "; FROM rechnung r LEFT JOIN projekt p ON p.id=r.projekt LEFT JOIN adresse adr ON r.adresse=adr.id LEFT JOIN auftrag au ON au.id = r.auftragid ";
if(isset($parameter['artikel']) && !empty($parameter['artikel'])) { if(isset($parameter['artikel']) && !empty($parameter['artikel'])) {
$artikelid = $this->app->DB->Select("SELECT id FROM artikel where geloescht != 1 AND nummer != 'DEL' AND nummer != '' AND nummer = '".$this->app->DB->real_escape_string(reset(explode(' ',trim($parameter['artikel']))))."' LIMIT 1"); $artikelid = $this->app->DB->Select("SELECT id FROM artikel where geloescht != 1 AND nummer != 'DEL' AND nummer != '' AND nummer = '".$this->app->DB->real_escape_string(reset(explode(' ',trim($parameter['artikel']))))."' LIMIT 1");
@@ -6589,7 +6746,7 @@ r.land as land, p.abkuerzung as projekt, r.zahlungsweise as zahlungsweise,
if ($more_data4 == 1) { if ($more_data4 == 1) {
$subwhere[] = " r.status='storniert' "; $subwhere[] = " r.status='storniert' ";
} }
$csubwhere = !empty($subwhere)?count($subwhere):0; $csubwhere = !empty($subwhere)?(empty($subwhere)?0:count($subwhere)):0;
for ($j = 0;$j < $csubwhere;$j++) { for ($j = 0;$j < $csubwhere;$j++) {
$tmp.= " AND " . $subwhere[$j]; $tmp.= " AND " . $subwhere[$j];
} }
@@ -6858,7 +7015,7 @@ r.land as land, p.abkuerzung as projekt, r.zahlungsweise as zahlungsweise,
if ($more_data1 == 1) $subwhere[] = " a.lagerartikel='1' "; if ($more_data1 == 1) $subwhere[] = " a.lagerartikel='1' ";
$tmp = ''; $tmp = '';
$csubwhere = !empty($subwhere)?count($subwhere):0; $csubwhere = !empty($subwhere)?(empty($subwhere)?0:count($subwhere)):0;
for ($j = 0;$j < $csubwhere;$j++) $tmp.= " AND " . $subwhere[$j]; for ($j = 0;$j < $csubwhere;$j++) $tmp.= " AND " . $subwhere[$j];
if($liefertermine) if($liefertermine)
@@ -7040,7 +7197,7 @@ r.land as land, p.abkuerzung as projekt, r.zahlungsweise as zahlungsweise,
$more_data7 = $this->app->Secure->GetGET("more_data7"); $more_data7 = $this->app->Secure->GetGET("more_data7");
// SQL statement // SQL statement
$sql = "SELECT $sql = "SELECT SQL_CALC_FOUND_ROWS
b.id,'<img src=./themes/{$this->app->Conf->WFconf['defaulttheme']}/images/details_open.png class=details>' AS `open`, b.id,'<img src=./themes/{$this->app->Conf->WFconf['defaulttheme']}/images/details_open.png class=details>' AS `open`,
CONCAT('<input type=\"checkbox\" name=\"auswahl[]\" value=\"',b.id,'\" />') AS `auswahl`, CONCAT('<input type=\"checkbox\" name=\"auswahl[]\" value=\"',b.id,'\" />') AS `auswahl`,
IF(b.status='storniert',CONCAT(b.belegnr),b.belegnr) AS `belegnr`, IF(b.status='storniert',CONCAT(b.belegnr),b.belegnr) AS `belegnr`,
@@ -7195,7 +7352,7 @@ r.land as land, p.abkuerzung as projekt, r.zahlungsweise as zahlungsweise,
} }
if (!is_null($subwhere)) { if (!is_null($subwhere)) {
for ($j = 0;$j < count($subwhere);$j++) $tmp.= " AND " . $subwhere[$j]; for ($j = 0;$j < (empty($subwhere)?0:count($subwhere));$j++) $tmp.= " AND " . $subwhere[$j];
} }
// START EXTRA more // START EXTRA more
@@ -7650,7 +7807,7 @@ a.land as land, p.abkuerzung as projekt, a.zahlungsweise as zahlungsweise,
if($fteilprojektfilter) { if($fteilprojektfilter) {
$subwhere[] = " a.teilprojekt = '$fteilprojektfilter' "; $subwhere[] = " a.teilprojekt = '$fteilprojektfilter' ";
} }
for ($j = 0;$j < count($subwhere);$j++) $tmp.= " AND " . $subwhere[$j]; for ($j = 0;$j < (empty($subwhere)?0:count($subwhere));$j++) $tmp.= " AND " . $subwhere[$j];
$where = " a.projekt='" . $id."'".$tmp; $where = " a.projekt='" . $id."'".$tmp;
$count = "SELECT COUNT(a.id) FROM aufgabe a WHERE $where "; $count = "SELECT COUNT(a.id) FROM aufgabe a WHERE $where ";
@@ -7738,7 +7895,7 @@ a.land as land, p.abkuerzung as projekt, a.zahlungsweise as zahlungsweise,
} }
for ($j = 0;$j < count($subwhere);$j++) $tmp.= " AND " . $subwhere[$j]; for ($j = 0;$j < (empty($subwhere)?0:count($subwhere));$j++) $tmp.= " AND " . $subwhere[$j];
$where = " (z.adresse_abrechnung='" . $id . "' OR p.kunde='$id') $tmp"; $where = " (z.adresse_abrechnung='" . $id . "' OR p.kunde='$id') $tmp";
$count = "SELECT COUNT(z.id) FROM zeiterfassung z LEFT JOIN adresse a ON a.id=z.adresse LEFT JOIN projekt p ON p.id=z.projekt WHERE $where"; $count = "SELECT COUNT(z.id) FROM zeiterfassung z LEFT JOIN adresse a ON a.id=z.adresse LEFT JOIN projekt p ON p.id=z.projekt WHERE $where";
@@ -7829,7 +7986,7 @@ a.land as land, p.abkuerzung as projekt, a.zahlungsweise as zahlungsweise,
}else{ }else{
$subwhere[] = " z.abgerechnet <> 1 "; $subwhere[] = " z.abgerechnet <> 1 ";
} }
for ($j = 0;$j < count($subwhere);$j++) $tmp.= " AND " . $subwhere[$j]; for ($j = 0;$j < (empty($subwhere)?0:count($subwhere));$j++) $tmp.= " AND " . $subwhere[$j];
$where = " z.projekt ='" . $id . "' $tmp"; $where = " z.projekt ='" . $id . "' $tmp";
$count = "SELECT COUNT(z.id) FROM zeiterfassung z LEFT JOIN arbeitspaket arb ON z.arbeitspaket = arb.id WHERE $where"; $count = "SELECT COUNT(z.id) FROM zeiterfassung z LEFT JOIN arbeitspaket arb ON z.arbeitspaket = arb.id WHERE $where";
@@ -7969,7 +8126,7 @@ a.land as land, p.abkuerzung as projekt, a.zahlungsweise as zahlungsweise,
$tmp = ''; $tmp = '';
$csubwhere = !empty($subwhere)?count($subwhere):0; $csubwhere = !empty($subwhere)?(empty($subwhere)?0:count($subwhere)):0;
for ($j = 0;$j < $csubwhere;$j++) $tmp.= " AND " . $subwhere[$j]; for ($j = 0;$j < $csubwhere;$j++) $tmp.= " AND " . $subwhere[$j];
$where = " a.id!='' AND a.status!='angelegt' $tmp " . $this->app->erp->ProjektRechte(); $where = " a.id!='' AND a.status!='angelegt' $tmp " . $this->app->erp->ProjektRechte();
@@ -8329,7 +8486,7 @@ a.land as land, p.abkuerzung as projekt, a.zahlungsweise as zahlungsweise,
// $more_data2 = $this->app->Secure->GetGET("more_data2"); if($more_data2==1) $subwhere[] = " a.datum=CURDATE() AND a.status='freigegeben'"; // $more_data2 = $this->app->Secure->GetGET("more_data2"); if($more_data2==1) $subwhere[] = " a.datum=CURDATE() AND a.status='freigegeben'";
for ($j = 0;$j < count($subwhere);$j++) $tmp.= " AND " . $subwhere[$j]; for ($j = 0;$j < (empty($subwhere)?0:count($subwhere));$j++) $tmp.= " AND " . $subwhere[$j];
$id = $this->app->Secure->GetGET("id"); $id = $this->app->Secure->GetGET("id");
$where = " ap.aufgabe IS NOT NULL $tmp AND ap.projekt='$id' GROUP by Datum,ap.id "; $where = " ap.aufgabe IS NOT NULL $tmp AND ap.projekt='$id' GROUP by Datum,ap.id ";
@@ -8392,7 +8549,7 @@ a.land as land, p.abkuerzung as projekt, a.zahlungsweise as zahlungsweise,
$more_data1 = $this->app->Secure->GetGET("more_data1"); $more_data1 = $this->app->Secure->GetGET("more_data1");
if ($more_data1 == 1) $subwhere[] = " OR ( ap.abgenommen='1') "; if ($more_data1 == 1) $subwhere[] = " OR ( ap.abgenommen='1') ";
for ($j = 0;$j < count($subwhere);$j++) $tmp.= " " . $subwhere[$j]; for ($j = 0;$j < (empty($subwhere)?0:count($subwhere));$j++) $tmp.= " " . $subwhere[$j];
// if($tmp!="")$tmp .= " AND e.geloescht='1' "; // if($tmp!="")$tmp .= " AND e.geloescht='1' ";
@@ -8611,7 +8768,7 @@ a.land as land, p.abkuerzung as projekt, a.zahlungsweise as zahlungsweise,
if (!is_null($subwhere)) if (!is_null($subwhere))
{ {
for ($j = 0;$j < count($subwhere);$j++) $tmp.= " AND " . $subwhere[$j]; for ($j = 0;$j < (empty($subwhere)?0:count($subwhere));$j++) $tmp.= " AND " . $subwhere[$j];
} }
if ($more_data1 == 1) if ($more_data1 == 1)
@@ -8677,7 +8834,7 @@ a.land as land, p.abkuerzung as projekt, a.zahlungsweise as zahlungsweise,
if ($more_data1 == 1) $subwhere[] = " AND ap.status='abgerechnet' "; if ($more_data1 == 1) $subwhere[] = " AND ap.status='abgerechnet' ";
else $subwhere[] = " AND ap.status!='abgerechnet' "; else $subwhere[] = " AND ap.status!='abgerechnet' ";
for ($j = 0;$j < count($subwhere);$j++) $tmp.= " " . $subwhere[$j]; for ($j = 0;$j < (empty($subwhere)?0:count($subwhere));$j++) $tmp.= " " . $subwhere[$j];
// Fester filter // Fester filter
@@ -8770,7 +8927,7 @@ a.land as land, p.abkuerzung as projekt, a.zahlungsweise as zahlungsweise,
if ($more_data1 == 1) $subwhere[] = " z.abrechnen='1' AND z.abgerechnet!='1' "; if ($more_data1 == 1) $subwhere[] = " z.abrechnen='1' AND z.abgerechnet!='1' ";
// $more_data2 = $this->app->Secure->GetGET("more_data2"); if($more_data2==1) $subwhere[] = " a.datum=CURDATE() AND a.status='freigegeben'"; // $more_data2 = $this->app->Secure->GetGET("more_data2"); if($more_data2==1) $subwhere[] = " a.datum=CURDATE() AND a.status='freigegeben'";
for ($j = 0;$j < count($subwhere);$j++) $tmp.= " AND " . $subwhere[$j]; for ($j = 0;$j < (empty($subwhere)?0:count($subwhere));$j++) $tmp.= " AND " . $subwhere[$j];
$where = " z.id!='' AND z.adresse='" . $id . "' $tmp"; $where = " z.id!='' AND z.adresse='" . $id . "' $tmp";
$count = "SELECT COUNT(z.id) FROM zeiterfassung z WHERE z.adresse='" . $id . "'"; $count = "SELECT COUNT(z.id) FROM zeiterfassung z WHERE z.adresse='" . $id . "'";
$moreinfo = true; $moreinfo = true;
@@ -9455,7 +9612,7 @@ a.land as land, p.abkuerzung as projekt, a.zahlungsweise as zahlungsweise,
if(bearbeiter!="",bearbeiter,a2.name) as bearbeiter, if(bearbeiter!="",bearbeiter,a2.name) as bearbeiter,
CONCAT(UCASE(LEFT(d.typ, 1)), SUBSTRING(d.typ, 2)) as art, 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, 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 concat("1","-",d.id) as did,d.content as suchtext,d.internebezeichnung
FROM FROM
dokumente d dokumente d
@@ -9799,7 +9956,7 @@ a.land as land, p.abkuerzung as projekt, a.zahlungsweise as zahlungsweise,
*/ */
$this->app->User->SetParameter('stammdatenbereinigen_list_param', implode(';',$paramsGroupBy)); $this->app->User->SetParameter('stammdatenbereinigen_list_param', implode(';',$paramsGroupBy));
if(count($groupABy)>0) if((empty($groupABy)?0:count($groupABy))>0)
{ {
$groupby = ' $groupby = '
GROUP BY ' . implode(',', $groupABy) . ' GROUP BY ' . implode(',', $groupABy) . '
@@ -10822,7 +10979,7 @@ a.land as land, p.abkuerzung as projekt, a.zahlungsweise as zahlungsweise,
} }
if(isset($alignright)) if(isset($alignright))
{ {
for ($aligni = 0;$aligni < count($alignright);$aligni++) { for ($aligni = 0;$aligni < (empty($alignright)?0:count($alignright));$aligni++) {
$this->app->Tpl->Add('YUICSS', ' $this->app->Tpl->Add('YUICSS', '
#' . $name . ' > tbody > tr > td:nth-child(' . $alignright[$aligni] . ') { #' . $name . ' > tbody > tr > td:nth-child(' . $alignright[$aligni] . ') {
text-align: right; text-align: right;
@@ -10832,7 +10989,7 @@ a.land as land, p.abkuerzung as projekt, a.zahlungsweise as zahlungsweise,
} }
if(isset($aligncenter)) if(isset($aligncenter))
{ {
for ($aligni = 0;$aligni < count($aligncenter);$aligni++) { for ($aligni = 0;$aligni < (empty($aligncenter)?0:count($aligncenter));$aligni++) {
$this->app->Tpl->Add('YUICSS', ' $this->app->Tpl->Add('YUICSS', '
#' . $name . ' > tbody > tr > td:nth-child(' . $aligncenter[$aligni] . ') { #' . $name . ' > tbody > tr > td:nth-child(' . $aligncenter[$aligni] . ') {
text-align: center; text-align: center;
@@ -10842,7 +10999,7 @@ a.land as land, p.abkuerzung as projekt, a.zahlungsweise as zahlungsweise,
} }
if(isset($hide320)) if(isset($hide320))
{ {
for ($h = 0;$h < count($hide320);$h++) { for ($h = 0;$h < (empty($hide320)?0:count($hide320));$h++) {
$this->app->Tpl->Add('YUICSS', ' $this->app->Tpl->Add('YUICSS', '
@media screen and (max-width: 320px){ @media screen and (max-width: 320px){
#' . $name . ' > thead > tr > th:nth-child(' . $hide320[$h] . ') { #' . $name . ' > thead > tr > th:nth-child(' . $hide320[$h] . ') {
@@ -10861,7 +11018,7 @@ a.land as land, p.abkuerzung as projekt, a.zahlungsweise as zahlungsweise,
if(isset($nowrap) && is_array($nowrap)) if(isset($nowrap) && is_array($nowrap))
{ {
for ($h = 0;$h < count($nowrap);$h++) { for ($h = 0;$h < (empty($nowrap)?0:count($nowrap));$h++) {
$this->app->Tpl->Add('YUICSS', ' $this->app->Tpl->Add('YUICSS', '
@media screen and (max-width: 767px){ @media screen and (max-width: 767px){
#' . $name . ' > tbody > tr > td:nth-child(' . $hide767[$h] . '){ #' . $name . ' > tbody > tr > td:nth-child(' . $hide767[$h] . '){
@@ -10875,7 +11032,7 @@ a.land as land, p.abkuerzung as projekt, a.zahlungsweise as zahlungsweise,
if(isset($hide767)) if(isset($hide767))
{ {
for ($h = 0;$h < count($hide767);$h++) { for ($h = 0;$h < (empty($hide767)?0:count($hide767));$h++) {
$this->app->Tpl->Add('YUICSS', ' $this->app->Tpl->Add('YUICSS', '
@media screen and (max-width: 767px){ @media screen and (max-width: 767px){
#' . $name . ' > thead > tr > th:nth-child(' . $hide767[$h] . ') { #' . $name . ' > thead > tr > th:nth-child(' . $hide767[$h] . ') {
@@ -10894,7 +11051,7 @@ a.land as land, p.abkuerzung as projekt, a.zahlungsweise as zahlungsweise,
} }
if(isset($hide480)) if(isset($hide480))
{ {
for ($h = 0;$h < count($hide480);$h++) { for ($h = 0;$h < (empty($hide480)?0:count($hide480));$h++) {
$this->app->Tpl->Add('YUICSS', ' $this->app->Tpl->Add('YUICSS', '
@media screen and (max-width: 479px){ @media screen and (max-width: 479px){
#' . $name . ' > thead > tr > th:nth-child(' . $hide480[$h] . ') { #' . $name . ' > thead > tr > th:nth-child(' . $hide480[$h] . ') {
@@ -10939,7 +11096,7 @@ a.land as land, p.abkuerzung as projekt, a.zahlungsweise as zahlungsweise,
} }
} }
if(isset($hidecolumns) && $hidecolumns && is_array($hidecolumns) && count($hidecolumns) > 2) if(isset($hidecolumns) && $hidecolumns && is_array($hidecolumns) && (empty($hidecolumns)?0:count($hidecolumns)) > 2)
{ {
$hidecolumnsitem = $hidecolumns[0]; $hidecolumnsitem = $hidecolumns[0];
if(!is_array($hidecolumns[2]))$hidecolumns[2][0] = $hidecolumns[2]; if(!is_array($hidecolumns[2]))$hidecolumns[2][0] = $hidecolumns[2];
@@ -11306,7 +11463,7 @@ $directlink=0;
if( (($this->app->erp->RechteVorhanden($_module,"edit") && $_action=="list") || if( (($this->app->erp->RechteVorhanden($_module,"edit") && $_action=="list") ||
(!empty($forcerowclick))) && !empty($rowclick)) (!empty($forcerowclick))) && !empty($rowclick))
{ {
if($menucol > 0 || count($heading) > 0) { if($menucol > 0 || (empty($heading)?0:count($heading)) > 0) {
if(!empty($doppelteids)){ if(!empty($doppelteids)){
$doppelteids = '\-[1-9]{1}[0-9]*'; $doppelteids = '\-[1-9]{1}[0-9]*';
}else{ }else{
@@ -11316,11 +11473,11 @@ if( (($this->app->erp->RechteVorhanden($_module,"edit") && $_action=="list") ||
{ {
$tmpmenucol=$menucol; $tmpmenucol=$menucol;
} else { } else {
$tmpmenucol=!empty($heading)?count($heading)-1:0; $tmpmenucol=!empty($heading)?(empty($heading)?0:count($heading))-1:0;
} }
if(!empty($menucol) && $menucol > 0 || count($heading) > 0) { if(!empty($menucol) && $menucol > 0 || (empty($heading)?0:count($heading)) > 0) {
if(isset($doppelteids)&& $doppelteids){ if(isset($doppelteids)&& $doppelteids){
$doppelteids = '\-[1-9]{1}[0-9]*'; $doppelteids = '\-[1-9]{1}[0-9]*';
} }
@@ -11331,7 +11488,7 @@ if(!empty($menucol) && $menucol > 0 || count($heading) > 0) {
{ {
$tmpmenucol=$menucol; $tmpmenucol=$menucol;
} else { } else {
$tmpmenucol=count($heading)-1; $tmpmenucol=(empty($heading)?0:count($heading))-1;
} }
if(empty($rowclickaction) || $rowclickaction=="") if(empty($rowclickaction) || $rowclickaction=="")
@@ -11389,7 +11546,7 @@ if((isset($extra_anzahl_datensaetze) && (int)$extra_anzahl_datensaetze > 0) || (
{ {
if(!empty($aLengthMenuArr)) if(!empty($aLengthMenuArr))
{ {
if($aLengthMenuArr[count($aLengthMenuArr)-1] < $maxrows) if($aLengthMenuArr[(empty($aLengthMenuArr)?0:count($aLengthMenuArr))-1] < $maxrows)
{ {
$aLengthMenuArr[] = (int)$maxrows; $aLengthMenuArr[] = (int)$maxrows;
break; break;
@@ -12028,7 +12185,7 @@ url:strUrl, success:function(html){strReturn = html;}, async:false
} }
'); ');
} }
$colspan = !empty($heading)?count($heading):1; $colspan = !empty($heading)?(empty($heading)?0:count($heading)):1;
//<tr><th colspan="' . $colspan . '"><br></th></tr> //<tr><th colspan="' . $colspan . '"><br></th></tr>
$this->app->Tpl->Add($parsetarget, ' $this->app->Tpl->Add($parsetarget, '
<div class="table-responsive"> <div class="table-responsive">
@@ -12036,7 +12193,7 @@ url:strUrl, success:function(html){strReturn = html;}, async:false
<thead> <thead>
<tr>'); <tr>');
if(!empty($heading)){ if(!empty($heading)){
$cHeading = count($heading); $cHeading = (empty($heading)?0:count($heading));
for ($i = 0; $i < $cHeading; $i++) { for ($i = 0; $i < $cHeading; $i++) {
$this->app->Tpl->Add( $this->app->Tpl->Add(
$parsetarget, $parsetarget,
@@ -12050,7 +12207,7 @@ url:strUrl, success:function(html){strReturn = html;}, async:false
if(empty($columnfilter) && !(isset($columnfilter) && $columnfilter === false)) { if(empty($columnfilter) && !(isset($columnfilter) && $columnfilter === false)) {
$this->app->Tpl->Add($parsetarget, '</tr><tr>'); $this->app->Tpl->Add($parsetarget, '</tr><tr>');
if(!empty($heading)){ if(!empty($heading)){
$cHeading = count($heading); $cHeading = (empty($heading)?0:count($heading));
for ($i = 0; $i < $cHeading; $i++) { for ($i = 0; $i < $cHeading; $i++) {
$this->app->Tpl->Add( $this->app->Tpl->Add(
$parsetarget, $parsetarget,
@@ -12073,7 +12230,7 @@ url:strUrl, success:function(html){strReturn = html;}, async:false
<tr> <tr>
'); ');
if(!empty($heading)){ if(!empty($heading)){
$cheader = count($heading); $cheader = (empty($heading)?0:count($heading));
for ($i = 0; $i < $cheader; $i++) { for ($i = 0; $i < $cheader; $i++) {
$this->app->Tpl->Add( $this->app->Tpl->Add(
$parsetarget, $parsetarget,
@@ -12085,9 +12242,6 @@ url:strUrl, success:function(html){strReturn = html;}, async:false
</tr> </tr>
</tfoot> </tfoot>
</table></div> </table></div>
<br>
<br>
<br>
'); ');
if((empty($disableautosavefilter)) && $this->anzusersaves < 2) { if((empty($disableautosavefilter)) && $this->anzusersaves < 2) {
@@ -13815,7 +13969,7 @@ source: "index.php?module=ajax&action=filter&filtername=' . $filter . $extendurl
function ChartDB($sql, $parsetarget, $width, $height, $limitmin = 0, $limitmax = 100, $gridy = 5) { function ChartDB($sql, $parsetarget, $width, $height, $limitmin = 0, $limitmax = 100, $gridy = 5) {
$result = $this->app->DB->SelectArr($sql); $result = $this->app->DB->SelectArr($sql);
for ($i = 0;$i < count($result);$i++) { for ($i = 0;$i < (empty($result)?0:count($result));$i++) {
$lables[] = $result[$i]['legende']; $lables[] = $result[$i]['legende'];
$values[] = $result[$i]['wert']; $values[] = $result[$i]['wert'];
} }
@@ -13828,7 +13982,7 @@ source: "index.php?module=ajax&action=filter&filtername=' . $filter . $extendurl
function Chart($parsetarget, $labels, $width = 400, $height = 200, $limitmin = 0, $limitmax = 100, $gridy = 5) { function Chart($parsetarget, $labels, $width = 400, $height = 200, $limitmin = 0, $limitmax = 100, $gridy = 5) {
$werte = ''; $werte = '';
$values = $labels; $values = $labels;
for ($i = 0;$i < count($values) - 1;$i++) { for ($i = 0;$i < (empty($values)?0:count($values)) - 1;$i++) {
$werte = $werte . "'" . $values[$i] . "',"; $werte = $werte . "'" . $values[$i] . "',";
} }
$werte = $werte . "'" . $values[$i + 1] . "'"; $werte = $werte . "'" . $values[$i + 1] . "'";
@@ -13837,7 +13991,7 @@ source: "index.php?module=ajax&action=filter&filtername=' . $filter . $extendurl
$this->app->Tpl->Set('CHART_HEIGHT', $height); $this->app->Tpl->Set('CHART_HEIGHT', $height);
$this->app->Tpl->Set('LIMITMIN', $limitmin); $this->app->Tpl->Set('LIMITMIN', $limitmin);
$this->app->Tpl->Set('LIMITMAX', $limitmax); $this->app->Tpl->Set('LIMITMAX', $limitmax);
$this->app->Tpl->Set('GRIDX', count($values)); $this->app->Tpl->Set('GRIDX', (empty($values)?0:count($values)));
$this->app->Tpl->Set('GRIDY', $gridy); $this->app->Tpl->Set('GRIDY', $gridy);
$this->app->Tpl->Parse($parsetarget, "chart.tpl"); $this->app->Tpl->Parse($parsetarget, "chart.tpl");
} }
@@ -13866,7 +14020,7 @@ source: "index.php?module=ajax&action=filter&filtername=' . $filter . $extendurl
function ChartAdd($color, $values) { function ChartAdd($color, $values) {
$werte = ''; $werte = '';
for ($i = 0;$i < count($values) - 1;$i++) { for ($i = 0;$i < (empty($values)?0:count($values)) - 1;$i++) {
$werte = $werte . $values[$i] . ","; $werte = $werte . $values[$i] . ",";
} }
$werte = $werte . $values[$i + 1]; $werte = $werte . $values[$i + 1];
@@ -13931,7 +14085,7 @@ source: "index.php?module=ajax&action=filter&filtername=' . $filter . $extendurl
LEFT JOIN datei_version v ON v.datei=v2.datei AND v.version = v2.version WHERE $where ORDER BY s.sort DESC LIMIT 2 "; LEFT JOIN datei_version v ON v.datei=v2.datei AND v.version = v2.version WHERE $where ORDER BY s.sort DESC LIMIT 2 ";
$query = $this->app->DB->SelectArr($sql); $query = $this->app->DB->SelectArr($sql);
$status = 0; $status = 0;
if($query && count($query) == 2) if($query && (empty($query)?0:count($query)) == 2)
{ {
$status = 1; $status = 1;
$this->app->DB->Update("UPDATE datei_stichwoerter SET sort = '".$query[1]['sort']."' WHERE id = '".$query[0]['id']."' LIMIT 1"); $this->app->DB->Update("UPDATE datei_stichwoerter SET sort = '".$query[1]['sort']."' WHERE id = '".$query[0]['id']."' LIMIT 1");
@@ -13964,7 +14118,7 @@ source: "index.php?module=ajax&action=filter&filtername=' . $filter . $extendurl
LEFT JOIN datei_version v ON v.datei=v2.datei AND v.version = v2.version WHERE $where ORDER BY s.sort LIMIT 2 "; LEFT JOIN datei_version v ON v.datei=v2.datei AND v.version = v2.version WHERE $where ORDER BY s.sort LIMIT 2 ";
$query = $this->app->DB->SelectArr($sql); $query = $this->app->DB->SelectArr($sql);
$status = 0; $status = 0;
if($query && count($query) == 2) if($query && (empty($query)?0:count($query)) == 2)
{ {
$status = 1; $status = 1;
$this->app->DB->Update("UPDATE datei_stichwoerter SET sort = '".$query[1]['sort']."' WHERE id = '".$query[0]['id']."' LIMIT 1"); $this->app->DB->Update("UPDATE datei_stichwoerter SET sort = '".$query[1]['sort']."' WHERE id = '".$query[0]['id']."' LIMIT 1");
@@ -14075,7 +14229,7 @@ source: "index.php?module=ajax&action=filter&filtername=' . $filter . $extendurl
} }
if(!$found)unset($auswahl[$k]); if(!$found)unset($auswahl[$k]);
} }
if(!$auswahl || count($auswahl) == 0) if(!$auswahl || (empty($auswahl)?0:count($auswahl)) == 0)
{ {
echo 'Keine PDF-Dateien ausgew&auml;hlt!'; echo 'Keine PDF-Dateien ausgew&auml;hlt!';
exit; exit;
@@ -14146,7 +14300,7 @@ source: "index.php?module=ajax&action=filter&filtername=' . $filter . $extendurl
} }
if(!$found)unset($auswahl[$k]); if(!$found)unset($auswahl[$k]);
} }
if(!$auswahl || count($auswahl) == 0) if(!$auswahl || (empty($auswahl)?0:count($auswahl)) == 0)
{ {
echo 'Keine Dateien ausgew&auml;hlt!'; echo 'Keine Dateien ausgew&auml;hlt!';
exit; exit;
@@ -14267,7 +14421,7 @@ source: "index.php?module=ajax&action=filter&filtername=' . $filter . $extendurl
/* /*
$tmp = $this->app->DB->SelectArr("SELECT * FROM datei_stichwortvorlagen WHERE modul='' ORDER by beschriftung"); $tmp = $this->app->DB->SelectArr("SELECT * FROM datei_stichwortvorlagen WHERE modul='' ORDER by beschriftung");
for($i=0;$i<count($tmp);$i++) for($i=0;$i<(empty($tmp)?0:count($tmp));$i++)
$this->app->Tpl->Add('EXTRASTICHWOERTER','<option value="'.$tmp[$i]['beschriftung'].'">'.$tmp[$i]['beschriftung'].'</option>'); $this->app->Tpl->Add('EXTRASTICHWOERTER','<option value="'.$tmp[$i]['beschriftung'].'">'.$tmp[$i]['beschriftung'].'</option>');
*/ */
$maxsize = 0; $maxsize = 0;
@@ -14572,7 +14726,7 @@ source: "index.php?module=ajax&action=filter&filtername=' . $filter . $extendurl
if ($module == "angebot" || $module == "auftrag" || $module == "rechnung" || $module == "gutschrift" || $module == "proformarechnung") { if ($module == "angebot" || $module == "auftrag" || $module == "rechnung" || $module == "gutschrift" || $module == "proformarechnung") {
if ($schreibschutz != 1) { if ($schreibschutz != 1) {
$addrow = array('<form action="" method="post" id="myform">', '[ARTIKELSTART]<input type="text" size="30" name="artikel" id="artikel" onblur="window.setTimeout(\'selectafterblur()\',200);">[ARTIKELENDE]', '<input type="text" name="projekt" id="projekt" size="10" readonly onclick="checkhere()" >', '<input type="text" name="nummer" id="nummer" size="7">', '<input type="text" size="8" name="lieferdatum" id="lieferdatum">', '<input type="text" name="menge" id="menge" size="5" onblur="window.setTimeout(\'selectafterblurmenge()\',200); document.getElementById(\'preis\').style.background =\'none\';">', '<input type="text" name="preis" id="preis" size="10" onclick="checkhere();">', '<input type="text" name="waehrung" id="waehrung" size="10" onclick="checkhere();">' ,'<input type="text" name="rabatt" id="rabatt" size="7">'); $addrow = array('<form action="" method="post" id="myform">', '[ARTIKELSTART]<input type="text" size="30" name="artikel" id="artikel" onblur="window.setTimeout(\'selectafterblur()\',200);">[ARTIKELENDE]', '<input type="text" name="projekt" id="projekt" size="10" readonly onclick="checkhere()" >', '<input type="text" name="nummer" id="nummer" size="7">', '<input type="text" size="8" name="lieferdatum" id="lieferdatum">', '<input type="text" name="menge" id="menge" size="5" onblur="window.setTimeout(\'selectafterblurmenge()\',200); document.getElementById(\'preis\').style.background =\'none\';">', '<input type="text" name="preis" id="preis" size="10" onclick="checkhere();">', '<input type="text" name="waehrung" id="waehrung" size="10" onclick="checkhere();">' ,'<input type="text" name="rabatt" id="rabatt" size="7">','','');
$addrow[] = '<input type="submit" value="einf&uuml;gen" name="ajaxbuchen"> $addrow[] = '<input type="submit" value="einf&uuml;gen" name="ajaxbuchen">
<script type="text/javascript"> <script type="text/javascript">
document.onkeydown = function(evt) { document.onkeydown = function(evt) {
@@ -14735,9 +14889,11 @@ source: "index.php?module=ajax&action=filter&filtername=' . $filter . $extendurl
} }
$table->headings[6] = 'Preis'; $table->headings[6] = 'Preis';
$mengencol = 5; $mengencol = 5;
if ($module == "angebot" || $module == "auftrag" || $module == "rechnung" || $module == "gutschrift") $table->headings[7] = 'W&auml;hrung'; if ($module == "angebot" || $module == "auftrag" || $module == "rechnung" || $module == "gutschrift") {
if ($module == "angebot" || $module == "auftrag" || $module == "rechnung" || $module == "gutschrift") $table->headings[8] = 'Rabatt'; $table->headings[7] = 'W&auml;hrung';
if ($module == "angebot" || $module == "auftrag" || $module == "rechnung" || $module == "gutschrift") $rabattcol = 8; $table->headings[8] = 'Rabatt';
$rabattcol = 8;
}
} }
$__arr = array($summencol, $mengencol, $rabattcol, $ecol, $dcol,$zwischensumme); $__arr = array($summencol, $mengencol, $rabattcol, $ecol, $dcol,$zwischensumme);
$this->app->erp->RunHook('yui_sortlistadd_draw', 2,$table,$__arr); $this->app->erp->RunHook('yui_sortlistadd_draw', 2,$table,$__arr);
@@ -15080,7 +15236,7 @@ source: "index.php?module=ajax&action=filter&filtername=' . $filter . $extendurl
$summenarray[] = '<input type="hidden" id="mcol" value="'.$mengencol.'" /><input type="hidden" id="rcol" value="'.$rabattcol.'" /><input type="hidden" id="scol" value="'.$summencol.'" /><span id="zwischensumme">'.number_format($zwischensumme,4,'.','').'</span>'; $summenarray[] = '<input type="hidden" id="mcol" value="'.$mengencol.'" /><input type="hidden" id="rcol" value="'.$rabattcol.'" /><input type="hidden" id="scol" value="'.$summencol.'" /><span id="zwischensumme">'.number_format($zwischensumme,4,'.','').'</span>';
if($module != 'verbindlichkeit')$summenarray[] = ''; if($module != 'verbindlichkeit')$summenarray[] = '';
$summenarray[] = ''; $summenarray[] = '';
$summenarray[count($summenarray)-1] .= $js; $summenarray[(empty($summenarray)?0:count($summenarray))-1] .= $js;
if($mengencol && $summencol && $module!='produktion')$table->AddRow($summenarray); if($mengencol && $summencol && $module!='produktion')$table->AddRow($summenarray);
//$this->app->YUI->AutoComplete(ARTIKELAUTO,"artikel",array('name_de','warengruppe'),"nummer"); //$this->app->YUI->AutoComplete(ARTIKELAUTO,"artikel",array('name_de','warengruppe'),"nummer");
@@ -15602,11 +15758,11 @@ function IframeDialog($width, $height, $src = "") {
} }
</script> </script>
<div id=\"preistabellediv\" style=\"display:none;\"><div id=\"preiserror\">".(count($waehrungen) > 1?"":"Bitte legen Sie erst W&auml;hrungen an!")."</div> <div id=\"preistabellediv\" style=\"display:none;\"><div id=\"preiserror\">".((empty($waehrungen)?0:count($waehrungen)) > 1?"":"Bitte legen Sie erst W&auml;hrungen an!")."</div>
"; ";
$i = -1; $i = -1;
if(count($waehrungen) > 1) if((empty($waehrungen)?0:count($waehrungen)) > 1)
{ {
$htmltabelle .= "<table><tr><th>W&auml;hrung</th><th>Kurs</th><th>umgerechnter Preis</th><th>Aktion</th></tr>"; $htmltabelle .= "<table><tr><th>W&auml;hrung</th><th>Kurs</th><th>umgerechnter Preis</th><th>Aktion</th></tr>";
foreach($waehrungen as $waehrung => $kurs) foreach($waehrungen as $waehrung => $kurs)
@@ -42,7 +42,11 @@ class PLACEHOLDER_MODULECLASSNAME {
$defaultorder = 1; $defaultorder = 1;
$defaultorderdesc = 0; $defaultorderdesc = 0;
$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>"; $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>";
@@ -118,6 +122,8 @@ class PLACEHOLDER_MODULECLASSNAME {
// Add checks here // Add checks here
// $input['projekt'] = $this->app->erp->ReplaceProjekt(true,$input['projekt'],true); // Parameters: Target db?, value, from form?
$columns = "id, "; $columns = "id, ";
$values = "$id, "; $values = "$id, ";
$update = ""; $update = "";
@@ -166,6 +172,9 @@ class PLACEHOLDER_MODULECLASSNAME {
$this->app->Tpl->Add('KURZUEBERSCHRIFT2', $email); $this->app->Tpl->Add('KURZUEBERSCHRIFT2', $email);
$this->app->Tpl->Add('EMAIL', $email); $this->app->Tpl->Add('EMAIL', $email);
$this->app->Tpl->Add('ANGEZEIGTERNAME', $angezeigtername); $this->app->Tpl->Add('ANGEZEIGTERNAME', $angezeigtername);
$this->app->YUI->AutoComplete("artikel", "artikelnummer");
*/ */
// $this->SetInput($input); // $this->SetInput($input);
@@ -183,14 +192,4 @@ class PLACEHOLDER_MODULECLASSNAME {
return $input; return $input;
} }
}
/*
* Set all fields in the page corresponding to $input
*/
function SetInput($input) {
// $this->app->Tpl->Set('EMAIL', $input['email']);
PLACEHOLDER_SET_INPUT
}
}
+11260 -7812
View File
File diff suppressed because it is too large Load Diff
+7
View File
@@ -365,6 +365,9 @@ function upgrade_main(string $directory,bool $verbose, bool $check_git, bool $do
foreach ($compare_differences as $compare_difference) { foreach ($compare_differences as $compare_difference) {
$comma = ""; $comma = "";
foreach ($compare_difference as $key => $value) { foreach ($compare_difference as $key => $value) {
if (is_array($value)) {
$value = implode(',',$value);
}
echo_out($comma."$key => [$value]"); echo_out($comma."$key => [$value]");
$comma = ", "; $comma = ", ";
} }
@@ -415,6 +418,10 @@ function upgrade_main(string $directory,bool $verbose, bool $check_git, bool $do
$counter++; $counter++;
echo_out("\rUpgrade step $counter of $number_of_statements... "); echo_out("\rUpgrade step $counter of $number_of_statements... ");
if ($verbose) {
echo_out("\n".$sql."\n");
}
$query_result = mysqli_query($mysqli, $sql); $query_result = mysqli_query($mysqli, $sql);
if (!$query_result) { if (!$query_result) {
$error = " not ok: ". mysqli_error($mysqli); $error = " not ok: ". mysqli_error($mysqli);
+76 -35
View File
@@ -67,6 +67,7 @@ $mustal_replacers = [
['on update current_timestamp','on update current_timestamp()'] ['on update current_timestamp','on update current_timestamp()']
]; ];
// Load all db_def from a DB connection into a db_def array // 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 { 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 // 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); $query_result = mysqli_query($mysqli, $sql);
if (!$query_result) { if (!$query_result) {
return(array()); return(array());
} }
while ($row = mysqli_fetch_assoc($query_result)) { while ($row = mysqli_fetch_assoc($query_result)) {
$table = array(); $table = array();
$table['name'] = $row['Tables_in_'.$schema]; $table['name'] = $row['Name'];
$table['type'] = $row['Table_type']; $table['collation'] = $row['Collation'];
$table['type'] = 'BASE TABLE';
$tables[] = $table; // Add table to list of tables $tables[] = $table; // Add table to list of tables
} }
// Get and add columns of the table // Get and add columns of the table
foreach ($tables as &$table) { foreach ($tables as &$table) {
$sql = "SHOW FULL COLUMNS FROM ".$table['name']; $sql = "SHOW FULL COLUMNS FROM ".$table['name'];
$query_result = mysqli_query($mysqli, $sql); $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']); $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 $columns[] = $column; // Add column to list of columns
} }
$table['columns'] = $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['Key_name'] = $key['Key_name'];
$composed_key['Index_type'] = $key['Index_type']; $composed_key['Index_type'] = $key['Index_type'];
$composed_key['columns'][] = $key['Column_name']; $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; $composed_keys[] = $composed_key;
} else { } else {
// Given key, add column // Given key, add column
@@ -161,9 +175,16 @@ function mustal_load_tables_from_db(string $host, string $schema, string $user,
foreach ($views as &$view) { foreach ($views as &$view) {
$sql = "SHOW CREATE VIEW ".$view['name']; $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) { if (!$query_result) {
return(array()); $view['Create'] = '';
continue;
} }
$viewdef = mysqli_fetch_assoc($query_result); $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 // Compare the properties of the sql_indexs
if ($check_column_definitions) { if ($check_column_definitions) {
$found_sql_index = $found_table['keys'][$sql_index_key]; $found_sql_index = $found_table['keys'][$sql_index_key];
foreach ($sql_index as $key => $value) { foreach ($sql_index as $key => $value) {
if ($found_sql_index[$key] != $value) { if ($found_sql_index[$key] != $value) {
$compare_difference = array();
// if ($key != 'permissions') { $compare_difference['type'] = "Key definition";
$compare_difference = array(); $compare_difference['table'] = $database_table['name'];
$compare_difference['type'] = "Key definition"; $compare_difference['key'] = $sql_index['Key_name'];
$compare_difference['table'] = $database_table['name']; $compare_difference['property'] = $key;
$compare_difference['key'] = $sql_index['Key_name']; $compare_difference[$nominal_name] = $value;
$compare_difference['property'] = $key; $compare_difference[$actual_name] = $found_sql_index[$key];
$compare_difference[$nominal_name] = implode(',',$value); $compare_differences[] = $compare_difference;
$compare_difference[$actual_name] = implode(',',$found_sql_index[$key]);
$compare_differences[] = $compare_difference;
// }
} }
} }
unset($value); unset($value);
@@ -401,9 +420,11 @@ function mustal_compare_table_array(array $nominal, string $nominal_name, array
// Generate SQL to create or modify column // Generate SQL to create or modify column
function mustal_column_sql_definition(string $table_name, array $column, array $reserved_words_without_quote) : string { 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) { foreach($column as $key => &$value) {
$value = (string) $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 // 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 // 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) { switch ($property) {
case 'Type': case 'Type':
@@ -453,8 +474,10 @@ function mustal_column_sql_create_property_definition(string $property, string $
} }
break; break;
case 'Collation': case 'Collation':
if ($property_value != '') { if ($property_value != '' && $column_is_string_type) {
$property_value = " COLLATE ".$property_value; $property_value = " COLLATE ".$property_value;
} else {
$property_value = "";
} }
break; break;
default: 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 // Replaces different variants of the same function mustal_to allow comparison
function mustal_sql_replace_reserved_functions(array &$column, array $replacers) { function mustal_sql_replace_reserved_functions(array &$column, array $replacers) {
$result = strtolower($column['Default']); $result = $column['Default'];
foreach ($replacers as $replace) { foreach ($replacers as $replace) {
if ($result == $replace[0]) { if (strtolower($column['Default']) == $replace[0]) {
$result = $replace[1]; $result = $replace[1];
} }
} }
@@ -561,14 +584,7 @@ function mustal_calculate_db_upgrade(array $compare_def, array $db_def, array &$
if ($key['Key_name'] == 'PRIMARY') { if ($key['Key_name'] == 'PRIMARY') {
$keystring = "PRIMARY KEY "; $keystring = "PRIMARY KEY ";
} else { } else {
$keystring = mustal_key_type(" ".$key['Non_unique']." KEY `".$key['Key_name']."` ",$key['Index_type']);
if(array_key_exists('Index_type', $key)) {
$index_type = $key['Index_type'];
} else {
$index_type = "";
}
$keystring = $index_type." KEY `".$key['Key_name']."` ";
} }
$sql .= $comma.$keystring."(`".implode("`,`",$key['columns'])."`) "; $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) { if ($key_key !== false) {
$key = $table['keys'][$key_key]; $key = $table['keys'][$key_key];
$sql = "ALTER TABLE `$table_name` ADD ".mustal_key_type(" ".$key['Non_unique']." KEY `".$key['Key_name']."` "."(`".implode("`,`",$key['columns'])."`)",$key['Index_type']).";";
$sql = "ALTER TABLE `$table_name` ADD KEY `".$key_name."` ";
$sql .= "(`".implode("`,`",$key['columns'])."`)";
$sql .= ";";
$upgrade_sql[] = $sql; $upgrade_sql[] = $sql;
} }
else { 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."`;"; $sql = "ALTER TABLE `$table_name` DROP KEY `".$key_name."`;";
$upgrade_sql[] = $sql; $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 .= "(`".implode("`,`",$key['columns'])."`)";
$sql .= ";"; $sql .= ";";
$upgrade_sql[] = $sql; $upgrade_sql[] = $sql;
@@ -743,6 +756,34 @@ function mustal_calculate_db_upgrade(array $compare_def, array $db_def, array &$
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';","SET SESSION innodb_strict_mode=OFF;");
} }
return($result); 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);
}
}
+1 -1
View File
@@ -1,7 +1,7 @@
<?php <?php
$version="OSS"; $version="OSS";
$version_revision="1.8"; $version_revision="1.10";
$githash = file_get_contents("../githash.txt"); $githash = file_get_contents("../githash.txt");
if (!empty($githash)) { if (!empty($githash)) {
$version_revision .= " (".substr($githash,0,8).")"; $version_revision .= " (".substr($githash,0,8).")";
+5 -1
View File
@@ -4,7 +4,7 @@ Options -Indexes
# Deny access to all *.php # Deny access to all *.php
Order deny,allow Order deny,allow
Allow from all 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 Order Allow,Deny
Allow from all Allow from all
</FilesMatch> </FilesMatch>
@@ -23,4 +23,8 @@ Allow from all
Order Allow,Deny Order Allow,Deny
Allow from all Allow from all
</Files> </Files>
<Files robots.txt>
Order Allow,Deny
Allow from all
</Files>
# end # end
+5 -2
View File
@@ -440,12 +440,15 @@ class erpooSystem extends Application
); );
} }
// Creates user specific items // Creates user specific items
$offene_tickets = $this->erp->AnzahlOffeneTickets(false);
$offene_tickets_user = $this->erp->AnzahlOffeneTickets(true);
$possibleUserItems = [ $possibleUserItems = [
'Tickets' => [ 'Tickets' => [
'link' => 'index.php?module=ticket&action=list', 'link' => 'index.php?module=ticket&action=list',
'counter' => $this->erp->AnzahlOffeneTickets() 'counter' => ($offene_tickets+$offene_tickets_user > 0)?$offene_tickets_user."/".$offene_tickets:""
], ],
'Aufgaben' => [ 'Aufgaben' => [
'link' => 'index.php?module=aufgaben&action=list', 'link' => 'index.php?module=aufgaben&action=list',
+7
View File
@@ -0,0 +1,7 @@
/*
* Fix scrolling to middle of page bug
*/
$(() => {
window.scrollTo(0, 0);
})
+389 -1672
View File
File diff suppressed because it is too large Load Diff
+11 -2
View File
@@ -631,8 +631,17 @@ class Remote
} }
$arr['projekt'] = $shopexportArr['projekt']; $arr['projekt'] = $shopexportArr['projekt'];
$arr['name_de'] = $ret['name']; $arr['name_de'] = $ret['name'];
$arr['uebersicht_de'] = isset($ret['uebersicht_de'])?$ret['uebersicht_de']:''; $arr['uebersicht_de'] = $ret['uebersicht_de'] ?? '';
$arr['kurztext_de'] = isset($ret['kurztext_de'])?$ret['kurztext_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']:''; //$arr['anabregs_text'] = isset($ret['uebersicht_de'])?$ret['uebersicht_de']:'';
if(isset($ret['ean']) && $ret['ean'] != '') if(isset($ret['ean']) && $ret['ean'] != '')
{ {
+65 -19
View File
@@ -76,6 +76,7 @@ abstract class Versanddienstleister
$addressfields = ['name', 'adresszusatz', 'abteilung', 'ansprechpartner', 'unterabteilung', 'ort', 'plz', $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['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']); $ret['name'] = empty(trim($docArr['ansprechpartner'])) ? trim($docArr['name']) : trim($docArr['ansprechpartner']);
@@ -127,7 +128,7 @@ abstract class Versanddienstleister
if (!empty($docArr['ihrebestellnummer'])) { if (!empty($docArr['ihrebestellnummer'])) {
$orderNumberParts[] = $docArr['ihrebestellnummer']; $orderNumberParts[] = $docArr['ihrebestellnummer'];
} }
$orderNumberParts[] = $docArr['belegnr']; $orderNumberParts[] = ucfirst($sid)." ".$docArr['belegnr'];
$ret['order_number'] = implode(' / ', $orderNumberParts); $ret['order_number'] = implode(' / ', $orderNumberParts);
} }
@@ -369,7 +370,7 @@ abstract class Versanddienstleister
return true; 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); $address = $this->GetAdressdaten($docId, $docType);
if (isset($_SERVER['CONTENT_TYPE']) && ($_SERVER['CONTENT_TYPE'] === 'application/json')) { if (isset($_SERVER['CONTENT_TYPE']) && ($_SERVER['CONTENT_TYPE'] === 'application/json')) {
@@ -378,25 +379,65 @@ abstract class Versanddienstleister
if ($json->submit == 'print') { if ($json->submit == 'print') {
$result = $this->CreateShipment($json, $address); $result = $this->CreateShipment($json, $address);
if ($result->Success) { if ($result->Success) {
$sql = "INSERT INTO versand if (empty($versandpaket)) {
(adresse, lieferschein, versandunternehmen, gewicht, tracking, tracking_link, anzahlpakete) $sql = "INSERT INTO versandpakete
VALUES (
({$address['addressId']}, {$address['lieferscheinId']}, '$this->type', lieferschein_ohne_pos,
'$json->weight', '$result->TrackingNumber', '$result->TrackingUrl', 1)"; gewicht,
$this->app->DB->Insert($sql); 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'; $filename = join('_', [$this->type, 'Label', $result->TrackingNumber]) . '.pdf';
file_put_contents($filename, $result->Label); $filefullpath = $this->app->erp->GetTMP() . $filename;
$this->app->printer->Drucken($this->labelPrinterId, $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)) { $this->app->printer->Drucken($this->labelPrinterId, $filefullpath);
$filename = $this->app->erp->GetTMP() . join('_', [$this->type, 'ExportDoc', $result->TrackingNumber]) . '.pdf';
file_put_contents($filename, $result->ExportDocuments); if (isset($result->ExportDocuments)) {
$this->app->printer->Drucken($this->documentPrinterId, $filename); $filefullpath = $this->app->erp->GetTMP() . join('_', [$this->type, 'ExportDoc', $result->TrackingNumber]) . '.pdf';
} file_put_contents($filefullpath, $result->ExportDocuments);
$ret['messages'][] = ['class' => 'info', 'text' => "Paketmarke wurde erfolgreich erstellt: $result->TrackingNumber"]; $this->app->printer->Drucken($this->documentPrinterId, $filefullpath);
}
$ret['messages'][] = ['class' => 'info', 'text' => "Paketmarke wurde erfolgreich erstellt: $result->TrackingNumber"];
} else { } 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'); header('Content-Type: application/json');
@@ -410,7 +451,12 @@ abstract class Versanddienstleister
$address['product'] = $products[0]->Id ?? ''; $address['product'] = $products[0]->Id ?? '';
$countries = $this->app->DB->SelectArr("SELECT iso, bezeichnung_de name, eu FROM laender ORDER BY bezeichnung_de"); $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['form'] = $address;
$json['countries'] = $countries; $json['countries'] = $countries;
+5 -1
View File
@@ -4030,7 +4030,11 @@ class Briefpapier extends SuperFPDF {
} }
$this->SetX($x+$abstand_links); $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+$abstand_links+$descWidth);
//$this->SetX($x); //$this->SetX($x);
+21 -15
View File
@@ -43,9 +43,9 @@ class RechnungPDF extends BriefpapierCustom {
parent::__construct($this->app,$projekt,$styleData); 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") if($this->app->erp->Firmendaten("steuerspalteausblenden")=="1")
{ {
// pruefe ob es mehr als ein steuersatz gibt // wenn ja dann darf man sie nicht ausblenden // pruefe ob es mehr als ein steuersatz gibt // wenn ja dann darf man sie nicht ausblenden
@@ -124,10 +124,10 @@ class RechnungPDF extends BriefpapierCustom {
$lieferschein = $this->app->DB->Select("SELECT belegnr FROM lieferschein WHERE id='$lieferscheinid' LIMIT 1"); $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; $rechnungsnummeranzeigen = false;
} }
elseif(!empty($belegnr)){ else*/if(!empty($belegnr)){
$rechnungsnummeranzeigen = true; $rechnungsnummeranzeigen = true;
} }
$projektabkuerzung = $this->app->DB->Select(sprintf('SELECT abkuerzung FROM projekt WHERE id = %d', $projekt)); $projektabkuerzung = $this->app->DB->Select(sprintf('SELECT abkuerzung FROM projekt WHERE id = %d', $projekt));
@@ -172,7 +172,7 @@ class RechnungPDF extends BriefpapierCustom {
$zahlungsweisetext = $this->app->erp->Zahlungsweisetext("rechnung",$id); $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"); if($belegnr=="" || $belegnr=="0") $belegnr = "- ".$this->app->erp->Beschriftung("dokument_entwurf");
else { else {
@@ -181,7 +181,7 @@ class RechnungPDF extends BriefpapierCustom {
} }
$posanzeigen = true; $posanzeigen = true;
if($als=="zahlungserinnerung") /* if($als=="zahlungserinnerung")
{ {
$this->doctypeOrig=$this->app->erp->Beschriftung("dokument_zahlungserinnerung")." ".(is_null($_datum)?$mahnwesen_datum:$_datum); $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; if($this->app->erp->GetKonfiguration("mahnwesen_ze_pos") === '0')$posanzeigen = false;
@@ -207,14 +207,12 @@ class RechnungPDF extends BriefpapierCustom {
if($this->app->erp->GetKonfiguration("mahnwesen_inkasso_pos") === '0')$posanzeigen = false; if($this->app->erp->GetKonfiguration("mahnwesen_inkasso_pos") === '0')$posanzeigen = false;
} }
else else
{ {*/
if($rechnungersatz) if($rechnungersatz)
$this->doctypeOrig=($this->app->erp->Beschriftung("bezeichnungrechnungersatz")?$this->app->erp->Beschriftung("bezeichnungrechnungersatz"):$this->app->erp->Beschriftung("dokument_rechnung"))." $belegnr"; $this->doctypeOrig=($this->app->erp->Beschriftung("bezeichnungrechnungersatz")?$this->app->erp->Beschriftung("bezeichnungrechnungersatz"):$this->app->erp->Beschriftung("dokument_rechnung"))." $belegnr";
else else
$this->doctypeOrig=$this->app->erp->Beschriftung("dokument_rechnung")." $belegnr"; $this->doctypeOrig=$this->app->erp->Beschriftung("dokument_rechnung")." $belegnr";
} // }
$this->zusatzfooter = " (RE$belegnr)"; $this->zusatzfooter = " (RE$belegnr)";
@@ -407,12 +405,12 @@ class RechnungPDF extends BriefpapierCustom {
if($als!="" && $als!="doppel") /* if($als!="" && $als!="doppel")
{ {
$body = $this->app->erp->MahnwesenBody($id,$als,$_datum); $body = $this->app->erp->MahnwesenBody($id,$als,$_datum);
$footer =$this->app->erp->ParseUserVars("rechnung",$id, $this->app->erp->Beschriftung("rechnung_footer")); $footer =$this->app->erp->ParseUserVars("rechnung",$id, $this->app->erp->Beschriftung("rechnung_footer"));
} }
else { else {*/
$body = $this->app->erp->Beschriftung("rechnung_header"); $body = $this->app->erp->Beschriftung("rechnung_header");
if($bodyzusatz!="") $body=$body."\r\n".$bodyzusatz; if($bodyzusatz!="") $body=$body."\r\n".$bodyzusatz;
$body = $this->app->erp->ParseUserVars("rechnung",$id,$body); $body = $this->app->erp->ParseUserVars("rechnung",$id,$body);
@@ -442,6 +440,14 @@ class RechnungPDF extends BriefpapierCustom {
$footer = $versandinfo."$freitext"."\r\n".$this->app->erp->ParseUserVars("rechnung",$id,$this->app->erp->Beschriftung("rechnung_footer"). $footer = $versandinfo."$freitext"."\r\n".$this->app->erp->ParseUserVars("rechnung",$id,$this->app->erp->Beschriftung("rechnung_footer").
"\r\n$steuer\r\n$zahlungsweisetext").$systemfreitext; "\r\n$steuer\r\n$zahlungsweisetext").$systemfreitext;
} }
// }
if ($titel_abw != '') {
$this->doctypeOrig = $titel_abw;
}
if ($text_abw != '') {
$body = $text_abw;
} }
$this->setTextDetails(array( $this->setTextDetails(array(
@@ -686,10 +692,10 @@ class RechnungPDF extends BriefpapierCustom {
$tmp_name = str_replace(' ','',trim($this->recipient['enterprise'])); $tmp_name = str_replace(' ','',trim($this->recipient['enterprise']));
$tmp_name = str_replace('.','',$tmp_name); $tmp_name = str_replace('.','',$tmp_name);
if($als=="" || $als=="doppel") if($titel_abw != "")
$this->filename = $datum2."_RE".$belegnr.".pdf"; $this->filename = $datum2."_RE".$belegnr."_INFO.pdf";
else else
$this->filename = $datum2."_MA".$belegnr.".pdf"; $this->filename = $datum2."_RE".$belegnr.".pdf";
$this->setBarcode($belegnr); $this->setBarcode($belegnr);
} }
@@ -137,7 +137,7 @@ SPDX-License-Identifier: LicenseRef-EGPL-3.1
<h2>{|Paket|}</h2> <h2>{|Paket|}</h2>
<table> <table>
<tr> <tr>
<td>{|Gewicht (in kg)|}:</td> <td>{|Gewicht (in kg)</b>|}:</td>
<td><input type="text" v-model.number="form.weight"></td> <td><input type="text" v-model.number="form.weight"></td>
</tr> </tr>
<tr> <tr>
@@ -157,7 +157,7 @@ SPDX-License-Identifier: LicenseRef-EGPL-3.1
<td> <td>
<select v-model="form.product" required> <select v-model="form.product" required>
<option v-for="prod in products" :value="prod.Id" v-if="productAvailable(prod)">{{prod.Name}}</option> <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> </td>
</tr> </tr>
<tr v-if="serviceAvailable('premium')"> <tr v-if="serviceAvailable('premium')">
@@ -168,11 +168,11 @@ SPDX-License-Identifier: LicenseRef-EGPL-3.1
</div> </div>
<div class="clearfix"></div> <div class="clearfix"></div>
<div class="col-md-12"> <div class="col-md-12">
<h2>{|Bestellung|}</h2> <h2>{|Sonstiges|}</h2>
<table> <table>
<tbody> <tbody>
<tr> <tr>
<td>{|Bestellnummer|}:</td> <td>{|Referenzen|}:</td>
<td><input type="text" size="36" v-model="form.order_number"></td> <td><input type="text" size="36" v-model="form.order_number"></td>
</tr> </tr>
<tr> <tr>
File diff suppressed because one or more lines are too long
+2 -2
View File
@@ -2054,7 +2054,7 @@ $table_kontakte = '';
$ckontakte = !empty($kontakte)?count($kontakte):0; $ckontakte = !empty($kontakte)?count($kontakte):0;
for($i=0;$i<$ckontakte;$i++) for($i=0;$i<$ckontakte;$i++)
{ {
$tabindex = $tabindex+i; $tabindex = $tabindex+$i;
$table_kontakte .= "<tr><td>".$kontakte[$i]['bezeichnung'].":&nbsp; $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>"; </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, if(bearbeiter!="",bearbeiter,a2.name) as bearbeiter,
CONCAT(UCASE(LEFT(d.typ, 1)), SUBSTRING(d.typ, 2)) as art, 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, 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, concat("1","-",d.id) as did,
d.content as suchtext, d.content as suchtext,
d.internebezeichnung d.internebezeichnung
+23 -3
View File
@@ -1597,11 +1597,17 @@ select a.kundennummer, (SELECT name FROM adresse a2 WHERE a2.kundennummer = a.ku
if($artikel_freitext1_suche) if($artikel_freitext1_suche)
{ {
$felder[] = 'art.freifeld1'; $felder[] = 'art.freifeld1';
} else {
$artikel_freitext1_suche = 'true';
} }
$subwhere = $this->AjaxFilterWhere($termorig,$felder); $subwhere = $this->AjaxFilterWhere($termorig,$felder);
$arr = $this->app->DB->SelectArr("SELECT CONCAT(art.nummer,' ',art.name_de) as name FROM artikel art $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' 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; $carr = !empty($arr)?count($arr):0;
for($i = 0; $i < $carr; $i++) { for($i = 0; $i < $carr; $i++) {
$newarr[] = $arr[$i]['name']; $newarr[] = $arr[$i]['name'];
@@ -2072,6 +2078,20 @@ select a.kundennummer, (SELECT name FROM adresse a2 WHERE a2.kundennummer = a.ku
$newarr[] = $arr[$i]['name']; $newarr[] = $arr[$i]['name'];
break; 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": case "vpeartikel":
$arr = $this->app->DB->SelectArr("SELECT DISTINCT vpe FROM verkaufspreise WHERE geloescht=0 AND vpe LIKE '%$term%' ORDER by vpe"); $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; $carr = !empty($arr)?count($arr):0;
@@ -2465,7 +2485,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"); $adresse = $this->app->DB->Select("SELECT id FROM adresse WHERE kundennummer = '".$kunde[0]."' AND kundennummer <> '' LIMIT 1");
} }
$beleg = str_replace('kunden','',$filtername); $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')." ".($adresse?" AND adresse = '$adresse' ":'')." ".$this->app->erp->ProjektRechte('projekt')."
ORDER by belegnr LIMIT 20"); ORDER by belegnr LIMIT 20");
$carr = !empty($arr)?count($arr):0; $carr = !empty($arr)?count($arr):0;
+21 -22
View File
@@ -907,14 +907,14 @@ class Artikel extends GenArtikel {
$defaultorder = 7; $defaultorder = 7;
// headings // headings
$heading = array('Artikel', 'Nummer','Menge', 'Einheit', 'Lager', 'Reserviert', 'Men&uuml;'); $heading = array('Artikel', 'Nummer','Referenz','Menge', 'Einheit', 'Lager', 'Reserviert', 'Men&uuml;');
$width = array('50%', '10%', '5%', '5%','5%', '5%', '9%'); $width = array('50%', '10%', '5%', '5%', '5%','5%', '5%', '9%');
$findcols = array('a.name_de', 'a.nummer', 's.menge','a.einheit', $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 '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) THEN (SELECT SUM(lr.menge) FROM lager_reserviert lr WHERE lr.artikel=a.id)
ELSE 0 ELSE 0
END','id'); 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 = "<table cellpadding=0 cellspacing=0>";
$menu .= "<tr>"; $menu .= "<tr>";
@@ -932,20 +932,19 @@ class Artikel extends GenArtikel {
$alignright = array(3,5,6); $alignright = array(3,5,6);
// SQL statement // SQL statement
$sql = "SELECT SQL_CALC_FOUND_ROWS s.id, $sql = "SELECT SQL_CALC_FOUND_ROWS
CONCAT('<a href=\"index.php?module=artikel&action=edit&id=',a.id,'\" target=\"_blank\">',a.name_de,'</a>&nbsp;', s.id,
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.name_de,'</a>&nbsp;',
CONCAT('<a href=\"index.php?module=artikel&action=edit&id=',a.id,'\" target=\"_blank\">',a.nummer,'</a>') as nummer, 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,
".$this->app->erp->FormatMenge('s.menge').' as menge, a.einheit, CONCAT('<a href=\"index.php?module=artikel&action=edit&id=',a.id,'\" target=\"_blank\">',a.nummer,'</a>') as nummer,
s.referenz,
'.$this->app->erp->FormatMenge('ifnull(lag.menge,0)').' as lager, 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 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) THEN (SELECT '.$this->app->erp->FormatMenge('SUM(lr.menge)')." FROM lager_reserviert lr WHERE lr.artikel=a.id)
ELSE 0 ELSE 0
END as reserviert, END as reserviert,
s.id as menu
s.id as menu
FROM stueckliste s FROM stueckliste s
INNER JOIN artikel a ON s.artikel=a.id INNER JOIN artikel a ON s.artikel=a.id
LEFT JOIN (SELECT sum(lpi.menge) as menge ,lpi.artikel LEFT JOIN (SELECT sum(lpi.menge) as menge ,lpi.artikel
@@ -6090,7 +6089,7 @@ class Artikel extends GenArtikel {
$stueck = $this->app->erp->ArtikelAnzahlLagerStueckliste($id); $stueck = $this->app->erp->ArtikelAnzahlLagerStueckliste($id);
$this->ArtikelStuecklisteImport('TAB3'); // $this->ArtikelStuecklisteImport('TAB3');
$url = 'index.php?module=artikel&action=stueckliste&cmd=getbaum&id='.$id; $url = 'index.php?module=artikel&action=stueckliste&cmd=getbaum&id='.$id;
$this->app->Tpl->Set('URL',$url); $this->app->Tpl->Set('URL',$url);
$this->app->Tpl->Add('TAB1',"<center>"); $this->app->Tpl->Add('TAB1',"<center>");
@@ -6255,8 +6254,8 @@ class Artikel extends GenArtikel {
{ {
$id = $this->app->Secure->GetGET('id'); $id = $this->app->Secure->GetGET('id');
if($id > 0){ 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 $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'";
LEFT JOIN artikel a ON a.id=s.artikel WHERE s.stuecklistevonartikel='$id'"); $result = $this->app->DB->SelectArr($sql);
} }
header('Content-type: text/csv'); header('Content-type: text/csv');
header('Content-Disposition: attachment; filename=file.csv'); header('Content-Disposition: attachment; filename=file.csv');
@@ -6322,7 +6321,7 @@ class Artikel extends GenArtikel {
$id = (int)$this->app->Secure->GetPOST('id'); $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){
if($data['artikel'] == 0){ if($data['artikel'] == 0){
+2 -1
View File
@@ -122,7 +122,8 @@ class Artikelbaum
public function ArtikelbaumList() 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'); $id = $this->app->Secure->GetGET('id');
$url = 'index.php?module=artikelbaum&action=baumajax&id='.$id; $url = 'index.php?module=artikelbaum&action=baumajax&id='.$id;
$this->app->Tpl->Set('URL',$url); $this->app->Tpl->Set('URL',$url);
+249
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']);
}
}
+156 -11
View File
@@ -848,7 +848,7 @@ class Auftrag extends GenAuftrag
FROM auftrag auf FROM auftrag auf
INNER JOIN auftrag_position ON auf.id = auftrag_position.auftrag INNER JOIN auftrag_position ON auf.id = auftrag_position.auftrag
INNER JOIN artikel ON auftrag_position.artikel = artikel.id 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 ORDER BY urspruengliches_lieferdatum ASC, auf.belegnr ASC, auftrag_position.sort ASC
) a"; ) a";
@@ -1990,8 +1990,52 @@ class Auftrag extends GenAuftrag
$gebuchtezeit = str_replace(".", ",", round($gebuchtezeit,2)); $gebuchtezeit = str_replace(".", ",", round($gebuchtezeit,2));
} }
$summebrutto = $this->app->DB->Select("SELECT gesamtsumme FROM auftrag WHERE id='$id' LIMIT 1"); $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); $this->app->Tpl->Set('GEBUCHTEZEIT',0);
if($auftragArr[0]['ust_befreit']==0){ if($auftragArr[0]['ust_befreit']==0){
@@ -2270,7 +2314,7 @@ class Auftrag extends GenAuftrag
} }
$this->app->Tpl->Set('PREISANFRAGE', implode('<br />', $priceRequestsHtml)); $this->app->Tpl->Set('PREISANFRAGE', implode('<br />', $priceRequestsHtml));
} }
/*
$tmpVersand = !$hasDeliveryNotes?[]: $this->app->DB->SelectFirstCols( $tmpVersand = !$hasDeliveryNotes?[]: $this->app->DB->SelectFirstCols(
"SELECT if(v.versendet_am!='0000-00-00', "SELECT if(v.versendet_am!='0000-00-00',
CONCAT(DATE_FORMAT( v.versendet_am,'%d.%m.%Y'),' ',v.versandunternehmen), CONCAT(DATE_FORMAT( v.versendet_am,'%d.%m.%Y'),' ',v.versandunternehmen),
@@ -2353,6 +2397,39 @@ class Auftrag extends GenAuftrag
else { else {
$this->app->Tpl->Set('TRACKING',$tmpVersand); $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(); $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
// 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"); //$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>"; <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() function AuftragZahlungsmail()
{ {
@@ -4871,6 +4993,10 @@ class Auftrag extends GenAuftrag
$this->app->erp->AdresseAlsLieferadresseButton($adresse); $this->app->erp->AdresseAlsLieferadresseButton($adresse);
} }
if ($schreibschutz != 1 AND $status != 'abgeschlossen') {
$this->app->erp->BerechneDeckungsbeitrag($id,'auftrag');
}
if($nummer!='') { if($nummer!='') {
$this->app->Tpl->Set('NUMMER',$nummer); $this->app->Tpl->Set('NUMMER',$nummer);
if($this->app->erp->RechteVorhanden('adresse','edit')){ 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 $this->app->DB->Update("UPDATE lieferschein SET
belegnr='$ls_belegnr', status='freigegeben', versand='".$this->app->User->GetDescription()."' belegnr='$ls_belegnr',
WHERE id='$lieferschein' LIMIT 1"); 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'); $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($exportdruckrechnungstufe1)
{ {
if(!empty($projektarr)) if(!empty($projektarr))
@@ -5975,9 +6113,6 @@ Die Gesamtsumme stimmt nicht mehr mit urspr&uuml;nglich festgelegten Betrag '.
$exportdruckrechnungstufe1 = $this->app->erp->Export($exportland); $exportdruckrechnungstufe1 = $this->app->erp->Export($exportland);
} }
if(($autodruckrechnungstufe1=='1' || $exportdruckrechnungstufe1) && $rechnung > 0) if(($autodruckrechnungstufe1=='1' || $exportdruckrechnungstufe1) && $rechnung > 0)
{ {
$this->app->DB->Update("UPDATE rechnung SET status='versendet', versendet='1',schreibschutz='1' WHERE id='$rechnung' LIMIT 1"); $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=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=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=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){ if(strlen($backurl)>5){
$this->app->erp->MenuEintrag("$backurl", 'Zur&uuml;ck zur &Uuml;bersicht'); $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(); $this->AuftraguebersichtMenu();
$targetMessage = 'AUTOVERSANDBERECHNEN'; $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; $autoshipmentEnabled = true;
$this->app->erp->RunHook('OrderAutoShipment', 2, $targetMessage, $autoshipmentEnabled); $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() 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')) if($this->app->Secure->GetPOST('ausfuehren') && $this->app->erp->RechteVorhanden('auftrag', 'edit'))
{ {
$drucker = $this->app->Secure->GetPOST('seldrucker'); $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->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); header('Location: index.php?module=auftrag&action=edit&id='.$id_neu);
} }
+25
View File
@@ -776,6 +776,7 @@ class Bestellung extends GenBestellung
$tmp3->DisplayNew('PDFARCHIV','Men&uuml;',"noAction"); $tmp3->DisplayNew('PDFARCHIV','Men&uuml;',"noAction");
} }
/*
$wareneingangsbelege = $this->app->DB->SelectFirstCols("SELECT $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; 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 <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{ else{
$this->app->Tpl->Set('WARENEINGANGSBELEG', '-'); $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); $this->app->Tpl->Set('ID', $id);
+1 -1
View File
@@ -33,7 +33,7 @@
</tr> </tr>
<tr> <tr>
<td>Bearbeiter:</td> <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>
<tr> <tr>
<td width="100">{|Projekt|}:</td> <td width="100">{|Projekt|}:</td>
@@ -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>
@@ -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>
+26 -39
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">{|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">{|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">{|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>
<table width="100%"> <table width="100%">
@@ -48,19 +48,14 @@
<td style="" width="50%">[VERSANDTEXT]</td> <td style="" width="50%">[VERSANDTEXT]</td>
[RMAENDIF] [RMAENDIF]
</tr> </tr>
</table> </table>
<div style="background-color:white"> <div style="background-color:white">
<div style="padding:10px"> <div style="padding:10px">
[RECHNUNGLIEFERADRESSE] [RECHNUNGLIEFERADRESSE]
</div> </div>
</div> </div>
</div> </div>
<div style="float:left; width:50%"> <div style="float:left; width:50%">
<div style="overflow:auto;max-height:550px;"> <div style="overflow:auto;max-height:550px;">
<div style="background-color:white;"> <div style="background-color:white;">
<h2 class="greyh2">Artikel</h2> <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> <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>
</div> </div>
[MINIDETAILNACHARTIKEL] [MINIDETAILNACHARTIKEL]
<!-- <div style="background-color:white" [DBHIDDEN]>
<div style="background-color:white;"> <h2 class="greyh2">{|Deckungsbeitrag (netto)|}</h2>
<h2 class="greyh2">Lieferkette</h2> <table width="100%">
<div style="padding:10px"> <tbody>
<table class="mkTable"> <tr>
<tr><th>Art</th><th>Beleg</th><th>Datum</th><th>Lieferant</th><th>Status</th></tr> <td>Umsatz EUR</td>
<tr><td>Bestellung</td><td>ENTWURF</td><td></td><td>In-Circuit<br>200 x 777777 SMT USBprog 1)</td><td>-</td></tr> <td>Kosten EUR</td>
<tr><td>Anlieferung</td><td>200000</td><td></td><td>In-Circuit<br>200 x 777777 ATMEGA32</td><td>offen</td></tr> <td>Deckungsbeitrag EUR</td>
<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> <td>DB %</td>
<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> </tr>
</table> <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>
-->
<div style="background-color:white"> <div style="background-color:white">
<h2 class="greyh2">{|Zahlungseingang|}</h2> <h2 class="greyh2">{|Zahlungen|}</h2>
<div style="padding:10px"> <div style="padding:10px">
[ZAHLUNGEN] [ZAHLUNGEN]
</div> </div>
</div> </div>
<div style="background-color:white"> <div style="background-color:white">
<h2 class="greyh2">{|Protokoll|}</h2> <h2 class="greyh2">{|Protokoll|}</h2>
<div style="padding:10px;"> <div style="padding:10px;">
[PROTOKOLL] [PROTOKOLL]
</div> </div>
</div> </div>
[VORPRODUKTIONPROTOKOLL] [VORPRODUKTIONPROTOKOLL]
[PRODUKTIONPROTOKOLL] [PRODUKTIONPROTOKOLL]
[NACHPRODUKTIONPROTOKOLL] [NACHPRODUKTIONPROTOKOLL]
<!--
<div style="background-color:white"> <div style="background-color:white">
<h2 class="greyh2">{|RMA Prozess|}</h2> <h2 class="greyh2">{|RMA Prozess|}</h2>
<div style="padding:10px"> <div style="padding:10px">
[RMA] [RMA]
</div> </div>
</div> </div>
-->
<div style="background-color:white"> <div style="background-color:white">
<h2 class="greyh2">{|PDF-Archiv|}</h2> <h2 class="greyh2">{|PDF-Archiv|}</h2>
<div style="padding:10px;overflow:auto;"> <div style="padding:10px;overflow:auto;">
[PDFARCHIV] [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>
[INTERNEBEMERKUNGEDIT] [INTERNEBEMERKUNGEDIT]
</div> </div>
</div> </div>
+5 -2
View File
@@ -1,4 +1,7 @@
<div id="tabs"> <div id="tabs">
<ul>
<li><a href="#tabs-1">Allgemein</a></li>
</ul>
<div id="tabs-1"> <div id="tabs-1">
[MESSAGE] [MESSAGE]
<form action="" method="post"> <form action="" method="post">
@@ -11,11 +14,11 @@
<legend>{|Einstellungen|}</legend> <legend>{|Einstellungen|}</legend>
<td>{|Absatz ber&uuml;cksichtigen (Monate)|}:</td> <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>
<tr> <tr>
<td>{|Vorausplanen (Monate)|}:</td> <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> </tr>
</table> </table>
</fieldset> </fieldset>
+2 -2
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=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 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%" 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>
<tr align="center"> <tr align="center">
<td><a href="index.php?module=versandarten&action=list">{|Versandarten|}</a></td> <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 href="index.php?module=zahlungsweisen&action=list">{|Zahlungsweisen|}</a></td>
<td><a [LIEFERBEDINGUNGENLINK]>{|Lieferbedingungen|}</a></td> <td><a [LIEFERBEDINGUNGENLINK]>{|Lieferbedingungen|}</a></td>
<td></td> <td><a href="index.php?module=mahnwesen&action=einstellungen">{|Mahnwesen|}</a></td>
</tr> </tr>
</table> </table>
+7 -7
View File
@@ -100,8 +100,8 @@
<legend>{|Ticketsystem|}</legend> <legend>{|Ticketsystem|}</legend>
<table width="100%" border="0" class="mkTableFormular"> <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>{|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>{|ticketprojekt|}:</td><td><input type="text" id="ticketprojekt" 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>{|ticketqueue|}:</td><td><input type="text" id="ticketqueue" 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>{|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>{|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>{|ticketabgeschlossen|}:</td><td><input type="text" name="ticketabgeschlossen" value="[TICKETABGESCHLOSSEN]" size="40"></td></tr>
@@ -121,16 +121,16 @@
<table width="100%" border="0" class="mkTableFormular"> <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>{|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>{|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>{|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" name="adresse" value="[ADRESSE]" size="40"></td></tr> <tr><td>{|adresse|}:</td><td><input type="text" id="adresse" 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>{|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>{|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>{|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>{|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>{|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>{|autoresponderbetreff|}:</td><td><textarea id="autoresponderbetreff" name="autoresponderbetreff" rows="6" style="width:100%;">[AUTORESPONDERBETREFF]</textarea></td></tr>
<tr><td>{|autorespondertext|}:</td><td><input type="text" name="autorespondertext" value="[AUTORESPONDERTEXT]" size="40"></td></tr> <tr><td>{|autorespondertext|}:</td><td><textarea id="autorespondertext" name="autorespondertext" rows="6" style="width:100%;">[AUTORESPONDERTEXT]</textarea></td></tr>
<tr><td>{|projekt|}:</td><td><input type="text" name="projekt" value="[PROJEKT]" size="40"></td></tr> <tr><td>{|projekt|}:</td><td><input type="text" id="projekt" name="projekt" value="[PROJEKT]" size="40"></td></tr>
</table> </table>
</fieldset> </fieldset>
</div> </div>
@@ -39,6 +39,14 @@
<td>Projekt:</td> <td>Projekt:</td>
<td><input type="text" name="projekt" id="projekt" value="[PROJEKT]" /></td> <td><input type="text" name="projekt" id="projekt" value="[PROJEKT]" /></td>
</tr> </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> </table>
</fieldset> </fieldset>
</div> </div>
+204
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>
@@ -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>
+62
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>
@@ -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>
+20
View File
@@ -1101,6 +1101,26 @@
</div> </div>
</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> <fieldset><legend>Finanzbuchhaltung Export Kontenrahmen - Weitere Kostenarten</legend>
<table> <table>
@@ -15,7 +15,7 @@
<tr> <tr>
<td><input type="checkbox" id="angeboteoffen">&nbsp;Fehlende Artikel</td> <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="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> <td>Artikelgruppen: <select><option>alle</option><option>Waren 700000</option></select></td>
</tr></table> </tr></table>
</center> </center>
@@ -121,7 +121,8 @@
<li>{|ZahlungDiff|} <i>{|Variablen|}: {AUFTRAG}, {DATUM}, {GESAMT}, {REST}, {ANSCHREIBEN}, {INTERNET}</i></li> <li>{|ZahlungDiff|} <i>{|Variablen|}: {AUFTRAG}, {DATUM}, {GESAMT}, {REST}, {ANSCHREIBEN}, {INTERNET}</i></li>
<li>{|Stornierung|} <i>{|Variablen|}: {AUFTRAG}, {DATUM}, {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>{|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>{|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>{|Erweiterte Freigabe|} <i>{|Variablen|}: {REQUESTER}, {LINK}, {LINKFREIGABEUEBERSICHT}, {DOCTYPE}, {DOCTYPE_ID}</i></li>
<li>{|Selbstabholer|}</li> <li>{|Selbstabholer|}</li>
+1 -7
View File
@@ -39,7 +39,7 @@
</div> </div>
<div style="background-color:white"> <div style="background-color:white">
<h2 class="greyh2">{|Zahlungseingang|}</h2> <h2 class="greyh2">Buchungen</h2>
<div style="padding:10px"> <div style="padding:10px">
[ZAHLUNGEN] [ZAHLUNGEN]
</div> </div>
@@ -58,12 +58,6 @@
</div> </div>
</div> </div>
<div style="background-color:white"> <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> </div>
+2 -2
View File
@@ -45,8 +45,8 @@
<input type="checkbox" id="auswahlalle" onchange="alleauswaehlen();" />&nbsp;{|alle markieren|}&nbsp; <input type="checkbox" id="auswahlalle" onchange="alleauswaehlen();" />&nbsp;{|alle markieren|}&nbsp;
<select id="sel_aktion" name="sel_aktion"> <select id="sel_aktion" name="sel_aktion">
<option value="">{|bitte w&auml;hlen|} ...</option> <option value="">{|bitte w&auml;hlen|} ...</option>
<option value="erledigtam">{|als erledigt markieren|}</option> [ALSBEZAHLTMARKIEREN]
<option value="offen">{|erledigt Markierung entfernen|}</option> <option value="offen">{|als offen markieren|}</option>
<option value="mail">{|per Mail versenden|}</option> <option value="mail">{|per Mail versenden|}</option>
<option value="versendet">{|als versendet markieren|}</option> <option value="versendet">{|als versendet markieren|}</option>
<option value="pdf">{|Sammel-PDF|}</option> <option value="pdf">{|Sammel-PDF|}</option>
+143 -2
View File
@@ -6,7 +6,9 @@
<li><a href="#tabs-3">{|Zeiterfassung|}</a></li> <li><a href="#tabs-3">{|Zeiterfassung|}</a></li>
<li><a href="#tabs-4">{|Wiedervorlagen|}</a></li> <li><a href="#tabs-4">{|Wiedervorlagen|}</a></li>
<li><a href="#tabs-5">{|Notizen|}</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> </ul>
<div id="tabs-1"> <div id="tabs-1">
@@ -508,7 +510,7 @@
<div class="row"> <div class="row">
<div class="col-xs-12 col-sm-1 col-sm-height"> <div class="col-xs-12 col-sm-1 col-sm-height">
<div class="inside inside-full-height"> <div class="inside inside-full-height">
<fieldset><legend>{|Kontorahmen|}</legend> <fieldset><legend>{|Kontenrahmen|}</legend>
<table class="mkTable"> <table class="mkTable">
<tr> <tr>
<th>Variable</th> <th>Variable</th>
@@ -551,4 +553,143 @@
</div> </div>
</div> </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> </div>
@@ -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>--> <!--<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>
<tr align="center"> <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=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=adresse_import&action=list">{|Intranet|}</a></td>-->
<td><a href="index.php?module=shopimport&action=list">{|Import|}<br>({|Online-Shop|})</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><td colspan="99">&nbsp;</td></tr>
<tr align="center"> <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=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%">[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>--> <!--<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>
+280 -113
View File
@@ -18,37 +18,66 @@
<legend>{|Einstellungen|}</legend> <legend>{|Einstellungen|}</legend>
<table width="100%"> <table width="100%">
<tr> <tr>
<td width="150">{|Bezeichnung|}:</td> <td width="150">
<td><input type="text" name="bezeichnung" id="bezeichnung" size="40" rule="notempty" {|Kurzbezeichnung|}:
msg="Pflichfeld!" tabindex="2" value="[BEZEICHNUNG]"></td> </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>
<tr> <tr>
<td>{|Typ|}:</td> <td width="150">
{|Bezeichnung|}:
</td>
<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>
<!--
<select name="type" id="type"> <select name="type" id="type">
[TYPE] [TYPE]
</select> </select>
-->
<input type="text" name="type" id="type" size="40" value="konto" required readonly>
</td> </td>
</tr> </tr>
<tr> <tr>
<td>{|Projekt|}:</td> <td>
<td><input type="text" size="30" name="projekt" id="projekt" value="[PROJEKT]"></td> {|Projekt|}:
</td>
<td>
<input type="text" size="30" name="projekt" id="projekt" value="[PROJEKT]">
</td>
</tr> </tr>
<tr> <tr>
<td>{|Aktiv|}:</td> <td>
<td><input type="checkbox" name="aktiv" id="aktiv" value="1" {|Aktiv|}:
[AKTIV]><i>{|Aktiv. Nicht mehr verwendete Konten k&ouml;nnen deaktiviert werden.|}</i> </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> </td>
</tr> </tr>
<tr> <tr>
<td>{|Keine E-Mail|}:</td> <td>
<td><input type="checkbox" name="keineemail" id="keineemail" value="1" {|Keine E-Mail|}:
[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>
<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> </td>
</tr> </tr>
<tr> <tr>
<td>{|&Auml;nderungen erlauben|}:</td> <td>
<td><input type="checkbox" name="schreibbar" id="schreibbar" value="1" {|&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> [SCHREIBBAR]><i>&nbsp;{|Es d&uuml;rfen nachtr&auml;glich Kontobuchungen ver&auml;ndert werden|}</i>
</td> </td>
</tr> </tr>
@@ -66,38 +95,71 @@
<legend>{|Bankverbindung (bei Typ Bank)|}</legend> <legend>{|Bankverbindung (bei Typ Bank)|}</legend>
<table width="100%"> <table width="100%">
<tr> <tr>
<td width="150">{|Inhaber|}:</td> <td width="150">{|Inhaber|}:
<td><input type="text" name="inhaber" id="inhaber" size="40" value="[INHABER]"></td> </td>
<td> <td>
<input type="text" name="inhaber" id="inhaber" size="40" value="[INHABER]">
</td>
<td>
</tr> </tr>
<tr> <tr>
<td>{|BIC|}:</td>
<td><input type="text" name="swift" id="swift" size="40" value="[SWIFT]"></td>
<td> <td>
{|BIC|}:
</td>
<td>
<input type="text" name="swift" id="swift" size="40" value="[SWIFT]">
</td>
<td>
</tr> </tr>
<tr> <tr>
<td>{|IBAN|}:</td>
<td><input type="text" name="iban" id="iban" size="40" value="[IBAN]"></td>
<td> <td>
{|IBAN|}:
</td>
<td>
<input type="text" name="iban" id="iban" size="40" value="[IBAN]">
</td>
<td>
</tr> </tr>
<tr> <tr>
<td>{|BLZ|}:</td>
<td><input type="text" name="blz" id="blz" size="40" value="[BLZ]"></td>
<td> <td>
{|BLZ|}:
</td>
<td>
<input type="text" name="blz" id="blz" size="40" value="[BLZ]">
</td>
<td>
</tr> </tr>
<tr> <tr>
<td>{|Konto|}:</td>
<td><input type="text" name="konto" id="konto" size="40" value="[KONTO]"></td>
<td> <td>
{|Konto|}:
</td>
<td>
<input type="text" name="konto" id="konto" size="40" value="[KONTO]">
</td>
<td>
</tr> </tr>
<tr> <tr>
<td>{|Gl&auml;ubiger ID|}:</td>
<td><input type="text" name="glaeubiger" id="glaeubiger" size="40" value="[GLAEUBIGER]"></td>
<td> <td>
{|Gl&auml;ubiger ID|}:
</td>
<td>
<input type="text" name="glaeubiger" id="glaeubiger" size="40" value="[GLAEUBIGER]">
</td>
<td>
</tr> </tr>
<tr> <tr>
<td>{|Lastschrift|}:</td> <td>
<td><input type="checkbox" name="lastschrift" id="lastschrift" value="1" [LASTSCHRIFT]></td> {|Lastschrift|}:
</td>
<td>
<input type="checkbox" name="lastschrift" id="lastschrift" value="1" [LASTSCHRIFT]>
</td>
</tr> </tr>
</table> </table>
</fieldset> </fieldset>
@@ -113,9 +175,13 @@
<legend>{|DATEV|}</legend> <legend>{|DATEV|}</legend>
<table width="100%"> <table width="100%">
<tr> <tr>
<td width="150">{|Konto|}:</td> <td width="150">{|Konto|}:
<td><input type="text" name="datevkonto" id="datevkonto" size="40" value="[DATEVKONTO]"></td> </td>
<td> <td>
<input type="text" name="datevkonto" id="datevkonto" size="40" value="[DATEVKONTO]">
</td>
<td>
</tr> </tr>
</table> </table>
</fieldset> </fieldset>
@@ -123,6 +189,7 @@
</div> </div>
</div> </div>
</div> </div>
<!--
<div class="row"> <div class="row">
<div class="row-height"> <div class="row-height">
<div class="col-xs-12 col-md-12 col-md-height"> <div class="col-xs-12 col-md-12 col-md-height">
@@ -131,46 +198,68 @@
<legend>{|CSV-Import|}</legend> <legend>{|CSV-Import|}</legend>
<table width="100%"> <table width="100%">
<tr> <tr>
<td width="150">{|Erste Datenzeile|}:</td> <td width="150">{|Erste Datenzeile|}:
<td><input type="text" name="importerstezeilenummer" id="importerstezeilenummer" size="15" </td>
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> <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"> <select name="importdatenmaskierung" id="importdatenmaskierung">
[IMPORTDATENMASKIERUNG] [IMPORTDATENMASKIERUNG]
</select> </select>
</td> </td>
</tr> </tr>
<tr> <tr>
<td width="150">{|Nullbytes entfernen|}:</td> <td width="150">{|Nullbytes entfernen|}:
<td><input type="checkbox" name="importnullbytes" id="importnullbytes" value="1" [IMPORTNULLBYTES]> </td>
<td>
<input type="checkbox" name="importnullbytes" id="importnullbytes" value="1" [IMPORTNULLBYTES]>
</td> </td>
</tr> </tr>
<tr> <tr>
<td width="150">{|Letzte Zeilen ignorieren|}:</td> <td width="150">{|Letzte Zeilen ignorieren|}:
<td><input type="text" size="15" name="importletztenzeilenignorieren" </td>
id="importletztenzeilenignorieren" value="[IMPORTLETZTENZEILENIGNORIEREN]"></td> <td>
<input type="text" size="15" name="importletztenzeilenignorieren"
id="importletztenzeilenignorieren" value="[IMPORTLETZTENZEILENIGNORIEREN]">
</td>
</tr> </tr>
</table> </table>
<br><br> <br><br>
<table> <table>
<tr> <tr>
<td width="150">{|Spalte in CSV|}</td> <td width="150">{|Spalte in CSV|}
<td>{|Spalten 1 bis n (Spaltennummer in CSV).|}</tr> </td>
<td>
{|Spalten 1 bis n (Spaltennummer in CSV).|}</tr>
<tr> <tr>
<td width="150">{|Datum|}:</td> <td width="150">{|Datum|}:
<td><input type="text" name="importfelddatum" id="importfelddatum" size="15" </td>
<td>
<input type="text" name="importfelddatum" id="importfelddatum" size="15"
value="[IMPORTFELDDATUM]"> value="[IMPORTFELDDATUM]">
&nbsp;{|Eingabeformat|}:&nbsp;<input type="text" name="importfelddatumformat" &nbsp;{|Eingabeformat|}:&nbsp;<input type="text" name="importfelddatumformat"
id="importfelddatumformat" size="20" id="importfelddatumformat" size="20"
@@ -179,67 +268,103 @@
id="importfelddatumformatausgabe" size="20" id="importfelddatumformatausgabe" size="20"
value="[IMPORTFELDDATUMFORMATAUSGABE]"> 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> <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> </td>
</tr> </tr>
<tr> <tr>
<td width="150">{|Betrag|}:</td> <td width="150">{|Betrag|}:
<td><input type="text" name="importfeldbetrag" id="importfeldbetrag" size="15" </td>
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> <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> <table>
<tr> <tr>
<td width="150">{|Haben|}:</td> <td width="150">{|Haben|}:
<td><input type="text" name="importfeldhaben" id="importfeldhaben" size="15" </td>
value="[IMPORTFELDHABEN]"></td> <td>
<input type="text" name="importfeldhaben" id="importfeldhaben" size="15"
value="[IMPORTFELDHABEN]">
</td>
</tr> </tr>
<tr> <tr>
<td width="150">{|Soll|}:</td> <td width="150">{|Soll|}:
<td><input type="text" name="importfeldsoll" id="importfeldsoll" size="15" </td>
value="[IMPORTFELDSOLL]"></td> <td>
<input type="text" name="importfeldsoll" id="importfeldsoll" size="15"
value="[IMPORTFELDSOLL]">
</td>
</tr> </tr>
</table> </table>
</td> </td>
</tr> </tr>
<tr> <tr>
<td width="150">{|Buchungstext|}:</td> <td width="150">{|Buchungstext|}:
<td><input type="text" name="importfeldbuchungstext" id="importfeldbuchungstext" size="15" </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> 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> </td>
</tr> </tr>
<tr> <tr>
<td width="150">{|W&auml;hrung|}:</td> <td width="150">{|W&auml;hrung|}:
<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> </td>
</tr>
<tr>
<td width="150"></td>
<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> <table>
<tr> <tr>
<td width="150">{|Markierung Eingang|}:</td> <td width="150">{|Markierung Eingang|}:
<td><input type="text" name="importfeldkennunghaben" id="importfeldkennunghaben" size="15" </td>
value="[IMPORTFELDKENNUNGHABEN]">&nbsp;<i>{|z.B. H oder +|}</i></td> <td>
<input type="text" name="importfeldkennunghaben" id="importfeldkennunghaben" size="15"
value="[IMPORTFELDKENNUNGHABEN]">&nbsp;<i>{|z.B. H oder +|}</i>
</td>
</tr> </tr>
<tr> <tr>
<td>{|Markierung Ausgang|}:&nbsp;</td> <td>
<td><input type="text" name="importfeldkennungsoll" id="importfeldkennungsoll" size="15" {|Markierung Ausgang|}:&nbsp;
value="[IMPORTFELDKENNUNGSOLL]">&nbsp;<i>{|z.B. S oder -|}</i></td> </td>
<td>
<input type="text" name="importfeldkennungsoll" id="importfeldkennungsoll" size="15"
value="[IMPORTFELDKENNUNGSOLL]">&nbsp;<i>{|z.B. S oder -|}</i>
</td>
</tr> </tr>
</table> </table>
</td> </td>
</tr> </tr>
</table> </table>
@@ -256,37 +381,56 @@
<legend>{|Live-Import|}</legend> <legend>{|Live-Import|}</legend>
<table id="liveimport-table"> <table id="liveimport-table">
<tr> <tr>
<td>{|Live-Import aktiv|}:</td> <td>
<td><input type="checkbox" name="liveimport_online" id="liveimport_online" value="1" {|Live-Import aktiv|}:
[LIVEIMPORT_ONLINE]></td> </td>
<td>
<input type="checkbox" name="liveimport_online" id="liveimport_online" value="1"
[LIVEIMPORT_ONLINE]>
</td>
</tr> </tr>
<tr> <tr>
<td>{|Zeitraum|}:</td>
<td> <td>
{|Zeitraum|}:
</td>
<td>
<select name="importperiode_in_hours" id="importperiode_in_hours"> <select name="importperiode_in_hours" id="importperiode_in_hours">
[IMPORTPERIODE_IN_HOURS] [IMPORTPERIODE_IN_HOURS]
</select> {|Stunden|} </select> {|Stunden|}
</td> </td>
</tr> </tr>
<tr> <tr>
<td> <td>
{|zu Zeiten|}: {|zu Zeiten|}:
</td> </td>
<td> <td>
[SCHEDULER] [SCHEDULER]
</td> </td>
</tr> </tr>
[BEFORELIVEIMPORT] [BEFORELIVEIMPORT]
<tr> <tr>
<td width="150">{|Zugangsdaten|}:</td> <td width="150">{|Zugangsdaten|}:
<td><textarea rows="5" cols="100" name="liveimport" id="liveimport">[LIVEIMPORT]</textarea></td> </td>
<td>
<textarea rows="5" cols="100" name="liveimport" id="liveimport">[LIVEIMPORT]</textarea>
</td>
</tr> </tr>
[AFTERLIVEIMPORT] [AFTERLIVEIMPORT]
<tr> <tr>
<td>{|Passwort Tresor|}:</td> <td>
<td><input type="button" value="{|Passwort setzen|}" {|Passwort Tresor|}:
</td>
<td>
<input type="button" value="{|Passwort setzen|}"
id="setpassword"/> id="setpassword"/>
<i>{|Der Inhalt des Passwort-Tresors kann in der Datenstruktur der Zugangsdaten über die Variable {PASSWORT} genutzt werden.|}</i> <i>{|Der Inhalt des Passwort-Tresors kann in der Datenstruktur der Zugangsdaten über die Variable {PASSWORT} genutzt werden.|}</i>
</td> </td>
</tr> </tr>
</table> </table>
@@ -316,13 +460,21 @@
<legend>{|Prozessstarter|}</legend> <legend>{|Prozessstarter|}</legend>
<table> <table>
<tr> <tr>
<td>{|Zahlungseing&auml;nge automatisch abholen|}:</td> <td>
<td><input type="checkbox" name="cronjobaktiv" id="cronjobaktiv" value="1" [CRONJOBAKTIV]></td> {|Zahlungseing&auml;nge automatisch abholen|}:
</td>
<td>
<input type="checkbox" name="cronjobaktiv" id="cronjobaktiv" value="1" [CRONJOBAKTIV]>
</td>
</tr> </tr>
<tr> <tr>
<td>{|Zahlungseing&auml;nge automatisch verbuchen|}:</td> <td>
<td><input type="checkbox" name="cronjobverbuchen" id="cronjobverbuchen" value="1" {|Zahlungseing&auml;nge automatisch verbuchen|}:
[CRONJOBVERBUCHEN]></td> </td>
<td>
<input type="checkbox" name="cronjobverbuchen" id="cronjobverbuchen" value="1"
[CRONJOBVERBUCHEN]>
</td>
</tr> </tr>
</table> </table>
</fieldset> </fieldset>
@@ -330,6 +482,7 @@
</div> </div>
</div> </div>
</div> </div>
-->
<div class="row"> <div class="row">
<div class="row-height"> <div class="row-height">
<div class="col-xs-12 col-md-12 col-md-height"> <div class="col-xs-12 col-md-12 col-md-height">
@@ -338,20 +491,32 @@
<legend>{|Startwert für Konto|}</legend> <legend>{|Startwert für Konto|}</legend>
<table width="100%"> <table width="100%">
<tr> <tr>
<td width="150">{|Summieren|}:</td> <td width="150">{|Summieren|}:
<td><input type="checkbox" name="saldo_summieren" id="saldo_summieren" value="1" [SALDO_SUMMIEREN]>
</td> </td>
<td> <td>
<input type="checkbox" name="saldo_summieren" id="saldo_summieren" value="1" [SALDO_SUMMIEREN]>
</td>
<td>
</tr> </tr>
<tr> <tr>
<td width="150">{|Datum Saldo|}:</td> <td width="150">{|Datum Saldo|}:
<td><input type="text" name="saldo_datum" id="saldo_datum" size="40" value="[SALDO_DATUM]"></td> </td>
<td> <td>
<input type="text" name="saldo_datum" id="saldo_datum" size="40" value="[SALDO_DATUM]">
</td>
<td>
</tr> </tr>
<tr> <tr>
<td width="150">{|Betrag Saldo|}:</td> <td width="150">{|Betrag Saldo|}:
<td><input type="text" name="saldo_betrag" id="saldo_betrag" size="40" value="[SALDO_BETRAG]"></td> </td>
<td> <td>
<input type="text" name="saldo_betrag" id="saldo_betrag" size="40" value="[SALDO_BETRAG]">
</td>
<td>
</tr> </tr>
</table> </table>
</fieldset> </fieldset>
@@ -359,8 +524,7 @@
</div> </div>
</div> </div>
</div> </div>
<input type="hidden" name="save" value="1" /> <input type="submit" name="submit" value="Speichern" style="float:right"/>
<input type="submit" value="{|Speichern|}" style="float:right"/>
</form> </form>
</div> </div>
<!-- tab view schließen --> <!-- tab view schließen -->
@@ -372,8 +536,11 @@
<input type="hidden" id="e_id" value="[ID]"/> <input type="hidden" id="e_id" value="[ID]"/>
<table width="" cellspacing="0" cellpadding="0"> <table width="" cellspacing="0" cellpadding="0">
<tr> <tr>
<td width="110"><label for="e_passwort">{|Passwort|}:</label></td> <td width="110"><label for="e_passwort">{|Passwort|}:</label>
<td><input type="password" id="e_passwort" name="e_passwort" size="40"/></td> </td>
<td>
<input type="password" id="e_passwort" name="e_passwort" size="40"/>
</td>
</tr> </tr>
</table> </table>
</div> </div>
+151
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>
@@ -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>
+46
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>
@@ -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">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">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">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> <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> </table>
+1 -27
View File
@@ -17,33 +17,6 @@
<li class="filter-item"><input type="checkbox" id="anlieferanten"><label for="anlieferanten">{|an Lieferanten|}</label></li> <li class="filter-item"><input type="checkbox" id="anlieferanten"><label for="anlieferanten">{|an Lieferanten|}</label></li>
</ul> </ul>
</div> </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> </div>
[MESSAGE] [MESSAGE]
@@ -56,6 +29,7 @@
<option value="offen">{|als offen markieren|}</option> <option value="offen">{|als offen markieren|}</option>
<option value="versendet">{|als versendet markieren|}</option> <option value="versendet">{|als versendet markieren|}</option>
<option value="storniert">{|als storniert markieren|}</option> <option value="storniert">{|als storniert markieren|}</option>
<option value="versanduebergabe">{|in Versand geben|}</option>
<option value="pdf">{|Sammel-PDF|}</option> <option value="pdf">{|Sammel-PDF|}</option>
<option value="drucken">{|drucken|}</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|}" /> </select>&nbsp;{|Drucker|}: <select name="seldrucker">[SELDRUCKER]</select>&nbsp;<input type="submit" class="btnBlue" name="ausfuehren" value="{|ausf&uuml;hren|}" />
+142
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>
@@ -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>
+64
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>
+10 -13
View File
@@ -44,7 +44,7 @@
</div> </div>
<div style="background-color:white"> <div style="background-color:white">
<h2 class="greyh2">Zahlungseingang</h2> <h2 class="greyh2">Buchungen</h2>
<div style="padding:10px"> <div style="padding:10px">
[ZAHLUNGEN] [ZAHLUNGEN]
</div> </div>
@@ -69,15 +69,12 @@
[PDFARCHIV] [PDFARCHIV]
</div> </div>
</div> </div>
<div style="background-color:white"> <!--
<h2 class="greyh2">Deckungsbeitrag</h2> <div style="background-color:white">
<div style="padding:10px"> <h2 class="greyh2">Deckungsbeitrag</h2>
<div style="padding:10px">
<div class="info">Dieses Modul ist erst ab Version Professional verfügbar</div>
<div class="info">Dieses Modul ist erst ab Version Professional verfügbar</div> </div>
</div>
</div> </div>
</div> -->
</div>
+4
View File
@@ -39,9 +39,13 @@
<label for="rechnungenstorniert">{|Storniert|}</label> <label for="rechnungenstorniert">{|Storniert|}</label>
</li> </li>
</ul> </ul>
<form method="post" action="#">
<input type="submit" class="btnBlue" name="zahlungsstatus_berechnen" value="{|Zahlungsstatus berechnen|}" />
</form>
</div> </div>
</div> </div>
[MESSAGE] [MESSAGE]
<form method="post" action="#"> <form method="post" action="#">
[TAB1] [TAB1]
+1 -1
View File
@@ -26,7 +26,7 @@
<input type="checkbox" id="report-list-filter-own"> <input type="checkbox" id="report-list-filter-own">
<span class="slider round"></span> <span class="slider round"></span>
</label> </label>
<label for="report-list-filter-own">{|Nur eigene|}</label> <label for="report-list-filter-own">{|Inkl. Vorlagen|}</label>
</li> </li>
<li class="filter-item"> <li class="filter-item">
<label for="report-list-filter-favorites" class="switch"> <label for="report-list-filter-favorites" class="switch">
@@ -3,12 +3,6 @@
<div id="tabs"> <div id="tabs">
<ul>
<li><a href="#tabs-1">&Uuml;bersicht</a></li>
<!--<li><a href="#tabs-2">neue Position anlegen</a></li>-->
<li><a href="#tabs-3">St&uuml;ckliste importieren</a></li>
</ul>
<!-- erstes tab --> <!-- erstes tab -->
<div id="tabs-1"> <div id="tabs-1">
[MESSAGE] [MESSAGE]
@@ -5,7 +5,7 @@
<ul> <ul>
<li><a href="#tabs-1">&Uuml;bersicht</a></li> <li><a href="#tabs-1">&Uuml;bersicht</a></li>
<li><a href="#tabs-2">neue Position anlegen</a></li> <li><a href="#tabs-2">neue Position anlegen</a></li>
<li><a href="#tabs-3">St&uuml;ckliste importieren</a></li> <!-- DEPRECATED moved to importvorlage <li><a href="#tabs-3">St&uuml;ckliste importieren</a></li> -->
</ul> </ul>
<!-- erstes tab --> <!-- erstes tab -->
+2 -2
View File
@@ -19,7 +19,7 @@
<fieldset> <fieldset>
<table width="100%" border="0" class="mkTableFormular"> <table width="100%" border="0" class="mkTableFormular">
<legend>{|[STATUSICON]<b>Ticket <font color="blue">#[SCHLUESSEL]</font></b>|}</legend> <legend>{|[STATUSICON]<b>Ticket <font color="blue">#[SCHLUESSEL]</font></b>|}</legend>
<tr><td>{|Betreff|}:</td><td><input type="text" name="betreff" id="betreff" value="[BETREFF]" size="20"></td></tr> <tr><td>{|Betreff|}:</td><td><input type="text" name="betreff" id="betreff" value="[BETREFF]" style="width: 100%;"></td></tr>
<tr><td>{|Von|}:</td><td>[KUNDE]&nbsp;[MAILADRESSE]</td></tr> <tr><td>{|Von|}:</td><td>[KUNDE]&nbsp;[MAILADRESSE]</td></tr>
<tr><td>{|Projekt|}:</td><td><input type="text" name="projekt" id="projekt" value="[PROJEKT]" size="20"></td></tr> <tr><td>{|Projekt|}:</td><td><input type="text" name="projekt" id="projekt" value="[PROJEKT]" size="20"></td></tr>
<tr><td>{|Adresse|}:</td><td><input type="text" name="adresse" id="adresse" value="[ADRESSE]" size="20"><a href="index.php?module=adresse&action=edit&id=[ADRESSE_ID]"><img src="./themes/new/images/forward.svg" border="0" style="top:6px; position:relative"></a></td></tr> <tr><td>{|Adresse|}:</td><td><input type="text" name="adresse" id="adresse" value="[ADRESSE]" size="20"><a href="index.php?module=adresse&action=edit&id=[ADRESSE_ID]"><img src="./themes/new/images/forward.svg" border="0" style="top:6px; position:relative"></a></td></tr>
@@ -49,6 +49,7 @@
<legend>{|Aktionen|}</legend> <legend>{|Aktionen|}</legend>
<td><button name="submit" value="speichern" class="ui-button-icon" style="width:100%;">Speichern</button></td></tr> <td><button name="submit" value="speichern" class="ui-button-icon" style="width:100%;">Speichern</button></td></tr>
<td><button name="submit" value="neue_email" class="ui-button-icon" style="width:100%;">Neue E-Mail</button></td></tr> <td><button name="submit" value="neue_email" class="ui-button-icon" style="width:100%;">Neue E-Mail</button></td></tr>
<td><button name="submit" formaction="index.php?module=ticketregeln&action=create" value="regel" class="ui-button-icon" style="width:100%;">Ticketregel erstellen</button><input hidden type="text" name="ticketid" value="[ID]"></td></tr>
</table> </table>
</fieldset> </fieldset>
</div> </div>
@@ -61,4 +62,3 @@
</div> </div>
</div> </div>
+6 -31
View File
@@ -17,18 +17,18 @@
<div class="col-xs-12 col-md-12 col-md-height"> <div class="col-xs-12 col-md-12 col-md-height">
<div class="inside inside-full-height"> <div class="inside inside-full-height">
<fieldset> <fieldset>
<legend>{|Ticketregeln|}</legend><i>Ticketregeln f&uuml; die Verarbeitung bei Ticketeingang. Platzhalter werden mit % angegeben.</i> <legend>{|Ticketregeln|}</legend><i>Ticketregeln f&uuml;r die Verarbeitung bei Ticketeingang. Platzhalter werden mit % angegeben.</i>
<table width="100%" border="0" class="mkTableFormular"> <table width="100%" border="0" class="mkTableFormular">
<tr><td>{|E-Mail Empf&auml;nger|}:</td><td><input type="text" name="empfaenger_email" value="[EMPFAENGER_EMAIL]" size="40"></td></tr> <tr><td>{|E-Mail Empf&auml;nger|}:</td><td><input type="text" name="empfaenger_email" value="[EMPFAENGER_EMAIL]" size="40"></td></tr>
<tr><td>{|E-Mail Verfasser|}:</td><td><input type="text" name="sender_email" value="[SENDER_EMAIL]" size="40"></td></tr> <tr><td>{|E-Mail Verfasser|}:</td><td><input type="text" name="sender_email" value="[SENDER_EMAIL]" size="40"></td></tr>
<tr><td>{|Verfasser Name|}:</td><td><input type="text" name="name" value="[NAME]" size="40"></td></tr> <tr><td>{|Verfasser Name|}:</td><td><input type="text" name="name" value="[NAME]" size="40"></td></tr>
<tr><td>{|Betreff|}:</td><td><input type="text" name="betreff" value="[BETREFF]" size="40"></td></tr> <tr><td>{|Betreff|}:</td><td><input type="text" name="betreff" value="[BETREFF]" size="40"></td></tr>
<tr><td>{|Papierkorb|}:</td><td><input type="text" name="spam" value="[SPAM]" size="40"></td></tr> <tr><td>{|Papierkorb|}:</td><td><input type="checkbox" name="spam" value="1" [SPAM] size="40"></td></tr>
<tr><td>{|Pers&ouml;nlich|}:</td><td><input type="text" name="persoenlich" value="[PERSOENLICH]" size="40"></td></tr> <tr><td>{|Pers&ouml;nlich|}:</td><td><input type="checkbox" name="persoenlich" value="1" [PERSOENLICH] size="40"></td></tr>
<tr><td>{|Prio|}:</td><td><input type="text" name="prio" value="[PRIO]" size="40"></td></tr> <tr><td>{|Prio|}:</td><td><input type="checkbox" name="prio" value="1" [PRIO] size="40"></td></tr>
<tr><td>{|DSGVO|}:</td><td><input type="text" name="dsgvo" value="[DSGVO]" size="40"></td></tr> <tr><td>{|DSGVO|}:</td><td><input type="checkbox" name="dsgvo" value="1" [DSGVO] size="40"></td></tr>
<tr><td>{|Verantwortliche Warteschlange|}:</td><td><input type="text" name="warteschlange" id="warteschlange" value="[WARTESCHLANGE]" size="40"></td></tr> <tr><td>{|Verantwortliche Warteschlange|}:</td><td><input type="text" name="warteschlange" id="warteschlange" value="[WARTESCHLANGE]" size="40"></td></tr>
<tr><td>{|Aktiv|}:</td><td><input type="text" name="aktiv" value="[AKTIV]" size="40"></td></tr> <tr><td>{|Aktiv|}:</td><td><input type="checkbox" name="aktiv" value="1" [AKTIV] size="40"></td></tr>
</table> </table>
</fieldset> </fieldset>
@@ -36,31 +36,6 @@
</div> </div>
</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>{|Empfaenger_email|}:</td><td><input type="text" name="empfaenger_email" value="[EMPFAENGER_EMAIL]" size="40"></td></tr>
<tr><td>{|Sender_email|}:</td><td><input type="text" name="sender_email" value="[SENDER_EMAIL]" size="40"></td></tr>
<tr><td>{|Name|}:</td><td><input type="text" name="name" value="[NAME]" size="40"></td></tr>
<tr><td>{|Betreff|}:</td><td><input type="text" name="betreff" value="[BETREFF]" size="40"></td></tr>
<tr><td>{|Spam|}:</td><td><input type="text" name="spam" value="[SPAM]" size="40"></td></tr>
<tr><td>{|Persoenlich|}:</td><td><input type="text" name="persoenlich" value="[PERSOENLICH]" size="40"></td></tr>
<tr><td>{|Prio|}:</td><td><input type="text" name="prio" value="[PRIO]" size="40"></td></tr>
<tr><td>{|Dsgvo|}:</td><td><input type="text" name="dsgvo" value="[DSGVO]" size="40"></td></tr>
<tr><td>{|Warteschlange|}:</td><td><input type="text" name="warteschlange" value="[WARTESCHLANGE]" size="40"></td></tr>
<tr><td>{|Aktiv|}:</td><td><input type="text" name="aktiv" value="[AKTIV]" size="40"></td></tr>
</table>
</fieldset>
</div>
</div>
</div>
</div> -->
<input type="submit" name="submit" value="Speichern" style="float:right"/> <input type="submit" name="submit" value="Speichern" style="float:right"/>
</form> </form>
</div> </div>
+3
View File
@@ -23,6 +23,9 @@ SPDX-License-Identifier: LicenseRef-EGPL-3.1
[MODULEINSTALLIERT] [MODULEINSTALLIERT]
</fieldset> </fieldset>
[TAB1NEXT] [TAB1NEXT]
<form id="neu" action="index.php?module=versandarten&action=neusonstige" method="post">
<button name="submit" value="neusonstige" class="ui-button-icon">Versandart ohne Modul anlegen</button>
</form>
</div> </div>
<!-- tab view schließen --> <!-- tab view schließen -->
+80
View File
@@ -0,0 +1,80 @@
<div id="tabs">
<ul>
<li><a href="#tabs-1"></a></li>
</ul>
<div id="tabs-1">
[MESSAGE]
<form action="index.php?module=versandpakete&action=add&id=[ID]&lieferschein=[LIEFERSCHEIN_ID]" method="post">
[FORMHANDLEREVENT]
<div class="row">
<div class="row-height">
<div class="col-xs-14 col-md-10 col-md-height">
<div class="inside inside-full-height">
<fieldset>
<legend>{|Hinzuf&uuml;gen von Artikeln aus <a href="index.php?module=lieferschein&action=edit&id=[LIEFERSCHEIN_ID]"><b>Lieferschein [LIEFERSCHEIN]</b></a> zu Versandpaket <b>Nr. [ID]</b>|}</legend>
<table width="100%" border="0" class="mkTableFormular">
<tr>
<td>
{|Artikel|}:
</td>
<td>
<input type="text" name="artikel" id="artikel" value="" size="40" autofocus>
</td>
</tr>
<tr>
<td>
{|Menge|}:
</td>
<td>
<input type="number" name="menge" id="menge" value="" min="1" size="40">
</td>
</tr>
</table>
</fieldset>
</div>
</div>
<div class="col-xs-14 col-md-2 col-md-height">
<div class="inside inside-full-height">
<fieldset>
<legend>{|Aktionen|}</legend>
<table width="100%" border="0" class="mkTableFormular">
<tr><td><button name="submit" value="hinzufuegen" class="ui-button-icon" style="width:100%;">Hinzuf&uuml;gen</button></td></tr>
<tr><td><button name="submit" value="lieferschein_komplett_hinzufuegen" class="ui-button-icon" style="width:100%;">Alle hinzuf&uuml;gen</button></td></tr>
<tr><td><button form="back" name="submit" value="fertig" class="ui-button-icon" style="width:100%;">Fertig</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">
<fieldset>
<legend>{|Lieferscheininhalt|}</legend>
[LIEFERSCHEININHALT]
</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>{|Paketinhalt|}</legend>
[PAKETINHALT]
</fieldset>
</div>
</div>
</div>
</div>
<input type="text" name="lieferschein" id="lieferschein" value="[LIEFERSCHEIN]" size="40" hidden>
</form>
<form action="index.php?module=versandpakete&action=edit&id=[VERSANDPAKET_ID]" id="back" method="post">
</form>
</div>
</div>
+147
View File
@@ -0,0 +1,147 @@
<div id="tabs">
<ul>
<li><a href="#tabs-1"></a></li>
</ul>
<div id="tabs-1">
[MESSAGE]
[FORMHANDLEREVENT]
<form id="save" action="" method="post">
<div class="row">
<div class="row-height">
<div class="col-xs-14 col-md-6 col-md-height">
<div class="inside inside-full-height">
<fieldset>
<legend>
{|<b>Versandpaket Nr. [ID]</b> vom [DATUM]<span [NO_ADDRESS_HIDDEN]> f&uuml;r Adresse '[ADRESSE]'|}</span>
</legend>
[ICONS]
<table width="100%" border="0" class="mkTableFormular">
<tr>
<td>
{|Status|}:
</td>
<td>
<input type="text" name="" id="" value="[STATUS]" size="40" disabled>
</td>
</tr>
<tr>
<td>
{|Versender|}:
</td>
<td>
<input type="text" name="" id="" value="[VERSENDER]" size="40" disabled>
</td>
</tr>
<tr>
<td>
{|Versandart|}:
</td>
<td>
<input type="text" name="" id="" value="[VERSANDART]" size="40" disabled>
</td>
</tr>
<tr>
<td>
{|Tracking|}:
</td>
<td>
<input type="text" name="tracking" id="tracking" value="[TRACKING]" size="40" [TRACKING_DISABLED]>
<a href="[PAKETMARKE_LINK]" [PAKETMARKE_HIDDEN]>
<img src="themes/new/images/portogo.png" border="0" title="Zur Paketmarke" style="top:6px; position:relative">
</a>
<a href="[TRACKING_LINK]" [TRACKING_LINK_HIDDEN]>
<img src="themes/new/images/forward.svg" border="0" title="Zum Tracking" style="top:6px; position:relative">
</a>
</td>
</tr>
<tr [TRACKING_LINK_EDIT_HIDDEN]>
<td>
{|Tracking link|}:
</td>
<td>
<input type="text" name="tracking_link" id="tracking_link" value="[TRACKING_LINK]" size="40" [TRACKING_DISABLED]>
</td>
</tr>
<tr>
<td>
{|Gewicht Kg|}:
</td>
<td>
<input type="number" name="" id="" value="[GEWICHT]" size="40" disabled>
</td>
</tr>
<tr>
<td>
{|Bemerkung|}:
</td>
<td>
<textarea name="bemerkung" id="bemerkung" rows="3" style="width:100%;">[BEMERKUNG]</textarea>
</td>
</tr>
</table>
</fieldset>
</div>
</div>
<div class="col-xs-14 col-md-6 col-md-height">
<div class="inside inside-full-height">
<fieldset >
<legend>{|Lieferschein|}</legend>
<table width="100%" border="0" class="mkTableFormular">
<tr [LIEFERSCHEIN_OHNE_POS_HIDDEN]>
<td>
{|Zugeordnet|}:
</td>
<td>
<input form="add" type="text" name="" id="" value="[LIEFERSCHEIN_OHNE_POS]" size="40" disabled>
<a href="index.php?module=lieferschein&action=edit&id=[LIEFERSCHEIN_OHNE_POS_ID]"><img src="themes/new/images/forward.svg" title="Zum Lieferschein" border="0" style="top:6px; position:relative"></a>
</td>
</tr>
<tr [LIEFERSCHEIN_ADD_POS_HIDDEN]>
<td>
{|Lieferschein für Artikel hinzuf&uuml;gen|}:
</td>
<td>
<input form="add" type="text" name="lieferschein" id="lieferschein" value="[LIEFERSCHEIN]" autofocus size="40">
</td>
</tr>
</table>
</fieldset>
</div>
</div>
<div class="col-xs-14 col-md-2 col-md-height">
<div class="inside inside-full-height">
<fieldset>
<legend>{|Aktionen|}</legend>
<table width="100%" border="0" class="mkTableFormular">
<tr><td><button form="save" name="submit" value="speichern" class="ui-button-icon" style="width:100%;">Speichern</button></td></tr>
<tr [LIEFERSCHEIN_ADD_POS_HIDDEN]><td><button form="add" name="submit" value="lieferschein_hinzufuegen" class="ui-button-icon" style="width:100%;">Artikel hinzuf&uuml;gen</button></td></tr>
<tr [LIEFERSCHEIN_ADD_POS_HIDDEN]><td><button form="add" name="submit" value="lieferschein_komplett_hinzufuegen" class="ui-button-icon" style="width:100%;">Alle Artikel hinzuf&uuml;gen</button></td></tr>
<tr [PAKETMARKE_ADD_HIDDEN]><td><button form="paketmarke" name="submit" value="paketmarke" class="ui-button-icon" style="width:100%;">Paketmarke drucken</button></td></tr>
<tr [ABSENDEN_HIDDEN]><td><button name="submit" value="absenden" class="ui-button-icon" style="width:100%;">Absenden</button></td></tr>
<tr [ABSCHLIESSEN_HIDDEN]><td><button name="submit" value="abschliessen" class="ui-button-icon" style="width:100%;">Abschlie&szlig;en</button></td></tr>
</table>
</fieldset>
</div>
</div>
</div>
</div>
</form>
<form id="add" action="index.php?module=versandpakete&action=add&id=[ID]" method="post">
</form>
<form id="paketmarke" action="index.php?module=versandpakete&action=paketmarke&id=[ID]" method="post">
</form>
<div class="row" [LIEFERSCHEIN_POS_HIDDEN]>
<div class="row-height">
<div class="col-xs-12 col-md-12 col-md-height">
<div class="inside inside-full-height">
<fieldset>
<legend>{|Paketinhalt|}</legend>
[PAKETINHALT]
</fieldset>
</div>
</div>
</div>
</div>
</div>
</div>
@@ -0,0 +1,50 @@
<div id="tabs">
<ul>
<li><a href="#tabs-1">[TABTEXT1]</a></li>
</ul>
<div id="tabs-1">
<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>{|<b>Lieferung zu <font color="blue"><a href="index.php?module=lieferschein&action=edit&id=[BELEGID]">Lieferschein [BELEGNR]</a></font></b>|}</legend>
</fieldset>
</div>
</div>
</div>
</div>
[MESSAGE]
<div class="row">
<div class="row-height">
<div class="col-xs-12 col-md-12 col-md-height">
<div class="inside inside-full-height">
<form action="index.php?module=versandpakete&action=stapelverarbeitung&from=lieferung&id=[FROMID]" id="frmauto" name="frmauto" method="post">
[TAB1]
<fieldset>
<table>
<legend>Stapelverarbeitung</legend>
<tr>
<tr><td>{|Status|}:</td><td><select name="status">[STATUS_OPTIONS]</select></td></tr>
<td><input type="checkbox" value="1" id="autoalle" />&nbsp;alle markieren&nbsp;</td><td><input type="submit" class="btnBlue" name="status_setzen" value="{|Status setzen|}" /></td>
</tr>
</table>
</fieldset>
</form>
</div>
</div>
</div>
</div>
[TAB1NEXT]
</div>
</div>
<script>
$('#autoalle').on('change',function(){
var wert = $(this).prop('checked');
$('#versandpakete_list').find('input[type="checkbox"]').prop('checked',wert);
$('#versandpakete_list').find('input[type="checkbox"]').first().trigger('change');
});
</script>
@@ -0,0 +1,32 @@
<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">
[STATUSFILTER]
<li class="filter-item">
<label for="unterwegs" class="switch">
<input type="checkbox" id="unterwegs">
<span class="slider round"></span>
</label>
<label for="unterwegs">{|Unterwegs|}</label>
</li>
<li class="filter-item">
<label for="geschlossene" class="switch">
<input type="checkbox" id="geschlossene">
<span class="slider round"></span>
</label>
<label for="geschlossene">{|Zzgl. abgeschlossen|}</label>
</li>
</ul>
</div>
</div>
[TAB1]
[TAB1NEXT]
</div>
</div>
+53
View File
@@ -0,0 +1,53 @@
<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">
[STATUSFILTER]
<li class="filter-item">
<label for="geschlossene" class="switch">
<input type="checkbox" id="geschlossene">
<span class="slider round"></span>
</label>
<label for="geschlossene">{|Zzgl. abgeschlossen|}</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">{|Zzgl. Papierkorb|}</label>
</li>
</ul>
</div>
</div>
<form action="index.php?module=versandpakete&action=stapelverarbeitung" id="frmauto" name="frmauto" method="post">
[TAB1]
<fieldset>
<table>
<legend>Stapelverarbeitung</legend>
<tr>
<tr><td>{|Status|}:</td><td><select name="status">[STATUS_OPTIONS]</select></td></tr>
<td><input type="checkbox" value="1" id="autoalle" />&nbsp;alle markieren&nbsp;</td><td><input type="submit" class="btnBlue" name="status_setzen" value="{|Status setzen|}" /></td>
</tr>
</table>
</fieldset>
</form>
[TAB1NEXT]
</div>
</div>
<script>
$('#autoalle').on('change',function(){
var wert = $(this).prop('checked');
$('#versandpakete_list').find('input[type="checkbox"]').prop('checked',wert);
$('#versandpakete_list').find('input[type="checkbox"]').first().trigger('change');
});
</script>
+9 -4
View File
@@ -1,5 +1,10 @@
<div id="tabs-1"> <div id="tabs">
[MESSAGE] <ul>
[TAB1] <li><a href="#tabs-1">[TABTEXT1]</a></li>
[TAB1NEXT] </ul>
<div id="tabs-1">
[MESSAGE]
[TAB1]
[TAB1NEXT]
</div>
</div> </div>
@@ -1,7 +1,11 @@
<!--
<table id="table[MD5]"> <table id="table[MD5]">
<tr><td>{|Lieferschein|}:</td><td><input type="checkbox" onchange="lsclick[MD5]();" id="beiback_lieferschein[MD5]" disabled value="1" [BEIPACK_LIEFERSCHEIN] /></td><td><span id="lsnr[MD5]">[LSNR]</span></td><td><input type="button" value="{|Belege &auml;ndern|}" style="cursor:hand;" onclick="editclick[MD5]();" /></td></tr> <tr><td>{|Lieferschein|}:</td><td><input type="checkbox" onchange="lsclick[MD5]();" id="beiback_lieferschein[MD5]" disabled value="1" [BEIPACK_LIEFERSCHEIN] /></td><td><span id="lsnr[MD5]">[LSNR]</span></td>
<td><input type="button" value="{|Belege &auml;ndern|}" style="cursor:hand;" onclick="editclick[MD5]();" /></td>
</tr>
<tr><td>{|Rechnung|}:</td><td><input type="checkbox" onchange="reclick[MD5]();" id="beiback_rechnung[MD5]" disabled value="1" [BEIPACK_RECHNUNG] /></td><td><span id="renr[MD5]">[RENR]</span></td><td></td></tr> <tr><td>{|Rechnung|}:</td><td><input type="checkbox" onchange="reclick[MD5]();" id="beiback_rechnung[MD5]" disabled value="1" [BEIPACK_RECHNUNG] /></td><td><span id="renr[MD5]">[RENR]</span></td><td></td></tr>
</table> </table>
-->
<table width="100%"> <table width="100%">
<tr><td width="100%">[ARTIKEL]</td></tr> <tr><td width="100%">[ARTIKEL]</td></tr>
@@ -12,10 +12,10 @@
<div class="row-height"> <div class="row-height">
<div class="col-xs-12 col-md-8 col-md-height"> <div class="col-xs-12 col-md-8 col-md-height">
<div class="inside inside-full-height"> <div class="inside inside-full-height">
<div class="filter-box filter-usersave"> <div class="filter-box filter-usersave">
<div class="filter-block filter-inline"> <div class="filter-block filter-inline">
<fieldset> <fieldset>
<legend>{|Neuen Wareneingang erzeugen|}</legend>
<div class="filter-title">{|Filter|}</div> <div class="filter-title">{|Filter|}</div>
<ul class="filter-list"> <ul class="filter-list">
<li class="filter-item"> <li class="filter-item">
+39 -16
View File
@@ -11,9 +11,7 @@
<input type="hidden" id="paketannahme_id" value="[ID]" /> <input type="hidden" id="paketannahme_id" value="[ID]" />
[BEFORETAB1] [BEFORETAB1]
<div id="tabs-1"> <div id="tabs-1">
[TAB1START] [TAB1START]
[MESSAGE1] [MESSAGE1]
<form action="" method="post"> <form action="" method="post">
<div class="row"> <div class="row">
@@ -26,25 +24,50 @@
<tr><td>{|Lieferschein-Nr.|}:</td><td><input type=text size="40" name="lsnr" value=[LSNR]></td></tr> <tr><td>{|Lieferschein-Nr.|}:</td><td><input type=text size="40" name="lsnr" value=[LSNR]></td></tr>
<tr><td>{|Rechnung-Nr.|}:</td><td><input type=text size="40" name="renr" value=[RENR]></td></tr> <tr><td>{|Rechnung-Nr.|}:</td><td><input type=text size="40" name="renr" value=[RENR]></td></tr>
<tr><td>{|Bemerkung|}:</td><td><textarea rows="5" cols="40" name="bemerkung">[BEMERKUNG]</textarea></td></tr> <tr><td>{|Bemerkung|}:</td><td><textarea rows="5" cols="40" name="bemerkung">[BEMERKUNG]</textarea></td></tr>
<tr><td><input type="submit" name="speichern" class="btnGreenNew" value="Speichern"></td> [ISLIEFERANTSTART]
<tr><td>{|Ziellager|}:</td><td><input type=text size="40" name="ziellager" id="ziellager" value=[LAGER]><br><i>Wenn nicht angegeben, wird das Standardlager des Artikels bebucht.</i></td></tr>
[ISLIEFERANTENDE]
</table> </table>
</fieldset> </fieldset>
</div> </div>
</div> </div>
<div class="col-xs-12 col-md-2 col-md-height"> <div class="col-xs-12 col-md-2 col-md-height">
<div class="inside inside-full-height"> <div class="inside inside-full-height">
<fieldset> <fieldset>
<legend>{|Aktionen|}</legend> [BUTTONS]
[BUTTONS] [BEFOREFRM]
[BEFOREFRM] [AFTERFRM]
[AFTERFRM] [DISTRIINHALTBUTTONS]
[DISTRIINHALTBUTTONS] [BEFOREFRM]
<input type="submit" name="abschliessen" id="btnabschliessen" class="btnGreenNew" value="Paketinhalt ist erfasst"> [AFTERFRM]
[BEFOREMANUELLERFASSEN] <button name="submit" class="ui-button-icon" style="width:100%;" value="speichern" hidden="true"></button>
<input type="submit" name="manuellerfassen" class="btnBlueNew" value="Artikel manuell erfassen"> <table width="100%" border="0" class="mkTableFormular">
[AFTERMANUELLERFASSEN] <legend>{|Aktionen|}</legend>
[BEFOREFRM] [BEFOREMANUELLERFASSEN]
[AFTERFRM] <tr><td>
<button name="submit" class="ui-button-icon" style="width:100%;" value="manuellerfassen">{|Artikel manuell erfassen|}</button>
</td></tr>
[AFTERMANUELLERFASSEN]
[ISLIEFERANTSTART]
<tr><td>
<button name="submit" class="ui-button-icon" style="width:100%;" value="fuellen">{|Aus Bestellungen f&uuml;llen|}</button>
</td></tr>
<tr><td>
<button name="submit" class="ui-button-icon" style="width:100%;" value="leeren">{|Leeren|}</button>
</td></tr>
[ISLIEFERANTENDE]
<tr><td>
<button name="submit" class="ui-button-icon" style="width:100%;" value="speichern">{|Speichern|}</button>
</td></tr>
[ISLIEFERANTSTART]
<tr><td>
<button name="submit" class="ui-button-icon" style="width:100%;" value="buchen">{|Buchen|}</button>
</td></tr>
[ISLIEFERANTENDE]
<tr><td>
<button name="submit" class="ui-button-icon" style="width:100%;" value="abschliessen">{|Abschlie&szlig;en|}</button>
</td></tr>
</table>
</fieldset> </fieldset>
</div> </div>
</div> </div>
@@ -54,7 +77,7 @@
<div class="row-height"> <div class="row-height">
<div class="col-xs-12 col-md-10 col-md-height"> <div class="col-xs-12 col-md-10 col-md-height">
<div class="inside-white inside-full-height"> <div class="inside-white inside-full-height">
[TAB1] [TAB1]
</div> </div>
</div> </div>
</div> </div>
+16 -1
View File
@@ -112,6 +112,10 @@ $width = array('10%'); // Fill out manually later
// Write to database // Write to database
// Add checks here // Add checks here
$input['projekt'] = $this->app->erp->ReplaceProjekt(true,$input['projekt'],true); // Parameters: Target db?, value, from form?
$input['ticketprojekt'] = $this->app->erp->ReplaceProjekt(true,$input['ticketprojekt'],true); // Parameters: Target db?, value, from form?
$input['adresse'] = $this->app->erp->ReplaceAdresse(true,$input['adresse'],true); // Parameters: Target db?, value, from form?
$input['ticketqueue'] = explode(" ",$input['ticketqueue'])[0]; // Just the label
$columns = "id, "; $columns = "id, ";
$values = "$id, "; $values = "$id, ";
@@ -168,6 +172,17 @@ $width = array('10%'); // Fill out manually later
$this->app->Tpl->Add('ANGEZEIGTERNAME', $angezeigtername); $this->app->Tpl->Add('ANGEZEIGTERNAME', $angezeigtername);
*/ */
$this->app->YUI->CkEditor("signatur","internal", null, 'JQUERY');
$this->app->YUI->CkEditor("autoresponderbetreff","internal", null, 'JQUERY');
$this->app->YUI->CkEditor("autorespondertext","internal", null, 'JQUERY');
$this->app->Tpl->Set('PROJEKT',$this->app->erp->ReplaceProjekt(false,$result[0]['projekt'],false)); // Parameters: Target db?, value, from form?
$this->app->Tpl->Set('TICKETPROJEKT',$this->app->erp->ReplaceProjekt(false,$result[0]['ticketprojekt'],false)); // Parameters: Target db?, value, from form?
$this->app->Tpl->Set('ADRESSE', $this->app->erp->ReplaceAdresse(false,$result[0]['adresse'],false)); // Convert ID to form display
$this->app->YUI->AutoComplete("projekt","projektname",1);
$this->app->YUI->AutoComplete("ticketprojekt","projektname",1);
$this->app->YUI->AutoComplete("adresse","adresse");
$this->app->YUI->AutoComplete("ticketqueue","warteschlangename");
$this->app->YUI->AutoComplete("ticketprojekt","projektname",1);
$this->app->Tpl->Parse('PAGE', "emailbackup_edit.tpl"); $this->app->Tpl->Parse('PAGE', "emailbackup_edit.tpl");
} }
@@ -285,7 +300,7 @@ $width = array('10%'); // Fill out manually later
$result[0]['email'], $result[0]['email'],
$result[0]['angezeigtername'], $result[0]['angezeigtername'],
'OpenXE ERP: Testmail', 'OpenXE ERP: Testmail',
'Dies ist eine Testmail für Account "'.$result[0]['email'].'".', utf8_encode('Dies ist eine Testmail für Account "'.$result[0]['email'].'".'),
'',0,false,'','', '',0,false,'','',
true true
) )
+94 -35
View File
@@ -77,6 +77,14 @@ class Exportbuchhaltung
$rgchecked = $this->app->Secure->GetPOST("rechnung"); $rgchecked = $this->app->Secure->GetPOST("rechnung");
$gschecked = $this->app->Secure->GetPOST("gutschrift"); $gschecked = $this->app->Secure->GetPOST("gutschrift");
$vbchecked = $this->app->Secure->GetPOST("verbindlichkeit"); $vbchecked = $this->app->Secure->GetPOST("verbindlichkeit");
$diffignore = $this->app->Secure->GetPOST("diffignore");
$sachkonto = $this->app->Secure->GetPOST('sachkonto');
$account_id = null;
if (!empty($sachkonto)) {
$sachkonto_kennung = explode(' ',$sachkonto)[0];
$account_id = $this->app->DB->SelectArr("SELECT id from kontorahmen WHERE sachkonto = '".$sachkonto_kennung."'")[0]['id'];
}
$msg = ""; $msg = "";
@@ -151,7 +159,7 @@ class Exportbuchhaltung
if ($dataok) { if ($dataok) {
$filename = "EXTF_".date('Ymd') . "_Buchungsstapel_DATEV_export.csv"; $filename = "EXTF_".date('Ymd') . "_Buchungsstapel_DATEV_export.csv";
try { try {
$csv = $this->DATEV_Buchuchungsstapel($rgchecked, $gschecked, $vbchecked, $buchhaltung_berater, $buchhaltung_mandant, $buchhaltung_wj_beginn, $buchhaltung_sachkontenlaenge, $von, $bis, $projekt, $filename); $csv = $this->DATEV_Buchuchungsstapel($rgchecked, $gschecked, $vbchecked, $buchhaltung_berater, $buchhaltung_mandant, $buchhaltung_wj_beginn, $buchhaltung_sachkontenlaenge, $von, $bis, $projekt, $filename, $diffignore, $sachkonto_kennung);
header("Content-Disposition: attachment; filename=" . $filename); header("Content-Disposition: attachment; filename=" . $filename);
header("Pragma: no-cache"); header("Pragma: no-cache");
header("Expires: 0"); header("Expires: 0");
@@ -183,25 +191,28 @@ class Exportbuchhaltung
$this->app->YUI->AutoComplete("projekt", "projektname", 1); $this->app->YUI->AutoComplete("projekt", "projektname", 1);
$this->app->YUI->DatePicker("von"); $this->app->YUI->DatePicker("von");
$this->app->YUI->DatePicker("bis"); $this->app->YUI->DatePicker("bis");
$this->app->YUI->AutoComplete('sachkonto', 'sachkonto');
$this->app->Tpl->SET('MESSAGE', $msg); $this->app->Tpl->SET('MESSAGE', $msg);
$this->app->Tpl->SET('RGCHECKED',$rgchecked?'checked':''); $this->app->Tpl->SET('RGCHECKED',$rgchecked?'checked':'');
$this->app->Tpl->SET('GSCHECKED',$gschecked?'checked':''); $this->app->Tpl->SET('GSCHECKED',$gschecked?'checked':'');
$this->app->Tpl->SET('VBCHECKED',$vbchecked?'checked':''); $this->app->Tpl->SET('VBCHECKED',$vbchecked?'checked':'');
$this->app->Tpl->SET('DIFFIGNORE',$diffignore?'checked':'');
$this->app->Tpl->SET('VON', $von_form); $this->app->Tpl->SET('VON', $von_form);
$this->app->Tpl->SET('BIS', $bis_form); $this->app->Tpl->SET('BIS', $bis_form);
$this->app->Tpl->SET('PROJEKT', $projektkuerzel); $this->app->Tpl->SET('PROJEKT', $projektkuerzel);
$this->app->Tpl->SET('SACHKONTO', $sachkonto);
$this->app->Tpl->Parse('PAGE', "exportbuchhaltung_export.tpl"); $this->app->Tpl->Parse('PAGE', "exportbuchhaltung_export.tpl");
} }
/* /*
* Create DATEV Buchhungsstapel * Create DATEV Buchhungsstapel
* @throws ConsistencyException with string (list of items) if consistency check fails * @throws ConsistencyException with string (list of items) if consistency check fails and no sachkonto for differences is given
*/ */
function DATEV_Buchuchungsstapel(bool $rechnung, bool $gutschrift, bool $verbindlichkeit, string $berater, string $mandant, datetime $wj_beginn, int $sachkontenlaenge, datetime $von, datetime $bis, int $projekt = 0, string $filename = 'EXTF_Buchungsstapel_DATEV_export.csv') : string { function DATEV_Buchuchungsstapel(bool $rechnung, bool $gutschrift, bool $verbindlichkeit, string $berater, string $mandant, datetime $wj_beginn, int $sachkontenlaenge, datetime $von, datetime $bis, int $projekt = 0, string $filename = 'EXTF_Buchungsstapel_DATEV_export.csv', $diffignore = false, $sachkonto_differences) : string {
$datev_header_definition = array ( $datev_header_definition = array (
'1' => 'Kennzeichen', '1' => 'Kennzeichen',
@@ -499,7 +510,8 @@ class Exportbuchhaltung
b.".$typ['field_date']." as datum, b.".$typ['field_date']." as datum,
p.id as pos_id, p.id as pos_id,
".$typ['field_betrag_gesamt']." as betrag_gesamt, ".$typ['field_betrag_gesamt']." as betrag_gesamt,
".$typ['field_betrag']." as betrag, b.waehrung,
ROUND(".$typ['field_betrag'].",2) as betrag,
".$typ['field_gegenkonto']." as gegenkonto, ".$typ['field_gegenkonto']." as gegenkonto,
p.waehrung as pos_waehrung p.waehrung as pos_waehrung
FROM FROM
@@ -513,33 +525,72 @@ class Exportbuchhaltung
WHERE WHERE
b.".$typ['field_date']." BETWEEN '".date_format($von,"Y-m-d")."' AND '".date_format($bis,"Y-m-d")."' AND (b.projekt=$projekt OR $projekt=0)".$typ['condition_where']; b.".$typ['field_date']." BETWEEN '".date_format($von,"Y-m-d")."' AND '".date_format($bis,"Y-m-d")."' AND (b.projekt=$projekt OR $projekt=0)".$typ['condition_where'];
// Check consistency of positions // Check consistency of positions
if (!$diffignore) {
$sql_check = "SELECT * $sql_check = "SELECT *
FROM
(
SELECT
belegnr,
betrag_gesamt,
ROUND(SUM(betrag),2) AS betrag_summe
FROM FROM
(".$sql.") posten (
GROUP BY SELECT
belegnr belegnr,
) summen datum,
WHERE betrag_gesamt <> betrag_summe OR betrag_summe IS NULL"; betrag_gesamt,
ROUND(SUM(betrag),2) AS betrag_summe,
waehrung,
kundennummer,
ustid,
auftrag
FROM
(".$sql.") posten
GROUP BY
belegnr
) summen
WHERE betrag_gesamt <> betrag_summe OR betrag_summe IS NULL";
$result = $this->app->DB->SelectArr($sql_check); $result = $this->app->DB->SelectArr($sql_check);
if (!empty($result)) { if (!empty($result)) {
$e = new ConsistencyException(ucfirst($typ['typ']),$result);
throw $e; if (!$sachkonto_differences) {
} $e = new ConsistencyException(ucfirst($typ['typ']),$result);
throw $e;
} else {
// Create differences entries
foreach ($result as $row) {
$posid = $row['pos_id'];
$tmpsteuersatz = 0;
$tmpsteuertext = '';
$erloes = '';
$result = array();
$this->app->erp->GetSteuerPosition($typ['typ'], $posid, $tmpsteuersatz, $tmpsteuertext, $erloes);
$data = array();
$difference = $row['betrag_gesamt']-$row['betrag_summe'];
$data['Umsatz'] = number_format(abs($difference), 2, ',', ''); // obligatory
$data['EU-Steuersatz (Bestimmung)'] = 0;
$data['WKZ Umsatz'] = $row['waehrung'];
$data['Belegfeld 1'] = mb_strimwidth($row['belegnr'],0,12);
$data['Konto'] = $row['kundennummer'];
$data['Soll-/Haben-Kennzeichen'] = ($difference < 0)?'S':'H'; // obligatory
$data['Gegenkonto (ohne BU-Schlüssel)'] = $sachkonto_differences; // obligatory
$data['Belegdatum'] = date_format(date_create($row['datum']),"dm"); // obligatory
$data['Buchungstext'] = "Differenz";
$data['EU-Mitgliedstaat u. UStID (Bestimmung)'] = $row['ustid'];
$data['Auftragsnummer'] = $row['auftrag'];
$csv .= $this->create_line($datev_buchungsstapel_definition,$data);
}
}
}
} // diffignore
// Query position data // Query position data
$arr = $this->app->DB->Query($sql); $arr = $this->app->DB->Query($sql);
while ($row = $this->app->DB->Fetch_Assoc($arr)) { while ($row = $this->app->DB->Fetch_Assoc($arr)) {
// print_r($row); //print_r($row);
$posid = $row['pos_id']; $posid = $row['pos_id'];
$tmpsteuersatz = 0; $tmpsteuersatz = 0;
@@ -558,7 +609,7 @@ class Exportbuchhaltung
$data['Soll-/Haben-Kennzeichen'] = $typ['kennzeichen_negativ']; // obligatory $data['Soll-/Haben-Kennzeichen'] = $typ['kennzeichen_negativ']; // obligatory
} }
$data['EU-Steuersatz (Bestimmung)'] = number_format($$tmpsteuersatz, 2, ',', ''); $data['EU-Steuersatz (Bestimmung)'] = number_format($tmpsteuersatz, 2, ',', '');
$data['WKZ Umsatz'] = $row['pos_waehrung']; $data['WKZ Umsatz'] = $row['pos_waehrung'];
$data['Belegfeld 1'] = mb_strimwidth($row['belegnr'],0,12); $data['Belegfeld 1'] = mb_strimwidth($row['belegnr'],0,12);
$data['Konto'] = $row['kundennummer']; // obligatory $data['Konto'] = $row['kundennummer']; // obligatory
@@ -572,17 +623,10 @@ class Exportbuchhaltung
$data['Belegdatum'] = date_format(date_create($row['datum']),"dm"); // obligatory $data['Belegdatum'] = date_format(date_create($row['datum']),"dm"); // obligatory
$data['Buchungstext'] = mb_strimwidth($row['name'],0,60); $data['Buchungstext'] = mb_strimwidth($row['name'],0,60);
$data['EU-Mitgliedstaat u. UStID (Bestimmung)'] = $row['ustid']; $data['EU-Mitgliedstaat u. UStID (Bestimmung)'] = $row['ustid'];
$data['Auftragsnummer'] = $row['auftrag'];
$comma = ""; $data['Auftragsnummer'] = ($row['auftrag']!=0)?$row['auftrag']:'';
foreach ($datev_buchungsstapel_definition as $key => $value) {
if (!isset($data[$value])) { $csv .= $this->create_line($datev_buchungsstapel_definition,$data);
$data[$value] = '';
}
$csv .= $comma.'"'.$data[$value].'"';
$comma = ";";
}
$csv .= "\r\n";
} }
} }
@@ -591,6 +635,21 @@ class Exportbuchhaltung
$csv = mb_convert_encoding($csv, "ISO-8859-1", "UTF-8"); $csv = mb_convert_encoding($csv, "ISO-8859-1", "UTF-8");
return($csv); return($csv);
} }
function create_line($definition, $data) : string {
$csv = "";
$comma = "";
foreach ($definition as $key => $value) {
if (!isset($data[$value])) {
$data[$value] = '';
}
$csv .= $comma.'"'.$data[$value].'"';
$comma = ";";
}
$csv .= "\r\n";
return($csv);
}
} }
/* /*
File diff suppressed because it is too large Load Diff
+15 -1
View File
@@ -1043,7 +1043,7 @@ class Firmendaten {
'arbeitsnachweis_header','arbeitsnachweis_footer','provisionsgutschrift_header','provisionsgutschrift_footer','proformarechnung_header','proformarechnung_footer','eu_lieferung_vermerk','export_lieferung_vermerk' 'arbeitsnachweis_header','arbeitsnachweis_footer','provisionsgutschrift_header','provisionsgutschrift_footer','proformarechnung_header','proformarechnung_footer','eu_lieferung_vermerk','export_lieferung_vermerk'
,'wareneingang_kamera_waage','layout_iconbar','passwort','host','port','mailssl','signatur','email','absendername','bcc1','bcc2','bcc3' ,'wareneingang_kamera_waage','layout_iconbar','passwort','host','port','mailssl','signatur','email','absendername','bcc1','bcc2','bcc3'
,'firmenfarbe','name','strasse','plz','ort','steuernummer','projekt','steuer_positionen_export','tabsnavigationfarbe','tabsnavigationfarbeschrift' ,'firmenfarbe','name','strasse','plz','ort','steuernummer','projekt','steuer_positionen_export','tabsnavigationfarbe','tabsnavigationfarbeschrift'
,"buchhaltung_berater","buchhaltung_mandant","buchhaltung_wj_beginn","buchhaltung_sachkontenlaenge" ,"buchhaltung_berater","buchhaltung_mandant","buchhaltung_wj_beginn","buchhaltung_sachkontenlaenge", "fibu_buchungen_startdatum", "rechnung_skonto_kontorahmen"
); );
if(isset($sql2a)){ if(isset($sql2a)){
@@ -1379,6 +1379,11 @@ class Firmendaten {
} }
$this->app->YUI->AutoComplete('steuersatz_normal','steuersatz',1); $this->app->YUI->AutoComplete('steuersatz_normal','steuersatz',1);
$this->app->YUI->AutoComplete('steuersatz_ermaessigt','steuersatz',1); $this->app->YUI->AutoComplete('steuersatz_ermaessigt','steuersatz',1);
$this->app->YUI->DatePicker('fibu_buchungen_startdatum');
$this->app->YUI->AutoComplete('rechnung_skonto_kontorahmen', 'sachkonto');
$this->app->Tpl->Parse('PAGE','firmendaten.tpl'); $this->app->Tpl->Parse('PAGE','firmendaten.tpl');
} }
@@ -1842,6 +1847,12 @@ class Firmendaten {
if(!empty($data[0]['taxfromdoctypesettings'])) { if(!empty($data[0]['taxfromdoctypesettings'])) {
$this->app->Tpl->Set('OPTIONTAXFROMDOCTYPESETTINGS', ' selected="selected" '); $this->app->Tpl->Set('OPTIONTAXFROMDOCTYPESETTINGS', ' selected="selected" ');
} }
// Fibu
$this->app->Tpl->Set('FIBU_BUCHUNGEN_STARTDATUM', $this->app->erp->ReplaceDatum(false,$data[0]['fibu_buchungen_startdatum'],false));
$this->app->Tpl->Set('RECHNUNG_SKONTO_KONTORAHMEN', $this->app->erp->ReplaceKontorahmen(false,$data[0]['rechnung_skonto_kontorahmen']));
} }
} }
@@ -2282,6 +2293,9 @@ class Firmendaten {
$data['buchhaltung_wj_beginn'] = ($this->app->Secure->POST["buchhaltung_wj_beginn"]); $data['buchhaltung_wj_beginn'] = ($this->app->Secure->POST["buchhaltung_wj_beginn"]);
$data['buchhaltung_sachkontenlaenge'] = ($this->app->Secure->POST["buchhaltung_sachkontenlaenge"]); $data['buchhaltung_sachkontenlaenge'] = ($this->app->Secure->POST["buchhaltung_sachkontenlaenge"]);
$data['fibu_buchungen_startdatum'] = $this->app->erp->ReplaceDatum(true,$this->app->Secure->POST["fibu_buchungen_startdatum"],false);
$data['rechnung_skonto_kontorahmen'] = $this->app->erp->ReplaceKontorahmen(true,$this->app->Secure->POST["rechnung_skonto_kontorahmen"]);
return $data; return $data;
} }
+112 -109
View File
@@ -620,6 +620,8 @@ class Gutschrift extends GenGutschrift
$tmp3->DisplayNew('PDFARCHIV','Men&uuml;','noAction'); $tmp3->DisplayNew('PDFARCHIV','Men&uuml;','noAction');
} }
$this->app->Tpl->Add('ZAHLUNGEN',$this->GutschriftZahlung(true));
if($parsetarget=='') { if($parsetarget=='') {
$this->app->Tpl->Output('gutschrift_minidetail.tpl'); $this->app->Tpl->Output('gutschrift_minidetail.tpl');
$this->app->ExitXentral(); $this->app->ExitXentral();
@@ -648,6 +650,7 @@ class Gutschrift extends GenGutschrift
/** /**
* Build the html output for minidetail containing the payments
* @param bool $return * @param bool $return
* *
* @return string * @return string
@@ -656,101 +659,36 @@ class Gutschrift extends GenGutschrift
{ {
$id = $this->app->Secure->GetGET('id'); $id = $this->app->Secure->GetGET('id');
$gutschriftArr = $this->app->DB->SelectArr( $zahlungen = $this->app->erp->GetZahlungen($id,'gutschrift');
"SELECT DATE_FORMAT(datum,'%d.%m.%Y') as datum, belegnr, soll, waehrung, rechnungid if (!empty($zahlungen)) {
FROM gutschrift WHERE id='$id' LIMIT 1" $et = new EasyTable($this->app);
);
$waehrung = empty($gutschriftArr)?'EUR':$gutschriftArr[0]['waehrung'];
if(!$waehrung) {
$waehrung = 'EUR';
}
$rechnungid = empty($gutschriftArr)?0: $gutschriftArr[0]['rechnungid']; $et->headings = array('Datum','Beleg','Betrag','W&auml;hrung');
$auftragid = $rechnungid <= 0?0:$this->app->DB->Select( foreach ($zahlungen as $zahlung) {
sprintf( $row = array(
'SELECT `auftragid` FROM `rechnung` WHERE `id` = %d LIMIT 1', $zahlung['datum'],
$rechnungid "<a href=\"index.php?module=".$zahlung['doc_typ']."&action=edit&id=".$zahlung['doc_id']."\">
) ".ucfirst($zahlung['doc_typ'])."
); ".$zahlung['doc_info']."
$eingang ="<tr><td colspan=\"3\"><b>Zahlungen</b></td></tr>"; </a>",
$zahlung['betrag'],
$zahlung['waehrung']
);
$et->AddRow($row);
}
$salden = $this->app->erp->GetSaldenDokument($id,'gutschrift');
$eingang .="<tr><td class=auftrag_cell>".$gutschriftArr[0]['datum'] foreach ($salden as $saldo) {
."</td><td class=auftrag_cell>GS ".$gutschriftArr[0]['belegnr'] $row = array(
."</td><td class=auftrag_cell align=right>".$this->app->erp->EUR($gutschriftArr[0]['soll']) '',
." $waehrung</td></tr>"; '<b>Saldo</b>',
"<b>".$saldo['betrag']."</b>",
$eingangArr = $this->app->DB->SelectArr( "<b>".$saldo['waehrung']."</b>"
"SELECT ko.bezeichnung as konto, DATE_FORMAT(ke.datum,'%d.%m.%Y') as datum, k.id as kontoauszuege, );
ke.betrag as betrag, k.id as zeile,k.waehrung $et->AddRow($row);
FROM kontoauszuege_zahlungseingang ke }
LEFT JOIN kontoauszuege k ON ke.kontoauszuege=k.id return($et->DisplayNew('return',""));
LEFT JOIN konten ko ON k.konto=ko.id
WHERE (ke.objekt='gutschrift' AND ke.parameter='$id')
OR (ke.objekt='auftrag' AND ke.parameter='$auftragid' AND ke.parameter>0)
OR (ke.objekt='rechnung' AND ke.parameter='$rechnungid' AND ke.parameter>0)"
);
$ceingangArr = empty($eingangArr)?0:(!empty($eingangArr)?count($eingangArr):0);
for($i=0;$i<$ceingangArr;$i++) {
$waehrung = 'EUR';
if($eingangArr[$i]['waehrung']) {
$waehrung = $eingangArr[$i]['waehrung'];
}
$eingang .="<tr><td class=auftrag_cell>".$eingangArr[$i]['datum']
."</td><td class=auftrag_cell>".$eingangArr[$i]['konto']
."&nbsp;(<a href=\"index.php?module=zahlungseingang&action=editzeile&id="
.$eingangArr[$i]['zeile']."\">zur Buchung</a>)</td><td class=auftrag_cell align=right>"
.$this->app->erp->EUR($eingangArr[$i]['betrag'])
." $waehrung</td></tr>";
}
// gutschriften zu dieser rechnung anzeigen
/*
$gutschriften = $this->app->DB->SelectArr("SELECT belegnr, DATE_FORMAT(datum,'%d.%m.%Y') as datum,soll FROM gutschrift WHERE rechnungid='$id'");
for($i=0;$i<(!empty($gutschriften)?count($gutschriften):0);$i++)
$eingang .="<tr><td class=auftrag_cell>".$gutschriften[$i]['datum']."</td><td class=auftrag_cell>GS ".$gutschriften[$i]['belegnr']."</td><td class=auftrag_cell align=right>".$this->app->erp->EUR($gutschriften[$i]['soll'])." EUR</td></tr>";
*/
$ausgang = '';
$ausgangArr = $this->app->DB->SelectArr(
"SELECT ko.bezeichnung as konto, DATE_FORMAT(ke.datum,'%d.%m.%Y') as datum, ke.betrag as betrag,
k.id as zeile,k.waehrung
FROM kontoauszuege_zahlungsausgang ke
LEFT JOIN kontoauszuege k ON ke.kontoauszuege=k.id
LEFT JOIN konten ko ON k.konto=ko.id
WHERE (ke.objekt='gutschrift' AND ke.parameter='$id')
OR (ke.objekt='rechnung' AND ke.parameter='$rechnungid' AND ke.parameter>0)
OR (ke.objekt='auftrag' AND ke.parameter='$auftragid' AND ke.parameter>0)"
);
$cAusgangArr = empty($ausgangArr)?0:(!empty($ausgangArr)?count($ausgangArr):0);
for($i=0;$i<$cAusgangArr;$i++) {
$waehrung = 'EUR';
if($ausgangArr[$i]['waehrung']) {
$waehrung = $ausgangArr[$i]['waehrung'];
}
$ausgang .="<tr><td class=auftrag_cell>".$ausgangArr[$i]['datum']."</td><td class=auftrag_cell>"
.$ausgangArr[$i]['konto']."&nbsp;(<a href=\"index.php?module=zahlungseingang&action=editzeile&id="
.$ausgangArr[$i]['zeile']."\">zur Buchung</a>)</td><td class=auftrag_cell align=right>"
.$this->app->erp->EUR($ausgangArr[$i]['betrag'])
." $waehrung</td></tr>";
}
$saldo = $this->app->erp->EUR($this->app->erp->GutschriftSaldo($id));
if($saldo < 0) {
$saldo = "<b style=\"color:red\">$saldo</b>";
}
$waehrung = $this->app->DB->Select("SELECT waehrung FROM gutschrift WHERE id = '$id' LIMIT 1");
if(!$waehrung) {
$waehrung = 'EUR';
}
$ausgang .="<tr><td class=auftrag_cell></td><td class=auftrag_cell align=right>Saldo</td><td class=auftrag_cell align=right>$saldo $waehrung</td></tr>";
if($return) {
return "<table width=100% border=0 class=auftrag_cell cellpadding=0 cellspacing=0>".$eingang." ".$ausgang."</table>";
} }
} }
@@ -774,17 +712,32 @@ class Gutschrift extends GenGutschrift
$showDefault = true; $showDefault = true;
$this->app->Tpl->Set('TABTEXT','Freigabe'); $this->app->Tpl->Set('TABTEXT','Freigabe');
$this->app->erp->GutschriftNeuberechnen($id); $this->app->erp->GutschriftNeuberechnen($id);
$this->app->erp->CheckVertrieb($id,'gutschrift'); $this->app->erp->CheckVertrieb($id,'gutschrift');
$this->app->erp->CheckBearbeiter($id,'gutschrift'); $this->app->erp->CheckBearbeiter($id,'gutschrift');
$doctype = 'gutschrift'; $doctype = 'gutschrift';
$sql = "SELECT belegnr, rechnungid FROM gutschrift WHERE id='$id' LIMIT 1";
$result = $this->app->DB->SelectArr($sql);
$belegnr = $result[0]['belegnr'];
$rechnungid = $result[0]['rechnungid'];
$name = $this->app->DB->Select("SELECT a.name FROM gutschrift b LEFT JOIN adresse a ON a.id=b.adresse WHERE b.id='$id' LIMIT 1");
$summe = $this->app->DB->Select("SELECT soll FROM gutschrift WHERE id='$id' LIMIT 1");
$waehrung = $this->app->DB->Select("SELECT waehrung FROM gutschrift_position WHERE gutschrift='$id' LIMIT 1");
if(empty($intern)){ if(empty($intern)){
$this->app->erp->RunHook('beleg_freigabe', 4, $doctype, $id, $allowedFrm, $showDefault); $this->app->erp->RunHook('beleg_freigabe', 4, $doctype, $id, $allowedFrm, $showDefault);
} }
if($allowedFrm && $freigabe==$id) { if($allowedFrm && $freigabe==$id) {
$belegnr = $this->app->DB->Select("SELECT belegnr FROM gutschrift WHERE id='$id' LIMIT 1");
if($belegnr=='') { if($belegnr=='') {
$this->app->erp->BelegFreigabe('gutschrift',$id); $this->app->erp->BelegFreigabe('gutschrift',$id);
// Create fibu_buchung
$gegen_rechnung = $this->app->Secure->GetGET('gegen_rechnung');
if ($gegen_rechnung && $rechnungid > 0) {
$this->app->erp->fibu_buchungen_buchen('gutschrift', $id, 'rechnung', $rechnungid, -$summe, $waehrung, date("Y-m-d"), 'Verrechnung');
}
if($intern) { if($intern) {
return 1; return 1;
} }
@@ -798,14 +751,16 @@ class Gutschrift extends GenGutschrift
$this->app->Location->execute("index.php?module=gutschrift&action=edit&id=$id&msg=$msg"); $this->app->Location->execute("index.php?module=gutschrift&action=edit&id=$id&msg=$msg");
} }
if($showDefault){ if($showDefault){
$name = $this->app->DB->Select("SELECT a.name FROM gutschrift b LEFT JOIN adresse a ON a.id=b.adresse WHERE b.id='$id' LIMIT 1"); if ($rechnungid > 0) {
$summe = $this->app->DB->Select("SELECT soll FROM gutschrift WHERE id='$id' LIMIT 1"); $input_html = "<input type=\"button\" value=\"Freigabe ohne Rechnung\" onclick=\"window.location.href='index.php?module=gutschrift&action=freigabe&id=$id&freigabe=$id&gegen_rechnung=0'\">"
$waehrung = $this->app->DB->Select("SELECT waehrung FROM gutschrift_position ."<input type=\"button\" value=\"Freigabe gegen Rechnung\" onclick=\"window.location.href='index.php?module=gutschrift&action=freigabe&id=$id&freigabe=$id&gegen_rechnung=1'\">";
WHERE gutschrift='$id' LIMIT 1"); } else {
$input_html = "<input type=\"button\" value=\"Freigabe Rechnung\" onclick=\"window.location.href='index.php?module=gutschrift&action=freigabe&id=$id&freigabe=$id'\">";
}
$this->app->Tpl->Set('TAB1', "<div class=\"info\">Soll die Gutschrift an <b>$name</b> im Wert von <b>$summe $waehrung</b> $this->app->Tpl->Set('TAB1', "<div class=\"info\">Soll die Gutschrift an <b>$name</b> im Wert von <b>$summe $waehrung</b>
jetzt freigegeben werden? <input type=\"button\" value=\"Freigabe\" onclick=\"window.location.href='index.php?module=gutschrift&action=freigabe&id=$id&freigabe=$id'\"> jetzt freigegeben werden? ".
</div>"); $input_html.
"</div>");
} }
$this->GutschriftMenu(); $this->GutschriftMenu();
$this->app->Tpl->Parse('PAGE','tabview.tpl'); $this->app->Tpl->Parse('PAGE','tabview.tpl');
@@ -1176,7 +1131,6 @@ class Gutschrift extends GenGutschrift
$this->app->erp->CheckBearbeiter($id,"gutschrift"); $this->app->erp->CheckBearbeiter($id,"gutschrift");
$this->app->erp->CheckBuchhaltung($id,"gutschrift"); $this->app->erp->CheckBuchhaltung($id,"gutschrift");
$this->app->erp->GutschriftNeuberechnen($id); $this->app->erp->GutschriftNeuberechnen($id);
$this->app->erp->DisableVerband(); $this->app->erp->DisableVerband();
@@ -1185,14 +1139,11 @@ class Gutschrift extends GenGutschrift
$this->app->Tpl->Set('ICONMENU',$this->GutschriftIconMenu($id)); $this->app->Tpl->Set('ICONMENU',$this->GutschriftIconMenu($id));
$this->app->Tpl->Set('ICONMENU2',$this->GutschriftIconMenu($id,2)); $this->app->Tpl->Set('ICONMENU2',$this->GutschriftIconMenu($id,2));
$belegnr = $this->app->DB->Select("SELECT belegnr FROM gutschrift WHERE id='$id' LIMIT 1"); $belegnr = $this->app->DB->Select("SELECT belegnr FROM gutschrift WHERE id='$id' LIMIT 1");
$nummer = $this->app->DB->Select("SELECT belegnr FROM gutschrift WHERE id='$id' LIMIT 1"); $nummer = $this->app->DB->Select("SELECT belegnr FROM gutschrift WHERE id='$id' LIMIT 1");
$kundennummer = $this->app->DB->Select("SELECT kundennummer FROM gutschrift WHERE id='$id' LIMIT 1"); $kundennummer = $this->app->DB->Select("SELECT kundennummer FROM gutschrift WHERE id='$id' LIMIT 1");
$adresse = $this->app->DB->Select("SELECT adresse FROM gutschrift WHERE id='$id' LIMIT 1"); $adresse = $this->app->DB->Select("SELECT adresse FROM gutschrift WHERE id='$id' LIMIT 1");
$status= $this->app->DB->Select("SELECT status FROM gutschrift WHERE id='$id' LIMIT 1"); $status= $this->app->DB->Select("SELECT status FROM gutschrift WHERE id='$id' LIMIT 1");
$schreibschutz= $this->app->DB->Select("SELECT schreibschutz FROM gutschrift WHERE id='$id' LIMIT 1"); $schreibschutz= $this->app->DB->Select("SELECT schreibschutz FROM gutschrift WHERE id='$id' LIMIT 1");
if($status !== 'angelegt' && $status !== 'angelegta' && $status !== 'a') if($status !== 'angelegt' && $status !== 'angelegta' && $status !== 'a')
@@ -1241,7 +1192,12 @@ class Gutschrift extends GenGutschrift
if($zahlungsweise=="einzugsermaechtigung" || $zahlungsweise=="lastschrift") $this->app->Tpl->Set('EINZUGSERMAECHTIGUNG',""); if($zahlungsweise=="einzugsermaechtigung" || $zahlungsweise=="lastschrift") $this->app->Tpl->Set('EINZUGSERMAECHTIGUNG',"");
if($zahlungsweise=="vorkasse" || $zahlungsweise=="kreditkarte" || $zahlungsweise=="paypal" || $zahlungsweise=="bar") $this->app->Tpl->Set('VORKASSE',""); if($zahlungsweise=="vorkasse" || $zahlungsweise=="kreditkarte" || $zahlungsweise=="paypal" || $zahlungsweise=="bar") $this->app->Tpl->Set('VORKASSE',"");
$zahlungsinfo = $this->app->DB->SelectArr("SELECT zahlungsstatus, ".$this->app->erp->FormatMenge('soll*(-1)',2)." as betrag FROM gutschrift WHERE id='$id' LIMIT 1");
$this->app->Tpl->Set('ZAHLUNGSSTATUS_DB',$zahlungsinfo[0]['zahlungsstatus']);
$this->app->Tpl->Set('SOLL',$zahlungsinfo[0]['betrag']);
$ist = $this->app->erp->EUR($this->app->erp->GetSaldoDokument($id,'gutschrift')['betrag']);
$this->app->Tpl->Set('ISTDB',$ist);
if($schreibschutz=="1" && $this->app->erp->RechteVorhanden("gutschrift","schreibschutz")) if($schreibschutz=="1" && $this->app->erp->RechteVorhanden("gutschrift","schreibschutz"))
{ {
@@ -1249,11 +1205,24 @@ class Gutschrift extends GenGutschrift
// $this->app->erp->CommonReadonly(); // $this->app->erp->CommonReadonly();
} }
if($schreibschutz=="1") if($schreibschutz=="1") {
$this->app->erp->CommonReadonly(); $this->app->erp->CommonReadonly();
}
if($schreibschutz=='1' && $this->app->erp->RechteVorhanden('gutschrift','edit'))
{
$this->app->erp->RemoveReadonly('zahlungsstatus');
if ($aktion = $this->app->Secure->GetPOST('speichern') == 'Speichern') {
$zahlungsstatus = $this->app->Secure->GetPOST('zahlungsstatus');
$this->app->DB->Update("UPDATE gutschrift SET zahlungsstatus='".$zahlungsstatus."' WHERE id='$id' LIMIT 1");
}
}
$rechnungid = $this->app->DB->Select("SELECT rechnungid FROM gutschrift WHERE id='$id' LIMIT 1"); $rechnungid = $this->app->DB->Select("SELECT rechnungid FROM gutschrift WHERE id='$id' LIMIT 1");
$rechnungid = $this->app->DB->Select("SELECT id FROM rechnung WHERE id='$rechnungid' AND belegnr!='' LIMIT 1"); $rechnungid = $this->app->DB->Select("SELECT id FROM rechnung WHERE id='$rechnungid' AND belegnr!='' LIMIT 1");
$alle_gutschriften = $this->app->DB->SelectArr("SELECT id,belegnr FROM gutschrift WHERE rechnungid='$rechnungid' AND rechnungid>0"); $alle_gutschriften = $this->app->DB->SelectArr("SELECT id,belegnr FROM gutschrift WHERE rechnungid='$rechnungid' AND rechnungid>0");
if (!is_null($alle_gutschriften)) { if (!is_null($alle_gutschriften)) {
@@ -1445,6 +1414,8 @@ class Gutschrift extends GenGutschrift
{ {
$this->app->Tpl->Set('UEBERSCHRIFT', 'Gutschriften'); $this->app->Tpl->Set('UEBERSCHRIFT', 'Gutschriften');
$this->app->DB->Update("UPDATE gutschrift SET zahlungsstatus='offen' WHERE zahlungsstatus=''");
if($this->app->Secure->GetPOST('ausfuehren') && $this->app->erp->RechteVorhanden('gutschrift', 'edit')) { if($this->app->Secure->GetPOST('ausfuehren') && $this->app->erp->RechteVorhanden('gutschrift', 'edit')) {
$drucker = $this->app->Secure->GetPOST('seldrucker'); $drucker = $this->app->Secure->GetPOST('seldrucker');
$aktion = $this->app->Secure->GetPOST('sel_aktion'); $aktion = $this->app->Secure->GetPOST('sel_aktion');
@@ -1463,7 +1434,13 @@ class Gutschrift extends GenGutschrift
$ids = array_unique($ids); $ids = array_unique($ids);
switch($aktion) { switch($aktion) {
case 'erledigtam': case 'bezahlt':
$this->app->DB->Update("UPDATE gutschrift SET zahlungsstatus='bezahlt' WHERE id IN (".implode(', ',$ids).')');
break;
case 'offen':
$this->app->DB->Update("UPDATE gutschrift SET zahlungsstatus='offen' WHERE id IN (".implode(', ',$ids).')');
break;
/* case 'erledigtam':
if(!empty($ids)){ if(!empty($ids)){
$this->app->DB->Update( $this->app->DB->Update(
sprintf( sprintf(
@@ -1488,7 +1465,7 @@ class Gutschrift extends GenGutschrift
) )
); );
} }
break; break;*/
case 'mail': case 'mail':
$returnOrders = empty($ids)?[]:$this->app->DB->SelectArr( $returnOrders = empty($ids)?[]:$this->app->DB->SelectArr(
sprintf( sprintf(
@@ -1682,6 +1659,28 @@ class Gutschrift extends GenGutschrift
} }
} }
// refresh all open items
$openids = $this->app->DB->SelectArr("SELECT id, waehrung from gutschrift WHERE zahlungsstatus != 'bezahlt'");
foreach ($openids as $openid) {
$saldo = $this->app->erp->GetSaldoDokument($openid['id'],'gutschrift');
if (!empty($saldo)) {
if ($saldo['waehrung'] == $openid['waehrung']) {
$sql = "UPDATE
gutschrift
SET
ist = ".$saldo['betrag']."+soll,
zahlungsstatus = IF(".$saldo['betrag']." = 0,'bezahlt','offen')
WHERE id=".$openid['id'];
$this->app->DB->Update($sql);
}
}
else {
$this->app->DB->Update("UPDATE gutschrift SET ist = null WHERE id=".$openid['id']);
}
}
$backurl = $this->app->Secure->GetGET('backurl'); $backurl = $this->app->Secure->GetGET('backurl');
$backurl = $this->app->erp->base64_url_decode($backurl); $backurl = $this->app->erp->base64_url_decode($backurl);
@@ -1770,6 +1769,10 @@ class Gutschrift extends GenGutschrift
$this->app->YUI->TableSearch('TAB1','gutschriften'); $this->app->YUI->TableSearch('TAB1','gutschriften');
$this->app->YUI->TableSearch('TAB3','gutschrifteninbearbeitung'); $this->app->YUI->TableSearch('TAB3','gutschrifteninbearbeitung');
if($this->app->erp->RechteVorhanden('rechnung', 'manuellbezahltmarkiert')){
$this->app->Tpl->Set('ALSBEZAHLTMARKIEREN', '<option value="bezahlt">{|als bezahlt markieren|}</option>');
}
$this->app->Tpl->Set( $this->app->Tpl->Set(
'SELDRUCKER', 'SELDRUCKER',
$this->app->erp->GetSelectDrucker($this->app->User->GetParameter('rechnung_list_drucker')) $this->app->erp->GetSelectDrucker($this->app->User->GetParameter('rechnung_list_drucker'))
+178 -14
View File
@@ -1030,7 +1030,7 @@ class Importvorlage extends GenImportvorlage {
if (!move_uploaded_file($_FILES['userfile']['tmp_name'], $stueckliste_csv)) { if (!move_uploaded_file($_FILES['userfile']['tmp_name'], $stueckliste_csv)) {
//$importfilename = $_FILES['userfile']['name']; //$importfilename = $_FILES['userfile']['name'];
$msg = $this->app->erp->base64_url_encode("<div class=\"error\">Die Datei konnte nicht ge&ouml;ffnet werden. Eventuell ist die Datei zu gro&szlig; oder die Schreibrechte stimmen nicht!</div> "); $msg = $this->app->erp->base64_url_encode("<div class=\"error\">Die Datei '".$stueckliste_csv."' konnte nicht ge&ouml;ffnet werden. Eventuell ist die Datei zu gro&szlig; oder die Schreibrechte stimmen nicht!</div> ");
$this->app->Location->execute("index.php?module=importvorlage&action=import&id=$id&msg=$msg"); $this->app->Location->execute("index.php?module=importvorlage&action=import&id=$id&msg=$msg");
} }
@@ -1419,7 +1419,7 @@ class Importvorlage extends GenImportvorlage {
$zeitstempel = time(); $zeitstempel = time();
$number_of_rows = empty($tmp['cmd'])?0:count($tmp['cmd']); $number_of_rows = empty($tmp['cmd'])?0:count($tmp['cmd']);
$number_of_rows = $number_of_rows + 2; // $number_of_rows = $number_of_rows + 2; // ?!?!
if($isCronjob) { if($isCronjob) {
$this->app->DB->Update( $this->app->DB->Update(
@@ -5079,6 +5079,145 @@ class Importvorlage extends GenImportvorlage {
} }
break; break;
case 'kontoauszug':
$allowed_fields = array('konto','buchung','betrag','betrag2','waehrung','buchungstext','buchungstext2','buchungstext3','buchungstext4');
$error = false;
// Create a row dataset (without checked and cmd)
$update_sql = "";
$row = array();
$comma = "";
foreach ($tmp as $key => $value) {
if ($key != 'cmd' && $key != 'checked') {
if (in_array($key,$allowed_fields)) {
$row[$key] = $value[$i];
$comma = ", ";
} else {
$msg .= "Feld nicht korrekt: ".$key.".<br>";
$error = true;
}
}
}
if (!$error) {
// Collect texts
$buchungstext = "";
$comma = "";
foreach ($row as $key => $value) {
if (str_starts_with($key,'buchungstext')) {
if (!empty($value)) {
$buchungstext .= $comma.$value;
$comma = ", ";
}
unset($row[$key]);
}
}
$row['buchungstext'] = $buchungstext;
$row['soll'] = $row['betrag'];
unset($row['betrag']);
if (empty($row['soll'])) {
$row['soll'] = $row['betrag2'];
}
unset($row['betrag2']);
$row['soll'] = $this->app->erp->ReplaceBetrag(true,$row['soll']);
$row['buchung'] = $this->app->erp->ReplaceDatum(true,$row['buchung'],false);
// Calculate hash
$hash_fields = array('buchung','soll','waehrung','buchungstext');
$hash_text = "";
foreach($hash_fields as $hash_field) {
$hash_text .= $row[$hash_field];
}
$row['pruefsumme'] = md5($hash_text);
$sql = "SELECT id FROM konten WHERE kurzbezeichnung ='".$row['konto']."' LIMIT 1";
$kontoid = $this->app->DB->SelectArr($sql);
if (!empty($kontoid)) {
$row['konto'] = $kontoid[0]['id'];
$row['importdatum'] = date("Y-m-d H:i:s");
$sql = "SELECT pruefsumme FROM kontoauszuege WHERE pruefsumme='".$row['pruefsumme']."' AND konto ='".$row['konto']."' AND importfehler IS NULL";
$result = $this->app->DB->SelectArr($sql);
if (!empty($result)) {
$msg .= "Doppelter Eintrag (nicht importiert): ".$row['buchungstext']."<br>";
} else {
$sql = "INSERT INTO kontoauszuege (".
implode(", ",array_keys($row)).
") VALUES ('".
implode("', '",array_values($row)).
"')";
$result = $this->app->DB->Update($sql);
}
} else {
$msg .= "Konto nicht gefunden: ".$row['konto'].".<br>";
}
}
break;
case 'stueckliste':
$allowed_fields = array('stuecklistevonartikel','artikel','menge','art','referenz','layer','wert','bauform','xpos','ypos','zachse','place');
// Create a row dataset (without checked and cmd)
$row = array();
$error_text = "";
$error = $this->create_row_set($tmp, $i, $allowed_fields, $row, $error_text);
if ($error !== false) {
$sql = "SELECT id FROM artikel WHERE stueckliste = 1 AND nummer = '".$row['stuecklistevonartikel']."'";
$von_id = $this->app->DB->SelectArr($sql);
if (empty($von_id)) {
$msg .= "Fehlerhafter 'Stueckliste von'-Artikel \"".$row['stuecklistevonartikel']."\"<br>";
break;
}
$row['stuecklistevonartikel'] = $von_id[0]['id'];
$sql = "SELECT id FROM artikel WHERE nummer = '".$row['artikel']."'";
$artikel_id = $this->app->DB->SelectArr($sql);
if (empty($artikel_id)) {
$msg .= "Fehlerhafter Artikel \"".$row['artikel']."\"<br>";
break;
}
$row['artikel'] = $artikel_id[0]['id'];
if(empty($row['menge'])) {
$row['menge'] = 1;
}
if(empty($row['art'])) {
$row['art'] = 'et';
}
if(empty($row['place']) || $row['place'] == 'DNP') {
$row['place'] = 'DNP';
} else {
$row['place'] = 'DP';
}
$sql = "INSERT INTO stueckliste (".
implode(", ",array_keys($row)).
") VALUES ('".
implode("', '",array_values($row)).
"')";
$result = $this->app->DB->Update($sql);
} else if(!$first_checked) {
$first_checked = true;
$msg .= $error_text;
}
break;
} }
// HERE END OF PROCESSING THE ROWS switch($ziel); // HERE END OF PROCESSING THE ROWS switch($ziel);
@@ -5107,19 +5246,21 @@ class Importvorlage extends GenImportvorlage {
break; break;
} }
} }
} // Loop
if($return) {
if($returnids) {
return $ids;
}
return $number_of_rows;
} }
if($return) {
if($returnids) { if (empty($msg)) {
return $ids; $msg=$this->app->erp->base64_url_encode("<div class=\"info\">Import durchgef&uuml;hrt.</div>");
} $this->app->Location->execute("index.php?module=importvorlage&action=import&id=$id&msg=$msg");
return $number_of_rows; } else {
} $msg=$this->app->erp->base64_url_encode("<div class=\"error\">".$msg."</div>");
if($ziel==='zeiterfassung' || $ziel==='wiedervorlage' || $ziel==='notizen') { $this->app->Location->execute("index.php?module=importvorlage&action=import&id=$id&msg=$msg");
$msg=$this->app->erp->base64_url_encode("<div class=\"info\">Import durchgef&uuml;hrt.</div>"); }
$this->app->Location->execute("index.php?module=importvorlage&action=import&id=$id&msg=$msg");
}
$msg=$this->app->erp->base64_url_encode("<div class=\"info\">Import durchgef&uuml;hrt.</div>");
$this->app->Location->execute("index.php?module=importvorlage&action=import&id=$id&msg=$msg");
} }
/** /**
@@ -6164,5 +6305,28 @@ class Importvorlage extends GenImportvorlage {
return $normalizedDate; return $normalizedDate;
} }
/*
* Create a cleaned row set
* Return true if ok, else see error_message
*/
private function create_row_set(array $tmp, $pos, array $allowed_fields, array &$result_row, string &$error_message) : bool {
$result_ok = true;
$result_row = array();
$error_message = "";
foreach ($tmp as $key => $value) {
if ($key != 'cmd' && $key != 'checked') {
if (in_array($key,$allowed_fields)) {
$result_row[$key] = $value[$pos];
} else {
$error_message .= "Feld nicht korrekt: ".$key.".<br>";
$result_ok = false;
}
}
}
return($result_ok);
}
} }
+1 -1
View File
@@ -1148,7 +1148,7 @@ class Kalender {
// Force user if empty // Force user if empty
if ($data[0]['adresseintern'] == 0) { if ($data[0]['adresseintern'] == 0) {
$data[0]['adresseintern'] = $this->app->User->GetID(); $data[0]['adresseintern'] = $this->app->User->GetAdresse();
} }
$data[0]['adresseintern'] = $this->app->DB->Select("SELECT CONCAT(a.id,' ',a.name) FROM adresse a WHERE a.id='" . $data[0]['adresseintern'] . "' AND a.geloescht=0 LIMIT 1"); $data[0]['adresseintern'] = $this->app->DB->Select("SELECT CONCAT(a.id,' ',a.name) FROM adresse a WHERE a.id='" . $data[0]['adresseintern'] . "' AND a.geloescht=0 LIMIT 1");
+349
View File
@@ -0,0 +1,349 @@
<?php
/*
* Copyright (c) 2022 OpenXE project
*/
use Xentral\Components\Database\Exception\QueryFailureException;
class Konten {
function __construct($app, $intern = false) {
$this->app = $app;
if ($intern)
return;
$this->app->ActionHandlerInit($this);
$this->app->ActionHandler("list", "konten_list");
$this->app->ActionHandler("create", "konten_edit"); // This automatically adds a "New" button
$this->app->ActionHandler("edit", "konten_edit");
$this->app->ActionHandler("delete", "konten_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 "konten_list":
$allowed['konten_list'] = array('list');
$heading = array('','','Bezeichnung', 'Kurzbezeichnung', 'Typ', 'Projekt', 'Aktiv','Men&uuml;');
$width = array('1%','1%','10%'); // Fill out manually later
// columns that are aligned right (numbers etc)
// $alignright = array(4,5,6,7,8);
$findcols = array('k.id','k.id','k.bezeichnung', 'k.kurzbezeichnung', 'k.type', 'p.abkuerzung', ' k.aktiv','k.id');
$searchsql = array('k.bezeichnung', 'k.kurzbezeichnung', 'k.datevkonto', 'k.blz', 'k.konto', 'k.swift', 'k.iban', 'k.inhaber', 'k.firma','p.abkuerzung');
$defaultorder = 1;
$defaultorderdesc = 0;
$dropnbox = "'<img src=./themes/new/images/details_open.png class=details>' AS `open`, CONCAT('<input type=\"checkbox\" name=\"auswahl[]\" value=\"',k.id,'\" />') AS `auswahl`";
$menu = "<table cellpadding=0 cellspacing=0><tr><td nowrap>" . "<a href=\"index.php?module=konten&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=konten&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
k.id,
$dropnbox,
k.bezeichnung,
k.kurzbezeichnung,
k.type,
p.abkuerzung,
k.aktiv,
k.id
FROM
konten k
LEFT JOIN
projekt p
ON
p.id = k.projekt ";
$where = " k.aktiv = 1 ";
// Toggle filters
$app->Tpl->Add('JQUERYREADY', "$('#archiv').click( function() { fnFilterColumn1( 0 ); } );");
for ($r = 1;$r <= 1;$r++) {
$app->Tpl->Add('JAVASCRIPT', '
function fnFilterColumn' . $r . ' ( i )
{
if(oMoreData' . $r . $name . '==1)
oMoreData' . $r . $name . ' = 0;
else
oMoreData' . $r . $name . ' = 1;
$(\'#' . $name . '\').dataTable().fnFilter(
\'\',
i,
0,0
);
}
');
}
$more_data1 = $app->Secure->GetGET("more_data1");
if ($more_data1 == 1) {
$where .= " OR k.aktiv <> 1";
} else {
}
$count = "SELECT count(DISTINCT id) FROM konten k WHERE $where";
// $groupby = "";
break;
}
$erg = false;
foreach ($erlaubtevars as $k => $v) {
if (isset($$v)) {
$erg[$v] = $$v;
}
}
return $erg;
}
function konten_list() {
$this->app->erp->MenuEintrag("index.php?module=konten&action=list", "&Uuml;bersicht");
$this->app->erp->MenuEintrag("index.php?module=konten&action=create", "Neu anlegen");
$this->app->erp->MenuEintrag("index.php", "Zur&uuml;ck");
$this->app->YUI->TableSearch('TAB1', 'konten_list', "show", "", "", basename(__FILE__), __CLASS__);
$this->app->Tpl->Parse('PAGE', "konten_list.tpl");
}
public function konten_delete() {
$id = (int) $this->app->Secure->GetGET('id');
$this->app->DB->Delete("UPDATE `konten` SET `aktiv` = 0 WHERE `id` = '{$id}'");
$this->app->Tpl->Set('MESSAGE', "<div class=\"info\">Der Eintrag wurde deaktiviert.</div>");
$this->konten_list();
}
/*
* Edit konten item
* If id is empty, create a new one
*/
function konten_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=konten&action=edit&id=$id", "Details");
$this->app->erp->MenuEintrag("index.php?module=konten&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);
$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 konten (".$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=konten&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=\"',k.id,'\" />') AS `auswahl`";
$result = $this->app->DB->SelectArr("SELECT SQL_CALC_FOUND_ROWS k.id, $dropnbox, k.bezeichnung, k.kurzbezeichnung, k.type, k.erstezeile, k.datevkonto, k.blz, k.konto, k.swift, k.iban, k.lastschrift, k.hbci, k.hbcikennung, k.inhaber, k.aktiv, k.keineemail, k.firma, k.schreibbar, k.importletztenzeilenignorieren, k.liveimport, k.liveimport_passwort, k.liveimport_online, k.importtrennzeichen, k.codierung, k.importerstezeilenummer, k.importdatenmaskierung, k.importnullbytes, k.glaeubiger, k.geloescht, k.projekt, k.saldo_summieren, k.saldo_betrag, k.saldo_datum, k.importfelddatum, k.importfelddatumformat, k.importfelddatumformatausgabe, k.importfeldbetrag, k.importfeldbetragformat, k.importfeldbuchungstext, k.importfeldbuchungstextformat, k.importfeldwaehrung, k.importfeldwaehrungformat, k.importfeldhabensollkennung, k.importfeldkennunghaben, k.importfeldkennungsoll, k.importextrahabensoll, k.importfeldhaben, k.importfeldsoll, k.cronjobaktiv, k.cronjobverbuchen, k.last_import, k.importperiode_in_hours, k.id FROM konten k"." 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->YUI->AutoComplete('projekt','projektname',1);
$this->app->Tpl->Set('PROJEKT',$this->app->erp->ReplaceProjekt(false,$result[0]['projekt'],false));
$this->app->Tpl->Set('AKTIV',$result[0]['aktiv']==1?'checked':'');
$this->app->Tpl->Set('KEINEEMAIL',$result[0]['keineemail']==1?'checked':'');
$this->app->Tpl->Set('SCHREIBBAR',$result[0]['schreibbar']==1?'checked':'');
$this->app->Tpl->Set('LASTSCHRIFT',$result[0]['lastschrift']==1?'checked':'');
$this->app->Tpl->Set('SALDO_SUMMIEREN',$result[0]['saldo_summieren']==1?'checked':'');
$this->app->Tpl->Parse('PAGE', "konten_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['kurzbezeichnung'] = $this->app->Secure->GetPOST('kurzbezeichnung');
$input['type'] = $this->app->Secure->GetPOST('type');
$input['erstezeile'] = $this->app->Secure->GetPOST('erstezeile');
$input['datevkonto'] = $this->app->Secure->GetPOST('datevkonto');
$input['blz'] = $this->app->Secure->GetPOST('blz');
$input['konto'] = $this->app->Secure->GetPOST('konto');
$input['swift'] = $this->app->Secure->GetPOST('swift');
$input['iban'] = $this->app->Secure->GetPOST('iban');
$input['lastschrift'] = $this->app->Secure->GetPOST('lastschrift');
$input['hbci'] = $this->app->Secure->GetPOST('hbci');
$input['hbcikennung'] = $this->app->Secure->GetPOST('hbcikennung');
$input['inhaber'] = $this->app->Secure->GetPOST('inhaber');
$input['aktiv'] = $this->app->Secure->GetPOST('aktiv');
$input['keineemail'] = $this->app->Secure->GetPOST('keineemail');
$input['firma'] = $this->app->Secure->GetPOST('firma');
$input['schreibbar'] = $this->app->Secure->GetPOST('schreibbar');
$input['importletztenzeilenignorieren'] = $this->app->Secure->GetPOST('importletztenzeilenignorieren');
$input['liveimport'] = $this->app->Secure->GetPOST('liveimport');
$input['liveimport_passwort'] = $this->app->Secure->GetPOST('liveimport_passwort');
$input['liveimport_online'] = $this->app->Secure->GetPOST('liveimport_online');
$input['importtrennzeichen'] = $this->app->Secure->GetPOST('importtrennzeichen');
$input['codierung'] = $this->app->Secure->GetPOST('codierung');
$input['importerstezeilenummer'] = $this->app->Secure->GetPOST('importerstezeilenummer');
$input['importdatenmaskierung'] = $this->app->Secure->GetPOST('importdatenmaskierung');
$input['importnullbytes'] = $this->app->Secure->GetPOST('importnullbytes');
$input['glaeubiger'] = $this->app->Secure->GetPOST('glaeubiger');
$input['geloescht'] = $this->app->Secure->GetPOST('geloescht');
$input['projekt'] = $this->app->Secure->GetPOST('projekt');
$input['saldo_summieren'] = $this->app->Secure->GetPOST('saldo_summieren');
$input['saldo_betrag'] = $this->app->Secure->GetPOST('saldo_betrag');
$input['saldo_datum'] = $this->app->Secure->GetPOST('saldo_datum');
$input['importfelddatum'] = $this->app->Secure->GetPOST('importfelddatum');
$input['importfelddatumformat'] = $this->app->Secure->GetPOST('importfelddatumformat');
$input['importfelddatumformatausgabe'] = $this->app->Secure->GetPOST('importfelddatumformatausgabe');
$input['importfeldbetrag'] = $this->app->Secure->GetPOST('importfeldbetrag');
$input['importfeldbetragformat'] = $this->app->Secure->GetPOST('importfeldbetragformat');
$input['importfeldbuchungstext'] = $this->app->Secure->GetPOST('importfeldbuchungstext');
$input['importfeldbuchungstextformat'] = $this->app->Secure->GetPOST('importfeldbuchungstextformat');
$input['importfeldwaehrung'] = $this->app->Secure->GetPOST('importfeldwaehrung');
$input['importfeldwaehrungformat'] = $this->app->Secure->GetPOST('importfeldwaehrungformat');
$input['importfeldhabensollkennung'] = $this->app->Secure->GetPOST('importfeldhabensollkennung');
$input['importfeldkennunghaben'] = $this->app->Secure->GetPOST('importfeldkennunghaben');
$input['importfeldkennungsoll'] = $this->app->Secure->GetPOST('importfeldkennungsoll');
$input['importextrahabensoll'] = $this->app->Secure->GetPOST('importextrahabensoll');
$input['importfeldhaben'] = $this->app->Secure->GetPOST('importfeldhaben');
$input['importfeldsoll'] = $this->app->Secure->GetPOST('importfeldsoll');
$input['cronjobaktiv'] = $this->app->Secure->GetPOST('cronjobaktiv');
$input['cronjobverbuchen'] = $this->app->Secure->GetPOST('cronjobverbuchen');
$input['last_import'] = $this->app->Secure->GetPOST('last_import');
$input['importperiode_in_hours'] = $this->app->Secure->GetPOST('importperiode_in_hours');
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('KURZBEZEICHNUNG', $input['kurzbezeichnung']);
$this->app->Tpl->Set('TYPE', $input['type']);
$this->app->Tpl->Set('ERSTEZEILE', $input['erstezeile']);
$this->app->Tpl->Set('DATEVKONTO', $input['datevkonto']);
$this->app->Tpl->Set('BLZ', $input['blz']);
$this->app->Tpl->Set('KONTO', $input['konto']);
$this->app->Tpl->Set('SWIFT', $input['swift']);
$this->app->Tpl->Set('IBAN', $input['iban']);
$this->app->Tpl->Set('LASTSCHRIFT', $input['lastschrift']);
$this->app->Tpl->Set('HBCI', $input['hbci']);
$this->app->Tpl->Set('HBCIKENNUNG', $input['hbcikennung']);
$this->app->Tpl->Set('INHABER', $input['inhaber']);
$this->app->Tpl->Set('AKTIV', $input['aktiv']);
$this->app->Tpl->Set('KEINEEMAIL', $input['keineemail']);
$this->app->Tpl->Set('FIRMA', $input['firma']);
$this->app->Tpl->Set('SCHREIBBAR', $input['schreibbar']);
$this->app->Tpl->Set('IMPORTLETZTENZEILENIGNORIEREN', $input['importletztenzeilenignorieren']);
$this->app->Tpl->Set('LIVEIMPORT', $input['liveimport']);
$this->app->Tpl->Set('LIVEIMPORT_PASSWORT', $input['liveimport_passwort']);
$this->app->Tpl->Set('LIVEIMPORT_ONLINE', $input['liveimport_online']);
$this->app->Tpl->Set('IMPORTTRENNZEICHEN', $input['importtrennzeichen']);
$this->app->Tpl->Set('CODIERUNG', $input['codierung']);
$this->app->Tpl->Set('IMPORTERSTEZEILENUMMER', $input['importerstezeilenummer']);
$this->app->Tpl->Set('IMPORTDATENMASKIERUNG', $input['importdatenmaskierung']);
$this->app->Tpl->Set('IMPORTNULLBYTES', $input['importnullbytes']);
$this->app->Tpl->Set('GLAEUBIGER', $input['glaeubiger']);
$this->app->Tpl->Set('GELOESCHT', $input['geloescht']);
$this->app->Tpl->Set('PROJEKT', $input['projekt']);
$this->app->Tpl->Set('SALDO_SUMMIEREN', $input['saldo_summieren']);
$this->app->Tpl->Set('SALDO_BETRAG', $input['saldo_betrag']);
$this->app->Tpl->Set('SALDO_DATUM', $input['saldo_datum']);
$this->app->Tpl->Set('IMPORTFELDDATUM', $input['importfelddatum']);
$this->app->Tpl->Set('IMPORTFELDDATUMFORMAT', $input['importfelddatumformat']);
$this->app->Tpl->Set('IMPORTFELDDATUMFORMATAUSGABE', $input['importfelddatumformatausgabe']);
$this->app->Tpl->Set('IMPORTFELDBETRAG', $input['importfeldbetrag']);
$this->app->Tpl->Set('IMPORTFELDBETRAGFORMAT', $input['importfeldbetragformat']);
$this->app->Tpl->Set('IMPORTFELDBUCHUNGSTEXT', $input['importfeldbuchungstext']);
$this->app->Tpl->Set('IMPORTFELDBUCHUNGSTEXTFORMAT', $input['importfeldbuchungstextformat']);
$this->app->Tpl->Set('IMPORTFELDWAEHRUNG', $input['importfeldwaehrung']);
$this->app->Tpl->Set('IMPORTFELDWAEHRUNGFORMAT', $input['importfeldwaehrungformat']);
$this->app->Tpl->Set('IMPORTFELDHABENSOLLKENNUNG', $input['importfeldhabensollkennung']);
$this->app->Tpl->Set('IMPORTFELDKENNUNGHABEN', $input['importfeldkennunghaben']);
$this->app->Tpl->Set('IMPORTFELDKENNUNGSOLL', $input['importfeldkennungsoll']);
$this->app->Tpl->Set('IMPORTEXTRAHABENSOLL', $input['importextrahabensoll']);
$this->app->Tpl->Set('IMPORTFELDHABEN', $input['importfeldhaben']);
$this->app->Tpl->Set('IMPORTFELDSOLL', $input['importfeldsoll']);
$this->app->Tpl->Set('CRONJOBAKTIV', $input['cronjobaktiv']);
$this->app->Tpl->Set('CRONJOBVERBUCHEN', $input['cronjobverbuchen']);
$this->app->Tpl->Set('LAST_IMPORT', $input['last_import']);
$this->app->Tpl->Set('IMPORTPERIODE_IN_HOURS', $input['importperiode_in_hours']);
}
}
+539
View File
@@ -0,0 +1,539 @@
<?php
/*
* Copyright (c) 2022 OpenXE project
*/
use Xentral\Components\Database\Exception\QueryFailureException;
class Kontoauszuege {
function __construct($app, $intern = false) {
$this->app = $app;
if ($intern)
return;
$this->app->ActionHandlerInit($this);
$this->app->ActionHandler("list", "kontoauszuege_konto_list");
$this->app->ActionHandler("listentries", "kontoauszuege_list");
// $this->app->ActionHandler("create", "kontoauszuege_edit"); // This automatically adds a "New" button
$this->app->ActionHandler("edit", "kontoauszuege_edit");
$this->app->ActionHandler("delete", "kontoauszuege_delete");
$this->app->DefaultActionHandler("list");
$this->app->ActionHandlerListen($app);
}
public function Install() {
/* Fill out manually later */
}
function TableSearch(&$app, $name, $erlaubtevars) {
switch ($name) {
case "kontoauszuege_konto_list":
$allowed['konten_list'] = array('list');
$heading = array('Bezeichnung', 'Kurzbezeichnung', 'Typ', 'Kontostand','Letzter Import', 'Men&uuml;');
// $width = array('1%','1%','10%'); // Fill out manually later
// columns that are aligned right (numbers etc)
// $alignright = array(4,5,6,7,8); sdds
$findcols = array('k.bezeichnung', 'k.kurzbezeichnung', 'k.type', 'k.kontostand','ka.datum', 'k.id');
$searchsql = array('k.bezeichnung', 'k.kurzbezeichnung', 'k.datevkonto', 'k.blz', 'k.konto', 'k.swift', 'k.iban', 'k.inhaber', 'k.firma','p.abkuerzung');
$defaultorder = 1;
$defaultorderdesc = 0;
// $sumcol = array(5);
$dropnbox = "'<img src=./themes/new/images/details_open.png class=details>' AS `open`, CONCAT('<input type=\"checkbox\" name=\"auswahl[]\" value=\"',k.id,'\" />') AS `auswahl`";
$menu = "<table cellpadding=0 cellspacing=0><tr><td nowrap>" . "<a href=\"index.php?module=kontoauszuege&action=listentries&kid=%value%\"><img src=\"./themes/{$app->Conf->WFconf['defaulttheme']}/images/edit.svg\" border=\"0\"></a></td></tr></table>";
$saldolink = array (
'<a href=\"index.php?module=fibu_buchungen&action=zuordnen&typ=kontoauszuege',
'">',
['sql' => $this->app->erp->FormatMenge('SUM(COALESCE(fb.betrag,0))',2)],
'</a>'
);
$sql = "SELECT
k.id,
k.bezeichnung,
k.kurzbezeichnung,
".$this->app->erp->FormatUCfirst('k.type').",
".$this->app->erp->FormatMenge('SUM(COALESCE(ka.soll,0))+k.saldo_betrag',2)." AS kontostand,
".$this->app->erp->FormatDatetime("MIN(ka.importdatum)")." AS datum,
k.id
FROM
konten k
LEFT JOIN kontoauszuege ka ON
k.id = ka.konto";
$where = " k.aktiv = 1 AND ka.importfehler IS NULL ";
// Toggle filters
$app->Tpl->Add('JQUERYREADY', "$('#archiv').click( function() { fnFilterColumn1( 0 ); } );");
for ($r = 1;$r <= 1;$r++) {
$app->Tpl->Add('JAVASCRIPT', '
function fnFilterColumn' . $r . ' ( i )
{
if(oMoreData' . $r . $name . '==1)
oMoreData' . $r . $name . ' = 0;
else
oMoreData' . $r . $name . ' = 1;
$(\'#' . $name . '\').dataTable().fnFilter(
\'\',
i,
0,0
);
}
');
}
$more_data1 = $app->Secure->GetGET("more_data1");
if ($more_data1 == 1) {
$where .= " OR k.aktiv <> 1";
} else {
}
// echo($sql);
// $count = "SELECT count(DISTINCT id) FROM konten k WHERE $where";
$groupby = " GROUP BY k.id";
break;
case "kontoauszuege_list":
$allowed['kontoauszuege_list'] = array('list');
$kontoid = $this->app->User->getParameter('kontoauszuege_konto_id');
$onlysaldo = $this->app->User->getParameter('kontoauszuege_only_saldo');
$heading = array('','', 'Importdatum', 'Konto', 'Datum', 'Betrag', 'Waehrung', 'Buchungstext','Interne Bemerkung', 'Saldo', 'Men&uuml;');
$width = array('1%','1%', '1%', '10%', '1%', '1%', '1%', '20%', '20%', '1%', '1%'); // Fill out manually later
// columns that are aligned right (numbers etc)
$alignright = array(6);
$sumcol = array(10);
$findcols = array('q.id','q.id','q.kurzbezeichnung', 'q.importdatum', 'q.buchung', 'q.soll', 'q.waehrung', 'q.buchungstext','q.internebemerkung','q.saldo');
$searchsql = array('q.kurzbezeichnung', 'q.buchung', 'q.soll', 'q.buchungstext','q.internebemerkung');
$defaultorder = 1;
$defaultorderdesc = 0;
$dropnbox = "'<img src=./themes/new/images/details_open.png class=details>' AS `open`, CONCAT('<input type=\"checkbox\" name=\"auswahl[]\" value=\"',k.id,'\" />') AS `auswahl`";
$menu = "<table cellpadding=0 cellspacing=0><tr><td nowrap>" . "<a href=\"index.php?module=kontoauszuege&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=kontoauszuege&action=delete&kid=".$kontoid."&onlysaldo=".$onlysaldo."&id=%value%\");>" . "<img src=\"themes/{$app->Conf->WFconf['defaulttheme']}/images/delete.svg\" border=\"0\"></a>" . "</td></tr></table>";
// Toggle filters
$app->Tpl->Add('JQUERYREADY', "$('#importfehler').click( function() { fnFilterColumn1( 0 ); } );");
for ($r = 1;$r <= 4;$r++) {
$app->Tpl->Add('JAVASCRIPT', '
function fnFilterColumn' . $r . ' ( i )
{
if(oMoreData' . $r . $name . '==1)
oMoreData' . $r . $name . ' = 0;
else
oMoreData' . $r . $name . ' = 1;
$(\'#' . $name . '\').dataTable().fnFilter(
\'\',
i,
0,0
);
}
');
}
$more_data1 = $app->Secure->GetGET("more_data1");
if ($more_data1 == 1) {
$subwhere .= "";
} else {
$subwhere .= " AND k.importfehler IS NULL ";
}
// END Toggle filters
$sql = "SELECT SQL_CALC_FOUND_ROWS * FROM ( SELECT
k.id,
$dropnbox,
".$app->erp->FormatDateTimeShort('k.importdatum')." AS importdatum,
(SELECT kurzbezeichnung FROM konten WHERE konten.id = k.konto) as kurzbezeichnung,
".$app->erp->FormatDate('k.buchung')." as buchung,
IF(
k.importfehler,
CONCAT(
'<del>',
".$app->erp->FormatMenge('(k.soll)',2).",
'</del>'
),
".$app->erp->FormatMenge('(k.soll)',2)."),
k.waehrung,
k.buchungstext,
k.internebemerkung,
".$app->erp->FormatMenge('SUM(fb.betrag)',2)." AS saldo,
k.id as menuid,
SUM(fb.betrag) AS saldonum
FROM kontoauszuege k
LEFT JOIN fibu_buchungen_alle fb ON
fb.id = k.id AND fb.typ = 'kontoauszuege'
WHERE k.konto = ".$kontoid.$subwhere."
GROUP BY k.id ) AS q
";
$where = "1";
if ($onlysaldo) {
$where .= " AND saldonum != 0";
}
// $count = "SELECT count(DISTINCT id) FROM kontoauszuege k WHERE $where";
// $groupby = "";
// echo($sql." WHERE ".$where." ".$groupby);
break;
case "kontoauszuege_salden":
$allowed['kontoauszuege_list'] = array('list');
$kontoid = $this->app->User->getParameter('kontoauszuege_konto_id');
$onlysaldo = $this->app->User->getParameter('kontoauszuege_only_saldo');
$heading = array('','', 'Buchungstext', 'Betrag', 'Waehrung', 'Betrag zuordnen', 'Beleg', 'ID','Beleg-Nr.','', 'Men&uuml;');
$width = array('1%','1%', '20%', '1%', '1%', '1%', '1%', '1%','1%', '1%','1%');
// columns that are aligned right (numbers etc)
$alignright = array(6);
$sumcol = array(10);
$findcols = array('q.id','q.id','q.konto', 'q.importdatum', 'q.buchung', 'q.soll', 'q.waehrung', 'q.buchungstext','q.internebemerkung','q.saldo');
$searchsql = array('q.konto', 'q.buchung', 'q.soll', 'q.buchungstext','q.internebemerkung');
$defaultorder = 1;
$defaultorderdesc = 0;
$dropnbox = "'<img src=./themes/new/images/details_open.png class=details>' AS `open`, CONCAT('<input type=\"checkbox\" name=\"auswahl[]\" value=\"',q.id,'\"',if(b.doc_belegnr IS NOT NULL,'checked',''),' />') AS `auswahl`";
$menu = "<table cellpadding=0 cellspacing=0><tr><td nowrap>" . "<a href=\"index.php?module=kontoauszuege&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=kontoauszuege&action=delete&kid=".$kontoid."&onlysaldo=".$onlysaldo."&id=%value%\");>" . "<img src=\"themes/{$app->Conf->WFconf['defaulttheme']}/images/delete.svg\" border=\"0\"></a>" . "</td></tr></table>";
$sql = "SELECT
".$this->app->erp->FormatUCfirst('typ')."
SUM(betrag)
FROM `fibu_buchungen_alle`
";
$where = "1";
if ($onlysaldo) {
$where .= " AND q.saldonum != 0";
}
// $count = "SELECT count(DISTINCT id) FROM kontoauszuege k WHERE $where";
$groupby = "GROUP BY typ";
// echo($sql." WHERE ".$where." ".$groupby);
break;
}
$erg = false;
foreach ($erlaubtevars as $k => $v) {
if (isset($$v)) {
$erg[$v] = $$v;
}
}
return $erg;
}
function kontoauszuege_konto_list() {
$this->app->erp->MenuEintrag("index.php?module=kontoauszuege&action=list", "&Uuml;bersicht");
// $this->app->erp->MenuEintrag("index.php?module=kontoauszuege&action=create", "Neu anlegen");
$this->app->erp->MenuEintrag("index.php", "Zur&uuml;ck");
$this->app->YUI->TableSearch('TAB1', 'kontoauszuege_konto_list', "show", "", "", basename(__FILE__), __CLASS__);
$this->app->Tpl->Parse('PAGE', "kontoauszuege_konto_list.tpl");
}
function kontoauszuege_mark_as_error(int $id) : ?string {
$sql = "SELECT id FROM fibu_buchungen_alle WHERE CONCAT(doc_typ,doc_id) <> CONCAT('kontoauszuege','".$id."') AND typ = 'kontoauszuege' AND id = ".$id;
$result = $this->app->DB->SelectArr($sql);
if (!empty($result)) {
return("Es existieren Buchungen, Eintrag wurde nicht als Importfehler markiert!");
} else {
$this->app->DB->Delete("UPDATE `kontoauszuege` SET importfehler = 1 WHERE `id` = '{$id}'");
return("Der Eintrag wurde als Importfehler markiert.");
}
return(null);
}
function kontoauszuege_list() {
// Process multi action
$auswahl = $this->app->Secure->GetPOST('auswahl');
$selectedIds = [];
if(!empty($auswahl)) {
foreach($auswahl as $selectedId) {
$selectedId = (int)$selectedId;
if($selectedId > 0) {
$selectedIds[] = $selectedId;
}
}
$submit = $this->app->Secure->GetPOST('ausfuehren');
if ($submit == 'Importfehler') {
$message = "";
foreach ($selectedIds as $selectedId) {
$result = $this->kontoauszuege_mark_as_error($selectedId);
if ($result) {
$message = $result;
}
}
if ($message) {
$this->app->Tpl->Set('MESSAGE', "<div class=\"error\">".$message."</div>");
} else {
$this->app->Tpl->Set('MESSAGE', "<div class=\"warning\">Eintr&auml;ge wurden als Importfehler markiert.</div>");
}
}
}
$this->app->erp->MenuEintrag("index.php?module=kontoauszuege&action=list", "&Uuml;bersicht");
// $this->app->erp->MenuEintrag("index.php?module=kontoauszuege&action=create", "Neu anlegen");
$this->app->erp->MenuEintrag("index.php", "Zur&uuml;ck");
$kontoid = $this->app->Secure->GetGET('kid');
$this->app->User->SetParameter('kontoauszuege_konto_id', $kontoid);
$onlysaldo = $this->app->Secure->GetGET('onlysaldo');
$this->app->User->SetParameter('kontoauszuege_only_saldo', $onlysaldo);
if ($onlysaldo) {
$this->app->Tpl->Set('INFO','Nicht zugeordnete Posten');
}
$this->app->YUI->TableSearch('TAB1', 'kontoauszuege_list', "show", "", "", basename(__FILE__), __CLASS__);
$this->app->Tpl->Parse('PAGE', "kontoauszuege_list.tpl");
}
public function kontoauszuege_delete() {
$id = (int) $this->app->Secure->GetGET('id');
$result = $this->kontoauszuege_mark_as_error($id);
if ($result) {
$this->app->Tpl->Set('MESSAGE', "<div class=\"error\">".$result."</div>");
} else {
$this->app->Tpl->Set('MESSAGE', "<div class=\"warning\">Der Eintrag wurde als Importfehler markiert.</div>");
}
$this->kontoauszuege_list();
}
/*
* Edit kontoauszuege item
* If id is empty, create a new one
*/
function kontoauszuege_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=kontoauszuege&action=edit&id=$id", "Details");
$this->app->erp->MenuEintrag("index.php?module=kontoauszuege&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
$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 kontoauszuege (".$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=kontoauszuege&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=\"',k.id,'\" />') AS `auswahl`";
$result = $this->app->DB->SelectArr("SELECT SQL_CALC_FOUND_ROWS k.id, $dropnbox, k.konto, k.buchung, k.originalbuchung, k.vorgang, k.originalvorgang, k.soll, k.originalsoll, k.haben, k.originalhaben, k.gebuehr, k.originalgebuehr, k.waehrung, k.originalwaehrung, k.fertig, k.datev_abgeschlossen, k.buchungstext, k.gegenkonto, k.belegfeld1, k.bearbeiter, k.mailbenachrichtigung, k.pruefsumme, k.kostenstelle, k.importgroup, k.diff, k.diffangelegt, k.internebemerkung, k.importfehler, k.parent, k.sort, k.doctype, k.doctypeid, k.vorauswahltyp, k.vorauswahlparameter, k.klaerfall, k.klaergrund, k.bezugtyp, k.bezugparameter, k.vorauswahlvorschlag, k.id FROM kontoauszuege k"." 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);
*/
$sql = "SELECT kurzbezeichnung FROM konten WHERE id=".$result[0]['konto'];
$konto = $this->app->DB->Select($sql);
$this->app->Tpl->Set('KONTO', $konto);
$this->app->Tpl->Set('BUCHUNG', $this->app->erp->ReplaceDatum(false,$result[0]['buchung'],false));
$this->app->Tpl->Set('SOLL', $this->app->erp->ReplaceBetrag(false,$result[0]['soll'],false));
$this->app->Tpl->Parse('PAGE', "kontoauszuege_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['konto'] = $this->app->Secure->GetPOST('konto');
$input['buchung'] = $this->app->Secure->GetPOST('buchung');
$input['originalbuchung'] = $this->app->Secure->GetPOST('originalbuchung');
$input['vorgang'] = $this->app->Secure->GetPOST('vorgang');
$input['originalvorgang'] = $this->app->Secure->GetPOST('originalvorgang');
$input['soll'] = $this->app->Secure->GetPOST('soll');
$input['originalsoll'] = $this->app->Secure->GetPOST('originalsoll');
$input['haben'] = $this->app->Secure->GetPOST('haben');
$input['originalhaben'] = $this->app->Secure->GetPOST('originalhaben');
$input['gebuehr'] = $this->app->Secure->GetPOST('gebuehr');
$input['originalgebuehr'] = $this->app->Secure->GetPOST('originalgebuehr');
$input['waehrung'] = $this->app->Secure->GetPOST('waehrung');
$input['originalwaehrung'] = $this->app->Secure->GetPOST('originalwaehrung');
$input['fertig'] = $this->app->Secure->GetPOST('fertig');
$input['datev_abgeschlossen'] = $this->app->Secure->GetPOST('datev_abgeschlossen');
$input['buchungstext'] = $this->app->Secure->GetPOST('buchungstext');
$input['gegenkonto'] = $this->app->Secure->GetPOST('gegenkonto');
$input['belegfeld1'] = $this->app->Secure->GetPOST('belegfeld1');
$input['bearbeiter'] = $this->app->Secure->GetPOST('bearbeiter');
$input['mailbenachrichtigung'] = $this->app->Secure->GetPOST('mailbenachrichtigung');
$input['pruefsumme'] = $this->app->Secure->GetPOST('pruefsumme');
$input['kostenstelle'] = $this->app->Secure->GetPOST('kostenstelle');
$input['importgroup'] = $this->app->Secure->GetPOST('importgroup');
$input['diff'] = $this->app->Secure->GetPOST('diff');
$input['diffangelegt'] = $this->app->Secure->GetPOST('diffangelegt');
*/ $input['internebemerkung'] = $this->app->Secure->GetPOST('internebemerkung');
/* $input['importfehler'] = $this->app->Secure->GetPOST('importfehler');
$input['parent'] = $this->app->Secure->GetPOST('parent');
$input['sort'] = $this->app->Secure->GetPOST('sort');
$input['doctype'] = $this->app->Secure->GetPOST('doctype');
$input['doctypeid'] = $this->app->Secure->GetPOST('doctypeid');
$input['vorauswahltyp'] = $this->app->Secure->GetPOST('vorauswahltyp');
$input['vorauswahlparameter'] = $this->app->Secure->GetPOST('vorauswahlparameter');
$input['klaerfall'] = $this->app->Secure->GetPOST('klaerfall');
$input['klaergrund'] = $this->app->Secure->GetPOST('klaergrund');
$input['bezugtyp'] = $this->app->Secure->GetPOST('bezugtyp');
$input['bezugparameter'] = $this->app->Secure->GetPOST('bezugparameter');
$input['vorauswahlvorschlag'] = $this->app->Secure->GetPOST('vorauswahlvorschlag');*/
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('KONTO', $input['konto']);
$this->app->Tpl->Set('BUCHUNG', $input['buchung']);
$this->app->Tpl->Set('ORIGINALBUCHUNG', $input['originalbuchung']);
$this->app->Tpl->Set('VORGANG', $input['vorgang']);
$this->app->Tpl->Set('ORIGINALVORGANG', $input['originalvorgang']);
$this->app->Tpl->Set('SOLL', $input['soll']);
$this->app->Tpl->Set('ORIGINALSOLL', $input['originalsoll']);
$this->app->Tpl->Set('HABEN', $input['haben']);
$this->app->Tpl->Set('ORIGINALHABEN', $input['originalhaben']);
$this->app->Tpl->Set('GEBUEHR', $input['gebuehr']);
$this->app->Tpl->Set('ORIGINALGEBUEHR', $input['originalgebuehr']);
$this->app->Tpl->Set('WAEHRUNG', $input['waehrung']);
$this->app->Tpl->Set('ORIGINALWAEHRUNG', $input['originalwaehrung']);
$this->app->Tpl->Set('FERTIG', $input['fertig']);
$this->app->Tpl->Set('DATEV_ABGESCHLOSSEN', $input['datev_abgeschlossen']);
$this->app->Tpl->Set('BUCHUNGSTEXT', $input['buchungstext']);
$this->app->Tpl->Set('GEGENKONTO', $input['gegenkonto']);
$this->app->Tpl->Set('BELEGFELD1', $input['belegfeld1']);
$this->app->Tpl->Set('BEARBEITER', $input['bearbeiter']);
$this->app->Tpl->Set('MAILBENACHRICHTIGUNG', $input['mailbenachrichtigung']);
$this->app->Tpl->Set('PRUEFSUMME', $input['pruefsumme']);
$this->app->Tpl->Set('KOSTENSTELLE', $input['kostenstelle']);
$this->app->Tpl->Set('IMPORTGROUP', $input['importgroup']);
$this->app->Tpl->Set('DIFF', $input['diff']);
$this->app->Tpl->Set('DIFFANGELEGT', $input['diffangelegt']);
$this->app->Tpl->Set('INTERNEBEMERKUNG', $input['internebemerkung']);
$this->app->Tpl->Set('IMPORTFEHLER', $input['importfehler']);
$this->app->Tpl->Set('PARENT', $input['parent']);
$this->app->Tpl->Set('SORT', $input['sort']);
$this->app->Tpl->Set('DOCTYPE', $input['doctype']);
$this->app->Tpl->Set('DOCTYPEID', $input['doctypeid']);
$this->app->Tpl->Set('VORAUSWAHLTYP', $input['vorauswahltyp']);
$this->app->Tpl->Set('VORAUSWAHLPARAMETER', $input['vorauswahlparameter']);
$this->app->Tpl->Set('KLAERFALL', $input['klaerfall']);
$this->app->Tpl->Set('KLAERGRUND', $input['klaergrund']);
$this->app->Tpl->Set('BEZUGTYP', $input['bezugtyp']);
$this->app->Tpl->Set('BEZUGPARAMETER', $input['bezugparameter']);
$this->app->Tpl->Set('VORAUSWAHLVORSCHLAG', $input['vorauswahlvorschlag']);
}
}
+3 -4
View File
@@ -647,6 +647,7 @@ class Lager extends GenLager {
$heading[] = 'Reserviert&nbsp;<sup>*</sup>'; $heading[] = 'Reserviert&nbsp;<sup>*</sup>';
$heading[] = 'Men&uuml;'; $heading[] = 'Men&uuml;';
$width[] = '10%';
$width[] = '10%'; $width[] = '10%';
$width[] = '10%'; $width[] = '10%';
$width[] = '1%'; $width[] = '1%';
@@ -667,7 +668,6 @@ class Lager extends GenLager {
$sql .= "lp.kurzbezeichnung,p.abkuerzung, $sql .= "lp.kurzbezeichnung,p.abkuerzung,
".$app->erp->FormatMenge("ifnull(lpi.menge,0)")." as fmenge , ".$app->erp->FormatMenge("ifnull(lpi.menge,0)")." as fmenge ,
".$app->erp->FormatMenge("IFNULL(mengemhd, ifnull(mengecharge,0))")." as fmengecharge ,
".$app->erp->FormatMenge("IFNULL(lpi2.gmenge,0) - IFNULL(r.reserviert,0)")." as verkaufbare, ".$app->erp->FormatMenge("IFNULL(lpi2.gmenge,0) - IFNULL(r.reserviert,0)")." as verkaufbare,
".$app->erp->FormatMenge("IFNULL(r.reserviert,0)")." as reserviert, ".$app->erp->FormatMenge("IFNULL(r.reserviert,0)")." as reserviert,
a.id "; a.id ";
@@ -705,7 +705,6 @@ class Lager extends GenLager {
}else{ }else{
$sql .= "lp.kurzbezeichnung,p.abkuerzung, $sql .= "lp.kurzbezeichnung,p.abkuerzung,
".$app->erp->FormatMenge("ifnull(lpi.menge,0)")." as fmenge , ".$app->erp->FormatMenge("ifnull(lpi.menge,0)")." as fmenge ,
'' as mengecharge,
".$app->erp->FormatMenge("IFNULL(lpi2.gmenge,0) - IFNULL(r.reserviert,0)")." as verkaufbare, ".$app->erp->FormatMenge("IFNULL(r.reserviert,0)")." as reserviert, a.id "; ".$app->erp->FormatMenge("IFNULL(lpi2.gmenge,0) - IFNULL(r.reserviert,0)")." as verkaufbare, ".$app->erp->FormatMenge("IFNULL(r.reserviert,0)")." as reserviert, a.id ";
$sql .= " $sql .= "
@@ -725,7 +724,7 @@ class Lager extends GenLager {
if($more_data1) { if($more_data1) {
$sql = "SELECT SQL_CALC_FOUND_ROWS a.id, a.nummer,a.name_de,"; $sql = "SELECT SQL_CALC_FOUND_ROWS a.id, a.nummer,a.name_de,";
$sql .= "'-',p.abkuerzung,'0' as menge,'0' as mengecharge, '0' as verkaufbare, ".$app->erp->FormatMenge("IFNULL(r.reserviert,0)")." as reserviert, a.id $sql .= "'-',p.abkuerzung,'0' as menge, '0' as verkaufbare, ".$app->erp->FormatMenge("IFNULL(r.reserviert,0)")." as reserviert, a.id
FROM artikel AS `a` FROM artikel AS `a`
LEFT JOIN (SELECT lpi.artikel, lp.kurzbezeichnung FROM `lager_platz_inhalt` AS `lpi` LEFT JOIN `lager_platz` AS `lp` ON lp.id=lpi.lager_platz GROUP BY lpi.artikel) AS `lp` ON lp.artikel=a.id LEFT JOIN (SELECT lpi.artikel, lp.kurzbezeichnung FROM `lager_platz_inhalt` AS `lpi` LEFT JOIN `lager_platz` AS `lp` ON lp.id=lpi.lager_platz GROUP BY lpi.artikel) AS `lp` ON lp.artikel=a.id
LEFT JOIN (SELECT lr.artikel, SUM(lr.menge) AS `reserviert` FROM `lager_reserviert` AS `lr` GROUP BY lr.artikel) r ON r.artikel=a.id LEFT JOIN (SELECT lr.artikel, SUM(lr.menge) AS `reserviert` FROM `lager_reserviert` AS `lr` GROUP BY lr.artikel) r ON r.artikel=a.id
@@ -2555,7 +2554,7 @@ class Lager extends GenLager {
$name_de = $this->app->DB->Select("SELECT name_de FROM artikel WHERE nummer='{$nummer}' AND geloescht!=1 AND lagerartikel=1 LIMIT 1"); $name_de = $this->app->DB->Select("SELECT name_de FROM artikel WHERE nummer='{$nummer}' AND geloescht!=1 AND lagerartikel=1 LIMIT 1");
$einheit = $this->app->DB->Select("SELECT einheit FROM artikel WHERE nummer='{$nummer}' AND geloescht!=1 AND lagerartikel=1 LIMIT 1"); $einheit = $this->app->DB->Select("SELECT einheit FROM artikel WHERE nummer='{$nummer}' AND geloescht!=1 AND lagerartikel=1 LIMIT 1");
$seriennummer = $this->app->DB->Select("SELECT seriennummer FROM artikel WHERE nummer='{$nummer}' AND geloescht!=1 AND lagerartikel=1 LIMIT 1"); $seriennummer = $this->app->DB->Select("SELECT seriennummern FROM artikel WHERE nummer='{$nummer}' AND geloescht!=1 AND lagerartikel=1 LIMIT 1");
if($seriennummer === 'keine') { if($seriennummer === 'keine') {
$seriennummer = ''; $seriennummer = '';
} }
+40 -1
View File
@@ -468,7 +468,8 @@ class Lieferschein extends GenLieferschein
AND v.aktiv = 1 AND v.ausprojekt = 0 AND v.modul != '' AND v.aktiv = 1 AND v.ausprojekt = 0 AND v.modul != ''
ORDER BY v.projekt DESC LIMIT 1"); ORDER BY v.projekt DESC LIMIT 1");
if (empty($result['modul']) || empty($result['id'])) { if (empty($result['modul']) || empty($result['id'])) {
$this->app->Tpl->addMessage('error', 'Bitte zuerst eine gültige Versandart auswählen', false, 'PAGE'); // $this->app->Tpl->addMessage('error', 'Bitte zuerst eine gültige Versandart auswählen', false, 'PAGE');
$this->app->Location->execute("index.php?module=versandpakete&action=add&lieferschein=".$id);
return; return;
} }
$versandmodul = $this->app->erp->LoadVersandModul($result['modul'], $result['id']); $versandmodul = $this->app->erp->LoadVersandModul($result['modul'], $result['id']);
@@ -960,6 +961,7 @@ class Lieferschein extends GenLieferschein
$this->app->Tpl->Set('VERSANDART',$auftragArr[0]['versandart']); $this->app->Tpl->Set('VERSANDART',$auftragArr[0]['versandart']);
/*
$tracking = $this->app->DB->SelectArr("SELECT $tracking = $this->app->DB->SelectArr("SELECT
if(v.tracking_link IS NOT NULL AND v.tracking_link != '', CONCAT(UPPER(versandunternehmen), ':<a href=\"', v.tracking_link, '\">', v.tracking, '</a>'), if(v.tracking_link IS NOT NULL AND v.tracking_link != '', CONCAT(UPPER(versandunternehmen), ':<a href=\"', v.tracking_link, '\">', v.tracking, '</a>'),
if(versandunternehmen = 'dhlexpress' AND l.land = 'DE' AND v.tracking != '', CONCAT(UPPER(versandunternehmen), ':<a href=\"https://www.dhl.de/de/privatkunden/pakete-empfangen/verfolgen.html?piececode=', v.tracking, '\" target=\"_blank\">', v.tracking, '</a>'), if(versandunternehmen = 'dhlexpress' AND l.land = 'DE' AND v.tracking != '', CONCAT(UPPER(versandunternehmen), ':<a href=\"https://www.dhl.de/de/privatkunden/pakete-empfangen/verfolgen.html?piececode=', v.tracking, '\" target=\"_blank\">', v.tracking, '</a>'),
@@ -1018,7 +1020,32 @@ class Lieferschein extends GenLieferschein
if (!is_null($tmp)) { if (!is_null($tmp)) {
$this->app->Tpl->Set('TRACKING',implode(', ',$tmp)); $this->app->Tpl->Set('TRACKING',implode(', ',$tmp));
} }
*/
$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
WHERE l.id = ".$id." OR v.lieferschein_ohne_pos = ".$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));
$returnOrders = (array)$this->app->DB->SelectArr( $returnOrders = (array)$this->app->DB->SelectArr(
sprintf( sprintf(
@@ -2259,6 +2286,18 @@ class Lieferschein extends GenLieferschein
} }
} }
break; break;
case 'versanduebergabe':
if(!empty($selectedIds)) {
$this->app->DB->Update(
sprintf(
"UPDATE `lieferschein`
SET `versand_status` = 1
WHERE `id` IN (%s) AND `versand_status` = 0",
implode(',' , $selectedIds)
)
);
}
break;
} }
} }
} }
+7 -3
View File
@@ -253,9 +253,13 @@ class Logfile {
} }
} }
} }
if(is_array($meldung)) {
$meldung = $this->app->DB->real_escape_string(print_r($meldung, true)); $module = $this->app->DB->real_escape_string(is_scalar($module) ? strval($module) : print_r($module, true));
} $action = $this->app->DB->real_escape_string(is_scalar($action) ? strval($action) : print_r($action, true));
$meldung = $this->app->DB->real_escape_string(is_scalar($meldung) ? strval($meldung) : print_r($meldung, true));
$dump = $this->app->DB->real_escape_string(is_scalar($dump) ? strval($dump) : print_r($dump, true));
$functionname = $this->app->DB->real_escape_string(is_scalar($functionname) ? strval($functionname) : print_r($functionname, true));
$this->app->DB->Insert( $this->app->DB->Insert(
sprintf( sprintf(
"INSERT INTO logfile (module,action,meldung,dump,datum,bearbeiter,funktionsname) "INSERT INTO logfile (module,action,meldung,dump,datum,bearbeiter,funktionsname)
+721
View File
@@ -0,0 +1,721 @@
<?php
/*
* Copyright (c) 2022 OpenXE project
*/
use Xentral\Components\Database\Exception\QueryFailureException;
class Mahnwesen {
function __construct($app, $intern = false) {
$this->app = $app;
if ($intern)
return;
$this->app->ActionHandlerInit($this);
$this->app->ActionHandler("list", "mahnwesen_list");
$this->app->ActionHandler("create", "mahnwesen_edit"); // This automatically adds a "New" button
$this->app->ActionHandler("edit", "mahnwesen_edit");
$this->app->ActionHandler("einstellungen", "mahnwesen_einstellungen");
$this->app->ActionHandler("delete", "mahnwesen_delete");
$this->app->DefaultActionHandler("list");
$this->app->ActionHandlerListen($app);
}
public function Install() {
/* Fill out manually later */
}
public function TableSearch($app, $name, $erlaubtevars) {
switch ($name) {
case "mahnwesen_list":
$extended_mysql55 = ",'de_DE'";
$allowed['mahnwesen_list'] = array('list');
$heading = array('', '', 'Rechnung', 'Vom', 'Kd-Nr.', 'Kunde', 'Land', 'Projekt', 'Zahlung', 'Betrag (brutto)', 'W&auml;hrung', 'Zahlstatus', 'Differenz', 'Status','F&auml;llig am','Tage','Mahnstufe','Brief','E-Mail','Gemahnt','Mahn-Datum','Sperre','Interne Bemerkung','Men&uuml;');
$width = array('1%','1%','01%', '01%', '01%', '05%', '01%', '01%', '01%', '01%', '01%', '01%', '01%', '01%', '01%', '01%', '01%', '01%', '01%', '01%', '01%', '01%', '20%', '1%'); // Fill out manually later
// columns that are aligned right (numbers etc)
// $alignright = array(4,5,6,7,8);
$faellig_datum = "DATE_ADD(r.datum, INTERVAL r.zahlungszieltage DAY)";
$faellig_tage = "DATEDIFF(CURRENT_DATE,DATE_ADD(r.datum, INTERVAL r.zahlungszieltage DAY))";
$mahn_druck = "if(m.druck,'Ja','')";
$mahn_mail = "if(m.mail,'Ja','')";
$mahn_versendet = "if(r.versendet_mahnwesen,'Ja','')";
$findcols = array('r.id','r.id','r.belegnr', 'r.datum', 'r.kundennummer','r.name', 'r.land','p.abkuerzung','r.zahlungsweise','r.soll','r.waehrung','r.zahlungsstatus','r.soll','r.status',$faellig_datum,$faellig_tage,'m.name',$mahn_druck,$mahn_mail,$mahn_versendet,'mahnwesen_datum');
$searchsql = array('r.belegnr', 'r.name', $faellig_datum, 'r.kundennummer');
$defaultorder = 1;
$defaultorderdesc = 0;
$dropnbox = "'<img src=./themes/new/images/details_open.png class=details>' AS `open`, CONCAT('<input type=\"checkbox\" name=\"auswahl[]\" value=\"',r.id,'\" />') AS `auswahl`";
$menu = "<table cellpadding=0 cellspacing=0><tr><td nowrap>" . "<a href=\"index.php?module=rechnung&action=edit&id=%value%\"><img src=\"./themes/{$app->Conf->WFconf['defaulttheme']}/images/edit.svg\" border=\"0\"></a>" . "</td></tr></table>";
$sql = "SELECT SQL_CALC_FOUND_ROWS
r.id,
$dropnbox,
r.belegnr,
".$app->erp->FormatDateShort('r.datum')." as vom,
if(r.kundennummer <> '',r.kundennummer,adr.kundennummer),
CONCAT(" . $app->erp->MarkerUseredit("r.name", "r.useredittimestamp") . ", if(r.internebezeichnung!='',CONCAT('<br><i style=color:#999>',r.internebezeichnung,'</i>'),'')) as kunde,
r.land as land,
p.abkuerzung as projekt,
r.zahlungsweise as zahlungsweise,
FORMAT(r.soll,2{$extended_mysql55} ) as soll,
ifnull(r.waehrung,'EUR'),
r.zahlungsstatus as zahlung,
if(r.soll-r.ist!=0 AND r.ist > 0,FORMAT(r.ist-r.soll,2{$extended_mysql55}),FORMAT((r.soll-r.ist)*-1,2{$extended_mysql55})) as fehlt,
if(r.status = 'storniert' AND r.teilstorno = 1,'TEILSTORNO',UPPER(r.status)) as status,
".$app->erp->FormatDateShort($faellig_datum)." as faellig_datum,
if(".$faellig_tage.">0,".$faellig_tage.",'') as faellig_tage,
m.name,
".$mahn_druck.",
".$mahn_mail.",
".$mahn_versendet.",
if(mahnwesen_datum <> '0000-00-00',".$app->erp->FormatDateShort('mahnwesen_datum').",''),
if(r.mahnwesen_gesperrt,'Ja',''),
REPLACE(r.mahnwesen_internebemerkung,'\r\n','<br> '),
r.id
FROM rechnung r LEFT JOIN projekt p ON p.id=r.projekt LEFT JOIN adresse adr ON r.adresse=adr.id LEFT JOIN auftrag au ON au.id = r.auftragid LEFT JOIN mahnwesen m ON r.mahnwesen = m.id";
$where = " r.belegnr <> ''";
// Toggle filters
$this->app->Tpl->Add('JQUERYREADY', "$('#zu_mahnen').click( function() { fnFilterColumn1( 0 ); } );");
$this->app->Tpl->Add('JQUERYREADY', "$('#inkl_bezahlte').click( function() { fnFilterColumn2( 0 ); } );");
$this->app->Tpl->Add('JQUERYREADY', "$('#inkl_gesperrte').click( function() { fnFilterColumn3( 0 ); } );");
for ($r = 1;$r <= 3;$r++) {
$this->app->Tpl->Add('JAVASCRIPT', '
function fnFilterColumn' . $r . ' ( i )
{
if(oMoreData' . $r . $name . '==1)
oMoreData' . $r . $name . ' = 0;
else
oMoreData' . $r . $name . ' = 1;
$(\'#' . $name . '\').dataTable().fnFilter(
\'\',
i,
0,0
);
}
');
}
$more_data1 = $app->Secure->GetGET("more_data1");
if ($more_data1 == 1) {
$where .= " AND NOT r.versendet_mahnwesen AND r.mahnwesen <> ''";
} else {
}
$more_data2 = $app->Secure->GetGET("more_data2");
if ($more_data2 == 1) {
} else {
$where .= " AND r.zahlungsstatus <> 'bezahlt' ";
}
$more_data3 = $app->Secure->GetGET("more_data3");
if ($more_data3 == 1) {
}
else {
$where .= " AND NOT r.mahnwesen_gesperrt ";
}
// END Toggle filters
$count = "SELECT count(DISTINCT id) FROM rechnung r WHERE $where";
// $groupby = "";
break;
case "mahnwesen_einstellungen":
$allowed['mahnwesen_list'] = array('list');
$heading = array('', 'Tage', 'Name', 'Gebuehr', 'E-Mail', 'Druck', 'Men&uuml;');
$width = array('1%','1%','10%'); // Fill out manually later
// columns that are aligned right (numbers etc)
// $alignright = array(4,5,6,7,8);
$findcols = array('m.id', 'm.tage','m.name', 'm.gebuehr', 'm.mail','m.druck');
$searchsql = array('m.name','m.tage', 'm.gebuehr', 'm.versandmethode');
$defaultorder = 1;
$defaultorderdesc = 1;
$dropnbox = "'<img src=./themes/new/images/details_open.png class=details>' AS `open`";
$menu = "<table cellpadding=0 cellspacing=0><tr><td nowrap>" . "<a href=\"index.php?module=mahnwesen&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=mahnwesen&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
m.id,
$dropnbox,
m.tage,
m.name,
".$this->app->erp->FormatMenge('m.gebuehr',2).",
if(m.mail,'Ja',''),
if(m.druck,'Ja',''),
m.id FROM mahnwesen m";
$where = "1";
$count = "SELECT count(DISTINCT id) FROM mahnwesen WHERE $where";
// $groupby = "";
break;
}
$erg = false;
foreach ($erlaubtevars as $k => $v) {
if (isset($$v)) {
$erg[$v] = $$v;
}
}
return $erg;
}
function mahnwesen_list() {
$this->app->erp->MenuEintrag("index.php?module=mahnwesen&action=list", "&Uuml;bersicht");
// $this->app->erp->MenuEintrag("index.php?module=mahnwesen&action=create", "Neu anlegen");
// $this->app->erp->MenuEintrag("index.php?module=mahnwesen&action=einstellungen", "Einstellungen");
if($this->app->Secure->GetPOST('mahnstufe_berechnen') && $this->app->erp->RechteVorhanden('rechnung', 'edit')) {
$this->app->erp->rechnung_zahlstatus_berechnen();
$sql = "
SELECT
r.id, r.mahnwesen, rid_mid.mahnwesen_neu
FROM
rechnung r
INNER JOIN
(
SELECT
id_tage.id,
m.id AS mahnwesen_neu
FROM
mahnwesen m
INNER JOIN(
SELECT
id,
MAX(tage) AS tage
FROM
(
SELECT
r.id,
m.tage
FROM
rechnung r
INNER JOIN mahnwesen m ON
DATEDIFF(
CURRENT_DATE,
DATE_ADD(
r.datum,
INTERVAL r.zahlungszieltage DAY
)
) > m.tage
WHERE
r.zahlungsstatus = 'offen'
ORDER BY
`r`.`id` ASC
) temp
GROUP BY
id
) id_tage
ON
m.tage = id_tage.tage
) rid_mid
ON r.id = rid_mid.id
";
$offene_rechnungen = $this->app->DB->SelectArr($sql);
foreach ($offene_rechnungen as $offene_rechnung) {
if ($offene_rechnung['mahnwesen'] != $offene_rechnung['mahnwesen_neu']) {
$sql = "UPDATE rechnung set mahnwesen = ".$offene_rechnung['mahnwesen_neu'].", versendet_mahnwesen = 0 WHERE id = ".$offene_rechnung['id'];
$this->app->DB->Update($sql);
}
}
}
if($this->app->Secure->GetPOST('sel_aktion') && $this->app->erp->RechteVorhanden('rechnung', 'edit'))
{
$drucker = $this->app->Secure->GetPOST('seldrucker');
$aktion = $this->app->Secure->GetPOST('sel_aktion');
$auswahl = $this->app->Secure->GetPOST('auswahl');
if($drucker > 0) {
$this->app->erp->BriefpapierHintergrundDisable($drucker);
}
if(is_array($auswahl)) {
foreach($auswahl as $auswahlKey => $auswahlValue) {
if((int)$auswahlValue > 0) {
$auswahl[$auswahlKey] = (int)$auswahlValue;
}
else {
unset($auswahl[$auswahlKey]);
}
}
switch($aktion)
{
case 'bezahlt':
$this->app->DB->Update("UPDATE rechnung SET zahlungsstatus='bezahlt', bezahlt_am = now(), mahnwesenfestsetzen='1',mahnwesen_internebemerkung=CONCAT(mahnwesen_internebemerkung,'\r\n','Manuell als bezahlt markiert am ".date('d.m.Y')."') WHERE id IN (".implode(', ',$auswahl).')');
break;
case 'offen':
$this->app->DB->Update("UPDATE rechnung SET zahlungsstatus='offen',bezahlt_am = NULL, mahnwesen_internebemerkung=CONCAT(mahnwesen_internebemerkung,'\r\n','Manuell als bezahlt entfernt am ".date('d.m.Y')."') WHERE id IN (".implode(', ',$auswahl).')');
break;
case 'mahnung_reset':
$sql = "UPDATE rechnung SET mahnwesen='', versendet_mahnwesen ='', mahnwesen_datum = '0000-00-00' WHERE id IN (".implode(', ',$auswahl).')';
$this->app->DB->Update($sql);
break;
case 'mahnen':
$mails = 0;
$drucke = 0;
foreach ($auswahl as $rechnung_id) {
$mahnung = $this->MahnwesenMessage($rechnung_id);
// Check first
if (empty($mahnung)) {
continue;
}
if ($mahnung['mail'] && empty($mahnung['rechnung']['email'])) {
$msg .= "<div class=\"error\">Keine E-Mail-Adresse hinterlegt bei Rechnung ".$mahnung['rechnung']['belegnr'].".</div>";
continue;
}
if ($mahnung['druck']) {
$drucker = $this->app->Secure->GetPOST('seldrucker');
if($drucker > 0) {
$this->app->erp->BriefpapierHintergrundDisable($drucker);
} else {
$msg .= "<div class=\"error\">Kein Drucker gew&auml;hlt.</div>";
break;
}
}
// Create PDF
if(class_exists('RechnungPDFCustom')) {
$Brief = new RechnungPDFCustom($this->app,$projekt);
}
else {
$Brief = new RechnungPDF($this->app,$projekt);
}
$Brief->GetRechnung($rechnung_id,$mahnung['betreff'],0,null,$mahnung['body']);
$tmpfile = $Brief->displayTMP();
$fileid = $this->app->erp->CreateDatei($Brief->filename,$mahnung['betreff'],"","",$tmpfile,$this->app->User->GetName());
if ($mahnung['druck']) {
$this->app->printer->Drucken($drucker,$tmpfile);
$this->MahnungCRM('brief',$mahnung['rechnung'], $mahnung['betreff'], $mahnung['body'],$fileid,$Brief->filename);
$this->app->erp->RechnungProtokoll($rechnung_id,'Mahnung gedruckt');
$drucke++;
}
if ($mahnung['mail']) {
$senderName = $this->app->User->GetName()." (".$this->app->erp->GetFirmaAbsender().")";
$senderAddress = $this->app->erp->GetFirmaMail();
// function MailSend($from,$from_name,$to,$to_name,$betreff,$text,$files="",$projekt="",$signature=true,$cc="",$bcc="", $system = false)
$result = $this->app->erp->MailSend(
$senderAddress,
$senderName,
$mahnung['rechnung']['email'],
$mahnung['rechnung']['email'],
htmlentities($mahnung['betreff']),
htmlentities($mahnung['body']),
[$tmpfile],
$mahnung['rechnung']['projekt'],
true,
$cc,
'',
true
);
if ($result = 0) {
$msg .= "<div class=\"error\">Fehler beim E-Mail-Versand bei Rechnung ".$mahnung['rechnung']['belegnr'].".</div>";
continue;
}
$this->MahnungCRM('email',$mahnung['rechnung'], $mahnung['betreff'], $mahnung['body'],$fileid,$Brief->filename);
$this->app->erp->RechnungProtokoll($rechnung_id,'Mahnung versendet');
$mails++;
}
unlink($tmpfile);
$sql = "UPDATE rechnung set mahnwesen_datum = CURRENT_DATE, versendet_mahnwesen = 1 WHERE id IN (".implode(', ',$auswahl).')';
$this->app->DB->Update($sql);
}
$msg .= "<div class=\"success\">$mails E-Mails versendet, $drucke Dokumente gedruckt.</div>";
break;
}
}
} // ende ausfuehren
if (!empty($msg)) {
$this->app->Tpl->Set('MESSAGE', $msg);
}
if($this->app->erp->RechteVorhanden('rechnung', 'manuellbezahltmarkiert')){
$this->app->Tpl->Set('ALSBEZAHLTMARKIEREN', '<option value="bezahlt">{|als bezahlt markieren|}</option>');
}
$this->app->Tpl->Set('SELDRUCKER', $this->app->erp->GetSelectDrucker($this->app->User->GetParameter('rechnung_list_drucker')));
$this->app->YUI->TableSearch('TAB1', 'mahnwesen_list', "show", "", "", basename(__FILE__), __CLASS__);
$this->app->Tpl->Parse('PAGE', "mahnwesen_list.tpl");
}
function mahnwesen_einstellungen() {
$this->app->erp->MenuEintrag("index.php?module=mahnwesen&action=einstellungen", "&Uuml;bersicht");
$this->app->erp->MenuEintrag("index.php?module=mahnwesen&action=create", "Neu anlegen");
$this->app->erp->MenuEintrag("index.php?module=einstellungen&action=list", "Zur&uuml;ck");
$this->app->erp->Headlines('Mahnwesen Einstellungen');
$this->app->YUI->TableSearch('TAB1', 'mahnwesen_einstellungen', "show", "", "", basename(__FILE__), __CLASS__);
$this->app->Tpl->Parse('PAGE', "mahnwesen_einstellungen.tpl");
}
public function mahnwesen_delete() {
$id = (int) $this->app->Secure->GetGET('id');
$this->app->DB->Delete("DELETE FROM `mahnwesen` WHERE `id` = '{$id}'");
$this->app->Tpl->Set('MESSAGE', "<div class=\"error\">Der Eintrag wurde gel&ouml;scht.</div>");
$this->mahnwesen_einstellungen();
}
/*
* Edit mahnwesen item
* If id is empty, create a new one
*/
function mahnwesen_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=mahnwesen&action=edit&id=$id", "Details");
$this->app->erp->MenuEintrag("index.php?module=mahnwesen&action=einstellungen", "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
$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 mahnwesen (".$columns.") VALUES (".$values.") ON DUPLICATE KEY UPDATE ".$update;
$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=mahnwesen&action=einstellungen&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=\"',m.id,'\" />') AS `auswahl`";
$result = $this->app->DB->SelectArr("SELECT SQL_CALC_FOUND_ROWS m.id, $dropnbox, m.name, m.tage, m.gebuehr, m.mail, m.druck, m.id FROM mahnwesen m"." 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('MAIL', $result[0]['mail']?'checked':'');
$this->app->Tpl->Set('DRUCK', $result[0]['druck']?'checked':'');
$this->app->Tpl->Parse('PAGE', "mahnwesen_edit.tpl");
}
/**
* Get all paramters from html form and save into $input
*/
public function GetInput(): array {
$input = array();
$input['name'] = $this->app->Secure->GetPOST('name');
$input['tage'] = $this->app->Secure->GetPOST('tage');
$input['gebuehr'] = $this->app->Secure->GetPOST('gebuehr');
$input['mail'] = $this->app->Secure->GetPOST('mail')?'1':'0';
$input['druck'] = $this->app->Secure->GetPOST('druck')?'1':'0';
return $input;
}
/*
* Set all fields in the page corresponding to $input
*/
function SetInput($input) {
$this->app->Tpl->Set('NAME', $input['name']);
$this->app->Tpl->Set('TAGE', $input['tage']);
$this->app->Tpl->Set('GEBUEHR', $input['gebuehr']);
$this->app->Tpl->Set('MAIL', $input['mail']);
$this->app->Tpl->Set('DRUCK', $input['druck']);
}
/*
* Constuct the Mahnwesen message according to GeschäftsbriefVorlage
* Returns Array (string betreff, string body, boolean mail, boolean druck, array rechnung)
*/
function MahnwesenMessage($rechnung_id) {
$sql = "SELECT
r.*,
".$this->app->erp->FormatDate('datum')." datum,
".$this->app->erp->FormatDate('CURRENT_DATE')." heute,
m.name as mahn_name,
m.tage as mahn_tage,
m.gebuehr as mahn_gebuehr,
m.mail as mahn_mail,
m.druck as mahn_druck
FROM
rechnung r
INNER JOIN
mahnwesen m
ON
r.mahnwesen = m.id WHERE r.id = ".$rechnung_id." LIMIT 1";
$rechnungarr = $this->app->DB->SelectArr($sql)[0];
if (empty($rechnungarr)) {
return;
}
$adresse = $rechnungarr['adresse'];
if($sprache==''){
$sprache = $rechnungarr['sprache'];
}
if($sprache==''){
$sprache = $this->app->DB->Select("SELECT sprache FROM adresse WHERE id='$adresse' LIMIT 1");
}
$kundennummer = $rechnungarr['kundennummer'];
$projekt = $rechnungarr['projekt'];
$auftrag= $rechnungarr['auftrag'];
$buchhaltung= $rechnungarr['buchhaltung'];
$lieferschein = $rechnungarr['lieferschein'];
$lieferscheinid = $lieferschein;
if($lieferscheinid){
$lieferschein = $this->app->DB->Select("SELECT belegnr FROM lieferschein WHERE id='$lieferschein' LIMIT 1");
}else{
$lieferschein = '';
}
$bestellbestaetigung = $rechnungarr['kundennummer'];
$datum = $rechnungarr['datum_de'];
$datum_sql = $rechnungarr['datum'];
$belegnr = $rechnungarr['belegnr'];
$doppel = $rechnungarr['doppel'];
$freitext = $rechnungarr['freitext'];
$ustid = $rechnungarr['ustid'];
$soll = $rechnungarr['soll'];
$ist = $rechnungarr['ist'];
$land = $rechnungarr['land'];
$mahnwesen_datum = $rechnungarr['mahnwesen_datum'];
$mahnwesen_datum_deutsch = $rechnungarr['mahnwesen_datum_de'];
$zahlungsweise = $rechnungarr['zahlungsweise'];
$zahlungsstatus = $rechnungarr['zahlungsstatus'];
$zahlungszieltage = $rechnungarr['zahlungszieltage'];
$zahlungszieltageskonto = $rechnungarr['zahlungszieltageskonto'];
$zahlungszielskonto = $rechnungarr['zahlungszielskonto'];
$waehrung = $rechnungarr['waehrung'];
$zahlungdatum = $this->app->DB->Select("SELECT DATE_FORMAT(DATE_ADD(datum, INTERVAL $zahlungszieltage DAY),'%d.%m.%Y') FROM rechnung WHERE id='$rechnung_id' LIMIT 1");
if($_datum!=null)
{
$mahnwesen_datum = $this->app->String->Convert($_datum,'%1.%2.%3','%3-%2-%1');
$mahnwesen_datum_deutsch = $_datum;
}
$zahlungsweise = strtolower($zahlungsweise);
/*
if($als=='zahlungserinnerung')
{
$body = $this->GetGeschaeftsBriefText("MahnwesenZahlungserinnerung",$sprache,$projekt,"rechnung",$rechnung_id);
$tage = $this->GetKonfiguration('mahnwesen_m1_tage');
}
else if($als=='mahnung1')
{
$body = $this->GetGeschaeftsBriefText("MahnwesenMahnung1",$sprache,$projekt,"rechnung",$rechnung_id);
$mahngebuehr = $this->GetKonfiguration('mahnwesen_m1_gebuehr');
$tage = $this->GetKonfiguration('mahnwesen_m2_tage');
}
else if($als=='mahnung2')
{
$body = $this->GetGeschaeftsBriefText("MahnwesenMahnung2",$sprache,$projekt,"rechnung",$rechnung_id);
$tage = $this->GetKonfiguration('mahnwesen_m3_tage');
$mahngebuehr = $this->GetKonfiguration('mahnwesen_m2_gebuehr');
}
else if($als=='mahnung3')
{
$body = $this->GetGeschaeftsBriefText("MahnwesenMahnung3",$sprache,$projekt,"rechnung",$rechnung_id);
$tage = $this->GetKonfiguration('mahnwesen_ik_tage');
$mahngebuehr = $this->GetKonfiguration('mahnwesen_m3_gebuehr');
}
else if($als=='inkasso')
{
$body = $this->GetGeschaeftsBriefText("MahnwesenInkasso",$sprache,$projekt,"rechnung",$rechnung_id);
//$tage = $this->GetKonfiguration("mahnwesen_ik_tage");
$tage = 3; //eigentlich vorbei
$mahngebuehr = $this->GetKonfiguration('mahnwesen_ik_gebuehr');
}
else
{
$body = $this->app->erp->Beschriftung("dokument_anschreiben");
} */
$betreff = $this->app->erp->GetGeschaeftsBriefBetreff($rechnungarr['mahn_name'],$sprache,$projekt,"rechnung",$rechnung_id);
$body = $this->app->erp->GetGeschaeftsBriefText($rechnungarr['mahn_name'],$sprache,$projekt,"rechnung",$rechnung_id);
if (empty($betreff) || empty($body)) {
throw new QueryFailureException("Geschaeftsbrief-Vorlage nicht gefunden: ''".$rechnungarr['mahn_name']."'");
}
$offen = $this->app->erp->GetSaldoDokument($rechnung_id, 'rechnung');
if($tage <=0) $tage = 0;
/* $datummahnung= $this->app->DB->Select("SELECT DATE_FORMAT(DATE_ADD('$mahnwesen_datum', INTERVAL $tage DAY),'%d.%m.%Y')");
$datumrechnungzahlungsziel= $this->app->DB->Select("SELECT DATE_FORMAT(DATE_ADD('$datum_sql', INTERVAL $zahlungszieltage DAY),'%d.%m.%Y')");
$tage_ze = $zahlungszieltage + $this->GetKonfiguration('mahnwesen_m1_tage');
$datumzahlungserinnerung= $this->app->DB->Select("SELECT DATE_FORMAT(DATE_ADD('$datum_sql', INTERVAL $tage_ze DAY),'%d.%m.%Y')");*/
// checkstamp $this->CheckStamp("jhdskKUHsiusakiakuhsd"); // errechnet aus laufzeit und kundenid // wenn es nicht drinnen ist darf es nicht gehen
/*
if($mahngebuehr=='' || !is_numeric($mahngebuehr))
$mahngebuehr = 0;
//$offen= '11,23';
$body = str_replace('{RECHNUNG}',$belegnr,$body);
$body = str_replace('{BELEGNR}',$belegnr,$body);
$body = str_replace('{DATUMRECHNUNG}',$datum,$body);
$body = str_replace('{TAGE}',$tage,$body);
$body = str_replace('{OFFEN}',$this->app->erp->formatMoney(-$offen['betrag'],$offen['waehrung']),$body);
$body = str_replace('{SOLL}',$this->app->erp->formatMoney($soll,$waehrung),$body);
$body = str_replace('{SUMME}',$this->app->erp->formatMoney($soll - $ist + $mahngebuehr,$waehrung),$body);
$body = str_replace('{IST}',$this->app->erp->formatMoney($ist,$waehrung),$body);
$body = str_replace('{DATUM}',$datummahnung,$body);
$body = str_replace('{MAHNGEBUEHR}',$this->app->erp->formatMoney($mahngebuehr,$waehrung),$body);
$body = str_replace('{OFFENMITMAHNGEBUEHR}',$this->app->erp->formatMoney($mahngebuehr + $soll - $ist,$waehrung),$body);
$body = str_replace('{MAHNDATUM}',$mahnwesen_datum_deutsch,$body);
// Im Protokoll suchen Datum von Zahlungserinnerung, Mahnung 1, Mahnung 2, Mahnung 3
$mahnung1 = $this->app->DB->Select("SELECT DATE_FORMAT(zeit,'%d.%m.%Y') FROM rechnung_protokoll WHERE rechnung='$rechnung_id'
AND grund LIKE 'Mahnung1 versendet%' ORDER by Zeit DESC LIMIT 1");
$mahnung2 = $this->app->DB->Select("SELECT DATE_FORMAT(zeit,'%d.%m.%Y') FROM rechnung_protokoll WHERE rechnung='$rechnung_id'
AND grund LIKE 'Mahnung2 versendet%' ORDER by Zeit DESC LIMIT 1");
$mahnung3 = $this->app->DB->Select("SELECT DATE_FORMAT(zeit,'%d.%m.%Y') FROM rechnung_protokoll WHERE rechnung='$rechnung_id'
AND grund LIKE 'Mahnung3 versendet%' ORDER by Zeit DESC LIMIT 1");
$body = str_replace('{DATUMMAHNUNG1}',$mahnung1,$body);
$body = str_replace('{DATUMMAHNUNG2}',$mahnung2,$body);
$body = str_replace('{DATUMMAHNUNG3}',$mahnung3,$body);
$body = str_replace('{DATUMZAHLUNGSERINNERUNGFAELLIG}',$datumzahlungserinnerung,$body);
$body = str_replace('{DATUMZAHLUNGSERINNERUNG}',$datumzahlungserinnerung,$body);
$body = str_replace('{DATUMRECHNUNGZAHLUNGSZIEL}',$datumrechnungzahlungsziel,$body);*/
$mapping = [
'rechnung' => $belegnr,
'belegnr' => $belegnr,
'datum' => $datum_sql,
'offen' => $this->app->erp->EUR(-$offen['betrag'])." ".$offen['waehrung'],
'mahngebuehr' => $this->app->erp->EUR($rechnungarr['mahn_gebuehr']),
'heute' => $rechnungarr['heute']
];
$betreff = $this->app->erp->ParseVars($mapping,$betreff);
$body = $this->app->erp->ParseVars($mapping,$body);
$body = $this->app->erp->ParseUserVars('rechnung',$rechnung_id,$body);
return(array(
'betreff' => $betreff,
'body' => $body,
'mail' => $rechnungarr['mahn_mail'] != 0,
'druck' => $rechnungarr['mahn_druck'] != 0,
'adresse' => $rechnungarr['adresse'],
'empfaenger' => $rechnungarr['email'],
'projekt' => $rechnungarr['projekt'],
'rechnung' => $rechnungarr
));
}
/*
* Create CRM entry for mahnung
* typ = brief, email
*/
function MahnungCRM(string $typ, array $rechnung, $betreff, $text, $fileid, $filename) {
$data = array();
$data['typ'] = $typ;
$data['projekt'] = $rechnung['projekt'];
$data['datum'] = date('Y-m-d');
$data['uhrzeit'] = date('Y-m-d H:i:s');
$data['user'] = $rechnung['adresse'];
$data['an'] = $rechnung['name'];
$data['adresse'] = $rechnung['strasse'];
$data['plz'] = $rechnung['plz'];
$data['ort'] = $rechnung['ort'];
$data['betreff'] = $betreff;
$data['content'] = $text;
$data['email_an'] = $rechnung['email'];
$data['sent'] = 1;
$crm_id = $this->app->erp->DokumentCreate($data,$this->app->User->GetAdresse());
$this->app->erp->AddDateiStichwort($fileid,'anhang','dokument',$crm_id);
}
}
+2 -1
View File
@@ -401,7 +401,8 @@ class Managementboard
/** @var Rechnungslauf $obj */ /** @var Rechnungslauf $obj */
$obj = $this->app->erp->LoadModul('rechnungslauf'); $obj = $this->app->erp->LoadModul('rechnungslauf');
if($obj){ if($obj){
$w[24] = $obj->RechnungslaufRechnungslauf(true); // $w[24] = $obj->RechnungslaufRechnungslauf(true); // This does not exist, presumably old xentral function
$w[24] = 0;
} }
else { else {
$w[24] = 0; $w[24] = 0;
-56
View File
@@ -1,56 +0,0 @@
<?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 Paketmarke {
/** @var Application $app */
var $app;
/**
* Paketmarke constructor.
*
* @param Application $app
* @param bool $intern
*/
public function __construct($app, $intern = false) {
//parent::GenPaketmarke($app);
$this->app=$app;
if($intern) {
return;
}
$this->app->ActionHandlerInit($this);
$this->app->ActionHandler("create","PaketmarkeCreatePopup");
$this->app->ActionHandler("tracking","PaketmarkeTracking");
$this->app->ActionHandlerListen($app);
}
function PaketmarkeTracking()
{
$this->app->erp->Headlines('Paketmarken Drucker');
$this->app->Tpl->Set('PAGE',"Tracking-Nummer: <input type=\"text\" id=\"tracking\"><script type=\"text/javascript\">document.getElementById(\"tracking\").focus(); </script>");
//$this->app->BuildNavigation=false;
}
function PaketmarkeCreatePopup()
{
$this->app->erp->Headlines('Paketmarken Drucker');
$this->app->erp->PaketmarkeDHLEmbedded('PAGE','lieferschein');
}
}
+15 -12
View File
@@ -49,11 +49,16 @@ class Produktion {
$width = array('1%','1%','10%'); // Fill out manually later $width = array('1%','1%','10%'); // Fill out manually later
// $findcols = array('p.datum', 'p.art', 'p.projekt', 'p.belegnr', 'p.internet', 'p.bearbeiter', 'p.angebot', 'p.freitext', 'p.internebemerkung', 'p.status', 'p.adresse', 'p.name', 'p.abteilung', 'p.unterabteilung', 'p.strasse', 'p.adresszusatz', 'p.ansprechpartner', 'p.plz', 'p.ort', 'p.land', 'p.ustid', 'p.ust_befreit', 'p.ust_inner', 'p.email', 'p.telefon', 'p.telefax', 'p.betreff', 'p.kundennummer', 'p.versandart', 'p.vertrieb', 'p.zahlungsweise', 'p.zahlungszieltage', 'p.zahlungszieltageskonto', 'p.zahlungszielskonto', 'p.bank_inhaber', 'p.bank_institut', 'p.bank_blz', 'p.bank_konto', 'p.kreditkarte_typ', 'p.kreditkarte_inhaber', 'p.kreditkarte_nummer', 'p.kreditkarte_pruefnummer', 'p.kreditkarte_monat', 'p.kreditkarte_jahr', 'p.firma', 'p.versendet', 'p.versendet_am', 'p.versendet_per', 'p.versendet_durch', 'p.autoversand', 'p.keinporto', 'p.keinestornomail', 'p.abweichendelieferadresse', 'p.liefername', 'p.lieferabteilung', 'p.lieferunterabteilung', 'p.lieferland', 'p.lieferstrasse', 'p.lieferort', 'p.lieferplz', 'p.lieferadresszusatz', 'p.lieferansprechpartner', 'p.packstation_inhaber', 'p.packstation_station', 'p.packstation_ident', 'p.packstation_plz', 'p.packstation_ort', 'p.autofreigabe', 'p.freigabe', 'p.nachbesserung', 'p.gesamtsumme', 'p.inbearbeitung', 'p.abgeschlossen', 'p.nachlieferung', 'p.lager_ok', 'p.porto_ok', 'p.ust_ok', 'p.check_ok', 'p.vorkasse_ok', 'p.nachnahme_ok', 'p.reserviert_ok', 'p.bestellt_ok', 'p.zeit_ok', 'p.versand_ok', 'p.partnerid', 'p.folgebestaetigung', 'p.zahlungsmail', 'p.stornogrund', 'p.stornosonstiges', 'p.stornorueckzahlung', 'p.stornobetrag', 'p.stornobankinhaber', 'p.stornobankkonto', 'p.stornobankblz', 'p.stornobankbank', 'p.stornogutschrift', 'p.stornogutschriftbeleg', 'p.stornowareerhalten', 'p.stornomanuellebearbeitung', 'p.stornokommentar', 'p.stornobezahlt', 'p.stornobezahltam', 'p.stornobezahltvon', 'p.stornoabgeschlossen', 'p.stornorueckzahlungper', 'p.stornowareerhaltenretour', 'p.partnerausgezahlt', 'p.partnerausgezahltam', 'p.kennen', 'p.logdatei', 'p.bezeichnung', 'p.datumproduktion', 'p.anschreiben', 'p.usereditid', 'p.useredittimestamp', 'p.steuersatz_normal', 'p.steuersatz_zwischen', 'p.steuersatz_ermaessigt', 'p.steuersatz_starkermaessigt', 'p.steuersatz_dienstleistung', 'p.waehrung', 'p.schreibschutz', 'p.pdfarchiviert', 'p.pdfarchiviertversion', 'p.typ', 'p.reservierart', 'p.auslagerart', 'p.projektfiliale', 'p.datumauslieferung', 'p.datumbereitstellung', 'p.unterlistenexplodieren', 'p.charge', 'p.arbeitsschrittetextanzeigen', 'p.einlagern_ok', 'p.auslagern_ok', 'p.mhd', 'p.auftragmengenanpassen', 'p.internebezeichnung', 'p.mengeoriginal', 'p.teilproduktionvon', 'p.teilproduktionnummer', 'p.parent', 'p.parentnummer', 'p.bearbeiterid', 'p.mengeausschuss', 'p.mengeerfolgreich', 'p.abschlussbemerkung', 'p.auftragid', 'p.funktionstest', 'p.seriennummer_erstellen', 'p.unterseriennummern_erfassen', 'p.datumproduktionende', 'p.standardlager'); $bezeichnung = "CONCAT (
$findcols = array('p.id','p.id','p.belegnr','p.kundennummer','p.name','p.datum','a.name_de','soll','ist', 'zeit_geplant','zeit_geplant', 'projekt','p.status','icons','id'); IFNULL((SELECT CONCAT(a.name_de,' (',a.nummer,')','<br>') FROM artikel a INNER JOIN produktion_position pp ON pp.artikel = a.id WHERE pp.stuecklistestufe = 1 AND pp.produktion = p.id LIMIT 1),''),
CONCAT('<i>',internebezeichnung,'</i>')
)";
// $searchsql = array('p.datum', 'p.art', 'p.projekt', 'p.belegnr', 'p.internet', 'p.bearbeiter', 'p.angebot', 'p.freitext', 'p.internebemerkung', 'p.status', 'p.adresse', 'p.name', 'p.abteilung', 'p.unterabteilung', 'p.strasse', 'p.adresszusatz', 'p.ansprechpartner', 'p.plz', 'p.ort', 'p.land', 'p.ustid', 'p.ust_befreit', 'p.ust_inner', 'p.email', 'p.telefon', 'p.telefax', 'p.betreff', 'p.kundennummer', 'p.versandart', 'p.vertrieb', 'p.zahlungsweise', 'p.zahlungszieltage', 'p.zahlungszieltageskonto', 'p.zahlungszielskonto', 'p.bank_inhaber', 'p.bank_institut', 'p.bank_blz', 'p.bank_konto', 'p.kreditkarte_typ', 'p.kreditkarte_inhaber', 'p.kreditkarte_nummer', 'p.kreditkarte_pruefnummer', 'p.kreditkarte_monat', 'p.kreditkarte_jahr', 'p.firma', 'p.versendet', 'p.versendet_am', 'p.versendet_per', 'p.versendet_durch', 'p.autoversand', 'p.keinporto', 'p.keinestornomail', 'p.abweichendelieferadresse', 'p.liefername', 'p.lieferabteilung', 'p.lieferunterabteilung', 'p.lieferland', 'p.lieferstrasse', 'p.lieferort', 'p.lieferplz', 'p.lieferadresszusatz', 'p.lieferansprechpartner', 'p.packstation_inhaber', 'p.packstation_station', 'p.packstation_ident', 'p.packstation_plz', 'p.packstation_ort', 'p.autofreigabe', 'p.freigabe', 'p.nachbesserung', 'p.gesamtsumme', 'p.inbearbeitung', 'p.abgeschlossen', 'p.nachlieferung', 'p.lager_ok', 'p.porto_ok', 'p.ust_ok', 'p.check_ok', 'p.vorkasse_ok', 'p.nachnahme_ok', 'p.reserviert_ok', 'p.bestellt_ok', 'p.zeit_ok', 'p.versand_ok', 'p.partnerid', 'p.folgebestaetigung', 'p.zahlungsmail', 'p.stornogrund', 'p.stornosonstiges', 'p.stornorueckzahlung', 'p.stornobetrag', 'p.stornobankinhaber', 'p.stornobankkonto', 'p.stornobankblz', 'p.stornobankbank', 'p.stornogutschrift', 'p.stornogutschriftbeleg', 'p.stornowareerhalten', 'p.stornomanuellebearbeitung', 'p.stornokommentar', 'p.stornobezahlt', 'p.stornobezahltam', 'p.stornobezahltvon', 'p.stornoabgeschlossen', 'p.stornorueckzahlungper', 'p.stornowareerhaltenretour', 'p.partnerausgezahlt', 'p.partnerausgezahltam', 'p.kennen', 'p.logdatei', 'p.bezeichnung', 'p.datumproduktion', 'p.anschreiben', 'p.usereditid', 'p.useredittimestamp', 'p.steuersatz_normal', 'p.steuersatz_zwischen', 'p.steuersatz_ermaessigt', 'p.steuersatz_starkermaessigt', 'p.steuersatz_dienstleistung', 'p.waehrung', 'p.schreibschutz', 'p.pdfarchiviert', 'p.pdfarchiviertversion', 'p.typ', 'p.reservierart', 'p.auslagerart', 'p.projektfiliale', 'p.datumauslieferung', 'p.datumbereitstellung', 'p.unterlistenexplodieren', 'p.charge', 'p.arbeitsschrittetextanzeigen', 'p.einlagern_ok', 'p.auslagern_ok', 'p.mhd', 'p.auftragmengenanpassen', 'p.internebezeichnung', 'p.mengeoriginal', 'p.teilproduktionvon', 'p.teilproduktionnummer', 'p.parent', 'p.parentnummer', 'p.bearbeiterid', 'p.mengeausschuss', 'p.mengeerfolgreich', 'p.abschlussbemerkung', 'p.auftragid', 'p.funktionstest', 'p.seriennummer_erstellen', 'p.unterseriennummern_erfassen', 'p.datumproduktionende', 'p.standardlager'); $adresse = "(SELECT name FROM adresse WHERE kundennummer = p.kundennummer AND p.kundennummer != 0 LIMIT 1)";
$searchsql = array('p.datum', 'p.art', 'p.projekt', 'p.belegnr', 'p.internet', 'p.bearbeiter', 'p.angebot', 'p.freitext', 'p.internebemerkung', 'p.status', 'p.adresse', 'p.name', 'p.abteilung', 'p.unterabteilung', 'p.strasse', 'p.adresszusatz', 'p.ansprechpartner', 'p.plz', 'p.ort', 'p.land', 'p.ustid', 'p.ust_befreit', 'p.ust_inner', 'p.email', 'p.telefon', 'p.telefax', 'p.betreff', 'p.kundennummer', 'p.versandart', 'p.vertrieb', 'p.zahlungsweise', 'p.zahlungszieltage', 'p.zahlungszieltageskonto', 'p.zahlungszielskonto', 'p.bank_inhaber', 'p.bank_institut', 'p.bank_blz', 'p.bank_konto', 'p.kreditkarte_typ', 'p.kreditkarte_inhaber', 'p.kreditkarte_nummer', 'p.kreditkarte_pruefnummer', 'p.kreditkarte_monat', 'p.kreditkarte_jahr', 'p.firma', 'p.versendet', 'p.versendet_am', 'p.versendet_per', 'p.versendet_durch', 'p.autoversand', 'p.keinporto', 'p.keinestornomail', 'p.abweichendelieferadresse', 'p.liefername', 'p.lieferabteilung', 'p.lieferunterabteilung', 'p.lieferland', 'p.lieferstrasse', 'p.lieferort', 'p.lieferplz', 'p.lieferadresszusatz', 'p.lieferansprechpartner', 'p.packstation_inhaber', 'p.packstation_station', 'p.packstation_ident', 'p.packstation_plz', 'p.packstation_ort', 'p.autofreigabe', 'p.freigabe', 'p.nachbesserung', 'p.gesamtsumme', 'p.inbearbeitung', 'p.abgeschlossen', 'p.nachlieferung', 'p.lager_ok', 'p.porto_ok', 'p.ust_ok', 'p.check_ok', 'p.vorkasse_ok', 'p.nachnahme_ok', 'p.reserviert_ok', 'p.bestellt_ok', 'p.zeit_ok', 'p.versand_ok', 'p.partnerid', 'p.folgebestaetigung', 'p.zahlungsmail', 'p.stornogrund', 'p.stornosonstiges', 'p.stornorueckzahlung', 'p.stornobetrag', 'p.stornobankinhaber', 'p.stornobankkonto', 'p.stornobankblz', 'p.stornobankbank', 'p.stornogutschrift', 'p.stornogutschriftbeleg', 'p.stornowareerhalten', 'p.stornomanuellebearbeitung', 'p.stornokommentar', 'p.stornobezahlt', 'p.stornobezahltam', 'p.stornobezahltvon', 'p.stornoabgeschlossen', 'p.stornorueckzahlungper', 'p.stornowareerhaltenretour', 'p.partnerausgezahlt', 'p.partnerausgezahltam', 'p.kennen', 'p.logdatei', 'p.bezeichnung', 'p.datumproduktion', 'p.anschreiben', 'p.usereditid', 'p.useredittimestamp', 'p.steuersatz_normal', 'p.steuersatz_zwischen', 'p.steuersatz_ermaessigt', 'p.steuersatz_starkermaessigt', 'p.steuersatz_dienstleistung', 'p.waehrung', 'p.schreibschutz', 'p.pdfarchiviert', 'p.pdfarchiviertversion', 'p.typ', 'p.reservierart', 'p.auslagerart', 'p.projektfiliale', 'p.datumauslieferung', 'p.datumbereitstellung', 'p.unterlistenexplodieren', 'p.charge', 'p.arbeitsschrittetextanzeigen', 'p.einlagern_ok', 'p.auslagern_ok', 'p.mhd', 'p.auftragmengenanpassen', 'p.internebezeichnung', 'p.mengeoriginal', 'p.teilproduktionvon', 'p.teilproduktionnummer', 'p.parent', 'p.parentnummer', 'p.bearbeiterid', 'p.mengeausschuss', 'p.mengeerfolgreich', 'p.abschlussbemerkung', 'p.auftragid', 'p.funktionstest', 'p.seriennummer_erstellen', 'p.unterseriennummern_erfassen', 'p.datumproduktionende', 'p.standardlager');
$findcols = array('p.id','p.id','p.belegnr','p.kundennummer',$adresse,'p.datum',$bezeichnung,'soll','ist', 'zeit_geplant','zeit_geplant', 'projekt','p.status','icons','id');
$searchsql = array('p.belegnr','p.kundennummer','p.name',$bezeichnung);
$defaultorder = 1; $defaultorder = 1;
$defaultorderdesc = 0; $defaultorderdesc = 0;
@@ -73,13 +78,10 @@ class Produktion {
$dropnbox, $dropnbox,
p.belegnr, p.belegnr,
p.kundennummer, p.kundennummer,
(SELECT name FROM adresse WHERE kundennummer = p.kundennummer AND p.kundennummer != 0 LIMIT 1) as name, ".$adresse." as name,
DATE_FORMAT(datum,'%d.%m.%Y') as datum, DATE_FORMAT(datum,'%d.%m.%Y') as datum,
CONCAT ( ".$bezeichnung." as bezeichnung,
IFNULL((SELECT CONCAT(a.name_de,' (',a.nummer,')','<br>') FROM artikel a INNER JOIN produktion_position pp ON pp.artikel = a.id WHERE pp.stuecklistestufe = 1 AND pp.produktion = p.id LIMIT 1),''),
CONCAT('<i>',internebezeichnung,'</i>')
) as bezeichnung,
FORMAT((SELECT SUM(menge) FROM produktion_position pp WHERE pp.produktion = p.id AND pp.stuecklistestufe = 1),0,'de_DE') as soll, FORMAT((SELECT SUM(menge) FROM produktion_position pp WHERE pp.produktion = p.id AND pp.stuecklistestufe = 1),0,'de_DE') as soll,
FORMAT(p.mengeerfolgreich,0,'de_DE') as ist, FORMAT(p.mengeerfolgreich,0,'de_DE') as ist,
@@ -298,7 +300,7 @@ class Produktion {
) as lager, ) as lager,
FORMAT ((SELECT SUM(menge) FROM lager_reserviert r WHERE r.lager_platz = $standardlager AND r.artikel = p.artikel AND r.objekt = 'produktion' AND r.parameter = $id),0,'de_DE') as reserviert, FORMAT ((SELECT SUM(menge) FROM lager_reserviert r WHERE r.lager_platz = $standardlager AND r.artikel = p.artikel AND r.objekt = 'produktion' AND r.parameter = $id),0,'de_DE') as reserviert,
FORMAT(SUM(p.menge),0,'de_DE') as menge, FORMAT(SUM(p.menge),0,'de_DE') as menge,
FORMAT(p.geliefert_menge,0,'de_DE') as geliefert_menge, FORMAT(SUM(p.geliefert_menge),0,'de_DE') as geliefert_menge,
p.id p.id
FROM produktion_position p"; FROM produktion_position p";
@@ -584,8 +586,8 @@ class Produktion {
$sql = "UPDATE produktion SET status = 'gestartet' WHERE id=$id"; $sql = "UPDATE produktion SET status = 'gestartet' WHERE id=$id";
$this->app->DB->Update($sql); $this->app->DB->Update($sql);
$sql = "SELECT pp.id, pp.artikel, pp.menge, pp.geliefert_menge, pp.stuecklistestufe, a.lagerartikel FROM produktion_position pp INNER JOIN artikel a ON a.id = pp.artikel WHERE pp.produktion=$id"; $sql = "SELECT pp.id, pp.artikel, pp.menge, pp.geliefert_menge, pp.stuecklistestufe, a.lagerartikel FROM produktion_position pp INNER JOIN artikel a ON a.id = pp.artikel WHERE pp.produktion=$id";
$material = $this->app->DB->SelectArr($sql); $material = $this->app->DB->SelectArr($sql);
foreach ($material as $material_position) { foreach ($material as $material_position) {
@@ -606,6 +608,7 @@ class Produktion {
// Update position // Update position
$sql = "UPDATE produktion_position SET geliefert_menge = geliefert_menge + $menge_artikel_auslagern WHERE id = ".$material_position['id']; $sql = "UPDATE produktion_position SET geliefert_menge = geliefert_menge + $menge_artikel_auslagern WHERE id = ".$material_position['id'];
$this->app->DB->Update($sql); $this->app->DB->Update($sql);
} }
+3 -1
View File
@@ -2727,6 +2727,8 @@ class Projekt extends GenProjekt {
if($oldProjectId > 0){ if($oldProjectId > 0){
$this->createAdditionalInputForCopyProjects($oldProjectId,$check); $this->createAdditionalInputForCopyProjects($oldProjectId,$check);
$msg = $this->app->erp->base64_url_encode("<div class=\"info\">Das Projekt wurde erfolgreich kopiert.</div>");
$this->app->Location->execute("index.php?module=projekt&action=uebersicht&id=$check&msg=$msg");
return; return;
} }
$msg = $this->app->erp->base64_url_encode("<div class=\"info\">Das Projekt wurde erfolgreich angelegt.</div>"); $msg = $this->app->erp->base64_url_encode("<div class=\"info\">Das Projekt wurde erfolgreich angelegt.</div>");
@@ -2848,7 +2850,7 @@ class Projekt extends GenProjekt {
* @param int $copyProjectId * @param int $copyProjectId
* @return bool * @return bool
*/ */
public function createAdditionalInputForCopyProjects(int $oldProjectId, int $copyProjectId): bool public function createAdditionalInputForCopyProjects(int $oldProjectId, int $copyProjectId)
{ {
$hasAdditionalInput = false; $hasAdditionalInput = false;
$this->app->Tpl->Set('TOID',$copyProjectId); $this->app->Tpl->Set('TOID',$copyProjectId);
+149 -51
View File
@@ -236,13 +236,6 @@ class Rechnung extends GenRechnung
$this->app->Location->execute("index.php?module=rechnung&action=edit&id=$id&msg=$msg"); $this->app->Location->execute("index.php?module=rechnung&action=edit&id=$id&msg=$msg");
} }
function RechnungMahnwesen()
{
}
function RechnungLastschriftWdh() function RechnungLastschriftWdh()
{ {
@@ -283,7 +276,7 @@ class Rechnung extends GenRechnung
$this->app->erp->RechnungProtokoll($invoiceId,'Rechnung manuell als bezahlt entfernt'); $this->app->erp->RechnungProtokoll($invoiceId,'Rechnung manuell als bezahlt entfernt');
$this->app->DB->Update( $this->app->DB->Update(
"UPDATE rechnung "UPDATE rechnung
SET zahlungsstatus='offen',bezahlt_am = NULL, ist='0', SET zahlungsstatus='offen',bezahlt_am = NULL,
mahnwesen_internebemerkung=CONCAT(mahnwesen_internebemerkung,'\r\n','Manuell als bezahlt entfernt am ".date('d.m.Y')."') mahnwesen_internebemerkung=CONCAT(mahnwesen_internebemerkung,'\r\n','Manuell als bezahlt entfernt am ".date('d.m.Y')."')
WHERE id='$invoiceId'" WHERE id='$invoiceId'"
); );
@@ -305,7 +298,7 @@ class Rechnung extends GenRechnung
$id = $this->app->Secure->GetGET('id'); $id = $this->app->Secure->GetGET('id');
$this->app->erp->RechnungProtokoll($id,'Rechnung Stornierung rückgängig gemacht'); $this->app->erp->RechnungProtokoll($id,'Rechnung Stornierung rückgängig gemacht');
$this->app->DB->Update("UPDATE rechnung SET status='freigegeben',zahlungsstatus='offen',schreibschutz=0,bezahlt_am = NULL, ist='0',mahnwesen_internebemerkung=CONCAT(mahnwesen_internebemerkung,'\r\n','Rechnung Stornierung rückgängig gemacht ".date('d.m.Y')."') WHERE id='$id'"); $this->app->DB->Update("UPDATE rechnung SET status='freigegeben',zahlungsstatus='offen',schreibschutz=0,bezahlt_am = NULL, mahnwesen_internebemerkung=CONCAT(mahnwesen_internebemerkung,'\r\n','Rechnung Stornierung rückgängig gemacht ".date('d.m.Y')."') WHERE id='$id'");
$this->app->Location->execute("index.php?module=rechnung&action=edit&id=$id"); $this->app->Location->execute("index.php?module=rechnung&action=edit&id=$id");
} }
@@ -324,7 +317,7 @@ class Rechnung extends GenRechnung
$this->app->DB->Update( $this->app->DB->Update(
"UPDATE rechnung "UPDATE rechnung
SET zahlungsstatus='bezahlt',bezahlt_am = now(), ist=soll,mahnwesenfestsetzen='1', SET zahlungsstatus='bezahlt',bezahlt_am = now(), mahnwesenfestsetzen='1',
mahnwesen_internebemerkung=CONCAT(mahnwesen_internebemerkung,'\r\n','Manuell als bezahlt markiert am ".date('d.m.Y')."') mahnwesen_internebemerkung=CONCAT(mahnwesen_internebemerkung,'\r\n','Manuell als bezahlt markiert am ".date('d.m.Y')."')
WHERE id='$invoiceId'" WHERE id='$invoiceId'"
); );
@@ -642,7 +635,7 @@ class Rechnung extends GenRechnung
$this->app->Tpl->Set('PROJEKT', $projekt); $this->app->Tpl->Set('PROJEKT', $projekt);
} }
$this->app->Tpl->Set('ZAHLWEISE',$auftragArr[0]['zahlungsweise']); $this->app->Tpl->Set('ZAHLWEISE',ucfirst($auftragArr[0]['zahlungsweise']));
$this->app->Tpl->Set('STATUS',($auftragArr[0]['status'] === 'storniert' && $auftragArr[0]['teilstorno'] == 1?'teilstorniert':$auftragArr[0]['status'])); $this->app->Tpl->Set('STATUS',($auftragArr[0]['status'] === 'storniert' && $auftragArr[0]['teilstorno'] == 1?'teilstorniert':$auftragArr[0]['status']));
$this->app->Tpl->Set('IHREBESTELLNUMMER',$auftragArr[0]['ihrebestellnummer']); $this->app->Tpl->Set('IHREBESTELLNUMMER',$auftragArr[0]['ihrebestellnummer']);
@@ -651,7 +644,10 @@ class Rechnung extends GenRechnung
if($auftragArr[0]['mahnwesen']=='') { if($auftragArr[0]['mahnwesen']=='') {
$auftragArr[0]['mahnwesen']='-'; $auftragArr[0]['mahnwesen']='-';
} }
$this->app->Tpl->Set('MAHNWESEN',$auftragArr[0]['mahnwesen']);
$mahnwesen_name = $this->app->DB->SelectArr("SELECT name FROM mahnwesen WHERE id='".$auftragArr[0]['mahnwesen']."' LIMIT 1")[0]['name'];
$this->app->Tpl->Set('MAHNWESEN',$mahnwesen_name);
if($auftragArr[0]['mahnwesen_datum']=='0000-00-00') { if($auftragArr[0]['mahnwesen_datum']=='0000-00-00') {
$auftragArr[0]['mahnwesen_datum']='-'; $auftragArr[0]['mahnwesen_datum']='-';
} }
@@ -888,28 +884,7 @@ class Rechnung extends GenRechnung
$this->app->Tpl->Set('ANGEBOTTEXT',"Das Angebot wird bearbeitet und wurde noch nicht freigegeben und abgesendet!"); $this->app->Tpl->Set('ANGEBOTTEXT',"Das Angebot wird bearbeitet und wurde noch nicht freigegeben und abgesendet!");
} }
$this->app->Tpl->Set('ZAHLUNGEN',$this->RechnungZahlung(true));
$this->app->Tpl->Set('ZAHLUNGEN',"<table width=100% border=0 class=auftrag_cell cellpadding=0 cellspacing=0>Erst ab Version Enterprise verf&uuml;gbar</table>");
if (!is_null($gutschrift)) {
if((!empty($gutschrift)?count($gutschrift):0) > 0)
$this->app->Tpl->Add('ZAHLUNGEN',"<div class=\"info\">Zu dieser Rechnung existiert eine Gutschrift!</div>");
else {
if($auftragArr[0]['zahlungsstatus']!="bezahlt")
$this->app->Tpl->Add('ZAHLUNGEN',"<div class=\"warning\">Diese Rechnung ist noch nicht komplett bezahlt!</div>");
else
{
if(!empty($auftragArr[0]['bezahlt_am']) && $auftragArr[0]['bezahlt_am'] != '0000-00-00')
{
$this->app->Tpl->Add('ZAHLUNGEN',"<div class=\"success\">Diese Rechnung wurde am ".$this->app->String->Convert($auftragArr[0]['bezahlt_am'],"%1-%2-%3","%3.%2.%1")." bezahlt.</div>");
}else{
$this->app->Tpl->Add('ZAHLUNGEN',"<div class=\"success\">Diese Rechnung ist bezahlt.</div>");
}
}
}
}
$this->app->Tpl->Set('RECHNUNGADRESSE',$this->Rechnungsadresse($auftragArr[0]['id'])); $this->app->Tpl->Set('RECHNUNGADRESSE',$this->Rechnungsadresse($auftragArr[0]['id']));
@@ -917,7 +892,7 @@ class Rechnung extends GenRechnung
$tmp->Query("SELECT zeit,bearbeiter,grund FROM rechnung_protokoll WHERE rechnung='$id' ORDER by zeit DESC",0,""); $tmp->Query("SELECT zeit,bearbeiter,grund FROM rechnung_protokoll WHERE rechnung='$id' ORDER by zeit DESC",0,"");
$tmp->DisplayNew('PROTOKOLL',"Protokoll","noAction"); $tmp->DisplayNew('PROTOKOLL',"Protokoll","noAction");
/*
$query = $this->app->DB->SelectArr("SELECT zeit,bearbeiter,grund FROM rechnung_protokoll WHERE rechnung='$id' ORDER by zeit"); $query = $this->app->DB->SelectArr("SELECT zeit,bearbeiter,grund FROM rechnung_protokoll WHERE rechnung='$id' ORDER by zeit");
if($query) if($query)
{ {
@@ -933,12 +908,12 @@ class Rechnung extends GenRechnung
{ {
$tmp2 = new EasyTable($this->app); $tmp2 = new EasyTable($this->app);
$tmp2->Query("SELECT concat('<a href=\"index.php?module=mahnwesen&action=mahnpdf&id=',rechnung,'&datum=',DATE_FORMAT(zeit,'%d.%m.%Y'),'&mahnwesen=',LOWER(LEFT(grund,LOCATE(' ',grund))),'\"><img src=\"themes/{$this->app->Conf->WFconf[defaulttheme]}/images/pdf.svg\" border=\"0\"></a>') as PDF, Date(zeit) as Datum, bearbeiter,grund FROM rechnung_protokoll WHERE rechnung='$id' AND zeit >= '".$zeit."' ORDER by zeit DESC"); $tmp2->Query("SELECT concat('<a href=\"index.php?module=mahnwesen&action=mahnpdf&id=',rechnung,'&datum=',DATE_FORMAT(zeit,'%d.%m.%Y'),'&mahnwesen=',LOWER(LEFT(grund,LOCATE(' ',grund))),'\"><img src=\"themes/{$this->app->Conf->WFconf['defaulttheme']}/images/pdf.svg\" border=\"0\"></a>') as PDF, Date(zeit) as Datum, bearbeiter,grund FROM rechnung_protokoll WHERE rechnung='$id' AND zeit >= '".$zeit."' ORDER by zeit DESC");
$tmp2->DisplayNew('MAHNPROTOKOLL',"Protokoll","noAction"); $tmp2->DisplayNew('MAHNPROTOKOLL',"Protokoll","noAction");
} }
} }*/
if(class_exists('RechnungPDFCustom')) if(class_exists('RechnungPDFCustom'))
{ {
@@ -1582,6 +1557,9 @@ class Rechnung extends GenRechnung
$this->app->erp->RechnungNeuberechnen($id); $this->app->erp->RechnungNeuberechnen($id);
} }
// ALWAYS
$this->app->erp->RechnungNeuberechnen($id);
if($cmd === 'dadown') if($cmd === 'dadown')
{ {
$erg['status'] = 0; $erg['status'] = 0;
@@ -1766,9 +1744,8 @@ class Rechnung extends GenRechnung
$this->app->Tpl->Set('VORKASSE',''); $this->app->Tpl->Set('VORKASSE','');
} }
$ist = $this->app->erp->EUR($this->app->erp->GetSaldoDokument($id,'rechnung')['betrag']);
$saldo=$this->app->DB->Select("SELECT ist-skonto_gegeben FROM rechnung WHERE id='$id'"); $this->app->Tpl->Set('ISTDB',$ist);
$this->app->Tpl->Set('LIVEIST',"$saldo");
if($schreibschutz=="1" && $this->app->erp->RechteVorhanden('rechnung','schreibschutz')) if($schreibschutz=="1" && $this->app->erp->RechteVorhanden('rechnung','schreibschutz'))
{ {
@@ -1788,10 +1765,13 @@ class Rechnung extends GenRechnung
$this->app->erp->RemoveReadonly('mahnwesenfestsetzen'); $this->app->erp->RemoveReadonly('mahnwesenfestsetzen');
$this->app->erp->RemoveReadonly('mahnwesen'); $this->app->erp->RemoveReadonly('mahnwesen');
$this->app->erp->RemoveReadonly('bezahlt_am'); $this->app->erp->RemoveReadonly('bezahlt_am');
/*
'ist' should not be edited manually
$this->app->erp->RemoveReadonly('ist'); $this->app->erp->RemoveReadonly('ist');
if($this->app->erp->Firmendaten('mahnwesenmitkontoabgleich')!='1' || $this->app->DB->Select("SELECT mahnwesenfestsetzen FROM rechnung WHERE id='$id' LIMIT 1")==1) if($this->app->erp->Firmendaten('mahnwesenmitkontoabgleich')!='1' || $this->app->DB->Select("SELECT mahnwesenfestsetzen FROM rechnung WHERE id='$id' LIMIT 1")==1)
$this->app->erp->RemoveReadonly('ist'); $this->app->erp->RemoveReadonly('ist');*/
//$auftrag= $this->app->DB->Select("SELECT auftrag FROM rechnung WHERE id='$id' LIMIT 1"); //$auftrag= $this->app->DB->Select("SELECT auftrag FROM rechnung WHERE id='$id' LIMIT 1");
@@ -1812,8 +1792,10 @@ class Rechnung extends GenRechnung
} }
$speichern = $this->app->Secure->GetPOST('speichern'); $speichern = $this->app->Secure->GetPOST('speichern');
if($speichern!='' && $this->app->erp->RechteVorhanden('rechnung','mahnwesen')) if($speichern!='' && $this->app->erp->RechteVorhanden('rechnung','mahnwesen'))
{ {
$mahnwesen_datum = $this->app->Secure->GetPOST('mahnwesen_datum'); $mahnwesen_datum = $this->app->Secure->GetPOST('mahnwesen_datum');
$bezahlt_am = $this->app->Secure->GetPOST('bezahlt_am'); $bezahlt_am = $this->app->Secure->GetPOST('bezahlt_am');
$mahnwesen_gesperrt = $this->app->Secure->GetPOST('mahnwesen_gesperrt'); $mahnwesen_gesperrt = $this->app->Secure->GetPOST('mahnwesen_gesperrt');
@@ -1837,19 +1819,18 @@ class Rechnung extends GenRechnung
if($bezahlt_am=='--')$bezahlt_am='0000-00-00'; if($bezahlt_am=='--')$bezahlt_am='0000-00-00';
$alte_mahnstufe = $this->app->DB->Select("SELECT mahnwesen FROM rechnung WHERE id='$id' LIMIT 1"); $alte_mahnstufe = $this->app->DB->Select("SELECT mahnwesen FROM rechnung WHERE id='$id' LIMIT 1");
if($alte_mahnstufe!=$mahnwesen) $versendet=0; else $versendet=1; if($alte_mahnstufe!=$mahnwesen) $versendet=0;
if($mahnwesenfestsetzen=='1') /* if($mahnwesenfestsetzen=='1')
{ {*/
$this->app->DB->Update("UPDATE rechnung SET mahnwesen_internebemerkung='$mahnwesen_internebemerkung',zahlungsstatus='$zahlungsstatus',versendet_mahnwesen='$versendet', $this->app->DB->Update("UPDATE rechnung SET mahnwesen_internebemerkung='$mahnwesen_internebemerkung',zahlungsstatus='$zahlungsstatus',versendet_mahnwesen='$versendet',
mahnwesen_gesperrt='$mahnwesen_gesperrt',mahnwesen_datum='$mahnwesen_datum', mahnwesenfestsetzen='$mahnwesenfestsetzen',internebemerkung='$internebemerkung', mahnwesen_gesperrt='$mahnwesen_gesperrt',mahnwesen_datum='$mahnwesen_datum', mahnwesenfestsetzen='$mahnwesenfestsetzen',internebemerkung='$internebemerkung',
mahnwesen='$mahnwesen',ist='$ist',skonto_gegeben='$skonto_gegeben',bezahlt_am='$bezahlt_am' WHERE id='$id' LIMIT 1"); mahnwesen='$mahnwesen',skonto_gegeben='$skonto_gegeben',bezahlt_am='$bezahlt_am' WHERE id='$id' LIMIT 1");
} else { /* } else {
$this->app->DB->Update("UPDATE rechnung SET mahnwesen='$mahnwesen', mahnwesenfestsetzen='$mahnwesenfestsetzen', mahnwesen_internebemerkung='$mahnwesen_internebemerkung', mahnwesen_gesperrt='$mahnwesen_gesperrt',mahnwesen_datum='$mahnwesen_datum' WHERE id='$id' LIMIT 1"); $this->app->DB->Update("UPDATE rechnung SET mahnwesen='$mahnwesen', mahnwesenfestsetzen='$mahnwesenfestsetzen', mahnwesen_internebemerkung='$mahnwesen_internebemerkung', mahnwesen_gesperrt='$mahnwesen_gesperrt',mahnwesen_datum='$mahnwesen_datum' WHERE id='$id' LIMIT 1");
} }*/
} }
if($status=='') if($status=='')
$this->app->DB->Update("UPDATE rechnung SET status='angelegt' WHERE id='$id' LIMIT 1"); $this->app->DB->Update("UPDATE rechnung SET status='angelegt' WHERE id='$id' LIMIT 1");
@@ -1962,6 +1943,7 @@ class Rechnung extends GenRechnung
' &uuml;berein <input type="submit" name="resetextsoll" value="Festgeschriebene Summe zur&uuml;cksetzen" /></div></form>' ' &uuml;berein <input type="submit" name="resetextsoll" value="Festgeschriebene Summe zur&uuml;cksetzen" /></div></form>'
); );
} }
parent::RechnungEdit(); parent::RechnungEdit();
if($id > 0 && $this->app->DB->Select( if($id > 0 && $this->app->DB->Select(
sprintf( sprintf(
@@ -2076,6 +2058,7 @@ class Rechnung extends GenRechnung
public function RechnungList() public function RechnungList()
{ {
$this->app->DB->Update("UPDATE rechnung SET zahlungsstatus='offen' WHERE zahlungsstatus=''"); $this->app->DB->Update("UPDATE rechnung SET zahlungsstatus='offen' WHERE zahlungsstatus=''");
if($this->app->Secure->GetPOST('ausfuehren') && $this->app->erp->RechteVorhanden('rechnung', 'edit')) if($this->app->Secure->GetPOST('ausfuehren') && $this->app->erp->RechteVorhanden('rechnung', 'edit'))
@@ -2098,10 +2081,10 @@ class Rechnung extends GenRechnung
switch($aktion) switch($aktion)
{ {
case 'bezahlt': case 'bezahlt':
$this->app->DB->Update("UPDATE rechnung SET zahlungsstatus='bezahlt', bezahlt_am = now(), ist=soll,mahnwesenfestsetzen='1',mahnwesen_internebemerkung=CONCAT(mahnwesen_internebemerkung,'\r\n','Manuell als bezahlt markiert am ".date('d.m.Y')."') WHERE id IN (".implode(', ',$auswahl).')'); $this->app->DB->Update("UPDATE rechnung SET zahlungsstatus='bezahlt', bezahlt_am = now(), mahnwesenfestsetzen='1',mahnwesen_internebemerkung=CONCAT(mahnwesen_internebemerkung,'\r\n','Manuell als bezahlt markiert am ".date('d.m.Y')."') WHERE id IN (".implode(', ',$auswahl).')');
break; break;
case 'offen': case 'offen':
$this->app->DB->Update("UPDATE rechnung SET zahlungsstatus='offen',bezahlt_am = NULL, ist='0',mahnwesen_internebemerkung=CONCAT(mahnwesen_internebemerkung,'\r\n','Manuell als bezahlt entfernt am ".date('d.m.Y')."') WHERE id IN (".implode(', ',$auswahl).')'); $this->app->DB->Update("UPDATE rechnung SET zahlungsstatus='offen',bezahlt_am = NULL, mahnwesen_internebemerkung=CONCAT(mahnwesen_internebemerkung,'\r\n','Manuell als bezahlt entfernt am ".date('d.m.Y')."') WHERE id IN (".implode(', ',$auswahl).')');
break; break;
case 'mail': case 'mail':
$auswahl = $this->app->DB->SelectFirstCols( $auswahl = $this->app->DB->SelectFirstCols(
@@ -2256,6 +2239,10 @@ class Rechnung extends GenRechnung
break; break;
} }
} }
} // ende ausfuehren
if($this->app->Secure->GetPOST('zahlungsstatus_berechnen') && $this->app->erp->RechteVorhanden('rechnung', 'edit')) {
$this->rechnung_zahlstatus_berechnen();
} }
$this->app->Tpl->Set('UEBERSCHRIFT','Rechnungen'); $this->app->Tpl->Set('UEBERSCHRIFT','Rechnungen');
@@ -2265,7 +2252,6 @@ class Rechnung extends GenRechnung
$this->app->erp->MenuEintrag('index.php?module=rechnung&action=list','&Uuml;bersicht'); $this->app->erp->MenuEintrag('index.php?module=rechnung&action=list','&Uuml;bersicht');
$this->app->erp->MenuEintrag('index.php?module=rechnung&action=create','Neue Rechnung anlegen'); $this->app->erp->MenuEintrag('index.php?module=rechnung&action=create','Neue Rechnung anlegen');
if(strlen($backurl)>5){ if(strlen($backurl)>5){
$this->app->erp->MenuEintrag("$backurl", 'Zur&uuml;ck'); $this->app->erp->MenuEintrag("$backurl", 'Zur&uuml;ck');
} }
@@ -2712,4 +2698,116 @@ class Rechnung extends GenRechnung
return $this->app->DB->GetInsertID(); return $this->app->DB->GetInsertID();
} }
/**
* Build the html output for minidetail containing the payments
* @param bool $return
*
* @return string
*/
function RechnungZahlung($return=false)
{
$id = $this->app->Secure->GetGET('id');
$zahlungen = $this->app->erp->GetZahlungen($id,'rechnung');
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,'rechnung');
foreach ($salden as $saldo) {
$row = array(
'',
'<b>Saldo</b>',
"<b>".$saldo['betrag']."</b>",
"<b>".$saldo['waehrung']."</b>"
);
$et->AddRow($row);
}
return($et->DisplayNew('return',""));
}
}
/*
* Recalculate the payments status with skonto
*/
function rechnung_zahlstatus_berechnen() {
// START RECALCULATE
$this->app->erp->fibu_rebuild_tables();
$offene_rechnungen = $this->app->DB->SelectArr(" SELECT
id,
soll,
waehrung,
datum,
zahlungszieltage,
DATE_ADD(datum, INTERVAL zahlungszieltage DAY) as zieldatum,
CURRENT_DATE > DATE_ADD(datum, INTERVAL zahlungszieltage DAY) as faellig,
zahlungszielskonto,
TRUNCATE(soll*(1-(zahlungszielskonto/100)),2) as skontosoll,
zahlungszieltageskonto,
DATE_ADD(datum, INTERVAL zahlungszieltageskonto DAY) as zieldatumskonto
FROM
rechnung
WHERE
belegnr <> '' AND zahlungsstatus = 'offen'
");
foreach ($offene_rechnungen as $offene_rechnung) {
$saldo = $this->app->erp->GetSaldoDokument($offene_rechnung['id'],'rechnung');
if (!empty($saldo)) {
if ($saldo['waehrung'] == $offene_rechnung['waehrung']) {
$offene_rechnung['ist'] = $offene_rechnung['soll']+$saldo['betrag'];
// Check for skonto
$skontorelevante_zahlungen = $this->app->erp->GetSaldoDokument($offene_rechnung['id'],'rechnung','zubuchung',$offene_rechnung['zieldatumskonto'])['betrag'];
$zielkonforme_zahlungen = $this->app->erp->GetSaldoDokument($offene_rechnung['id'],'rechnung','zubuchung',$offene_rechnung['zieldatum'])['betrag'];
// Check overall value
if ($saldo['betrag'] == 0) {
// ok -> will be marked as paid
} else if ($skontorelevante_zahlungen >= $offene_rechnung['skontosoll']) {
// Skonto ok -> book difference
$sachkonto = $this->app->erp->Firmendaten('rechnung_skonto_kontorahmen');
if (!empty($sachkonto)) {
$this->app->erp->fibu_buchungen_buchen('rechnung',$offene_rechnung['id'],'kontorahmen',$sachkonto,-$saldo['betrag'],$offene_rechnung['waehrung'],date('Y-m-d'),'');
$offene_rechnung['ist'] = $offene_rechnung['soll'];
} else {
}
} else if ($offene_rechnung['faellig']) {
// Overdue
} else {
// Not due
}
// Update rechnung
$sql = "UPDATE
rechnung
SET
ist = ".$saldo['betrag']."+soll,
zahlungsstatus = IF(".$saldo['betrag']." = 0,'bezahlt','offen')
WHERE id=".$offene_rechnung['id'];
$this->app->DB->Update($sql);
}
}
else {
$this->app->DB->Update("UPDATE rechnung SET ist = null WHERE id=".$offene_rechnung['id']);
}
}
$this->app->erp->fibu_rebuild_tables();
// END RECALCULATE
}
} }
+4 -4
View File
@@ -1113,10 +1113,10 @@ class Report
{ {
$filterCategory = $this->request->getPost('filter_category', ''); $filterCategory = $this->request->getPost('filter_category', '');
$filterTerm = $this->request->getPost('filter_term', ''); $filterTerm = $this->request->getPost('filter_term', '');
$filterOnlyOwn = $this->request->post->getBool('filter_own', false); $filterexcludeReadOnly = $this->request->post->getBool('filter_own', false);
$filterOnlyFavorites = $this->request->post->getBool('filter_favorites', false); $filterOnlyFavorites = $this->request->post->getBool('filter_favorites', false);
try { try {
$html= $this->getTileView($filterCategory, $filterTerm, $filterOnlyOwn, $filterOnlyFavorites); $html= $this->getTileView($filterCategory, $filterTerm, !$filterexcludeReadOnly, $filterOnlyFavorites);
$response = new JsonResponse(['success' => true, 'html' => $html]); $response = new JsonResponse(['success' => true, 'html' => $html]);
} catch (Exception $e) { } catch (Exception $e) {
$response = new Response($e->getMessage(), Response::HTTP_INTERNAL_SERVER_ERROR); $response = new Response($e->getMessage(), Response::HTTP_INTERNAL_SERVER_ERROR);
@@ -1176,14 +1176,14 @@ class Report
* *
* @return string tiles html * @return string tiles html
*/ */
protected function getTileView($category = '', $searchTerm = '', $onlyOwn = false, $onlyFavs = false) protected function getTileView($category = '', $searchTerm = '', $excludeReadOnly = true, $onlyFavs = false)
{ {
try { try {
$reportList = $this->gateway->getReportList( $reportList = $this->gateway->getReportList(
$category, $category,
$searchTerm, $searchTerm,
$this->app->User->GetID(), $this->app->User->GetID(),
$onlyOwn, $excludeReadOnly,
$onlyFavs $onlyFavs
); );
} catch (Exception $e) { } catch (Exception $e) {
+1 -1
View File
@@ -610,7 +610,7 @@ class Shopexport
'SELECT `id` 'SELECT `id`
FROM `shopexport` FROM `shopexport`
WHERE `aktiv` = 1 AND `autosendarticle` = 1 AND `artikelexport` = 1 WHERE `aktiv` = 1 AND `autosendarticle` = 1 AND `artikelexport` = 1
AND (`autosendarticle_last` IS NULL OR DATE_ADD(`autosendarticle_last` INTERVAL %d MINUTE) <= NOW())', AND (`autosendarticle_last` IS NULL OR DATE_ADD(`autosendarticle_last`, INTERVAL %d MINUTE) <= NOW())',
$minutes $minutes
) )
); );
+42 -12
View File
@@ -333,34 +333,64 @@ class Shopimporter_Presta extends ShopimporterBase
if (empty($nummer)) if (empty($nummer))
return; return;
$searchresult = $this->prestaRequest('GET', 'products?filter[reference]='.$nummer); $productsresult = $this->prestaRequest('GET', 'products?filter[reference]='.$nummer);
if (empty($searchresult)) { $combinationsresult = $this->prestaRequest('GET', 'combinations?filter[reference]='.$nummer);
$numberOfCombinations = count($combinationsresult->combinations->combination);
$numberOfProducts = count($productsresult->products->product);
$numberOfResults = $numberOfProducts + $numberOfCombinations;
if ($numberOfResults > 1) {
$this->Log('Got multiple results from Shop', $this->data);
return;
}
elseif ($numberOfResults < 1) {
$this->Log('No product found in Shop', $this->data); $this->Log('No product found in Shop', $this->data);
return; return;
} }
if (count($searchresult->products->product) > 1) {
$this->Log('Got multiple results from Shop', $this->data);
}
$productid = $searchresult->products->product->attributes()->id; $isCombination = $numberOfCombinations > 0;
$product = $this->prestaRequest('GET', "products/$productid"); if ($isCombination) {
$combinationId = intval($combinationsresult->combinations->combination->attributes()->id);
$combination = $this->prestaRequest('GET', "combinations/$combinationId");
$productId = intval($combination->combination->id_product);
} else {
$productId = intval($productsresult->products->product->attributes()->id);
}
$product = $this->prestaRequest('GET', "products/$productId");
$res = []; $res = [];
$res['nummer'] = strval($product->product->reference); if ($isCombination) {
$res['artikelnummerausshop'] = strval($product->product->reference); $res['nummer'] = strval($combination->combination->reference);
$res['artikelnummerausshop'] = strval($combination->combination->reference);
$res['ean'] = strval($combination->combination->ean13);
$res['preis_netto'] = floatval($product->product->price) + floatval($combination->combination->price);
} else {
$res['nummer'] = strval($product->product->reference);
$res['artikelnummerausshop'] = strval($product->product->reference);
$res['ean'] = strval($product->product->ean13);
$res['preis_netto'] = floatval($product->product->price);
}
$names = $this->toMultilangArray($product->product->name->language); $names = $this->toMultilangArray($product->product->name->language);
$descriptions = $this->toMultilangArray($product->product->description->language); $descriptions = $this->toMultilangArray($product->product->description->language);
$shortdescriptions = $this->toMultilangArray($product->product->description_short->language); $shortdescriptions = $this->toMultilangArray($product->product->description_short->language);
$metadescriptions = $this->toMultilangArray($product->product->meta_description->language);
$metakeywords = $this->toMultilangArray($product->product->meta_keywords->language);
$metatitles = $this->toMultilangArray($product->product->meta_title->language);
$res['name'] = $names['de']; $res['name'] = $names['de'];
$res['name_en'] = $names['en']; $res['name_en'] = $names['en'];
$res['uebersicht_de'] = $descriptions['de']; $res['uebersicht_de'] = $descriptions['de'];
$res['uebersicht_en'] = $descriptions['en']; $res['uebersicht_en'] = $descriptions['en'];
$res['preis_netto'] = strval($product->product->price); $res['kurztext_de'] = strip_tags($shortdescriptions['de']);
$res['kurztext_en'] = strip_tags($shortdescriptions['en']);
$res['hersteller'] = strval($product->product->manufacturer_name); $res['hersteller'] = strval($product->product->manufacturer_name);
$res['ean'] = strval($product->product->ean13); $res['metakeywords_de'] = $metakeywords['de'];
$res['metakeywords_en'] = $metakeywords['en'];
$res['metatitle_de'] = $metatitles['de'];
$res['metatitle_en'] = $metatitles['en'];
$res['metadescription_de'] = $metadescriptions['de'];
$res['metadescription_en'] = $metadescriptions['en'];
$images = []; $images = [];
foreach ($product->product->associations->images->image as $img) { foreach ($product->product->associations->images->image as $img) {
$endpoint = "images/products/$productid/$img->id"; $endpoint = "images/products/$productId/$img->id";
$imgdata = $this->prestaRequest('GET', $endpoint, '', true); $imgdata = $this->prestaRequest('GET', $endpoint, '', true);
$images[] = [ $images[] = [
'content' => base64_encode($imgdata), 'content' => base64_encode($imgdata),
+15 -11
View File
@@ -230,10 +230,14 @@ class Shopimporter_Shopify extends ShopimporterBase
if(isset($this->app->User) && $this->app->User && method_exists($this->app->User, 'GetName')){ if(isset($this->app->User) && $this->app->User && method_exists($this->app->User, 'GetName')){
$this->bearbeiter = $this->app->DB->real_escape_string($this->app->User->GetName()); $this->bearbeiter = $this->app->DB->real_escape_string($this->app->User->GetName());
} }
$einstellungen = $this->app->DB->Select("SELECT einstellungen_json FROM shopexport WHERE id = '$shopid' LIMIT 1"); $einstellungen = $this->app->DB->Select("SELECT einstellungen_json FROM shopexport WHERE id = '$shopid' LIMIT 1");
if($einstellungen){ if(!empty($einstellungen)){
$einstellungen = json_decode($einstellungen,true); $einstellungen = json_decode($einstellungen,true);
} else {
return;
} }
$this->ShopifyURL=trim($einstellungen['felder']['ShopifyURL']); $this->ShopifyURL=trim($einstellungen['felder']['ShopifyURL']);
if(stripos($this->ShopifyURL,'http') === false){ if(stripos($this->ShopifyURL,'http') === false){
$this->ShopifyURL = 'https://'.$this->ShopifyURL; $this->ShopifyURL = 'https://'.$this->ShopifyURL;
@@ -396,7 +400,7 @@ class Shopimporter_Shopify extends ShopimporterBase
$this->adapter->call("products/".$result['data']['product']['id']."/metafields.json", 'POST', array('metafield' => [ $this->adapter->call("products/".$result['data']['product']['id']."/metafields.json", 'POST', array('metafield' => [
'key' => 'sync_status', 'key' => 'sync_status',
'value' => 1, 'value' => 1,
'value_type' => 'integer', 'type' => 'number_integer',
'namespace' => 'xentral', 'namespace' => 'xentral',
])); ]));
if($result['data']['product']['id'] == $nummer) { if($result['data']['product']['id'] == $nummer) {
@@ -429,7 +433,7 @@ class Shopimporter_Shopify extends ShopimporterBase
$this->adapter->call("variants/".$resultv['variant']['id']."/metafields.json", 'POST', array('metafield' => [ $this->adapter->call("variants/".$resultv['variant']['id']."/metafields.json", 'POST', array('metafield' => [
'key' => 'sync_status', 'key' => 'sync_status',
'value' => 1, 'value' => 1,
'value_type' => 'integer', 'type' => 'number_integer',
'namespace' => 'xentral', 'namespace' => 'xentral',
])); ]));
$data['nummer'] = $resultv['data']['variant']['sku']; $data['nummer'] = $resultv['data']['variant']['sku'];
@@ -690,7 +694,7 @@ class Shopimporter_Shopify extends ShopimporterBase
$inventoryitemid = $resultv['data']['variant']['inventory_item_id']; $inventoryitemid = $resultv['data']['variant']['inventory_item_id'];
$resulti = $this->adapter->call("inventory_levels.json?inventory_item_ids=$inventoryitemid&location_ids=$locationid"); $resulti = $this->adapter->call("inventory_levels.json?inventory_item_ids=$inventoryitemid&location_ids=$locationid");
$vorhanden = $resulti['data']['inventory_levels'][0]['available']; $vorhanden = $resulti['data']['inventory_levels'][0]['available'];
$adjust = $lageranzahl - $vorhanden; $adjust = floatval($lageranzahl) - floatval($vorhanden);
if($adjust != 0){ if($adjust != 0){
$data = array("location_id" => $locationid, $data = array("location_id" => $locationid,
"inventory_item_id"=> $inventoryitemid, "inventory_item_id"=> $inventoryitemid,
@@ -1015,12 +1019,12 @@ class Shopimporter_Shopify extends ShopimporterBase
$dataproduct['product']['variants'][0]['metafields'] = array(array( $dataproduct['product']['variants'][0]['metafields'] = array(array(
"key" => "harmonized_system_code", "key" => "harmonized_system_code",
"value"=> $zolltarifnummer, "value"=> $zolltarifnummer,
"value_type"=> "string", "type"=> "text",
"namespace"=> "global"), "namespace"=> "global"),
[ [
'key' => 'sync_status', 'key' => 'sync_status',
'value' => 1, 'value' => 1,
'value_type' => 'integer', 'type' => 'number_integer',
'namespace' => 'xentral', 'namespace' => 'xentral',
]); ]);
if($pseudopreis != ''){ if($pseudopreis != ''){
@@ -1185,12 +1189,12 @@ class Shopimporter_Shopify extends ShopimporterBase
$veigenschaften[] = array( $veigenschaften[] = array(
"key" => "harmonized_system_code", "key" => "harmonized_system_code",
"value"=> $value['zolltarifnummer'], "value"=> $value['zolltarifnummer'],
"value_type"=> "string", "type"=> "text",
"namespace"=> "global"); "namespace"=> "global");
$veigenschaften[] = [ $veigenschaften[] = [
'key' => 'sync_status', 'key' => 'sync_status',
'value' => 1, 'value' => 1,
'value_type' => 'integer', 'type' => 'number_integer',
'namespace' => 'xentral', 'namespace' => 'xentral',
]; ];
@@ -3334,7 +3338,7 @@ class Shopimporter_Shopify extends ShopimporterBase
$this->adapter->call('orders/' . $auftrag . '/metafields.json', 'POST', array('metafield' => [ $this->adapter->call('orders/' . $auftrag . '/metafields.json', 'POST', array('metafield' => [
'key' => 'sync_status', 'key' => 'sync_status',
'value' => 1, 'value' => 1,
'value_type' => 'integer', 'type' => 'number_integer',
'namespace' => 'xentral', 'namespace' => 'xentral',
])); ]));
return 'ok'; return 'ok';
@@ -3367,7 +3371,7 @@ class Shopimporter_Shopify extends ShopimporterBase
$this->adapter->call('orders/' . $auftrag . '/metafields.json', 'POST', array('metafield' => [ $this->adapter->call('orders/' . $auftrag . '/metafields.json', 'POST', array('metafield' => [
'key' => 'sync_status', 'key' => 'sync_status',
'value' => 3, 'value' => 3,
'value_type' => 'integer', 'type' => 'number_integer',
'namespace' => 'xentral', 'namespace' => 'xentral',
])); ]));
} }
@@ -3420,7 +3424,7 @@ class Shopimporter_Shopify extends ShopimporterBase
$this->adapter->call('orders/' . $auftrag . '/metafields.json', 'POST', array('metafield' => [ $this->adapter->call('orders/' . $auftrag . '/metafields.json', 'POST', array('metafield' => [
'key' => 'sync_status', 'key' => 'sync_status',
'value' => 2, 'value' => 2,
'value_type' => 'integer', 'type' => 'number_integer',
'namespace' => 'xentral', 'namespace' => 'xentral',
])); ]));
}else{ }else{

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