diff --git a/Gemfile b/Gemfile index 49dd319c2..7d42b0589 100644 --- a/Gemfile +++ b/Gemfile @@ -1,6 +1,6 @@ source 'https://rubygems.org' -gem 'rails', '~> 4.2' +gem 'rails', '4.2.4' gem 'bcrypt' gem 'jquery-rails' diff --git a/Gemfile.lock b/Gemfile.lock index bb8dbe5ad..a593ab9d0 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,43 +1,43 @@ GEM remote: https://rubygems.org/ specs: - actionmailer (4.2.5) - actionpack (= 4.2.5) - actionview (= 4.2.5) - activejob (= 4.2.5) + actionmailer (4.2.4) + actionpack (= 4.2.4) + actionview (= 4.2.4) + activejob (= 4.2.4) mail (~> 2.5, >= 2.5.4) rails-dom-testing (~> 1.0, >= 1.0.5) - actionpack (4.2.5) - actionview (= 4.2.5) - activesupport (= 4.2.5) + actionpack (4.2.4) + actionview (= 4.2.4) + activesupport (= 4.2.4) rack (~> 1.6) rack-test (~> 0.6.2) rails-dom-testing (~> 1.0, >= 1.0.5) rails-html-sanitizer (~> 1.0, >= 1.0.2) - actionview (4.2.5) - activesupport (= 4.2.5) + actionview (4.2.4) + activesupport (= 4.2.4) builder (~> 3.1) erubis (~> 2.7.0) rails-dom-testing (~> 1.0, >= 1.0.5) rails-html-sanitizer (~> 1.0, >= 1.0.2) - activejob (4.2.5) - activesupport (= 4.2.5) + activejob (4.2.4) + activesupport (= 4.2.4) globalid (>= 0.3.0) - activemodel (4.2.5) - activesupport (= 4.2.5) + activemodel (4.2.4) + activesupport (= 4.2.4) builder (~> 3.1) - activerecord (4.2.5) - activemodel (= 4.2.5) - activesupport (= 4.2.5) + activerecord (4.2.4) + activemodel (= 4.2.4) + activesupport (= 4.2.4) arel (~> 6.0) - activesupport (4.2.5) + activesupport (4.2.4) i18n (~> 0.7) json (~> 1.7, >= 1.7.7) minitest (~> 5.1) thread_safe (~> 0.3, >= 0.3.4) tzinfo (~> 1.1) arel (6.0.3) - ast (2.1.0) + ast (2.2.0) axlsx (2.0.1) htmlentities (~> 4.3.1) nokogiri (>= 1.4.1) @@ -50,13 +50,15 @@ GEM cocoon (1.2.6) codeclimate-test-reporter (0.4.8) simplecov (>= 0.7.1, < 1.0.0) - coffee-rails (4.1.0) + coffee-rails (4.1.1) coffee-script (>= 2.2.0) - railties (>= 4.0.0, < 5.0) + railties (>= 4.0.0, < 5.1.x) coffee-script (2.4.1) coffee-script-source execjs coffee-script-source (1.10.0) + commonjs (0.2.7) + concurrent-ruby (1.0.0) countries (1.2.2) currencies (~> 0.4.2) i18n_data (~> 0.7.0) @@ -64,7 +66,7 @@ GEM countries (~> 1.2.0) sort_alphabetical (~> 1.0) currencies (0.4.2) - dalli (2.7.4) + dalli (2.7.5) date_validator (0.8.1) activemodel docile (1.1.5) @@ -82,7 +84,7 @@ GEM execjs (2.6.0) fakeredis (0.5.0) redis (~> 3.0) - gli (2.13.3) + gli (2.13.4) globalid (0.3.6) activesupport (>= 4.1.0) highline (1.7.8) @@ -90,7 +92,7 @@ GEM http-cookie (1.0.2) domain_name (~> 0.5) i18n (0.7.0) - i18n-tasks (0.9.1) + i18n-tasks (0.9.2) activesupport (>= 4.0.2) ast (>= 2.1.0) easy_translate (>= 0.5.0) @@ -101,15 +103,22 @@ GEM term-ansicolor (>= 1.3.2) terminal-table (>= 1.5.1) i18n_data (0.7.0) - jquery-rails (4.0.5) + jquery-rails (4.1.0) rails-dom-testing (~> 1.0) railties (>= 4.2.0) thor (>= 0.14, < 2.0) json (1.8.3) + less (2.6.0) + commonjs (~> 0.2.7) + less-rails (2.7.1) + actionpack (>= 4.0) + less (~> 2.6.0) + sprockets (> 2, < 4) + tilt libv8 (3.16.14.13) lightbox2-rails (2.7.1) railties (>= 3.1) - localeapp (0.9.3) + localeapp (1.0.2) gli i18n json @@ -120,15 +129,15 @@ GEM nokogiri (>= 1.5.9) mail (2.6.3) mime-types (>= 1.16, < 3) - mime-types (2.6.2) - mini_portile (0.6.2) + mime-types (2.99) + mini_portile2 (2.0.0) minitest (5.8.3) mono_logger (1.1.0) multi_json (1.11.2) mysql2 (0.3.20) netrc (0.11.0) - nokogiri (1.6.6.4) - mini_portile (~> 0.6.0) + nokogiri (1.6.7.1) + mini_portile2 (~> 2.0.0.rc2) parser (2.2.3.0) ast (>= 1.1, < 3.0) pdfkit (0.8.2) @@ -137,16 +146,16 @@ GEM rack rack-test (0.6.3) rack (>= 1.0) - rails (4.2.5) - actionmailer (= 4.2.5) - actionpack (= 4.2.5) - actionview (= 4.2.5) - activejob (= 4.2.5) - activemodel (= 4.2.5) - activerecord (= 4.2.5) - activesupport (= 4.2.5) + rails (4.2.4) + actionmailer (= 4.2.4) + actionpack (= 4.2.4) + actionview (= 4.2.4) + activejob (= 4.2.4) + activemodel (= 4.2.4) + activerecord (= 4.2.4) + activesupport (= 4.2.4) bundler (>= 1.3.0, < 2.0) - railties (= 4.2.5) + railties (= 4.2.4) sprockets-rails rails-deprecated_sanitizer (1.0.3) activesupport (>= 4.2.0.alpha) @@ -156,17 +165,17 @@ GEM rails-deprecated_sanitizer (>= 1.0.1) rails-html-sanitizer (1.0.2) loofah (~> 2.0) - railties (4.2.5) - actionpack (= 4.2.5) - activesupport (= 4.2.5) + railties (4.2.4) + actionpack (= 4.2.4) + activesupport (= 4.2.4) rake (>= 0.8.7) thor (>= 0.18.1, < 2.0) - rake (10.4.2) + rake (10.5.0) redis (3.2.2) redis-namespace (1.5.2) redis (~> 3.0, >= 3.0.4) ref (2.0.0) - request_store (1.2.1) + request_store (1.3.0) resque (1.25.2) mono_logger (~> 1.0) multi_json (~> 1.0) @@ -187,19 +196,19 @@ GEM nokogiri rubyzip spreadsheet (> 0.6.4) - ruby-ole (1.2.11.8) + ruby-ole (1.2.12) rubyzip (1.0.0) - sass (3.4.19) + sass (3.4.21) sass-rails (5.0.4) railties (>= 4.0.0, < 5.0) sass (~> 3.1) sprockets (>= 2.8, < 4.0) sprockets-rails (>= 2.0, < 4.0) tilt (>= 1.1, < 3) - simple_form (3.2.0) - actionpack (~> 4.0) - activemodel (~> 4.0) - simplecov (0.10.0) + simple_form (3.2.1) + actionpack (> 4, < 5.1) + activemodel (> 4, < 5.1) + simplecov (0.11.1) docile (~> 1.1.0) json (~> 1.8) simplecov-html (~> 0.10.0) @@ -210,14 +219,15 @@ GEM tilt (>= 1.3, < 3) sort_alphabetical (1.0.2) unicode_utils (>= 1.2.2) - spreadsheet (1.0.9) + spreadsheet (1.1.1) ruby-ole (>= 1.0) - sprockets (3.4.0) + sprockets (3.5.2) + concurrent-ruby (~> 1.0) rack (> 1, < 3) - sprockets-rails (2.3.3) - actionpack (>= 3.0) - activesupport (>= 3.0) - sprockets (>= 2.8, < 4.0) + sprockets-rails (3.0.0) + actionpack (>= 4.0) + activesupport (>= 4.0) + sprockets (>= 3.0.0) term-ansicolor (1.3.2) tins (~> 1.0) terminal-table (1.5.2) @@ -227,15 +237,15 @@ GEM thor (0.19.1) thread (0.2.2) thread_safe (0.3.5) - tilt (2.0.1) - tins (1.7.0) + tilt (2.0.2) + tins (1.8.1) turbolinks (2.5.3) coffee-rails - twitter-bootstrap-rails (3.2.0) - actionpack (~> 4.1) - execjs (~> 2.2) - rails (~> 4.1) - railties (~> 4.1) + twitter-bootstrap-rails (3.2.2) + actionpack (>= 3.1) + execjs (>= 2.2.2, >= 2.2) + less-rails (>= 2.5.0) + railties (>= 3.1) tzinfo (1.2.2) thread_safe (~> 0.1) uglifier (2.7.2) @@ -247,7 +257,7 @@ GEM unicode_utils (1.4.0) vegas (0.1.11) rack (>= 1.0.0) - wicked_pdf (1.0.1) + wicked_pdf (1.0.3) ya2yaml (0.31) PLATFORMS @@ -272,7 +282,7 @@ DEPENDENCIES minitest mysql2 (~> 0.3.18) pdfkit - rails (~> 4.2) + rails (= 4.2.4) rake request_store resque diff --git a/app/assets/stylesheets/static/pupesoft.scss b/app/assets/stylesheets/static/pupesoft.scss index f1c3dccf0..f8f1798e0 100644 --- a/app/assets/stylesheets/static/pupesoft.scss +++ b/app/assets/stylesheets/static/pupesoft.scss @@ -267,3 +267,8 @@ table.responsive td input[type=text] { width: 70%; } } + +.fixed-height { + max-height: 200px; + overflow-y: scroll; +} diff --git a/app/assets/stylesheets/static/pupesoft_legacy.css b/app/assets/stylesheets/static/pupesoft_legacy.css index a9d9e2943..ff84b2402 100644 --- a/app/assets/stylesheets/static/pupesoft_legacy.css +++ b/app/assets/stylesheets/static/pupesoft_legacy.css @@ -72,3 +72,8 @@ ul.list-unstyled { .del { text-decoration: line-through; } + +.fixed-height { + max-height: 200px; + overflow-y: scroll; +} diff --git a/app/classes/postal_official_legend.rb b/app/classes/postal_official_legend.rb new file mode 100644 index 000000000..fd13e5e82 --- /dev/null +++ b/app/classes/postal_official_legend.rb @@ -0,0 +1,246 @@ +class PostalOfficialLegend + def self.options + [ + [ "Pupesoft / Itella", [ + [ "Itella Express City 00", "Express City 00" ], + [ "Itella Express Morning 9", "Express Morning 9" ], + [ "Itella Express Business Day 14", "Express Business Day 14" ], + [ "Itella Express Point 00/16", "Express Point 00/16" ], + [ "Itella Express Flex 21", "Express Flex 21" ], + [ "Itella Economy 16", "Economy 16" ], + [ "Itella Customer Return", "Customer Return" ], + [ "Itella Undelivered Shipment", "Undelivered Shipment" ], + [ "Itella Lisäarvokuljetus", "Lisäarvokuljetus" ], + [ "Itella Priority Ulkomaan lähetys", "Priority Ulkomaa" ] + ]], + [ "Unifaun / Itella", [ + [ "Itella Economy Letter", "ITELLAMAILEC" ], + [ "Itella Economy Parcel", "IT16" ], + [ "Itella Express Business Day", "IT14" ], + [ "Itella Express Business Day kuljetusyksikkö", "ITKY14" ], + [ "Itella Express Business Day pallet (Ulkomaa)", "ITKY14I" ], + [ "Itella Express Business Day parcel (Ulkomaa)", "IT14I" ], + [ "Itella Express City", "ITEXPC" ], + [ "Itella Express City kuljetusyksikkö", "ITKYEXPC" ], + [ "Itella Express Flex", "IT21" ], + [ "Itella Express Flex kuljetusyksikkö", "ITKY21" ], + [ "Itella Express Morning", "IT09" ], + [ "Itella Express Morning kuljetusyksikkö", "ITKY09" ], + [ "Itella Logistics Oy, Kappaletavara", "TPSTD" ], + [ "Itella Logistics Oy, Kotimaan Rahti", "ITELLALOGKR" ], + [ "Itella Priority Letter", "ITELLAMAILPR" ], + [ "Itella Priority Parcel", "ITPR" ], + [ "Itella SmartPOST", "ITSP" ], + [ "Itella VAK/ADR", "ITVAK" ], + [ "Itella VAK/ADR kuljetusyksikkö", "ITKYVAK" ] + ]], + [ "Unifaun / Bring", [ + [ "Bring CarryOn Budget", "PNL359" ], + [ "Bring CarryOn Business", "PNL330" ], + [ "Bring CarryOn Business 09.00", "PNL335" ], + [ "Bring CarryOn Business BulkReturn", "PNL333" ], + [ "Bring CarryOn Business BulkSplit", "PNL332" ], + [ "Bring CarryOn Business BulkSplit 09.00", "PNL334" ], + [ "Bring CarryOn Business Pallet", "PNL336" ], + [ "Bring CarryOn Business Pallet 09.00", "PNL339" ], + [ "Bring CarryOn Business Return", "PNL331" ], + [ "Bring CarryOn HomeShopping", "PNL340" ], + [ "Bring CarryOn HomeShopping BulkReturn", "PNL343" ], + [ "Bring CarryOn HomeShopping BulkSplit", "PNL342" ], + [ "Bring CarryOn HomeShopping BulkSplit Home", "PNL349" ], + [ "Bring CarryOn HomeShopping BulkSplit Mini", "PNL345" ], + [ "Bring CarryOn HomeShopping Return", "PNL341" ], + [ "Bring CarryOn Waybill", "PNLWAY" ], + [ "Bring Express Business Distribution", "BOXBD" ], + [ "Bring Express Business Distribution Pallet", "BOXBDP" ], + [ "Bring Express Courier Ad-Hoc", "BOXCA" ], + [ "Bring Express Courier Distribution", "BOXCD" ], + [ "Bring Express Home Delivery", "BOXHD" ], + [ "Bring Express Home Delivery Return", "BOXHDR" ], + [ "Bring Express QuickPack", "BOXQP" ], + [ "Bring Express Store Home Delivery", "BOXSHD" ], + [ "Bring Express Store Home Delivery Return", "BOXSHDR" ] + ]], + [ "Unifaun / Dachser", [ + [ "Dachser Targofix", "DACTFIX" ], + [ "Dachser Targofix 10:00", "DACTFIX10" ], + [ "Dachser Targofix 12:00", "DACTFIX12" ], + [ "Dachser Targoflex", "DACTFLEX" ], + [ "Dachser Targospeed", "DACTSPEED" ], + [ "Dachser Targospeed 10:00", "DACTSPEED10" ], + [ "Dachser Targospeed 12:00", "DACTSPEED12" ], + [ "Dachser Targospeed Plus", "DACTSPEEDPLUS" ] + ]], + [ "Unifaun / DANX", [ + [ "DANX", "DANXSTD" ] + ]], + [ "Unifaun / DB Schenker", [ + [ "DB SCHENKER Express (Finland)", "SBTLFIEXP" ], + [ "DB SCHENKER Finland System", "SBTLFISY" ], + [ "DB SCHENKERbudget", "BBU" ], + [ "DB SCHENKERcoldsped - Europa", "BCSI" ], + [ "DB SCHENKERcoldsped - Sverige", "BCS" ], + [ "DB SCHENKERdirect", "BDI" ], + [ "DB SCHENKERparcel", "BPA" ], + [ "DB SCHENKERprivpak - Hem Dag (utan avisering och kvittens)", "BPHDP" ], + [ "DB SCHENKERprivpak - Hem Dag med avisering (och kvittens) (Paket)", "BPHDAP" ], + [ "DB SCHENKERprivpak - Hem Kväll med avisering (och kvittens)", "BPHKAP" ], + [ "DB SCHENKERprivpak - Ombud Standard (1 kolli, <20 kg)", "BHP" ], + [ "DB SCHENKERprivpak - Terminal", "BPOSG" ], + [ "DB SCHENKERprivpak - Till Jobbet", "BPTJP" ], + [ "DB SCHENKERsystem", "BCF" ] + ]], + [ "Unifaun / DHL", [ + [ "DHL Euroconnect", "ASU" ], + [ "DHL Euroconnect Plus", "ASUP" ], + [ "DHL Express 09:00 (Tullinalainen)", "DASECD" ], + [ "DHL Express 09:00 (Tullivapaa)", "DASE" ], + [ "DHL Express 10:30 (Tullinalainen)", "DATDM" ], + [ "DHL Express 10:30 (Tullivapaa)", "DATDL" ], + [ "DHL Express 12:00 (Tullinalainen)", "DAMECD" ], + [ "DHL Express 12:00 (Tullivapaa)", "DAME" ], + [ "DHL Express Envelope (Tullivapaa)", "DAXPD" ], + [ "DHL Express Worldwide (Kotimaa)", "DADOM" ], + [ "DHL Express Worldwide (Tullinalainen)", "DAWPX" ], + [ "DHL Express Worldwide (Tullivapaa EU:ssa)", "DAECX" ], + [ "DHL Express Worldwide (Tullivapaa, Ei-EU)", "DADOX" ], + [ "DHL Freight Domestic EE", "DHLFREIGHTESTDOM" ], + [ "DHL Freight Euroconnect EE", "DHLFREIGHTESTEC" ], + [ "DHL Freight Euroconnect FI", "DHLFREIGHTFIEC" ], + [ "DHL Freight Kotimaa", "DHLFREIGHTFIKT" ], + [ "DHL Global Forwarding Air Freight", "DGFAIR" ], + [ "DHL Global Forwarding Air Freight PLUS", "DGFAIRPLUS" ], + [ "DHL Paket", "AEX" ], + [ "DHL Pall", "ASP2" ], + [ "DHL Parti", "ASWP2" ], + [ "DHL Service Point", "ASPO" ], + [ "DHL Service Point C.O.D.", "ASPOC" ], + [ "DHL Service Point Retur", "ASPOR" ], + [ "DHL Stycke", "ASWS2" ], + [ "DHL Swednet Partigods", "ASWP" ], + [ "DHL Swednet Styckegods", "ASWS" ] + ]], + [ "Unifaun / DSV", [ + [ "DSV Road Kappaletavara", "DSVFIGRP" ], + [ "DSV Road Osakuorma", "DSVFIFULL" ] + ]], + [ "Unifaun / Fennoway", [ + [ "Fennoway Fennorahti", "FENNORAHTI" ] + ]], + [ "Unifaun / GLS", [ + [ "GLS Suomi INTERNATIONAL", "GLSFIINT" ] + ]], + [ "Unifaun / Kaukokiito", [ + [ "Kaukokiito", "KKSTD" ] + ]], + [ "Unifaun / Kiitolinja", [ + [ "KIITOLINJA kappaletavara", "KLGRP" ] + ]], + [ "Unifaun / KN Road", [ + [ "KN Road", "KUEHNENAGELROAD" ] + ]], + [ "Unifaun / Tyvi", [ + [ "Kuljetusliike Tyvi Oy", "KTYVI" ] + ]], + [ "Unifaun / Matkahuolto", [ + [ "Matkahuolto Ahvenanmaan Jakopaketti", "MH68" ], + [ "Matkahuolto Baltian Paketti", "MH63" ], + [ "Matkahuolto Bussipaketti", "MH10" ], + [ "Matkahuolto Dokumenttikuori", "MH43" ], + [ "Matkahuolto Jakopaketti/Paikallispaketti", "MH3050" ], + [ "Matkahuolto Lavarahti", "MH57" ], + [ "Matkahuolto Lähellä-paketin palautus", "MH81" ], + [ "Matkahuolto Lähellä-paketti", "MH80" ], + [ "Matkahuolto Mannermaan Jakopaketti", "MH75" ], + [ "Matkahuolto Mannermaan Paketti", "MH74" ], + [ "Matkahuolto Pikapaketti", "MH20" ], + [ "Matkahuolto Postaalipaketti", "MH82" ], + [ "Matkahuolto Postaalipaketti palautus", "MH83" ], + [ "Matkahuolto Rahtipussi", "MH40" ], + [ "Matkahuolto Rahtipussi jakopaketti", "MH42" ] + ]], + [ "Unifaun / Neutraali", [ + [ "Neutraali Kappaletavarapalvelu (osoitekortti + rahtikirja)", "FREEG" ], + [ "Neutraali Kappaletavarapalvelu (osoitekortti + rahtikirja): Transpori Oy", "FREEG_793" ], + [ "Neutraali Kappaletavarapalvelu (osoitekortti + rahtikirja): AJ Laine Oy", "FREEG_794" ], + [ "Neutraali Kirjepalvelu", "FREEB" ], + [ "Neutraali pakettipalvelu (osoitekortti)", "FREEP" ] + ]], + [ "Unifaun / Posten Brev", [ + [ "Posten Brev - Brevpostförskott", "PAF" ], + [ "Posten Brev - Express (kotimaa)", "BEXPD" ], + [ "Posten Brev - Normaali", "BREV" ], + [ "Posten Brev - Priority+", "BEXPI" ], + [ "Posten Brev - Värde", "BVAL" ], + [ "Posten Brev Kirjattu kirje (BREKD)", "BREKD" ], + [ "Posten Brev Kirjattu kirje (BREKI)", "BREKI" ], + [ "Posten EMS (brev/dokument)", "EMSD2" ], + [ "Posten EMS (paket/varor)", "EMSP2" ] + ]], + [ "Unifaun / PostNord", [ + [ "PostNord DPD Classic (Suomi)", "DPDFI" ], + [ "PostNord Logistics DPD Företagspaket", "P15" ], + [ "PostNord Logistics DPD Företagspaket 12.00", "P14" ], + [ "PostNord Logistics DPD Utrikes", "DPD" ], + [ "PostNord Logistics Express - Express 07.00", "P42" ], + [ "PostNord Logistics Hempaket", "P32" ], + [ "PostNord Logistics Hjemlevering (Norge)", "DTPGHD" ], + [ "PostNord Logistics InNight", "H48" ], + [ "PostNord Logistics Kundretur", "P31" ], + [ "PostNord Logistics MyPack", "P19" ], + [ "PostNord Logistics MyPack (Suomi)", "P19FI" ], + [ "PostNord Logistics MyPack (Norja)", "P19NO" ], + [ "PostNord Logistics MyPack return", "P24" ], + [ "PostNord Logistics MyPack return (Suomi)", "P24FI" ], + [ "PostNord Logistics MyPack Return (Norja)", "P24NO" ], + [ "PostNord Logistics PALL.ETT", "P52" ], + [ "PostNord Logistics Partifrakt (Norja)", "DTPGPF" ], + [ "PostNord Logistics Postpaket Utrikes", "P91" ], + [ "PostNord Logistics Stykkgods (Norja)", "DTPGSG" ] + ]], + [ "Unifaun / Privpak", [ + [ "Privpak Finland (normaali & palautus)", "PPFITRRET" ], + [ "Privpak Finland (normaali)", "PPFITR" ] + ]], + [ "Unifaun / R & P", [ + [ "R & P Kuljetus Pakettipalvelu", "RPPP" ] + ]], + [ "Unifaun / TK Logistik", [ + [ "TK Logistik Gods", "TKLOGGODS" ] + ]], + [ "Unifaun / TNT", [ + [ "TNT 08:00 Express (Domestic Docs)", "TNT08DOMD" ], + [ "TNT 08:00 Express (Domestic Non Docs)", "TNT08DOMN" ], + [ "TNT 09:00 Express (Docs)", "TNT09D" ], + [ "TNT 09:00 Express (Domestic Docs)", "TNT09DOMD" ], + [ "TNT 09:00 Express (Domestic Non Docs)", "TNT09DOMN" ], + [ "TNT 09:00 Express (Domestic)", "TNT09" ], + [ "TNT 09:00 Express (Non Docs)", "TNT09N" ], + [ "TNT 10:00 Express (Docs)", "TNT10D" ], + [ "TNT 10:00 Express (Domestic Docs)", "TNT10DOMD" ], + [ "TNT 10:00 Express (Domestic Non Docs)", "TNT10DOMN" ], + [ "TNT 10:00 Express (Domestic)", "TNT10" ], + [ "TNT 10:00 Express (Non Docs)", "TNT10N" ], + [ "TNT 12:00 Economy Express (Non Docs)", "TNT412" ], + [ "TNT 12:00 Express (Docs)", "TNT12D" ], + [ "TNT 12:00 Express (Domestic Docs)", "TNT12DOMD" ], + [ "TNT 12:00 Express (Domestic Non Docs)", "TNT12DOMN" ], + [ "TNT 12:00 Express (Domestic)", "TNT12" ], + [ "TNT 12:00 Express (Non Docs)", "TNT12N" ], + [ "TNT Economy Express (Non Docs)", "TNT48N" ], + [ "TNT Express (Docs)", "TNT15D" ], + [ "TNT Express (Domestic Docs)", "TNT15DOMD" ], + [ "TNT Express (Domestic Non Docs)", "TNT15DOMN" ], + [ "TNT Express (Domestic)", "TNT15" ], + [ "TNT Express (Non Docs)", "TNT15N" ], + [ "TNT Special Economy Express", "TNT728" ] + ]], + [ "Unifaun / UPK", [ + [ "Uudenmaan Pikakuljetus Oy Erikoisaikataulu", "UPKE" ], + [ "Uudenmaan Pikakuljetus Oy Kotijakelu", "UPKK" ], + [ "Uudenmaan Pikakuljetus Oy Normal 24h", "UPK24" ], + [ "Uudenmaan Pikakuljetus Oy Normal 24h AVI", "UPK24A" ] + ]] + ] + end +end diff --git a/app/controllers/administration/delivery_methods_controller.rb b/app/controllers/administration/delivery_methods_controller.rb new file mode 100644 index 000000000..55deb5765 --- /dev/null +++ b/app/controllers/administration/delivery_methods_controller.rb @@ -0,0 +1,105 @@ +class Administration::DeliveryMethodsController < AdministrationController + def index + @delivery_methods = DeliveryMethod.search_like(search_params).order(order_params) + end + + def show + render :edit + end + + def edit + end + + def new + @delivery_method = DeliveryMethod.new + render :edit + end + + def create + @delivery_method = DeliveryMethod.new delivery_method_params + + if @delivery_method.save + redirect_to delivery_methods_path, notice: t('.create_success') + else + render :edit + end + end + + def update + if @delivery_method.update delivery_method_params + + msg = [] + msg << t('.update_success') + + if @delivery_method.flash_notice.present? + msg << @delivery_method.flash_notice + end + + redirect_to delivery_methods_path, notice: msg.join(', ') + else + render :edit + end + end + + def destroy + if @delivery_method.destroy + redirect_to delivery_methods_path, notice: t('.destroy_success') + else + render :edit + end + end + + private + def delivery_method_params + alustat = params[:delivery_method][:sallitut_alustat] + params[:delivery_method][:sallitut_alustat] = alustat.reject(&:empty?).join(',') if alustat + + params.require(:delivery_method).permit( + :aktiivinen_kuljetus, :aktiivinen_kuljetus_kansallisuus, :ei_pakkaamoa, + :erikoispakkaus_kielto, :erilliskasiteltavakulu, :erittely, :extranet, + :jarjestys, :jvkielto, :jvkulu, :kauppatapahtuman_luonne, :kontti, + :kuljetusmuoto, :kuljetusvakuutus, :kuljetusvakuutus_tuotenumero, + :kuljetusvakuutus_tyyppi, :kuljyksikko, :kuluprosentti, :lahdon_selite, + :lajittelupiste, :lauantai, :lisakulu, :lisakulu_summa, :logy_rahtikirjanumerot, + :maa_maara, :merahti, :nouto, :osoitelappu, :poistumistoimipaikka_koodi, + :rahdinkuljettaja, :rahti_tuotenumero, :rahtikirja, :rahtikirjakopio_email, + :sallitut_alustat, :sallitut_maat, :selite, :sisamaan_kuljetus, + :sisamaan_kuljetus_kansallisuus, :sisamaan_kuljetusmuoto, :sopimusnro, + :toim_maa, :toim_nimi, :toim_nimitark, :toim_osoite, :toim_ovttunnus, + :toim_postino, :toim_postitp, :tulostustapa, :ulkomaanlisa, :uudet_pakkaustiedot, + :vaihtoehtoinen_vak_toimitustapa, :vak_kielto, :virallinen_selite, + location_ids: [], + translations_attributes: [:id, :kieli, :selitetark, :_destroy], + departures_attributes: [ + :id, + :kerailyn_aloitusaika, + :lahdon_viikonpvm, + :lahdon_kellonaika, + :viimeinen_tilausaika, + :terminaalialue, + :asiakasluokka, + :varasto, + :aktiivi, + :ohjausmerkki, + :_destroy, + alkupvm: [:day, :month, :year], + ], + ) + end + + def searchable_columns + [ + :jarjestys, + :selite, + :sopimusnro, + ] + end + + def find_resource + @delivery_method = DeliveryMethod.find params[:id] + end + + def sortable_columns + searchable_columns + end +end diff --git a/app/helpers/administration/departure_helper.rb b/app/helpers/administration/departure_helper.rb new file mode 100644 index 000000000..fb76e76e3 --- /dev/null +++ b/app/helpers/administration/departure_helper.rb @@ -0,0 +1,35 @@ +module Administration::DepartureHelper + ROOT = 'administration.delivery_methods.departures' + + def day_of_the_week_options + Date::DAYS_INTO_WEEK.inject([]) do |result, day| + index = day.first == :sunday ? 0 : day.second + 1 + result << [t("#{ROOT}.day_of_the_week_options.#{day.first}"), index] + end + end + + def terminal_area_options + Keyword::TerminalArea.order(:label, :code).pluck(:label, :code) do |c| + [ c.label, c.code ] + end + end + + def customer_group_options + Keyword::CustomerGroup.order(:label, :code).pluck(:label, :code) do |c| + [ c.label, c.code ] + end + end + + def warehouse_options + Warehouse.order(:nimitys).pluck(:nimitys, :tunnus) do |c| + [ c.nimitys, c.tunnus ] + end + end + + def status_options + [ + [ t("#{ROOT}.status_options.in_use"), :in_use ], + [ t("#{ROOT}.status_options.not_in_use"), :not_in_use ], + ] + end +end diff --git a/app/helpers/carrier_helper.rb b/app/helpers/carrier_helper.rb index 0dd24b6b3..9ae22884f 100644 --- a/app/helpers/carrier_helper.rb +++ b/app/helpers/carrier_helper.rb @@ -7,6 +7,10 @@ def neutraali_options end end + def carrier_options + Carrier.order(:nimi, :koodi).pluck(:nimi, :koodi) + end + def rahdinkuljettaja_options Carrier.all.map do |c| [ c.nimi, c.koodi ] diff --git a/app/helpers/delivery_method_helper.rb b/app/helpers/delivery_method_helper.rb new file mode 100644 index 000000000..89e9a0931 --- /dev/null +++ b/app/helpers/delivery_method_helper.rb @@ -0,0 +1,139 @@ +module DeliveryMethodHelper + ROOT = 'administration.delivery_methods' + + def adr_prohibition_options + options = [ + [ t("administration.delivery_methods.adr_prohibition_options.permit_adr"), "" ], + [ t("administration.delivery_methods.adr_prohibition_options.adr_prohibition"), "K" ] + ] + + text = t("administration.delivery_methods.adr_prohibition_options.adr_shipment") + + options = options + adr_options(text) + options.reject { |i,_| i.empty? } + end + + def alternative_adr_delivery_method_options + options = [ + [ t("administration.delivery_methods.alternative_adr_delivery_method_options.adr_products_transfer_prohibition"), "" ], + ] + + text = t("administration.delivery_methods.alternative_adr_delivery_method_options.adr_products_transfer_permit") + + options = options + adr_options(text) + options.reject { |i,_| i.empty? } + end + + def adr_options(text) + DeliveryMethod.permit_adr.shipment.map do |i| + [ "#{text} #{i.selite}", i.selite ] + end + end + + def label_options + options = DeliveryMethod.osoitelappus.map do |key,_| + [ t("#{ROOT}.label_options.#{key}"), key ] + end + + options.reject { |_,key| !Current.company.parameter.collection_batch_based_on_dimensions? && key == 'simple_label' } + end + + def pickup_options + DeliveryMethod.noutos.map do |key,_| + [ t("#{ROOT}.pickup_options.#{key}"), key ] + end + end + + def saturday_delivery_options + DeliveryMethod.lauantais.map do |key,_| + [ t("#{ROOT}.saturday_delivery_options.#{key}"), key ] + end + end + + def transport_unit_options + DeliveryMethod.kuljyksikkos.map do |key,_| + [ t("#{ROOT}.transport_unit_options.#{key}"), key ] + end + end + + def print_method_options + DeliveryMethod.tulostustapas.map do |key,_| + [ t("#{ROOT}.print_method_options.#{key}"), key ] + end + end + + def freight_contract_options + DeliveryMethod.merahtis.map do |key,_| + [ t("#{ROOT}.freight_contract_options.#{key}"), key ] + end + end + + def logy_waybill_number_options + DeliveryMethod.logy_rahtikirjanumerots.map do |key,_| + [ t("#{ROOT}.logy_waybill_number_options.#{key}"), key ] + end + end + + def extranet_options + DeliveryMethod.extranets.map do |key,_| + [ t("#{ROOT}.extranet_options.#{key}"), key ] + end + end + + def container_options + DeliveryMethod.konttis.map do |key,_| + [ t("#{ROOT}.container_options.#{key}"), key ] + end + end + + def cash_on_delivery_prohibition_options + DeliveryMethod.jvkieltos.map do |key,_| + [ t("#{ROOT}.cash_on_delivery_prohibition_options.#{key}"), key ] + end + end + + def special_packaging_prohibition_options + DeliveryMethod.erikoispakkaus_kieltos.map do |key,_| + [ t("#{ROOT}.special_packaging_prohibition_options.#{key}"), key ] + end + end + + def packing_line_prohibition_options + DeliveryMethod.ei_pakkaamoas.map do |key,_| + [ t("#{ROOT}.packing_line_prohibition_options.#{key}"), key ] + end + end + + def waybill_specification_options + DeliveryMethod.erittelies.map do |key,_| + [ t("#{ROOT}.waybill_specification_options.#{key}"), key ] + end + end + + def new_packaging_information_options + DeliveryMethod.uudet_pakkaustiedots.map do |key,_| + [ t("#{ROOT}.new_packaging_information_options.#{key}"), key ] + end + end + + def transportation_insurance_type_options + DeliveryMethod.kuljetusvakuutus_tyyppis.map do |key,_| + [ t("#{ROOT}.transportation_insurance_type_options.#{key}"), key ] + end + end + + def waybill_options + [ + [ t('administration.delivery_methods.waybill_options.generic_a4'), :generic_a4 ], + [ t('administration.delivery_methods.waybill_options.itella_a5'), :itella_a5 ], + [ t('administration.delivery_methods.waybill_options.itella_thermal'), :itella_thermal ], + [ t('administration.delivery_methods.waybill_options.itella_priority_foreign'), :itella_priority_foreign ], + [ t('administration.delivery_methods.waybill_options.unifaun_online'), :unifaun_online ], + [ t('administration.delivery_methods.waybill_options.unifaun_print_server'), :unifaun_print_server ], + [ t('administration.delivery_methods.waybill_options.dpd_waybill'), :dpd_waybill ], + [ t('administration.delivery_methods.waybill_options.dpd_ftp'), :dpd_ftp ], + [ t('administration.delivery_methods.waybill_options.ups_ftp'), :ups_ftp ], + [ t('administration.delivery_methods.waybill_options.no_waybill'), :no_waybill ], + ] + end +end diff --git a/app/helpers/keyword_helper.rb b/app/helpers/keyword_helper.rb index 9bb385985..f252c0ae7 100644 --- a/app/helpers/keyword_helper.rb +++ b/app/helpers/keyword_helper.rb @@ -28,4 +28,20 @@ def translatable_locales_options [ 'Venäjä', 'ru' ], ] end + + def mode_of_transport_options + Keyword::ModeOfTransport.pluck(:selitetark, :selite) + end + + def nature_of_transaction_options + Keyword::NatureOfTransaction.pluck(:selitetark, :selite) + end + + def customs_options + Keyword::Customs.pluck("CONCAT(selite, ' ', selitetark)", :selite) + end + + def sorting_point_options + Keyword::SortingPoint.pluck(:selitetark, :selite) + end end diff --git a/app/models/company.rb b/app/models/company.rb index 9d01b55bd..780de1393 100644 --- a/app/models/company.rb +++ b/app/models/company.rb @@ -8,9 +8,13 @@ class Company < ActiveRecord::Base o.has_many :carriers o.has_many :cash_registers o.has_many :currencies + o.has_many :customer_keywords o.has_many :customers + o.has_many :delivery_methods o.has_many :factorings o.has_many :fiscal_years + o.has_many :freight_contracts + o.has_many :freights o.has_many :keywords o.has_many :locations o.has_many :package_codes @@ -22,6 +26,7 @@ class Company < ActiveRecord::Base o.has_many :terms_of_payments o.has_many :users o.has_many :warehouses + o.has_many :waybills o.has_many :products o.has_many :brands, class_name: 'Product::Brand' @@ -39,18 +44,23 @@ class Company < ActiveRecord::Base o.has_many :heads o.has_many :manufacture_orders, class_name: 'ManufactureOrder::Order' + o.has_many :offer_orders, class_name: 'OfferOrder::Order' + o.has_many :preorders, class_name: 'Preorder::Order' + o.has_many :project_orders, class_name: 'ProjectOrder::Order' o.has_many :purchase_invoices_approval, class_name: 'Head::PurchaseInvoice::Approval' o.has_many :purchase_invoices_approved, class_name: 'Head::PurchaseInvoice::Approved' o.has_many :purchase_invoices_paid, class_name: 'Head::PurchaseInvoice::Paid' o.has_many :purchase_invoices_ready_for_transfer, class_name: 'Head::PurchaseInvoice::Transfer' o.has_many :purchase_invoices_waiting_for_payment, class_name: 'Head::PurchaseInvoice::Waiting' o.has_many :purchase_orders, class_name: 'PurchaseOrder::Order' + o.has_many :reclamation_orders, class_name: 'ReclamationOrder::Order' o.has_many :sales_invoices, class_name: 'Head::SalesInvoice' o.has_many :sales_order_drafts, class_name: 'SalesOrder::Draft' o.has_many :sales_orders, class_name: 'SalesOrder::Order' + o.has_many :stock_transfers, class_name: 'StockTransfer::Order' o.has_many :voucher_rows, through: :vouchers, class_name: 'Head::VoucherRow', source: :rows o.has_many :vouchers, class_name: 'Head::Voucher' - o.has_many :stock_transfers, class_name: 'StockTransfer::Order' + o.has_many :work_orders, class_name: 'WorkOrder::Order' o.has_many :qualifiers o.has_many :cost_centers, class_name: 'Qualifier::CostCenter' @@ -62,8 +72,8 @@ class Company < ActiveRecord::Base has_many :commodities, class_name: 'FixedAssets::Commodity' has_many :commodity_rows, through: :commodities, class_name: 'FixedAssets::CommodityRow' - has_many :transports, as: :transportable has_many :customer_transports, through: :customers, source: :transports + has_many :transports, as: :transportable self.table_name = :yhtio self.primary_key = :tunnus diff --git a/app/models/customer.rb b/app/models/customer.rb index af125ce45..2831a3d51 100644 --- a/app/models/customer.rb +++ b/app/models/customer.rb @@ -1,16 +1,15 @@ class Customer < BaseModel + belongs_to :category, foreign_key: :osasto, primary_key: :selite, class_name: 'Keyword::CustomerCategory' + belongs_to :delivery_method, foreign_key: :toimitustapa, primary_key: :selite + belongs_to :group, foreign_key: :luokka, primary_key: :selite, class_name: 'Keyword::CustomerGroup' + belongs_to :subcategory, foreign_key: :ryhma, primary_key: :selite, class_name: 'Keyword::CustomerSubcategory' belongs_to :terms_of_payment, foreign_key: :maksuehto - belongs_to :category, - class_name: 'Keyword::CustomerCategory', - foreign_key: :osasto, - primary_key: :selite - belongs_to :subcategory, - class_name: 'Keyword::CustomerSubcategory', - foreign_key: :ryhma, - primary_key: :selite - has_many :transports, as: :transportable + + has_many :customer_keywords, foreign_key: :liitostunnus has_many :prices, foreign_key: :asiakas, class_name: 'CustomerPrice' has_many :products, through: :prices + has_many :transports + has_many :transports, as: :transportable default_scope { where.not(laji: %w(P R)) } diff --git a/app/models/customer_keyword.rb b/app/models/customer_keyword.rb new file mode 100644 index 000000000..a9dbf4b75 --- /dev/null +++ b/app/models/customer_keyword.rb @@ -0,0 +1,7 @@ +class CustomerKeyword < BaseModel + belongs_to :delivery_method, foreign_key: :avainsana, primary_key: :selite + belongs_to :customer, foreign_key: :liitostunnus + + self.table_name = :asiakkaan_avainsanat + self.primary_key = :tunnus +end diff --git a/app/models/delivery_method.rb b/app/models/delivery_method.rb new file mode 100644 index 000000000..99b70637e --- /dev/null +++ b/app/models/delivery_method.rb @@ -0,0 +1,294 @@ +class DeliveryMethod < BaseModel + include AttributeSanitator + include Searchable + + attr_accessor :flash_notice + + with_options foreign_key: :selite do |o| + o.has_many :customs, primary_key: :poistumistoimipaikka_koodi, class_name: 'Keyword::Customs' + o.has_many :mode_of_transports, primary_key: :kuljetusmuoto, class_name: 'Keyword::ModeOfTransport' + o.has_many :nature_of_transactions, primary_key: :kauppatapahtuman_luonne, class_name: 'Keyword::NatureOfTransaction' + o.has_many :sorting_point, primary_key: :lajittelupiste, class_name: 'Keyword::SortingPoint' + o.has_many :translations, class_name: 'Keyword::DeliveryMethodTranslation' + end + + with_options foreign_key: :toimitustapa, primary_key: :selite do |o| + o.has_many :customers, class_name: 'Customer' + o.has_many :freight_contracts + o.has_many :freights + o.has_many :manufacture_orders, class_name: 'ManufactureOrder::Order' + o.has_many :offer_orders, class_name: 'OfferOrder::Order' + o.has_many :preorders, class_name: 'Preorder::Order' + o.has_many :project_orders, class_name: 'ProjectOrder::Order' + o.has_many :reclamation_orders, class_name: 'ReclamationOrder::Order' + o.has_many :sales_order_drafts, class_name: 'SalesOrder::Draft' + o.has_many :sales_orders, class_name: 'SalesOrder::Order' + o.has_many :stock_transfers, class_name: 'StockTransfer::Order' + o.has_many :waybills + o.has_many :work_orders, class_name: 'WorkOrder::Order' + end + + has_many :customer_keywords, foreign_key: :avainsana, primary_key: :selite + has_many :departures, foreign_key: :liitostunnus, class_name: 'DeliveryMethod::Departure' + + has_and_belongs_to_many :locations, join_table: :toimitustavat_toimipaikat, association_foreign_key: :toimipaikka_tunnus, foreign_key: :toimitustapa_tunnus + + validates :aktiivinen_kuljetus_kansallisuus, :maa_maara, :sisamaan_kuljetus_kansallisuus, inclusion: { in: Country.pluck(:koodi) }, allow_blank: true + validates :jarjestys, numericality: { only_integer: true }, allow_blank: true + validates :lahdon_selite, :sallitut_alustat, length: { maximum: 150 } + validates :rahti_tuotenumero, :rahtikirjakopio_email, :kuljetusvakuutus_tuotenumero, :toim_nimi, :toim_nimitark, length: { maximum: 60 } + validates :selite, uniqueness: true, presence: true, length: { maximum: 150 } + validates :sisamaan_kuljetus, :aktiivinen_kuljetus, length: { maximum: 30 } + validates :sopimusnro, :sallitut_maat, length: { maximum: 50 } + validates :toim_osoite, length: { maximum: 55 } + validates :toim_ovttunnus, length: { maximum: 25 } + validates :toim_postino, length: { maximum: 15 } + validates :toim_postitp, :toim_maa, length: { maximum: 35 } + + validate :adr_handling + validate :alternative_adr_delivery_method + validate :cargo_insurance_sku + validate :freight_sku + validate :unifaun_parameters + + before_save :defaults + before_destroy :check_relations + + after_save :update_relations + + float_columns :jvkulu, :erilliskasiteltavakulu, :kuljetusvakuutus, :kuluprosentti, :ulkomaanlisa, + :lisakulu, :lisakulu_summa + + accepts_nested_attributes_for :departures, allow_destroy: true + accepts_nested_attributes_for :translations, allow_destroy: true + + scope :permit_adr, -> { where(vak_kielto: '') } + + self.table_name = :toimitustapa + self.primary_key = :tunnus + + enum nouto: { + shipment: '', + pickup: 'o' + } + + enum lauantai: { + not_saturday_delivery: '', + saturday_delivery: 'o' + } + + enum kuljyksikko: { + not_transport_unit: '', + transport_unit: 'o' + } + + enum tulostustapa: { + batch: 'E', + instant: 'H', + collective_instant: 'K', + collective_batch: 'L', + skip_print: 'X' + } + + enum merahti: { + receiver_freight_contract: '', + sender_freight_contract: 'K', + } + + enum rahtikirja: { + generic_a4: 'rahtikirja_pdf.inc', + itella_a5: 'rahtikirja_postitarra_pdf.inc', + itella_priority_foreign: 'rahtikirja_postitarra_ulkomaa_pdf.inc', + itella_thermal: 'rahtikirja_postitarra.inc', + unifaun_online: 'rahtikirja_unifaun_uo_siirto.inc', + unifaun_print_server: 'rahtikirja_unifaun_ps_siirto.inc', + dpd_waybill: 'rahtikirja_dpd.inc', + dpd_ftp: 'rahtikirja_dpd_siirto.inc', + ups_ftp: 'rahtikirja_ups_siirto.inc', + no_waybill: 'rahtikirja_tyhja.inc', + } + + enum logy_rahtikirjanumerot: { + not_using_logy_waybill_numbers: '', + use_logy_waybill_numbers: 'K' + } + + enum extranet: { + only_in_sales: '', + only_in_extranet: 'K', + both_in_sales_and_extranet: 'M' + } + + enum kontti: { + not_including_container: '0', + includes_container: '1', + } + + enum jvkielto: { + cash_on_delivery_permitted: '', + cash_on_delivery_prohibition: 'o' + } + + enum erikoispakkaus_kielto: { + special_packaging_permitted: '', + special_packaging_prohibition: 'K' + } + + enum ei_pakkaamoa: { + reserve_packing_line: '0', + not_reserving_packing_line: '1' + } + + enum erittely: { + no_waybill_specification: '', + print_waybill_specification: 't', + print_waybill_specification_per_customer: 'k' + } + + enum uudet_pakkaustiedot: { + package_info_entry_denied: '', + package_info_entry_allowed: 'K' + } + + enum kuljetusvakuutus_tyyppi: { + use_company_default: '', + no_transportation_insurance: 'E', + currency_based_insurance: 'A', + percentage_based_insurance: 'B', + currency_based_insurance_with_discount: 'F', + percentage_based_insurance_with_discount: 'G' + } + + enum osoitelappu: { + normal_label: '', + intrade_label: 'intrade', + compact_label: 'tiivistetty', + simple_label: 'oslap_mg' + } + + def translated_locales + translations.map(&:kieli) + end + + def name_translated(locale) + translations.find_by(kieli: locale).try(:selitetark) || selite + end + + private + + def freight_sku + return unless rahti_tuotenumero.present? + + cnt = company.products.no_inventory_management.where(tuoteno: rahti_tuotenumero).count + errors.add :rahti_tuotenumero, I18n.t('errors.delivery_method.product_not_in_inventory_management') if cnt.zero? + end + + def cargo_insurance_sku + return unless kuljetusvakuutus_tuotenumero.present? + + cnt = company.products.no_inventory_management.where(tuoteno: kuljetusvakuutus_tuotenumero).count + errors.add :kuljetusvakuutus_tuotenumero, I18n.t('errors.delivery_method.product_not_in_inventory_management') if cnt.zero? + end + + def update_relations + msg = [] + + if selite_was.present? && selite_changed? + update_list = [ + { count: company.delivery_methods.where(vak_kielto: selite_was).update_all(vak_kielto: selite), msg: 'delivery_methods' }, + { count: company.delivery_methods.where(vaihtoehtoinen_vak_toimitustapa: selite_was).update_all(vaihtoehtoinen_vak_toimitustapa: selite), msg: 'alternative_adr_delivery_methods' }, + { count: company.customers.where(toimitustapa: selite_was).update_all(toimitustapa: selite), msg: 'customers' }, + { count: company.customer_keywords.where(avainsana: selite_was).update_all(avainsana: selite), msg: 'customer_keywords' }, + { count: company.sales_orders.not_delivered.where(toimitustapa: selite_was).update_all(toimitustapa: selite), msg: 'not_delivered_sales_orders' }, + { count: company.sales_order_drafts.where(toimitustapa: selite_was).update_all(toimitustapa: selite), msg: 'sales_order_drafts' }, + { count: company.stock_transfers.not_delivered.where(toimitustapa: selite_was).update_all(toimitustapa: selite), msg: 'not_delivered_stock_transfers' }, + { count: company.preorders.where(toimitustapa: selite_was).update_all(toimitustapa: selite), msg: 'preorders' }, + { count: company.offer_orders.where(toimitustapa: selite_was).update_all(toimitustapa: selite), msg: 'offer_orders' }, + { count: company.manufacture_orders.not_manufactured.where(toimitustapa: selite_was).update_all(toimitustapa: selite), msg: 'not_manufactured_manufacture_orders' }, + { count: company.work_orders.where(toimitustapa: selite_was).update_all(toimitustapa: selite), msg: 'work_orders' }, + { count: company.project_orders.active.where(toimitustapa: selite_was).update_all(toimitustapa: selite), msg: 'project_orders' }, + { count: company.reclamation_orders.where(toimitustapa: selite_was).update_all(toimitustapa: selite), msg: 'reclamation_orders' }, + { count: company.freights.where(toimitustapa: selite_was).update_all(toimitustapa: selite), msg: 'freights' }, + { count: company.freight_contracts.where(toimitustapa: selite_was).update_all(toimitustapa: selite), msg: 'freight_contracts' }, + { count: company.waybills.not_printed.where(toimitustapa: selite_was).update_all(toimitustapa: selite), msg: 'not_printed_waybills' }, + ] + + update_list.each do |update| + count = update[:count] + error = I18n.t "administration.delivery_methods.update.#{update[:msg]}", count: count + msg << error unless count.zero? + end + end + + self.flash_notice = msg.to_sentence + end + + def unifaun_parameters + # Koontierätulostus ei toimi Unifaunin kanssa ilman "uusia pakkaustietoja" + return unless unifaun_online? || unifaun_print_server? + + if !package_info_entry_allowed? && collective_batch? + errors.add :base, I18n.t("errors.delivery_method.unifaun_info_missing") + end + end + + def adr_handling + allowed = company.delivery_methods.permit_adr.shipment.pluck(:selite) + [ '', 'K' ] + + unless allowed.include? vak_kielto + errors.add :vak_kielto, I18n.t('errors.messages.inclusion') + end + + if vak_kielto_changed? && vak_kielto == 'K' + count = company.delivery_methods.where(vaihtoehtoinen_vak_toimitustapa: selite).count + + if count > 0 + errors.add :vak_kielto, I18n.t('errors.delivery_method.in_use_adr') + end + end + end + + def alternative_adr_delivery_method + allowed = company.delivery_methods.permit_adr.shipment.pluck(:selite) + [ '' ] + + unless allowed.include? vaihtoehtoinen_vak_toimitustapa + errors.add :vaihtoehtoinen_vak_toimitustapa, I18n.t('errors.messages.inclusion') + end + end + + def check_relations + checklist = [ + { count: customers.count, error: "in_use_customers" }, + { count: sales_orders.not_delivered.count, error: "in_use_sales_orders" }, + { count: sales_order_drafts.count, error: "in_use_sales_order_drafts" }, + { count: freights.count, error: "in_use_freights" }, + { count: freight_contracts.count, error: "in_use_freight_contracts" }, + { count: customer_keywords.count, error: "in_use_customer_keywords" }, + { count: stock_transfers.not_delivered.count, error: "in_use_stock_transfers" }, + { count: preorders.count, error: "in_use_preorders" }, + { count: offer_orders.count, error: "in_use_offer_orders" }, + { count: manufacture_orders.count, error: "in_use_manufacture_orders" }, + { count: work_orders.count, error: "in_use_work_orders" }, + { count: project_orders.count, error: "in_use_project_orders" }, + { count: reclamation_orders.count, error: "in_use_reclamation_orders" }, + { count: waybills.not_printed.count, error: "in_use_waybills" }, + { count: company.delivery_methods.where(vak_kielto: selite).count, error: "in_use_delivery_method" }, + { count: company.delivery_methods.where(vaihtoehtoinen_vak_toimitustapa: selite).count, error: "in_use_delivery_method" }, + ] + + checklist.each do |check| + count = check[:count] + error = I18n.t "errors.delivery_method.#{check[:error]}", count: count + + errors.add(:base, error) unless count.zero? + end + + checklist.all? { |check| check[:count].zero? } + end + + def defaults + self.kauppatapahtuman_luonne ||= 0 + self.kuljetusmuoto ||= 0 + self.sisamaan_kuljetusmuoto ||= 0 + end +end diff --git a/app/models/delivery_method/departure.rb b/app/models/delivery_method/departure.rb new file mode 100644 index 000000000..2c737f78b --- /dev/null +++ b/app/models/delivery_method/departure.rb @@ -0,0 +1,24 @@ +class DeliveryMethod::Departure < BaseModel + include SplittableDates + + belongs_to :delivery_method, foreign_key: :liitostunnus + belongs_to :warehouse, foreign_key: :varasto + has_many :terminal_area, primary_key: :terminaalialue, foreign_key: :selite, class_name: 'Keyword::TerminalArea' + + validates :kerailyn_aloitusaika, :lahdon_kellonaika, :viimeinen_tilausaika, + format: { with: /\d{2}:\d{2}:\d{2}/i } + validates :lahdon_viikonpvm, :varasto, numericality: { only_integer: true } + validates :terminaalialue, length: { within: 1..150 }, allow_blank: true + validates :asiakasluokka, length: { within: 1..50 }, allow_blank: true + validates :ohjausmerkki, length: { within: 1..70 }, allow_blank: true + + splittable_dates :alkupvm + + self.table_name = :toimitustavan_lahdot + self.primary_key = :tunnus + + enum aktiivi: { + in_use: '', + not_in_use: 'E' + } +end diff --git a/app/models/freight.rb b/app/models/freight.rb new file mode 100644 index 000000000..e101d6753 --- /dev/null +++ b/app/models/freight.rb @@ -0,0 +1,6 @@ +class Freight < BaseModel + belongs_to :delivery_method, foreign_key: :toimitustapa, primary_key: :selite + + self.table_name = :rahtimaksut + self.primary_key = :tunnus +end diff --git a/app/models/freight_contract.rb b/app/models/freight_contract.rb new file mode 100644 index 000000000..ab9c8f7a0 --- /dev/null +++ b/app/models/freight_contract.rb @@ -0,0 +1,6 @@ +class FreightContract < BaseModel + belongs_to :delivery_method, foreign_key: :toimitustapa, primary_key: :selite + + self.table_name = :rahtisopimukset + self.primary_key = :tunnus +end diff --git a/app/models/head.rb b/app/models/head.rb index 14009ba20..37ed33c13 100644 --- a/app/models/head.rb +++ b/app/models/head.rb @@ -20,6 +20,9 @@ def self.default_child_instance def self.child_class_names { + 'A' => WorkOrder::Order, + 'C' => ReclamationOrder::Order, + 'E' => Preorder::Order, 'G' => StockTransfer::Order, 'H' => Head::PurchaseInvoice::Approval, 'L' => SalesOrder::Order, @@ -28,6 +31,8 @@ def self.child_class_names 'O' => PurchaseOrder::Order, 'P' => Head::PurchaseInvoice::Transfer, 'Q' => Head::PurchaseInvoice::Waiting, + 'R' => ProjectOrder::Order, + 'T' => OfferOrder::Order, 'U' => Head::SalesInvoice, 'V' => ManufactureOrder::Order, 'X' => Head::Voucher, diff --git a/app/models/keyword.rb b/app/models/keyword.rb index e629a3ea2..208af2825 100644 --- a/app/models/keyword.rb +++ b/app/models/keyword.rb @@ -13,22 +13,29 @@ def self.default_child_instance def self.child_class_names { - ALV: Keyword::Vat, - ALVULK: Keyword::ForeignVat, - ASIAKASOSASTO: Keyword::CustomerCategory, - ASIAKASRYHMA: Keyword::CustomerSubcategory, - ASIAKHIN_ATTR: Keyword::CustomerPriceListAttribute, - LISATIETO: Keyword::ProductInformationType, - MAKSUEHTOKV: Keyword::TermsOfPaymentTranslation, - MYSQLALIAS: Keyword::CustomAttribute, - OSASTO: Product::Category, - PAKKAUSKV: Keyword::PackageTranslation, - PARAMETRI: Keyword::ProductParameterType, - REVENUEREP: Keyword::RevenueExpenditure, - S: Product::Status, - TRY: Product::Subcategory, - TUOTEMERKKI: Product::Brand, - TUOTEULK: Keyword::ProductKeywordType, + ALV: Keyword::Vat, + ALVULK: Keyword::ForeignVat, + ASIAKASLUOKKA: Keyword::CustomerGroup, + ASIAKASOSASTO: Keyword::CustomerCategory, + ASIAKASRYHMA: Keyword::CustomerSubcategory, + ASIAKHIN_ATTR: Keyword::CustomerPriceListAttribute, + KM: Keyword::ModeOfTransport, + KT: Keyword::NatureOfTransaction, + LISATIETO: Keyword::ProductInformationType, + MAKSUEHTOKV: Keyword::TermsOfPaymentTranslation, + MYSQLALIAS: Keyword::CustomAttribute, + OSASTO: Product::Category, + PAKKAUSKV: Keyword::PackageTranslation, + PARAMETRI: Keyword::ProductParameterType, + REVENUEREP: Keyword::RevenueExpenditure, + S: Product::Status, + TERMINAALIALUE: Keyword::TerminalArea, + TOIMTAPAKV: Keyword::DeliveryMethodTranslation, + TOIMTAPALP: Keyword::SortingPoint, + TRY: Product::Subcategory, + TULLI: Keyword::Customs, + TUOTEMERKKI: Product::Brand, + TUOTEULK: Keyword::ProductKeywordType, }.stringify_keys end end diff --git a/app/models/keyword/customer_category.rb b/app/models/keyword/customer_category.rb index b7cd896fc..e3033deff 100644 --- a/app/models/keyword/customer_category.rb +++ b/app/models/keyword/customer_category.rb @@ -1,6 +1,11 @@ class Keyword::CustomerCategory < Keyword has_many :customers, foreign_key: :osasto, primary_key: :selite + validates :selitetark, presence: true + + alias_attribute :code, :selite + alias_attribute :label, :selitetark + def to_s selitetark end diff --git a/app/models/keyword/customer_group.rb b/app/models/keyword/customer_group.rb new file mode 100644 index 000000000..8f20aaa8f --- /dev/null +++ b/app/models/keyword/customer_group.rb @@ -0,0 +1,12 @@ +class Keyword::CustomerGroup < Keyword + has_many :customers, foreign_key: :luokka, primary_key: :selite + + validates :selitetark, presence: true + + alias_attribute :code, :selite + alias_attribute :label, :selitetark + + def self.sti_name + :ASIAKASLUOKKA + end +end diff --git a/app/models/keyword/customs.rb b/app/models/keyword/customs.rb new file mode 100644 index 000000000..0a523242b --- /dev/null +++ b/app/models/keyword/customs.rb @@ -0,0 +1,9 @@ +class Keyword::Customs < Keyword + validates :selite, length: 1..3 + validates :selitetark, presence: true + + # Rails requires sti_name method to return type column (laji) value + def self.sti_name + 'TULLI' + end +end diff --git a/app/models/keyword/delivery_method_translation.rb b/app/models/keyword/delivery_method_translation.rb new file mode 100644 index 000000000..478073445 --- /dev/null +++ b/app/models/keyword/delivery_method_translation.rb @@ -0,0 +1,12 @@ +class Keyword::DeliveryMethodTranslation < Keyword + belongs_to :delivery_method, foreign_key: :selite + + validates :selitetark, presence: true + validates :kieli, inclusion: { in: Dictionary.locales } + validates :kieli, uniqueness: { scope: [:yhtio, :selite] } + + # Rails requires sti_name method to return type column (laji) value + def self.sti_name + 'TOIMTAPAKV' + end +end diff --git a/app/models/keyword/mode_of_transport.rb b/app/models/keyword/mode_of_transport.rb new file mode 100644 index 000000000..60152afa3 --- /dev/null +++ b/app/models/keyword/mode_of_transport.rb @@ -0,0 +1,8 @@ +class Keyword::ModeOfTransport < Keyword + validates :selitetark, presence: true + + # Rails requires sti_name method to return type column (laji) value + def self.sti_name + 'KM' + end +end diff --git a/app/models/keyword/nature_of_transaction.rb b/app/models/keyword/nature_of_transaction.rb new file mode 100644 index 000000000..91b2a1a4b --- /dev/null +++ b/app/models/keyword/nature_of_transaction.rb @@ -0,0 +1,8 @@ +class Keyword::NatureOfTransaction < Keyword + validates :selitetark, presence: true + + # Rails requires sti_name method to return type column (laji) value + def self.sti_name + 'KT' + end +end diff --git a/app/models/keyword/sorting_point.rb b/app/models/keyword/sorting_point.rb new file mode 100644 index 000000000..69705b3b3 --- /dev/null +++ b/app/models/keyword/sorting_point.rb @@ -0,0 +1,8 @@ +class Keyword::SortingPoint < Keyword + validates :selitetark, presence: true + + # Rails requires sti_name method to return type column (laji) value + def self.sti_name + 'TOIMTAPALP' + end +end diff --git a/app/models/keyword/terminal_area.rb b/app/models/keyword/terminal_area.rb new file mode 100644 index 000000000..54ca9de64 --- /dev/null +++ b/app/models/keyword/terminal_area.rb @@ -0,0 +1,11 @@ +class Keyword::TerminalArea < Keyword + validates :selitetark, presence: true + + alias_attribute :code, :selite + alias_attribute :label, :selitetark + + # Rails requires sti_name method to return type column (laji) value + def self.sti_name + 'TERMINAALIALUE' + end +end diff --git a/app/models/location.rb b/app/models/location.rb index 6ce74b9c4..27a2b5c18 100644 --- a/app/models/location.rb +++ b/app/models/location.rb @@ -1,4 +1,6 @@ class Location < BaseModel + has_and_belongs_to_many :delivery_methods, join_table: :toimitustavat_toimipaikat, association_foreign_key: :toimitustapa_tunnus, foreign_key: :toimipaikka_tunnus + self.table_name = :yhtion_toimipaikat self.primary_key = :tunnus diff --git a/app/models/manufacture_order/order.rb b/app/models/manufacture_order/order.rb index 81168ab8b..f48d460cf 100644 --- a/app/models/manufacture_order/order.rb +++ b/app/models/manufacture_order/order.rb @@ -5,6 +5,8 @@ class ManufactureOrder::Order < Head validates :tila, inclusion: { in: ['V'] } + scope :not_manufactured, -> { where(alatila: ['', :K, :J, :A, :C]) } + # Rails requires sti_name method to return type column (tyyppi) value def self.sti_name "V" diff --git a/app/models/offer_order/order.rb b/app/models/offer_order/order.rb new file mode 100644 index 000000000..96ff0e832 --- /dev/null +++ b/app/models/offer_order/order.rb @@ -0,0 +1,12 @@ +class OfferOrder::Order < Head + has_many :rows, foreign_key: :otunnus, class_name: 'OfferOrder::Row' + + validates :tila, inclusion: { in: ['T'] } + + scope :printed_and_accepted, -> { where(alatila: ['', :A, :B]) } + + # Rails requires sti_name method to return type column (tyyppi) value + def self.sti_name + "T" + end +end diff --git a/app/models/offer_order/row.rb b/app/models/offer_order/row.rb new file mode 100644 index 000000000..da1bb110a --- /dev/null +++ b/app/models/offer_order/row.rb @@ -0,0 +1,10 @@ +class OfferOrder::Row < Row + belongs_to :order, foreign_key: :otunnus, class_name: 'OfferOrder::Order' + + validates :tyyppi, inclusion: { in: ['L'] } + + # Rails requires sti_name method to return type column (tyyppi) value + def self.sti_name + "T" + end +end diff --git a/app/models/package.rb b/app/models/package.rb index 643422b44..993269cce 100644 --- a/app/models/package.rb +++ b/app/models/package.rb @@ -37,6 +37,12 @@ def dimensions_are_mandatory? company.parameter.varastopaikkojen_maarittely == "M" end + def translated_description(locale) + return pakkauskuvaus if locale.downcase == Current.company.kieli.downcase + + translations.find_by(kieli: locale).try(:selitetark) || pakkauskuvaus + end + private def initial_values diff --git a/app/models/parameter.rb b/app/models/parameter.rb index be6898f80..a9b9c8a5b 100644 --- a/app/models/parameter.rb +++ b/app/models/parameter.rb @@ -2,6 +2,13 @@ class Parameter < BaseModel self.table_name = :yhtion_parametrit self.primary_key = :tunnus + enum kerayserat: { + collection_batch_not_in_use: '', + collection_batch_based_on_dimensions: 'K', + collection_batch_based_on_weight: 'P', + collection_batch_based_on_weight_if_customer_permit: 'A' + } + enum saldo_kasittely: { default_stock_management: '', stock_management_by_pick_date: 'T', diff --git a/app/models/preorder/order.rb b/app/models/preorder/order.rb new file mode 100644 index 000000000..1b115e314 --- /dev/null +++ b/app/models/preorder/order.rb @@ -0,0 +1,10 @@ +class Preorder::Order < Head + has_many :rows, foreign_key: :otunnus, class_name: 'Preorder::Row' + + validates :tila, inclusion: { in: ['E'] } + + # Rails requires sti_name method to return type column (tyyppi) value + def self.sti_name + "E" + end +end diff --git a/app/models/preorder/row.rb b/app/models/preorder/row.rb new file mode 100644 index 000000000..f5c49a186 --- /dev/null +++ b/app/models/preorder/row.rb @@ -0,0 +1,10 @@ +class Preorder::Row < Row + belongs_to :order, foreign_key: :otunnus, class_name: 'Preorder::Order' + + validates :tyyppi, inclusion: { in: ['L'] } + + # Rails requires sti_name method to return type column (tyyppi) value + def self.sti_name + "E" + end +end diff --git a/app/models/project_order/order.rb b/app/models/project_order/order.rb new file mode 100644 index 000000000..9b1cdfad7 --- /dev/null +++ b/app/models/project_order/order.rb @@ -0,0 +1,12 @@ +class ProjectOrder::Order < Head + has_many :rows, foreign_key: :otunnus, class_name: 'ProjectOrder::Row' + + validates :tila, inclusion: { in: ['R'] } + + scope :active, -> { where(alatila: ['', :A]) } + + # Rails requires sti_name method to return type column (tyyppi) value + def self.sti_name + "R" + end +end diff --git a/app/models/project_order/row.rb b/app/models/project_order/row.rb new file mode 100644 index 000000000..828706d17 --- /dev/null +++ b/app/models/project_order/row.rb @@ -0,0 +1,10 @@ +class ProjectOrder::Row < Row + belongs_to :order, foreign_key: :otunnus, class_name: 'ProjectOrder::Order' + + validates :tyyppi, inclusion: { in: ['L'] } + + # Rails requires sti_name method to return type column (tyyppi) value + def self.sti_name + "R" + end +end diff --git a/app/models/reclamation_order/order.rb b/app/models/reclamation_order/order.rb new file mode 100644 index 000000000..bd14eed51 --- /dev/null +++ b/app/models/reclamation_order/order.rb @@ -0,0 +1,10 @@ +class ReclamationOrder::Order < Head + has_many :rows, foreign_key: :otunnus, class_name: 'ReclamationOrder::Row' + + validates :tila, inclusion: { in: ['C'] } + + # Rails requires sti_name method to return type column (tyyppi) value + def self.sti_name + "C" + end +end diff --git a/app/models/reclamation_order/row.rb b/app/models/reclamation_order/row.rb new file mode 100644 index 000000000..5449c113e --- /dev/null +++ b/app/models/reclamation_order/row.rb @@ -0,0 +1,10 @@ +class ReclamationOrder::Row < Row + belongs_to :order, foreign_key: :otunnus, class_name: 'ReclamationOrder::Order' + + validates :tyyppi, inclusion: { in: ['L'] } + + # Rails requires sti_name method to return type column (tyyppi) value + def self.sti_name + "C" + end +end diff --git a/app/models/row.rb b/app/models/row.rb index 7da69eb59..e4d2dbfe2 100644 --- a/app/models/row.rb +++ b/app/models/row.rb @@ -11,10 +11,15 @@ def self.default_child_instance def self.child_class_names { + 'A' => WorkOrder::Row, + 'C' => ReclamationOrder::Row, + 'E' => Preorder::Row, 'G' => StockTransfer::Row, 'L' => SalesOrder::Row, 'M' => ManufactureOrder::RecursiveCompositeRow, 'O' => PurchaseOrder::Row, + 'R' => ProjectOrder::Row, + 'T' => OfferOrder::Row, 'V' => ManufactureOrder::Row, 'W' => ManufactureOrder::CompositeRow, } diff --git a/app/models/sales_order/order.rb b/app/models/sales_order/order.rb index a5532cfa4..c62d0372c 100644 --- a/app/models/sales_order/order.rb +++ b/app/models/sales_order/order.rb @@ -1,7 +1,7 @@ class SalesOrder::Order < SalesOrder::Base validates :tila, inclusion: { in: ['L'] } - scope :not_delivered, -> { where(alatila: %w(A C)) } + scope :not_delivered, -> { where(alatila: %w(A B C)) } scope :invoiced, -> { where(alatila: 'X') } # Rails requires sti_name method to return type column (tyyppi) value diff --git a/app/models/stock_transfer/order.rb b/app/models/stock_transfer/order.rb index 6b336d014..b14c7539c 100644 --- a/app/models/stock_transfer/order.rb +++ b/app/models/stock_transfer/order.rb @@ -3,6 +3,8 @@ class StockTransfer::Order < Head validates :tila, inclusion: { in: ['G'] } + scope :not_delivered, -> { where(alatila: ['', :J, :KJ, :A, :C, :T, :P]) } + # Rails requires sti_name method to return type column (tyyppi) value def self.sti_name "G" diff --git a/app/models/warehouse.rb b/app/models/warehouse.rb index b6cc7c768..6a1aa105c 100644 --- a/app/models/warehouse.rb +++ b/app/models/warehouse.rb @@ -1,6 +1,7 @@ class Warehouse < BaseModel has_many :packing_areas, foreign_key: :varasto has_many :shelf_locations, foreign_key: :varasto + has_many :departures, foreign_key: :varasto, class_name: 'DeliveryMethod::Departure' scope :active, -> { where.not(tyyppi: 'P') } diff --git a/app/models/waybill.rb b/app/models/waybill.rb new file mode 100644 index 000000000..5f2debfd9 --- /dev/null +++ b/app/models/waybill.rb @@ -0,0 +1,8 @@ +class Waybill < BaseModel + belongs_to :delivery_method, foreign_key: :toimitustapa, primary_key: :selite + + scope :not_printed, -> { where(tulostettu: 0) } + + self.table_name = :rahtikirjat + self.primary_key = :tunnus +end diff --git a/app/models/work_order/order.rb b/app/models/work_order/order.rb new file mode 100644 index 000000000..c7c5dcaf0 --- /dev/null +++ b/app/models/work_order/order.rb @@ -0,0 +1,10 @@ +class WorkOrder::Order < Head + has_many :rows, foreign_key: :otunnus, class_name: 'WorkOrder::Row' + + validates :tila, inclusion: { in: ['A'] } + + # Rails requires sti_name method to return type column (tyyppi) value + def self.sti_name + "A" + end +end diff --git a/app/models/work_order/row.rb b/app/models/work_order/row.rb new file mode 100644 index 000000000..7f708b2bd --- /dev/null +++ b/app/models/work_order/row.rb @@ -0,0 +1,10 @@ +class WorkOrder::Row < Row + belongs_to :order, foreign_key: :otunnus, class_name: 'WorkOrder::Order' + + validates :tyyppi, inclusion: { in: ['L'] } + + # Rails requires sti_name method to return type column (tyyppi) value + def self.sti_name + "A" + end +end diff --git a/app/views/administration/delivery_methods/_basic.html.erb b/app/views/administration/delivery_methods/_basic.html.erb new file mode 100644 index 000000000..247dc2ab0 --- /dev/null +++ b/app/views/administration/delivery_methods/_basic.html.erb @@ -0,0 +1,254 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <% if current_company.locations.present? %> + + + + + <% end %> + + + + + + + + + + + + + + +<%= render 'administration/resource_timestamps_and_users', resource: @delivery_method %> + +
<%= f.label :selite %><%= f.text_field :selite, class: :large %>
<%= f.label :lahdon_selite %><%= f.text_field :lahdon_selite, class: :large %>
<%= f.label :virallinen_selite %> + <%= f.select :virallinen_selite, + grouped_options_for_select(PostalOfficialLegend.options, @delivery_method.virallinen_selite), + { include_blank: t('administration.delivery_methods.edit.no_select') }, class: 'chosen-select' %> +
<%= f.label :tulostustapa %><%= f.select :tulostustapa, print_method_options, {}, class: 'chosen-select' %>
<%= f.label :rahtikirja %><%= f.select :rahtikirja, waybill_options, {}, class: 'chosen-select' %>
<%= f.label :logy_rahtikirjanumerot %><%= f.select :logy_rahtikirjanumerot, logy_waybill_number_options, {}, class: 'chosen-select' %>
<%= f.label :osoitelappu %><%= f.select :osoitelappu, label_options, {}, class: 'chosen-select' %>
<%= f.label :rahdinkuljettaja %><%= f.select :rahdinkuljettaja, carrier_options, + { include_blank: t('administration.delivery_methods.edit.no_select') }, class: 'chosen-select' %>
<%= f.label :rahti_tuotenumero %><%= f.text_field :rahti_tuotenumero, class: :large %>
<%= f.label :sopimusnro %><%= f.text_field :sopimusnro, class: :large %>
<%= f.label :rahtikirjakopio_email %><%= f.text_field :rahtikirjakopio_email, class: :large %>
<%= f.label :toim_ovttunnus %><%= f.text_field :toim_ovttunnus, class: :large %>
<%= f.label :toim_nimi %><%= f.text_field :toim_nimi, class: :large %>
<%= f.label :toim_nimitark %><%= f.text_field :toim_nimitark, class: :large %>
<%= f.label :toim_osoite %><%= f.text_field :toim_osoite, class: :large %>
<%= f.label :toim_postino %><%= f.text_field :toim_postino, class: :large %>
<%= f.label :toim_postitp %><%= f.text_field :toim_postitp, class: :large %>
<%= f.label :toim_maa %><%= f.text_field :toim_maa, class: :large %>
<%= f.label :jvkulu %><%= f.text_field :jvkulu, class: :large %>
<%= f.label :jvkielto %><%= f.select :jvkielto, cash_on_delivery_prohibition_options, {}, class: 'chosen-select' %>
<%= f.label :kuljetusvakuutus_tuotenumero %><%= f.text_field :kuljetusvakuutus_tuotenumero, class: :large %>
<%= f.label :kuljetusvakuutus %><%= f.text_field :kuljetusvakuutus, class: :large %>
<%= f.label :kuljetusvakuutus_tyyppi %><%= f.select :kuljetusvakuutus_tyyppi, transportation_insurance_type_options, {}, class: 'chosen-select' %>
<%= f.label :vak_kielto %><%= f.select :vak_kielto, adr_prohibition_options, {}, class: 'chosen-select' %>
<%= f.label :vaihtoehtoinen_vak_toimitustapa %><%= f.select :vaihtoehtoinen_vak_toimitustapa, alternative_adr_delivery_method_options, {}, class: 'chosen-select' %>
<%= f.label :erikoispakkaus_kielto %><%= f.select :erikoispakkaus_kielto, special_packaging_prohibition_options, {}, class: 'chosen-select' %>
<%= f.label :nouto %><%= f.select :nouto, pickup_options, {}, class: 'chosen-select' %>
<%= f.label :lauantai %><%= f.select :lauantai, saturday_delivery_options, {}, class: 'chosen-select' %>
<%= f.label :kuljyksikko %><%= f.select :kuljyksikko, transport_unit_options, {}, class: 'chosen-select' %>
<%= f.label :erilliskasiteltavakulu %><%= f.text_field :erilliskasiteltavakulu, class: :large %>
<%= f.label :merahti %><%= f.select :merahti, freight_contract_options, {}, class: 'chosen-select' %>
<%= f.label :extranet %><%= f.select :extranet, extranet_options, {}, class: 'chosen-select' %>
<%= f.label :ei_pakkaamoa %><%= f.select :ei_pakkaamoa, packing_line_prohibition_options, {}, class: 'chosen-select' %>
<%= f.label :erittely %><%= f.select :erittely, waybill_specification_options, {}, class: 'chosen-select' %>
<%= f.label :kuluprosentti %><%= f.text_field :kuluprosentti, class: :large %>
<%= f.label :sallitut_maat %><%= f.text_field :sallitut_maat, class: :large %>
<%= f.label :uudet_pakkaustiedot %><%= f.select :uudet_pakkaustiedot, new_packaging_information_options, {}, class: 'chosen-select' %>
<%= f.label :lajittelupiste %><%= f.select :lajittelupiste, sorting_point_options, + { include_blank: t('administration.delivery_methods.edit.no_select') }, class: 'chosen-select' %>
<%= f.label :maa_maara %><%= f.text_field :maa_maara, class: :large %>
<%= f.label :sisamaan_kuljetus %><%= f.text_field :sisamaan_kuljetus, class: :large %>
<%= f.label :sisamaan_kuljetus_kansallisuus %><%= f.text_field :sisamaan_kuljetus_kansallisuus, class: :large %>
<%= f.label :sisamaan_kuljetusmuoto %><%= f.select :sisamaan_kuljetusmuoto, mode_of_transport_options, + { include_blank: t('administration.delivery_methods.edit.no_select') }, class: 'chosen-select' %>
<%= f.label :kontti %><%= f.select :kontti, container_options, {}, class: 'chosen-select' %>
<%= f.label :aktiivinen_kuljetus %><%= f.text_field :aktiivinen_kuljetus, class: :large %>
<%= f.label :aktiivinen_kuljetus_kansallisuus %><%= f.text_field :aktiivinen_kuljetus_kansallisuus, class: :large %>
<%= f.label :kauppatapahtuman_luonne %><%= f.select :kauppatapahtuman_luonne, nature_of_transaction_options, + { include_blank: t('administration.delivery_methods.edit.no_select') }, class: 'chosen-select' %>
<%= f.label :kuljetusmuoto %><%= f.select :kuljetusmuoto, mode_of_transport_options, + { include_blank: t('administration.delivery_methods.edit.no_select') }, class: 'chosen-select' %>
<%= f.label :poistumistoimipaikka_koodi %><%= f.select :poistumistoimipaikka_koodi, customs_options, + { include_blank: t('administration.delivery_methods.edit.no_select') }, class: 'chosen-select' %>
<%= f.label :ulkomaanlisa %><%= f.text_field :ulkomaanlisa, class: :large %>
<%= f.label :sallitut_alustat %> +
+ <%= f.collection_check_boxes :sallitut_alustat, Package.all, :tunnus, :pakkauskuvaus, + checked: @delivery_method.sallitut_alustat.split(',') do |b| %> +
+ <%= b.check_box %> + <%= b.label { b.object.pakkaus + " " + b.object.translated_description(current_user.locale) } %> +
+ <% end %> +
+
+ <%= f.label :locations %> + + <%= f.collection_check_boxes :location_ids, current_company.locations, :tunnus, :nimi do |b| %> +
+ <%= b.check_box %> + <%= b.label %> +
+ <% end %> +
<%= f.label :lisakulu %><%= f.text_field :lisakulu, class: :large %>
<%= f.label :lisakulu_summa %><%= f.text_field :lisakulu_summa, class: :large %>
<%= f.label :jarjestys %><%= f.text_field :jarjestys, class: :large %>
diff --git a/app/views/administration/delivery_methods/_departure_fields.html.erb b/app/views/administration/delivery_methods/_departure_fields.html.erb new file mode 100644 index 000000000..78b8ea5db --- /dev/null +++ b/app/views/administration/delivery_methods/_departure_fields.html.erb @@ -0,0 +1,46 @@ + + + <%= f.select :lahdon_viikonpvm, day_of_the_week_options, { include_blank: t('administration.delivery_methods.departures.no_selected.day') }, class: 'chosen-select' %> + + + + <%= f.time_select :lahdon_kellonaika, ignore_date: true, class: :large %> + + + + <%= f.time_select :viimeinen_tilausaika, ignore_date: true, class: :large %> + + + + <%= f.time_select :kerailyn_aloitusaika, ignore_date: true, class: :large %> + + + + <%= f.select :terminaalialue, terminal_area_options, { include_blank: t('administration.delivery_methods.departures.no_selected.terminal_area') }, class: 'chosen-select' %> + + + + <%= f.select :asiakasluokka, customer_group_options, { include_blank: t('administration.delivery_methods.departures.no_selected.customer_group') }, class: 'chosen-select' %> + + + + <%= f.select :varasto, warehouse_options, { include_blank: t('administration.delivery_methods.departures.no_selected.warehouse') }, class: 'chosen-select' %> + + + + <%= f.select :aktiivi, status_options, {}, class: 'chosen-select' %> + + + + <%= f.text_field :ohjausmerkki, class: :large %> + + + + <%= f.pupenext_date_field :alkupvm %> + + + + <%= f.check_box :_destroy %> + + + diff --git a/app/views/administration/delivery_methods/_departures.html.erb b/app/views/administration/delivery_methods/_departures.html.erb new file mode 100644 index 000000000..fc57e5a1f --- /dev/null +++ b/app/views/administration/delivery_methods/_departures.html.erb @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + <%= f.fields_for :departures do |departure| %> + <%= render 'departure_fields', f: departure %> + <% end %> +
<%= label_tag t('administration.delivery_methods.departures.day_of_the_week') %><%= label_tag t('administration.delivery_methods.departures.time') %><%= label_tag t('administration.delivery_methods.departures.last_ordering_time') %><%= label_tag t('administration.delivery_methods.departures.collecting_start_time') %><%= label_tag t('administration.delivery_methods.departures.terminal_area') %><%= label_tag t('administration.delivery_methods.departures.customer_group') %><%= label_tag t('administration.delivery_methods.departures.warehouse') %><%= label_tag t('administration.delivery_methods.departures.status') %><%= label_tag t('administration.delivery_methods.departures.control_character') %><%= label_tag t('administration.delivery_methods.departures.start_date') %><%= label_tag t('helpers.submit.destroy', model: '') %>
+ +
+ +<%= link_to_add_association t('administration.delivery_methods.departures.link_new'), f, :departures, + data: { association_insertion_method: :append, association_insertion_node: '#departures'}, + partial: 'departure_fields' %> diff --git a/app/views/administration/delivery_methods/_form.html.erb b/app/views/administration/delivery_methods/_form.html.erb new file mode 100644 index 000000000..af44c8091 --- /dev/null +++ b/app/views/administration/delivery_methods/_form.html.erb @@ -0,0 +1,25 @@ +<%= render "administration/form_errors", resource: @delivery_method %> + +<%= form_for @delivery_method do |f| %> + +
+ <%= render 'basic', f: f %> +
+ +
+ <%= render "administration/header", text: t('administration.delivery_methods.edit.translations.header') %> + <%= render 'administration/translations', f: f %> +
+ + <% if current_company.parameter.collection_batch_based_on_dimensions? %> +
+ <%= render "administration/header", text: t('administration.delivery_methods.edit.departures.header') %> + <%= render 'departures', f: f %> +
+ <% end %> + +
+ <%= render 'administration/actions', f: f %> +
+ +<% end %> diff --git a/app/views/administration/delivery_methods/edit.html.erb b/app/views/administration/delivery_methods/edit.html.erb new file mode 100644 index 000000000..d9c3619de --- /dev/null +++ b/app/views/administration/delivery_methods/edit.html.erb @@ -0,0 +1,15 @@ +<%= return_link t('administration.delivery_methods.index.header'), delivery_methods_path %> + +
+ +<%= render "administration/header", text: t('administration.delivery_methods.edit.header') %> +<%= render 'form' %> + +<% if @delivery_method.persisted? && update_access? %> +
+ + <%= button_to(t('.button_remove'), + delivery_method_path(@delivery_method.id), + data: { confirm: t('administration.delivery_methods.edit.confirm_remove') }, + method: "delete") %> +<% end %> diff --git a/app/views/administration/delivery_methods/index.html.erb b/app/views/administration/delivery_methods/index.html.erb new file mode 100644 index 000000000..724874252 --- /dev/null +++ b/app/views/administration/delivery_methods/index.html.erb @@ -0,0 +1,60 @@ +<%= render "administration/header", text: t('.header') %> +<%= render "administration/notice" %> + +<%= button_to_new :delivery_method %> + +

