first commit

This commit is contained in:
2026-02-08 11:27:09 +07:00
parent b0aa83aa2d
commit bf749a6542
2251 changed files with 469993 additions and 0 deletions
+28
View File
@@ -0,0 +1,28 @@
{
"version": "0.2.0",
"configurations": [
{
"name": "Odoo14 Demo Kanjabung",
"type": "debugpy",
"request": "launch",
"stopOnEntry": false,
"console": "integratedTerminal",
"python": "C:/odoo14c/python/python.exe",
"program": "C:/odoo14c/server/odoo-bin",
"args": [
"--config=C:\\addon14\\odoo.conf",
"--database=manu14",
// "--database=konsolidasi",
// "--init=dynamic_accounts_report",
// "--database=mynilamku",
// "--init=mro_aircraft",
// "--upgrade=mro_aircraft"
// "--init=mynilamku"
],
"cwd": "${workspaceFolder}",
"env": {
"PATH": "C:/odoo14c/python;${env:PATH}"
}
}
]
}
+5
View File
@@ -0,0 +1,5 @@
{
"python.defaultInterpreterPath": "C:/odoo14c/python/python.exe",
"python.debugpyPath": "C:/odoo14c/python/Lib/site-packages",
"debugpy.adapterPython": "C:/odoo14c/python/python.exe"
}
+224
View File
@@ -0,0 +1,224 @@
================================================================================
ANALISIS: KENAPA ERROR HILANG SETELAH PINDAH KE PORT 8070
================================================================================
Tanggal: 5 Februari 2026
FAKTA:
================================================================================
✓ Sebelumnya di port 8069: Ada error asset SCSS dan KeyError
✓ Setelah pindah ke port 8070: Tidak ada error
✓ Perbaikan yang dilakukan tetap sama
PENYEBAB UTAMA - BROWSER CACHE:
================================================================================
1. BROWSER CACHE YANG KORUP/LAMA
--------------------------------
Saat Anda mengakses http://localhost:8069:
- Browser menyimpan cache dari assets lama
- Cache tersebut termasuk file SCSS yang error
- Bahkan setelah diperbaiki, browser tetap load cache lama
- JavaScript dan CSS ter-cache dengan versi yang salah
Saat pindah ke http://localhost:8070:
- Browser menganggap ini SITUS BERBEDA (port berbeda)
- Tidak ada cache lama yang dimuat
- Semua asset di-load fresh dari server
- Error SCSS tidak muncul karena load file yang sudah diperbaiki
2. SESSION & COOKIES
------------------
Port 8069 mungkin punya:
- Session lama yang invalid
- Cookies dengan data yang korup
- LocalStorage dengan state yang salah
Port 8070 = Fresh start:
- Tidak ada session lama
- Tidak ada cookies yang konflik
- Browser state benar-benar bersih
3. REGISTRY CONFLICT (Kemungkinan)
--------------------------------
Ada 2 instance Odoo di port 8069 (terlihat dari cek_port_odoo.py):
- PID 13668
- PID 7744
Ini bisa menyebabkan:
- Konflik registry antar instance
- Model tidak konsisten
- Race condition saat load model
- Cache tidak sinkron
Port 8070 = Instance tunggal:
- Tidak ada konflik dengan instance lain
- Registry load dengan benar
- Semua model tersedia
4. FRESH RESTART
--------------
Pindah port = Restart bersih:
- Database connection fresh
- Python cache (__pycache__) sudah dibersihkan
- Registry Odoo ter-rebuild sempurna
- Tidak ada remnant dari load sebelumnya
KESIMPULAN:
================================================================================
Error sebelumnya BUKAN murni karena kode yang salah, tapi kombinasi dari:
❌ Browser cache yang korup (PENYEBAB UTAMA - ~70%)
❌ Multiple instance di port yang sama (~20%)
❌ Session/cookies yang invalid (~10%)
Perbaikan kode yang dilakukan (SCSS, model) tetap penting dan benar!
Tapi manifestasinya baru terlihat setelah:
✓ Port dipisah (fresh start)
✓ Browser load tanpa cache lama
✓ Registry load tanpa konflik
================================================================================
PELAJARAN PENTING:
================================================================================
1. SELALU CEK MULTIPLE INSTANCE
-----------------------------
Sebelum debug, pastikan hanya ada 1 Odoo instance:
python c:\addon14\cek_port_odoo.py
2. BROWSER CACHE SANGAT BERPENGARUH
---------------------------------
Untuk masalah asset/frontend:
- Selalu test di Incognito mode dulu
- Atau hard refresh: Ctrl + Shift + R
- Atau clear cache sebelum test
3. PORT SEPARATION UNTUK DEVELOPMENT
----------------------------------
Best practice:
- Production: port 8069
- Development/Testing: port 8070+
- Hindari konflik dan memudahkan debugging
4. CARA VERIFIKASI YANG BENAR
---------------------------
Jika ada error, cek urutan ini:
□ Apakah ada multiple instance? (cek_port_odoo.py)
□ Apakah browser cache sudah clear?
□ Apakah registry sudah reload? (restart Odoo)
□ Baru cek kode/module
================================================================================
APA YANG HARUS DILAKUKAN SEKARANG:
================================================================================
OPSI 1: Tetap Pakai Port 8070 (RECOMMENDED)
--------------------------------------------
✓ Sudah tidak ada error
✓ Tidak bentrok dengan instance lain
✓ Development lebih bersih
✓ Mudah identifikasi
Action: Tidak perlu apa-apa, lanjutkan pakai port 8070
OPSI 2: Kembali ke Port 8069
-----------------------------
Jika ingin kembali:
1. Stop semua instance di port 8069:
taskkill /F /PID 13668
taskkill /F /PID 7744
2. Edit odoo.conf:
xmlrpc_port = 8069
3. PENTING! Clear browser cache:
- Ctrl + Shift + Delete
- Clear "All time"
- Clear cookies, cache, dan site data
4. Restart Odoo di port 8069
5. Akses http://localhost:8069
OPSI 3: Verifikasi Perbaikan di Port 8069
------------------------------------------
Test apakah perbaikan benar-benar work:
1. Stop instance di port 8070
2. Stop SEMUA instance di port 8069
3. Clear browser:
- Clear cache
- Clear cookies untuk localhost
- Atau gunakan Incognito mode
4. Edit odoo.conf:
xmlrpc_port = 8069
5. Start Odoo
6. Akses di Incognito mode
Jika tidak ada error = Perbaikan berhasil! ✓
Jika masih error = Ada issue lain
================================================================================
REKOMENDASI AKHIR:
================================================================================
🎯 TETAP DI PORT 8070
Alasan:
1. Sudah berjalan tanpa error
2. Tidak bentrok dengan instance lain
3. Lebih aman untuk development
4. Browser state sudah bersih
Untuk production nanti:
- Bisa pindah ke port 8069
- Atau tetap di 8070 (tidak masalah)
- Yang penting hanya 1 instance per port
================================================================================
CHECKLIST MAINTENANCE KE DEPAN:
================================================================================
Setiap kali develop Odoo:
□ Cek tidak ada multiple instance:
python c:\addon14\cek_port_odoo.py
□ Setelah update module/asset:
- Restart Odoo
- Clear browser cache
- Hard refresh (Ctrl + Shift + R)
□ Jika ada error aneh:
- Test di Incognito mode dulu
- Baru debug kode
□ Gunakan port terpisah untuk setiap project:
- Project A: port 8069
- Project B: port 8070
- Project C: port 8071
================================================================================
KESIMPULAN:
================================================================================
Error BUKAN karena pindah port saja, tapi karena:
1. ✅ Perbaikan kode SCSS & model yang Anda lakukan BENAR dan PERLU
2. ✅ Port 8070 memberikan "fresh start" bagi browser & Odoo
3. ✅ Tidak ada konflik dengan instance lain
4. ✅ Browser load asset yang sudah diperbaiki (bukan cache lama)
Semua perbaikan yang dilakukan VALID dan PENTING!
Port 8070 hanya membantu manifestasi perbaikan tersebut.
REKOMENDASI: Tetap di port 8070 untuk project ini! 🎯
================================================================================
+116
View File
@@ -0,0 +1,116 @@
================================================================================
KONFIGURASI PORT ODOO 14
================================================================================
Tanggal: 5 Februari 2026
INFORMASI PORT:
================================================================================
Instance ini menggunakan:
📍 PORT: 8070
URL Akses:
🌐 http://localhost:8070
File Konfigurasi:
📄 c:\addon14\odoo.conf
Setting: xmlrpc_port = 8070
================================================================================
KEUNTUNGAN MENGGUNAKAN PORT TERPISAH:
================================================================================
✓ Tidak konflik dengan Odoo instance lain di port 8069
✓ Bisa menjalankan multiple instance Odoo sekaligus
✓ Mudah identifikasi instance mana yang sedang jalan
✓ Testing/development lebih fleksibel
================================================================================
CARA MENGUBAH PORT (Jika perlu):
================================================================================
1. Edit file: c:\addon14\odoo.conf
2. Cari atau tambahkan baris:
xmlrpc_port = 8070
3. Ganti dengan port lain (misal 8071, 8072, dll):
xmlrpc_port = 8071
4. Save file
5. Restart Odoo
6. Akses via: http://localhost:8071
================================================================================
CEK PORT YANG SEDANG DIGUNAKAN:
================================================================================
Jalankan script ini untuk melihat Odoo yang sedang jalan:
python c:\addon14\cek_port_odoo.py
ATAU manual di PowerShell:
netstat -ano | findstr :8070
netstat -ano | findstr :8069
Lihat PID (angka terakhir), kemudian:
tasklist | findstr <PID>
================================================================================
TROUBLESHOOTING PORT:
================================================================================
Error: Address already in use
--------------------------------------------------------------
Port 8070 sudah dipakai oleh proses lain.
Solusi 1: Kill proses yang pakai port 8070
1. netstat -ano | findstr :8070
2. Lihat PID (kolom terakhir)
3. taskkill /F /PID <nomor_PID>
Solusi 2: Ganti ke port lain
1. Edit odoo.conf
2. xmlrpc_port = 8071
3. Restart
Error: Cannot connect to http://localhost:8070
--------------------------------------------------------------
1. Pastikan Odoo sudah running
2. Check log: c:\addon14\log\odoo.log
3. Pastikan port di odoo.conf benar
4. Cek firewall tidak block port 8070
================================================================================
INSTANCE ODOO UMUM DAN PORT-NYA:
================================================================================
Instance Port Database
-----------------------------------------
Odoo Production 8069 production_db
Odoo Staging 8070 staging_db (INI ANDA!)
Odoo Testing 8071 test_db
Odoo Development 8072 dev_db
================================================================================
COMMAND QUICK START:
================================================================================
Start Odoo di port 8070:
------------------------
cd C:\odoo14c\server
c:\odoo14c\python\python.exe odoo-bin -c C:\addon14\odoo.conf -d manu14
Atau tekan F5 di VS Code (sudah otomatis pakai config yang benar)
Akses:
------
Browser: http://localhost:8070
Username: admin
Password: (password Anda)
================================================================================
+106
View File
@@ -0,0 +1,106 @@
================================================================================
PANDUAN LENGKAP: INSTALL ODOO 14 ACCOUNTING MODULE
================================================================================
MASALAH YANG TERJADI:
✗ User klik "Cancel" saat muncul popup dependency confirmation
✗ Instalasi dibatalkan sebelum selesai
PENYEBAB:
Ketika install modul yang punya dependency, Odoo akan menampilkan popup:
"The following modules will be installed: [list of dependencies]"
User perlu klik "CONFIRM" atau "INSTALL", BUKAN "CANCEL"
================================================================================
SOLUSI: INSTALL STEP BY STEP
================================================================================
CARA TERBAIK: Install dependency satu per satu (tidak akan ada popup)
Buka Browser → Login ke Odoo → Apps → Hapus filter "Apps"
STEP 1: Install "accounting_pdf_reports"
─────────────────────────────────────────
Search: "Odoo 14 Accounting Financial Reports"
Klik: Install
Tunggu sampai selesai (muncul hijau/checkmark)
STEP 2: Install "om_account_asset"
─────────────────────────────────────────
Search: "Odoo 14 Asset Management"
Klik: Install
Tunggu sampai selesai
STEP 3: Install "om_account_budget"
─────────────────────────────────────────
Search: "Odoo 14 Budget Management"
Klik: Install
Tunggu sampai selesai
STEP 4: Install "om_account_bank_statement_import"
─────────────────────────────────────────
Search: "Import Bank Statement"
Klik: Install
Tunggu sampai selesai
STEP 5: Install "om_account_accountant" (FINAL)
─────────────────────────────────────────
Search: "Odoo 14 Accounting"
Klik: Install
Tunggu sampai selesai
================================================================================
ALTERNATIVE: Install langsung "om_account_accountant"
================================================================================
Jika mau install langsung tanpa step by step:
1. Apps → Search "Odoo 14 Accounting"
2. Klik Install
3. **AKAN MUNCUL POPUP** dengan daftar modul yang akan diinstall:
┌─────────────────────────────────────────────────┐
│ The following modules will be installed: │
│ │
│ ☑ Odoo 14 Accounting Financial Reports │
│ ☑ Odoo 14 Asset Management │
│ ☑ Odoo 14 Budget Management │
│ ☑ Import Bank Statement │
│ │
│ [CANCEL] [CONFIRM] ←── KLIK INI!│
└─────────────────────────────────────────────────┘
4. **KLIK "CONFIRM"** - JANGAN klik "Cancel"!
5. Tunggu proses instalasi selesai (bisa 2-5 menit)
================================================================================
TROUBLESHOOTING
================================================================================
❌ Jika muncul error saat install:
1. Aktifkan Developer Mode (Settings → Activate developer mode)
2. Coba install lagi
3. Copy paste error message yang muncul
4. Share error tersebut untuk troubleshooting
❌ Jika stuck "Installing...":
1. Tunggu 5-10 menit
2. Refresh browser (F5)
3. Cek di Apps apakah sudah installed (ada checkmark hijau)
❌ Jika masih gagal:
Run: python C:\addon14\check_stuck_modules.py
Jika ada stuck modules, run: python C:\addon14\fix_stuck_modules.py
================================================================================
CARA CEK APAKAH SUDAH BERHASIL
================================================================================
Setelah instalasi selesai, cek:
1. Menu "Accounting" muncul di top menu
2. Di Apps, search "Odoo 14 Accounting" → Status: "Installed" (hijau)
3. Buka Accounting → Reporting → Lihat laporan baru yang tersedia
================================================================================
+150
View File
@@ -0,0 +1,150 @@
================================================================================
RINGKASAN KONFIGURASI PORT 8070
================================================================================
Tanggal: 5 Februari 2026, 01:15 WIB
✅ PERUBAHAN YANG SUDAH DILAKUKAN:
================================================================================
1. ✅ odoo.conf - Ditambahkan xmlrpc_port = 8070
File: c:\addon14\odoo.conf
2. ✅ Dokumentasi diupdate untuk port 8070:
- STATUS_AKHIR.txt
- PANDUAN_RESTART_ODOO.txt
- RINGKASAN_PERBAIKAN.txt
3. ✅ File baru dibuat:
- INFO_PORT.txt (informasi lengkap tentang port)
- cek_port_odoo.py (script untuk cek port yang digunakan)
4. ✅ restart_odoo.py - Diupdate dengan info port 8070
================================================================================
STATUS PORT SAAT INI:
================================================================================
Port 8069: DIGUNAKAN (ada Odoo instance lain)
Port 8070: BEBAS ✓ (instance Anda akan pakai ini)
Port 8071: BEBAS
Port 8072: BEBAS
================================================================================
CARA START INSTANCE ODOO ANDA DI PORT 8070:
================================================================================
LANGKAH 1: Pastikan tidak ada Odoo di port 8070
------------------------------------------------
python c:\addon14\cek_port_odoo.py
Jika port 8070 masih dipakai, stop prosesnya:
taskkill /F /PID <nomor_PID>
LANGKAH 2: Start Odoo
----------------------
>>> TEKAN F5 DI VS CODE <<<
Atau via terminal:
cd C:\odoo14c\server
c:\odoo14c\python\python.exe odoo-bin -c C:\addon14\odoo.conf -d manu14
LANGKAH 3: Tunggu hingga siap
------------------------------
Di terminal akan muncul:
"HTTP service (werkzeug) running on http://0.0.0.0:8070"
LANGKAH 4: Akses via browser
-----------------------------
1. Buka browser
2. Clear cache (Ctrl + Shift + Delete)
3. Akses: http://localhost:8070
4. Login
================================================================================
KEUNTUNGAN PORT 8070:
================================================================================
✓ Tidak bentrok dengan Odoo di port 8069
✓ Bisa jalankan multiple Odoo instance sekaligus
✓ Development/testing lebih fleksibel
✓ Mudah identifikasi mana production (8069) mana development (8070)
================================================================================
TROUBLESHOOTING:
================================================================================
Q: Tidak bisa akses http://localhost:8070
A: 1. Pastikan Odoo sudah running (cek terminal)
2. Cek log: c:\addon14\log\odoo.log
3. Pastikan firewall tidak block port 8070
Q: Port 8070 already in use
A: 1. Cek: python c:\addon14\cek_port_odoo.py
2. Stop proses yang pakai port 8070
3. Atau ganti ke port lain (edit odoo.conf)
Q: Browser masih redirect ke port 8069
A: 1. Clear browser cache
2. Clear cookies untuk localhost
3. Gunakan Incognito mode
4. Hard refresh: Ctrl + Shift + R
Q: Ingin ganti ke port lain (misal 8071)
A: 1. Edit c:\addon14\odoo.conf
2. Ubah: xmlrpc_port = 8071
3. Restart Odoo
4. Akses: http://localhost:8071
================================================================================
QUICK TEST:
================================================================================
Setelah start, test apakah sudah berjalan dengan benar:
1. Cek port yang listen:
netstat -ano | findstr :8070
2. Akses via curl (jika ada):
curl http://localhost:8070/web
3. Atau langsung buka browser:
http://localhost:8070
4. Jika muncul halaman login Odoo = SUKSES! ✓
================================================================================
COMMAND REFERENCE:
================================================================================
Cek port Odoo:
python c:\addon14\cek_port_odoo.py
Stop Odoo lama:
python c:\addon14\restart_odoo.py
Start Odoo port 8070:
Tekan F5 di VS Code
Verifikasi models:
python c:\addon14\verify_models.py
Cek log:
Get-Content c:\addon14\log\odoo.log -Tail 50
================================================================================
SIAP UNTUK START! 🚀
================================================================================
Instance Odoo Anda sekarang dikonfigurasi untuk port 8070.
Tidak akan bentrok dengan instance Odoo lain.
Langkah selanjutnya:
1. Tekan F5 di VS Code
2. Tunggu Odoo selesai loading
3. Buka http://localhost:8070
4. Clear browser cache
5. Login
Semua error seharusnya sudah teratasi! ✓
================================================================================
+161
View File
@@ -0,0 +1,161 @@
================================================================================
PANDUAN LENGKAP - CARA RESTART ODOO YANG BENAR
================================================================================
Tanggal: 5 Februari 2026
MASALAH YANG TERJADI:
================================================================================
Error KeyError untuk model seperti:
- 'accounting.report'
- 'ins.trial.balance'
- 'ins.partner.ledger'
- dll
PENYEBAB:
Model sudah ada di database, tapi Odoo registry belum ter-refresh dengan benar.
SOLUSI LENGKAP:
================================================================================
LANGKAH 1: PASTIKAN TIDAK ADA ODOO YANG BERJALAN
--------------------------------------------------------------------------------
Jalankan script ini untuk menghentikan semua proses Odoo:
python c:\addon14\restart_odoo.py
ATAU manual dari Task Manager:
1. Tekan Ctrl + Shift + Esc
2. Cari proses "python.exe" yang menjalankan odoo-bin
3. Klik kanan > End Task
LANGKAH 2: UPDATE DATABASE (SUDAH DILAKUKAN)
--------------------------------------------------------------------------------
✓ Cache sudah dibersihkan
✓ Module accounting_pdf_reports sudah di-reinstall
✓ Module account_dynamic_reports sudah ready
✓ Module om_account_asset sudah ready
LANGKAH 3: START ODOO DENGAN CARA YANG BENAR
================================================================================
>>> CARA TERBAIK: PAKAI VS CODE DEBUG <<<
1. Di VS Code, tekan F5
(atau klik icon Debug ▶️ di sidebar kiri)
2. TUNGGU sampai muncul:
"Odoo is running"
"HTTP service (werkzeug) running"
3. Jangan buka browser dulu! Tunggu loading selesai (± 30-60 detik)
4. Baru buka browser:
http://localhost:8070
5. PENTING: Clear browser cache dulu!
- Chrome/Edge: Ctrl + Shift + Delete > Clear browsing data
- Pilih "Cached images and files"
- Clear
6. Reload halaman (F5)
7. Login
================================================================================
ALTERNATIF: START VIA TERMINAL (jika debug tidak bisa)
================================================================================
Buka PowerShell baru di VS Code dan jalankan:
cd C:\odoo14c\server
c:\odoo14c\python\python.exe odoo-bin -c C:\addon14\odoo.conf -d manu14
TUNGGU sampai muncul:
"HTTP service (werkzeug) running on http://0.0.0.0:8070"
Kemudian buka browser, clear cache, dan login.
================================================================================
JIKA MASIH ERROR SETELAH RESTART:
================================================================================
Opsi 1: Restart dengan Update Explicit
-----------------------------------
cd C:\odoo14c\server
c:\odoo14c\python\python.exe odoo-bin -c C:\addon14\odoo.conf -d manu14 -u accounting_pdf_reports,account_dynamic_reports
Opsi 2: Restart dalam Developer Mode
-----------------------------------
Tambahkan --dev=all ke command:
c:\odoo14c\python\python.exe odoo-bin -c C:\addon14\odoo.conf -d manu14 --dev=all
Opsi 3: Force Reload dengan --init
-----------------------------------
cd C:\odoo14c\server
c:\odoo14c\python\python.exe odoo-bin -c C:\addon14\odoo.conf -d manu14 --init=accounting_pdf_reports --stop-after-init
Kemudian start normal lagi.
================================================================================
CHECKLIST VERIFIKASI SETELAH START:
================================================================================
□ Server sudah running (cek di terminal: "werkzeug running")
□ Tidak ada error di startup log
□ Browser cache sudah di-clear
□ Bisa login ke Odoo
□ Menu Accounting bisa dibuka
□ Tidak ada error KeyError saat buka menu/report
================================================================================
TROUBLESHOOTING TAMBAHAN:
================================================================================
Jika TETAP ada KeyError:
------------------------
1. Buka menu: Settings > Technical > Models
2. Cari model yang error (misal: accounting.report atau ins.trial.balance)
3. Jika TIDAK ADA, berarti modul tidak ter-install
→ Reinstall modul via: Apps > search module > Uninstall > Install
4. Jika ADA tapi tetap error - ini masalah cache browser
→ Hard refresh: Ctrl + Shift + R
→ Atau buka dalam Incognito Mode
Jika Port 8070 sudah dipakai:
----------------------------
1. Ganti port di odoo.conf:
xmlrpc_port = 8071
2. Restart dan akses: http://localhost:8071
Jika Database Connection Error:
-------------------------------
Pastikan PostgreSQL running:
1. Services > postgresql-x64-13 (atau versi Anda)
2. Status harus "Running"
3. Jika tidak, klik Start
================================================================================
RINGKASAN: LANGKAH PALING SIMPLE
================================================================================
1. python c:\addon14\restart_odoo.py
(untuk stop semua proses Odoo)
2. Tekan F5 di VS Code
(start Odoo via debug)
3. Clear browser cache
(Ctrl + Shift + Delete)
4. Reload dan login
SELESAI! ✓
================================================================================
+111
View File
@@ -0,0 +1,111 @@
================================================================================
RINGKASAN PERBAIKAN - ODOO 14 ERROR FIXES
================================================================================
Tanggal: 5 Februari 2026
MASALAH YANG SUDAH DIPERBAIKI:
================================================================================
1. ✅ KeyError: 'accounting.report'
- Modul accounting_pdf_reports sudah di-upgrade
- Model accounting.report sudah ada di database
- Registry akan dimuat saat restart
2. ✅ SyntaxWarning - Invalid Escape Sequences (4 files)
Files diperbaiki:
- C:\odoo14c\server\odoo\tools\appdirs.py (line 178)
- C:\odoo14c\server\odoo\tools\translate.py (line 858)
- C:\odoo14c\server\odoo\tools\sql.py (line 248)
- C:\odoo14c\server\odoo\tools\mail.py (line 344)
3. ✅ SCSS Asset Errors - "Could not get content" (2 modules)
Module: account_dynamic_reports
- Dibuat: views/assets.xml
- Updated: __manifest__.py
Module: om_account_asset
- Dibuat: views/assets.xml
- Updated: __manifest__.py
================================================================================
LANGKAH RESTART ODOO:
================================================================================
CARA 1: Via VS Code Debug Console (PALING MUDAH)
--------------------------------------------------------------------------------
1. Tekan tombol F5 di keyboard
ATAU
Klik menu: Run > Start Debugging
ATAU
Klik icon play hijau di sidebar kiri
2. Tunggu hingga Odoo selesai loading
3. Buka browser dan akses: http://localhost:8070
4. Login dan cek - error harus hilang!
CARA 2: Via Terminal (ALTERNATIF)
--------------------------------------------------------------------------------
Buka PowerShell di VS Code dan jalankan:
cd C:\odoo14c\server
c:\odoo14c\python\python.exe odoo-bin -c C:\addon14\odoo.conf -d manu14
================================================================================
VERIFIKASI SETELAH RESTART:
================================================================================
Periksa hal-hal berikut setelah Odoo restart:
□ Tidak ada error "KeyError: 'accounting.report'" saat buka menu Accounting
□ Tidak ada SyntaxWarning di terminal/log saat startup
□ Tidak ada error "Could not get content for .scss"
□ Semua menu Accounting bisa dibuka tanpa error
□ Report accounting bisa diakses
================================================================================
TIPS JIKA MASIH ADA MASALAH:
================================================================================
1. Clear browser cache:
- Chrome: Ctrl + Shift + Delete
- Firefox: Ctrl + Shift + Delete
- Edge: Ctrl + Shift + Delete
2. Restart dengan update paksa:
c:\odoo14c\python\python.exe odoo-bin -c C:\addon14\odoo.conf -d manu14 -u accounting_pdf_reports,account_dynamic_reports,om_account_asset
3. Cek log untuk error baru:
Get-Content "c:\addon14\log\odoo.log" -Tail 50
================================================================================
FILE-FILE YANG DIBUAT/DIMODIFIKASI:
================================================================================
Files Baru:
- c:\addon14\account_dynamic_reports\views\assets.xml
- c:\addon14\om_account_asset\views\assets.xml
- c:\addon14\fix_accounting_report.py
- c:\addon14\fix_accounting_quick.py
- c:\addon14\fix_syntax_warnings.py
- c:\addon14\verify_fixes.py
- c:\addon14\fix_accounting_model.py
- c:\addon14\restart_odoo.py
- c:\addon14\verify_scss_fix.py
- RINGKASAN_PERBAIKAN.txt (file ini)
Files Dimodifikasi:
- c:\addon14\account_dynamic_reports\__manifest__.py
- c:\addon14\om_account_asset\__manifest__.py
- C:\odoo14c\server\odoo\tools\appdirs.py
- C:\odoo14c\server\odoo\tools\translate.py
- C:\odoo14c\server\odoo\tools\sql.py
- C:\odoo14c\server\odoo\tools\mail.py
================================================================================
STATUS: SIAP UNTUK RESTART
================================================================================
Semua perbaikan sudah selesai.
Silakan restart Odoo sekarang menggunakan salah satu cara di atas.
================================================================================
+197
View File
@@ -0,0 +1,197 @@
================================================================================
STATUS AKHIR - PERBAIKAN ODOO 14
================================================================================
Waktu: 5 Februari 2026, 01:05 WIB
RINGKASAN PEKERJAAN YANG TELAH DISELESAIKAN:
================================================================================
✅ 1. SYNTAX WARNINGS (4 files)
- appdirs.py: Fixed invalid escape \P
- translate.py: Fixed invalid escape \[
- sql.py: Fixed invalid escape \% and \_
- mail.py: Fixed invalid escape \s
✅ 2. SCSS ASSET ERRORS (2 modules)
- account_dynamic_reports: Created views/assets.xml
- om_account_asset: Created views/assets.xml
✅ 3. DATABASE UPDATES
- Module base: Updated
- Module accounting_pdf_reports: Re-installed
- Module account_dynamic_reports: Updated
- Module om_account_asset: Updated
✅ 4. CACHE CLEARED
- accounting_pdf_reports/__pycache__: Deleted
- account_dynamic_reports/__pycache__: Deleted
- wizard/__pycache__: Deleted
STATUS MODEL DI DATABASE:
================================================================================
Model dari account_dynamic_reports:
✓ ins.general.ledger - READY
✓ ins.partner.ledger - READY
✓ ins.trial.balance - READY
✓ ins.partner.ageing - READY
✓ ins.financial.report - READY
Model dari accounting_pdf_reports:
✓ accounting.report - Model sudah ada, punya _description
(tidak muncul warning, ini NORMAL)
CATATAN PENTING:
Model accounting.report SUDAH DIMUAT ke database (terlihat dari log).
Model ini punya _description jadi tidak akan muncul warning di log.
Ini adalah behavior NORMAL.
KESIMPULAN:
================================================================================
🎯 SEMUA PERBAIKAN DATABASE SUDAH SELESAI!
Yang perlu dilakukan sekarang adalah RESTART ODOO dengan cara yang benar
agar registry ter-load sempurna.
================================================================================
CARA RESTART YANG BENAR (IKUTI STEP BY STEP):
================================================================================
STEP 1: STOP SEMUA PROSES ODOO
-------------------------------
Jalankan:
python c:\addon14\restart_odoo.py
Atau manual Task Manager (Ctrl+Shift+Esc):
- Cari "python.exe" yang run odoo
- End Task
STEP 2: START ODOO
------------------
>>> GUNAKAN VS CODE DEBUG (PALING RELIABLE) <<<
1. Tekan F5 di VS Code
2. ATAU klik Run > Start Debugging
3. ATAU klik icon ▶️ Debug di sidebar
4. Tunggu sampai muncul di terminal:
"odoo.service.server: HTTP service (werkzeug) running on http://0.0.0.0:8070"
5. Tunggu 10-20 detik lagi (biar semua module loaded)
STEP 3: AKSES ODOO
------------------
1. Buka browser (Chrome/Edge/Firefox)
2. TEKAN Ctrl + Shift + Delete
- Pilih "Cached images and files"
- Clear
3. Buka http://localhost:8070
4. Hard reload: Ctrl + Shift + R
5. Login dengan user Anda
STEP 4: VERIFIKASI
------------------
Coba buka menu yang sebelumnya error:
□ Menu Accounting
□ Submenu Reports
□ Trial Balance
□ Partner Ledger
□ dll
Jika TIDAK ADA ERROR KeyError = BERHASIL! ✓
================================================================================
JIKA MASIH ADA ERROR (TROUBLESHOOTING):
================================================================================
Error: Port 8070 already in use
--------------------------------
Ada proses Odoo lain yang masih jalan:
1. Jalankan: python c:\addon14\restart_odoo.py
2. Cek Task Manager, kill semua python.exe
3. Start ulang
Error: KeyError masih muncul
-----------------------------
1. Pastikan browser cache sudah clear
2. Coba buka di Incognito/Private mode
3. Jika masih error, restart dengan update:
cd C:\odoo14c\server
c:\odoo14c\python\python.exe odoo-bin -c C:\addon14\odoo.conf -d manu14 -u accounting_pdf_reports,account_dynamic_reports
Error: Model tidak ditemukan di Technical > Models
---------------------------------------------------
1. Login sebagai Administrator
2. Aktifkan Developer Mode: Settings > Activate Developer Mode
3. Settings > Technical > Database Structure > Models
4. Search: "accounting.report" atau "ins.trial.balance"
5. Jika tidak ada, reinstall module:
Apps > Remove filter "Apps" > Search module > Uninstall > Install
Error: Blank screen / White screen
-----------------------------------
1. Check browser console (F12)
2. Likely asset/JS error
3. Clear cache dan restart Odoo
4. Regenerate assets:
cd C:\odoo14c\server
c:\odoo14c\python\python.exe odoo-bin -c C:\addon14\odoo.conf -d manu14 --stop-after-init
================================================================================
FILE-FILE HELPER YANG TERSEDIA:
================================================================================
c:\addon14\restart_odoo.py
→ Stop semua proses Odoo
c:\addon14\verify_models.py
→ Cek model mana yang sudah/belum dimuat
c:\addon14\force_update_modules.py
→ Update paksa semua module bermasalah
c:\addon14\PANDUAN_RESTART_ODOO.txt
→ Panduan lengkap restart (file ini)
c:\addon14\RINGKASAN_PERBAIKAN.txt
→ Ringkasan semua perbaikan yang dilakukan
================================================================================
BANTUAN TAMBAHAN:
================================================================================
Jika semua cara di atas sudah dicoba dan masih error:
1. Backup database:
pg_dump -U odoo -d manu14 > backup_manu14.sql
2. Restart PostgreSQL service:
Services > postgresql-x64-xx > Restart
3. Restart komputer (last resort)
4. Reinstall semua addon yang bermasalah:
- Uninstall dari Apps menu
- Hapus folder __pycache__
- Install ulang
================================================================================
🎯 YANG PALING PENTING:
1. python c:\addon14\restart_odoo.py
2. Tekan F5 di VS Code
3. Clear browser cache
4. Reload dan login
SEHARUSNYA SUDAH BERES! ✓
================================================================================
+22
View File
@@ -0,0 +1,22 @@
# -*- coding: utf-8 -*-
#################################################################################
#
# Odoo, Open Source Management Solution
# Copyright (C) 2021-today Ascetic Business Solution <www.asceticbs.com>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
#################################################################################
from . import models
+37
View File
@@ -0,0 +1,37 @@
# -*- coding: utf-8 -*-
#################################################################################
#
# Odoo, Open Source Management Solution
# Copyright (C) 2021-today Ascetic Business Solution <www.asceticbs.com>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
#################################################################################
{
'name': "Meeting From Task",
'author': 'Ascetic Business Solution',
'category': 'Project',
'summary': """Meeting from task""",
'website': 'http://www.asceticbs.com',
'description': """ """,
'version': '14.0.1.0',
'depends': ['base','project','crm'],
'data': ['views/project_task_view.xml'],
'images': ['static/description/banner.png'],
'license': 'AGPL-3',
'installable': True,
'application': True,
'auto_install': False,
}
+22
View File
@@ -0,0 +1,22 @@
# -*- coding: utf-8 -*-
#################################################################################
#
# Odoo, Open Source Management Solution
# Copyright (C) 2021-today Ascetic Business Solution <www.asceticbs.com>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
#################################################################################
from . import project_task
@@ -0,0 +1,46 @@
# -*- coding: utf-8 -*-
#################################################################################
#
# Odoo, Open Source Management Solution
# Copyright (C) 2021-today Ascetic Business Solution <www.asceticbs.com>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
#################################################################################
from odoo import api, fields, models, _
class ProjectTask(models.Model):
_inherit = "project.task"
meeting_count = fields.Integer("# Meetings",compute = '_compute_meeting_count')
# count of meeting for that customer
def _compute_meeting_count(self):
count = 0
for record in self:
meeting_ids = self.env['calendar.event'].search([])
if meeting_ids:
for meeting in meeting_ids:
if record.partner_id in meeting.partner_ids:
count += 1
record.meeting_count = count
# list of meeting in oe_button
def schedule_meeting(self):
task_ids = self.ids
task_ids.append(self.env.user.partner_id.id)
action = self.env.ref('calendar.action_calendar_event').read()[0]
return action
Binary file not shown.

After

Width:  |  Height:  |  Size: 90 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

@@ -0,0 +1,97 @@
<html>
<body>
<section class="oe_container oe_dark">
<div class="oe_row">
<div class="oe_row">
<h2 class="oe_slogan" style="text-align: center;">Meeting From Task</h2>
</div>
<div class="oe_slogan" style="margin-top:10px !important;">
<a
class="btn btn-primary btn-lg mt8" style="color: #FFFFFF !important;"
href="https://youtu.be/Zi0xdjRKigI"><i
class="fa fa-check-square" target="_blank"></i> Live Preview </a>
</div>
</div>
</section>
<section class="oe_container">
<div class="oe_row" style="width: 100% !important;">
<div class="oe_span12" style="width: 100% !important;">
<div class="panel-body">
<div class="alert alert-info" style="background-color:#0000FF;color:#FFF;text-align: center;"><i class="fa fa-cog fa-spin fa-1x"></i> <strong> Our Services </strong>
</div>
<table style="width: 100%;">
<tr>
<td>
<ul style="list-style-type:square;">
<li><a href="http://asceticbs.com/odoo-consultancy">Odoo Consulting</a></li>
<li><a href="http://asceticbs.com/odoo-customization">Odoo Customization</a></li>
<li><a href="http://asceticbs.com/support-and-maintenance">Support and Maintenance</a></li>
<li><a href="http://asceticbs.com/odoo-website-design-and-development">Odoo Website Development</a></li>
</ul>
</td>
<td>
<ul style="list-style-type:square;">
<li><a href="http://asceticbs.com/odoo-version-migration">Odoo Version Migration</a></li>
<li><a href="http://asceticbs.com/iOS-Mobile-Application">iOS Mobile Application</a></li>
<li><a href="http://asceticbs.com/android-mobile-application">Android Mobile Application</a></li>
</ul>
</td>
<td>
<ul style="list-style-type:square;">
<li><a href="http://asceticbs.com/Odoo-Functional-Training">Odoo Functional Training</a></li>
<li><a href="http://asceticbs.com/Odoo-Technical-Training">Odoo Technical Training</a></li>
<li><a href="http://asceticbs.com/Business-Analyst-System-Architect">Business Analyst / System Architect</a></li>
</ul>
</td>
</tr>
</table>
</div>
<div class="panel-body"">
<ul class="list-unstyled">
<div class="alert alert-info" style="background-color:#0000FF;color:#FFF;text-align: center;"><i class="fa fa-life-ring fa-spin fa-1x"></i> <strong> Do you need any help? </strong>
</div>
<li>Contact this module maintainer for any question, need support or request for the new feature : </li>
<li>* Riken Bhorania <i class="fa fa-whatsapp"></i> +91 9427425799, <i class="fa fa-skype fa_custom"></i> <a href="skype:riken.bhorania?chat">riken.bhorania, </a> <i class="fa fa-envelope"></i> riken.bhorania@asceticbs.com </li>
<li>* Bhaumin Chorera <i class="fa fa-whatsapp"></i> +91 8530000384, <i class="fa fa-skype fa_custom"></i> <a href="skype:bhaumin.chorera?chat">bhaumin.chorera, </a> <i class="fa fa-envelope"></i> bhaumin.chorera@asceticbs.com </li>
</ul>
</div>
<div class="panel-body"">
<ul class="list-unstyled">
<div class="alert alert-info" style="background-color:#0000FF;color:#FFF;text-align: center;"><i class="fa fa-globe fa-spin fa-1x"></i> <strong> Get In Touch </strong>
</div><br/>
<div class="oe_slogan" style="margin-top:10px !important;">
<img src="company-logo.png" style="width: 190px; margin-bottom: 20px;" class="center-block">
</div>
<div class="oe_slogan" style="margin-top:10px !important;">
<a class="btn btn-primary btn-lg mt8"
style="background-color:#0000FF;color: #FFFFFF !important;" href="http://www.asceticbs.com"><i
class="fa fa-envelope"></i> Website </a>
<a class="btn btn-primary btn-lg mt8" style="background-color:#0000FF;color: #FFFFFF !important;"
href="http://www.asceticbs.com/contact-us"><i
class="fa fa-phone"></i> Contact Us </a>
<a class="btn btn-primary btn-lg mt8" style="background-color:#0000FF;color: #FFFFFF !important;"
href="http://www.asceticbs.com/services"><i
class="fa fa-check-square"></i> Services </a>
<a class="btn btn-primary btn-lg mt8" style="background-color:#0000FF;color: #FFFFFF !important;"
href="https://apps.odoo.com/apps/modules/browse?author=Ascetic%20Business%20Solution"><i
class="fa fa-binoculars"></i> More Apps </a>
</div>
<table style="width: 100%;">
<tr style="width: 50%;">
<th style="text-align: center; width: 45%;"></th>
<th style="text-align: center;"><a href="https://twitter.com/asceticbs" target="_blank"><i class="fa fa-2x fa-twitter" style="color:white;background: #00a0d1;width:35px;"></i></a></th>
<th style="text-align: center;"><a href="https://www.linkedin.com/company/ascetic-business-solution-llp" target="_blank"><i class="fa fa-2x fa-linkedin" style="color:white;background: #31a3d6;width:35px;padding-left: 3px;"></i></a></th>
<th style="text-align: center;"><a href="https://www.facebook.com/asceticbs" target="_blank"><i class="fa fa-2x fa-facebook" style="color:white;background: #3b5998;width:35px;padding-left: 8px;"></i></a></th>
<th style="text-align: center;"><a href="https://www.youtube.com/channel/UCsozahEAndQ2whjcuDIBNZQ" target="_blank"><i class="fa fa-2x fa-youtube-play" style="color:white;background: #c53c2c;width:35px;"></i></a></th>
<th style="text-align: center; width: 45%;"></th>
</tr>
</table>
</div>
</div>
</section>
</body>
</html>
@@ -0,0 +1,26 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record id="view_task_form2" model="ir.ui.view">
<field name="name">project.task.form</field>
<field name="model">project.task</field>
<field name="inherit_id" ref="project.view_task_form2"/>
<field name="arch" type="xml">
<!--button 'create meeting'-->
<xpath expr="//field[@name='stage_id']" position = 'before'>
<button name="%(calendar.action_calendar_event_notify)d" type = "action" string = "Create Meeting" class="btn-primary" attrs="{'invisible': [('partner_id', '=', False)]}"/>
</xpath>
<!--oe_button for meeting-->
<xpath expr="//div[@name='button_box']" position = 'inside'>
<button class="oe_stat_button" type="object"
name="schedule_meeting"
icon="fa-calendar"
context="{'partner_id': active_id, 'partner_name': name}">
<field string="Meetings" name="meeting_count" widget="statinfo"/>
</button>
</xpath>
</field>
</record>
</odoo>
+21
View File
@@ -0,0 +1,21 @@
# -*- coding: utf-8 -*-
#################################################################################
#
# Odoo, Open Source Management Solution
# Copyright (C) 2021-Today Ascetic Business Solution <www.asceticbs.com>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
#################################################################################
from. import models
+39
View File
@@ -0,0 +1,39 @@
# -*- coding: utf-8 -*-
#################################################################################
#
# Odoo, Open Source Management Solution
# Copyright (C) 2021-Today Ascetic Business Solution <www.asceticbs.com>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
#################################################################################
{
'name': "Project Task Template",
'author': 'Ascetic Business Solution',
'category': 'Project',
'summary': """Project Task Template""",
'license': 'AGPL-3',
'website': 'http://www.asceticbs.com',
'description': """Project Task Template""",
'version': '14.0.1.0',
'depends': ['base', 'project'],
'data': ['security/task_template_access_rights.xml','security/ir.model.access.csv','views/task_template.xml','views/project_view.xml'
],
'images': ['static/description/banner.png'],
'license': 'AGPL-3',
'installable': True,
'application': True,
'auto_install': False,
}
@@ -0,0 +1,22 @@
# -*- coding: utf-8 -*-
#################################################################################
#
# Odoo, Open Source Management Solution
# Copyright (C) 2021-Today Ascetic Business Solution <www.asceticbs.com>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
#################################################################################
from. import task_template
@@ -0,0 +1,61 @@
# -*- coding: utf-8 -*-
#################################################################################
#
# Odoo, Open Source Management Solution
# Copyright (C) 2021-Today Ascetic Business Solution <www.asceticbs.com>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
#################################################################################
from odoo import api,fields,models,_
#New Class Is Created For Task Template.
class TaskTemplate(models.Model):
_name='project.task.template'
_description = 'Project Task Template'
name = fields.Char(string='Task Title', track_visibility='always', required=True, help=" The Title Of Task")
user_id = fields.Many2one('res.users', string='Assigned to', index=True, track_visibility='always', help="Many2one Field Related To res user")
date_deadline = fields.Date(string='Deadline', copy=False, help="Date Field For Deadline")
description = fields.Html(string='Description', help="Html Field For Description")
active = fields.Boolean(default=True, help="Boolean Field For Task Status")
#Class Is Extended For Add New Feature Of Task Template.
class Project(models.Model):
_inherit = 'project.project'
use_task_template = fields.Boolean(string="Use Active Task Templates", help="Use Task Templates for creating Tasks of the Project")
#Create Method Override To Add Task Template At The Time Of Project Creation.
@api.model
def create(self,vals):
variable=super(Project,self).create(vals)
if vals.get('use_task_template'):
template_id = self.env['project.task.template'].search([('active','=',True)])
if template_id:
for template in template_id:
tasktemplate={}
tasktemplate['name']=template.name
tasktemplate['user_id']=template.user_id.id
tasktemplate['date_deadline']=template.date_deadline
tasktemplate['description']=template.description
tasktemplate['project_id']=variable.id
self.env['project.task'].create(tasktemplate)
return variable
@@ -0,0 +1,3 @@
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_project_task_template_user,access_project_task_template,model_project_task_template,project.group_project_user,1,0,0,0
access_project_task_template_manager,access_project_task_template,model_project_task_template,project.group_project_manager,1,1,1,1
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
2 access_project_task_template_user access_project_task_template model_project_task_template project.group_project_user 1 0 0 0
3 access_project_task_template_manager access_project_task_template model_project_task_template project.group_project_manager 1 1 1 1
@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<!--Access right for the Task Template-->
<record id="group_task_template_show" model="res.groups">
<field name="name">Task Template</field>
</record>
</odoo>
Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

@@ -0,0 +1,97 @@
<html>
<body>
<section class="oe_container oe_dark">
<div class="oe_row">
<div class="oe_row">
<h2 class="oe_slogan" style="text-align: center;">Project Task Template</h2>
</div>
<div class="oe_slogan" style="margin-top:10px !important;">
<a
class="btn btn-primary btn-lg mt8" style="color: #FFFFFF !important;"
href="https://youtu.be/BijNK75mCVU"><i
class="fa fa-check-square" target="_blank"></i> Live Preview </a>
</div>
</div>
</section>
<section class="oe_container">
<div class="oe_row" style="width: 100% !important;">
<div class="oe_span12" style="width: 100% !important;">
<div class="panel-body">
<div class="alert alert-info" style="background-color:#0000FF;color:#FFF;text-align: center;"><i class="fa fa-cog fa-spin fa-1x"></i> <strong> Our Services </strong>
</div>
<table style="width: 100%;">
<tr>
<td>
<ul style="list-style-type:square;">
<li><a href="http://asceticbs.com/odoo-consultancy">Odoo Consulting</a></li>
<li><a href="http://asceticbs.com/odoo-customization">Odoo Customization</a></li>
<li><a href="http://asceticbs.com/support-and-maintenance">Support and Maintenance</a></li>
<li><a href="http://asceticbs.com/odoo-website-design-and-development">Odoo Website Development</a></li>
</ul>
</td>
<td>
<ul style="list-style-type:square;">
<li><a href="http://asceticbs.com/odoo-version-migration">Odoo Version Migration</a></li>
<li><a href="http://asceticbs.com/iOS-Mobile-Application">iOS Mobile Application</a></li>
<li><a href="http://asceticbs.com/android-mobile-application">Android Mobile Application</a></li>
</ul>
</td>
<td>
<ul style="list-style-type:square;">
<li><a href="http://asceticbs.com/Odoo-Functional-Training">Odoo Functional Training</a></li>
<li><a href="http://asceticbs.com/Odoo-Technical-Training">Odoo Technical Training</a></li>
<li><a href="http://asceticbs.com/Business-Analyst-System-Architect">Business Analyst / System Architect</a></li>
</ul>
</td>
</tr>
</table>
</div>
<div class="panel-body"">
<ul class="list-unstyled">
<div class="alert alert-info" style="background-color:#0000FF;color:#FFF;text-align: center;"><i class="fa fa-life-ring fa-spin fa-1x"></i> <strong> Do you need any help? </strong>
</div>
<li>Contact this module maintainer for any question, need support or request for the new feature : </li>
<li>* Riken Bhorania <i class="fa fa-whatsapp"></i> +91 9427425799, <i class="fa fa-skype fa_custom"></i> <a href="skype:riken.bhorania?chat">riken.bhorania, </a> <i class="fa fa-envelope"></i> riken.bhorania@asceticbs.com </li>
<li>* Bhaumin Chorera <i class="fa fa-whatsapp"></i> +91 8530000384, <i class="fa fa-skype fa_custom"></i> <a href="skype:bhaumin.chorera?chat">bhaumin.chorera, </a> <i class="fa fa-envelope"></i> bhaumin.chorera@asceticbs.com </li>
</ul>
</div>
<div class="panel-body"">
<ul class="list-unstyled">
<div class="alert alert-info" style="background-color:#0000FF;color:#FFF;text-align: center;"><i class="fa fa-globe fa-spin fa-1x"></i> <strong> Get In Touch </strong>
</div><br/>
<div class="oe_slogan" style="margin-top:10px !important;">
<img src="company-logo.png" style="width: 190px; margin-bottom: 20px;" class="center-block">
</div>
<div class="oe_slogan" style="margin-top:10px !important;">
<a class="btn btn-primary btn-lg mt8"
style="background-color:#0000FF;color: #FFFFFF !important;" href="http://www.asceticbs.com"><i
class="fa fa-envelope"></i> Website </a>
<a class="btn btn-primary btn-lg mt8" style="background-color:#0000FF;color: #FFFFFF !important;"
href="http://www.asceticbs.com/contact-us"><i
class="fa fa-phone"></i> Contact Us </a>
<a class="btn btn-primary btn-lg mt8" style="background-color:#0000FF;color: #FFFFFF !important;"
href="http://www.asceticbs.com/services"><i
class="fa fa-check-square"></i> Services </a>
<a class="btn btn-primary btn-lg mt8" style="background-color:#0000FF;color: #FFFFFF !important;"
href="https://apps.odoo.com/apps/modules/browse?author=Ascetic%20Business%20Solution"><i
class="fa fa-binoculars"></i> More Apps </a>
</div>
<table style="width: 100%;">
<tr style="width: 50%;">
<th style="text-align: center; width: 45%;"></th>
<th style="text-align: center;"><a href="https://twitter.com/asceticbs" target="_blank"><i class="fa fa-2x fa-twitter" style="color:white;background: #00a0d1;width:35px;"></i></a></th>
<th style="text-align: center;"><a href="https://www.linkedin.com/company/ascetic-business-solution-llp" target="_blank"><i class="fa fa-2x fa-linkedin" style="color:white;background: #31a3d6;width:35px;padding-left: 3px;"></i></a></th>
<th style="text-align: center;"><a href="https://www.facebook.com/asceticbs" target="_blank"><i class="fa fa-2x fa-facebook" style="color:white;background: #3b5998;width:35px;padding-left: 8px;"></i></a></th>
<th style="text-align: center;"><a href="https://www.youtube.com/channel/UCsozahEAndQ2whjcuDIBNZQ" target="_blank"><i class="fa fa-2x fa-youtube-play" style="color:white;background: #c53c2c;width:35px;"></i></a></th>
<th style="text-align: center; width: 45%;"></th>
</tr>
</table>
</div>
</div>
</section>
</body>
</html>
@@ -0,0 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<!--Extended the functionality of the project view form to add the field use task template -->
<record id="project_project_view_form_inherited" model="ir.ui.view">
<field name="name">project.project</field>
<field name="model">project.project</field>
<field name="inherit_id" ref="project.project_project_view_form_simplified"/>
<field name="arch" type="xml">
<xpath expr="//field[@name='user_id']" position="after">
<field name="use_task_template" groups="abs_project_task_template.group_task_template_show"/>
</xpath>
</field>
</record>
</odoo>
@@ -0,0 +1,70 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<!--New Tree View for functionality of the task template to add the fields user name, assigned task to, deadline, description, sequence -->
<record id="view_task_template_tree" model="ir.ui.view">
<field name="name">Task Template</field>
<field name="model">project.task.template</field>
<field name="arch" type="xml">
<tree string="Task Template">
<field name="name"/>
<field name="user_id"/>
<field name="date_deadline"/>
</tree>
</field>
</record>
<!--New Form View for functionality of the task template to add the fields user name, assigned task to, deadline, description, sequence -->
<record id="view_task_template_form" model="ir.ui.view">
<field name="name">project.task.template.form</field>
<field name="model">project.task.template</field>
<field name="arch" type="xml">
<form string="Task Template">
<sheet string="Task Template">
<div class="oe_button_box" name="button_box">
<button name="toggle_active" type="object" class="oe_stat_button" icon="fa-archive">
<field name="active" widget="boolean_button" options='{"terminology": "archive"}'/>
</button>
</div>
<div class="oe_title">
<h1 class="o_row">
<field name="name" placeholder="Task Title..."/>
</h1>
</div>
<group>
<group>
<field name="user_id"
class="o_task_user_field"
options='{"no_open": True}'/>
</group>
<group>
<field name="date_deadline"/>
</group>
</group>
<notebook>
<page string="Description">
<field name="description" type="html"/>
</page>
</notebook>
</sheet>
</form>
</field>
</record>
<!--Tree View Action-->
<record id="open_view_task_template_form" model="ir.actions.act_window">
<field name="name">Task Template</field>
<field name="res_model">project.task.template</field>
<field name="view_mode">tree,form</field>
<field name="view_id" ref="view_task_template_tree"/>
</record>
<!--New Menu Item For Task Template-->
<menuitem id="menu_task_template"
name="Task Template"
parent="project.menu_project_config" sequence="1"
action="open_view_task_template_form"
groups="abs_project_task_template.group_task_template_show"/>
</odoo>
+88
View File
@@ -0,0 +1,88 @@
=============================
account_reconciliation_widget
=============================
.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
:target: https://odoo-community.org/page/development-status
:alt: Beta
.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
:alt: License: AGPL-3
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Faccount--reconcile-lightgray.png?logo=github
:target: https://github.com/OCA/account-reconcile/tree/14.0/account_reconciliation_widget
:alt: OCA/account-reconcile
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
:target: https://translation.odoo-community.org/projects/account-reconcile-14-0/account-reconcile-14-0-account_reconciliation_widget
:alt: Translate me on Weblate
.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png
:target: https://runbot.odoo-community.org/runbot/98/14.0
:alt: Try me on Runbot
|badge1| |badge2| |badge3| |badge4| |badge5|
This module restores account reconciliation widget moved from Odoo community to enterpise in V. 14.0
Provides two widgets designed to reconcile move lines in a easy way: one focused on bank statements and another for generic use.
**Table of contents**
.. contents::
:local:
Usage
=====
With an user with full accounting features enabled:
Invoicing --> Accounting --> Actions --> Reconciliation.
From journal items list view you can select check of them and click Action --> Reconcile.
From accounting dashboard you can use reconcile button in Bank / Cash journals.
Also, you can navigate to statements and use the reconcile button.
Bug Tracker
===========
Bugs are tracked on `GitHub Issues <https://github.com/OCA/account-reconcile/issues>`_.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us smashing it by providing a detailed and welcomed
`feedback <https://github.com/OCA/account-reconcile/issues/new?body=module:%20account_reconciliation_widget%0Aversion:%2014.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
Do not contact contributors directly about support or help with technical issues.
Credits
=======
Authors
~~~~~~~
* Odoo
* Ozono Multimedia
Contributors
~~~~~~~~~~~~
* Tecnativa - Pedro M. Baeza
Maintainers
~~~~~~~~~~~
This module is maintained by the OCA.
.. image:: https://odoo-community.org/logo.png
:alt: Odoo Community Association
:target: https://odoo-community.org
OCA, or the Odoo Community Association, is a nonprofit organization whose
mission is to support the collaborative development of Odoo features and
promote its widespread use.
This module is part of the `OCA/account-reconcile <https://github.com/OCA/account-reconcile/tree/14.0/account_reconciliation_widget>`_ project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
@@ -0,0 +1 @@
from . import models
@@ -0,0 +1,25 @@
# Copyright 2020 Ozono Multimedia - Iván Antón
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
{
"name": "account_reconciliation_widget",
"version": "14.0.1.1.7",
"category": "Accounting",
"license": "AGPL-3",
"summary": "Account reconciliation widget",
"author": "Odoo, Ozono Multimedia, Odoo Community Association (OCA)",
"website": "https://github.com/OCA/account-reconcile",
"depends": ["account"],
"data": [
"security/ir.model.access.csv",
"views/assets.xml",
"views/account_view.xml",
"views/account_bank_statement_view.xml",
"views/account_journal_dashboard_view.xml",
"views/account_payment_views.xml",
],
"qweb": [
"static/src/xml/account_reconciliation.xml",
],
"installable": True,
}
@@ -0,0 +1,721 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * account_reconciliation_widget
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 14.0\n"
"Report-Msgid-Bugs-To: \n"
"Last-Translator: \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: \n"
#. module: account_reconciliation_widget
#: code:addons/account_reconciliation_widget/models/reconciliation_widget.py:0
#, python-format
msgid "A reconciliation must involve at least 2 move lines."
msgstr ""
#. module: account_reconciliation_widget
#: code:addons/account_reconciliation_widget/models/account_bank_statement.py:0
#: code:addons/account_reconciliation_widget/models/account_bank_statement.py:0
#, python-format
msgid "A selected move line was already reconciled."
msgstr ""
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/js/reconciliation/reconciliation_renderer.js:0
#: code:addons/account_reconciliation_widget/static/src/js/reconciliation/reconciliation_renderer.js:0
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Account"
msgstr ""
#. module: account_reconciliation_widget
#: model:ir.model,name:account_reconciliation_widget.model_account_reconciliation_widget
msgid "Account Reconciliation widget"
msgstr ""
#. module: account_reconciliation_widget
#: model:ir.model.fields,field_description:account_reconciliation_widget.field_account_bank_statement__accounting_date
msgid "Accounting Date"
msgstr ""
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid ""
"All invoices and payments have been matched, your accounts' balances are "
"clean."
msgstr ""
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Amount"
msgstr ""
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Analytic Acc."
msgstr ""
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Analytic Tags."
msgstr ""
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/js/reconciliation/reconciliation_action.js:0
#, python-format
msgid "Bank Reconciliation"
msgstr ""
#. module: account_reconciliation_widget
#: model:ir.model.fields,field_description:account_reconciliation_widget.field_res_company__account_bank_reconciliation_start
msgid "Bank Reconciliation Threshold"
msgstr ""
#. module: account_reconciliation_widget
#: model:ir.model,name:account_reconciliation_widget.model_account_bank_statement
msgid "Bank Statement"
msgstr ""
#. module: account_reconciliation_widget
#: model:ir.model,name:account_reconciliation_widget.model_account_bank_statement_line
msgid "Bank Statement Line"
msgstr ""
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Check all"
msgstr ""
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Check that you have no bank statement lines to"
msgstr ""
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Choose counterpart or Create Write-off"
msgstr ""
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Close"
msgstr ""
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Close statement"
msgstr ""
#. module: account_reconciliation_widget
#: model:ir.model,name:account_reconciliation_widget.model_res_company
msgid "Companies"
msgstr ""
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Congrats, you're all done!"
msgstr ""
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Create a counterpart"
msgstr ""
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Create model"
msgstr ""
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Customer/Vendor Matching"
msgstr ""
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Date"
msgstr ""
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Description"
msgstr ""
#. module: account_reconciliation_widget
#: model:ir.model.fields,field_description:account_reconciliation_widget.field_account_bank_statement__display_name
#: model:ir.model.fields,field_description:account_reconciliation_widget.field_account_bank_statement_line__display_name
#: model:ir.model.fields,field_description:account_reconciliation_widget.field_account_journal__display_name
#: model:ir.model.fields,field_description:account_reconciliation_widget.field_account_move_line__display_name
#: model:ir.model.fields,field_description:account_reconciliation_widget.field_account_reconciliation_widget__display_name
#: model:ir.model.fields,field_description:account_reconciliation_widget.field_res_company__display_name
msgid "Display Name"
msgstr ""
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Due Date"
msgstr ""
#. module: account_reconciliation_widget
#: code:addons/account_reconciliation_widget/models/account_move.py:0
#, python-format
msgid "Either pass both debit and credit or none."
msgstr ""
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "External link"
msgstr ""
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Filter on account, label, partner, amount,..."
msgstr ""
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "From now on, you may want to:"
msgstr ""
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Go to bank statement(s)"
msgstr ""
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Good Job!"
msgstr ""
#. module: account_reconciliation_widget
#: model:ir.model.fields,field_description:account_reconciliation_widget.field_account_bank_statement__id
#: model:ir.model.fields,field_description:account_reconciliation_widget.field_account_bank_statement_line__id
#: model:ir.model.fields,field_description:account_reconciliation_widget.field_account_journal__id
#: model:ir.model.fields,field_description:account_reconciliation_widget.field_account_move_line__id
#: model:ir.model.fields,field_description:account_reconciliation_widget.field_account_reconciliation_widget__id
#: model:ir.model.fields,field_description:account_reconciliation_widget.field_res_company__id
msgid "ID"
msgstr ""
#. module: account_reconciliation_widget
#: model:ir.model.fields,help:account_reconciliation_widget.field_account_bank_statement__accounting_date
msgid ""
"If set, the accounting entries created during the bank statement reconciliation process will be created at this date.\n"
"This is useful if the accounting period in which the entries should normally be booked is already closed."
msgstr ""
#. module: account_reconciliation_widget
#: code:addons/account_reconciliation_widget/models/account_move.py:0
#, python-format
msgid ""
"It is mandatory to specify an account and a journal to create a write-off."
msgstr ""
#. module: account_reconciliation_widget
#: model_terms:ir.ui.view,arch_db:account_reconciliation_widget.account_journal_dashboard_kanban_view
msgid "Items"
msgstr ""
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#: model:ir.model,name:account_reconciliation_widget.model_account_journal
#, python-format
msgid "Journal"
msgstr ""
#. module: account_reconciliation_widget
#: model:ir.model.fields,field_description:account_reconciliation_widget.field_account_bank_statement_line__move_name
msgid "Journal Entry Name"
msgstr ""
#. module: account_reconciliation_widget
#: model:ir.model,name:account_reconciliation_widget.model_account_move_line
msgid "Journal Item"
msgstr ""
#. module: account_reconciliation_widget
#: code:addons/account_reconciliation_widget/models/reconciliation_widget.py:0
#, python-format
msgid "Journal Items"
msgstr ""
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/js/reconciliation/reconciliation_action.js:0
#, python-format
msgid "Journal Items to Reconcile"
msgstr ""
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/js/reconciliation/reconciliation_renderer.js:0
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Label"
msgstr ""
#. module: account_reconciliation_widget
#: model:ir.model.fields,field_description:account_reconciliation_widget.field_account_bank_statement____last_update
#: model:ir.model.fields,field_description:account_reconciliation_widget.field_account_bank_statement_line____last_update
#: model:ir.model.fields,field_description:account_reconciliation_widget.field_account_journal____last_update
#: model:ir.model.fields,field_description:account_reconciliation_widget.field_account_move_line____last_update
#: model:ir.model.fields,field_description:account_reconciliation_widget.field_account_reconciliation_widget____last_update
#: model:ir.model.fields,field_description:account_reconciliation_widget.field_res_company____last_update
msgid "Last Modified on"
msgstr ""
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Last Reconciliation:"
msgstr ""
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Load more"
msgstr ""
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Load more... ("
msgstr ""
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Manual Operations"
msgstr ""
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Match with entries that are not from receivable/payable accounts"
msgstr ""
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Miscellaneous Matching"
msgstr ""
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Modify models"
msgstr ""
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "New"
msgstr ""
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Note"
msgstr ""
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Nothing to do!"
msgstr ""
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/js/reconciliation/reconciliation_model.js:0
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Open balance"
msgstr ""
#. module: account_reconciliation_widget
#: code:addons/account_reconciliation_widget/models/account_bank_statement.py:0
#, python-format
msgid ""
"Operation not allowed. Since your statement line already received a number "
"(%s), you cannot reconcile it entirely with existing journal entries "
"otherwise it would make a gap in the numbering. You should book an entry and"
" make a regular revert of it in case you want to cancel it."
msgstr ""
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Partner"
msgstr ""
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Pay your"
msgstr ""
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Presets config"
msgstr ""
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#: model:ir.actions.client,name:account_reconciliation_widget.action_view_account_move_line_reconcile
#: model_terms:ir.ui.view,arch_db:account_reconciliation_widget.account_journal_dashboard_kanban_view
#: model_terms:ir.ui.view,arch_db:account_reconciliation_widget.view_bank_statement_form
#, python-format
msgid "Reconcile"
msgstr ""
#. module: account_reconciliation_widget
#: model:ir.actions.client,name:account_reconciliation_widget.action_manual_reconciliation
#: model:ir.ui.menu,name:account_reconciliation_widget.menu_action_manual_reconciliation
msgid "Reconciliation"
msgstr ""
#. module: account_reconciliation_widget
#: model:ir.actions.client,name:account_reconciliation_widget.action_bank_reconcile
msgid "Reconciliation on Bank Statements"
msgstr ""
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Ref"
msgstr ""
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Residual"
msgstr ""
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Save and New"
msgstr ""
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/js/reconciliation/reconciliation_renderer.js:0
#, python-format
msgid "Select Partner"
msgstr ""
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Select a partner or choose a counterpart"
msgstr ""
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Settings"
msgstr ""
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Skip"
msgstr ""
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/js/reconciliation/reconciliation_renderer.js:0
#, python-format
msgid "Some fields are undefined"
msgstr ""
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Tax Included in Price"
msgstr ""
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Taxes"
msgstr ""
#. module: account_reconciliation_widget
#: model:ir.model.fields,help:account_reconciliation_widget.field_account_bank_statement_line__move_name
msgid ""
"Technical field holding the number given to the journal entry, automatically"
" set when the statement line is reconciled then stored to set the same "
"number again if the line is cancelled, set to draft and re-processed again."
msgstr ""
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "That's on average"
msgstr ""
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/js/reconciliation/reconciliation_model.js:0
#, python-format
msgid "The amount %s is not a valid partial amount"
msgstr ""
#. module: account_reconciliation_widget
#: model:ir.model.fields,help:account_reconciliation_widget.field_res_company__account_bank_reconciliation_start
msgid ""
"The bank reconciliation widget won't ask to reconcile payments older than this date.\n"
"This is useful if you install accounting after having used invoicing for some time and don't want to reconcile all the past payments with bank statements."
msgstr ""
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "There is nothing to reconcile."
msgstr ""
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid ""
"This page displays all the bank transactions that are to be reconciled and "
"provides with a neat interface to do so."
msgstr ""
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "This payment is registered but not reconciled."
msgstr ""
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "To Check"
msgstr ""
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "To speed up reconciliation, define"
msgstr ""
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Transaction"
msgstr ""
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Validate"
msgstr ""
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Verify"
msgstr ""
#. module: account_reconciliation_widget
#: code:addons/account_reconciliation_widget/models/account_move.py:0
#: code:addons/account_reconciliation_widget/models/account_move.py:0
#, python-format
msgid "Write-Off"
msgstr ""
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Writeoff Date"
msgstr ""
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "You reconciled"
msgstr ""
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "and follow-up customers"
msgstr ""
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "have been reconciled automatically."
msgstr ""
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "reconcile"
msgstr ""
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "reconciliation models"
msgstr ""
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "remaining)"
msgstr ""
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "seconds per transaction."
msgstr ""
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "statement lines"
msgstr ""
#. module: account_reconciliation_widget
#: model_terms:ir.ui.view,arch_db:account_reconciliation_widget.account_journal_dashboard_kanban_view
msgid "to check"
msgstr ""
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "transactions in"
msgstr ""
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "unpaid invoices"
msgstr ""
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "unreconciled entries"
msgstr ""
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "vendor bills"
msgstr ""
+726
View File
@@ -0,0 +1,726 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * account_reconciliation_widget
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 14.0\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2021-04-20 09:46+0000\n"
"Last-Translator: Pedro M. Baeza <pedro.baeza@gmail.com>\n"
"Language-Team: none\n"
"Language: es\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 4.3.2\n"
#. module: account_reconciliation_widget
#: code:addons/account_reconciliation_widget/models/reconciliation_widget.py:0
#, python-format
msgid "A reconciliation must involve at least 2 move lines."
msgstr "Una conciliación debe incluir al menos dos apuntes."
#. module: account_reconciliation_widget
#: code:addons/account_reconciliation_widget/models/account_bank_statement.py:0
#: code:addons/account_reconciliation_widget/models/account_bank_statement.py:0
#, python-format
msgid "A selected move line was already reconciled."
msgstr "Un apunte de los seleccionados ya fue conciliado."
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/js/reconciliation/reconciliation_renderer.js:0
#: code:addons/account_reconciliation_widget/static/src/js/reconciliation/reconciliation_renderer.js:0
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Account"
msgstr "Cuenta"
#. module: account_reconciliation_widget
#: model:ir.model,name:account_reconciliation_widget.model_account_reconciliation_widget
msgid "Account Reconciliation widget"
msgstr "Widget de conciliación contable"
#. module: account_reconciliation_widget
#: model:ir.model.fields,field_description:account_reconciliation_widget.field_account_bank_statement__accounting_date
msgid "Accounting Date"
msgstr "Fecha contable"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid ""
"All invoices and payments have been matched, your accounts' balances are "
"clean."
msgstr ""
"Todas sus facturas y pagos han sido casados. Sus saldos de cuentas están "
"limpios."
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Amount"
msgstr "Importe"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Analytic Acc."
msgstr "Cuenta anal."
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Analytic Tags."
msgstr "Etiquetas analíticas."
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/js/reconciliation/reconciliation_action.js:0
#, python-format
msgid "Bank Reconciliation"
msgstr "Conciliación bancaria"
#. module: account_reconciliation_widget
#: model:ir.model.fields,field_description:account_reconciliation_widget.field_res_company__account_bank_reconciliation_start
msgid "Bank Reconciliation Threshold"
msgstr "Umbral de conciliación bancaria"
#. module: account_reconciliation_widget
#: model:ir.model,name:account_reconciliation_widget.model_account_bank_statement
msgid "Bank Statement"
msgstr "Extracto bancario"
#. module: account_reconciliation_widget
#: model:ir.model,name:account_reconciliation_widget.model_account_bank_statement_line
msgid "Bank Statement Line"
msgstr "Línea de extracto bancario"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Check all"
msgstr "Comprobar todo"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Check that you have no bank statement lines to"
msgstr "Compruebe que no tiene líneas de extracto en"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Choose counterpart or Create Write-off"
msgstr "Escoja contraparte o cree desajuste"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Close"
msgstr "Cerrar"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Close statement"
msgstr "Cerrar extracto"
#. module: account_reconciliation_widget
#: model:ir.model,name:account_reconciliation_widget.model_res_company
msgid "Companies"
msgstr "Compañías"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Congrats, you're all done!"
msgstr "Enhorabuena. ¡Ya está todo hecho!"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Create a counterpart"
msgstr "Crear una contrapartida"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Create model"
msgstr "Crear modelo"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Customer/Vendor Matching"
msgstr "Casamiento cliente/proveedor"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Date"
msgstr "Fecha"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Description"
msgstr "Descripción"
#. module: account_reconciliation_widget
#: model:ir.model.fields,field_description:account_reconciliation_widget.field_account_bank_statement__display_name
#: model:ir.model.fields,field_description:account_reconciliation_widget.field_account_bank_statement_line__display_name
#: model:ir.model.fields,field_description:account_reconciliation_widget.field_account_journal__display_name
#: model:ir.model.fields,field_description:account_reconciliation_widget.field_account_move_line__display_name
#: model:ir.model.fields,field_description:account_reconciliation_widget.field_account_reconciliation_widget__display_name
#: model:ir.model.fields,field_description:account_reconciliation_widget.field_res_company__display_name
msgid "Display Name"
msgstr "Nombre mostrado"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Due Date"
msgstr "Fecha vencimiento"
#. module: account_reconciliation_widget
#: code:addons/account_reconciliation_widget/models/account_move.py:0
#, python-format
msgid "Either pass both debit and credit or none."
msgstr "Pase ambos debe o haber, o ninguno."
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "External link"
msgstr "Enlace externo"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Filter on account, label, partner, amount,..."
msgstr "Filtrar en cuenta, etiqueta, empresa, importe..."
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "From now on, you may want to:"
msgstr "En este momento, puede querer:"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Go to bank statement(s)"
msgstr "Ir al/a los extracto(s)"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Good Job!"
msgstr "¡Buen trabajo!"
#. module: account_reconciliation_widget
#: model:ir.model.fields,field_description:account_reconciliation_widget.field_account_bank_statement__id
#: model:ir.model.fields,field_description:account_reconciliation_widget.field_account_bank_statement_line__id
#: model:ir.model.fields,field_description:account_reconciliation_widget.field_account_journal__id
#: model:ir.model.fields,field_description:account_reconciliation_widget.field_account_move_line__id
#: model:ir.model.fields,field_description:account_reconciliation_widget.field_account_reconciliation_widget__id
#: model:ir.model.fields,field_description:account_reconciliation_widget.field_res_company__id
msgid "ID"
msgstr "ID (identificación)"
#. module: account_reconciliation_widget
#: model:ir.model.fields,help:account_reconciliation_widget.field_account_bank_statement__accounting_date
msgid ""
"If set, the accounting entries created during the bank statement reconciliation process will be created at this date.\n"
"This is useful if the accounting period in which the entries should normally be booked is already closed."
msgstr ""
#. module: account_reconciliation_widget
#: code:addons/account_reconciliation_widget/models/account_move.py:0
#, python-format
msgid ""
"It is mandatory to specify an account and a journal to create a write-off."
msgstr ""
#. module: account_reconciliation_widget
#: model_terms:ir.ui.view,arch_db:account_reconciliation_widget.account_journal_dashboard_kanban_view
msgid "Items"
msgstr "Elementos"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#: model:ir.model,name:account_reconciliation_widget.model_account_journal
#, python-format
msgid "Journal"
msgstr "Diario"
#. module: account_reconciliation_widget
#: model:ir.model.fields,field_description:account_reconciliation_widget.field_account_bank_statement_line__move_name
msgid "Journal Entry Name"
msgstr "Nombre del asiento"
#. module: account_reconciliation_widget
#: model:ir.model,name:account_reconciliation_widget.model_account_move_line
msgid "Journal Item"
msgstr "Apunte contable"
#. module: account_reconciliation_widget
#: code:addons/account_reconciliation_widget/models/reconciliation_widget.py:0
#, python-format
msgid "Journal Items"
msgstr "Apuntes contables"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/js/reconciliation/reconciliation_action.js:0
#, python-format
msgid "Journal Items to Reconcile"
msgstr "Apuntes a conciliar"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/js/reconciliation/reconciliation_renderer.js:0
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Label"
msgstr "Descripción"
#. module: account_reconciliation_widget
#: model:ir.model.fields,field_description:account_reconciliation_widget.field_account_bank_statement____last_update
#: model:ir.model.fields,field_description:account_reconciliation_widget.field_account_bank_statement_line____last_update
#: model:ir.model.fields,field_description:account_reconciliation_widget.field_account_journal____last_update
#: model:ir.model.fields,field_description:account_reconciliation_widget.field_account_move_line____last_update
#: model:ir.model.fields,field_description:account_reconciliation_widget.field_account_reconciliation_widget____last_update
#: model:ir.model.fields,field_description:account_reconciliation_widget.field_res_company____last_update
msgid "Last Modified on"
msgstr "Última modificación el"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Last Reconciliation:"
msgstr "Última conciliación:"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Load more"
msgstr "Cargar mas"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Load more... ("
msgstr "Cargar más... ("
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Manual Operations"
msgstr "Operaciones manuales"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Match with entries that are not from receivable/payable accounts"
msgstr ""
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Miscellaneous Matching"
msgstr "Casamiento misceláneo"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Modify models"
msgstr "Modificar modelos"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "New"
msgstr "Nuevo"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Note"
msgstr "Nota"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Nothing to do!"
msgstr "¡Nada que hacer!"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/js/reconciliation/reconciliation_model.js:0
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Open balance"
msgstr "Abrir saldo"
#. module: account_reconciliation_widget
#: code:addons/account_reconciliation_widget/models/account_bank_statement.py:0
#, python-format
msgid ""
"Operation not allowed. Since your statement line already received a number "
"(%s), you cannot reconcile it entirely with existing journal entries "
"otherwise it would make a gap in the numbering. You should book an entry and"
" make a regular revert of it in case you want to cancel it."
msgstr ""
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Partner"
msgstr "Contacto"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Pay your"
msgstr ""
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Presets config"
msgstr ""
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#: model:ir.actions.client,name:account_reconciliation_widget.action_view_account_move_line_reconcile
#: model_terms:ir.ui.view,arch_db:account_reconciliation_widget.account_journal_dashboard_kanban_view
#: model_terms:ir.ui.view,arch_db:account_reconciliation_widget.view_bank_statement_form
#, python-format
msgid "Reconcile"
msgstr ""
#. module: account_reconciliation_widget
#: model:ir.actions.client,name:account_reconciliation_widget.action_manual_reconciliation
#: model:ir.ui.menu,name:account_reconciliation_widget.menu_action_manual_reconciliation
msgid "Reconciliation"
msgstr ""
#. module: account_reconciliation_widget
#: model:ir.actions.client,name:account_reconciliation_widget.action_bank_reconcile
msgid "Reconciliation on Bank Statements"
msgstr ""
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Ref"
msgstr "Ref"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Residual"
msgstr ""
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Save and New"
msgstr ""
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/js/reconciliation/reconciliation_renderer.js:0
#, python-format
msgid "Select Partner"
msgstr ""
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Select a partner or choose a counterpart"
msgstr ""
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Settings"
msgstr "Ajustes"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Skip"
msgstr "Saltar"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/js/reconciliation/reconciliation_renderer.js:0
#, python-format
msgid "Some fields are undefined"
msgstr ""
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Tax Included in Price"
msgstr "Impuesto incluido en el precio"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Taxes"
msgstr "Impuestos"
#. module: account_reconciliation_widget
#: model:ir.model.fields,help:account_reconciliation_widget.field_account_bank_statement_line__move_name
msgid ""
"Technical field holding the number given to the journal entry, automatically"
" set when the statement line is reconciled then stored to set the same "
"number again if the line is cancelled, set to draft and re-processed again."
msgstr ""
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "That's on average"
msgstr ""
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/js/reconciliation/reconciliation_model.js:0
#, python-format
msgid "The amount %s is not a valid partial amount"
msgstr ""
#. module: account_reconciliation_widget
#: model:ir.model.fields,help:account_reconciliation_widget.field_res_company__account_bank_reconciliation_start
msgid ""
"The bank reconciliation widget won't ask to reconcile payments older than this date.\n"
"This is useful if you install accounting after having used invoicing for some time and don't want to reconcile all the past payments with bank statements."
msgstr ""
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "There is nothing to reconcile."
msgstr ""
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid ""
"This page displays all the bank transactions that are to be reconciled and "
"provides with a neat interface to do so."
msgstr ""
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "This payment is registered but not reconciled."
msgstr ""
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "To Check"
msgstr "Para revisar"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "To speed up reconciliation, define"
msgstr ""
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Transaction"
msgstr "Transacción"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Validate"
msgstr "Validar"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Verify"
msgstr "Verificar"
#. module: account_reconciliation_widget
#: code:addons/account_reconciliation_widget/models/account_move.py:0
#: code:addons/account_reconciliation_widget/models/account_move.py:0
#, python-format
msgid "Write-Off"
msgstr ""
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Writeoff Date"
msgstr ""
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "You reconciled"
msgstr ""
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "and follow-up customers"
msgstr ""
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "have been reconciled automatically."
msgstr ""
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "reconcile"
msgstr ""
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "reconciliation models"
msgstr ""
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "remaining)"
msgstr "restante)"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "seconds per transaction."
msgstr ""
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "statement lines"
msgstr ""
#. module: account_reconciliation_widget
#: model_terms:ir.ui.view,arch_db:account_reconciliation_widget.account_journal_dashboard_kanban_view
msgid "to check"
msgstr "por revisar"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "transactions in"
msgstr ""
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "unpaid invoices"
msgstr ""
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "unreconciled entries"
msgstr ""
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "vendor bills"
msgstr ""
+748
View File
@@ -0,0 +1,748 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * account_reconciliation_widget
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 14.0\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2021-03-22 11:46+0000\n"
"Last-Translator: Yves Le Doeuff <yld@alliasys.fr>\n"
"Language-Team: none\n"
"Language: fr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=n > 1;\n"
"X-Generator: Weblate 4.3.2\n"
#. module: account_reconciliation_widget
#: code:addons/account_reconciliation_widget/models/reconciliation_widget.py:0
#, python-format
msgid "A reconciliation must involve at least 2 move lines."
msgstr "Un lettrage doit inclure au moins 2 lignes."
#. module: account_reconciliation_widget
#: code:addons/account_reconciliation_widget/models/account_bank_statement.py:0
#: code:addons/account_reconciliation_widget/models/account_bank_statement.py:0
#, python-format
msgid "A selected move line was already reconciled."
msgstr "Une ligne sélectionnée à déjà été lettrée."
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/js/reconciliation/reconciliation_renderer.js:0
#: code:addons/account_reconciliation_widget/static/src/js/reconciliation/reconciliation_renderer.js:0
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Account"
msgstr "Compte"
#. module: account_reconciliation_widget
#: model:ir.model,name:account_reconciliation_widget.model_account_reconciliation_widget
msgid "Account Reconciliation widget"
msgstr "Outils de lettrage de compte"
#. module: account_reconciliation_widget
#: model:ir.model.fields,field_description:account_reconciliation_widget.field_account_bank_statement__accounting_date
msgid "Accounting Date"
msgstr "Date d'écriture"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid ""
"All invoices and payments have been matched, your accounts' balances are "
"clean."
msgstr "Toutes les factures et les paiements ont été rapprochés."
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Amount"
msgstr "Montant"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Analytic Acc."
msgstr "Compte ana."
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Analytic Tags."
msgstr ""
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/js/reconciliation/reconciliation_action.js:0
#, python-format
msgid "Bank Reconciliation"
msgstr "Rapprochement bancaire"
#. module: account_reconciliation_widget
#: model:ir.model.fields,field_description:account_reconciliation_widget.field_res_company__account_bank_reconciliation_start
msgid "Bank Reconciliation Threshold"
msgstr "Seuil de rapprochement bancaire"
#. module: account_reconciliation_widget
#: model:ir.model,name:account_reconciliation_widget.model_account_bank_statement
msgid "Bank Statement"
msgstr "Relevé bancaire"
#. module: account_reconciliation_widget
#: model:ir.model,name:account_reconciliation_widget.model_account_bank_statement_line
msgid "Bank Statement Line"
msgstr "Ligne de relevé bancaire"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Check all"
msgstr "Tout"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Check that you have no bank statement lines to"
msgstr "Vérifiez que vous n'avez pas de lignes de relevé bancaire à"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Choose counterpart or Create Write-off"
msgstr "Choisissez une contrepartie ou créez une contre passation"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Close"
msgstr "Fermer"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Close statement"
msgstr "Fermer"
#. module: account_reconciliation_widget
#: model:ir.model,name:account_reconciliation_widget.model_res_company
msgid "Companies"
msgstr "Sociétés"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Congrats, you're all done!"
msgstr "Félicitation, vous avez terminé !"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Create a counterpart"
msgstr "Créer une contrepartie"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Create model"
msgstr "Créer un modèle"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Customer/Vendor Matching"
msgstr "Client/Fournisseur correspondant"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Date"
msgstr ""
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Description"
msgstr ""
#. module: account_reconciliation_widget
#: model:ir.model.fields,field_description:account_reconciliation_widget.field_account_bank_statement__display_name
#: model:ir.model.fields,field_description:account_reconciliation_widget.field_account_bank_statement_line__display_name
#: model:ir.model.fields,field_description:account_reconciliation_widget.field_account_journal__display_name
#: model:ir.model.fields,field_description:account_reconciliation_widget.field_account_move_line__display_name
#: model:ir.model.fields,field_description:account_reconciliation_widget.field_account_reconciliation_widget__display_name
#: model:ir.model.fields,field_description:account_reconciliation_widget.field_res_company__display_name
msgid "Display Name"
msgstr "Nom affiché"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Due Date"
msgstr "Date d'échéance"
#. module: account_reconciliation_widget
#: code:addons/account_reconciliation_widget/models/account_move.py:0
#, python-format
msgid "Either pass both debit and credit or none."
msgstr "Lien externe"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "External link"
msgstr "Lien externe"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Filter on account, label, partner, amount,..."
msgstr "Filtrer par compte, libellé, partenaire, montant, ..."
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "From now on, you may want to:"
msgstr "A partir de maintenant, vous souhaitez :"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Go to bank statement(s)"
msgstr "Aller au relevé bancaire"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Good Job!"
msgstr "Bon travail !"
#. module: account_reconciliation_widget
#: model:ir.model.fields,field_description:account_reconciliation_widget.field_account_bank_statement__id
#: model:ir.model.fields,field_description:account_reconciliation_widget.field_account_bank_statement_line__id
#: model:ir.model.fields,field_description:account_reconciliation_widget.field_account_journal__id
#: model:ir.model.fields,field_description:account_reconciliation_widget.field_account_move_line__id
#: model:ir.model.fields,field_description:account_reconciliation_widget.field_account_reconciliation_widget__id
#: model:ir.model.fields,field_description:account_reconciliation_widget.field_res_company__id
msgid "ID"
msgstr ""
#. module: account_reconciliation_widget
#: model:ir.model.fields,help:account_reconciliation_widget.field_account_bank_statement__accounting_date
msgid ""
"If set, the accounting entries created during the bank statement reconciliation process will be created at this date.\n"
"This is useful if the accounting period in which the entries should normally be booked is already closed."
msgstr ""
"S'il est défini, les écritures comptables créées lors du processus de "
"rapprochement des relevés bancaires seront créées à cette date.\n"
"Ceci est utile si la période comptable dans laquelle les écritures doivent "
"normalement être comptabilisées est déjà clôturée."
#. module: account_reconciliation_widget
#: code:addons/account_reconciliation_widget/models/account_move.py:0
#, python-format
msgid ""
"It is mandatory to specify an account and a journal to create a write-off."
msgstr ""
"Il est obligatoire de spécifier un compte et un journal pour créer une "
"contrepassation."
#. module: account_reconciliation_widget
#: model_terms:ir.ui.view,arch_db:account_reconciliation_widget.account_journal_dashboard_kanban_view
msgid "Items"
msgstr "Lignes"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#: model:ir.model,name:account_reconciliation_widget.model_account_journal
#, python-format
msgid "Journal"
msgstr ""
#. module: account_reconciliation_widget
#: model:ir.model.fields,field_description:account_reconciliation_widget.field_account_bank_statement_line__move_name
msgid "Journal Entry Name"
msgstr "Pièce comptable"
#. module: account_reconciliation_widget
#: model:ir.model,name:account_reconciliation_widget.model_account_move_line
msgid "Journal Item"
msgstr "Écriture comptable"
#. module: account_reconciliation_widget
#: code:addons/account_reconciliation_widget/models/reconciliation_widget.py:0
#, python-format
msgid "Journal Items"
msgstr "Écritures comptables"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/js/reconciliation/reconciliation_action.js:0
#, python-format
msgid "Journal Items to Reconcile"
msgstr "Écritures comptables à lettrer"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/js/reconciliation/reconciliation_renderer.js:0
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Label"
msgstr "Libellé"
#. module: account_reconciliation_widget
#: model:ir.model.fields,field_description:account_reconciliation_widget.field_account_bank_statement____last_update
#: model:ir.model.fields,field_description:account_reconciliation_widget.field_account_bank_statement_line____last_update
#: model:ir.model.fields,field_description:account_reconciliation_widget.field_account_journal____last_update
#: model:ir.model.fields,field_description:account_reconciliation_widget.field_account_move_line____last_update
#: model:ir.model.fields,field_description:account_reconciliation_widget.field_account_reconciliation_widget____last_update
#: model:ir.model.fields,field_description:account_reconciliation_widget.field_res_company____last_update
msgid "Last Modified on"
msgstr "Dernière modification le"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Last Reconciliation:"
msgstr "Dernier lettrage:"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Load more"
msgstr "Charger plus"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Load more... ("
msgstr "Chargez plus... ("
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Manual Operations"
msgstr "Opérations manuelles"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Match with entries that are not from receivable/payable accounts"
msgstr ""
"Correspondance avec les écritures qui ne proviennent pas de comptes "
"débiteurs / créditeurs"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Miscellaneous Matching"
msgstr "Correspondances diverses"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Modify models"
msgstr "Modifier les modèles"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "New"
msgstr "Nouveau"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Note"
msgstr ""
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Nothing to do!"
msgstr "Rien à faire !"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/js/reconciliation/reconciliation_model.js:0
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Open balance"
msgstr "Balance d'ouverture"
#. module: account_reconciliation_widget
#: code:addons/account_reconciliation_widget/models/account_bank_statement.py:0
#, python-format
msgid ""
"Operation not allowed. Since your statement line already received a number "
"(%s), you cannot reconcile it entirely with existing journal entries "
"otherwise it would make a gap in the numbering. You should book an entry and"
" make a regular revert of it in case you want to cancel it."
msgstr ""
"Opération non autorisée. Puisque votre ligne de relevé a déjà reçu un nombre "
"(% s), vous ne pouvez pas la lettrer entièrement avec les écritures de "
"journal existantes, sinon cela créerait un vide dans la numérotation. Vous "
"devez réserver une entrée et en faire une annulation au cas où vous voudriez "
"l'annuler."
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Partner"
msgstr "Partenaire"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Pay your"
msgstr "Payer votre"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Presets config"
msgstr "Configuration par défaut"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#: model:ir.actions.client,name:account_reconciliation_widget.action_view_account_move_line_reconcile
#: model_terms:ir.ui.view,arch_db:account_reconciliation_widget.account_journal_dashboard_kanban_view
#: model_terms:ir.ui.view,arch_db:account_reconciliation_widget.view_bank_statement_form
#, python-format
msgid "Reconcile"
msgstr "Lettrer"
#. module: account_reconciliation_widget
#: model:ir.actions.client,name:account_reconciliation_widget.action_manual_reconciliation
#: model:ir.ui.menu,name:account_reconciliation_widget.menu_action_manual_reconciliation
msgid "Reconciliation"
msgstr "Lettrage"
#. module: account_reconciliation_widget
#: model:ir.actions.client,name:account_reconciliation_widget.action_bank_reconcile
msgid "Reconciliation on Bank Statements"
msgstr "Rapprochement bancaire"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Ref"
msgstr ""
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Residual"
msgstr "Reste"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Save and New"
msgstr "Sauvegarder et Nouveau"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/js/reconciliation/reconciliation_renderer.js:0
#, python-format
msgid "Select Partner"
msgstr "Sélectionner un partenaire"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Select a partner or choose a counterpart"
msgstr "Sélectionner un partenaire et choisissez une contrepartie"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Settings"
msgstr "Paramètres"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Skip"
msgstr "Passer"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/js/reconciliation/reconciliation_renderer.js:0
#, python-format
msgid "Some fields are undefined"
msgstr "Certains champs sont incomplets"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Tax Included in Price"
msgstr "Taxes incluses"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Taxes"
msgstr ""
#. module: account_reconciliation_widget
#: model:ir.model.fields,help:account_reconciliation_widget.field_account_bank_statement_line__move_name
msgid ""
"Technical field holding the number given to the journal entry, automatically"
" set when the statement line is reconciled then stored to set the same "
"number again if the line is cancelled, set to draft and re-processed again."
msgstr ""
"Champ technique contenant le numéro attribué à l'écriture de journal, "
"automatiquement défini lors du rapprochement de la ligne de relevé puis "
"stocké pour définir à nouveau le même numéro si la ligne est annulée, "
"définie sur brouillon et à nouveau traitée."
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "That's on average"
msgstr "C'est en moyenne"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/js/reconciliation/reconciliation_model.js:0
#, python-format
msgid "The amount %s is not a valid partial amount"
msgstr "Le montant %s n'est pas un montant partiel valide"
#. module: account_reconciliation_widget
#: model:ir.model.fields,help:account_reconciliation_widget.field_res_company__account_bank_reconciliation_start
msgid ""
"The bank reconciliation widget won't ask to reconcile payments older than this date.\n"
"This is useful if you install accounting after having used invoicing for some time and don't want to reconcile all the past payments with bank statements."
msgstr ""
"Le widget de rapprochement bancaire ne vous demandera pas de rapprocher les "
"paiements antérieurs à cette date.\n"
"Ceci est utile si vous installez la comptabilité après avoir utilisé la "
"facturation pendant un certain temps et que vous ne souhaitez pas rapprocher "
"tous les paiements passés avec les relevés bancaires."
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "There is nothing to reconcile."
msgstr "l n'y a rien à rapprocher."
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid ""
"This page displays all the bank transactions that are to be reconciled and "
"provides with a neat interface to do so."
msgstr ""
"Cette page affiche toutes les transactions bancaires à réconcilier et "
"fournit une interface soignée pour ce faire."
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "This payment is registered but not reconciled."
msgstr "Ce paiement est enregistré mais non rapproché."
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "To Check"
msgstr "A vérifier"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "To speed up reconciliation, define"
msgstr "Pour accélérer le rapprochement, spécifiez"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Transaction"
msgstr ""
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Validate"
msgstr "Valider"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Verify"
msgstr "Vérifier"
#. module: account_reconciliation_widget
#: code:addons/account_reconciliation_widget/models/account_move.py:0
#: code:addons/account_reconciliation_widget/models/account_move.py:0
#, python-format
msgid "Write-Off"
msgstr "Contrepassation"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Writeoff Date"
msgstr "Date de Contrepassation"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "You reconciled"
msgstr "Vous avez lettré"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "and follow-up customers"
msgstr "et les clients suivants"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "have been reconciled automatically."
msgstr "a été lettré automatiquement."
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "reconcile"
msgstr "Lettrer"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "reconciliation models"
msgstr "modèles de lettrage"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "remaining)"
msgstr "restant(s))"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "seconds per transaction."
msgstr "secondes par transaction."
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "statement lines"
msgstr "lignes"
#. module: account_reconciliation_widget
#: model_terms:ir.ui.view,arch_db:account_reconciliation_widget.account_journal_dashboard_kanban_view
msgid "to check"
msgstr "à vérifier"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "transactions in"
msgstr "transactions en"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "unpaid invoices"
msgstr "factures impayées"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "unreconciled entries"
msgstr "lignes non lettrées"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "vendor bills"
msgstr "factures fournisseurs"
+748
View File
@@ -0,0 +1,748 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * account_reconciliation_widget
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 14.0\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2021-04-13 12:46+0000\n"
"Last-Translator: Yves Le Doeuff <yld@alliasys.fr>\n"
"Language-Team: none\n"
"Language: fr_FR\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=n > 1;\n"
"X-Generator: Weblate 4.3.2\n"
#. module: account_reconciliation_widget
#: code:addons/account_reconciliation_widget/models/reconciliation_widget.py:0
#, python-format
msgid "A reconciliation must involve at least 2 move lines."
msgstr "Un lettrage doit inclure au moins 2 lignes."
#. module: account_reconciliation_widget
#: code:addons/account_reconciliation_widget/models/account_bank_statement.py:0
#: code:addons/account_reconciliation_widget/models/account_bank_statement.py:0
#, python-format
msgid "A selected move line was already reconciled."
msgstr "Une ligne sélectionnée à déjà été lettrée."
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/js/reconciliation/reconciliation_renderer.js:0
#: code:addons/account_reconciliation_widget/static/src/js/reconciliation/reconciliation_renderer.js:0
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Account"
msgstr "Compte"
#. module: account_reconciliation_widget
#: model:ir.model,name:account_reconciliation_widget.model_account_reconciliation_widget
msgid "Account Reconciliation widget"
msgstr "Outils de lettrage de compte"
#. module: account_reconciliation_widget
#: model:ir.model.fields,field_description:account_reconciliation_widget.field_account_bank_statement__accounting_date
msgid "Accounting Date"
msgstr "Date d'écriture"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid ""
"All invoices and payments have been matched, your accounts' balances are "
"clean."
msgstr "Toutes les factures et les paiements ont été rapprochés."
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Amount"
msgstr "Montant"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Analytic Acc."
msgstr "Compte ana."
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Analytic Tags."
msgstr ""
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/js/reconciliation/reconciliation_action.js:0
#, python-format
msgid "Bank Reconciliation"
msgstr "Rapprochement bancaire"
#. module: account_reconciliation_widget
#: model:ir.model.fields,field_description:account_reconciliation_widget.field_res_company__account_bank_reconciliation_start
msgid "Bank Reconciliation Threshold"
msgstr "Seuil de rapprochement bancaire"
#. module: account_reconciliation_widget
#: model:ir.model,name:account_reconciliation_widget.model_account_bank_statement
msgid "Bank Statement"
msgstr "Relevé bancaire"
#. module: account_reconciliation_widget
#: model:ir.model,name:account_reconciliation_widget.model_account_bank_statement_line
msgid "Bank Statement Line"
msgstr "Ligne de relevé bancaire"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Check all"
msgstr "Tout"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Check that you have no bank statement lines to"
msgstr "Vérifiez que vous n'avez pas de lignes de relevé bancaire à"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Choose counterpart or Create Write-off"
msgstr "Choisissez une contrepartie ou créez une contre passation"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Close"
msgstr "Fermer"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Close statement"
msgstr "Fermer"
#. module: account_reconciliation_widget
#: model:ir.model,name:account_reconciliation_widget.model_res_company
msgid "Companies"
msgstr "Sociétés"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Congrats, you're all done!"
msgstr "Félicitation, vous avez terminé !"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Create a counterpart"
msgstr "Créer une contrepartie"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Create model"
msgstr "Créer un modèle"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Customer/Vendor Matching"
msgstr "Client/Fournisseur correspondant"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Date"
msgstr ""
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Description"
msgstr ""
#. module: account_reconciliation_widget
#: model:ir.model.fields,field_description:account_reconciliation_widget.field_account_bank_statement__display_name
#: model:ir.model.fields,field_description:account_reconciliation_widget.field_account_bank_statement_line__display_name
#: model:ir.model.fields,field_description:account_reconciliation_widget.field_account_journal__display_name
#: model:ir.model.fields,field_description:account_reconciliation_widget.field_account_move_line__display_name
#: model:ir.model.fields,field_description:account_reconciliation_widget.field_account_reconciliation_widget__display_name
#: model:ir.model.fields,field_description:account_reconciliation_widget.field_res_company__display_name
msgid "Display Name"
msgstr "Nom affiché"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Due Date"
msgstr "Date d'échéance"
#. module: account_reconciliation_widget
#: code:addons/account_reconciliation_widget/models/account_move.py:0
#, python-format
msgid "Either pass both debit and credit or none."
msgstr "Soit vous passez à la fois le débit et le crédit, soit aucun."
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "External link"
msgstr "Lien externe"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Filter on account, label, partner, amount,..."
msgstr "Filtrer par compte, libellé, partenaire, montant, ..."
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "From now on, you may want to:"
msgstr "A partir de maintenant, vous souhaitez :"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Go to bank statement(s)"
msgstr "Aller au relevé bancaire"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Good Job!"
msgstr "Bon travail !"
#. module: account_reconciliation_widget
#: model:ir.model.fields,field_description:account_reconciliation_widget.field_account_bank_statement__id
#: model:ir.model.fields,field_description:account_reconciliation_widget.field_account_bank_statement_line__id
#: model:ir.model.fields,field_description:account_reconciliation_widget.field_account_journal__id
#: model:ir.model.fields,field_description:account_reconciliation_widget.field_account_move_line__id
#: model:ir.model.fields,field_description:account_reconciliation_widget.field_account_reconciliation_widget__id
#: model:ir.model.fields,field_description:account_reconciliation_widget.field_res_company__id
msgid "ID"
msgstr ""
#. module: account_reconciliation_widget
#: model:ir.model.fields,help:account_reconciliation_widget.field_account_bank_statement__accounting_date
msgid ""
"If set, the accounting entries created during the bank statement reconciliation process will be created at this date.\n"
"This is useful if the accounting period in which the entries should normally be booked is already closed."
msgstr ""
"S'il est défini, les écritures comptables créées lors du processus de "
"rapprochement des relevés bancaires seront créées à cette date.\n"
"Ceci est utile si la période comptable dans laquelle les écritures doivent "
"normalement être comptabilisées est déjà clôturée."
#. module: account_reconciliation_widget
#: code:addons/account_reconciliation_widget/models/account_move.py:0
#, python-format
msgid ""
"It is mandatory to specify an account and a journal to create a write-off."
msgstr ""
"Il est obligatoire de spécifier un compte et un journal pour créer une "
"contrepassation."
#. module: account_reconciliation_widget
#: model_terms:ir.ui.view,arch_db:account_reconciliation_widget.account_journal_dashboard_kanban_view
msgid "Items"
msgstr "Lignes"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#: model:ir.model,name:account_reconciliation_widget.model_account_journal
#, python-format
msgid "Journal"
msgstr ""
#. module: account_reconciliation_widget
#: model:ir.model.fields,field_description:account_reconciliation_widget.field_account_bank_statement_line__move_name
msgid "Journal Entry Name"
msgstr "Pièce comptable"
#. module: account_reconciliation_widget
#: model:ir.model,name:account_reconciliation_widget.model_account_move_line
msgid "Journal Item"
msgstr "Écriture comptable"
#. module: account_reconciliation_widget
#: code:addons/account_reconciliation_widget/models/reconciliation_widget.py:0
#, python-format
msgid "Journal Items"
msgstr "Écritures comptables"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/js/reconciliation/reconciliation_action.js:0
#, python-format
msgid "Journal Items to Reconcile"
msgstr "Écritures comptables à lettrer"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/js/reconciliation/reconciliation_renderer.js:0
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Label"
msgstr "Libellé"
#. module: account_reconciliation_widget
#: model:ir.model.fields,field_description:account_reconciliation_widget.field_account_bank_statement____last_update
#: model:ir.model.fields,field_description:account_reconciliation_widget.field_account_bank_statement_line____last_update
#: model:ir.model.fields,field_description:account_reconciliation_widget.field_account_journal____last_update
#: model:ir.model.fields,field_description:account_reconciliation_widget.field_account_move_line____last_update
#: model:ir.model.fields,field_description:account_reconciliation_widget.field_account_reconciliation_widget____last_update
#: model:ir.model.fields,field_description:account_reconciliation_widget.field_res_company____last_update
msgid "Last Modified on"
msgstr "Dernière modification le"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Last Reconciliation:"
msgstr "Dernier lettrage:"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Load more"
msgstr "Charger plus"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Load more... ("
msgstr "Chargez plus... ("
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Manual Operations"
msgstr "Opérations manuelles"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Match with entries that are not from receivable/payable accounts"
msgstr ""
"Correspondance avec les écritures qui ne proviennent pas de comptes "
"débiteurs / créditeurs"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Miscellaneous Matching"
msgstr "Correspondances diverses"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Modify models"
msgstr "Modifier les modèles"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "New"
msgstr "Nouveau"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Note"
msgstr ""
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Nothing to do!"
msgstr "Rien à faire !"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/js/reconciliation/reconciliation_model.js:0
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Open balance"
msgstr "Balance d'ouverture"
#. module: account_reconciliation_widget
#: code:addons/account_reconciliation_widget/models/account_bank_statement.py:0
#, python-format
msgid ""
"Operation not allowed. Since your statement line already received a number "
"(%s), you cannot reconcile it entirely with existing journal entries "
"otherwise it would make a gap in the numbering. You should book an entry and"
" make a regular revert of it in case you want to cancel it."
msgstr ""
"Opération non autorisée. Puisque votre ligne de relevé a déjà reçu un nombre "
"(% s), vous ne pouvez pas la lettrer entièrement avec les écritures de "
"journal existantes, sinon cela créerait un vide dans la numérotation. Vous "
"devez réserver une entrée et en faire une annulation au cas où vous voudriez "
"l'annuler."
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Partner"
msgstr "Partenaire"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Pay your"
msgstr "Payer votre"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Presets config"
msgstr "Configuration par défaut"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#: model:ir.actions.client,name:account_reconciliation_widget.action_view_account_move_line_reconcile
#: model_terms:ir.ui.view,arch_db:account_reconciliation_widget.account_journal_dashboard_kanban_view
#: model_terms:ir.ui.view,arch_db:account_reconciliation_widget.view_bank_statement_form
#, python-format
msgid "Reconcile"
msgstr "Lettrer"
#. module: account_reconciliation_widget
#: model:ir.actions.client,name:account_reconciliation_widget.action_manual_reconciliation
#: model:ir.ui.menu,name:account_reconciliation_widget.menu_action_manual_reconciliation
msgid "Reconciliation"
msgstr "Lettrage"
#. module: account_reconciliation_widget
#: model:ir.actions.client,name:account_reconciliation_widget.action_bank_reconcile
msgid "Reconciliation on Bank Statements"
msgstr "Rapprochement bancaire"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Ref"
msgstr ""
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Residual"
msgstr "Reste"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Save and New"
msgstr "Sauvegarder et Nouveau"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/js/reconciliation/reconciliation_renderer.js:0
#, python-format
msgid "Select Partner"
msgstr "Sélectionner un partenaire"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Select a partner or choose a counterpart"
msgstr "Sélectionner un partenaire ou choisissez une contrepartie"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Settings"
msgstr "Paramètres"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Skip"
msgstr "Passer"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/js/reconciliation/reconciliation_renderer.js:0
#, python-format
msgid "Some fields are undefined"
msgstr "Certains champs sont incomplets"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Tax Included in Price"
msgstr "Taxes incluses"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Taxes"
msgstr ""
#. module: account_reconciliation_widget
#: model:ir.model.fields,help:account_reconciliation_widget.field_account_bank_statement_line__move_name
msgid ""
"Technical field holding the number given to the journal entry, automatically"
" set when the statement line is reconciled then stored to set the same "
"number again if the line is cancelled, set to draft and re-processed again."
msgstr ""
"Champ technique contenant le numéro attribué à l'écriture de journal, "
"automatiquement défini lors du rapprochement de la ligne de relevé puis "
"stocké pour définir à nouveau le même numéro si la ligne est annulée, "
"définie sur brouillon et à nouveau traitée."
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "That's on average"
msgstr "C'est en moyenne"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/js/reconciliation/reconciliation_model.js:0
#, python-format
msgid "The amount %s is not a valid partial amount"
msgstr "Le montant %s n'est pas un montant partiel valide"
#. module: account_reconciliation_widget
#: model:ir.model.fields,help:account_reconciliation_widget.field_res_company__account_bank_reconciliation_start
msgid ""
"The bank reconciliation widget won't ask to reconcile payments older than this date.\n"
"This is useful if you install accounting after having used invoicing for some time and don't want to reconcile all the past payments with bank statements."
msgstr ""
"Le widget de rapprochement bancaire ne vous demandera pas de rapprocher les "
"paiements antérieurs à cette date.\n"
"Ceci est utile si vous installez la comptabilité après avoir utilisé la "
"facturation pendant un certain temps et que vous ne souhaitez pas rapprocher "
"tous les paiements passés avec les relevés bancaires."
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "There is nothing to reconcile."
msgstr "Il n'y a rien à rapprocher."
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid ""
"This page displays all the bank transactions that are to be reconciled and "
"provides with a neat interface to do so."
msgstr ""
"Cette page affiche toutes les transactions bancaires à réconcilier et "
"fournit une interface soignée pour ce faire."
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "This payment is registered but not reconciled."
msgstr "Ce paiement est enregistré mais non rapproché."
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "To Check"
msgstr "A vérifier"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "To speed up reconciliation, define"
msgstr "Pour accélérer le rapprochement, spécifiez"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Transaction"
msgstr ""
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Validate"
msgstr "Valider"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Verify"
msgstr "Vérifier"
#. module: account_reconciliation_widget
#: code:addons/account_reconciliation_widget/models/account_move.py:0
#: code:addons/account_reconciliation_widget/models/account_move.py:0
#, python-format
msgid "Write-Off"
msgstr "Contrepassation"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Writeoff Date"
msgstr "Date de Contrepassation"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "You reconciled"
msgstr "Vous avez lettré"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "and follow-up customers"
msgstr "et les clients suivants"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "have been reconciled automatically."
msgstr "a été lettré automatiquement."
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "reconcile"
msgstr "Lettrer"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "reconciliation models"
msgstr "modèles de lettrage"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "remaining)"
msgstr "restant(s))"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "seconds per transaction."
msgstr "secondes par transaction."
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "statement lines"
msgstr "lignes"
#. module: account_reconciliation_widget
#: model_terms:ir.ui.view,arch_db:account_reconciliation_widget.account_journal_dashboard_kanban_view
msgid "to check"
msgstr "à vérifier"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "transactions in"
msgstr "transactions en"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "unpaid invoices"
msgstr "factures impayées"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "unreconciled entries"
msgstr "lignes non lettrées"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "vendor bills"
msgstr "factures fournisseurs"
+747
View File
@@ -0,0 +1,747 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * account_reconciliation_widget
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 14.0\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2021-04-18 10:46+0000\n"
"Last-Translator: Bosd <c5e2fd43-d292-4c90-9d1f-74ff3436329a@anonaddy.me>\n"
"Language-Team: none\n"
"Language: nl\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 4.3.2\n"
#. module: account_reconciliation_widget
#: code:addons/account_reconciliation_widget/models/reconciliation_widget.py:0
#, python-format
msgid "A reconciliation must involve at least 2 move lines."
msgstr "Een aflettering moet minstens 2 mutatieregels hebben."
#. module: account_reconciliation_widget
#: code:addons/account_reconciliation_widget/models/account_bank_statement.py:0
#: code:addons/account_reconciliation_widget/models/account_bank_statement.py:0
#, python-format
msgid "A selected move line was already reconciled."
msgstr "Een geselecteerde boeking is al afgeletterd."
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/js/reconciliation/reconciliation_renderer.js:0
#: code:addons/account_reconciliation_widget/static/src/js/reconciliation/reconciliation_renderer.js:0
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Account"
msgstr "rekening"
#. module: account_reconciliation_widget
#: model:ir.model,name:account_reconciliation_widget.model_account_reconciliation_widget
msgid "Account Reconciliation widget"
msgstr "Boekhoudkundige verwerkingswidget"
#. module: account_reconciliation_widget
#: model:ir.model.fields,field_description:account_reconciliation_widget.field_account_bank_statement__accounting_date
msgid "Accounting Date"
msgstr "Boekhoud datum"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid ""
"All invoices and payments have been matched, your accounts' balances are "
"clean."
msgstr ""
"Alle facturen en betalingen zijn gematched, uw rekeningsaldo's zijn "
"\"opgeschoond\"."
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Amount"
msgstr "Bedrag"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Analytic Acc."
msgstr "Kostenplaats"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Analytic Tags."
msgstr "Kostenplaatslabels"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/js/reconciliation/reconciliation_action.js:0
#, python-format
msgid "Bank Reconciliation"
msgstr "Bankafschrift aflettering"
#. module: account_reconciliation_widget
#: model:ir.model.fields,field_description:account_reconciliation_widget.field_res_company__account_bank_reconciliation_start
msgid "Bank Reconciliation Threshold"
msgstr "Bank aflevering drempel"
#. module: account_reconciliation_widget
#: model:ir.model,name:account_reconciliation_widget.model_account_bank_statement
msgid "Bank Statement"
msgstr "Bankafschrift"
#. module: account_reconciliation_widget
#: model:ir.model,name:account_reconciliation_widget.model_account_bank_statement_line
msgid "Bank Statement Line"
msgstr "Bankafschriftregel"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Check all"
msgstr "Controleer alle"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Check that you have no bank statement lines to"
msgstr "Controleren of er geen bankafschrift regels zijn om"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Choose counterpart or Create Write-off"
msgstr "Kies een tegenrekening of maak een afschrijving"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Close"
msgstr "sluiten"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Close statement"
msgstr "afschrift afsluiten"
#. module: account_reconciliation_widget
#: model:ir.model,name:account_reconciliation_widget.model_res_company
msgid "Companies"
msgstr "Bedrijven"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Congrats, you're all done!"
msgstr "Gefeliciteerd, alles is voltooid!"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Create a counterpart"
msgstr "Maak een tegenrekening"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Create model"
msgstr "Maak model"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Customer/Vendor Matching"
msgstr "Klant/Leverancier matching"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Date"
msgstr "Datum"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Description"
msgstr "Omschrijving"
#. module: account_reconciliation_widget
#: model:ir.model.fields,field_description:account_reconciliation_widget.field_account_bank_statement__display_name
#: model:ir.model.fields,field_description:account_reconciliation_widget.field_account_bank_statement_line__display_name
#: model:ir.model.fields,field_description:account_reconciliation_widget.field_account_journal__display_name
#: model:ir.model.fields,field_description:account_reconciliation_widget.field_account_move_line__display_name
#: model:ir.model.fields,field_description:account_reconciliation_widget.field_account_reconciliation_widget__display_name
#: model:ir.model.fields,field_description:account_reconciliation_widget.field_res_company__display_name
msgid "Display Name"
msgstr "Weergavenaam"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Due Date"
msgstr "Vervaldatum"
#. module: account_reconciliation_widget
#: code:addons/account_reconciliation_widget/models/account_move.py:0
#, python-format
msgid "Either pass both debit and credit or none."
msgstr "Of beide debet en credit passeren of geen."
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "External link"
msgstr "Externe link"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Filter on account, label, partner, amount,..."
msgstr "Filter op rekening, label, relatie, bedrag,...."
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "From now on, you may want to:"
msgstr "Vanaf nu, kunt u:"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Go to bank statement(s)"
msgstr "Ga naar bankafschrift(en)"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Good Job!"
msgstr "Goed gedaan!"
#. module: account_reconciliation_widget
#: model:ir.model.fields,field_description:account_reconciliation_widget.field_account_bank_statement__id
#: model:ir.model.fields,field_description:account_reconciliation_widget.field_account_bank_statement_line__id
#: model:ir.model.fields,field_description:account_reconciliation_widget.field_account_journal__id
#: model:ir.model.fields,field_description:account_reconciliation_widget.field_account_move_line__id
#: model:ir.model.fields,field_description:account_reconciliation_widget.field_account_reconciliation_widget__id
#: model:ir.model.fields,field_description:account_reconciliation_widget.field_res_company__id
msgid "ID"
msgstr "ID"
#. module: account_reconciliation_widget
#: model:ir.model.fields,help:account_reconciliation_widget.field_account_bank_statement__accounting_date
msgid ""
"If set, the accounting entries created during the bank statement reconciliation process will be created at this date.\n"
"This is useful if the accounting period in which the entries should normally be booked is already closed."
msgstr ""
"Indien ingesteld, worden de boekhoudingsboekingen die tijdens het "
"aflettersproces voor bankafschriften zijn gemaakt, op deze datum gemaakt.\n"
"Dit is handig als de boekhoudperiode waarin de boekingen normaal moeten "
"worden geboekt, al is gesloten."
#. module: account_reconciliation_widget
#: code:addons/account_reconciliation_widget/models/account_move.py:0
#, python-format
msgid ""
"It is mandatory to specify an account and a journal to create a write-off."
msgstr ""
"Het is vereist om een rekening en dagboek te specifiëren om een afschrijving "
"te kunnen aanmaken."
#. module: account_reconciliation_widget
#: model_terms:ir.ui.view,arch_db:account_reconciliation_widget.account_journal_dashboard_kanban_view
msgid "Items"
msgstr "Items"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#: model:ir.model,name:account_reconciliation_widget.model_account_journal
#, python-format
msgid "Journal"
msgstr "Dagboek"
#. module: account_reconciliation_widget
#: model:ir.model.fields,field_description:account_reconciliation_widget.field_account_bank_statement_line__move_name
msgid "Journal Entry Name"
msgstr "Dagboek Invoernaam"
#. module: account_reconciliation_widget
#: model:ir.model,name:account_reconciliation_widget.model_account_move_line
msgid "Journal Item"
msgstr "Dagboek Item"
#. module: account_reconciliation_widget
#: code:addons/account_reconciliation_widget/models/reconciliation_widget.py:0
#, python-format
msgid "Journal Items"
msgstr "Dagboek Items"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/js/reconciliation/reconciliation_action.js:0
#, python-format
msgid "Journal Items to Reconcile"
msgstr "Dagboek Items om afteletteren"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/js/reconciliation/reconciliation_renderer.js:0
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Label"
msgstr "Label"
#. module: account_reconciliation_widget
#: model:ir.model.fields,field_description:account_reconciliation_widget.field_account_bank_statement____last_update
#: model:ir.model.fields,field_description:account_reconciliation_widget.field_account_bank_statement_line____last_update
#: model:ir.model.fields,field_description:account_reconciliation_widget.field_account_journal____last_update
#: model:ir.model.fields,field_description:account_reconciliation_widget.field_account_move_line____last_update
#: model:ir.model.fields,field_description:account_reconciliation_widget.field_account_reconciliation_widget____last_update
#: model:ir.model.fields,field_description:account_reconciliation_widget.field_res_company____last_update
msgid "Last Modified on"
msgstr "Laatst bijgewerkt op"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Last Reconciliation:"
msgstr "Laatste aflettering:"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Load more"
msgstr "Laad meer"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Load more... ("
msgstr "Laad meer... ("
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Manual Operations"
msgstr "Handmatige acties"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Match with entries that are not from receivable/payable accounts"
msgstr "Match met boekingen die niet van debiteuren/crediteuren rekeningen zijn"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Miscellaneous Matching"
msgstr "Diversen matching"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Modify models"
msgstr "wijzig modellen"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "New"
msgstr "Nieuw"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Note"
msgstr "Notitie"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Nothing to do!"
msgstr "Niets te doen!"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/js/reconciliation/reconciliation_model.js:0
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Open balance"
msgstr "Openingsbalans"
#. module: account_reconciliation_widget
#: code:addons/account_reconciliation_widget/models/account_bank_statement.py:0
#, python-format
msgid ""
"Operation not allowed. Since your statement line already received a number "
"(%s), you cannot reconcile it entirely with existing journal entries "
"otherwise it would make a gap in the numbering. You should book an entry and"
" make a regular revert of it in case you want to cancel it."
msgstr ""
"Bewerking niet toegelaten. Aangezien uw bankafschriftregel reeds een nummer "
"(%s) heeft gekregen, kunt u het niet compleet afletteren tegen bestaande "
"boekingen anders ontstaat er een gat in de nummering. U kan de boeking maken "
"en terugzetten wanneer u deze wil annuleren."
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Partner"
msgstr "Relatie"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Pay your"
msgstr "Betaal uw"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Presets config"
msgstr "Voorinstellingen"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#: model:ir.actions.client,name:account_reconciliation_widget.action_view_account_move_line_reconcile
#: model_terms:ir.ui.view,arch_db:account_reconciliation_widget.account_journal_dashboard_kanban_view
#: model_terms:ir.ui.view,arch_db:account_reconciliation_widget.view_bank_statement_form
#, python-format
msgid "Reconcile"
msgstr "Afletteren"
#. module: account_reconciliation_widget
#: model:ir.actions.client,name:account_reconciliation_widget.action_manual_reconciliation
#: model:ir.ui.menu,name:account_reconciliation_widget.menu_action_manual_reconciliation
msgid "Reconciliation"
msgstr "Aflettering"
#. module: account_reconciliation_widget
#: model:ir.actions.client,name:account_reconciliation_widget.action_bank_reconcile
msgid "Reconciliation on Bank Statements"
msgstr "Aflettering op bankafschriften"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Ref"
msgstr "Ref"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Residual"
msgstr "Resterend"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Save and New"
msgstr "Opslaan en Nieuw"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/js/reconciliation/reconciliation_renderer.js:0
#, python-format
msgid "Select Partner"
msgstr "Selecteer relatie"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Select a partner or choose a counterpart"
msgstr "Selecteer een relatie of kies een tegenrekening"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Settings"
msgstr "Instellingen"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Skip"
msgstr "Overslaan"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/js/reconciliation/reconciliation_renderer.js:0
#, python-format
msgid "Some fields are undefined"
msgstr "Sommige velden zijn niet ingevuld"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Tax Included in Price"
msgstr "Prijs Inclusief BTW"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Taxes"
msgstr "Belastingen"
#. module: account_reconciliation_widget
#: model:ir.model.fields,help:account_reconciliation_widget.field_account_bank_statement_line__move_name
msgid ""
"Technical field holding the number given to the journal entry, automatically"
" set when the statement line is reconciled then stored to set the same "
"number again if the line is cancelled, set to draft and re-processed again."
msgstr ""
"Technisch veld welke het nummer geeft aan de boeking, automatisch ingesteld "
"wanneer de bankafschriftregel is afgeletterd en dan opgeslagen zodat het "
"zelfde nummer kan worden gebruikt wanneer de boeking geannuleerd en daarna "
"weer geboekt wordt."
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "That's on average"
msgstr "Dat is gemiddeld"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/js/reconciliation/reconciliation_model.js:0
#, python-format
msgid "The amount %s is not a valid partial amount"
msgstr "Het bedrag %s is geen geldig deelbedrag"
#. module: account_reconciliation_widget
#: model:ir.model.fields,help:account_reconciliation_widget.field_res_company__account_bank_reconciliation_start
msgid ""
"The bank reconciliation widget won't ask to reconcile payments older than this date.\n"
"This is useful if you install accounting after having used invoicing for some time and don't want to reconcile all the past payments with bank statements."
msgstr ""
"De bank afletterfunctie zal niet vragen om de betalingen af te letteren "
"welke ouder zijn dan deze datum.\n"
"Dit is zinvol als u de boekhouding applicatie installeerde nadat u "
"facturatie reeds geruime tijd in gebruik had en niet wil afletteren van "
"oudere betalingen met bankafschriften."
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "There is nothing to reconcile."
msgstr "Er is niets af te letteren."
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid ""
"This page displays all the bank transactions that are to be reconciled and "
"provides with a neat interface to do so."
msgstr ""
"Deze pagina geeft alle banktransacties weer die afgeletterd dienen te "
"worden, tevens is er een duidelijke interface om dit uit te voeren."
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "This payment is registered but not reconciled."
msgstr "Deze betaling is geregistreerd maar niet afgeletterd."
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "To Check"
msgstr "Te controleren"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "To speed up reconciliation, define"
msgstr "Om het afletteren te versnellen, defineer"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Transaction"
msgstr "Transactie"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Validate"
msgstr "Valideer"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Verify"
msgstr "Verifiër"
#. module: account_reconciliation_widget
#: code:addons/account_reconciliation_widget/models/account_move.py:0
#: code:addons/account_reconciliation_widget/models/account_move.py:0
#, python-format
msgid "Write-Off"
msgstr "afschrijving"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Writeoff Date"
msgstr "Afschrijvingsdatum"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "You reconciled"
msgstr "U letterde"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "and follow-up customers"
msgstr "en betaal herinneringen"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "have been reconciled automatically."
msgstr "zijn automatisch afgeletterd."
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "reconcile"
msgstr "afletteren"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "reconciliation models"
msgstr "afletteringsmodellen"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "remaining)"
msgstr "resterend)"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "seconds per transaction."
msgstr "seconden per transactie."
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "statement lines"
msgstr "afschriftregels"
#. module: account_reconciliation_widget
#: model_terms:ir.ui.view,arch_db:account_reconciliation_widget.account_journal_dashboard_kanban_view
msgid "to check"
msgstr "te controleren"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "transactions in"
msgstr "transacties in"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "unpaid invoices"
msgstr "onbetaalde facturen"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "unreconciled entries"
msgstr "niet afgeletterde items"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "vendor bills"
msgstr "inkoopfacturen"
+746
View File
@@ -0,0 +1,746 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * account_reconciliation_widget
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 14.0\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2021-02-01 04:44+0000\n"
"Last-Translator: Eder Brito <britoederr@gmail.com>\n"
"Language-Team: none\n"
"Language: pt_BR\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=n > 1;\n"
"X-Generator: Weblate 4.3.2\n"
#. module: account_reconciliation_widget
#: code:addons/account_reconciliation_widget/models/reconciliation_widget.py:0
#, python-format
msgid "A reconciliation must involve at least 2 move lines."
msgstr "Uma reconciliação deve envolver pelo menos 2 linhas de movimento."
#. module: account_reconciliation_widget
#: code:addons/account_reconciliation_widget/models/account_bank_statement.py:0
#: code:addons/account_reconciliation_widget/models/account_bank_statement.py:0
#, python-format
msgid "A selected move line was already reconciled."
msgstr "A linha de movimento selecionada já foi reconciliada."
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/js/reconciliation/reconciliation_renderer.js:0
#: code:addons/account_reconciliation_widget/static/src/js/reconciliation/reconciliation_renderer.js:0
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Account"
msgstr "Conta"
#. module: account_reconciliation_widget
#: model:ir.model,name:account_reconciliation_widget.model_account_reconciliation_widget
msgid "Account Reconciliation widget"
msgstr "Widget de Reconciliação de Conta"
#. module: account_reconciliation_widget
#: model:ir.model.fields,field_description:account_reconciliation_widget.field_account_bank_statement__accounting_date
msgid "Accounting Date"
msgstr "Data Contábil"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid ""
"All invoices and payments have been matched, your accounts' balances are "
"clean."
msgstr ""
"Todas as faturas e pagamentos foram correspondidos, os saldos de suas contas "
"estão limpos."
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Amount"
msgstr "Valor"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Analytic Acc."
msgstr "Conta Analítica"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Analytic Tags."
msgstr "Marcador Analítico"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/js/reconciliation/reconciliation_action.js:0
#, python-format
msgid "Bank Reconciliation"
msgstr "Reconciliação Bancária"
#. module: account_reconciliation_widget
#: model:ir.model.fields,field_description:account_reconciliation_widget.field_res_company__account_bank_reconciliation_start
msgid "Bank Reconciliation Threshold"
msgstr "Limite de Reconciliação Bancária"
#. module: account_reconciliation_widget
#: model:ir.model,name:account_reconciliation_widget.model_account_bank_statement
msgid "Bank Statement"
msgstr "Extrato Bancário"
#. module: account_reconciliation_widget
#: model:ir.model,name:account_reconciliation_widget.model_account_bank_statement_line
msgid "Bank Statement Line"
msgstr "Linha de Extrato Bancário"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Check all"
msgstr "Verificar todos"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Check that you have no bank statement lines to"
msgstr "Verifique se você não tem linhas de extrato bancário para"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Choose counterpart or Create Write-off"
msgstr "Escolha a contraparte ou Crie uma Baixa"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Close"
msgstr "Fechar"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Close statement"
msgstr "Fechar Extrato"
#. module: account_reconciliation_widget
#: model:ir.model,name:account_reconciliation_widget.model_res_company
msgid "Companies"
msgstr "Empresas"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Congrats, you're all done!"
msgstr "Parabéns, você concluiu tudo!"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Create a counterpart"
msgstr "Crie uma contraparte"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Create model"
msgstr "Criar modelo"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Customer/Vendor Matching"
msgstr "Correspondencia de Cliente/Fornecedor"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Date"
msgstr "Data"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Description"
msgstr "Descrição"
#. module: account_reconciliation_widget
#: model:ir.model.fields,field_description:account_reconciliation_widget.field_account_bank_statement__display_name
#: model:ir.model.fields,field_description:account_reconciliation_widget.field_account_bank_statement_line__display_name
#: model:ir.model.fields,field_description:account_reconciliation_widget.field_account_journal__display_name
#: model:ir.model.fields,field_description:account_reconciliation_widget.field_account_move_line__display_name
#: model:ir.model.fields,field_description:account_reconciliation_widget.field_account_reconciliation_widget__display_name
#: model:ir.model.fields,field_description:account_reconciliation_widget.field_res_company__display_name
msgid "Display Name"
msgstr "Nome de Exibição"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Due Date"
msgstr "Data de Vencimento"
#. module: account_reconciliation_widget
#: code:addons/account_reconciliation_widget/models/account_move.py:0
#, python-format
msgid "Either pass both debit and credit or none."
msgstr "Ou passar tanto de débito e de crédito ou nenhum."
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "External link"
msgstr "Link Externo"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Filter on account, label, partner, amount,..."
msgstr "Fitro em conta, rótulo, parceiro, valor,..."
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "From now on, you may want to:"
msgstr "De agora em diante, você pode querer:"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Go to bank statement(s)"
msgstr "Vá para o extrato bancário(s)"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Good Job!"
msgstr "Bom Trabalho!"
#. module: account_reconciliation_widget
#: model:ir.model.fields,field_description:account_reconciliation_widget.field_account_bank_statement__id
#: model:ir.model.fields,field_description:account_reconciliation_widget.field_account_bank_statement_line__id
#: model:ir.model.fields,field_description:account_reconciliation_widget.field_account_journal__id
#: model:ir.model.fields,field_description:account_reconciliation_widget.field_account_move_line__id
#: model:ir.model.fields,field_description:account_reconciliation_widget.field_account_reconciliation_widget__id
#: model:ir.model.fields,field_description:account_reconciliation_widget.field_res_company__id
msgid "ID"
msgstr "ID"
#. module: account_reconciliation_widget
#: model:ir.model.fields,help:account_reconciliation_widget.field_account_bank_statement__accounting_date
msgid ""
"If set, the accounting entries created during the bank statement reconciliation process will be created at this date.\n"
"This is useful if the accounting period in which the entries should normally be booked is already closed."
msgstr ""
"Se definido, os lançamentos contábeis criados durante o processo de "
"reconciliação do extrato bancário serão criados nesta data.\n"
"Isso é útil se o período contábil no qual as entradas normalmente deveriam "
"ser registradas já estiver fechado."
#. module: account_reconciliation_widget
#: code:addons/account_reconciliation_widget/models/account_move.py:0
#, python-format
msgid ""
"It is mandatory to specify an account and a journal to create a write-off."
msgstr "É obrigatório especificar uma conta e um diário para criar uma baixa."
#. module: account_reconciliation_widget
#: model_terms:ir.ui.view,arch_db:account_reconciliation_widget.account_journal_dashboard_kanban_view
msgid "Items"
msgstr "Ítens"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#: model:ir.model,name:account_reconciliation_widget.model_account_journal
#, python-format
msgid "Journal"
msgstr "Diário"
#. module: account_reconciliation_widget
#: model:ir.model.fields,field_description:account_reconciliation_widget.field_account_bank_statement_line__move_name
msgid "Journal Entry Name"
msgstr "Nome da Entrada de Diário"
#. module: account_reconciliation_widget
#: model:ir.model,name:account_reconciliation_widget.model_account_move_line
msgid "Journal Item"
msgstr "Ítem de Diário"
#. module: account_reconciliation_widget
#: code:addons/account_reconciliation_widget/models/reconciliation_widget.py:0
#, python-format
msgid "Journal Items"
msgstr "Ítens de Diário"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/js/reconciliation/reconciliation_action.js:0
#, python-format
msgid "Journal Items to Reconcile"
msgstr "Ítens de Diário para Reconciliar"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/js/reconciliation/reconciliation_renderer.js:0
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Label"
msgstr "Rótulo"
#. module: account_reconciliation_widget
#: model:ir.model.fields,field_description:account_reconciliation_widget.field_account_bank_statement____last_update
#: model:ir.model.fields,field_description:account_reconciliation_widget.field_account_bank_statement_line____last_update
#: model:ir.model.fields,field_description:account_reconciliation_widget.field_account_journal____last_update
#: model:ir.model.fields,field_description:account_reconciliation_widget.field_account_move_line____last_update
#: model:ir.model.fields,field_description:account_reconciliation_widget.field_account_reconciliation_widget____last_update
#: model:ir.model.fields,field_description:account_reconciliation_widget.field_res_company____last_update
msgid "Last Modified on"
msgstr "Última Modificação em"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Last Reconciliation:"
msgstr "Última Reconciliação:"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Load more"
msgstr "Carregar mais"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Load more... ("
msgstr "Carregar mais...("
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Manual Operations"
msgstr "Operações Manuais"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Match with entries that are not from receivable/payable accounts"
msgstr "Corresponder com entradas que não são de contas a receber/pagar"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Miscellaneous Matching"
msgstr "Corresponder com Diversos"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Modify models"
msgstr "Modificar modelos"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "New"
msgstr "Novo"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Note"
msgstr "Nota"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Nothing to do!"
msgstr "Nada a fazer!"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/js/reconciliation/reconciliation_model.js:0
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Open balance"
msgstr "Saldo Aberto"
#. module: account_reconciliation_widget
#: code:addons/account_reconciliation_widget/models/account_bank_statement.py:0
#, python-format
msgid ""
"Operation not allowed. Since your statement line already received a number "
"(%s), you cannot reconcile it entirely with existing journal entries "
"otherwise it would make a gap in the numbering. You should book an entry and"
" make a regular revert of it in case you want to cancel it."
msgstr ""
"Operação não permitida. Visto que sua linha de extrato já recebeu um número "
"(%s), você não pode reconciliá-la totalmente com as entradas de diário "
"existentes, caso contrário haveria uma lacuna na numeração. Você deve "
"reservar uma entrada e fazer uma reversão regular no caso de querer "
"cancelá-la."
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Partner"
msgstr "Parceiro"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Pay your"
msgstr "Pagar seu"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Presets config"
msgstr "Configuração predefinida"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#: model:ir.actions.client,name:account_reconciliation_widget.action_view_account_move_line_reconcile
#: model_terms:ir.ui.view,arch_db:account_reconciliation_widget.account_journal_dashboard_kanban_view
#: model_terms:ir.ui.view,arch_db:account_reconciliation_widget.view_bank_statement_form
#, python-format
msgid "Reconcile"
msgstr "Reconciliar"
#. module: account_reconciliation_widget
#: model:ir.actions.client,name:account_reconciliation_widget.action_manual_reconciliation
#: model:ir.ui.menu,name:account_reconciliation_widget.menu_action_manual_reconciliation
msgid "Reconciliation"
msgstr "Reconciliação"
#. module: account_reconciliation_widget
#: model:ir.actions.client,name:account_reconciliation_widget.action_bank_reconcile
msgid "Reconciliation on Bank Statements"
msgstr "Reconciliação em Extratos Bancários"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Ref"
msgstr "Ref"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Residual"
msgstr "Residual"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Save and New"
msgstr "Salvar e Novo"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/js/reconciliation/reconciliation_renderer.js:0
#, python-format
msgid "Select Partner"
msgstr "Selecionar Parceiro"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Select a partner or choose a counterpart"
msgstr "Selecione um parceiro ou escolha uma contraparte"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Settings"
msgstr "Definições"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Skip"
msgstr "Pular"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/js/reconciliation/reconciliation_renderer.js:0
#, python-format
msgid "Some fields are undefined"
msgstr "Alguns campos estão indefinidos"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Tax Included in Price"
msgstr "Imposto incluído no Preço"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Taxes"
msgstr "Impostos"
#. module: account_reconciliation_widget
#: model:ir.model.fields,help:account_reconciliation_widget.field_account_bank_statement_line__move_name
msgid ""
"Technical field holding the number given to the journal entry, automatically"
" set when the statement line is reconciled then stored to set the same "
"number again if the line is cancelled, set to draft and re-processed again."
msgstr ""
"Campo técnico que contém o número atribuído ao lançamento no diário, "
"automaticamente definido quando a linha de instrução é reconciliada e "
"armazenada para definir o mesmo número novamente se a linha for cancelada, "
"definido como rascunho e reprocessado novamente."
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "That's on average"
msgstr "Isso é em média"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/js/reconciliation/reconciliation_model.js:0
#, python-format
msgid "The amount %s is not a valid partial amount"
msgstr "O valor %s não é um valor parcial válido\""
#. module: account_reconciliation_widget
#: model:ir.model.fields,help:account_reconciliation_widget.field_res_company__account_bank_reconciliation_start
msgid ""
"The bank reconciliation widget won't ask to reconcile payments older than this date.\n"
"This is useful if you install accounting after having used invoicing for some time and don't want to reconcile all the past payments with bank statements."
msgstr ""
"O widget de reconciliação bancária não solicitará a reconciliação de "
"pagamentos anteriores a esta data.\n"
"Isso é útil se você instalar a contabilidade após ter usado o faturamento "
"por algum tempo e não quiser reconciliar todos os pagamentos anteriores com "
"os extratos bancários."
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "There is nothing to reconcile."
msgstr "Não há nada para reconciliar."
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid ""
"This page displays all the bank transactions that are to be reconciled and "
"provides with a neat interface to do so."
msgstr ""
"Esta página exibe todas as transações bancárias que devem ser reconciliadas "
"e fornece uma interface elegante para fazer isso."
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "This payment is registered but not reconciled."
msgstr "Este pagamento está registrado, mas não reconciliado."
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "To Check"
msgstr "Para Verificar"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "To speed up reconciliation, define"
msgstr "Para agilizar a reconciliação, defina"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Transaction"
msgstr "Transação"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Validate"
msgstr "Validar"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Verify"
msgstr "Verificar"
#. module: account_reconciliation_widget
#: code:addons/account_reconciliation_widget/models/account_move.py:0
#: code:addons/account_reconciliation_widget/models/account_move.py:0
#, python-format
msgid "Write-Off"
msgstr "Baixa"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "Writeoff Date"
msgstr "Data da Baixa"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "You reconciled"
msgstr "Você reconciliou"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "and follow-up customers"
msgstr "e acompanhar clientes"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "have been reconciled automatically."
msgstr "foram reconciliados automaticamente."
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "reconcile"
msgstr "reconciliar"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "reconciliation models"
msgstr "modelos de reconciliação"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "remaining)"
msgstr "restante)"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "seconds per transaction."
msgstr "segundos por transação."
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "statement lines"
msgstr "linhas de extrato"
#. module: account_reconciliation_widget
#: model_terms:ir.ui.view,arch_db:account_reconciliation_widget.account_journal_dashboard_kanban_view
msgid "to check"
msgstr "para verificar"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "transactions in"
msgstr "transações em"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "unpaid invoices"
msgstr "faturas não pagas"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "unreconciled entries"
msgstr "entradas não reconciliadas"
#. module: account_reconciliation_widget
#. openerp-web
#: code:addons/account_reconciliation_widget/static/src/xml/account_reconciliation.xml:0
#, python-format
msgid "vendor bills"
msgstr "faturas de fornecedor"
@@ -0,0 +1,6 @@
from . import account_move
from . import account_bank_statement
from . import account_journal
from . import account_payment
from . import reconciliation_widget
from . import res_company
@@ -0,0 +1,340 @@
from odoo import _, fields, models
from odoo.exceptions import UserError
class AccountBankStatement(models.Model):
_inherit = "account.bank.statement"
accounting_date = fields.Date(
string="Accounting Date",
help="If set, the accounting entries created during the bank statement "
"reconciliation process will be created at this date.\n"
"This is useful if the accounting period in which the entries should "
"normally be booked is already closed.",
states={"open": [("readonly", False)]},
readonly=True,
)
def action_bank_reconcile_bank_statements(self):
self.ensure_one()
bank_stmt_lines = self.mapped("line_ids")
return {
"type": "ir.actions.client",
"tag": "bank_statement_reconciliation_view",
"context": {
"statement_line_ids": bank_stmt_lines.ids,
"company_ids": self.mapped("company_id").ids,
},
}
class AccountBankStatementLine(models.Model):
_inherit = "account.bank.statement.line"
# FIXME: is this necessary now?
move_name = fields.Char(
string="Journal Entry Name",
readonly=True,
default=False,
copy=False,
help="Technical field holding the number given to the journal entry, "
"automatically set when the statement line is reconciled then "
"stored to set the same number again if the line is cancelled, "
"set to draft and re-processed again.",
)
def process_reconciliation(
self, counterpart_aml_dicts=None, payment_aml_rec=None, new_aml_dicts=None
):
"""Match statement lines with existing payments (eg. checks) and/or
payables/receivables (eg. invoices and credit notes) and/or new move
lines (eg. write-offs).
If any new journal item needs to be created (via new_aml_dicts or
counterpart_aml_dicts), a new journal entry will be created and will
contain those items, as well as a journal item for the bank statement
line.
Finally, mark the statement line as reconciled by putting the matched
moves ids in the column journal_entry_ids.
:param self: browse collection of records that are supposed to have no
accounting entries already linked.
:param (list of dicts) counterpart_aml_dicts: move lines to create to
reconcile with existing payables/receivables.
The expected keys are :
- 'name'
- 'debit'
- 'credit'
- 'move_line'
# The move line to reconcile (partially if specified
# debit/credit is lower than move line's credit/debit)
:param (list of recordsets) payment_aml_rec: recordset move lines
representing existing payments (which are already fully reconciled)
:param (list of dicts) new_aml_dicts: move lines to create. The expected
keys are :
- 'name'
- 'debit'
- 'credit'
- 'account_id'
- (optional) 'tax_ids'
- (optional) Other account.move.line fields like analytic_account_id
or analytics_id
- (optional) 'reconcile_model_id'
:returns: The journal entries with which the transaction was matched.
If there was at least an entry in counterpart_aml_dicts or
new_aml_dicts, this list contains the move created by the
reconciliation, containing entries for the statement.line (1), the
counterpart move lines (0..*) and the new move lines (0..*).
"""
payable_account_type = self.env.ref("account.data_account_type_payable")
receivable_account_type = self.env.ref("account.data_account_type_receivable")
suspense_moves_mode = self._context.get("suspense_moves_mode")
counterpart_aml_dicts = counterpart_aml_dicts or []
payment_aml_rec = payment_aml_rec or self.env["account.move.line"]
new_aml_dicts = new_aml_dicts or []
aml_obj = self.env["account.move.line"]
company_currency = self.journal_id.company_id.currency_id
statement_currency = self.journal_id.currency_id or company_currency
counterpart_moves = self.env["account.move"]
# Check and prepare received data
if any(rec.statement_id for rec in payment_aml_rec):
raise UserError(_("A selected move line was already reconciled."))
for aml_dict in counterpart_aml_dicts:
if aml_dict["move_line"].reconciled and not suspense_moves_mode:
raise UserError(_("A selected move line was already reconciled."))
if isinstance(aml_dict["move_line"], int):
aml_dict["move_line"] = aml_obj.browse(aml_dict["move_line"])
account_types = self.env["account.account.type"]
for aml_dict in counterpart_aml_dicts + new_aml_dicts:
if aml_dict.get("tax_ids") and isinstance(aml_dict["tax_ids"][0], int):
# Transform the value in the format required for One2many and
# Many2many fields
aml_dict["tax_ids"] = [(4, id, None) for id in aml_dict["tax_ids"]]
user_type_id = (
self.env["account.account"]
.browse(aml_dict.get("account_id"))
.user_type_id
)
if (
user_type_id in [payable_account_type, receivable_account_type]
and user_type_id not in account_types
):
account_types |= user_type_id
# FIXME: review
# if suspense_moves_mode:
# if any(not line.journal_entry_ids for line in self):
# raise UserError(
# _(
# "Some selected statement line were not already "
# "reconciled with an account move."
# )
# )
# else:
# if any(line.journal_entry_ids for line in self):
# raise UserError(
# _(
# "A selected statement line was already reconciled with "
# "an account move."
# )
# )
# Fully reconciled moves are just linked to the bank statement
total = self.amount
currency = self.currency_id or statement_currency
for aml_rec in payment_aml_rec:
balance = (
aml_rec.amount_currency if aml_rec.currency_id else aml_rec.balance
)
aml_currency = aml_rec.currency_id or aml_rec.company_currency_id
total -= aml_currency._convert(
balance, currency, aml_rec.company_id, aml_rec.date
)
aml_rec.with_context(check_move_validity=False).write(
{"statement_line_id": self.id}
)
counterpart_moves = counterpart_moves | aml_rec.move_id
if (
aml_rec.journal_id.post_at == "bank_rec"
and aml_rec.payment_id
and aml_rec.move_id.state == "draft"
):
# In case the journal is set to only post payments when
# performing bank reconciliation, we modify its date and post
# it.
aml_rec.move_id.date = self.date
aml_rec.payment_id.payment_date = self.date
if aml_rec.move_id == 'posted':
continue
else:
aml_rec.move_id.with_context(skip_account_move_synchronization=True).action_post()
# We check the paid status of the invoices reconciled with this
# payment
for invoice in aml_rec.payment_id.reconciled_invoice_ids:
self._check_invoice_state(invoice)
# Create move line(s). Either matching an existing journal entry
# (eg. invoice), in which case we reconcile the existing and the new
# move lines together, or being a write-off.
if counterpart_aml_dicts or new_aml_dicts:
counterpart_moves = self._create_counterpart_and_new_aml(
counterpart_moves, counterpart_aml_dicts, new_aml_dicts
)
elif self.move_name:
raise UserError(
_(
"Operation not allowed. Since your statement line already "
"received a number (%s), you cannot reconcile it entirely "
"with existing journal entries otherwise it would make a "
"gap in the numbering. You should book an entry and make a "
"regular revert of it in case you want to cancel it."
)
% (self.move_name)
)
# create the res.partner.bank if needed
if self.account_number and self.partner_id and not self.partner_bank_id:
# Search bank account without partner to handle the case the
# res.partner.bank already exists but is set on a different partner.
self.partner_bank_id = self._find_or_create_bank_account()
counterpart_moves._check_balanced()
return counterpart_moves
def _create_counterpart_and_new_aml(
self, counterpart_moves, counterpart_aml_dicts, new_aml_dicts
):
aml_obj = self.env["account.move.line"]
# Delete previous move_lines
self.move_id.line_ids.with_context(force_delete=True).unlink()
# Create liquidity line
liquidity_aml_dict = self._prepare_liquidity_move_line_vals()
aml_obj.with_context(check_move_validity=False).create(liquidity_aml_dict)
self.sequence = self.statement_id.line_ids.ids.index(self.id) + 1
counterpart_moves = counterpart_moves | self.move_id
# Complete dicts to create both counterpart move lines and write-offs
to_create = counterpart_aml_dicts + new_aml_dicts
date = self.date or fields.Date.today()
for aml_dict in to_create:
aml_dict["move_id"] = self.move_id.id
aml_dict["partner_id"] = self.partner_id.id
aml_dict["statement_line_id"] = self.id
self._prepare_move_line_for_currency(aml_dict, date)
# Create write-offs
for aml_dict in new_aml_dicts:
aml_obj.with_context(check_move_validity=False).create(aml_dict)
# Create counterpart move lines and reconcile them
aml_to_reconcile = []
for aml_dict in counterpart_aml_dicts:
if not aml_dict["move_line"].statement_line_id:
aml_dict["move_line"].write({"statement_line_id": self.id})
if aml_dict["move_line"].partner_id.id:
aml_dict["partner_id"] = aml_dict["move_line"].partner_id.id
aml_dict["account_id"] = aml_dict["move_line"].account_id.id
counterpart_move_line = aml_dict.pop("move_line")
new_aml = aml_obj.with_context(check_move_validity=False).create(aml_dict)
aml_to_reconcile.append((new_aml, counterpart_move_line))
# Post to allow reconcile
if self.move_id.state != "posted":
self.move_id.with_context(
skip_account_move_synchronization=True
).action_post()
# Reconcile new lines with counterpart
for new_aml, counterpart_move_line in aml_to_reconcile:
(new_aml | counterpart_move_line).reconcile()
self._check_invoice_state(counterpart_move_line.move_id)
# Needs to be called manually as lines were created 1 by 1
self.move_id.update_lines_tax_exigibility()
# record the move name on the statement line to be able to retrieve
# it in case of unreconciliation
self.write({"move_name": self.move_id.name})
return counterpart_moves
def _prepare_move_line_for_currency(self, aml_dict, date):
self.ensure_one()
company_currency = self.journal_id.company_id.currency_id
statement_currency = self.journal_id.currency_id or company_currency
st_line_currency = self.currency_id or statement_currency
st_line_currency_rate = (
self.currency_id and (self.amount_currency / self.amount) or False
)
company = self.company_id
if st_line_currency.id != company_currency.id:
aml_dict["amount_currency"] = aml_dict["debit"] - aml_dict["credit"]
aml_dict["currency_id"] = st_line_currency.id
if (
self.currency_id
and statement_currency.id == company_currency.id
and st_line_currency_rate
):
# Statement is in company currency but the transaction is in
# foreign currency
aml_dict["debit"] = company_currency.round(
aml_dict["debit"] / st_line_currency_rate
)
aml_dict["credit"] = company_currency.round(
aml_dict["credit"] / st_line_currency_rate
)
elif self.currency_id and st_line_currency_rate:
# Statement is in foreign currency and the transaction is in
# another one
aml_dict["debit"] = statement_currency._convert(
aml_dict["debit"] / st_line_currency_rate,
company_currency,
company,
date,
)
aml_dict["credit"] = statement_currency._convert(
aml_dict["credit"] / st_line_currency_rate,
company_currency,
company,
date,
)
else:
# Statement is in foreign currency and no extra currency is
# given for the transaction
aml_dict["debit"] = st_line_currency._convert(
aml_dict["debit"], company_currency, company, date
)
aml_dict["credit"] = st_line_currency._convert(
aml_dict["credit"], company_currency, company, date
)
elif statement_currency.id != company_currency.id:
# Statement is in foreign currency but the transaction is in company
# currency
prorata_factor = (
aml_dict["debit"] - aml_dict["credit"]
) / self.amount_currency
aml_dict["amount_currency"] = prorata_factor * self.amount
aml_dict["currency_id"] = statement_currency.id
def _check_invoice_state(self, invoice):
if invoice.is_invoice(include_receipts=True):
invoice._compute_amount()
@@ -0,0 +1,37 @@
from odoo import models
class AccountJournal(models.Model):
_inherit = "account.journal"
def action_open_reconcile(self):
# Open reconciliation view for bank statements belonging to this journal
bank_stmt = (
self.env["account.bank.statement"]
.search([("journal_id", "in", self.ids)])
.mapped("line_ids")
)
return {
"type": "ir.actions.client",
"tag": "bank_statement_reconciliation_view",
"context": {
"statement_line_ids": bank_stmt.ids,
"company_ids": self.mapped("company_id").ids,
},
}
def action_open_reconcile_to_check(self):
self.ensure_one()
ids = self.to_check_ids().ids
action_context = {
"show_mode_selector": False,
"company_ids": self.mapped("company_id").ids,
"suspense_moves_mode": True,
"statement_line_ids": ids,
}
return {
"type": "ir.actions.client",
"tag": "bank_statement_reconciliation_view",
"context": action_context,
}
@@ -0,0 +1,127 @@
from odoo import _, fields, models
from odoo.exceptions import UserError
class AccountMoveLine(models.Model):
_inherit = "account.move.line"
def _create_writeoff(self, writeoff_vals):
"""Create a writeoff move per journal for the account.move.lines in
self. If debit/credit is not specified in vals, the writeoff amount
will be computed as the sum of amount_residual of the given recordset.
:param writeoff_vals: list of dicts containing values suitable for
account_move_line.create(). The data in vals will be processed to
create both writeoff account.move.line and their enclosing
account.move.
"""
def compute_writeoff_counterpart_vals(values):
line_values = values.copy()
line_values["debit"], line_values["credit"] = (
line_values["credit"],
line_values["debit"],
)
if "amount_currency" in values:
line_values["amount_currency"] = -line_values["amount_currency"]
return line_values
# Group writeoff_vals by journals
writeoff_dict = {}
for val in writeoff_vals:
journal_id = val.get("journal_id", False)
if not writeoff_dict.get(journal_id, False):
writeoff_dict[journal_id] = [val]
else:
writeoff_dict[journal_id].append(val)
partner_id = (
self.env["res.partner"]._find_accounting_partner(self[0].partner_id).id
)
company_currency = self[0].account_id.company_id.currency_id
writeoff_currency = self[0].account_id.currency_id or company_currency
line_to_reconcile = self.env["account.move.line"]
# Iterate and create one writeoff by journal
writeoff_moves = self.env["account.move"]
for journal_id, lines in writeoff_dict.items():
total = 0
total_currency = 0
writeoff_lines = []
date = fields.Date.today()
for vals in lines:
# Check and complete vals
if "account_id" not in vals or "journal_id" not in vals:
raise UserError(
_(
"It is mandatory to specify an account and a "
"journal to create a write-off."
)
)
if ("debit" in vals) ^ ("credit" in vals):
raise UserError(_("Either pass both debit and credit or none."))
if "date" not in vals:
vals["date"] = self._context.get("date_p") or fields.Date.today()
vals["date"] = fields.Date.to_date(vals["date"])
if vals["date"] and vals["date"] < date:
date = vals["date"]
if "name" not in vals:
vals["name"] = self._context.get("comment") or _("Write-Off")
if "analytic_account_id" not in vals:
vals["analytic_account_id"] = self.env.context.get(
"analytic_id", False
)
# compute the writeoff amount if not given
if "credit" not in vals and "debit" not in vals:
amount = sum([r.amount_residual for r in self])
vals["credit"] = amount > 0 and amount or 0.0
vals["debit"] = amount < 0 and abs(amount) or 0.0
vals["partner_id"] = partner_id
total += vals["debit"] - vals["credit"]
if (
"amount_currency" not in vals
and writeoff_currency != company_currency
):
vals["currency_id"] = writeoff_currency.id
sign = 1 if vals["debit"] > 0 else -1
vals["amount_currency"] = sign * abs(
sum([r.amount_residual_currency for r in self])
)
total_currency += vals["amount_currency"]
writeoff_lines.append(compute_writeoff_counterpart_vals(vals))
# Create balance line
writeoff_lines.append(
{
"name": _("Write-Off"),
"debit": total > 0 and total or 0.0,
"credit": total < 0 and -total or 0.0,
"amount_currency": total_currency,
"currency_id": total_currency and writeoff_currency.id or False,
"journal_id": journal_id,
"account_id": self[0].account_id.id,
"partner_id": partner_id,
}
)
# Create the move
writeoff_move = self.env["account.move"].create(
{
"journal_id": journal_id,
"date": date,
"state": "draft",
"line_ids": [(0, 0, line) for line in writeoff_lines],
}
)
writeoff_moves += writeoff_move
line_to_reconcile += writeoff_move.line_ids.filtered(
lambda r: r.account_id == self[0].account_id
).sorted(key="id")[-1:]
# post all the writeoff moves at once
if writeoff_moves:
writeoff_moves.action_post()
# Return the writeoff move.line which is to be reconciled
return line_to_reconcile
@@ -0,0 +1,33 @@
# -*- coding: utf-8 -*-
# Code of Odoo Developers. See LICENSE file for full copyright and licensing details.
from odoo import api, fields, models, _
from odoo.exceptions import UserError
class AccountMove(models.Model):
_inherit = "account.payment"
def open_payment_matching_screen(self):
# Open reconciliation view for customers/suppliers
move_line_id = False
for move_line in self.line_ids:
if move_line.account_id.reconcile:
move_line_id = move_line.id
break
if not self.partner_id:
raise UserError(_("Payments without a customer can't be matched"))
action_context = {'company_ids': [self.company_id.id],
'partner_ids': [self.partner_id.commercial_partner_id.id]}
if self.partner_type == 'customer':
action_context.update({'mode': 'customers'})
elif self.partner_type == 'supplier':
action_context.update({'mode': 'suppliers'})
if move_line_id:
action_context.update({'move_line_id': move_line_id})
return {
'type': 'ir.actions.client',
'tag': 'manual_reconciliation_view',
'context': action_context,
}
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,14 @@
from odoo import fields, models
class ResCompany(models.Model):
_inherit = "res.company"
account_bank_reconciliation_start = fields.Date(
string="Bank Reconciliation Threshold",
help="The bank reconciliation widget won't ask to reconcile payments "
"older than this date.\n"
"This is useful if you install accounting after having used invoicing "
"for some time and don't want to reconcile all the past payments with "
"bank statements.",
)
@@ -0,0 +1 @@
* Tecnativa - Pedro M. Baeza
@@ -0,0 +1,2 @@
This module restores account reconciliation widget moved from Odoo community to enterpise in V. 14.0
Provides two widgets designed to reconcile move lines in a easy way: one focused on bank statements and another for generic use.
@@ -0,0 +1,9 @@
With an user with full accounting features enabled:
Invoicing --> Accounting --> Actions --> Reconciliation.
From journal items list view you can select check of them and click Action --> Reconcile.
From accounting dashboard you can use reconcile button in Bank / Cash journals.
Also, you can navigate to statements and use the reconcile button.
@@ -0,0 +1,2 @@
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_account_reconciliation_widget_group_invoice,account_reconciliation_widget.group_invoice,model_account_reconciliation_widget,account.group_account_invoice,1,1,1,1
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
2 access_account_reconciliation_widget_group_invoice account_reconciliation_widget.group_invoice model_account_reconciliation_widget account.group_account_invoice 1 1 1 1
Binary file not shown.

After

Width:  |  Height:  |  Size: 9.2 KiB

@@ -0,0 +1,430 @@
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="generator" content="Docutils 0.15.1: http://docutils.sourceforge.net/" />
<title>account_reconciliation_widget</title>
<style type="text/css">
/*
:Author: David Goodger (goodger@python.org)
:Id: $Id: html4css1.css 7952 2016-07-26 18:15:59Z milde $
:Copyright: This stylesheet has been placed in the public domain.
Default cascading style sheet for the HTML output of Docutils.
See http://docutils.sf.net/docs/howto/html-stylesheets.html for how to
customize this style sheet.
*/
/* used to remove borders from tables and images */
.borderless, table.borderless td, table.borderless th {
border: 0 }
table.borderless td, table.borderless th {
/* Override padding for "table.docutils td" with "! important".
The right padding separates the table cells. */
padding: 0 0.5em 0 0 ! important }
.first {
/* Override more specific margin styles with "! important". */
margin-top: 0 ! important }
.last, .with-subtitle {
margin-bottom: 0 ! important }
.hidden {
display: none }
.subscript {
vertical-align: sub;
font-size: smaller }
.superscript {
vertical-align: super;
font-size: smaller }
a.toc-backref {
text-decoration: none ;
color: black }
blockquote.epigraph {
margin: 2em 5em ; }
dl.docutils dd {
margin-bottom: 0.5em }
object[type="image/svg+xml"], object[type="application/x-shockwave-flash"] {
overflow: hidden;
}
/* Uncomment (and remove this text!) to get bold-faced definition list terms
dl.docutils dt {
font-weight: bold }
*/
div.abstract {
margin: 2em 5em }
div.abstract p.topic-title {
font-weight: bold ;
text-align: center }
div.admonition, div.attention, div.caution, div.danger, div.error,
div.hint, div.important, div.note, div.tip, div.warning {
margin: 2em ;
border: medium outset ;
padding: 1em }
div.admonition p.admonition-title, div.hint p.admonition-title,
div.important p.admonition-title, div.note p.admonition-title,
div.tip p.admonition-title {
font-weight: bold ;
font-family: sans-serif }
div.attention p.admonition-title, div.caution p.admonition-title,
div.danger p.admonition-title, div.error p.admonition-title,
div.warning p.admonition-title, .code .error {
color: red ;
font-weight: bold ;
font-family: sans-serif }
/* Uncomment (and remove this text!) to get reduced vertical space in
compound paragraphs.
div.compound .compound-first, div.compound .compound-middle {
margin-bottom: 0.5em }
div.compound .compound-last, div.compound .compound-middle {
margin-top: 0.5em }
*/
div.dedication {
margin: 2em 5em ;
text-align: center ;
font-style: italic }
div.dedication p.topic-title {
font-weight: bold ;
font-style: normal }
div.figure {
margin-left: 2em ;
margin-right: 2em }
div.footer, div.header {
clear: both;
font-size: smaller }
div.line-block {
display: block ;
margin-top: 1em ;
margin-bottom: 1em }
div.line-block div.line-block {
margin-top: 0 ;
margin-bottom: 0 ;
margin-left: 1.5em }
div.sidebar {
margin: 0 0 0.5em 1em ;
border: medium outset ;
padding: 1em ;
background-color: #ffffee ;
width: 40% ;
float: right ;
clear: right }
div.sidebar p.rubric {
font-family: sans-serif ;
font-size: medium }
div.system-messages {
margin: 5em }
div.system-messages h1 {
color: red }
div.system-message {
border: medium outset ;
padding: 1em }
div.system-message p.system-message-title {
color: red ;
font-weight: bold }
div.topic {
margin: 2em }
h1.section-subtitle, h2.section-subtitle, h3.section-subtitle,
h4.section-subtitle, h5.section-subtitle, h6.section-subtitle {
margin-top: 0.4em }
h1.title {
text-align: center }
h2.subtitle {
text-align: center }
hr.docutils {
width: 75% }
img.align-left, .figure.align-left, object.align-left, table.align-left {
clear: left ;
float: left ;
margin-right: 1em }
img.align-right, .figure.align-right, object.align-right, table.align-right {
clear: right ;
float: right ;
margin-left: 1em }
img.align-center, .figure.align-center, object.align-center {
display: block;
margin-left: auto;
margin-right: auto;
}
table.align-center {
margin-left: auto;
margin-right: auto;
}
.align-left {
text-align: left }
.align-center {
clear: both ;
text-align: center }
.align-right {
text-align: right }
/* reset inner alignment in figures */
div.align-right {
text-align: inherit }
/* div.align-center * { */
/* text-align: left } */
.align-top {
vertical-align: top }
.align-middle {
vertical-align: middle }
.align-bottom {
vertical-align: bottom }
ol.simple, ul.simple {
margin-bottom: 1em }
ol.arabic {
list-style: decimal }
ol.loweralpha {
list-style: lower-alpha }
ol.upperalpha {
list-style: upper-alpha }
ol.lowerroman {
list-style: lower-roman }
ol.upperroman {
list-style: upper-roman }
p.attribution {
text-align: right ;
margin-left: 50% }
p.caption {
font-style: italic }
p.credits {
font-style: italic ;
font-size: smaller }
p.label {
white-space: nowrap }
p.rubric {
font-weight: bold ;
font-size: larger ;
color: maroon ;
text-align: center }
p.sidebar-title {
font-family: sans-serif ;
font-weight: bold ;
font-size: larger }
p.sidebar-subtitle {
font-family: sans-serif ;
font-weight: bold }
p.topic-title {
font-weight: bold }
pre.address {
margin-bottom: 0 ;
margin-top: 0 ;
font: inherit }
pre.literal-block, pre.doctest-block, pre.math, pre.code {
margin-left: 2em ;
margin-right: 2em }
pre.code .ln { color: grey; } /* line numbers */
pre.code, code { background-color: #eeeeee }
pre.code .comment, code .comment { color: #5C6576 }
pre.code .keyword, code .keyword { color: #3B0D06; font-weight: bold }
pre.code .literal.string, code .literal.string { color: #0C5404 }
pre.code .name.builtin, code .name.builtin { color: #352B84 }
pre.code .deleted, code .deleted { background-color: #DEB0A1}
pre.code .inserted, code .inserted { background-color: #A3D289}
span.classifier {
font-family: sans-serif ;
font-style: oblique }
span.classifier-delimiter {
font-family: sans-serif ;
font-weight: bold }
span.interpreted {
font-family: sans-serif }
span.option {
white-space: nowrap }
span.pre {
white-space: pre }
span.problematic {
color: red }
span.section-subtitle {
/* font-size relative to parent (h1..h6 element) */
font-size: 80% }
table.citation {
border-left: solid 1px gray;
margin-left: 1px }
table.docinfo {
margin: 2em 4em }
table.docutils {
margin-top: 0.5em ;
margin-bottom: 0.5em }
table.footnote {
border-left: solid 1px black;
margin-left: 1px }
table.docutils td, table.docutils th,
table.docinfo td, table.docinfo th {
padding-left: 0.5em ;
padding-right: 0.5em ;
vertical-align: top }
table.docutils th.field-name, table.docinfo th.docinfo-name {
font-weight: bold ;
text-align: left ;
white-space: nowrap ;
padding-left: 0 }
/* "booktabs" style (no vertical lines) */
table.docutils.booktabs {
border: 0px;
border-top: 2px solid;
border-bottom: 2px solid;
border-collapse: collapse;
}
table.docutils.booktabs * {
border: 0px;
}
table.docutils.booktabs th {
border-bottom: thin solid;
text-align: left;
}
h1 tt.docutils, h2 tt.docutils, h3 tt.docutils,
h4 tt.docutils, h5 tt.docutils, h6 tt.docutils {
font-size: 100% }
ul.auto-toc {
list-style-type: none }
</style>
</head>
<body>
<div class="document" id="account-reconciliation-widget">
<h1 class="title">account_reconciliation_widget</h1>
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
<p><a class="reference external" href="https://odoo-community.org/page/development-status"><img alt="Beta" src="https://img.shields.io/badge/maturity-Beta-yellow.png" /></a> <a class="reference external" href="http://www.gnu.org/licenses/agpl-3.0-standalone.html"><img alt="License: AGPL-3" src="https://img.shields.io/badge/licence-AGPL--3-blue.png" /></a> <a class="reference external" href="https://github.com/OCA/account-reconcile/tree/14.0/account_reconciliation_widget"><img alt="OCA/account-reconcile" src="https://img.shields.io/badge/github-OCA%2Faccount--reconcile-lightgray.png?logo=github" /></a> <a class="reference external" href="https://translation.odoo-community.org/projects/account-reconcile-14-0/account-reconcile-14-0-account_reconciliation_widget"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external" href="https://runbot.odoo-community.org/runbot/98/14.0"><img alt="Try me on Runbot" src="https://img.shields.io/badge/runbot-Try%20me-875A7B.png" /></a></p>
<p>This module restores account reconciliation widget moved from Odoo community to enterpise in V. 14.0
Provides two widgets designed to reconcile move lines in a easy way: one focused on bank statements and another for generic use.</p>
<p><strong>Table of contents</strong></p>
<div class="contents local topic" id="contents">
<ul class="simple">
<li><a class="reference internal" href="#usage" id="id1">Usage</a></li>
<li><a class="reference internal" href="#bug-tracker" id="id2">Bug Tracker</a></li>
<li><a class="reference internal" href="#credits" id="id3">Credits</a><ul>
<li><a class="reference internal" href="#authors" id="id4">Authors</a></li>
<li><a class="reference internal" href="#contributors" id="id5">Contributors</a></li>
<li><a class="reference internal" href="#maintainers" id="id6">Maintainers</a></li>
</ul>
</li>
</ul>
</div>
<div class="section" id="usage">
<h1><a class="toc-backref" href="#id1">Usage</a></h1>
<p>With an user with full accounting features enabled:</p>
<p>Invoicing &gt; Accounting &gt; Actions &gt; Reconciliation.</p>
<p>From journal items list view you can select check of them and click Action &gt; Reconcile.</p>
<p>From accounting dashboard you can use reconcile button in Bank / Cash journals.</p>
<p>Also, you can navigate to statements and use the reconcile button.</p>
</div>
<div class="section" id="bug-tracker">
<h1><a class="toc-backref" href="#id2">Bug Tracker</a></h1>
<p>Bugs are tracked on <a class="reference external" href="https://github.com/OCA/account-reconcile/issues">GitHub Issues</a>.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us smashing it by providing a detailed and welcomed
<a class="reference external" href="https://github.com/OCA/account-reconcile/issues/new?body=module:%20account_reconciliation_widget%0Aversion:%2014.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**">feedback</a>.</p>
<p>Do not contact contributors directly about support or help with technical issues.</p>
</div>
<div class="section" id="credits">
<h1><a class="toc-backref" href="#id3">Credits</a></h1>
<div class="section" id="authors">
<h2><a class="toc-backref" href="#id4">Authors</a></h2>
<ul class="simple">
<li>Odoo</li>
<li>Ozono Multimedia</li>
</ul>
</div>
<div class="section" id="contributors">
<h2><a class="toc-backref" href="#id5">Contributors</a></h2>
<ul class="simple">
<li>Tecnativa - Pedro M. Baeza</li>
</ul>
</div>
<div class="section" id="maintainers">
<h2><a class="toc-backref" href="#id6">Maintainers</a></h2>
<p>This module is maintained by the OCA.</p>
<a class="reference external image-reference" href="https://odoo-community.org"><img alt="Odoo Community Association" src="https://odoo-community.org/logo.png" /></a>
<p>OCA, or the Odoo Community Association, is a nonprofit organization whose
mission is to support the collaborative development of Odoo features and
promote its widespread use.</p>
<p>This module is part of the <a class="reference external" href="https://github.com/OCA/account-reconcile/tree/14.0/account_reconciliation_widget">OCA/account-reconcile</a> project on GitHub.</p>
<p>You are welcome to contribute. To learn how please visit <a class="reference external" href="https://odoo-community.org/page/Contribute">https://odoo-community.org/page/Contribute</a>.</p>
</div>
</div>
</div>
</body>
</html>
@@ -0,0 +1,545 @@
odoo.define("account.ReconciliationClientAction", function (require) {
"use strict";
var AbstractAction = require("web.AbstractAction");
var ReconciliationModel = require("account.ReconciliationModel");
var ReconciliationRenderer = require("account.ReconciliationRenderer");
var core = require("web.core");
var QWeb = core.qweb;
/**
* Widget used as action for 'account.bank.statement' reconciliation
*/
var StatementAction = AbstractAction.extend({
hasControlPanel: true,
withSearchBar: true,
loadControlPanel: true,
title: core._t("Bank Reconciliation"),
contentTemplate: "reconciliation",
custom_events: {
change_mode: "_onAction",
change_filter: "_onAction",
change_offset: "_onAction",
change_partner: "_onAction",
add_proposition: "_onAction",
remove_proposition: "_onAction",
update_proposition: "_onAction",
create_proposition: "_onAction",
getPartialAmount: "_onActionPartialAmount",
quick_create_proposition: "_onAction",
partial_reconcile: "_onAction",
validate: "_onValidate",
close_statement: "_onCloseStatement",
load_more: "_onLoadMore",
reload: "reload",
navigation_move: "_onNavigationMove",
},
config: _.extend({}, AbstractAction.prototype.config, {
// Used to instantiate the model
Model: ReconciliationModel.StatementModel,
// Used to instantiate the action interface
ActionRenderer: ReconciliationRenderer.StatementRenderer,
// Used to instantiate each widget line
LineRenderer: ReconciliationRenderer.LineRenderer,
// Used context params
params: ["statement_line_ids"],
// Number of statements/partners/accounts to display
defaultDisplayQty: 10,
// Number of moves lines displayed in 'match' mode
limitMoveLines: 15,
}),
_onNavigationMove: function (ev) {
var non_reconciled_keys = _.keys(
// eslint-disable-next-line no-unused-vars
_.pick(this.model.lines, function (value, key, object) {
return !value.reconciled;
})
);
var currentIndex = _.indexOf(non_reconciled_keys, ev.data.handle);
var widget = false;
switch (ev.data.direction) {
case "up":
ev.stopPropagation();
widget = this._getWidget(non_reconciled_keys[currentIndex - 1]);
break;
case "down":
ev.stopPropagation();
widget = this._getWidget(non_reconciled_keys[currentIndex + 1]);
break;
case "validate":
ev.stopPropagation();
widget = this._getWidget(non_reconciled_keys[currentIndex]);
widget.$("caption .o_buttons button:visible").click();
break;
}
if (widget) widget.$el.focus();
},
/**
* @override
* @param {Object} params
* @param {Object} params.context
*
*/
init: function (parent, params) {
this._super.apply(this, arguments);
this.action_manager = parent;
this.params = params;
this.searchModelConfig.modelName = "account.bank.statement.line";
this.controlPanelProps.cp_content = {};
this.model = new this.config.Model(this, {
modelName: "account.reconciliation.widget",
defaultDisplayQty:
(params.params && params.params.defaultDisplayQty) ||
this.config.defaultDisplayQty,
limitMoveLines:
(params.params && params.params.limitMoveLines) ||
this.config.limitMoveLines,
});
this.widgets = [];
// Adding values from the context is necessary to put this information in the url via the action manager so that
// you can retrieve it if the person shares his url or presses f5
_.each(params.params, function (value, name) {
params.context[name] =
name.indexOf("_ids") !== -1
? _.map(String(value).split(","), parseFloat)
: value;
});
params.params = {};
_.each(this.config.params, function (name) {
if (params.context[name]) {
params.params[name] = params.context[name];
}
});
},
/**
* Instantiate the action renderer
*
* @override
*/
willStart: function () {
var self = this;
var def = this.model.load(this.params.context).then(this._super.bind(this));
return def.then(function () {
if (!self.model.context || !self.model.context.active_id) {
self.model.context = {
active_id: self.params.context.active_id,
active_model: self.params.context.active_model,
};
}
var journal_id = self.params.context.journal_id;
if (
self.model.context.active_id &&
self.model.context.active_model === "account.journal"
) {
journal_id = journal_id || self.model.context.active_id;
}
if (journal_id) {
var promise = self._rpc({
model: "account.journal",
method: "read",
args: [journal_id, ["display_name"]],
});
} else {
var promise = Promise.resolve();
}
return promise.then(function (result) {
var title =
result && result[0]
? result[0].display_name
: self.params.display_name || "";
self._setTitle(title);
self.renderer = new self.config.ActionRenderer(self, self.model, {
bank_statement_line_id: self.model.bank_statement_line_id,
valuenow: self.model.valuenow,
valuemax: self.model.valuemax,
defaultDisplayQty: self.model.defaultDisplayQty,
title: title,
});
});
});
},
reload: function () {
// On reload destroy all rendered line widget, reload data and then rerender widget
var self = this;
self.$(".o_reconciliation_lines").addClass("d-none"); // Prevent the browser from recomputing css after each destroy for HUGE perf improvement on a lot of lines
_.each(this.widgets, function (widget) {
widget.destroy();
});
this.widgets = [];
self.$(".o_reconciliation_lines").removeClass("d-none");
return this.model.reload().then(function () {
return self._renderLinesOrRainbow();
});
},
_renderLinesOrRainbow: function () {
var self = this;
return self._renderLines().then(function () {
var initialState = self.renderer._initialState;
var valuenow = self.model.statement
? self.model.statement.value_min
: initialState.valuenow;
var valuemax = self.model.statement
? self.model.statement.value_max
: initialState.valuemax;
// No more lines to reconcile, trigger the rainbowman.
if (valuenow === valuemax) {
initialState.valuenow = valuenow;
initialState.context = self.model.getContext();
self.renderer.showRainbowMan(initialState);
self.controlPanelProps.cp_content = {
$buttons: $(),
$pager: $(),
};
} else {
// Create a notification if some lines have been reconciled automatically.
if (initialState.valuenow > 0)
self.renderer._renderNotifications(
self.model.statement.notifications
);
self._openFirstLine();
self.renderer.$('[data-toggle="tooltip"]').tooltip();
self.do_show();
}
});
},
/**
* Append the renderer and instantiate the line renderers
*
* @override
*/
start: function () {
var self = this;
var args = arguments;
var sup = this._super;
return this.renderer.prependTo(self.$(".o_form_sheet")).then(function () {
return self._renderLinesOrRainbow().then(function () {
self.do_show();
return sup.apply(self, args);
});
});
},
/**
* Update the control panel and breadcrumbs
*
* @override
*/
do_show: function () {
this._super.apply(this, arguments);
if (this.action_manager) {
this.$pager = $(
QWeb.render("reconciliation.control.pager", {widget: this.renderer})
);
this.controlPanelProps.cp_content = {
$buttons: $(),
$pager: this.$pager,
};
this.renderer.$progress = this.$pager;
}
},
on_attach_callback: function () {
this._super.apply(this, arguments);
$(this.$pager).parent().css("width", "100%").css("padding-left", "0");
},
// --------------------------------------------------------------------------
// Private
// --------------------------------------------------------------------------
/**
* @private
* @param {String} handle
* @returns {Widget} widget line
*/
_getWidget: function (handle) {
return _.find(this.widgets, function (widget) {
return widget.handle === handle;
});
},
/**
*
*/
_loadMore: function (qty) {
var self = this;
return this.model.loadMore(qty).then(function () {
return self._renderLines();
});
},
/**
* Sitch to 'match' the first available line
*
* @private
*/
_openFirstLine: function (previous_handle) {
var self = this;
previous_handle = previous_handle || "rline0";
var handle = _.compact(
_.map(this.model.lines, function (line, handle) {
return line.reconciled ||
parseInt(handle.substr(5)) < parseInt(previous_handle.substr(5))
? null
: handle;
})
)[0];
if (handle) {
var line = this.model.getLine(handle);
this.model
.changeMode(handle, "default")
.then(function () {
self._getWidget(handle).update(line);
})
.guardedCatch(function () {
self._getWidget(handle).update(line);
})
.then(function () {
self._getWidget(handle).$el.focus();
});
}
return handle;
},
_forceUpdate: function () {
var self = this;
_.each(this.model.lines, function (handle) {
var widget = self._getWidget(handle.handle);
if (widget && handle.need_update) {
widget.update(handle);
widget.need_update = false;
}
});
},
/**
* Render line widget and append to view
*
* @private
*/
_renderLines: function () {
var self = this;
var linesToDisplay = this.model.getStatementLines();
var linePromises = [];
_.each(linesToDisplay, function (line, handle) {
var widget = new self.config.LineRenderer(self, self.model, line);
widget.handle = handle;
self.widgets.push(widget);
linePromises.push(widget.appendTo(self.$(".o_reconciliation_lines")));
});
if (this.model.hasMoreLines() === false) {
this.renderer.hideLoadMoreButton(true);
} else {
this.renderer.hideLoadMoreButton(false);
}
return Promise.all(linePromises);
},
// --------------------------------------------------------------------------
// Handlers
// --------------------------------------------------------------------------
/**
* dispatch on the camelcased event name to model method then update the
* line renderer with the new state. If the mode was switched from 'inactive'
* to 'create' or 'match_rp' or 'match_other', the other lines switch to
* 'inactive' mode
*
* @private
* @param {OdooEvent} event
*/
_onAction: function (event) {
var self = this;
var handle = event.target.handle;
var current_line = this.model.getLine(handle);
this.model[_.str.camelize(event.name)](handle, event.data.data).then(
function () {
var widget = self._getWidget(handle);
if (widget) {
widget.update(current_line);
}
if (current_line.mode !== "inactive") {
_.each(self.model.lines, function (line, _handle) {
if (line.mode !== "inactive" && _handle !== handle) {
self.model.changeMode(_handle, "inactive");
var widget = self._getWidget(_handle);
if (widget) {
widget.update(line);
}
}
});
}
}
);
},
/**
* @private
* @param {Object} searchQuery
*/
_onSearch: function (searchQuery) {
var self = this;
this.model.domain = searchQuery.domain;
this.model.display_context = "search";
self.reload().then(function () {
self.renderer._updateProgressBar({
valuenow: self.model.valuenow,
valuemax: self.model.valuemax,
});
});
},
_onActionPartialAmount: function (event) {
var self = this;
var handle = event.target.handle;
var amount = this.model.getPartialReconcileAmount(handle, event.data);
self._getWidget(handle).updatePartialAmount(event.data.data, amount);
},
/**
* Call 'closeStatement' model method
*
* @private
* @param {OdooEvent} event
*/
// eslint-disable-next-line no-unused-vars
_onCloseStatement: function (event) {
var self = this;
return this.model.closeStatement().then(function (result) {
self.do_action({
name: "Bank Statements",
res_model: "account.bank.statement",
res_id: result,
views: [[false, "form"]],
type: "ir.actions.act_window",
view_mode: "form",
});
$(".o_reward").remove();
});
},
/**
* Load more statement and render them
*
* @param {OdooEvent} event
*/
// eslint-disable-next-line no-unused-vars
_onLoadMore: function (event) {
return this._loadMore(this.model.defaultDisplayQty);
},
/**
* Call 'validate' model method then destroy the
* validated lines and update the action renderer with the new status bar
* values and notifications then open the first available line
*
* @private
* @param {OdooEvent} event
*/
_onValidate: function (event) {
var self = this;
var handle = event.target.handle;
this.model.validate(handle).then(function (result) {
self.renderer.update({
valuenow: self.model.valuenow,
valuemax: self.model.valuemax,
title: self.title,
time: Date.now() - self.time,
notifications: result.notifications,
context: self.model.getContext(),
});
self._forceUpdate();
_.each(result.handles, function (handle) {
var widget = self._getWidget(handle);
if (widget) {
widget.destroy();
var index = _.findIndex(self.widgets, function (widget) {
return widget.handle === handle;
});
self.widgets.splice(index, 1);
}
});
// Get number of widget and if less than constant and if there are more to load, load until constant
if (
self.widgets.length < self.model.defaultDisplayQty &&
self.model.valuemax - self.model.valuenow >=
self.model.defaultDisplayQty
) {
var toLoad = self.model.defaultDisplayQty - self.widgets.length;
self._loadMore(toLoad);
}
self._openFirstLine(handle);
});
},
});
/**
* Widget used as action for 'account.move.line' and 'res.partner' for the
* manual reconciliation and mark data as reconciliate
*/
var ManualAction = StatementAction.extend({
title: core._t("Journal Items to Reconcile"),
withSearchBar: false,
config: _.extend({}, StatementAction.prototype.config, {
Model: ReconciliationModel.ManualModel,
ActionRenderer: ReconciliationRenderer.ManualRenderer,
LineRenderer: ReconciliationRenderer.ManualLineRenderer,
params: ["company_ids", "mode", "partner_ids", "account_ids"],
defaultDisplayQty: 30,
limitMoveLines: 15,
}),
// --------------------------------------------------------------------------
// Handlers
// --------------------------------------------------------------------------
/**
* call 'validate' model method then destroy the
* reconcilied lines, update the not reconcilied and update the action
* renderer with the new status bar values and notifications then open the
* first available line
*
* @private
* @param {OdooEvent} event
*/
_onValidate: function (event) {
var self = this;
var handle = event.target.handle;
var method = "validate";
this.model[method](handle).then(function (result) {
_.each(result.reconciled, function (handle) {
self._getWidget(handle).destroy();
});
_.each(result.updated, function (handle) {
self._getWidget(handle).update(self.model.getLine(handle));
});
self.renderer.update({
valuenow: _.compact(_.invoke(self.widgets, "isDestroyed")).length,
valuemax: self.widgets.length,
title: self.title,
time: Date.now() - self.time,
});
if (
!_.any(result.updated, function (handle) {
return self.model.getLine(handle).mode !== "inactive";
})
) {
self._openFirstLine(handle);
}
});
},
});
core.action_registry.add("bank_statement_reconciliation_view", StatementAction);
core.action_registry.add("manual_reconciliation_view", ManualAction);
return {
StatementAction: StatementAction,
ManualAction: ManualAction,
};
});
@@ -0,0 +1,382 @@
.progress-reconciliation {
.progress-bar {
font-size: 1.08333333rem;
height: 14px;
background-color: $o-enterprise-color;
span {
display: contents;
}
}
}
.o_reconciliation {
.o_filter_input_wrapper {
position: relative;
width: 150px;
margin: 0.5rem !important;
.searchIcon {
position: absolute;
right: 10px;
}
.o_filter_input {
border: none;
border-bottom: 1px black solid;
}
}
.import_to_suspense {
margin: 0.5rem !important;
}
.notification_area {
clear: both;
}
.o_view_noreconciliation {
max-width: none;
padding: 0 10%;
color: $o-main-color-muted;
font-size: 125%;
}
.accounting_view {
width: 100%;
.cell_left {
border-right: 1px solid #333;
padding-right: 5px;
}
.edit_amount {
margin-left: 20px;
color: #bbb;
}
.cell:hover .edit_amount {
color: #00a09d;
}
.strike_amount {
text-decoration: line-through;
}
tbody tr:hover .cell_account_code::before {
content: "\f068";
font-family: FontAwesome;
position: relative;
margin-left: -17px;
left: -4px;
line-height: 0;
padding: 3px 2px 5px 5px;
}
}
.o_multi_currency {
margin-right: 5px;
&.o_multi_currency_color_0 {
color: #dd6666;
}
&.o_multi_currency_color_1 {
color: #aaaaaa;
}
&.o_multi_currency_color_2 {
color: #66dd66;
}
&.o_multi_currency_color_3 {
color: #6666dd;
}
&.o_multi_currency_color_4 {
color: #dddd66;
}
&.o_multi_currency_color_5 {
color: #dd66dd;
}
&.o_multi_currency_color_6 {
color: #66dddd;
}
&.o_multi_currency_color_7 {
color: #aaa333;
}
}
.o_reconciliation_line {
margin-bottom: 30px;
table {
width: 100%;
vertical-align: top;
}
tbody tr {
cursor: pointer;
}
tr.already_reconciled {
color: $o-account-info-color;
}
tr.invalid {
text-decoration: line-through;
}
td {
padding: 1px 2px;
}
thead td {
border-top: $o-account-light-border;
padding-top: 4px;
padding-bottom: 5px;
background-color: $o-account-initial-line-background;
}
tfoot td {
color: #bbb;
}
/* columns */
.cell_action {
width: 15px;
color: gray("700");
background: #fff;
border: 0;
text-align: center;
.fa-add-remove:before {
content: "";
}
}
tr:hover .cell_action .fa-add-remove:before {
content: "\f068";
}
.is_tax .cell_action .fa-add-remove:before {
position: relative;
top: -18px;
}
.cell_account_code {
width: 80px;
padding-left: 5px;
}
.cell_due_date {
width: 100px;
}
.cell_label {
width: auto;
}
.cell_left {
padding-right: 5px;
}
.cell_right,
.cell_left {
text-align: right;
width: 120px;
}
.cell_info_popover {
text-align: right;
width: 15px;
color: #ccc;
&:empty {
padding: 0;
width: 0;
}
}
table.accounting_view {
.cell_right,
.cell_left,
.cell_label,
.cell_due_date,
.cell_account_code,
.cell_info_popover {
box-shadow: 0 1px 0 #eaeaea;
}
}
/* info popover */
.popover {
max-width: none;
}
table.details {
vertical-align: top;
td:first-child {
vertical-align: top;
padding-right: 10px;
font-weight: bold;
}
}
tr.one_line_info {
td {
padding-top: 10px;
text-align: center;
color: $o-account-info-color;
}
}
/* Icons */
.toggle_match,
.toggle_create {
transform: rotate(0deg);
transition: transform 300ms ease 0s;
}
.visible_toggle,
&[data-mode="match"] .toggle_match,
&[data-mode="create"] .toggle_create {
visibility: visible !important;
transform: rotate(90deg);
}
.toggle_create {
font-size: 10px;
}
/* Match view & Create view */
> .o_notebook {
display: none;
> .o_notebook_headers {
margin-right: 0;
margin-left: 0;
}
}
> .o_notebook > .tab-content > div {
border: 1px solid #ddd;
border-top: 0;
}
> .o_notebook .match table tr:hover {
background-color: #eee;
}
&:not([data-mode="inactive"]) > .o_notebook {
display: block;
}
&:not(:focus-within) .o_web_accesskey_overlay {
display: none;
}
&:focus caption .o_buttons button {
outline: none;
box-shadow: 4px 4px 4px 0px $o-enterprise-color;
}
&:focus {
outline: none;
box-shadow: 0 0 0 0;
}
}
.o_reconcile_models .btn-primary {
margin: 0 2px 3px 0;
}
/* Match view */
.match {
.cell_action .fa-add-remove:before {
content: "";
}
tr:hover .cell_action .fa-add-remove:before {
content: "\f067";
}
.match_controls {
padding: 5px 0 5px
($o-account-action-col-width + $o-account-main-table-borders-padding);
.filter {
width: 240px;
display: inline-block;
}
.fa-chevron-left,
.fa-chevron-right {
display: inline-block;
cursor: pointer;
}
.fa-chevron-left {
margin-right: 10px;
}
.fa-chevron-left.disabled,
.fa-chevron-right.disabled {
color: #ddd;
cursor: default;
}
}
.show_more {
display: inline-block;
margin-left: (
$o-account-action-col-width + $o-account-main-table-borders-padding
);
margin-top: 5px;
}
}
/* Create view */
.create {
> div > div.quick_add > .o_reconcile_models {
max-width: 100%;
max-height: 70px;
flex-wrap: wrap;
overflow: auto;
& > * {
flex-grow: 0;
}
}
.quick_add {
margin-bottom: 7px;
padding: 0 8px;
}
.o_group table.o_group_col_6 {
width: 49%;
margin: 0;
vertical-align: top;
}
.o_group table.o_group_col_6:first-child {
margin-left: 8px;
}
.btn {
padding-top: 0;
padding-bottom: 0;
}
.add_line_container {
text-align: center;
clear: both;
color: $o-enterprise-primary-color;
cursor: pointer;
}
}
.o_notebook .tab-content > .tab-pane {
padding: 5px 0;
}
}
/*Manual Reconciliation*/
.o_manual_statement {
.accounting_view {
td[colspan="3"] span:first-child {
width: 100%;
display: inline-block;
}
td[colspan="2"] {
border-bottom: 1px solid #333;
text-align: center;
width: 240px;
}
.do_partial_reconcile_true {
display: none;
}
}
}
// This is rtl language specific fix
// It will flip the fa-fa play icon in left direction
.o_rtl {
.o_reconciliation {
.o_reconciliation_line {
.toggle_match,
.toggle_create {
transform: rotate(180deg);
transition: transform 300ms;
}
.visible_toggle,
&[data-mode="match"] .toggle_match,
&[data-mode="create"] .toggle_create {
transform: rotate(270deg);
}
}
}
}
@@ -0,0 +1,561 @@
<?xml version="1.0" encoding="UTF-8" ?>
<templates xml:space="preserve">
<div t-name="reconciliation" class="o_reconciliation">
<div class="o_form_view">
<div class="o_form_sheet_bg">
<div class="o_form_sheet" />
</div>
</div>
</div>
<t t-name="reconciliation.control.pager">
<div class="progress progress-reconciliation">
<div aria-valuemin="0" t-att-aria-valuenow="widget._initialState.valuenow" t-att-aria-valuemax="widget._initialState.valuemax" class="progress-bar" role="progressbar" style="width: 0%;">
<span class="valuenow">
<t t-esc="widget._initialState.valuenow" />
</span> / <span class="valuemax">
<t t-esc="widget._initialState.valuemax" />
</span>
</div>
</div>
</t>
<t t-name="reconciliation.statement">
<div t-if="widget._initialState.valuemax">
<div class="notification_area" />
<div class="o_reconciliation_lines" />
<div t-if="widget._initialState.valuemax &gt; widget._initialState.defaultDisplayQty">
<button class="btn btn-secondary js_load_more">Load more</button>
</div>
</div>
<div t-else="" class="o_view_noreconciliation">
<p>Nothing to do!</p>
<p
>This page displays all the bank transactions that are to be reconciled and provides with a neat interface to do so.</p>
</div>
</t>
<t t-name="reconciliation.manual.statement" t-extend="reconciliation.statement">
<t t-jquery="div:first" t-operation="attributes">
<attribute name="class" value="o_manual_statement" />
</t>
<t t-jquery=".o_view_noreconciliation p" t-operation="replace" />
<t t-jquery=".o_filter_input_wrapper" t-operation="replace" />
<t t-jquery=".o_view_noreconciliation" t-operation="append">
<p>
<b>Good Job!</b> There is nothing to reconcile.</p>
<p
>All invoices and payments have been matched, your accounts' balances are clean.</p>
<p>
From now on, you may want to:
<ul>
<li>Check that you have no bank statement lines to <a href="#" rel="do_action" data-tag="bank_statement_reconciliation_view">reconcile</a>
</li>
<li>Verify <a href="#" rel="do_action" data-action_name="Unpaid Customer Invoices" data-model="account.move" data-domain="[('move_type', 'in', ('out_invoice', 'out_refund'))]" data-context="{'search_default_unpaid': 1}">unpaid invoices</a> and follow-up customers</li>
<li>Pay your <a href="#" rel="do_action" data-action_name="Unpaid Vendor Bills" data-model="account.move" data-domain="[('move_type', 'in', ('in_invoice', 'in_refund'))]" data-context="{'search_default_unpaid': 1}">vendor bills</a>
</li>
<li>Check all <a href="#" rel="do_action" data-action_name="Unreconciled Entries" data-model="account.move.line" data-context="{'search_default_unreconciled': 1}">unreconciled entries</a>
</li>
</ul>
</p>
</t>
</t>
<div t-name="reconciliation.done" class="done_message">
<h2>Congrats, you're all done!</h2>
<p>You reconciled <strong>
<t t-esc="number" />
</strong> transactions in <strong>
<t t-esc="duration" />
</strong>.
<t t-if="number > 1">
<br />
That's on average <t t-esc="timePerTransaction" />
seconds per transaction.
</t>
</p>
<t t-if="context &amp;&amp; context.active_model">
<p t-if="context['active_model'] === 'account.journal' || context['active_model'] === 'account.bank.statement' || context['active_model'] === 'account.bank.statement.import'" class="actions_buttons">
<t t-if="context.journal_id">
<button class="button_back_to_statement btn btn-secondary" t-att-data_journal_id='context.journal_id'
>Go to bank statement(s)</button>
</t>
<t t-if="context['active_model'] === 'account.bank.statement'">
<button class="button_close_statement btn btn-primary" style="display: inline-block;">Close statement</button>
</t>
</p>
</t>
</div>
<t t-name="reconciliation.line">
<t t-set="state" t-value="widget._initialState" />
<div class="o_reconciliation_line" t-att-data-mode="state.mode" tabindex="0">
<table class="accounting_view">
<caption style="caption-side: top;">
<div class="float-right o_buttons">
<button t-attf-class="o_no_valid btn btn-secondary #{state.balance.type &lt; 0 ? '' : 'd-none'}" disabled="disabled" data-toggle="tooltip" title="Select a partner or choose a counterpart" accesskey="">
Validate
</button>
<button t-attf-class="o_validate btn btn-secondary #{!state.balance.type ? '' : 'd-none'}">Validate</button>
<button t-attf-class="o_reconcile btn btn-primary #{state.balance.type &gt; 0 ? '' : 'd-none'}">Validate</button>
</div>
</caption>
<thead>
<tr>
<td class="cell_account_code">
<t t-esc="state.st_line.account_code"/>
</td>
<td class="cell_due_date">
<t t-esc="state.st_line.date" />
</td>
<td class="cell_label">
<t t-if="state.st_line.payment_ref" t-esc="state.st_line.payment_ref"/>
<t t-if="state.st_line.ref" t-esc="state.st_line.ref"/>
<t t-if="state.st_line.amount_currency_str"> ( <t t-esc="state.st_line.amount_currency_str"/>
)</t>
</td>
<td class="cell_left">
<t t-if="state.st_line.amount &gt; 0">
<t t-raw="state.st_line.amount_str"/>
</t>
</td>
<td class="cell_right">
<t t-if="state.st_line.amount &lt; 0">
<t t-raw="state.st_line.amount_str"/>
</t>
</td>
<td class="cell_info_popover" />
</tr>
</thead>
<tbody>
<t t-foreach="state.reconciliation_proposition" t-as="line">
<t t-call="reconciliation.line.mv_line"/>
</t>
</tbody>
<tfoot>
<t t-call="reconciliation.line.balance" />
</tfoot>
</table>
<div class="o_notebook">
<div class="o_notebook_headers">
<ul class="nav nav-tabs ml-0 mr-0">
<li class="nav-item" t-attf-title="{{'Match statement with existing lines on receivable/payable accounts&lt;br&gt;* Black line: existing journal entry that should be matched&lt;br&gt;* Blue lines: existing payment that should be matched'}}" data-toggle="tooltip">
<a data-toggle="tab" disable_anchor="true" t-attf-href="#notebook_page_match_rp_#{state.st_line.id}" class="nav-link active nav-match_rp" role="tab" aria-selected="true">Customer/Vendor Matching</a>
</li>
<li class="nav-item" title="Match with entries that are not from receivable/payable accounts" data-toggle="tooltip">
<a data-toggle="tab" disable_anchor="true" t-attf-href="#notebook_page_match_other_#{state.st_line.id}" class="nav-link nav-match_other" role="tab" aria-selected="false">Miscellaneous Matching</a>
</li>
<li class="nav-item" title="Create a counterpart" data-toggle="tooltip">
<a data-toggle="tab" disable_anchor="true" t-attf-href="#notebook_page_create_#{state.st_line.id}" class="nav-link nav-create" role="tab" aria-selected="false">Manual Operations</a>
</li>
</ul>
</div>
<div class="tab-content">
<div class="tab-pane active" t-attf-id="notebook_page_match_rp_#{state.st_line.id}">
<div class="match">
<t t-call="reconciliation.line.match" />
</div>
</div>
<div class="tab-pane" t-attf-id="notebook_page_match_other_#{state.st_line.id}">
<div class="match">
<t t-call="reconciliation.line.match" />
</div>
</div>
<div class="tab-pane" t-attf-id="notebook_page_create_#{state.st_line.id}">
<div class="create" />
</div>
</div>
</div>
</div>
</t>
<t t-name="reconciliation.manual.line" t-extend="reconciliation.line">
<t t-jquery=".o_buttons" t-operation="replace">
<div class="float-right o_buttons">
<button t-attf-class="o_validate btn btn-secondary #{!state.balance.type ? '' : 'd-none'}">Reconcile</button>
<button t-attf-class="o_reconcile btn btn-primary #{state.balance.type &gt; 0 ? '' : 'd-none'}">Reconcile</button>
<button t-attf-class="o_no_valid btn btn-secondary #{state.balance.type &lt; 0 ? '' : 'd-none'}">Skip</button>
</div>
</t>
<t t-jquery=".accounting_view tbody" t-operation="append">
<t t-if='!_.filter(state.reconciliation_proposition, {"display": true}).length'>
<t t-set="line" t-value='{}' />
<t t-call="reconciliation.line.mv_line" />
</t>
</t>
<t t-jquery=".accounting_view thead tr" t-operation="replace">
<tr>
<td colspan="3">
<span />
<span t-if="state.last_time_entries_checked">Last Reconciliation: <t t-esc="state.last_time_entries_checked" />
</span>
</td>
<td colspan="2">
<t t-esc="state.st_line.account_code" />
</td>
<td class="cell_info_popover" />
</tr>
</t>
<t t-jquery='div[t-attf-id*="notebook_page_match_rp"]' t-operation="replace" />
<t t-jquery='a[t-attf-href*="notebook_page_match_rp"]' t-operation="replace" />
</t>
<t t-name="reconciliation.line.balance">
<tr t-if="state.balance.show_balance">
<td class="cell_account_code">
<t t-esc="state.balance.account_code" />
</td>
<td class="cell_due_date" />
<td class="cell_label">
<t t-if="state.st_line.partner_id">Open balance</t>
<t t-else="">Choose counterpart or Create Write-off</t>
</td>
<td class="cell_left">
<t t-if="state.balance.amount_currency &lt; 0">
<span role="img" t-if="state.balance.amount_currency_str" t-attf-class="o_multi_currency o_multi_currency_color_#{state.balance.currency_id%8} line_info_button fa fa-money" t-att-data-content="state.balance.amount_currency_str" t-att-aria-label="state.balance.amount_currency_str" t-att-title="state.balance.amount_currency_str" />
<t t-raw="state.balance.amount_str" />
</t>
</td>
<td class="cell_right">
<t t-if="state.balance.amount_currency &gt; 0">
<span role="img" t-if="state.balance.amount_currency_str" t-attf-class="o_multi_currency o_multi_currency_color_#{state.balance.currency_id%8} line_info_button fa fa-money" t-att-data-content="state.balance.amount_currency_str" t-att-aria-label="state.balance.amount_currency_str" t-att-title="state.balance.amount_currency_str" />
<t t-raw="state.balance.amount_str" />
</t>
</td>
<td class="cell_info_popover" />
</tr>
</t>
<div t-name="reconciliation.line.match">
<div class="match_controls">
<span>
<input class="filter o_input" placeholder="Filter on account, label, partner, amount,..." type="text" t-att-value="state['filter_{{state.mode}}']" />
</span>
<button class="btn btn-secondary btn-sm fa fa-search" type="button" />
</div>
<table>
<tbody>
</tbody>
</table>
<div class="load-more text-center">
<a href="#">Load more... (<span />
remaining)</a>
</div>
</div>
<div t-name="reconciliation.line.create">
<div class="quick_add">
<div class="btn-group o_reconcile_models" t-if="state.reconcileModels">
<t t-foreach="state.reconcileModels" t-as="reconcileModel">
<button class="btn btn-primary" t-if="reconcileModel.rule_type === 'writeoff_button' &amp;&amp; (reconcileModel.match_journal_ids.length == 0 || reconcileModel.match_journal_ids.includes(state.st_line.journal_id) || state.st_line.journal_id === undefined)" t-att-data-reconcile-model-id="reconcileModel.id">
<t t-esc="reconcileModel.name" />
</button>
</t>
<p t-if="!state.reconcileModels.length" style="color: #bbb;">To speed up reconciliation, define <a style="cursor: pointer;" class="reconcile_model_create">reconciliation models</a>.
</p>
</div>
<div class="dropdown float-right">
<a data-toggle="dropdown" href="#">
<span class="fa fa-cog" role="img" aria-label="Settings" />
</a>
<div class="dropdown-menu dropdown-menu-right" role="menu" aria-label="Presets config">
<a role="menuitem" class="dropdown-item reconcile_model_create" href="#">Create model</a>
<a role="menuitem" class="dropdown-item reconcile_model_edit" href="#">Modify models</a>
</div>
</div>
</div>
<div class="clearfix o_form_sheet">
<div class="o_group">
<table class="o_group o_inner_group o_group_col_6">
<tbody>
<tr class="create_account_id">
<td class="o_td_label">
<label class="o_form_label">Account</label>
</td>
<td class="o_td_field" />
</tr>
<tr class="create_tax_id">
<td class="o_td_label">
<label class="o_form_label">Taxes</label>
</td>
<td class="o_td_field" />
</tr>
<tr class="create_analytic_account_id" t-if="group_acc">
<td class="o_td_label">
<label class="o_form_label">Analytic Acc.</label>
</td>
<td class="o_td_field" />
</tr>
<tr class="create_analytic_tag_ids" t-if="group_tags">
<td class="o_td_label">
<label class="o_form_label">Analytic Tags.</label>
</td>
<td class="o_td_field" />
</tr>
</tbody>
</table>
<table class="o_group o_inner_group o_group_col_6">
<tbody>
<tr class="create_journal_id" style="display: none;">
<td class="o_td_label">
<label class="o_form_label">Journal</label>
</td>
<td class="o_td_field" />
</tr>
<tr class="create_label">
<td class="o_td_label">
<label class="o_form_label">Label</label>
</td>
<td class="o_td_field" />
</tr>
<tr class="create_amount">
<td class="o_td_label">
<label class="o_form_label">Amount</label>
</td>
<td class="o_td_field" />
</tr>
<tr class="create_force_tax_included d-none">
<td class="o_td_label">
<label class="o_form_label">Tax Included in Price</label>
</td>
<td class="o_td_field" />
</tr>
<tr class="create_date d-none">
<td class="o_td_label">
<label class="o_form_label">Writeoff Date</label>
</td>
<td class="o_td_field" />
</tr>
<tr class="create_to_check">
<td class="o_td_label">
<label class="o_form_label">To Check</label>
</td>
<td class="o_td_field" />
</tr>
</tbody>
</table>
</div>
</div>
<div class="add_line_container">
<a class="add_line" t-att-style="!state.balance.amout ? 'display: none;' : null">
<i class="fa fa-plus-circle" />
Save and New</a>
</div>
</div>
<t t-name="reconciliation.line.mv_line.amount">
<span t-att-class="(line.is_move_line &amp;&amp; proposition == true) ? 'cell' : ''">
<span class="line_amount">
<span t-if="line.amount_currency_str" t-attf-class="o_multi_currency o_multi_currency_color_#{line.currency_id%8} line_info_button fa fa-money" t-att-data-content="line.amount_currency_str" />
<span t-if="line.partial_amount &amp;&amp; line.partial_amount != line.amount" class="strike_amount text-muted">
<t t-raw="line.amount_str" />
<br />
</span>
</span>
<t t-if="line.is_move_line &amp;&amp; proposition == true">
<i class="fa fa-pencil edit_amount" />
<input class="edit_amount_input text-right d-none" />
</t>
<span class="line_amount">
<t t-if="!line.partial_amount_str" t-raw="line.amount_str" />
<t t-if="line.partial_amount_str &amp;&amp; line.partial_amount != line.amount" t-raw="line.partial_amount_str" />
</span>
</span>
</t>
<t t-name="reconciliation.line.mv_line">
<tr t-if="line.display !== false" t-attf-class="mv_line #{line.already_paid ? ' already_reconciled' : ''} #{line.__invalid ? 'invalid' : ''} #{line.is_tax ? 'is_tax' : ''}" t-att-data-line-id="line.id" t-att-data-selected="selected">
<td class="cell_account_code">
<t t-esc="line.account_code" />
&#8203;</td> <!-- zero width space to make empty lines the height of the text -->
<td class="cell_due_date">
<t t-if="typeof(line.id) != 'number' &amp;&amp; line.id">
<span class="badge badge-secondary">New</span>
</t>
<t t-else="" t-esc="line.date_maturity || line.date" />
</td>
<td class="cell_label">
<t t-if="line.partner_id &amp;&amp; line.partner_id !== state.st_line.partner_id">
<t t-if="line.partner_name.length">
<span class="font-weight-bold" t-esc="line.partner_name" />
:
</t>
</t>
<t t-esc="line.label || line.name" />
<t t-if="line.ref &amp;&amp; line.ref.length"> : </t>
<t t-esc="line.ref" />
</td>
<td class="cell_left">
<t t-if="line.amount &lt; 0">
<t t-call="reconciliation.line.mv_line.amount" />
</t>
</td>
<td class="cell_right">
<t t-if="line.amount &gt; 0">
<t t-call="reconciliation.line.mv_line.amount" />
</t>
</td>
<td class="cell_info_popover" />
</tr>
</t>
<t t-name="reconciliation.line.mv_line.details">
<table class='details'>
<tr t-if="line.account_code">
<td>Account</td>
<td>
<t t-esc="line.account_code" />
<t t-esc="line.account_name" />
</td>
</tr>
<tr>
<td>Date</td>
<td>
<t t-esc="line.date" />
</td>
</tr>
<tr>
<td>Due Date</td>
<td>
<t t-esc="line.date_maturity || line.date" />
</td>
</tr>
<tr>
<td>Journal</td>
<td>
<t t-esc="line.journal_id.display_name" />
</td>
</tr>
<tr t-if="line.partner_id">
<td>Partner</td>
<td>
<t t-esc="line.partner_name" />
</td>
</tr>
<tr>
<td>Label</td>
<td>
<t t-esc="line.label" />
</td>
</tr>
<tr t-if="line.ref">
<td>Ref</td>
<td>
<t t-esc="line.ref" />
</td>
</tr>
<tr>
<td>Amount</td>
<td>
<t t-raw="line.total_amount_str" />
<t t-if="line.total_amount_currency_str"> ( <t t-esc="line.total_amount_currency_str" />
)</t>
</td>
</tr>
<tr t-if="line.is_partially_reconciled">
<td>Residual</td>
<td>
<t t-raw="line.amount_str" />
<t t-if="line.amount_currency_str"> ( <t t-esc="line.amount_currency_str" />
)</t>
</td>
</tr>
<tr class="one_line_info" t-if='line.already_paid'>
<td colspan="2">This payment is registered but not reconciled.</td>
</tr>
</table>
</t>
<t t-name="reconciliation.line.statement_line.details">
<table class='details'>
<tr>
<td>Date</td>
<td>
<t t-esc="state.st_line.date" />
</td>
</tr>
<tr t-if="state.st_line.partner_name">
<td>Partner</td>
<td>
<t t-esc="state.st_line.partner_name" />
</td>
</tr>
<tr t-if="state.st_line.ref">
<td>Transaction</td>
<td>
<t t-esc="state.st_line.ref" />
</td>
</tr>
<tr>
<td>Description</td>
<td>
<t t-esc="state.st_line.payment_ref" />
</td>
</tr>
<tr>
<td>Amount</td>
<td>
<t t-raw="state.st_line.amount_str" />
<t t-if="state.st_line.amount_currency_str"> ( <t t-esc="state.st_line.amount_currency_str" />
)</t>
</td>
</tr>
<tr>
<td>Account</td>
<td>
<t t-esc="state.st_line.account_code" />
<t t-esc="state.st_line.account_name" />
</td>
</tr>
<tr t-if="state.st_line.narration">
<td>Note</td>
<td style="white-space: pre;">
<t t-esc="state.st_line.narration" />
</td>
</tr>
</table>
</t>
<t t-name="reconciliation.notification.reconciled">
<t t-if="details !== undefined">
<a rel="do_action" href="#" aria-label="External link" title="External link" t-att-data-action_name="details.name" t-att-data-model="details.model" t-att-data-ids="details.ids">
<t t-esc="nb_reconciled_lines" />
statement lines
</a>
have been reconciled automatically.
</t>
</t>
<t t-name="reconciliation.notification.default">
<t t-esc="message" />
<t t-if="details !== undefined">
<a class="fa fa-external-link" rel="do_action" href="#" aria-label="External link" title="External link" t-att-data-action_name="details.name" t-att-data-model="details.model" t-att-data-ids="details.ids">
</a>
</t>
</t>
<t t-name="reconciliation.notification">
<div t-att-class="'notification alert-dismissible alert alert-' + type" role="alert">
<button type="button" class="close" data-dismiss="alert" aria-label="Close">
<span title="Close" class="fa fa-times" />
</button>
<t t-if="template">
<t t-call="{{template}}" />
</t>
<t t-else="">
<t t-call="reconciliation.notification.default" />
</t>
</div>
</t>
</templates>
File diff suppressed because it is too large Load Diff
@@ -0,0 +1 @@
from . import test_reconciliation_widget
@@ -0,0 +1,239 @@
import logging
import time
import requests
import odoo.tests
from odoo.addons.account.tests.common import TestAccountReconciliationCommon
_logger = logging.getLogger(__name__)
@odoo.tests.tagged("post_install", "-at_install")
class TestUi(odoo.tests.HttpCase):
def test_01_admin_bank_statement_reconciliation(self):
bank_stmt_name = "BNK/%s/0001" % time.strftime("%Y")
bank_stmt_line = (
self.env["account.bank.statement"]
.search([("name", "=", bank_stmt_name)])
.mapped("line_ids")
)
if not bank_stmt_line:
_logger.info(
"Tour bank_statement_reconciliation skipped: bank statement %s "
"not found." % bank_stmt_name
)
return
admin = self.env.ref("base.user_admin")
# Tour can't be run if the setup if not the generic one.
generic_coa = self.env.ref(
"l10n_generic_coa.configurable_chart_template", raise_if_not_found=False
)
if (
not admin.company_id.chart_template_id
or admin.company_id.chart_template_id != generic_coa
):
_logger.info(
"Tour bank_statement_reconciliation skipped: generic coa not found."
)
return
# To be able to test reconciliation, admin user must have access to
# accounting features, so we give him the right group for that
admin.write({"groups_id": [(4, self.env.ref("account.group_account_user").id)]})
payload = {
"action": "bank_statement_reconciliation_view",
"statement_line_ids[]": bank_stmt_line.ids,
}
prep = requests.models.PreparedRequest()
prep.prepare_url(url="http://localhost/web#", params=payload)
self.start_tour(
prep.url.replace("http://localhost", "").replace("?", "#"),
"bank_statement_reconciliation",
login="admin",
)
@odoo.tests.tagged("post_install", "-at_install")
class TestReconciliationWidget(TestAccountReconciliationCommon):
@classmethod
def setUpClass(cls, chart_template_ref=None):
super().setUpClass(chart_template_ref=chart_template_ref)
cls.acc_bank_stmt_model = cls.env["account.bank.statement"]
cls.acc_bank_stmt_line_model = cls.env["account.bank.statement.line"]
def test_statement_suggestion_other_currency(self):
# company currency is EUR
# payment in USD
invoice = self.create_invoice(
invoice_amount=50, currency_id=self.currency_usd_id
)
# journal currency in USD
bank_stmt = self.acc_bank_stmt_model.create(
{
"journal_id": self.bank_journal_usd.id,
"date": time.strftime("%Y-07-15"),
"name": "payment %s" % invoice.name,
}
)
bank_stmt_line = self.acc_bank_stmt_line_model.create(
{
"payment_ref": "payment",
"statement_id": bank_stmt.id,
"partner_id": self.partner_agrolait_id,
"amount": 50,
"date": time.strftime("%Y-07-15"),
}
)
result = self.env["account.reconciliation.widget"].get_bank_statement_line_data(
bank_stmt_line.ids
)
self.assertEqual(
result["lines"][0]["reconciliation_proposition"][0]["amount_str"], "$ 50.00"
)
def test_filter_partner1(self):
inv1 = self.create_invoice(currency_id=self.currency_euro_id)
inv2 = self.create_invoice(currency_id=self.currency_euro_id)
partner = inv1.partner_id
receivable1 = inv1.line_ids.filtered(
lambda l: l.account_id.internal_type == "receivable"
)
receivable2 = inv2.line_ids.filtered(
lambda l: l.account_id.internal_type == "receivable"
)
bank_stmt = self.acc_bank_stmt_model.create(
{
"company_id": self.env.ref("base.main_company").id,
"journal_id": self.bank_journal_euro.id,
"date": time.strftime("%Y-07-15"),
"name": "test",
}
)
bank_stmt_line = self.acc_bank_stmt_line_model.create(
{
"name": "testLine",
"statement_id": bank_stmt.id,
"amount": 100,
"date": time.strftime("%Y-07-15"),
"payment_ref": "test",
}
)
# This is like input a partner in the widget
mv_lines_rec = self.env[
"account.reconciliation.widget"
].get_move_lines_for_bank_statement_line(
bank_stmt_line.id,
partner_id=partner.id,
excluded_ids=[],
search_str=False,
mode="rp",
)
mv_lines_ids = [line["id"] for line in mv_lines_rec]
self.assertIn(receivable1.id, mv_lines_ids)
self.assertIn(receivable2.id, mv_lines_ids)
# With a partner set, type the invoice reference in the filter
mv_lines_rec = self.env[
"account.reconciliation.widget"
].get_move_lines_for_bank_statement_line(
bank_stmt_line.id,
partner_id=partner.id,
excluded_ids=[],
search_str=inv1.payment_reference,
mode="rp",
)
mv_lines_ids = [line["id"] for line in mv_lines_rec]
self.assertIn(receivable1.id, mv_lines_ids)
self.assertNotIn(receivable2.id, mv_lines_ids)
# Without a partner set, type "deco" in the filter
mv_lines_rec = self.env[
"account.reconciliation.widget"
].get_move_lines_for_bank_statement_line(
bank_stmt_line.id,
partner_id=False,
excluded_ids=[],
search_str="deco",
mode="rp",
)
mv_lines_ids = [line["id"] for line in mv_lines_rec]
self.assertIn(receivable1.id, mv_lines_ids)
self.assertIn(receivable2.id, mv_lines_ids)
# With a partner set, type "deco" in the filter and click on the first
# receivable
mv_lines_rec = self.env[
"account.reconciliation.widget"
].get_move_lines_for_bank_statement_line(
bank_stmt_line.id,
partner_id=partner.id,
excluded_ids=[receivable1.id],
search_str="deco",
mode="rp",
)
mv_lines_ids = [line["id"] for line in mv_lines_rec]
self.assertNotIn(receivable1.id, mv_lines_ids)
self.assertIn(receivable2.id, mv_lines_ids)
def test_partner_name_with_parent(self):
parent_partner = self.env["res.partner"].create(
{
"name": "test",
}
)
child_partner = self.env["res.partner"].create(
{
"name": "test",
"parent_id": parent_partner.id,
"type": "delivery",
}
)
self.create_invoice_partner(
currency_id=self.currency_euro_id, partner_id=child_partner.id
)
bank_stmt = self.acc_bank_stmt_model.create(
{
"company_id": self.env.ref("base.main_company").id,
"journal_id": self.bank_journal_euro.id,
"date": time.strftime("%Y-07-15"),
"name": "test",
}
)
bank_stmt_line = self.acc_bank_stmt_line_model.create(
{
"name": "testLine",
"statement_id": bank_stmt.id,
"amount": 100,
"date": time.strftime("%Y-07-15"),
"payment_ref": "test",
"partner_name": "test",
}
)
bkstmt_data = self.env[
"account.reconciliation.widget"
].get_bank_statement_line_data(bank_stmt_line.ids)
self.assertEqual(len(bkstmt_data["lines"]), 1)
self.assertEqual(bkstmt_data["lines"][0]["partner_id"], parent_partner.id)
@@ -0,0 +1,25 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo>
<data>
<record id="view_bank_statement_form" model="ir.ui.view">
<field name="name">account.bank.statement.inherit.view.form</field>
<field name="model">account.bank.statement</field>
<field name="inherit_id" ref="account.view_bank_statement_form" />
<field name="arch" type="xml">
<xpath expr="//button[@name='button_post']" position="before">
<button
name="action_bank_reconcile_bank_statements"
string="Reconcile"
type="object"
class="oe_highlight"
attrs="{'invisible':['|','|',('all_lines_reconciled','=',True),('line_ids','=',[]),('state', '!=', 'posted')]}"
/>
</xpath>
<xpath expr="//field[@name='date']" position="after">
<field name="accounting_date" groups="base.group_no_one" />
</xpath>
</field>
</record>
</data>
</odoo>
@@ -0,0 +1,47 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo>
<data>
<record id="account_journal_dashboard_kanban_view" model="ir.ui.view">
<field name="name">account.journal.inherit.dashboard.kanban</field>
<field name="model">account.journal</field>
<field
name="inherit_id"
ref="account.account_journal_dashboard_kanban_view"
/>
<field name="arch" type="xml">
<xpath
expr="//kanban/templates//div[@id='dashboard_bank_cash_left']/t[1]"
position="before"
>
<t t-if="dashboard.number_to_reconcile > 0">
<button
type="object"
name="action_open_reconcile"
class="btn btn-primary"
> Reconcile <t
t-esc="dashboard.number_to_reconcile"
/> Items</button>
</t>
</xpath>
<xpath
expr="//kanban/templates//div[@id='dashboard_bank_cash_right']"
position="inside"
>
<t t-if="dashboard.number_to_check > 0">
<div class="row">
<div class="col overflow-hidden text-left">
<a type="object" name="action_open_reconcile_to_check">
<t t-esc="dashboard.number_to_check" /> to check</a>
</div>
<div class="col-auto text-right">
<span>
<t t-esc="dashboard.to_check_balance" />
</span>
</div>
</div>
</t>
</xpath>
</field>
</record>
</data>
</odoo>
@@ -0,0 +1,17 @@
<odoo>
<record id="view_account_payment_form" model="ir.ui.view">
<field name="name">account.payment.form.inherit.account_accountant</field>
<field name="model">account.payment</field>
<field name="inherit_id" ref="account.view_account_payment_form"/>
<field name="arch" type="xml">
<xpath expr="//div[@name='button_box']" position="inside">
<button name="open_payment_matching_screen" type="object"
string="Payment Matching" class="oe_stat_button" icon="fa-dollar"
groups="account.group_account_user"
attrs="{'invisible': [('is_reconciled', '=', True)]}"/>
</xpath>
</field>
</record>
</odoo>
@@ -0,0 +1,30 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo>
<data>
<record id="action_bank_reconcile" model="ir.actions.client">
<field name="name">Reconciliation on Bank Statements</field>
<field name="res_model">account.bank.statement.line</field>
<field name="tag">bank_statement_reconciliation_view</field>
</record>
<record id="action_view_account_move_line_reconcile" model="ir.actions.client">
<field name="name">Reconcile</field>
<field name="tag">manual_reconciliation_view</field>
<field name="binding_model_id" ref="account.model_account_move_line" />
<field name="binding_type">action</field>
<field name="binding_view_types">list</field>
</record>
<record id="action_manual_reconciliation" model="ir.actions.client">
<field name="name">Reconciliation</field>
<field name="tag">manual_reconciliation_view</field>
</record>
<menuitem
id="menu_action_manual_reconciliation"
parent="account.menu_finance_entries_actions"
action="action_manual_reconciliation"
sequence="25"
/>
</data>
</odoo>
@@ -0,0 +1,22 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo>
<template id="assets_backend" name="account_reconciliation_widget assets" inherit_id="web.assets_backend">
<xpath expr="." position="inside">
<link rel="stylesheet" type="text/scss" href="/account_reconciliation_widget/static/src/scss/account_reconciliation.scss" />
<script type="text/javascript" src="/account_reconciliation_widget/static/src/js/reconciliation/reconciliation_action.js" />
<script type="text/javascript" src="/account_reconciliation_widget/static/src/js/reconciliation/reconciliation_model.js" />
<script type="text/javascript" src="/account_reconciliation_widget/static/src/js/reconciliation/reconciliation_renderer.js" />
</xpath>
</template>
<template id="qunit_suite" name="account tests" inherit_id="web.qunit_suite_tests">
<xpath expr="." position="inside">
<script type="text/javascript" src="/account_reconciliation_widget/static/tests/account_reconciliation_tests.js" />
</xpath>
</template>
</odoo>
+45
View File
@@ -0,0 +1,45 @@
====================================
Odoo 14 Accounting Financial Reports
====================================
This Module will bring back the accounting reports for Odoo 14 Community Edition
Installation
============
To install this module, you need to:
Download the module and add it to your Odoo addons folder. Afterward, log on to
your Odoo server and go to the Apps menu. Trigger the debug mode and update the
list by clicking on the "Update Apps List" link. Now install the module by
clicking on the install button.
Upgrade
============
To upgrade this module, you need to:
Download the module and add it to your Odoo addons folder. Restart the server
and log on to your Odoo server. Select the Apps menu and upgrade the module by
clicking on the upgrade button.
Configuration
=============
There is Nothing to Configure
Credits
=======
Contributors
------------
* Odoo Mates <odoomates@gmail.com>
Author & Maintainer
-------------------
This module is maintained by the Odoo Mates
+8
View File
@@ -0,0 +1,8 @@
# -*- coding: utf-8 -*-
from . import wizard
from . import report
def _pre_init_clean_m2m_models(cr):
cr.execute("""DROP TABLE IF EXISTS account_journal_account_report_partner_ledger_rel""")
+51
View File
@@ -0,0 +1,51 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
{
'name': 'Odoo 14 Accounting Financial Reports',
'version': '14.0.5.0.0',
'category': 'Invoicing Management',
'description': 'Accounting Reports For Odoo 14, Accounting Financial Reports,'
' Odoo 14 Financial Reports',
'summary': 'Accounting Reports For Odoo 14',
'sequence': '10',
'author': 'Odoo Mates, Odoo SA',
'license': 'LGPL-3',
'company': 'Odoo Mates',
'maintainer': 'Odoo Mates',
'support': 'odoomates@gmail.com',
'website': 'https://www.odoomates.tech',
'depends': ['account'],
'live_test_url': 'https://www.youtube.com/watch?v=Qu6R3yNKR60',
'demo': [],
'data': [
'security/ir.model.access.csv',
'security/security.xml',
'views/menu.xml',
'views/financial_report.xml',
'views/account_settings.xml',
'wizard/partner_ledger.xml',
'wizard/general_ledger.xml',
'wizard/trial_balance.xml',
'wizard/balance_sheet.xml',
'wizard/profit_and_loss.xml',
'wizard/tax_report.xml',
'wizard/aged_partner.xml',
'wizard/journal_audit.xml',
'report/report.xml',
'report/report_partner_ledger.xml',
'report/report_general_ledger.xml',
'report/report_trial_balance.xml',
'report/report_financial.xml',
'report/report_tax.xml',
'report/report_aged_partner.xml',
'report/report_journal_audit.xml',
'report/report_journal_entries.xml',
],
'pre_init_hook': '_pre_init_clean_m2m_models',
'installable': True,
'application': False,
'auto_install': False,
'images': ['static/description/banner.gif'],
'qweb': [],
}
@@ -0,0 +1,16 @@
## Module <accounting_pdf_reports>
#### 28.02.2022
#### Version 14.0.5.0.0
##### IMP
- code refactoring
#### 01.02.2022
#### Version 14.0.4.8.0
##### FIX
- New translation
#### 13.07.2021
#### Version 14.0.4.7.0
##### IMP
- Menu Re-arrangement
File diff suppressed because it is too large Load Diff

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