+ +<%= form_tag delivery_methods_path, method: :get do %> + + + + + + + + + + + + + <% @delivery_methods.each do |delivery_method| %> + + + + + + + + + + <% end %> + +
+ <%= sortable "selite", DeliveryMethod.human_attribute_name(:selite) %> +
+ <%= text_field_tag :selite, params[:selite] %> +
+ <%= sortable "sopimusnro", DeliveryMethod.human_attribute_name(:sopimusnro) %> +
+ <%= text_field_tag :sopimusnro, params[:sopimusnro] %> +
+ <%= sortable "jarjestys", DeliveryMethod.human_attribute_name(:jarjestys) %> +
+ <%= text_field_tag :jarjestys, params[:jarjestys] %> +
+ <%= submit_tag t('.button_search') %> +
+ <%= link_to delivery_method.selite, edit_delivery_method_path(delivery_method.id) %> + + <%= delivery_method.sopimusnro %> + + <%= delivery_method.jarjestys %> + +
+ +<% end %> + +
+ +<%= button_to_new :delivery_method %> diff --git a/config/i18n-tasks.yml b/config/i18n-tasks.yml index af0a5275d..a5e501008 100644 --- a/config/i18n-tasks.yml +++ b/config/i18n-tasks.yml @@ -38,5 +38,7 @@ ignore_unused: - 'administration.printers.{mediatyyppi_options,merkisto_options}.*' - 'administration.sum_levels.{kayttotarkoitus_options,kumulatiivinen_options}.*' - 'administration.qualifiers.{kaytossa_options}.*' +- 'administration.delivery_methods.{*_options}.*' +- 'administration.delivery_methods.update.*' - 'administration.packages.{erikoispakkaus_options,yksin_eraan_options}.*' - 'simple_form.*' diff --git a/config/locales/de.yml b/config/locales/de.yml index 78be91bdc..017a80b2c 100644 --- a/config/locales/de.yml +++ b/config/locales/de.yml @@ -3,69 +3,69 @@ de: activerecord: attributes: account: - alv_taso: - kohde: - kustp: + alv_taso: + kohde: + kustp: laatija: Erstellt von luontiaika: Erstellt am muutospvm: "Änderungszeit" - muuttaja: + muuttaja: nimi: Name - projekti: - sisainen_taso: + projekti: + sisainen_taso: tilino: Kontonummer - tiliointi_tarkistus: - toimijaliitos: - ulkoinen_taso: + tiliointi_tarkistus: + toimijaliitos: + ulkoinen_taso: accounting/fixed_assets/commodity: - evl_poistotyyppi: + evl_poistotyyppi: kayttoonottopvm: Inbetriebnahmedatum bank_account: - asiakastunnus: + asiakastunnus: bic: SWIFT / BIC - factoring: - hyvak: - iban: + factoring: + hyvak: + iban: kaytossa: Status maksulimitti: Zahlungslimit nimi: Name - oletus_kohde: - oletus_kulutili: - oletus_kustp: - oletus_projekti: - oletus_rahatili: - oletus_selvittelytili: + oletus_kohde: + oletus_kulutili: + oletus_kustp: + oletus_projekti: + oletus_rahatili: + oletus_selvittelytili: tilino: Kontonummer - tilinylitys: + tilinylitys: valkoodi: Währung bank_detail: laatija: Erstellt von luontiaika: Erstellt am - muutospvm: - muuttaja: + muutospvm: + muuttaja: nimitys: Bezeichnung - pankkiiban1: - pankkiiban2: - pankkiiban3: - pankkinimi1: - pankkinimi2: - pankkinimi3: - pankkiswift1: - pankkiswift2: - pankkiswift3: + pankkiiban1: + pankkiiban2: + pankkiiban3: + pankkinimi1: + pankkinimi2: + pankkinimi3: + pankkiswift1: + pankkiswift2: + pankkiswift3: pankkitili1: Kontonummer pankkitili2: Kontonummer pankkitili3: Kontonummer - viite: + viite: carrier: - koodi: + koodi: luontiaika: Erstellt am - luottokortti: + luottokortti: muutospvm: "Änderungsdatum" - muuttaja: - neutraali: + muuttaja: + neutraali: nimi: Name - pakkauksen_sarman_minimimitta: + pakkauksen_sarman_minimimitta: cash_register: kassa: Kasse kassaerotus: Kassendifferenz @@ -85,10 +85,10 @@ de: email: E-Mailadresse factoringsaamiset: Factoringforderungen aus Lieferungen und Leistungen fax: Fax - int_koodi: - intrastat_sarjanro: + int_koodi: + intrastat_sarjanro: jarjestys: Sortierung - karhuerapvm: + karhuerapvm: kassa: Barverkauf kassaale: Rabatte der Einkäufe kassaerotus: "Übereinstimmungsdifferenzen der Barverkaufskasse" @@ -111,40 +111,40 @@ de: luottotappiot: Verkaufskreditverluste maa: Land matkalla_olevat: Umlaufvermögensrechnungen, die unterwegs sind - muutkulut: + muutkulut: myynninkassaale: Rabatte des Verkaufs myynninvaluuttaero: Währungskursdifferenzen des Verkaufs myynti: Verkauf myynti_ei_eu: Verkauf außerhalb der Gemeinschaft myynti_eu: Gemeinschaftsverkauf - myynti_kaanteinen: + myynti_kaanteinen: myynti_kohde: Standardziel des Verkaufs myynti_kustp: Standardkostenstelle des Verkaufs myynti_marginaali: Verkauf, Gebrauchtwaren myynti_projekti: Standardprojekt des Verkaufs - myyntireskontrakausi_alku: - myyntireskontrakausi_loppu: + myyntireskontrakausi_alku: + myyntireskontrakausi_loppu: myyntisaamiset: Forderungen aus Lieferungen und Leistungen nimi: Name osoite: Adresse osto_marginaali: Einkauf, Gebrauchtwaren (in Verbindung mit Verkauf) - ostoreskontrakausi_alku: - ostoreskontrakausi_loppu: + ostoreskontrakausi_alku: + ostoreskontrakausi_loppu: ostovelat: Verbindlichkeiten aus Lieferungen und Leistungen ovttunnus: EDI-Kennzeichen - pankkiiban1: - pankkiiban2: - pankkiiban3: + pankkiiban1: + pankkiiban2: + pankkiiban3: pankkikortti: Barverkauf Bankkartenzahlungen - pankkinimi1: - pankkinimi2: - pankkinimi3: - pankkiswift1: - pankkiswift2: - pankkiswift3: - pankkitili1: - pankkitili2: - pankkitili3: + pankkinimi1: + pankkinimi2: + pankkinimi3: + pankkiswift1: + pankkiswift2: + pankkiswift3: + pankkitili1: + pankkitili2: + pankkitili3: postino: Postleitzahl postitp: Poststelle puhelin: Telefon @@ -155,404 +155,497 @@ de: siirtosaamiset: ARAP-Konto für die Periodisierung der Einkaufsrechnung siirtovelka: PRAP-Konto für die Periodisierung der Verkaufsrechnung tilastotullikamari: statistikzollkammer - tilikauden_tulos: - tilikausi_alku: - tilikausi_loppu: - tilino_triang: - tulli_lisattava_era: - tulli_vahennettava_era: + tilikauden_tulos: + tilikausi_alku: + tilikausi_loppu: + tilino_triang: + tulli_lisattava_era: + tulli_vahennettava_era: tullikamari: zollkammer - tullin_asiaknro: - tullin_lupanro: + tullin_asiaknro: + tullin_lupanro: tullipaate: zollterminal valkoodi: Währung valuuttaero: Währungskursdifferenzen der Einkäufe varasto: Waren/Lager varastonmuutos: Lageränderung - varastonmuutos_epakurantti: - varastonmuutos_inventointi: - varastonmuutos_rahti: + varastonmuutos_epakurantti: + varastonmuutos_inventointi: + varastonmuutos_rahti: varastonmuutos_valmistuksesta: Lageränderung der Fertigung - viivastyskorko: + viivastyskorko: www: www ytunnus: Steuernummer + delivery_method: + aktiivinen_kuljetus: Standard aktiver Transport + aktiivinen_kuljetus_kansallisuus: Standard Nationalität des aktiven Transport + jarjestys: Sortierung + jvkulu: Nachnahmekosten + kauppatapahtuman_luonne: Standard Geschäftsart + kontti: Standard Container + kuljetusmuoto: Standard Transportart + kuluprosentti: Kostenprozent + lisakulu: Zusatzkosten + maa_maara: Standard Zielland + merahti: Frachtvertrag + poistumistoimipaikka_koodi: Standard Code des Abtrittgeschäftsstelle + rahtikirja: Frachtbrieftyp + selite: Bezeichnung + sisamaan_kuljetus: Standard Inlandtransport + sisamaan_kuljetus_kansallisuus: Standard Nationalität des Inlandtransport + sisamaan_kuljetusmuoto: Standard Inlandtransportart + tulostustapa: Ausdruckart keyword: jarjestys: Sortierung kieli: Sprache laji: Art selite: Erklärung - selitetark: - selitetark_2: - selitetark_3: + selitetark: + selitetark_2: + selitetark_3: keyword/custom_attribute: - database_field: - default_value: - help_text: - label: - required: - set_name: - visibility: + database_field: + default_value: + help_text: + label: + required: + set_name: + visibility: keyword/revenue_expenditure: selitetark_2: Anzahl package: - erikoispakkaus: + erikoispakkaus: jarjestys: Sortierung - kayttoprosentti: + kayttoprosentti: kieli: Sprache korkeus: Höhe laji: Art leveys: Breite - minimi_paino: + minimi_paino: paino: Gewicht - pakkaus: + pakkaus: pakkauskuvaus: Verpackungsbeschreibung - pakkausveloitus_tuotenumero: - puukotus_kerroin: + pakkausveloitus_tuotenumero: + puukotus_kerroin: selite: Erklärung - selitetark: - selitetark_2: - selitetark_3: - syvyys: - yksin_eraan: + selitetark: + selitetark_2: + selitetark_3: + syvyys: + yksin_eraan: package_code: - koodi: - rahdinkuljettaja: + koodi: + rahdinkuljettaja: package_codes: - koodi: - rahdinkuljettaja: + koodi: + rahdinkuljettaja: packing_area: lokero: Fach nimi: Name - pakkaamon_prio: + pakkaamon_prio: printteri0: Auswahlliste printteri1: Versandpapier printteri2: Artikeletiketten printteri3: Adressetikett printteri4: Frachtbrief A5 printteri6: Frachtbrief A4 - printteri7: + printteri7: prio: Prio varasto: Lager + pending_updates: + value: Wert printer: ip: ip jarjestys: Sortierung kirjoitin: Drucker komento: befehl - mediatyyppi: + mediatyyppi: mediatyyppi_types: - A4: - A5: - LS149X104: - LS59X40: - LSN149X104: - LSN59X40: - kuittitulostin: + A4: + A5: + LS149X104: + LS59X40: + LSN149X104: + LSN59X40: + kuittitulostin: merkisto: zeichensatz merkisto_types: - '1': - '2': - '3': - '4': - '5': + '1': + '2': + '3': + '4': + '5': nimi: Name osoite: Adresse postino: Postleitzahl postitp: Poststelle puhelin: Telefon - unifaun_nimi: + unifaun_nimi: yhteyshenkilo: Kontaktperson qualifier: - isa_tarkenne: + isa_tarkenne: kaytossa: Wird benutzt - koodi: + koodi: nimi: Name tunnus: Kennzeichen tyyppi: Typ terms_of_payment: abs_pvm: Zahlungsdatum - erapvmkasin: - factoring: - itsetulostus: - jaksotettu: + erapvmkasin: + factoring: + itsetulostus: + jaksotettu: jarjestys: Sortierung jv: Nachnahme - kassa_abspvm: + kassa_abspvm: kassa_alepros: Kassenrabattsprozent - kassa_relpvm: + kassa_relpvm: kateinen: Barzahlung kaytossa: Wird benutzt laatija: Erstellt von luontiaika: Erstellt am - muutospvm: - muuttaja: + muutospvm: + muuttaja: pankkiyhteystiedot: Bankverbindungsdaten - rel_pvm: - sallitut_maat: - teksti: + rel_pvm: + sallitut_maat: + teksti: translations: - kieli: - selitetark: + kieli: + selitetark: + transport: + customer: Kunde + password: Passwort + username: Benutzername models: account: Konto bank_account: Bankkonto - bank_detail: - carrier: - cash_register: + bank_detail: + carrier: + cash_register: currency: Währung + delivery_method: Versandart fiscal_year: Rechnungsjahr - head/purchase_invoice/approval: - head/purchase_invoice/approved: - head/purchase_invoice/paid: - head/purchase_invoice/transfer: - head/purchase_invoice/waiting: + head/purchase_invoice/approval: + head/purchase_invoice/approved: + head/purchase_invoice/paid: + head/purchase_invoice/transfer: + head/purchase_invoice/waiting: head/purchase_order: Kaufauftrag head/sales_invoice: Verkaufsrechnung head/sales_order: Auftrag head/sales_order_draft: Aufrag nicht abgeschlossen - head/voucher: - keyword/custom_attribute: + head/voucher: + keyword/custom_attribute: package: Verpackung - package_code: + package_code: packing_area: Packraum/Verpackungsabteilung printer: Drucker + product/keyword: Schlüsselwörter des Artikels qualifier: Ergänzung qualifier/cost_center: Kostenstelle qualifier/project: Projekt qualifier/target: Ziel sum_level: Ebene - sum_level/commodity: + sum_level/commodity: sum_level/external: Extern sum_level/internal: Intern - sum_level/profit: + sum_level/profit: sum_level/vat: Umsatzsteuer terms_of_payment: Zahlungsbedingung administration: accounts: create: - create_success: + create_success: destroy: - destroy_success: + destroy_success: edit: button_remove: Konto löschen - confirm_remove: + confirm_remove: header: Konto no_cost_center: Keine Kostenstelle no_project: Kein Projekt - no_sum_level: + no_sum_level: no_target: Kein Ziel - no_vat: + no_vat: index: button_search: Suchen header: Kontotabelle manuaali_esto_options: - editing_disabled: - editing_enabled: + editing_disabled: + editing_enabled: tiliointi_tarkistus_options: - mandatory_cs: - mandatory_cs_project: - mandatory_cs_target: - mandatory_cs_target_project: - mandatory_project: - mandatory_target: - mandatory_target_project: - no_mandatory_fields: + mandatory_cs: + mandatory_cs_project: + mandatory_cs_target: + mandatory_cs_target_project: + mandatory_project: + mandatory_target: + mandatory_target_project: + no_mandatory_fields: toimijaliitos_options: - relation_not_required: - relation_required: + relation_not_required: + relation_required: update: - update_success: + update_success: actions: - button_saving: + button_saving: bank_accounts: create: - create_success: + create_success: edit: header: Bankkonto factoring_options: factoring_disabled: Wird nicht factoriert - factoring_enabled: + factoring_enabled: index: button_search: Suchen - header: - show_active: + header: + show_active: show_inactive: Gelöschte anzeigen kaytossa_options: active: Wird benutzt inactive: Gelöscht / Wird nicht benutzt tilinylitys_options: - limit_override_allowed: - limit_override_denied: + limit_override_allowed: + limit_override_denied: update: - update_success: + update_success: bank_details: edit: - header: + header: index: header: Bankverbindungsdaten bank_details_helper: - empty: + empty: finnish: Finnisch swedish: Schwedisch carriers: edit: - header: + header: index: button_search: Suchen - header: + header: neutraali_options: neutral: Ja not_neutral: Nein cash_registers: create: - create_success: + create_success: edit: - header: + header: no_select: Beliebig index: button_search: Suchen header: Kassen update: - update_success: + update_success: currencies: create: - create_success: + create_success: edit: header: Währung index: button_search: Suchen header: Währungen update: - update_success: + update_success: custom_attributes: edit: - button_remove: - confirm_remove: - header: + button_remove: + confirm_remove: + header: index: button_search: Suchen - header: + header: required_options: - mandatory: - optional: + mandatory: + optional: visibility_options: - hidden: - visible: + hidden: + visible: + delivery_methods: + adr_prohibition_options: + adr_prohibition: Liefern der ADR-Produkte nicht erlaubt bei der Lieferart + adr_shipment: ADR-Produkte werden geliefert mit der Lieferart + permit_adr: Liefern der ADR-Produkte erlaubt bei der Lieferart + cash_on_delivery_prohibition_options: + cash_on_delivery_permitted: Liefern der Nachnahmen erlaubt bei der Lieferart + cash_on_delivery_prohibition: Liefern der Nachnahmen nicht erlaubt bei der Lieferart + container_options: + includes_container: Ja + not_including_container: Nein + departures: + customer_group: Kundenklasse + day_of_the_week_options: + friday: Freitag + monday: Montag + saturday: Samstag + sunday: Sonntag + thursday: Donnerstag + tuesday: Dienstag + wednesday: Mittwoch + no_selected: + warehouse: Kein Lager + status: Status + status_options: + in_use: Wird benutzt + not_in_use: Wird nicht benutzt + warehouse: Lager + edit: + header: Versandart + no_select: Beliebig + extranet_options: + both_in_sales_and_extranet: Lieferart wird in beiden angezeigt + only_in_extranet: Lieferart wird nur im Extranet angezeigt + only_in_sales: Lieferart wird nur im Verkauf angezeigt + index: + button_search: Suchen + header: Lieferarten + label_options: + compact_label: Komprimiert + intrade_label: Intrade + normal_label: Normal + packing_line_prohibition_options: + not_reserving_packing_line: Aufträge der Lieferart reservieren kein Packraum-/Verpackungsabteilungsfach + reserve_packing_line: Aufträge der Lieferart reservieren Packraum-/Verpackungsabteilungsfach + pickup_options: + pickup: Der Kunde holt die Aufträge ab + shipment: Aufträge werden an den Kunden geliefert + print_method_options: + batch: Losausdrucken + collective_batch: Sammel-Losausdrucken + collective_instant: Sammel-Sofortausdrucken + instant: Sofortausdrucken + skip_print: Frachbriefeingabe und -ausdrucken werden überholt + saturday_delivery_options: + not_saturday_delivery: Keine Samstagsdistribution + special_packaging_prohibition_options: + special_packaging_permitted: Liefern der Spezialverpackungen erlaubt bei der Lieferart + special_packaging_prohibition: Liefern der Spezialverpackungen nicht erlaubt bei der Lieferart + transport_unit_options: + not_transport_unit: Keinen Transporteinheittransport + transportation_insurance_type_options: + use_company_default: Standard der Firma + waybill_specification_options: + no_waybill_specification: Keine Frachtbriefspezifikation für die Lieferart ausdrucken + print_waybill_specification: Frachtbriefspezifikation für die Lieferart ausdrucken fiscal_years: create: - create_success: + create_success: edit: header: Rechnungsjahr index: button_search: Suchen - header: + header: update: - update_success: + update_success: packages: create: - create_success: + create_success: edit: header: Verpackung erikoispakkaus_options: - not_special: - special: + not_special: + special: index: button_search: Suchen - header: + header: package_codes: - link_new: + link_new: update: - update_success: + update_success: yksin_eraan_options: - combined_parcel: + combined_parcel: separate_parcel: Normalbehandlung packing_areas: create: - create_success: + create_success: destroy: - destroy_success: + destroy_success: edit: - button_remove: - confirm_remove: + button_remove: + confirm_remove: header: Packraum/Verpackungsabteilung index: button_search: Suchen header: Packräume/Verpackungsabteilungen update: - update_success: + update_success: printers: create: - create_success: + create_success: destroy: - destroy_success: + destroy_success: edit: - button_remove: - confirm_remove: + button_remove: + confirm_remove: header: Drucker index: button_search: Suchen header: Ausdrucker mediatyyppi_options: - media_a4: - media_a5: + media_a4: + media_a5: media_default: Beliebig - media_receipt: - media_thermal1: - media_thermal2: - media_thermal3: - media_thermal4: + media_receipt: + media_thermal1: + media_thermal2: + media_thermal3: + media_thermal4: merkisto_options: - charset_7bit: - charset_ansi: + charset_7bit: + charset_ansi: charset_default: Beliebig - charset_dos: - charset_scandic_off: - charset_utf8: + charset_dos: + charset_scandic_off: + charset_utf8: update: - update_success: + update_success: qualifiers: create: - create_success: + create_success: edit: - header: + header: index: button_search: Suchen - button_show_active: + button_show_active: button_show_removed: Gelöschte anzeigen - header: + header: kaytossa_options: in_use: Ja not_in_use: Nein update: - update_success: + update_success: sum_levels: create: - create_success: + create_success: destroy: - destroy_success: + destroy_success: edit: button_remove: Ebene löschen - confirm_remove: - header: + confirm_remove: + header: index: button_search: Suchen - header: + header: kayttotarkoitus_options: normal: Beliebig - purchases: + purchases: turnover: Umsatz kumulatiivinen_options: - cumulative: + cumulative: not_cumulative: Nein update: - update_success: + update_success: terms_of_payments: cash_options: - cash: - credit_card: - debit_card: - not_cash: + cash: + credit_card: + debit_card: + not_cash: create: - create_success: + create_success: edit: header: Zahlungsbedingung no_factoring: Wird nicht factoriert @@ -562,22 +655,26 @@ de: inactive: Gelöscht / Wird nicht benutzt index: button_search: Suchen - button_show_active: - button_show_removed: - header: + button_show_active: + button_show_removed: + header: update: - update_success: + update_success: translations: language: Sprache link_new: Neue Übersetzung hinzufügen - text: + text: update_access: - forbidden: + forbidden: application: access_control: - forbidden: + forbidden: authorize: - unauthorized: + unauthorized: + data_export: + product_keywords: + generate: Excel speichern + header: Schlüsselwörter des Artikels date: abbr_day_names: - So @@ -588,7 +685,7 @@ de: - Fr - Sa abbr_month_names: - - + - - Jan - Feb - Mär @@ -614,7 +711,7 @@ de: long: "%e. %B %Y" short: "%e. %b" month_names: - - + - - Januar - Februar - März @@ -674,21 +771,25 @@ de: month: Monat second: Sekunde year: Jahr //all are in singular now + downloads: + index: + created_at: Erstellt am + destroy: Löschen errors: cash_register: - kassa_missing: - kassaerotus_missing: - kateisotto_missing: - kateistilitys_missing: - luottokortti_missing: - pankkikortti_missing: + kassa_missing: + kassaerotus_missing: + kateisotto_missing: + kateistilitys_missing: + luottokortti_missing: + pankkikortti_missing: format: "%{attribute} %{message}" messages: accepted: muss akzeptiert werden - after: - after_or_equal_to: - before: - before_or_equal_to: + after: + after_or_equal_to: + before: + before_or_equal_to: blank: muss ausgefüllt werden confirmation: stimmt nicht mit %{attribute} überein empty: muss ausgefüllt werden @@ -701,7 +802,7 @@ de: invalid: ist nicht gültig less_than: muss kleiner als %{count} sein less_than_or_equal_to: muss kleiner oder gleich %{count} sein - not_a_date: + not_a_date: not_a_number: ist keine Zahl not_an_integer: muss ganzzahlig sein odd: muss ungerade sein @@ -722,89 +823,89 @@ de: one: hat die falsche Länge (muss genau 1 Zeichen haben) other: hat die falsche Länge (muss genau %{count} Zeichen haben) packing_area: - duplicate_cells: + duplicate_cells: qualifier: - accounts_found: + accounts_found: sum_level: - begin_with_error: - invalid_char: - not_same_type: + begin_with_error: + invalid_char: + not_same_type: template: body: 'Bitte überprüfen Sie die folgenden Felder:' header: one: 'Konnte %{model} nicht speichern: ein Fehler.' other: 'Konnte %{model} nicht speichern: %{count} Fehler.' terms_of_payment: - in_use_customers: - in_use_sales_order_drafts: - in_use_sales_orders: + in_use_customers: + in_use_sales_order_drafts: + in_use_sales_orders: fixed_assets: commodities: activate: - activation_failure: - activation_success: + activation_failure: + activation_success: commodity_rows: button_show_hide: Anzeigen / Verstecken - commodity_row_amount: - header: + commodity_row_amount: + header: confirm_sale: - sale_failure: - sale_success: + sale_failure: + sale_success: create: - create_success: + create_success: depreciations: button_show_hide: Anzeigen / Verstecken - depreciation_difference_amount: - depreciation_rows_amount: - header: + depreciation_difference_amount: + depreciation_rows_amount: + header: edit: - button_activate: - button_add_invoice_rows: - button_add_voucher_rows: - button_create: - button_sell: - header: + button_activate: + button_add_invoice_rows: + button_add_voucher_rows: + button_create: + button_sell: + header: form: - bookkeeping_value: - bookkeeping_value_now: + bookkeeping_value: + bookkeeping_value_now: index: - button_search: - header: + button_search: + header: link_order: - link_order_success: + link_order_success: link_voucher: - link_voucher_success: + link_voucher_success: link_voucher_row: - cannot_link_row: - row_already_linked: + cannot_link_row: + row_already_linked: new: - header: + header: procurement_rows: - button_remove: - header: + button_remove: + header: purchase_orders: - button_add: - button_search: - header: + button_add: + button_search: + header: sell: - confirm_sale: - header: + confirm_sale: + header: unlink: - unlink_success: + unlink_success: unlink_voucher_row: - cannot_unlink: + cannot_unlink: update: - update_success: + update_success: vouchers: - button_add: - button_search: - header: + button_add: + button_search: + header: helpers: select: prompt: Bitte wählen submit: create: "%{model} erstellen" - destroy: + destroy: new: Neu %{model} submit: "%{model} speichern" update: "%{model} aktualisieren" @@ -852,6 +953,32 @@ de: percentage: format: format: "%n %" + pending_product_updates: + index: + deleted: Status + label: Bezeichnung + search: Suchen + sku: Artikelnummer + suppliers_sku: Artikelnummer des Lieferanten + list: + label: Bezeichnung + price: Preis + save: "Änderungen speichern" + sku: Artikelnummer + list_of_changes: + not_found: Kein Artikel gefunden + pending_columns_options: + sales_price: Verkaufspreis + short_description: Kurzbeschreibung + pending_price_options: + sales_price: Verkaufspreis + pending_update_fields: + delete: Löschen + products: + categories_selection: + brand: Marke + category: Abteilung + subcategory: Gruppe reports: revenue_expenditure: index: @@ -862,6 +989,27 @@ de: concern_accounts_receivable: Konzernforderungen aus Lieferungen und Leistungen summary: Gesamt week: Woche + stock_availability: + form: + button_run: Pdf + constraints: Begrenzung + show_data: + past: Verspätet + product: Artikel + purchases: Bestellt, noch nicht erhalten + stock: Lagerbestand + total: Gesamt + week: Woche + view_connected_sales_orders: + information: Referenz + order_number: Auftragsnummer + ordered_amount: Bestellt + product_info: Artikelnummer + shipping_address: Lieferadresse + total_amount: Gesamtsumme der Rechnung + stock_listing_csv: + index: + run: Bericht ausführen shared: excel: company: Firmendaten diff --git a/config/locales/en.yml b/config/locales/en.yml index 5db322da4..fb8db3f14 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -176,6 +176,9 @@ en: viivastyskorko: Penalty interest rate www: www ytunnus: VAT nr + delivery_method: + merahti: Freight contract + selite: Product name keyword: jarjestys: kieli: @@ -233,6 +236,8 @@ en: printteri7: prio: varasto: Storage + pending_updates: + value: Value excl VAT printer: ip: Ip jarjestys: Order @@ -292,6 +297,10 @@ en: translations: kieli: selitetark: + transport: + customer: Customer + password: Passwd + username: User models: account: Account bank_account: @@ -299,6 +308,7 @@ en: carrier: cash_register: Kassa currency: Currency + delivery_method: Delivery fiscal_year: Fiscal year head/purchase_invoice/approval: head/purchase_invoice/approved: @@ -437,6 +447,24 @@ en: visibility_options: hidden: visible: + delivery_methods: + container_options: + includes_container: 'Yes' + not_including_container: 'No' + departures: + day_of_the_week_options: + friday: Friday + monday: Monday + thursday: Thursday + tuesday: Tuesday + wednesday: Wednesday + status: Status + warehouse: Storage + edit: + header: Delivery + no_select: Any + index: + button_search: Search fiscal_years: create: create_success: @@ -674,6 +702,10 @@ en: month: Month second: Seconds year: Year + downloads: + index: + created_at: Date of creation + destroy: Delete errors: cash_register: kassa_missing: @@ -848,11 +880,51 @@ en: percentage: format: format: "%n%" + pending_product_updates: + index: + deleted: Status + label: Product name + search: Search + sku: Product number + suppliers_sku: Vendor product nr + list: + label: Product name + price: price + sku: Product number + list_of_changes: + not_found: No products found + pending_columns_options: + sales_price: Sales price + short_description: Short description + pending_price_options: + sales_price: Sales price + pending_update_fields: + delete: Delete + products: + categories_selection: + brand: Brand + category: Department reports: revenue_expenditure: index: accounts_receivable: Accounts receivable summary: Total + stock_availability: + show_data: + product: Product + purchases: Ordered, not received + total: Total + view_connected_sales_orders: + delivery_date: Delivery Date + information: Reference text + order_number: Order number + ordered_amount: Ordered + product_info: Product number + shipping_address: Delivery customer + total_amount: Amount + stock_listing_csv: + index: + run: Execute report shared: excel: user: User diff --git a/config/locales/et.yml b/config/locales/et.yml index 18389e686..8ee155899 100644 --- a/config/locales/et.yml +++ b/config/locales/et.yml @@ -176,6 +176,13 @@ et: viivastyskorko: Viivise protsent www: WWW ytunnus: KMKR Nr. + delivery_method: + jarjestys: Järjekord + jvkulu: Lunamaksekulu + kuluprosentti: Kuluprotsent + merahti: Veoleping + selite: Nimetus + tulostustapa: Väljastamisviis keyword: jarjestys: Järjekord kieli: Keel @@ -233,6 +240,8 @@ et: printteri7: prio: varasto: Ladu + pending_updates: + value: Väärtus printer: ip: ip jarjestys: Järjekord @@ -292,6 +301,10 @@ et: translations: kieli: selitetark: + transport: + customer: Klient + password: Parool + username: Kasutajatunnus models: account: Arve bank_account: Pangakonto @@ -299,6 +312,7 @@ et: carrier: cash_register: Kassa currency: Valuuta + delivery_method: Kohaletoimetamise viis fiscal_year: Aruandeperiood head/purchase_invoice/approval: head/purchase_invoice/approved: @@ -315,6 +329,7 @@ et: package_code: packing_area: printer: Printer + product/keyword: Toote märksonad qualifier: Täpsustus qualifier/cost_center: Kulukoht qualifier/project: Projekt @@ -437,6 +452,32 @@ et: visibility_options: hidden: visible: + delivery_methods: + container_options: + includes_container: Jah + not_including_container: Ei + departures: + day_of_the_week_options: + friday: Reede + monday: Esmaspäev + saturday: Laupäev + sunday: Pyhapäev + thursday: Neljapäev + tuesday: Teisipäev + wednesday: Kolmapäev + status: Staatus + status_options: + in_use: Kasutusel + not_in_use: Ei ole kasutusel + warehouse: Ladu + edit: + header: Kohaletoimetamise viis + no_select: Valikut ei ole + index: + button_search: Otsi + header: Tarnimisviisid + label_options: + normal_label: Normaalne fiscal_years: create: create_success: @@ -578,6 +619,9 @@ et: forbidden: authorize: unauthorized: + data_export: + product_keywords: + header: Toote märksonad date: abbr_day_names: - P @@ -674,6 +718,10 @@ et: month: Kuu second: Sekundit year: Aasta + downloads: + index: + created_at: Koostamise aeg + destroy: Kustuta errors: cash_register: kassa_missing: @@ -840,12 +888,54 @@ et: percentage: format: format: + pending_product_updates: + index: + deleted: Staatus + label: Nimetus + search: Otsi + sku: Tootenumber + suppliers_sku: Tarnija tootenumber + list: + label: Nimetus + price: hind + save: Salvesta muudatused + sku: Tootenumber + list_of_changes: + not_found: Yhtki toodet ei leitud + pending_columns_options: + sales_price: Myygihind + pending_price_options: + sales_price: Myygihind + pending_update_fields: + delete: Kustuta + products: + categories_selection: + brand: Märk + category: Osakond reports: revenue_expenditure: index: accounts_receivable: Laekumised myygist summary: Kokku week: Nädal + stock_availability: + form: + constraints: Piiritlemine + show_data: + product: Toode + stock: Laosaldo + total: Kokku + week: Nädal + view_connected_sales_orders: + information: Tellimuse viide + order_number: Tellimuse number + ordered_amount: Tellitud + product_info: Tootenumber + shipping_address: Tarne sihtaadress + total_amount: Arve summa + stock_listing_csv: + index: + run: Käita aruannet shared: excel: user: Kasutaja diff --git a/config/locales/fi.yml b/config/locales/fi.yml index 5929b0af3..77cc7fd0c 100644 --- a/config/locales/fi.yml +++ b/config/locales/fi.yml @@ -183,6 +183,61 @@ fi: asiakasnumero: Asiakasnumero maksuehto: Maksuehto toimitustapa: Toimitustapa + delivery_method: + aktiivinen_kuljetus: Oletus aktiivinen kuljetus + aktiivinen_kuljetus_kansallisuus: Oletus aktiivisen kuljetuksen kansallisuus + ei_pakkaamoa: Pakkaamokäsittely + erikoispakkaus_kielto: Erikoispakkauskäsittely + erilliskasiteltavakulu: Erilliskäsiteltäväkulu + erittely: Rahtikirjaerittely + extranet: Extranet-toimitustapa + jarjestys: Järjestys + jvkielto: Jälkivaatimukset + jvkulu: Jälkivaatimuskulu + kauppatapahtuman_luonne: Oletus kauppatapahtuman luonne + kontti: Oletus kontti + kuljetusmuoto: Oletus kuljetusmuoto + kuljetusvakuutus: Kuljetusvakuutus + kuljetusvakuutus_tuotenumero: Kuljetusvakuutus tuote + kuljetusvakuutus_tyyppi: Kuljetusvakuutustyyppi + kuljyksikko: Itella kuljetusyksikkö + kuluprosentti: Kuluprosentti + lahdon_selite: Nimitys Lähtöjen hallinnassa + lajittelupiste: Lajittelupiste + lauantai: Lauantaijakelu + lisakulu: Lisäkulu + lisakulu_summa: Lisäkulusumma + locations: Sallitut toimipaikat + logy_rahtikirjanumerot: LOGY rahtikirjanumerot + maa_maara: Oletus määrämaa + merahti: Rahtisopimus + nouto: Nouto + osoitelappu: Osoitelapputyyppi + poistumistoimipaikka_koodi: Oletus poistumistoimipaikan koodi + rahdinkuljettaja: Kuljetusyhtiö + rahti_tuotenumero: Rahtiveloitus tuotenumero + rahtikirja: Rahtikirjatyyppi + rahtikirjakopio_email: + sallitut_alustat: Sallitut keräilyalustat + sallitut_maat: Sallitut maat + selite: Nimitys + sisamaan_kuljetus: Oletus sisämaan kuljetus + sisamaan_kuljetus_kansallisuus: Oletus sisämaan kuljetuksen kansallisuus + sisamaan_kuljetusmuoto: Oletus sisämaan kuljetusmuoto + sopimusnro: Rahtisopimusnumero + toim_maa: Koontirahtikirjan maa + toim_nimi: Koontirahtikirjan nimi + toim_nimitark: Koontirahtikirjan nimitarkenne + toim_osoite: Koontirahtikirjan osoite + toim_ovttunnus: Koontirahtikirjan OVT-tunnus + toim_postino: Koontirahtikirjan postinumero + toim_postitp: Koontirahtikirjan postitoimipaikka + tulostustapa: Tulostustapa + ulkomaanlisa: Rahtikulujen ulkomaanlisä + uudet_pakkaustiedot: Koontirahtikirjan pakkaustiedot + vaihtoehtoinen_vak_toimitustapa: VAK-tuotteet omalle tilaukselle + vak_kielto: VAK-käsittely + virallinen_selite: Virallinen nimi keyword: jarjestys: Järjestys kieli: Kieli @@ -327,6 +382,7 @@ fi: cash_register: Kassalipas currency: Valuutta customer: Asiakas + delivery_method: Toimitustapa fiscal_year: Tilikausi fixed_assets/commodity: Käyttöomaisuuden hyödyke head/purchase_invoice/approval: Ostolasku hyväksyttävänä @@ -341,6 +397,7 @@ fi: head/voucher: Tosite keyword/custom_attribute: Ylläpitonäkymän kenttä keyword/customer_category: Asiakasosasto + keyword/customer_group: Asiakasluokka keyword/customer_subcategory: Asiakasryhmä keyword/revenue_expenditure: Vaihtoehtoinen meno package: Pakkaus @@ -478,6 +535,175 @@ fi: visibility_options: hidden: Kenttää ei näytetä näkymässä visible: Kenttä näytetään näkymässä + delivery_methods: + adr_prohibition_options: + adr_prohibition: Toimitustavalla ei saa toimittaa VAK-tuotteita + adr_shipment: VAK-tuotteet toimitetaan toimitustavalla + permit_adr: Toimitustavalla saa toimittaa VAK-tuotteita + alternative_adr_delivery_method_options: + adr_products_transfer_permit: VAK-tuotteet siirretään omalle tilaukselleen toimitustavalla + adr_products_transfer_prohibition: VAK-tuotteita ei siirretä omalle tilaukselleen + cash_on_delivery_prohibition_options: + cash_on_delivery_permitted: Toimitustavalla saa toimittaa jälkivaatimuksia + cash_on_delivery_prohibition: Toimitustavalla ei saa toimittaa jälkivaatimuksia + container_options: + includes_container: Kyllä + not_including_container: Ei + create: + create_success: Toimitustapa luotiin onnistuneesti + departures: + collecting_start_time: Keräilyn aloitusaika + control_character: Ohjausmerkki + customer_group: Asiakasluokka + day_of_the_week: Lähdön viikonpäivä + day_of_the_week_options: + friday: Perjantai + monday: Maanantai + saturday: Lauantai + sunday: Sunnuntai + thursday: Torstai + tuesday: Tiistai + wednesday: Keskiviikko + last_ordering_time: Viimeinen tilausaika + link_new: Lisää uusi lähtö + no_selected: + customer_group: Ei asiakasluokkaa + day: Ei valittua päivää + terminal_area: Ei terminaalialuetta + warehouse: Ei varastoa + start_date: Alkamispäivämäärä + status: Tila + status_options: + in_use: Käytössä + not_in_use: Ei käytössä + terminal_area: Terminaalialue + time: Lähdön kellonaika + warehouse: Varasto + destroy: + destroy_success: Toimitustapa poistettiin onnistuneesti + edit: + button_remove: Poista toimitustapa + confirm_remove: Oletko varma, että haluat poistaa toimitustavan? + departures: + header: Toimitustavan lähdöt + header: Toimitustapa + no_select: Ei valintaa + translations: + header: Toimitustavan käännökset + extranet_options: + both_in_sales_and_extranet: Toimitustapa näytetään molemmissa + only_in_extranet: Toimitustapa näytetään vain extranetissä + only_in_sales: Toimitustapa näytetään vain myynnissä + freight_contract_options: + receiver_freight_contract: Käytetään vastaanottajan rahtisopimusta + sender_freight_contract: Käytetään lähettäjän rahtisopimusta + index: + button_search: Etsi + header: Toimitustavat + label_options: + compact_label: Tiivistetty + intrade_label: Intrade + normal_label: Normaali + simple_label: Yksinkertainen, tulostusmedia valitaan kirjoittimen takaa + logy_waybill_number_options: + not_using_logy_waybill_numbers: Ei käytetä LOGY-rahtikirjanumeroita + use_logy_waybill_numbers: Käytetään LOGY-rahtikirjanumeroita + new_packaging_information_options: + package_info_entry_allowed: Koonti-erätulostuksessa voi syöttää uudet pakkaustiedot ennen tulostusta + package_info_entry_denied: Koonti-erätulostuksessa ei voi syöttää uusia pakkaustietoja ennen tulostusta + packing_line_prohibition_options: + not_reserving_packing_line: Toimitustavan tilaukaset eivät varaa pakkaamolokeroa + reserve_packing_line: Toimitustavan tilaukset varaavat pakkaamolokeron + pickup_options: + pickup: Asiakas noutaa tilaukset + shipment: Tilaukset toimitetaan asiakkaalle + print_method_options: + batch: Erätulostus + collective_batch: Koonti-erätulostus + collective_instant: Koonti-hetitulostus + instant: Hetitulostus + skip_print: Rahtikirjansyöttö ja -tulostus ohitetaan + saturday_delivery_options: + not_saturday_delivery: Ei lauantaijakelua + saturday_delivery: Itella lisäpalvelu - Lauantaijakelu + special_packaging_prohibition_options: + special_packaging_permitted: Toimitustavalla saa toimittaa erikoispakkauksia + special_packaging_prohibition: Toimitustavalla ei saa toimittaa erikoispakkauksia + transport_unit_options: + not_transport_unit: Ei kuljetusyksikkökuljetusta + transport_unit: Itella lisäpalvelu - Kuljetusyksikkökuljetus + transportation_insurance_type_options: + currency_based_insurance: Valuuttamääräinen kuljetusvakuutus lisätään + currency_based_insurance_with_discount: Valuuttamääräinen kuljetusvakuutus lisätään. Käytetään kuljetusvakuutustuotteen asiakashintaa ja alennusta + no_transportation_insurance: Ei kuljetusvakuutusta + percentage_based_insurance: Prosentuaalinen kuljetusvakuutus lisätään + percentage_based_insurance_with_discount: Prosentuaalinen kuljetusvakuutus lisätään. Käytetään kuljetusvakuutustuotteen asiakasalennusta + use_company_default: Yhtiön oletus + update: + alternative_adr_delivery_methods: + one: Päivitettiin %{count} vaihtoehtoista vak toimitustapa + other: Päivitettiin %{count} vaihtoehtoista vak toimitustapaa + customer_keywords: + one: Päivitettiin %{count} asiakkaan avainsana + other: Päivitettiin %{count} asiakkaan avainsanaa + customers: + one: Päivitettiin %{count} asiakas + other: Päivitettiin %{count} asiakasta + delivery_methods: + one: Päivitettiin %{count} toimitustapa + other: Päivitettiin %{count} toimitustapaa + freight_contracts: + one: Päivitettiin %{count} rahtisopimus + other: Päivitettiin %{count} rahtisopimusta + freights: + one: Päivitettiin %{count} rahtimaksu + other: Päivitettiin %{count} rahtimaksua + not_delivered_sales_orders: + one: Päivitettiin %{count} myyntitilauksen otsikko + other: Päivitettiin %{count} myyntitilauksen otsikkoa + not_delivered_stock_transfers: + one: Päivitettiin %{count} siirtolistan otsikko + other: Päivitettiin %{count} siirtolistan otsikkoa + not_manufactured_manufacture_orders: + one: Päivitettiin %{count} valmistuksen otsikko + other: Päivitettiin %{count} valmistuksen otsikkoa + not_printed_waybills: + one: Päivitettiin %{count} tulostamaton rahtikirja + other: Päivitettiin %{count} tulostamatonta rahtikirjaa + offer_orders: + one: Päivitettiin %{count} tarjouksen otsikko + other: Päivitettiin %{count} tarjouksen otsikkoa + preorders: + one: Päivitettiin %{count} ennakkotilauksen otsikko + other: Päivitettiin %{count} ennakkotilauksen otsikkoa + project_orders: + one: Päivitettiin %{count} projektin otsikko + other: Päivitettiin %{count} projektin otsikkoa + reclamation_orders: + one: Päivitettiin %{count} reklamaation otsikko + other: Päivitettiin %{count} reklamaation otsikkoa + sales_order_drafts: + one: Päivitettiin %{count} kesken oleva myyntitilauksen otsikko + other: Päivitettiin %{count} kesken olevaa myyntitilauksen otsikkoa + update_success: Toimitustapa päivitettiin onnistuneesti + work_orders: + one: Päivitettiin %{count} työmääräyksen otsikko + other: Päivitettiin %{count} työmääräyksen otsikkoa + waybill_options: + dpd_ftp: DPD ftp-siirto + dpd_waybill: DPD A5 PDF-rahtikirja + generic_a4: Yleisrahtikirja A4 PDF + itella_a5: Postin A5 PDF-rahtikirja + itella_priority_foreign: Itella Priority Ulkomaa + itella_thermal: Postin lämpösiirto-rahtikirja + no_waybill: Rahtikirjaa ei tulosteta + unifaun_online: Unifaun Online + unifaun_print_server: Unifaun Print Server + ups_ftp: UPS ftp-siirto + waybill_specification_options: + no_waybill_specification: Toimitustavalle ei tulosteta rahtikirjaerittelyä + print_waybill_specification: Toimitustavalle tulostetaan rahtikirjaerittely + print_waybill_specification_per_customer: Toimitustavalle tulostetaan rahtikirjaerittely per asiakas fiscal_years: create: create_success: Tilikausi perustettiin onnistuneesti @@ -757,6 +983,25 @@ fi: kateistilitys_missing: Käteistilitystili puuttuu tai sitä ei löydy luottokortti_missing: Luottokorttitili puuttuu tai sitä ei löydy pankkikortti_missing: Pankkikorttitili puuttuu tai sitä ei löydy + delivery_method: + in_use_adr: 'HUOM: Et voi asettaa toimitustavalle VAK-kieltoa, sillä muut toimitustavat käyttävät tätä toimitustapaa vaihtoehtoisena VAK-toimitustapana' + in_use_customer_keywords: 'HUOM: Toimitustapaa ei voi poistaa, koska se on käytössä %{count} asiakkaan avainsanassa' + in_use_customers: 'HUOM: Toimitustapaa ei voi poistaa, koska se on käytössä %{count} asiakkaalla' + in_use_delivery_method: 'HUOM: Toimitustapaa ei voi poistaa, koska se on käytössä %{count} toimitustavalla' + in_use_freight_contracts: 'HUOM: Toimitustapaa ei voi poistaa, koska se on käytössä %{count} rahtisopimuksella' + in_use_freights: 'HUOM: Toimitustapaa ei voi poistaa, koska se on käytössä %{count} rahtimaksulla' + in_use_manufacture_orders: 'HUOM: Toimitustapaa ei voi poistaa, koska se on käytössä %{count} valmistuksella' + in_use_offer_orders: 'HUOM: Toimitustapaa ei voi poistaa, koska se on käytössä %{count} tarjouksella' + in_use_preorders: 'HUOM: Toimitustapaa ei voi poistaa, koska se on käytössä %{count} ennakkotilauksella' + in_use_project_orders: 'HUOM: Toimitustapaa ei voi poistaa, koska se on käytössä %{count} projektilla' + in_use_reclamation_orders: 'HUOM: Toimitustapaa ei voi poistaa, koska se on käytössä %{count} reklamaatiolla' + in_use_sales_order_drafts: 'HUOM: Toimitustapaa ei voi poistaa, koska se on käytössä %{count} keskeneräisellä myyntitilauksella' + in_use_sales_orders: 'HUOM: Toimitustapaa ei voi poistaa, koska se on käytössä %{count} toimittamattomalla myyntitilauksella' + in_use_stock_transfers: 'HUOM: Toimitustapaa ei voi poistaa, koska se on käytössä %{count} siirtolistalla' + in_use_waybills: 'HUOM: Toimitustapaa ei voi poistaa, koska se on käytössä %{count} rahtikirjalla' + in_use_work_orders: 'HUOM: Toimitustapaa ei voi poistaa, koska se on käytössä %{count} työmääräyksellä' + product_not_in_inventory_management: Tuotetta ei löydy / tuote pitää olla saldoton + unifaun_info_missing: 'HUOM: Koontierätulostus ei toimi Unifaun Online rahtikirjan kanssa ilman koontirahtikirjan pakkaustietoja' format: "%{attribute} %{message}" import: action_incorrect: Virheellinen toiminto! Sarakkeen arvo tulee olla joko "lisää" tai "muokkaa". @@ -835,6 +1080,9 @@ fi: depreciation_difference_amount: Poistoerorivit depreciation_rows_amount: Poistorivit header: Poistorivit + destroy_commodity: + destroy_failure: Hyödykkeen poisto epäonnistui + destroy_success: Hyödykkeen poisto onnistui edit: button_activate: Aktivoi hyödyke button_add_invoice_rows: Liitä ostolaskurivejä @@ -900,9 +1148,6 @@ fi: button_add: Liitä button_search: Etsi header: Liitä tositerivejä - destroy_commodity: - destroy_success: Hyödykkeen poisto onnistui - destroy_failure: Hyödykkeen poisto epäonnistui helpers: select: prompt: Valitse diff --git a/config/locales/sv.yml b/config/locales/sv.yml index 65834b0e4..e6b4abdf4 100644 --- a/config/locales/sv.yml +++ b/config/locales/sv.yml @@ -3,581 +3,625 @@ sv: activerecord: attributes: account: - alv_taso: - kohde: - kustp: + alv_taso: + kohde: + kustp: laatija: Skapare luontiaika: Skapad - muutospvm: - muuttaja: + muutospvm: + muuttaja: nimi: Namn - projekti: - sisainen_taso: + projekti: + sisainen_taso: tilino: Kontonummer - tiliointi_tarkistus: - toimijaliitos: - ulkoinen_taso: + tiliointi_tarkistus: + toimijaliitos: + ulkoinen_taso: accounting/fixed_assets/commodity: - evl_poistotyyppi: + evl_poistotyyppi: kayttoonottopvm: Ibruktagningsdatum bank_account: asiakastunnus: Org.nummer - bic: - factoring: - hyvak: - iban: + bic: + factoring: + hyvak: + iban: kaytossa: Status - maksulimitti: + maksulimitti: nimi: Namn - oletus_kohde: - oletus_kulutili: - oletus_kustp: - oletus_projekti: - oletus_rahatili: - oletus_selvittelytili: + oletus_kohde: + oletus_kulutili: + oletus_kustp: + oletus_projekti: + oletus_rahatili: + oletus_selvittelytili: tilino: Kontonummer - tilinylitys: + tilinylitys: valkoodi: Valuta bank_detail: laatija: Skapare luontiaika: Skapad - muutospvm: - muuttaja: + muutospvm: + muuttaja: nimitys: Benämning - pankkiiban1: - pankkiiban2: - pankkiiban3: - pankkinimi1: - pankkinimi2: - pankkinimi3: - pankkiswift1: - pankkiswift2: - pankkiswift3: + pankkiiban1: + pankkiiban2: + pankkiiban3: + pankkinimi1: + pankkinimi2: + pankkinimi3: + pankkiswift1: + pankkiswift2: + pankkiswift3: pankkitili1: Kontonummer pankkitili2: Kontonummer pankkitili3: Kontonummer - viite: + viite: carrier: - koodi: + koodi: luontiaika: Skapad - luottokortti: + luottokortti: muutospvm: "ändringsdatum" - muuttaja: - neutraali: + muuttaja: + neutraali: nimi: Namn - pakkauksen_sarman_minimimitta: + pakkauksen_sarman_minimimitta: cash_register: kassa: Kassa - kassaerotus: - kateisotto: - kateistilitys: + kassaerotus: + kateisotto: + kateistilitys: kustp: Kostnadsställe laatija: Skapare luontiaika: Skapad - luottokortti: + luottokortti: muutospvm: "ändringsdatum" muuttaja: omvandlare nimi: Namn - pankkikortti: + pankkikortti: toimipaikka: Verksamhetsställe company: alv: Moms - email: - factoringsaamiset: + email: + factoringsaamiset: fax: Fax - int_koodi: - intrastat_sarjanro: + int_koodi: + intrastat_sarjanro: jarjestys: Ordning - karhuerapvm: - kassa: - kassaale: - kassaerotus: - kateistilitys: + karhuerapvm: + kassa: + kassaale: + kassaerotus: + kateistilitys: kieli: Språk konserni: Koncern konsernimyyntisaamiset: koncernförsäljningsfordringar konserniostovelat: koncernköpskulder - konsernisaamiset: - konsernivelat: + konsernisaamiset: + konsernivelat: kotipaikka: Hemplats kotitullauslupa: hemförtullningstillstånd kuluprosentti: Kostprocent - laskutus_maa: - laskutus_nimi: - laskutus_osoite: - laskutus_postino: - laskutus_postitp: - luottokortti: - luottotappiot: + laskutus_maa: + laskutus_nimi: + laskutus_osoite: + laskutus_postino: + laskutus_postitp: + luottokortti: + luottotappiot: maa: Land - matkalla_olevat: - muutkulut: - myynninkassaale: - myynninvaluuttaero: + matkalla_olevat: + muutkulut: + myynninkassaale: + myynninvaluuttaero: myynti: Försäljning - myynti_ei_eu: - myynti_eu: - myynti_kaanteinen: - myynti_kohde: - myynti_kustp: - myynti_marginaali: - myynti_projekti: - myyntireskontrakausi_alku: - myyntireskontrakausi_loppu: + myynti_ei_eu: + myynti_eu: + myynti_kaanteinen: + myynti_kohde: + myynti_kustp: + myynti_marginaali: + myynti_projekti: + myyntireskontrakausi_alku: + myyntireskontrakausi_loppu: myyntisaamiset: Försäljningsfordringar nimi: Namn osoite: Adress - osto_marginaali: - ostoreskontrakausi_alku: - ostoreskontrakausi_loppu: + osto_marginaali: + ostoreskontrakausi_alku: + ostoreskontrakausi_loppu: ostovelat: leverantörsskulder - ovttunnus: - pankkiiban1: - pankkiiban2: - pankkiiban3: - pankkikortti: - pankkinimi1: - pankkinimi2: - pankkinimi3: - pankkiswift1: - pankkiswift2: - pankkiswift3: - pankkitili1: - pankkitili2: - pankkitili3: + ovttunnus: + pankkiiban1: + pankkiiban2: + pankkiiban3: + pankkikortti: + pankkinimi1: + pankkinimi2: + pankkinimi3: + pankkiswift1: + pankkiswift2: + pankkiswift3: + pankkitili1: + pankkitili2: + pankkitili3: postino: Postnummer postitp: Postanstalt puhelin: Tel. - pyoristys: - raaka_ainevarasto: - raaka_ainevarastonmuutos: - selvittelytili: - siirtosaamiset: - siirtovelka: + pyoristys: + raaka_ainevarasto: + raaka_ainevarastonmuutos: + selvittelytili: + siirtosaamiset: + siirtovelka: tilastotullikamari: statistiktullkammare - tilikauden_tulos: - tilikausi_alku: - tilikausi_loppu: - tilino_triang: - tulli_lisattava_era: - tulli_vahennettava_era: + tilikauden_tulos: + tilikausi_alku: + tilikausi_loppu: + tilino_triang: + tulli_lisattava_era: + tulli_vahennettava_era: tullikamari: tullkammare - tullin_asiaknro: - tullin_lupanro: + tullin_asiaknro: + tullin_lupanro: tullipaate: tullterminal valkoodi: valuta - valuuttaero: - varasto: + valuuttaero: + varasto: varastonmuutos: Lagerförändring - varastonmuutos_epakurantti: - varastonmuutos_inventointi: - varastonmuutos_rahti: - varastonmuutos_valmistuksesta: - viivastyskorko: + varastonmuutos_epakurantti: + varastonmuutos_inventointi: + varastonmuutos_rahti: + varastonmuutos_valmistuksesta: + viivastyskorko: www: web ytunnus: Org.Nr + delivery_method: + jarjestys: Ordning + jvkulu: Postförskottsavgift + kuluprosentti: Kostprocent + merahti: Fraktkontrakt + selite: Benämning + tulostustapa: Utskriftsmetod keyword: jarjestys: Ordning kieli: Språk - laji: + laji: selite: Benämning - selitetark: - selitetark_2: - selitetark_3: + selitetark: + selitetark_2: + selitetark_3: keyword/custom_attribute: - database_field: - default_value: - help_text: - label: - required: - set_name: - visibility: + database_field: + default_value: + help_text: + label: + required: + set_name: + visibility: keyword/revenue_expenditure: selitetark_2: Antal package: - erikoispakkaus: + erikoispakkaus: jarjestys: Ordning - kayttoprosentti: + kayttoprosentti: kieli: Språk - korkeus: - laji: - leveys: - minimi_paino: + korkeus: + laji: + leveys: + minimi_paino: paino: Vikt - pakkaus: + pakkaus: pakkauskuvaus: Paketbeskrivning - pakkausveloitus_tuotenumero: - puukotus_kerroin: + pakkausveloitus_tuotenumero: + puukotus_kerroin: selite: Benämning - selitetark: - selitetark_2: - selitetark_3: - syvyys: - yksin_eraan: + selitetark: + selitetark_2: + selitetark_3: + syvyys: + yksin_eraan: package_code: - koodi: - rahdinkuljettaja: + koodi: + rahdinkuljettaja: package_codes: - koodi: - rahdinkuljettaja: + koodi: + rahdinkuljettaja: packing_area: - lokero: + lokero: nimi: Namn - pakkaamon_prio: + pakkaamon_prio: printteri0: Plocklista printteri1: Följesedel printteri2: Artikeletiketter printteri3: adresslapp printteri4: Fraktsedel A5 printteri6: Fraktsedel A4 - printteri7: + printteri7: prio: Prio varasto: Lager + pending_updates: + value: Värde printer: ip: ip jarjestys: Ordning kirjoitin: Skrivare komento: kommando - mediatyyppi: + mediatyyppi: mediatyyppi_types: - A4: - A5: - LS149X104: - LS59X40: - LSN149X104: - LSN59X40: - kuittitulostin: + A4: + A5: + LS149X104: + LS59X40: + LSN149X104: + LSN59X40: + kuittitulostin: merkisto: charset merkisto_types: - '1': - '2': - '3': - '4': - '5': + '1': + '2': + '3': + '4': + '5': nimi: Namn osoite: Adress postino: Post Nr postitp: Postadress puhelin: Tel. - unifaun_nimi: + unifaun_nimi: yhteyshenkilo: Kontaktperson qualifier: - isa_tarkenne: - kaytossa: - koodi: + isa_tarkenne: + kaytossa: + koodi: nimi: Namn - tunnus: + tunnus: tyyppi: Typ terms_of_payment: abs_pvm: Betalningsdag - erapvmkasin: - factoring: - itsetulostus: - jaksotettu: + erapvmkasin: + factoring: + itsetulostus: + jaksotettu: jarjestys: Ordning jv: Efterkrav - kassa_abspvm: - kassa_alepros: - kassa_relpvm: + kassa_abspvm: + kassa_alepros: + kassa_relpvm: kateinen: Kontant - kaytossa: + kaytossa: laatija: Skapare luontiaika: Skapad - muutospvm: - muuttaja: + muutospvm: + muuttaja: pankkiyhteystiedot: Bankuppgifter - rel_pvm: - sallitut_maat: - teksti: + rel_pvm: + sallitut_maat: + teksti: translations: - kieli: - selitetark: + kieli: + selitetark: + transport: + customer: Kund + password: Lösenord + username: Användarnamn models: account: Konto bank_account: Bankkonto - bank_detail: - carrier: - cash_register: + bank_detail: + carrier: + cash_register: currency: Valuta + delivery_method: Leveranssätt fiscal_year: Räkenskapsår - head/purchase_invoice/approval: - head/purchase_invoice/approved: - head/purchase_invoice/paid: - head/purchase_invoice/transfer: - head/purchase_invoice/waiting: + head/purchase_invoice/approval: + head/purchase_invoice/approved: + head/purchase_invoice/paid: + head/purchase_invoice/transfer: + head/purchase_invoice/waiting: head/purchase_order: Inköpsorder head/sales_invoice: Försäljningsfaktura head/sales_order: Försäljningsorder head/sales_order_draft: "Öppen försäljningsorder" - head/voucher: - keyword/custom_attribute: + head/voucher: + keyword/custom_attribute: package: Förpackning - package_code: - packing_area: + package_code: + packing_area: printer: Skrivare + product/keyword: Nyckelord Artiklar qualifier: Specifikation qualifier/cost_center: Kostnadsställe qualifier/project: Projekt qualifier/target: Objekt sum_level: Nivå - sum_level/commodity: - sum_level/external: + sum_level/commodity: + sum_level/external: sum_level/internal: Intern - sum_level/profit: + sum_level/profit: sum_level/vat: Moms terms_of_payment: Betalningsvillkor administration: accounts: create: - create_success: + create_success: destroy: - destroy_success: + destroy_success: edit: button_remove: Radera konto - confirm_remove: + confirm_remove: header: Konto no_cost_center: Inget kostnadsställe no_project: Inget projekt - no_sum_level: + no_sum_level: no_target: Inget objekt - no_vat: + no_vat: index: button_search: Sök header: Kontotabell manuaali_esto_options: - editing_disabled: - editing_enabled: + editing_disabled: + editing_enabled: tiliointi_tarkistus_options: - mandatory_cs: - mandatory_cs_project: - mandatory_cs_target: - mandatory_cs_target_project: - mandatory_project: - mandatory_target: - mandatory_target_project: - no_mandatory_fields: + mandatory_cs: + mandatory_cs_project: + mandatory_cs_target: + mandatory_cs_target_project: + mandatory_project: + mandatory_target: + mandatory_target_project: + no_mandatory_fields: toimijaliitos_options: - relation_not_required: - relation_required: + relation_not_required: + relation_required: update: - update_success: + update_success: actions: - button_saving: + button_saving: bank_accounts: create: - create_success: + create_success: edit: header: Bankkonto factoring_options: factoring_disabled: Ej factoring - factoring_enabled: + factoring_enabled: index: button_search: Sök - header: - show_active: + header: + show_active: show_inactive: Visa raderade kaytossa_options: - active: + active: inactive: Borttagit / Inte i bruk tilinylitys_options: - limit_override_allowed: - limit_override_denied: + limit_override_allowed: + limit_override_denied: update: - update_success: + update_success: bank_details: edit: - header: + header: index: header: Bankuppgifter bank_details_helper: - empty: + empty: finnish: Finska swedish: Svenska carriers: edit: - header: + header: index: button_search: Sök - header: + header: neutraali_options: neutral: Ja not_neutral: Nej cash_registers: create: - create_success: + create_success: edit: - header: + header: no_select: Inget val index: button_search: Sök - header: + header: update: - update_success: + update_success: currencies: create: - create_success: + create_success: edit: header: Valuta index: button_search: Sök header: Valutor update: - update_success: + update_success: custom_attributes: edit: - button_remove: - confirm_remove: - header: + button_remove: + confirm_remove: + header: index: button_search: Sök - header: + header: required_options: - mandatory: - optional: + mandatory: + optional: visibility_options: - hidden: - visible: + hidden: + visible: + delivery_methods: + container_options: + includes_container: Ja + not_including_container: Nej + departures: + customer_group: kundklass + day_of_the_week_options: + friday: Fredag + monday: Måndag + saturday: Lördag + sunday: Söndag + thursday: Torsdag + tuesday: Tisdag + wednesday: Onsdag + status: Status + status_options: + not_in_use: ej i bruk + warehouse: Lager + edit: + header: Leveranssätt + no_select: Inget val + index: + button_search: Sök + header: Leveranssätt + label_options: + normal_label: Normal fiscal_years: create: - create_success: + create_success: edit: header: Räkenskapsår index: button_search: Sök header: Räkenskapsåren update: - update_success: + update_success: packages: create: - create_success: + create_success: edit: header: Förpackning erikoispakkaus_options: - not_special: - special: + not_special: + special: index: button_search: Sök - header: + header: package_codes: - link_new: + link_new: update: - update_success: + update_success: yksin_eraan_options: - combined_parcel: + combined_parcel: separate_parcel: Normal behandling packing_areas: create: - create_success: + create_success: destroy: - destroy_success: + destroy_success: edit: - button_remove: - confirm_remove: - header: + button_remove: + confirm_remove: + header: index: button_search: Sök - header: + header: update: - update_success: + update_success: printers: create: - create_success: + create_success: destroy: - destroy_success: + destroy_success: edit: - button_remove: - confirm_remove: + button_remove: + confirm_remove: header: Skrivare index: button_search: Sök header: Skrivare mediatyyppi_options: - media_a4: - media_a5: + media_a4: + media_a5: media_default: Inget val - media_receipt: - media_thermal1: - media_thermal2: - media_thermal3: - media_thermal4: + media_receipt: + media_thermal1: + media_thermal2: + media_thermal3: + media_thermal4: merkisto_options: - charset_7bit: - charset_ansi: + charset_7bit: + charset_ansi: charset_default: Inget val - charset_dos: - charset_scandic_off: - charset_utf8: + charset_dos: + charset_scandic_off: + charset_utf8: update: - update_success: + update_success: qualifiers: create: - create_success: + create_success: edit: - header: + header: index: button_search: Sök - button_show_active: + button_show_active: button_show_removed: Visa raderade - header: + header: kaytossa_options: in_use: Ja not_in_use: Nej update: - update_success: + update_success: sum_levels: create: - create_success: + create_success: destroy: - destroy_success: + destroy_success: edit: button_remove: Radera nivå - confirm_remove: - header: + confirm_remove: + header: index: button_search: Sök - header: + header: kayttotarkoitus_options: normal: Inget val - purchases: + purchases: turnover: Omsättning kumulatiivinen_options: - cumulative: + cumulative: not_cumulative: Nej update: - update_success: + update_success: terms_of_payments: cash_options: - cash: - credit_card: - debit_card: - not_cash: + cash: + credit_card: + debit_card: + not_cash: create: - create_success: + create_success: edit: header: Betalningsvillkor no_factoring: Ej factoring - use_company_defaults: + use_company_defaults: in_use_options: active: i bruk inactive: Borttagit / Inte i bruk index: button_search: Sök - button_show_active: - button_show_removed: - header: + button_show_active: + button_show_removed: + header: update: - update_success: + update_success: translations: language: Språk - link_new: - text: + link_new: + text: update_access: - forbidden: + forbidden: application: access_control: - forbidden: + forbidden: authorize: - unauthorized: + unauthorized: + data_export: + product_keywords: + header: Nyckelord Artiklar date: abbr_day_names: - sön @@ -588,7 +632,7 @@ sv: - fre - lör abbr_month_names: - - + - - jan - feb - mar @@ -614,7 +658,7 @@ sv: long: "%e %B %Y" short: "%e %b" month_names: - - + - - januari - februari - mars @@ -674,21 +718,25 @@ sv: month: Månad second: Sekund year: "År" + downloads: + index: + created_at: Skapad + destroy: Radera errors: cash_register: - kassa_missing: - kassaerotus_missing: - kateisotto_missing: - kateistilitys_missing: - luottokortti_missing: - pankkikortti_missing: + kassa_missing: + kassaerotus_missing: + kateisotto_missing: + kateistilitys_missing: + luottokortti_missing: + pankkikortti_missing: format: "%{attribute} %{message}" messages: accepted: måste vara accepterad - after: - after_or_equal_to: - before: - before_or_equal_to: + after: + after_or_equal_to: + before: + before_or_equal_to: blank: måste anges confirmation: stämmer inte överens %{attribute} empty: får ej vara tom @@ -701,7 +749,7 @@ sv: invalid: har fel format less_than: måste vara mindre än %{count} less_than_or_equal_to: måste vara mindre än eller lika med %{count} - not_a_date: + not_a_date: not_a_number: "är inte ett nummer" not_an_integer: måste vara ett heltal odd: måste vara udda @@ -716,89 +764,89 @@ sv: too_short: "är för kort (minimum är %{count} tecken)" wrong_length: har fel längd (ska vara %{count} tecken) packing_area: - duplicate_cells: + duplicate_cells: qualifier: - accounts_found: + accounts_found: sum_level: - begin_with_error: - invalid_char: - not_same_type: + begin_with_error: + invalid_char: + not_same_type: template: body: 'Det var problem med följande fält:' header: one: Ett fel förhindrade denna %{model} från att sparas other: "%{count} fel förhindrade denna %{model} från att sparas" terms_of_payment: - in_use_customers: - in_use_sales_order_drafts: - in_use_sales_orders: + in_use_customers: + in_use_sales_order_drafts: + in_use_sales_orders: fixed_assets: commodities: activate: - activation_failure: - activation_success: + activation_failure: + activation_success: commodity_rows: button_show_hide: Visa / Dölj - commodity_row_amount: - header: + commodity_row_amount: + header: confirm_sale: - sale_failure: - sale_success: + sale_failure: + sale_success: create: - create_success: + create_success: depreciations: button_show_hide: Visa / Dölj - depreciation_difference_amount: - depreciation_rows_amount: - header: + depreciation_difference_amount: + depreciation_rows_amount: + header: edit: - button_activate: - button_add_invoice_rows: - button_add_voucher_rows: - button_create: - button_sell: - header: + button_activate: + button_add_invoice_rows: + button_add_voucher_rows: + button_create: + button_sell: + header: form: - bookkeeping_value: - bookkeeping_value_now: + bookkeeping_value: + bookkeeping_value_now: index: - button_search: - header: + button_search: + header: link_order: - link_order_success: + link_order_success: link_voucher: - link_voucher_success: + link_voucher_success: link_voucher_row: - cannot_link_row: - row_already_linked: + cannot_link_row: + row_already_linked: new: - header: + header: procurement_rows: - button_remove: - header: + button_remove: + header: purchase_orders: - button_add: - button_search: - header: + button_add: + button_search: + header: sell: - confirm_sale: - header: + confirm_sale: + header: unlink: - unlink_success: + unlink_success: unlink_voucher_row: - cannot_unlink: + cannot_unlink: update: - update_success: + update_success: vouchers: - button_add: - button_search: - header: + button_add: + button_search: + header: helpers: select: prompt: Välj submit: create: Skapa %{model} - destroy: + destroy: new: Ny %{model} submit: Spara %{model} update: "Ändra %{model}" @@ -842,12 +890,61 @@ sv: percentage: format: format: "%n%" + pending_product_updates: + index: + deleted: Status + label: Benämning + search: Sök + sku: Artikelnummer + suppliers_sku: Leverantörs Art Nr + list: + label: Benämning + price: Pris + save: Spara ändringarna + sku: Artikelnummer + list_of_changes: + not_found: Inga artiklar hittades + pending_columns_options: + sales_price: "ÅfNetto" + shop_price: Butikpris + short_description: Kort beskrivning + pending_price_options: + sales_price: "ÅfNetto" + shop_price: Butikpris + pending_update_fields: + delete: Radera + products: + categories_selection: + brand: Märke + category: Avdelning + subcategory: Grupp reports: revenue_expenditure: index: accounts_receivable: Försäljningsfordringar summary: Totalt week: Vecka + stock_availability: + form: + constraints: Begränsning + show_data: + past: Försenat + product: Artikel + purchases: På kommande + stock: Lagersaldo + total: Totalt + week: Vecka + view_connected_sales_orders: + delivery_date: Leveransdatum + information: Orderreferens + order_number: Ordernummer + ordered_amount: Beställda + product_info: Artikelnummer + shipping_address: Leveransadress + total_amount: Fakturabelopp + stock_listing_csv: + index: + run: Kör rapport shared: excel: time: Körtid @@ -862,9 +959,9 @@ sv: two_words_connector: " och " words_connector: ", " time: - am: + am: formats: default: "%a, %e %b %Y %H:%M:%S %z" long: "%e %B %Y %H:%M" short: "%e %b %H:%M" - pm: + pm: diff --git a/config/routes.rb b/config/routes.rb index f58775f25..182e58392 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -36,6 +36,7 @@ resources :currencies, except: :destroy resources :custom_attributes resources :customer_transports + resources :delivery_methods resources :fiscal_years, except: :destroy resources :packages resources :packing_areas diff --git a/db/migrate/20150916134159_update_delivery_method_permissions.rb b/db/migrate/20150916134159_update_delivery_method_permissions.rb new file mode 100644 index 000000000..63ad8c6f8 --- /dev/null +++ b/db/migrate/20150916134159_update_delivery_method_permissions.rb @@ -0,0 +1,18 @@ +require File.expand_path('test/permission_helper') +include PermissionHelper + +class UpdateDeliveryMethodPermissions < ActiveRecord::Migration + def up + PermissionHelper.add_item( + program: 'Ylläpito', + name: 'Toimitustavat', + uri: 'pupenext/delivery_methods' + ) + end + + def down + PermissionHelper.remove_all( + uri: 'pupenext/delivery_methods' + ) + end +end diff --git a/db/migrate/20151106095621_remove_fields_from_toimitustavat_toimipaikat.rb b/db/migrate/20151106095621_remove_fields_from_toimitustavat_toimipaikat.rb new file mode 100644 index 000000000..58d55f6e2 --- /dev/null +++ b/db/migrate/20151106095621_remove_fields_from_toimitustavat_toimipaikat.rb @@ -0,0 +1,24 @@ +class RemoveFieldsFromToimitustavatToimipaikat < ActiveRecord::Migration + def up + remove_column :toimitustavat_toimipaikat, :yhtio + remove_column :toimitustavat_toimipaikat, :laatija + remove_column :toimitustavat_toimipaikat, :muuttaja + remove_column :toimitustavat_toimipaikat, :luontiaika + remove_column :toimitustavat_toimipaikat, :muutospvm + + add_index :toimitustavat_toimipaikat, :toimitustapa_tunnus + add_index :toimitustavat_toimipaikat, :toimipaikka_tunnus + end + + def down + add_column :toimitustavat_toimipaikat, :yhtio, :string, limit: 5, default: '', null: false + add_column :toimitustavat_toimipaikat, :laatija, :string, limit: 50, default: '', null: false, after: :yhtio + add_column :toimitustavat_toimipaikat, :muuttaja, :string, limit: 50, default: '', null: false, after: :yhtio + add_column :toimitustavat_toimipaikat, :luontiaika, :datetime, after: :yhtio + add_column :toimitustavat_toimipaikat, :muutospvm, :datetime, after: :yhtio + + remove_index :toimitustavat_toimipaikat, column: :toimitustapa_tunnus + remove_index :toimitustavat_toimipaikat, column: :toimipaikka_tunnus + add_index :toimitustavat_toimipaikat, :yhtio, name: 'yhtio_index' + end +end diff --git a/db/schema.rb b/db/schema.rb index 1d862153b..ee671213d 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -2645,16 +2645,12 @@ end create_table "toimitustavat_toimipaikat", primary_key: "tunnus", force: :cascade do |t| - t.string "yhtio", limit: 5, default: "", null: false - t.integer "toimitustapa_tunnus", limit: 4, null: false - t.integer "toimipaikka_tunnus", limit: 4, null: false - t.string "laatija", limit: 50, default: "", null: false - t.datetime "luontiaika", null: false - t.datetime "muutospvm", null: false - t.string "muuttaja", limit: 50, default: "", null: false + t.integer "toimitustapa_tunnus", limit: 4, null: false + t.integer "toimipaikka_tunnus", limit: 4, null: false end - add_index "toimitustavat_toimipaikat", ["yhtio"], name: "yhtio_index", using: :btree + add_index "toimitustavat_toimipaikat", ["toimipaikka_tunnus"], name: "index_toimitustavat_toimipaikat_on_toimipaikka_tunnus", using: :btree + add_index "toimitustavat_toimipaikat", ["toimitustapa_tunnus"], name: "index_toimitustavat_toimipaikat_on_toimitustapa_tunnus", using: :btree create_table "transports", force: :cascade do |t| t.integer "transportable_id", limit: 4 diff --git a/test/classes/postal_official_legend_test.rb b/test/classes/postal_official_legend_test.rb new file mode 100644 index 000000000..8a17997cf --- /dev/null +++ b/test/classes/postal_official_legend_test.rb @@ -0,0 +1,8 @@ +require 'test_helper' + +class PostalOfficialLegendTest < ActiveSupport::TestCase + test 'should get proper legend' do + legends = PostalOfficialLegend.options + assert_equal Array, legends.class + end +end diff --git a/test/controllers/administration/delivery_method_controller_test.rb b/test/controllers/administration/delivery_method_controller_test.rb new file mode 100644 index 000000000..1c4de14b4 --- /dev/null +++ b/test/controllers/administration/delivery_method_controller_test.rb @@ -0,0 +1,210 @@ +require 'test_helper' + +class Administration::DeliveryMethodsControllerTest < ActionController::TestCase + fixtures %w( + delivery_methods + delivery_method/departures + packages + locations + ) + + def setup + login users(:bob) + @delivery_method = delivery_methods(:kaukokiito) + end + + test 'should get index' do + get :index + assert_response :success + + assert_template "index", "Template should be index" + end + + test 'should get edit' do + get :edit, id: @delivery_method.tunnus + assert_response :success + end + + test 'show should be edit' do + get :show, id: @delivery_method.tunnus + assert_response :success + end + + test 'should create delivery method' do + assert_difference('DeliveryMethod.count', 1, response.body) do + + params = { + selite: "Random delivery method", + tulostustapa: 'H', + sopimusnro: '', + nouto: :shipment, + ei_pakkaamoa: '1', + extranet: :only_in_sales, + rahtikirja: 'generic_a4', + jarjestys: 1 + } + + post :create, delivery_method: params + assert_redirected_to delivery_methods_path + end + end + + test 'should not create delivery method' do + assert_no_difference('DeliveryMethod.count') do + + params = { + not_existing_column: true, + nouto: '' + } + + post :create, delivery_method: params + assert_template "edit", "Template should be edit" + end + end + + test 'should update delivery method' do + params = { tulostustapa: :collective_batch } + + patch :update, id: @delivery_method.id, delivery_method: params + assert_redirected_to delivery_methods_path + end + + test 'should not update delivery method' do + params = { selite: 'Kiitolinja' } + + patch :update, id: @delivery_method.id, delivery_method: params + assert_template "edit", "Template should be edit" + end + + test "should delete delivery method" do + deli2 = delivery_methods :kiitolinja + + assert_difference("DeliveryMethod.count", -1) do + delete :destroy, id: deli2.id + end + + assert_redirected_to delivery_methods_path + end + + test 'should save sallitut_alustat array as string' do + package_one = packages(:steel_barrel).id + package_two = packages(:oak_barrel).id + + params = { sallitut_alustat: [ package_one, package_two, '' ] } + + patch :update, id: @delivery_method.id, delivery_method: params + assert_redirected_to delivery_methods_path + + assert_equal "#{package_one},#{package_two}", @delivery_method.reload.sallitut_alustat + end + + test "should add translations" do + params = { + translations_attributes: [ + { kieli: 'no', selitetark: 'Kaukokiito Transports' } + ] + } + + assert_difference 'Keyword::DeliveryMethodTranslation.count' do + patch :update, id: @delivery_method.id, delivery_method: params + end + end + + test "should update and destroy translations" do + translated = keywords :deliverymethod_locale_en + + params = { + translations_attributes: [ + { id: translated.id, selitetark: 'a translation' } + ] + } + + assert_no_difference('Keyword::DeliveryMethodTranslation.count') do + patch :update, id: translated.delivery_method.id, delivery_method: params + end + + assert_equal 'a translation', translated.reload.selitetark + + params = { + translations_attributes: [ + { id: translated.id, _destroy: 'true' } + ] + } + + assert_difference('Keyword::DeliveryMethodTranslation.count', -1) do + patch :update, id: translated.delivery_method.id, delivery_method: params + end + end + + test "should update departure date" do + params = { + departures_attributes: [ + { id: @delivery_method.departures.first.id, alkupvm: { day: '12', month: '10', year: '2015' } } + ] + } + + patch :update, id: @delivery_method.id, delivery_method: params + + assert_equal '2015-10-12', @delivery_method.departures.first.reload.alkupvm.to_s + end + + test "should create departure" do + params = { + departures_attributes: [ + { + alkupvm: { day: '12', month: '10', year: '2015' }, + kerailyn_aloitusaika: '12:00:00', + lahdon_kellonaika: '13:20:56', + viimeinen_tilausaika: '23:59:59', + lahdon_viikonpvm: 1, + varasto: 10 + } + ] + } + + assert_difference('DeliveryMethod::Departure.count', 1) do + patch :update, id: @delivery_method.id, delivery_method: params + end + end + + test 'should destroy departure' do + params = { + departures_attributes: [ + { id: @delivery_method.departures.first.id, _destroy: 'true' } + ] + } + + assert_difference('DeliveryMethod::Departure.count', -1) do + patch :update, id: @delivery_method.id, delivery_method: params + end + end + + test 'should add locations' do + @delivery_method.locations.delete_all + + params = { + id: @delivery_method.id, + delivery_method: { + location_ids: [@delivery_method.company.locations.first.id] + } + } + + assert_difference('@delivery_method.locations.count', 1) do + patch :update, params + end + end + + test 'should remove locations' do + assert_equal 1, @delivery_method.locations.count + + params = { + id: @delivery_method.id, + delivery_method: { + location_ids: [] + } + } + + patch :update, params + assert_equal 0, @delivery_method.locations.count + end +end diff --git a/test/controllers/data_export_controller_test.rb b/test/controllers/data_export_controller_test.rb index a719d4c32..283457aae 100644 --- a/test/controllers/data_export_controller_test.rb +++ b/test/controllers/data_export_controller_test.rb @@ -44,7 +44,7 @@ class DataExportControllerTest < ActionController::TestCase header = ["Tuoteno", "Malliston nimi", "Tuotteen väri"] assert_equal header, excel.row(1) - row = ["hammer123", "Aluminium", " "] + row = ["non_inventory_manageable_product", " ", " "] assert_equal row, excel.row(2) end end diff --git a/test/fixtures/customer_keywords.yml b/test/fixtures/customer_keywords.yml new file mode 100644 index 000000000..859ff6d84 --- /dev/null +++ b/test/fixtures/customer_keywords.yml @@ -0,0 +1,10 @@ +DEFAULTS: &DEFAULTS + yhtio: acme + luontiaika: <%= Time.now %> + laatija: joe + muutospvm: <%= Time.now %> + muuttaja: joe + +keyword_1: + avainsana: Kaukokiito + <<: *DEFAULTS diff --git a/test/fixtures/customers.yml b/test/fixtures/customers.yml index b5baafc52..7a2f33a99 100644 --- a/test/fixtures/customers.yml +++ b/test/fixtures/customers.yml @@ -1,8 +1,14 @@ -stubborn_customer: - asiakasnro: 100 +DEFAULTS: &DEFAULTS yhtio: acme + luontiaika: <%= Time.now %> + laatija: joe + muutospvm: <%= Time.now %> + muuttaja: joe + +stubborn_customer: ytunnus: FI12345678 ovttunnus: 003712345678 + asiakasnro: 100 nimi: Very stubborn customer osoite: Street 1 postino: 00100 @@ -13,9 +19,8 @@ stubborn_customer: kieli: fi valkoodi: eur terms_of_payment: sixty_days_net + toimitustapa: Kaukokiito osasto: 1 ryhma: 10 - laatija: joe - luontiaika: <%= Date.today %> - muutospvm: <%= Date.today %> - muuttaja: joe + luokka: 100 + <<: *DEFAULTS diff --git a/test/fixtures/delivery_method/departures.yml b/test/fixtures/delivery_method/departures.yml new file mode 100644 index 000000000..a8408f751 --- /dev/null +++ b/test/fixtures/delivery_method/departures.yml @@ -0,0 +1,14 @@ +DEFAULTS: &DEFAULTS + yhtio: acme + luontiaika: <%= Time.now %> + laatija: joe + muutospvm: <%= Time.now %> + muuttaja: joe + +# Ostotilaus +departure_one: + liitostunnus: <%= ActiveRecord::FixtureSet.identify(:kaukokiito) %> + kerailyn_aloitusaika: '12:00:00' + lahdon_kellonaika: '13:24:59' + alkupvm: 0 + <<: *DEFAULTS diff --git a/test/fixtures/delivery_methods.yml b/test/fixtures/delivery_methods.yml new file mode 100644 index 000000000..120568421 --- /dev/null +++ b/test/fixtures/delivery_methods.yml @@ -0,0 +1,25 @@ +DEFAULTS: &DEFAULTS + yhtio: acme + muuttaja: joe + laatija: joe + luontiaika: <%= Time.now %> + muutospvm: <%= Time.now %> + +kaukokiito: + kauppatapahtuman_luonne: 11 + poistumistoimipaikka_koodi: FI0 + lajittelupiste: FIVAT + kuljetusmuoto: 1 + osoitelappu: tiivistetty + rahdinkuljettaja: Kaukokiito + rahtikirja: rahtikirja.inc + selite: Kaukokiito + tulostustapa: H + <<: *DEFAULTS + +kiitolinja: + rahdinkuljettaja: Kiitolinja + rahtikirja: rahtikirja_pdf.inc + selite: Kiitolinja + tulostustapa: H + <<: *DEFAULTS diff --git a/test/fixtures/freight_contracts.yml b/test/fixtures/freight_contracts.yml new file mode 100644 index 000000000..909c5e096 --- /dev/null +++ b/test/fixtures/freight_contracts.yml @@ -0,0 +1,7 @@ +kaukokiito_freight_contract: + yhtio: acme + toimitustapa: Kaukokiito + laatija: joe + luontiaika: <%= Date.today %> + muutospvm: <%= Date.today %> + muuttaja: joe diff --git a/test/fixtures/freights.yml b/test/fixtures/freights.yml new file mode 100644 index 000000000..d7ee4c6c3 --- /dev/null +++ b/test/fixtures/freights.yml @@ -0,0 +1,7 @@ +kaukokiito_freight: + yhtio: acme + toimitustapa: Kaukokiito + laatija: joe + luontiaika: <%= Date.today %> + muutospvm: <%= Date.today %> + muuttaja: joe diff --git a/test/fixtures/keyword/customer_groups.yml b/test/fixtures/keyword/customer_groups.yml new file mode 100644 index 000000000..2fce0b0c6 --- /dev/null +++ b/test/fixtures/keyword/customer_groups.yml @@ -0,0 +1,15 @@ +DEFAULTS: &DEFAULTS + yhtio: acme + luontiaika: <%= Time.now %> + muutospvm: <%= Time.now %> + laji: ASIAKASLUOKKA + +reipas: + selite: 100 + selitetark: Reipas + <<: *DEFAULTS + +laiska: + selite: 200 + selitetark: Laiska + <<: *DEFAULTS diff --git a/test/fixtures/keywords.yml b/test/fixtures/keywords.yml index a985fffb9..39884be96 100644 --- a/test/fixtures/keywords.yml +++ b/test/fixtures/keywords.yml @@ -1,24 +1,22 @@ DEFAULTS: &DEFAULTS + yhtio: acme muuttaja: joe laatija: joe luontiaika: <%= Time.now %> muutospvm: <%= Time.now %> vat: - yhtio: acme selite: 24 laji: ALV <<: *DEFAULTS foreign_vat: - yhtio: acme selite: 5.5 selitetark_2: SE laji: ALV <<: *DEFAULTS category_tools: - yhtio: acme selite: 1000 selitetark: Tools kieli: fi @@ -26,7 +24,6 @@ category_tools: <<: *DEFAULTS category_gears: - yhtio: acme selite: 1001 selitetark: Gears kieli: fi @@ -34,7 +31,6 @@ category_gears: <<: *DEFAULTS category_winter: - yhtio: acme selite: 1005 selitetark: Winter kieli: fi @@ -42,7 +38,6 @@ category_winter: <<: *DEFAULTS subcategory_tools: - yhtio: acme selite: 2000 selitetark: Power tools kieli: fi @@ -50,7 +45,6 @@ subcategory_tools: <<: *DEFAULTS subcategory_gears: - yhtio: acme selite: 2001 selitetark: Full-face helmet kieli: fi @@ -58,21 +52,48 @@ subcategory_gears: <<: *DEFAULTS brand_tools: - yhtio: acme selite: Bosch kieli: fi laji: TUOTEMERKKI <<: *DEFAULTS brand_gears: - yhtio: acme selite: Alpinestars kieli: fi laji: TUOTEMERKKI <<: *DEFAULTS +mode_of_transport: + selite: 1 + selitetark: 1 - Merikuljetus (ml. auto- ja junalauttakuljetus) + laji: KM + <<: *DEFAULTS + +nature_of_transaction: + selite: 11 + selitetark: 11 - Suora osto/myynti + laji: KT + <<: *DEFAULTS + +terminal_area: + selite: LASTAUS + selitetark: Lastauslaituri + laji: TERMINAALIALUE + <<: *DEFAULTS + +customs: + selite: FI0 + selitetark: Helsinki Postitulli + laji: TULLI + <<: *DEFAULTS + +sorting_point: + selite: FIVAT + selitetark: FIVAT + laji: TOIMTAPALP + <<: *DEFAULTS + top_locale_se: - yhtio: acme selite: <%= ActiveRecord::FixtureSet.identify(:sixty_days_net) %> selitetark: 60 dagar netto kieli: se @@ -80,15 +101,20 @@ top_locale_se: <<: *DEFAULTS top_locale_en: - yhtio: acme selite: <%= ActiveRecord::FixtureSet.identify(:sixty_days_net) %> selitetark: 60 days net kieli: en laji: MAKSUEHTOKV <<: *DEFAULTS +deliverymethod_locale_en: + selite: <%= ActiveRecord::FixtureSet.identify(:kaukokiito) %> + selitetark: Kaukokiito Logistics + kieli: en + laji: TOIMTAPAKV + <<: *DEFAULTS + mysql_alias_1: - yhtio: acme laji: MYSQLALIAS selite: asiakas.nimi selitetark: Nimiskuukkeli @@ -100,7 +126,6 @@ mysql_alias_1: <<: *DEFAULTS mysql_alias_2: - yhtio: acme laji: MYSQLALIAS selite: asiakas.nimi selitetark: Kumisniikkeli @@ -112,7 +137,6 @@ mysql_alias_2: <<: *DEFAULTS package_locale_en: - yhtio: acme selite: <%= ActiveRecord::FixtureSet.identify(:steel_barrel) %> selitetark: Steel Barrel kieli: en @@ -120,7 +144,6 @@ package_locale_en: <<: *DEFAULTS weekly_alternative_expenditure_one: - yhtio: acme laji: REVENUEREP selite: 38 / 2015 selitetark: Palkat @@ -128,7 +151,6 @@ weekly_alternative_expenditure_one: <<: *DEFAULTS status_active: - yhtio: acme selite: A selitetark: Aktiivi laji: S diff --git a/test/fixtures/locations.yml b/test/fixtures/locations.yml new file mode 100644 index 000000000..6dd1360ad --- /dev/null +++ b/test/fixtures/locations.yml @@ -0,0 +1,13 @@ +DEFAULTS: &DEFAULTS + yhtio: acme + muuttaja: joe + laatija: joe + luontiaika: <%= Time.now %> + muutospvm: <%= Time.now %> + +tokyo: + nimi: Acme Tokyo Headquarters + osoite: Shibuya + maa: JP + delivery_methods: kaukokiito, kiitolinja + <<: *DEFAULTS diff --git a/test/fixtures/manufacture_order/orders.yml b/test/fixtures/manufacture_order/orders.yml index 43942e617..bd306153c 100644 --- a/test/fixtures/manufacture_order/orders.yml +++ b/test/fixtures/manufacture_order/orders.yml @@ -1,4 +1,5 @@ DEFAULTS: &DEFAULTS + yhtio: acme luontiaika: <%= Time.now %> laatija: joe muutospvm: <%= Time.now %> @@ -22,6 +23,6 @@ DEFAULTS: &DEFAULTS popvm: <%= Time.now %> mo_one: - yhtio: acme tila: V + toimitustapa: Kaukokiito <<: *DEFAULTS diff --git a/test/fixtures/offer_order/orders.yml b/test/fixtures/offer_order/orders.yml new file mode 100644 index 000000000..01c232e24 --- /dev/null +++ b/test/fixtures/offer_order/orders.yml @@ -0,0 +1,29 @@ +DEFAULTS: &DEFAULTS + yhtio: acme + luontiaika: <%= Time.now %> + laatija: joe + muutospvm: <%= Time.now %> + muuttaja: joe + tapvm: <%= Time.now %> + lapvm: <%= Time.now %> + kapvm: <%= Time.now %> + erpcm: <%= Time.now %> + olmapvm: <%= Time.now %> + kerayspvm: <%= Time.now %> + toimaika: <%= Time.now %> + maksuaika: <%= Time.now %> + lahetepvm: <%= Time.now %> + laskutettu: <%= Time.now %> + h1time: <%= Time.now %> + h2time: <%= Time.now %> + h3time: <%= Time.now %> + h4time: <%= Time.now %> + h5time: <%= Time.now %> + mapvm: <%= Time.now %> + popvm: <%= Time.now %> + +# Tarjoustilaus +offer_one: + tila: T + toimitustapa: Kaukokiito + <<: *DEFAULTS diff --git a/test/fixtures/packages.yml b/test/fixtures/packages.yml index 49a69f90c..3ee89ea48 100644 --- a/test/fixtures/packages.yml +++ b/test/fixtures/packages.yml @@ -10,3 +10,16 @@ steel_barrel: muutospvm: <%= Time.now %> laatija: joe muuttaja: joe + +oak_barrel: + yhtio: acme + pakkaus: 2A + pakkauskuvaus: Tammitynnyri + leveys: 10 + korkeus: 10 + syvyys: 10 + paino: 10 + luontiaika: <%= Time.now %> + muutospvm: <%= Time.now %> + laatija: joe + muuttaja: joe diff --git a/test/fixtures/parameters.yml b/test/fixtures/parameters.yml index 47a6d262a..9efead190 100644 --- a/test/fixtures/parameters.yml +++ b/test/fixtures/parameters.yml @@ -2,6 +2,7 @@ acme: yhtio: acme css: "* { font-family: sans-serif }" maventa_aikaleima: <%= Time.now %> + kerayserat: K varastopaikkojen_maarittely: M muuttaja: joe laatija: joe diff --git a/test/fixtures/permissions.yml b/test/fixtures/permissions.yml index fb983706e..877dc4cf5 100644 --- a/test/fixtures/permissions.yml +++ b/test/fixtures/permissions.yml @@ -16,6 +16,7 @@ customers data_export data_import + delivery_methods depreciation_difference downloads fiscal_years diff --git a/test/fixtures/preorder/orders.yml b/test/fixtures/preorder/orders.yml new file mode 100644 index 000000000..1d691541a --- /dev/null +++ b/test/fixtures/preorder/orders.yml @@ -0,0 +1,29 @@ +DEFAULTS: &DEFAULTS + yhtio: acme + luontiaika: <%= Time.now %> + laatija: joe + muutospvm: <%= Time.now %> + muuttaja: joe + tapvm: <%= Time.now %> + lapvm: <%= Time.now %> + kapvm: <%= Time.now %> + erpcm: <%= Time.now %> + olmapvm: <%= Time.now %> + kerayspvm: <%= Time.now %> + toimaika: <%= Time.now %> + maksuaika: <%= Time.now %> + lahetepvm: <%= Time.now %> + laskutettu: <%= Time.now %> + h1time: <%= Time.now %> + h2time: <%= Time.now %> + h3time: <%= Time.now %> + h4time: <%= Time.now %> + h5time: <%= Time.now %> + mapvm: <%= Time.now %> + popvm: <%= Time.now %> + +# Ennakkotilaus +pre_one: + tila: E + toimitustapa: Kaukokiito + <<: *DEFAULTS diff --git a/test/fixtures/products.yml b/test/fixtures/products.yml index 74b112713..8b193a690 100644 --- a/test/fixtures/products.yml +++ b/test/fixtures/products.yml @@ -47,3 +47,10 @@ pr1: nimitys: Päiväraha tuotetyyppi: A <<: *DEFAULTS + +non_manageable: + yhtio: acme + tuoteno: non_inventory_manageable_product + nimitys: Jarrusatula + ei_saldoa: o + <<: *DEFAULTS diff --git a/test/fixtures/project_order/orders.yml b/test/fixtures/project_order/orders.yml new file mode 100644 index 000000000..7420fa1e1 --- /dev/null +++ b/test/fixtures/project_order/orders.yml @@ -0,0 +1,29 @@ +DEFAULTS: &DEFAULTS + yhtio: acme + luontiaika: <%= Time.now %> + laatija: joe + muutospvm: <%= Time.now %> + muuttaja: joe + tapvm: <%= Time.now %> + lapvm: <%= Time.now %> + kapvm: <%= Time.now %> + erpcm: <%= Time.now %> + olmapvm: <%= Time.now %> + kerayspvm: <%= Time.now %> + toimaika: <%= Time.now %> + maksuaika: <%= Time.now %> + lahetepvm: <%= Time.now %> + laskutettu: <%= Time.now %> + h1time: <%= Time.now %> + h2time: <%= Time.now %> + h3time: <%= Time.now %> + h4time: <%= Time.now %> + h5time: <%= Time.now %> + mapvm: <%= Time.now %> + popvm: <%= Time.now %> + +# Projektitilaus +project_one: + tila: R + toimitustapa: Kaukokiito + <<: *DEFAULTS diff --git a/test/fixtures/reclamation_order/orders.yml b/test/fixtures/reclamation_order/orders.yml new file mode 100644 index 000000000..9ad7906e6 --- /dev/null +++ b/test/fixtures/reclamation_order/orders.yml @@ -0,0 +1,29 @@ +DEFAULTS: &DEFAULTS + yhtio: acme + luontiaika: <%= Time.now %> + laatija: joe + muutospvm: <%= Time.now %> + muuttaja: joe + tapvm: <%= Time.now %> + lapvm: <%= Time.now %> + kapvm: <%= Time.now %> + erpcm: <%= Time.now %> + olmapvm: <%= Time.now %> + kerayspvm: <%= Time.now %> + toimaika: <%= Time.now %> + maksuaika: <%= Time.now %> + lahetepvm: <%= Time.now %> + laskutettu: <%= Time.now %> + h1time: <%= Time.now %> + h2time: <%= Time.now %> + h3time: <%= Time.now %> + h4time: <%= Time.now %> + h5time: <%= Time.now %> + mapvm: <%= Time.now %> + popvm: <%= Time.now %> + +# Reklamaatiotilaus +reclamation_one: + tila: C + toimitustapa: Kaukokiito + <<: *DEFAULTS diff --git a/test/fixtures/sales_order/drafts.yml b/test/fixtures/sales_order/drafts.yml index e97349b57..5776295a4 100644 --- a/test/fixtures/sales_order/drafts.yml +++ b/test/fixtures/sales_order/drafts.yml @@ -1,4 +1,5 @@ DEFAULTS: &DEFAULTS + yhtio: acme luontiaika: <%= Time.now %> laatija: joe muutospvm: <%= Time.now %> @@ -22,8 +23,8 @@ DEFAULTS: &DEFAULTS popvm: <%= Time.now %> not_finished_order: - yhtio: acme tila: N alatila: '' terms_of_payment: hundred_days_net + toimitustapa: Kaukokiito <<: *DEFAULTS diff --git a/test/fixtures/sales_order/orders.yml b/test/fixtures/sales_order/orders.yml index e94effb5e..e4f74225b 100644 --- a/test/fixtures/sales_order/orders.yml +++ b/test/fixtures/sales_order/orders.yml @@ -1,4 +1,5 @@ DEFAULTS: &DEFAULTS + yhtio: acme luontiaika: <%= Time.now %> laatija: joe muutospvm: <%= Time.now %> @@ -23,20 +24,17 @@ DEFAULTS: &DEFAULTS # Myyntitilaus so_one: - yhtio: acme tila: L <<: *DEFAULTS - not_delivered_order_1: - yhtio: acme tila: L alatila: A terms_of_payment: eighty_days_net + toimitustapa: Kaukokiito <<: *DEFAULTS not_delivered_order_2: - yhtio: acme tila: L alatila: C terms_of_payment: ninety_days_net diff --git a/test/fixtures/stock_transfer/orders.yml b/test/fixtures/stock_transfer/orders.yml index fb4f9271d..00d0a755a 100644 --- a/test/fixtures/stock_transfer/orders.yml +++ b/test/fixtures/stock_transfer/orders.yml @@ -24,4 +24,5 @@ DEFAULTS: &DEFAULTS st_one: yhtio: acme tila: G + toimitustapa: Kaukokiito <<: *DEFAULTS diff --git a/test/fixtures/waybills.yml b/test/fixtures/waybills.yml new file mode 100644 index 000000000..56ba245af --- /dev/null +++ b/test/fixtures/waybills.yml @@ -0,0 +1,7 @@ +DEFAULTS: &DEFAULTS + yhtio: acme + +waybill_one: + toimitustapa: Kaukokiito + tulostettu: 0 + <<: *DEFAULTS diff --git a/test/fixtures/work_order/orders.yml b/test/fixtures/work_order/orders.yml new file mode 100644 index 000000000..c4bc30d34 --- /dev/null +++ b/test/fixtures/work_order/orders.yml @@ -0,0 +1,29 @@ +DEFAULTS: &DEFAULTS + yhtio: acme + luontiaika: <%= Time.now %> + laatija: joe + muutospvm: <%= Time.now %> + muuttaja: joe + tapvm: <%= Time.now %> + lapvm: <%= Time.now %> + kapvm: <%= Time.now %> + erpcm: <%= Time.now %> + olmapvm: <%= Time.now %> + kerayspvm: <%= Time.now %> + toimaika: <%= Time.now %> + maksuaika: <%= Time.now %> + lahetepvm: <%= Time.now %> + laskutettu: <%= Time.now %> + h1time: <%= Time.now %> + h2time: <%= Time.now %> + h3time: <%= Time.now %> + h4time: <%= Time.now %> + h5time: <%= Time.now %> + mapvm: <%= Time.now %> + popvm: <%= Time.now %> + +# Työmääräystilaus +work_one: + tila: A + toimitustapa: Kaukokiito + <<: *DEFAULTS diff --git a/test/helpers/carrier_helper_test.rb b/test/helpers/carrier_helper_test.rb index 60e1eb9db..cbfb2c97f 100644 --- a/test/helpers/carrier_helper_test.rb +++ b/test/helpers/carrier_helper_test.rb @@ -1,6 +1,8 @@ require 'test_helper' class CarrierHelperTest < ActionView::TestCase + fixtures %w(carriers) + test "returns translated neutraali options valid for collection" do assert neutraali_options.is_a? Array @@ -8,4 +10,9 @@ class CarrierHelperTest < ActionView::TestCase assert_equal text, neutraali_options.first.first assert_equal 'neutral', neutraali_options.first.second end + + test "should get carrier options" do + assert_kind_of Array, carrier_options + assert_equal 'HIT', carrier_options.first.second + end end diff --git a/test/helpers/delivery_method_helper_test.rb b/test/helpers/delivery_method_helper_test.rb new file mode 100644 index 000000000..0a2bd5d7a --- /dev/null +++ b/test/helpers/delivery_method_helper_test.rb @@ -0,0 +1,148 @@ +require 'test_helper' + +class DeliveryMethodHelperTest < ActionView::TestCase + fixtures %w(delivery_methods) + + test "returns translated pickup options valid for collection" do + assert pickup_options.is_a? Array + + text = I18n.t 'administration.delivery_methods.pickup_options.shipment' + assert_equal text, pickup_options.first.first + assert_equal 'shipment', pickup_options.first.second + end + + test "returns translated saturday delivery options valid for collection" do + assert saturday_delivery_options.is_a? Array + + text = I18n.t 'administration.delivery_methods.saturday_delivery_options.saturday_delivery' + assert_equal text, saturday_delivery_options.second.first + assert_equal 'saturday_delivery', saturday_delivery_options.second.second + end + + test "returns translated transport unit options valid for collection" do + assert transport_unit_options.is_a? Array + + text = I18n.t 'administration.delivery_methods.transport_unit_options.transport_unit' + assert_equal text, transport_unit_options.second.first + assert_equal 'transport_unit', transport_unit_options.second.second + end + + test "returns translated print method options valid for collection" do + assert print_method_options.is_a? Array + + text = I18n.t 'administration.delivery_methods.print_method_options.batch' + assert_equal text, print_method_options.first.first + assert_equal 'batch', print_method_options.first.second + end + + test "returns translated freight contract options valid for collection" do + assert freight_contract_options.is_a? Array + + text = I18n.t 'administration.delivery_methods.freight_contract_options.receiver_freight_contract' + assert_equal text, freight_contract_options.first.first + assert_equal 'receiver_freight_contract', freight_contract_options.first.second + end + + test "returns translated logy waybill number options valid for collection" do + assert logy_waybill_number_options.is_a? Array + + text = I18n.t 'administration.delivery_methods.logy_waybill_number_options.use_logy_waybill_numbers' + assert_equal text, logy_waybill_number_options.second.first + assert_equal 'use_logy_waybill_numbers', logy_waybill_number_options.second.second + end + + test "returns translated extranet options valid for collection" do + assert extranet_options.is_a? Array + + text = I18n.t 'administration.delivery_methods.extranet_options.only_in_sales' + assert_equal text, extranet_options.first.first + assert_equal 'only_in_sales', extranet_options.first.second + end + + test "returns translated container options valid for collection" do + assert container_options.is_a? Array + + text = I18n.t 'administration.delivery_methods.container_options.not_including_container' + assert_equal text, container_options.first.first + assert_equal 'not_including_container', container_options.first.second + end + + test "returns translated cash on delivery prohibition options valid for collection" do + assert cash_on_delivery_prohibition_options.is_a? Array + + text = I18n.t 'administration.delivery_methods.cash_on_delivery_prohibition_options.cash_on_delivery_permitted' + assert_equal text, cash_on_delivery_prohibition_options.first.first + assert_equal 'cash_on_delivery_permitted', cash_on_delivery_prohibition_options.first.second + end + + test "returns translated special packaging prohibition options valid for collection" do + assert special_packaging_prohibition_options.is_a? Array + + text = I18n.t 'administration.delivery_methods.special_packaging_prohibition_options.special_packaging_permitted' + assert_equal text, special_packaging_prohibition_options.first.first + assert_equal 'special_packaging_permitted', special_packaging_prohibition_options.first.second + end + + test "returns translated packing line prohibition options valid for collection" do + assert packing_line_prohibition_options.is_a? Array + + text = I18n.t 'administration.delivery_methods.packing_line_prohibition_options.reserve_packing_line' + assert_equal text, packing_line_prohibition_options.first.first + assert_equal 'reserve_packing_line', packing_line_prohibition_options.first.second + end + + test "returns translated waybill specification options valid for collection" do + assert waybill_specification_options.is_a? Array + + text = I18n.t 'administration.delivery_methods.waybill_specification_options.print_waybill_specification' + assert_equal text, waybill_specification_options.second.first + assert_equal 'print_waybill_specification', waybill_specification_options.second.second + end + + test "returns translated new packaging information options for collection" do + assert new_packaging_information_options.is_a? Array + + text = I18n.t 'administration.delivery_methods.new_packaging_information_options.package_info_entry_denied' + assert_equal text, new_packaging_information_options.first.first + assert_equal 'package_info_entry_denied', new_packaging_information_options.first.second + end + + test "returns translated transportation insurance type options for collection" do + assert transportation_insurance_type_options.is_a? Array + + text = I18n.t 'administration.delivery_methods.transportation_insurance_type_options.currency_based_insurance' + assert_equal text, transportation_insurance_type_options.third.first + assert_equal 'currency_based_insurance', transportation_insurance_type_options.third.second + end + + test "should get label options" do + Current.company.parameter.kerayserat = '' + + assert_kind_of Array, label_options + assert_equal 'Tiivistetty', label_options.third.first + refute label_options.any? { |_,key| key == 'simple_label' } + + Current.company.parameter.kerayserat = 'K' + + assert_kind_of Array, label_options + assert label_options.any? { |_,key| key == 'simple_label' } + end + + test "should get adr prohibition options" do + assert_kind_of Array, adr_prohibition_options + assert_operator 2, '<', adr_prohibition_options.count + assert_equal 'Kaukokiito', adr_prohibition_options.third.second + + text = I18n.t 'administration.delivery_methods.adr_prohibition_options.permit_adr' + assert_equal text, adr_prohibition_options.first.first + end + + test "should get alternative adr delivery method options" do + assert_kind_of Array, alternative_adr_delivery_method_options + assert_operator 2, '<', alternative_adr_delivery_method_options.count + assert_equal 'Kaukokiito', alternative_adr_delivery_method_options.second.second + + text = I18n.t 'administration.delivery_methods.alternative_adr_delivery_method_options.adr_products_transfer_prohibition' + assert_equal text, alternative_adr_delivery_method_options.first.first + end +end diff --git a/test/helpers/departure_helper_test.rb b/test/helpers/departure_helper_test.rb new file mode 100644 index 000000000..065fd45eb --- /dev/null +++ b/test/helpers/departure_helper_test.rb @@ -0,0 +1,44 @@ +require 'test_helper' + +class Administration::DepartureHelperTest < ActionView::TestCase + fixtures %w( + keyword/customer_groups + warehouses + ) + + test "returns translated departure options valid for collection" do + assert day_of_the_week_options.is_a? Array + + text = I18n.t 'administration.delivery_methods.departures.day_of_the_week_options.monday', :fi + assert_equal text, day_of_the_week_options.first.first + assert_equal 1, day_of_the_week_options.first.second + end + + test "returns terminal area options valid for collection" do + assert terminal_area_options.is_a? Array + + assert_equal 'Lastauslaituri', terminal_area_options.first.first + assert_equal 'LASTAUS', terminal_area_options.first.second + end + + test "returns customer group options valid for collection" do + assert customer_group_options.is_a? Array + + assert_equal 'Laiska', customer_group_options.first.first + assert_equal '200', customer_group_options.first.second + end + + test "returns warehouse options valid for collection" do + assert warehouse_options.is_a? Array + + assert_equal 'Veikkolan varasto', warehouse_options.first.first + end + + test "returns status options valid for collection" do + assert status_options.is_a? Array + + text = I18n.t 'administration.delivery_methods.departures.status_options.not_in_use', :fi + assert_equal text, status_options.second.first + assert_equal :not_in_use, status_options.second.second + end +end diff --git a/test/helpers/keyword_helper_test.rb b/test/helpers/keyword_helper_test.rb new file mode 100644 index 000000000..3a3483f1f --- /dev/null +++ b/test/helpers/keyword_helper_test.rb @@ -0,0 +1,23 @@ +require 'test_helper' + +class KeywordHelperTest < ActionView::TestCase + test "should get mode of transport options" do + assert_kind_of Array, mode_of_transport_options + assert_equal '1 - Merikuljetus (ml. auto- ja junalauttakuljetus)', mode_of_transport_options.first.first + end + + test "should get nature of transaction options" do + assert_kind_of Array, nature_of_transaction_options + assert_equal '11 - Suora osto/myynti', nature_of_transaction_options.first.first + end + + test "should get customs options" do + assert_kind_of Array, customs_options + assert_equal 'FI0', customs_options.first.second + end + + test "should get sorting point options" do + assert_kind_of Array, sorting_point_options + assert_equal 'FIVAT', sorting_point_options.first.second + end +end diff --git a/test/integration/browser_detection_test.rb b/test/integration/browser_detection_test.rb index 229dc3932..f9634137e 100644 --- a/test/integration/browser_detection_test.rb +++ b/test/integration/browser_detection_test.rb @@ -4,18 +4,18 @@ class BrowserDetectionTest < ActionDispatch::IntegrationTest include LoginHelper test "browsers are detected correctly" do - bob = users(:bob) + bob = users :bob + bob.update! kayttoliittyma: "U" + login bob - bob.update(kayttoliittyma: "U") - login users(:bob) - - { "Firefox" => "pupesoft_mozilla.css", - "Trident Windows" => "pupesoft_ms_ie.css", - "Chrome Windows" => "pupesoft_ms_chrome.css" }.each do |browser, css_file| + # use regex because css file contains random assets pipeline part: filename-[randompart].css + { "Firefox" => /pupesoft_mozilla\-.+\.css/, + "Trident Windows" => /pupesoft_ms_ie\-.+\.css/, + "Chrome Windows" => /pupesoft_ms_chrome\-.+\.css/ }.each do |browser, css_file| get "/accounts", {}, { "User-Agent" => browser } - assert_includes(response.body, css_file) + assert_match css_file, response.body, "#{browser} does not include #{css_file}" end end end diff --git a/test/models/company_test.rb b/test/models/company_test.rb index 92ead2020..20614d193 100644 --- a/test/models/company_test.rb +++ b/test/models/company_test.rb @@ -23,10 +23,12 @@ class CompanyTest < ActiveSupport::TestCase assert @acme.commodities.count > 0 assert @acme.cost_centers.count > 0 assert @acme.currencies.count > 0 + assert @acme.customer_transports.count > 0 assert @acme.customers.count > 0 assert @acme.factorings.count > 0 assert @acme.fiscal_years.count > 0 assert @acme.keywords.count > 0 + assert @acme.locations.count > 0 assert @acme.manufacture_orders.count > 0 assert @acme.package_codes.count > 0 assert @acme.packages.count > 0 @@ -43,8 +45,7 @@ class CompanyTest < ActiveSupport::TestCase assert @acme.suppliers.count > 0 assert @acme.targets.count > 0 assert @acme.terms_of_payments.count > 0 - assert_equal 1, @acme.transports.count - assert_equal 2, @acme.customer_transports.count + assert @acme.transports.count > 0 assert @acme.users.count > 0 assert @acme.warehouses.count > 0 end diff --git a/test/models/customer_test.rb b/test/models/customer_test.rb index 237ed5534..2dfc84bbb 100644 --- a/test/models/customer_test.rb +++ b/test/models/customer_test.rb @@ -5,6 +5,7 @@ class CustomerTest < ActiveSupport::TestCase customer_prices customers keyword/customer_categories + keyword/customer_groups keyword/customer_subcategories products transports @@ -17,6 +18,7 @@ class CustomerTest < ActiveSupport::TestCase @ski = products :ski @customer_category_1 = keyword_customer_categories :customer_category_1 @customer_subcategory_1 = keyword_customer_subcategories :customer_subcategory_1 + @reipas = keyword_customer_groups :reipas end test 'fixtures are valid' do @@ -27,6 +29,7 @@ class CustomerTest < ActiveSupport::TestCase assert_equal 2, @one.transports.count assert_equal @customer_category_1, @one.category assert_equal @customer_subcategory_1, @one.subcategory + assert_equal @reipas, @one.group assert @one.prices.count > 0 assert @one.products.count > 0 end diff --git a/test/models/delivery_method_test.rb b/test/models/delivery_method_test.rb new file mode 100644 index 000000000..776644b0d --- /dev/null +++ b/test/models/delivery_method_test.rb @@ -0,0 +1,392 @@ +require 'test_helper' + +class DeliveryMethodTest < ActiveSupport::TestCase + fixtures %w( + customer_keywords + customers + delivery_method/departures + delivery_methods + freight_contracts + freights + heads + locations + manufacture_order/orders + offer_order/orders + preorder/orders + products + project_order/orders + reclamation_order/orders + sales_order/drafts + sales_order/orders + stock_transfer/orders + waybills + work_order/orders + ) + + def setup + @kaukokiito = delivery_methods :kaukokiito + @kiitolinja = delivery_methods :kiitolinja + @departure = delivery_method_departures :departure_one + + # setup fixtures for all delivery method relations + @cust = customers :stubborn_customer + @cust_key = customer_keywords :keyword_1 + @order = sales_order_orders :not_delivered_order_1 + @draft = sales_order_drafts :not_finished_order + @stock = stock_transfer_orders :st_one + @preorder = preorder_orders :pre_one + @offer = offer_order_orders :offer_one + @manufacture = manufacture_order_orders :mo_one + @work = work_order_orders :work_one + @project = project_order_orders :project_one + @reclamation = reclamation_order_orders :reclamation_one + @freight = freights :kaukokiito_freight + @contract = freight_contracts :kaukokiito_freight_contract + @waybill = waybills :waybill_one + end + + test 'relations' do + assert @kaukokiito.customer_keywords.count > 0 + assert @kaukokiito.customers.count > 0 + assert @kaukokiito.customs.count > 0 + assert @kaukokiito.departures.count > 0 + assert @kaukokiito.freight_contracts.count > 0 + assert @kaukokiito.freights.count > 0 + assert @kaukokiito.locations.count > 0 + assert @kaukokiito.manufacture_orders.count > 0 + assert @kaukokiito.mode_of_transports.count > 0 + assert @kaukokiito.nature_of_transactions.count > 0 + assert @kaukokiito.offer_orders.count > 0 + assert @kaukokiito.preorders.count > 0 + assert @kaukokiito.project_orders.count > 0 + assert @kaukokiito.reclamation_orders.count > 0 + assert @kaukokiito.sales_order_drafts.count > 0 + assert @kaukokiito.sales_orders.not_delivered.count > 0 + assert @kaukokiito.sorting_point.count > 0 + assert @kaukokiito.stock_transfers.not_delivered.count > 0 + assert @kaukokiito.translations.count > 0 + assert @kaukokiito.waybills.count > 0 + assert @kaukokiito.work_orders.count > 0 + end + + test "fixtures should be valid" do + assert @kaukokiito.valid?, @kaukokiito.errors.messages + assert @departure.valid?, @departure.errors.full_messages + end + + test "selite should be unique" do + error = I18n.t 'errors.messages.taken' + @kaukokiito.selite = @kiitolinja.selite + + refute @kaukokiito.valid? + assert_equal error, @kaukokiito.errors[:selite].first + end + + test 'valid vak_kielto values' do + @kaukokiito.vak_kielto = '' + assert @kaukokiito.valid? + + @kaukokiito.vak_kielto = 'K' + assert @kaukokiito.valid? + + @kaukokiito.vak_kielto = 'not valid' + refute @kaukokiito.valid? + + # should allow the name of any other delivery method that accepts adr + dm = delivery_methods :kiitolinja + dm.update! vak_kielto: '' + + @kaukokiito.vak_kielto = dm.selite + assert @kaukokiito.valid? + + # should NOT allow the name of delivery method if it does not accept adr + dm.update! vak_kielto: 'K' + + refute @kaukokiito.valid? + end + + test 'should not allow changing vak_kielto if used as alternative adr method' do + # set kaukokiito to allow adr shipments + @kaukokiito.update! vak_kielto: '' + + # set kiitolinja to have kaukokiito as alternative adr shipping method + @kiitolinja.update! vaihtoehtoinen_vak_toimitustapa: @kaukokiito.selite + + # try to change kaukokiito to deny adr shipments + @kaukokiito.vak_kielto = 'K' + + # should not be allowed + error = I18n.t 'errors.delivery_method.in_use_adr' + refute @kaukokiito.valid? + assert_equal error, @kaukokiito.errors.messages[:vak_kielto].first + end + + test 'should validate freight sku' do + @kaukokiito.rahti_tuotenumero = 'non_inventory_manageable_product' + assert @kaukokiito.valid? + + error = I18n.t 'errors.delivery_method.product_not_in_inventory_management' + @kaukokiito.rahti_tuotenumero = 'hammer123' + + refute @kaukokiito.valid? + assert_equal error, @kaukokiito.errors.messages[:rahti_tuotenumero].first + end + + test 'should validate cargo insurance sku' do + @kaukokiito.kuljetusvakuutus_tuotenumero = 'non_inventory_manageable_product' + assert @kaukokiito.valid? + + error = I18n.t 'errors.delivery_method.product_not_in_inventory_management' + @kaukokiito.kuljetusvakuutus_tuotenumero = 'hammer123' + + refute @kaukokiito.valid? + assert_equal error, @kaukokiito.errors.messages[:kuljetusvakuutus_tuotenumero].first + end + + test 'should validate alternative adr prohibition' do + @kaukokiito.vaihtoehtoinen_vak_toimitustapa = '' + assert @kaukokiito.valid? + + error = I18n.t 'errors.messages.inclusion' + @kaukokiito.vaihtoehtoinen_vak_toimitustapa = 'neko' + refute @kaukokiito.valid? + assert_equal error, @kaukokiito.errors[:vaihtoehtoinen_vak_toimitustapa].first + end + + test 'unifaun info is present' do + error = I18n.t 'errors.delivery_method.unifaun_info_missing' + + # If we have collective_batch and package_info_entry_denied we cannot use unifaun online + @kaukokiito.tulostustapa = :collective_batch + @kaukokiito.uudet_pakkaustiedot = :package_info_entry_denied + @kaukokiito.rahtikirja = :unifaun_online + + refute @kaukokiito.valid? + assert_equal error, @kaukokiito.errors.messages[:base].first + + # If we have collective_batch and package_info_entry_denied we cannot use unifaun print server + @kaukokiito.rahtikirja = :unifaun_print_server + refute @kaukokiito.valid? + assert_equal error, @kaukokiito.errors.messages[:base].first + + # Not using unifaun is ok + @kaukokiito.rahtikirja = :generic_a4 + assert @kaukokiito.valid? + + # Unifaun with package_info_entry_allowed is ok + @kaukokiito.rahtikirja = :unifaun_print_server + @kaukokiito.uudet_pakkaustiedot = :package_info_entry_allowed + assert @kaukokiito.valid? + + # Unifaun with batch is ok + @kaukokiito.uudet_pakkaustiedot = :package_info_entry_denied + @kaukokiito.tulostustapa = :batch + assert @kaukokiito.valid? + end + + test 'do not delete delivery method if it is in use' do + # set kiitolinja delivery method for all available relations + dm_name = @kiitolinja.selite + @kaukokiito.update! vak_kielto: '', vaihtoehtoinen_vak_toimitustapa: '' + @cust.update! toimitustapa: dm_name + @cust_key.update! avainsana: dm_name + @order.update! toimitustapa: dm_name + @draft.update! toimitustapa: dm_name + @stock.update! toimitustapa: dm_name + @preorder.update! toimitustapa: dm_name + @offer.update! toimitustapa: dm_name + @manufacture.update! toimitustapa: dm_name + @work.update! toimitustapa: dm_name + @project.update! toimitustapa: dm_name + @reclamation.update! toimitustapa: dm_name + @freight.update! toimitustapa: dm_name + @contract.update! toimitustapa: dm_name + @waybill.update! toimitustapa: dm_name + + kaukokiito = @kaukokiito.dup + + # We should be able to destroy kaukokiito, it's not used anywhere + assert_difference('DeliveryMethod.count', -1) do + @kaukokiito.destroy + end + + # Let's get kaukokiito back + kaukokiito.save! + dm_name = kaukokiito.selite + + # Set kaukokiito as alternative adr for kiitolinja + @kiitolinja.update! vak_kielto: dm_name + error = I18n.t 'errors.delivery_method.in_use_delivery_method', count: 1 + + refute kaukokiito.destroy + assert_equal error, kaukokiito.errors.messages[:base].last + + # Set kaukokiito as alternative adr for kiitolinja + @kiitolinja.update! vak_kielto: '', vaihtoehtoinen_vak_toimitustapa: dm_name + + refute kaukokiito.destroy + assert_equal error, kaukokiito.errors.messages[:base].last + + # Set kaukokiito as default for customer + @kiitolinja.update! vak_kielto: '', vaihtoehtoinen_vak_toimitustapa: '' + @cust.update! toimitustapa: dm_name + error = I18n.t 'errors.delivery_method.in_use_customers', count: 1 + + refute kaukokiito.destroy + assert_equal error, kaukokiito.errors.messages[:base].last + + # Set kaukokiito as default for customer keyword + @cust.update! toimitustapa: '' + @cust_key.update! avainsana: dm_name + error = I18n.t 'errors.delivery_method.in_use_customer_keywords', count: 1 + + refute kaukokiito.destroy + assert_equal error, kaukokiito.errors.messages[:base].last + + # Set kaukokiito to an order + @cust_key.update! avainsana: '' + @order.update! toimitustapa: dm_name + error = I18n.t 'errors.delivery_method.in_use_sales_orders', count: 1 + + refute kaukokiito.destroy + assert_equal error, kaukokiito.errors.messages[:base].last + + # Set kaukokiito to an order draft + @order.update! toimitustapa: '' + @draft.update! toimitustapa: dm_name + error = I18n.t 'errors.delivery_method.in_use_sales_order_drafts', count: 1 + + refute kaukokiito.destroy + assert_equal error, kaukokiito.errors.messages[:base].last + + # Set kaukokiito to an stock transfer + @draft.update! toimitustapa: '' + @stock.update! toimitustapa: dm_name + error = I18n.t 'errors.delivery_method.in_use_stock_transfers', count: 1 + + refute kaukokiito.destroy + assert_equal error, kaukokiito.errors.messages[:base].last + + # Set kaukokiito to an preorder + @stock.update! toimitustapa: '' + @preorder.update! toimitustapa: dm_name + error = I18n.t 'errors.delivery_method.in_use_preorders', count: 1 + + refute kaukokiito.destroy + assert_equal error, kaukokiito.errors.messages[:base].last + + # Set kaukokiito to an offer + @preorder.update! toimitustapa: '' + @offer.update! toimitustapa: dm_name + error = I18n.t 'errors.delivery_method.in_use_offer_orders', count: 1 + + refute kaukokiito.destroy + assert_equal error, kaukokiito.errors.messages[:base].last + + # Set kaukokiito to an manufacture order + @offer.update! toimitustapa: '' + @manufacture.update! toimitustapa: dm_name + error = I18n.t 'errors.delivery_method.in_use_manufacture_orders', count: 1 + + refute kaukokiito.destroy + assert_equal error, kaukokiito.errors.messages[:base].last + + # Set kaukokiito to an workorder + @manufacture.update! toimitustapa: '' + @work.update! toimitustapa: dm_name + error = I18n.t 'errors.delivery_method.in_use_work_orders', count: 1 + + refute kaukokiito.destroy + assert_equal error, kaukokiito.errors.messages[:base].last + + # Set kaukokiito to an project + @work.update! toimitustapa: '' + @project.update! toimitustapa: dm_name + error = I18n.t 'errors.delivery_method.in_use_project_orders', count: 1 + + refute kaukokiito.destroy + assert_equal error, kaukokiito.errors.messages[:base].last + + # Set kaukokiito to an reclamation + @project.update! toimitustapa: '' + @reclamation.update! toimitustapa: dm_name + error = I18n.t 'errors.delivery_method.in_use_reclamation_orders', count: 1 + + refute kaukokiito.destroy + assert_equal error, kaukokiito.errors.messages[:base].last + + # Set kaukokiito to an freight + @reclamation.update! toimitustapa: '' + @freight.update! toimitustapa: dm_name + error = I18n.t 'errors.delivery_method.in_use_freights', count: 1 + + refute kaukokiito.destroy + assert_equal error, kaukokiito.errors.messages[:base].last + + # Set kaukokiito to an freight contract + @freight.update! toimitustapa: '' + @contract.update! toimitustapa: dm_name + error = I18n.t 'errors.delivery_method.in_use_freight_contracts', count: 1 + + refute kaukokiito.destroy + assert_equal error, kaukokiito.errors.messages[:base].last + + # Set kaukokiito to an waybill + @contract.update! toimitustapa: '' + @waybill.update! toimitustapa: dm_name + error = I18n.t 'errors.delivery_method.in_use_waybills', count: 1 + + refute kaukokiito.destroy + assert_equal error, kaukokiito.errors.messages[:base].last + end + + test 'should update relations when updating selite' do + # set delivery method to all available relations + @kiitolinja.update! vak_kielto: @kaukokiito.selite, vaihtoehtoinen_vak_toimitustapa: @kaukokiito.selite + @cust.update! toimitustapa: @kaukokiito.selite + @cust_key.update! avainsana: @kaukokiito.selite + @order.update! toimitustapa: @kaukokiito.selite + @draft.update! toimitustapa: @kaukokiito.selite + @stock.update! toimitustapa: @kaukokiito.selite + @preorder.update! toimitustapa: @kaukokiito.selite + @offer.update! toimitustapa: @kaukokiito.selite + @manufacture.update! toimitustapa: @kaukokiito.selite + @work.update! toimitustapa: @kaukokiito.selite + @project.update! toimitustapa: @kaukokiito.selite + @reclamation.update! toimitustapa: @kaukokiito.selite + @freight.update! toimitustapa: @kaukokiito.selite + @contract.update! toimitustapa: @kaukokiito.selite + @waybill.update! toimitustapa: @kaukokiito.selite + + # change the delivery method name + new_name = 'Kaukokiito kakkoinen' + @kaukokiito.update! selite: new_name + + # we should have a flash notice + assert_not_empty @kaukokiito.flash_notice + + # should change everywhere + assert_equal new_name, @kiitolinja.reload.vak_kielto + assert_equal new_name, @kiitolinja.vaihtoehtoinen_vak_toimitustapa + assert_equal new_name, @cust.reload.toimitustapa + assert_equal new_name, @cust_key.reload.avainsana + assert_equal new_name, @order.reload.toimitustapa + assert_equal new_name, @draft.reload.toimitustapa + assert_equal new_name, @stock.reload.toimitustapa + assert_equal new_name, @preorder.reload.toimitustapa + assert_equal new_name, @offer.reload.toimitustapa + assert_equal new_name, @manufacture.reload.toimitustapa + assert_equal new_name, @work.reload.toimitustapa + assert_equal new_name, @project.reload.toimitustapa + assert_equal new_name, @reclamation.reload.toimitustapa + assert_equal new_name, @freight.reload.toimitustapa + assert_equal new_name, @contract.reload.toimitustapa + assert_equal new_name, @waybill.reload.toimitustapa + + # change something else than the delivery method name + @kaukokiito.update! virallinen_selite: new_name + + # we should not have a flash notice + assert_empty @kaukokiito.flash_notice + end +end diff --git a/test/models/keyword/customer_category_test.rb b/test/models/keyword/customer_category_test.rb index 241b76d94..99c8a02f4 100644 --- a/test/models/keyword/customer_category_test.rb +++ b/test/models/keyword/customer_category_test.rb @@ -13,6 +13,7 @@ class Keyword::CustomerCategoryTest < ActiveSupport::TestCase test 'fixtures are valid' do assert @one.valid?, @one.errors.full_messages + assert @two.valid?, @two.errors.full_messages end test 'associations work' do diff --git a/test/models/keyword/customer_group_test.rb b/test/models/keyword/customer_group_test.rb new file mode 100644 index 000000000..df3e6d2c2 --- /dev/null +++ b/test/models/keyword/customer_group_test.rb @@ -0,0 +1,23 @@ +require 'test_helper' + +class Keyword::CustomerGroupTest < ActiveSupport::TestCase + fixtures %w( + customers + keyword/customer_groups + ) + + setup do + @reipas = keyword_customer_groups :reipas + @laiska = keyword_customer_groups :laiska + end + + test 'fixtures are valid' do + assert @reipas.valid?, @reipas.errors.full_messages + assert @laiska.valid?, @laiska.errors.full_messages + end + + test 'associations work' do + assert_equal 1, @reipas.customers.count + assert_equal 0, @laiska.customers.count + end +end diff --git a/test/models/keyword_test.rb b/test/models/keyword_test.rb index 6d402fd5b..9515fd49b 100644 --- a/test/models/keyword_test.rb +++ b/test/models/keyword_test.rb @@ -4,42 +4,61 @@ class KeywordTest < ActiveSupport::TestCase fixtures %w(keywords) setup do - @vat = keywords(:vat) - @foreign_vat = keywords(:foreign_vat) - @top_translation = keywords(:top_locale_se) + @vat = keywords :vat + @foreign_vat = keywords :foreign_vat + @terminal_area = keywords :terminal_area + @top_translation = keywords :top_locale_se + @dm_translation = keywords :deliverymethod_locale_en end test "fixtures are valid" do assert @vat.valid?, @vat.errors.full_messages assert @foreign_vat.valid?, @foreign_vat.errors.full_messages + assert @terminal_area.valid?, @terminal_area.errors.full_messages assert @top_translation.valid?, @top_translation.errors.full_messages + assert @dm_translation.valid?, @dm_translation.errors.full_messages assert keywords(:top_locale_en).valid? + assert keywords(:deliverymethod_locale_en).valid? end - test 'top translation relation' do + test 'translation relation' do assert TermsOfPayment, @top_translation.terms_of_payment.class + assert DeliveryMethod, @dm_translation.delivery_method.class end - test 'top translation scope' do + test 'translation scope' do # translations :kieli is scoped [:yhtio, :selite] new_translation = @top_translation.dup + dm_new_translation = @dm_translation.dup refute new_translation.valid? + refute dm_new_translation.valid? error_message = [:kieli, I18n.t('errors.messages.taken')] assert_equal error_message, new_translation.errors.first + assert_equal error_message, dm_new_translation.errors.first # changing yhtio should make it valid new_translation.yhtio = 'esto' + dm_new_translation.yhtio = 'esto' assert new_translation.valid? + assert dm_new_translation.valid? # changing selite should make it valid new_translation = @top_translation.dup new_translation.selite = 324 assert new_translation.valid? + dm_new_translation = @dm_translation.dup + dm_new_translation.selite = 324 + assert dm_new_translation.valid? + # or changing kieli should make it valid new_translation = @top_translation.dup new_translation.kieli = 'no' assert new_translation.valid? + + dm_new_translation = @dm_translation.dup + dm_new_translation.kieli = 'no' + assert dm_new_translation.valid? end end diff --git a/test/models/location_test.rb b/test/models/location_test.rb new file mode 100644 index 000000000..244086cd4 --- /dev/null +++ b/test/models/location_test.rb @@ -0,0 +1,21 @@ +require 'test_helper' + +class LocationTest < ActiveSupport::TestCase + fixtures %w( + delivery_methods + locations + ) + + setup do + @tokyo = locations :tokyo + end + + test 'fixtures are valid' do + assert @tokyo.valid? + end + + test 'relations' do + assert_equal 'Acme Corporation', @tokyo.company.nimi + assert @tokyo.delivery_methods.count > 0 + end +end diff --git a/test/models/package_test.rb b/test/models/package_test.rb index e2cae39e0..84f1d5679 100644 --- a/test/models/package_test.rb +++ b/test/models/package_test.rb @@ -60,4 +60,9 @@ class PackageTest < ActiveSupport::TestCase assert_equal 100, Package.new.kayttoprosentti end + + test "translated description" do + assert_equal "Terästynnyri", @package.translated_description(:fi) + assert_equal "Steel Barrel", @package.translated_description(:en) + end end diff --git a/test/models/supplier_test.rb b/test/models/supplier_test.rb index 74450d4ed..c94b389e5 100644 --- a/test/models/supplier_test.rb +++ b/test/models/supplier_test.rb @@ -1,7 +1,11 @@ require 'test_helper' class SupplierTest < ActiveSupport::TestCase - fixtures %w(suppliers products product/suppliers) + fixtures %w( + product/suppliers + products + suppliers + ) setup do @supplier = suppliers :domestic_supplier