Nov 07

Alokasi pembayaran multi-currency

Di Indonesia kita tentunya tidak lepas dari transaksi yang mempergunakan mata uang asing. Di bagian Finance, kita lazim melakukan pelunasan invoice dalam mata uang asing dengan mempergunakan mata uang Rupiah. Karena perbedaan mata uang ini, biasanya kita mendapati perbedaan selisih kurs antara kedua mata uang tersebut.

Pertanyaannya, bagaimanakah kita menangani proses transaksi yang demikian di dalam Goodwill ERP ? Mudah atau sulitkah ?

Sebenarnya proses transaksi demikian tidak memiliki perbedaan dengan transaksi yang sama mata uang. Untuk lebih jelasnya dalam video berikut ini kami memeragakan bagaimana melakukannya di dalam window Payment.

Youtube channel Goodwill ERP – Alokasi pembayaran beda mata uang.

Untuk transaksi yang lebih kompleks, seperti pembayaran multi payment atau parsial, seperti biasa Anda bisa melakukannya lewat form Payment Allocation, dengan memperhatikan dua hal berikut ini.

  • Kolom Currency di Payment Allocation harus dipilih sesuai dengan Currency Invoice yang kita mau alokasikan.

Jika Invoice kita dalam USD maka pilihlah Currency “USD”. Kemudian centanglah kolom Multi-Currency. Maka baik Invoice maupun Payment Anda yang beda mata uang tersebut akan muncul di layar.

  • Kolom Date di Payment Allocation harus dipilih sesuai dengan Tanggal Payment yang kita mau alokasikan.

Tanggal yang dipilih sebagai tanggal Payment Allocation akan menentukan kurs mana yang akan digunakan. Oleh sebab itu jika Anda melakukan pelunasan dengan 2 atau lebih Payment, Anda harus mencermati tanggal-tanggalnya.

  • Jika tanggal masing-masing Payment sama semua, maka Anda bisa melakukan satu kali alokasi sekaligus.
  1. Invoice A Dialokasikan dengan Payment 1, 2 & 3 (tanggal sama semua). Proses.

  • Jika tanggal masing-masing Payment berbeda-beda, maka alokasi dilakukan secara bertahap dengan urutan seperti berikut :
  1. Invoice A Dialokasikan dengan Payment 1 (sesuai tanggal Payment 1). Proses.

  2. Invoice A Dialokasikan dengan Payment 2 (sesuai tanggal Payment 2). Proses.

  3. Invoice A Dialokasikan dengan Payment 3 (sesuai tanggal Payment 3). Proses.

Semoga penjelasan ini bermanfaat. Selamat mencoba!

Sep 25

Cara Mencetak Custom Paper dengan Adobe Reader di Firefox

Permasalahan yang sering kami temukan saat implementasi adalah user ingin menggunakan custom paper akan tetapi hasil print tidak sesuai dengan apa yang diharapkan, oleh karena itu kami menulis blog mengenai bagaimana cara agar dapat menghasilkan print sesuai harapan.

Tujuan instalasi ini adalah agar custom paper yang telah di setting dapat di print sesuai dengan ukuran kertasnya.

Langkah Pertama

Pastikan instalasi dilakukan pada komputer yang terhubung dengan printer, download Adobe Reader di http://get.adobe.com/reader/

 step-1

 

Lalu klik tombol Install now seperti pada gambar diatas yang sudah dilingkari.

Kemudian dilanjutkan dengan proses instalasi.

step-2

Klik Next, tunggu proses download dan instalasi.

step-4

Selesai langkah pertama.

Langkah kedua

Setelah melewati langkah pertama dilanjutkan dengan tahap konfigurasi ,

tahap konfigurasi ini dibagi menjadi 3 konfigurasi yaitu ;

  1. Web Browser (Firefox).

Konfigurasi ini dilakukan agar web Browser dapat mengenali addons yang akan digunakan untuk membuka file PDF.

Klik  logo  kemudian  pilih Options, cari Tab Application Panel

lalu Portable Document Format (PDF) kemudian pilih Adobe Acrobat(in firefox). Untuk lebih jelas ada pada gambar di bawah ini.

step-5

   2. Printer (Custom Paper).

 

Masuk ke Control Panel cari Devices and Printers, pilih printer yang akan di gunakan, pada bagian atas ada tepatnya dibawah path folder pilih Printer server properties, akan muncul seperti gambar di bawah ini.

step

Centang Create a new form dan masukan ukuran kertas yang diinginkan lalu tekan tombol Save form.Pastikan untuk mengukur kertas yang hendak digunakan.

    3.Adobe Reader.

Konfigurasi pada Adobe Reader pastikan pada saat print, printer yang digunakan sudah benar, dan klik tombol Page Setup untuk memilih ukuran kertas yang diinginkan.

step-3 Pada gambar diatas terdapat lingkaran merah pastikan tidak tercentang.

Semoga Membantu.

May 16

Goodwill menawarkan layanan Cloud ERP on-demand

Generasi Baru Software ERP Indonesia

Goodwill ERP adalah software ERP modern dengan teknologi cloud yang aman, cepat dan handal. Software ERP ini merupakan aplikasi bisnis lengkap, mulai dari inventory, supply chain, finansial, akuntansi, manajemen proyek, sampai manufacturing yang dirancang khusus untuk kebutuhan usaha di Indonesia. Kehadiran Goodwill ERP memungkinkan banyak perusahaan dapat mengimplementasikan software ERP tanpa harus mengeluarkan biaya besar dan proses implementasi yang rumit. Dengan teknologi Cloud Computing, pemakai dapat langsung “menyewa” sistem ERP siap-pakai (software, server, storage, dan lainnya) dengan nilai ekonomis yang sangat terjangkau dan proses go-live yang cepat.Goodwill ERP sudah diimplementasikan di banyak bidang usaha sejak tahun 2005, mulai dari distributor, pabrik, jasa, otomotif hingga ke perkebunan sawit. Dan mulai versi 3.7, Goodwill ERP diluncurkan sebagai produk dan layanan berbasiskan Cloud dengan antar-muka web yang sangat cepat dan ringan. Pemakai kemudian dapat memilih menggunakan Goodwill ERP dengan model layanan SaaS (on-demand) atau private cloud hosting di data center dalam/luar negeri. Selain itu, Goodwill ERP juga dapat dideploy secara on premise di server kantor Anda sendiri.

Cloud on-demand

Dunia semakin berkembang ke arah digitalisasi dan globalisasi. Siap tidak siap, kita semua harus dapat mengikuti kemajuan zaman ini, diantaranya dengan kehadiran teknologi komputasi terdistribusi yang lazim disebut dengan “Cloud Computing”. Teknologi Cloud memungkinkan banyak perusahaan untuk dapat memanfaatkan software ERP sebagai sebuah layanan on-demand yang mudah dan cepat. Dengan model layanan ini, pengguna diuntungkan dengan tidak perlu mengeluarkan biaya lisensi software dan investasi hardware yang besar.

Dengan berlangganan mulai dari 300 ribu rupiah per bulan, Anda sudah bisa menikmati fitur-fitur aplikasi ERP kelas dunia.

Private Server

Goodwill ERP telah menciptakan cara bekerja yang baru dan modern dimana kita tidak lagi terikat oleh keterbatasan waktu dan tempat. Untuk menambah kenyamanan Anda dalam bekerja, kami juga dapat menyediakan layanan Goodwill ERP dalam server pribadi Anda sendiri, yang hanya bisa diakses oleh Anda saja. Dengan model layanan ini, Anda memiliki fleksibilitas yang tinggi untuk mengatur konfigurasi software ERP Anda.

Layanan ini merupakan sebuah “win-win solution” yang memadukan manfaat cloud ERP dan privasi layaknya sebuah ERP in-house. Layanan ini sangat spesifik dan individual. Harap untuk menghubungi kami untuk informasi lebih jauh.

Goodwill ERP

Goodwill ERP dapat diakses dalam beragam gadget

Keunggulan Goodwill ERP

1. Akses Tanpa Batasan

Dengan antar-muka web, pemakai dapat terhubung secara aman dari mana pun, kapan pun, dan menggunakan device apa pun. Sangat cocok untuk bisnis yang letak geografisnya berbeda-beda (misal, banyak outlet dan cabang).

2. Investasi Rendah

Pemakai tidak perlu keluar biaya besar untuk membeli lisensi software, server baru, UPS, data storage, dan sebagainya. Pemakai cukup membayar sesuai pemakaian.

3. Pengelolaan Resiko

Sistem dan data pemakai dijaga dan dipelihara dengan standard keamanan tingkat tinggi dalam sebuah data center. Sebaliknya menyimpan data di kantor jauh lebih berisiko (kebakaran, staff yang tidak kompeten, kegagalan backup, dll)


FAQ

1. Software apa saja yang harus diinstal ?

Anda cukup pakai browser seperti Mozilla Firefox atau Google Chrome versi terbaru.

2. Bagaimana kalau mau konsultasi dulu sebelum berlangganan ?

Anda bisa menghubungi sales person kami untuk mengatur jadwal demo ke tempat Anda.

3. Berapa kecepatan bandwidth internet yang diperlukan?

Dalam penggunaan normal, Goodwill ERP dapat diakses mulai dari kecepatan 128 Kbps.

4. Bagaimana dengan keamanan data saya ?

Data anda dijaga dan dibackup dalam data center yang sudah disertifikasi ISO 27001:2005 (Information Security).

5. Dimanakah data saya berada?

Data center terletak di IDC Duren 3, Jakarta Selatan, yang merupakan jantung dari peering Internet Indonesia yang terbesar yaitu OpenIXP dengan bandwidth 1 Gbps.

6. Apakah saya bisa migrasi ke sistem lain dengan mudah ?

Anda bisa mengekspor data anda ke dalam format spreadsheet (xls).

7. Dimana saya bisa mendapatkan informasi lebih jauh ?

Anda bisa membuka websitenya di GoodwillERP.com

atau dengan menghubungi :

PT Goodwill Bintang Utama
Office: +62 (21) 661-2164
Sales: +62 (21) 707-95895
Email: sales@goodwill.co.id

Mar 10

Cara Instalasi Adempiere di Cloud

Rasanya sudah lama kami tidak mengulas topik mengenai instalasi. Makanya untuk meneruskan tradisi ini, dalam postingan kali ini saya akan menerangkan bagaimana cara instalasi Adempiere di cloud.

KONFIGURASI

Pada prinsipnya instalasi di cloud sama dengan yang biasa kita lakukan di server sendiri (on-premise). Saya mengasumsikan anda sudah menyiapkan dua buah virtual machine dengan sistem operasi CentOS 64 bit. Satu untuk application server dan satu lagi untuk database servernya. Dalam contoh di bawah, asumsikan IP masing-masing adalah 10.210.10.101 dan 10.210.10.102. Kalau anda mau coba-coba di local machine, anda bisa juga menggunakan VirtualBox. Untuk spek virtual hardwarenya, saya menganjurkan 2 CPU core dan 4 GB RAM.

Kalau anda sudah mempunyai VM, anda bisa memeriksa dulu konfigurasi VM anda tersebut.

Cara memeriksa versi CentOs:

# cat /etc/redhat-release

Cara memeriksa OS 32 bit atau 64 bit :

# uname -a

Kalau hasilnya seperti ini artinya 64 bit.
Linux hostname 2.6.9-55.0.2.ELsmp #1 SMP Tue Jun 12 17:58:20 EDT 2007 x86_64 x86_64 x86_64 GNU/Linux

Kalau hasilnya seperti ini artinya 32 bit.
Linux hostname 2.6.9-55.0.2.ELsmp #1 SMP Tue Jun 12 17:59:08 EDT 2007 i686 i686 i386 GNU/Linux

Memeriksa CPU info :

# cat /proc/cpuinfo

# lspci -vv

INSTALL DATABASE

Ok, sekarang sudah siap ? Let’s get started. Kita sekarang login pakai root ke database servernya dulu.

Download PostgreSQL

# wget http://yum.postgresql.org/9.2/redhat/rhel-6-x86_64/pgdg-centos92-9.2-6.noarch.rpm
# rpm -i http://yum.postgresql.org/9.2/redhat/rhel-6-x86_64/pgdg-centos92-9.2-6.noarch.rpm
# yum install postgresql92-server postgresql92-contrib

# service postgresql-9.2 initdb

# service postgresql-9.2 start

Set PostgreSQL 9 Environment:

# su – postgres
# nano .bash_profile

[ -f /etc/profile ] && source /etc/profile
PGDATA=/var/lib/pgsql/9.2/data
export PGDATA
PATH=$PATH:$HOME/bin:/usr/pgsql-9.2/bin
export PATH

Jangan logout dulu, sekarang kita harus ganti password postgres:

# psql

postgres=# ALTER USER postgres WITH PASSWORD ‘mySecurePassword’;
postgres=# \q
# exit

# passwd postgres
- mySecurePassword

Kemudian jangan lupa konfigurasi file pg_hba.conf dan postgresql.conf:

# nano /var/lib/pgsql/9.2/data/pg_hba.conf

# nano /var/lib/pgsql/9.2/data/postgresql.conf

Sekarang kita nyalakan service-nya.

# service postgresql-9.2 restart

Supaya service-nya otomatis dinyalakan pada waktu booting:

# chkconfig –level 234 postgresql-9.2 on
# chkconfig –list postgresql

Setelah itu, buatlah user ‘adempiere’ di PostgreSQL (don’t change the user name!)

# su – postgres
# psql

postgres=# CREATE USER adempiere WITH PASSWORD ‘adempiere’;
postgres=# CREATE DATABASE starprise;
postgres=# \q

Sampai disini, database server sudah siap.

INSTALL JDK

Kita sekarang login pakai root ke application server. Pertama-tama kita install dulu Oracle JDK. Bisa juga pakai OpenJDK sebagai alternatif. Untuk mengunduhnya, Oracle mensyaratkan kita untuk menyetujui halaman perjanjian lisensi terlebih dahulu. Tapi karena kita sekarang sedang berada dalam VM yang tidak mempunyai GUI, maka kita perlu sedikit trik supaya server Oracle mengira kita sudah menyetujui halaman tersebut. Cobalah perintah di bawah ini.

# wget –no-cookies –header “Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com” http://download.oracle.com/otn-pub/java/jdk/6u38-b05/jdk-6u38-linux-x64-rpm.bin

Ok, kalau sukses, anda segera lanjutkan dengan menginstall JDK-nya.

# sh jdk-6u14-linux-i586-rpm.bin
accept license

# ln -s -f /usr/java/jdk1.6.0_38/bin/java /usr/bin/java

# java -version

Set java home and path:

# cd /etc/profile.d
# nano /etc/profile.d/starprise.sh

Isi dari file starprise.sh ini adalah sebagai berikut:

export JAVA_HOME=/usr/java/jdk1.6.0_38/
export ADEMPIERE_HOME=/opt/Adempiere
export PATH=$PATH:$HOME/bin:$JAVA_HOME/bin

Sampai disini anda jangan logout dulu dari Application Server.

INSTALL ADEMPIERE

Sebelum anda melanjutkan ke langkah berikutnya, coba dulu apakah Application Server anda bisa connect ke Database Server.

# psql -h 10.210.10.102 -p 5432 -U adempiere -d starprise

Kalau tidak bisa, anda harus periksa ulang konfigurasi pg_hba dan iptables di Database Server.
Jika berhasil, maka anda lanjutkan dengan menginstall Adempiere.

# useradd adempiere
# passwd adempiere

Pastikan resolusi nama server dengan IP Public:

# hostname
# nano /etc/hosts

tambahkan seperti ini kira-kiranya: 118.99.99.99 GoodWill

# unzip Adempiere_370.zip -d /opt/

Copy juga file AdempiereEnv.properties yang sudah dikonfigurasi sebelumnya.

scp AdempiereEnv.properties root@118.99.99.99:/opt/Adempiere

Ubah port ke 8080 & 4433 di dalam file ini (karena non root tidak boleh pakai port < 1000)

Supaya Adempiere service otomatis dijalankan ketika booting:

# chmod +x /etc/init.d/adempiere

# chkconfig adempiere on

Salah satu masalah yang sering dialami oleh para nubie adalah masalah kepemilikan log file. Seringnya gara-gara owner-nya adalah root, oleh sebab itu anda harus ganti menjadi user dan group anda.

# cd /opt
# chown -R adempiere Adempiere
# chgrp -R adempiere Adempiere

# cd Adempiere/
# chmod +x *.sh
# chmod +x utils/*.sh
# chmod +x utils/postgresql/*.sh

Sekarang anda boleh login dengan menggunakan user adempiere.

# sh RUN_silentsetup.sh

Konfigurasi Adempiere.properties
- ubah MaxPoolSize kurang dari PostgreSQL max_connections

Import Database

# sh utils/RUN_DBRestore.sh

Nyalakan servernya:

# service adempiere start

Selamat! Anda telah berhasil melakukan instalasi Adempiere ke cloud. Sekarang anda boleh coba buka IP Public anda di dalam browser, sambil jangan lupa menambahkan port 8080. Jika tidak ada masalah, maka anda akan segera masuk ke halaman muka Adempiere. Jika masih belum berhasil, anda harus periksa kembali konfigurasi port di dalam Iptables Application Server.

Goodwill Consulting is a long time Adempiere / Idempiere supporter since their inception. We are offering software-as-a-service solution on the cloud based on Adempiere / Idempiere. For more information, you can drop us a visit at www.goodwillerp.com

Dec 08

Recalculating average costing backwardly

Dealing with average costing could be a nightmare for most of us. Chuck Boecking, a fellow Adempiere consultant based in US explained it very well in his blog why we (not to) choose average costing in a ERP.

ERP is a perpetual inventory accounting system. Therefore, the system  will post every inventory transaction as they happen. When you use average invoicing, your inventory valuation will almost always be inaccurate. For example, Let’s assume you buy a bunch of products over time over different costs. Then, over time, you sell all product. The resulting inventory GL balance will almost always be non-zero. Therefore, you will have a phantom inventory balance. If your operations are even a little complex, the variances that result from average invoice costing can be difficult to track and explain.

Most of the time we heard about recommendation on using Standard Costing as a way to escape from this nightmare. In earlier release of Compiere (v. 2.5), even there are only Standard Costing and Last PO price method. However in Indonesia, the requirement for standard accounting practice is to use either Average Costing or FIFO/LIFO. I still can recall back in 2005 how our team had to develop our own average costing functionality to satisfy the clients’ need.

Eventually Compiere overhauled its costing engine and introduced average costing and FIFO/LIFO. But it’s so poor and immature we could hardly use it in real world. Our team once again drilled down the costing engine and did some major hacks. We contributed it back to community in 2006 although we know it’s not crystal clear perfect yet. At least now we had a working average costing in Adempiere (Hengsin Low later added more workarounds in 2010).

One culprit we still found anyway is the fact that the ERP is allowing a back-dated transaction. Since we are using a moving (weighted) average costing, we could have trouble if user is entering transactions in a not so chronological manner.

I am thinking to have a process where we could tell the ERP to recalculate the costing for a given period. Our team had made a good effort so far. However I’m still not satisfied and then I stumbled on this link referenced by one of my client, whom now became a good friend of mine.

The idea is to calculate the average costing backwardly, instead of from the beginning which is very time and resource consuming. I copy the content of the link here, in case it’s lost.

So let’s begin.

There are two tables:
-the one that holds inventory transactions, and
-the one that holds the latest inventory valuation

I am trying to make an inventory valuation report using average costing method based on a certain date. Doing it the normal way, calculating from the beginning until that specific date, will yield variable response time. Imagine calculating on five years worth of data ( and thousands different inventory items ). It will take considerable amount of time ( and my company is not silicon-valley grade. meaning, 2 core cpu and 8 GB of RAM only) so I am calculating it backwardly: from the latest (current) backtrack to that specific date.

(Every month the accounting dept will check on data, so the calculation will only deal with 1 month’s worth of data, forever. equal to consistent unchanging performance)

I have merged the table into one on the script below

create table test3 ( rn integer, amt numeric, qty integer, oqty integer);
insert into test3 (rn,amt,qty,oqty) values (0,2260038.16765793,8,0);
insert into test3 (rn,amt,qty,oqty) values (1,1647727.2727,3,0);
insert into test3 (rn,amt,qty,oqty) values (2,2489654.75326715,0,1);
insert into test3 (rn,amt,qty,oqty) values (3,2489654.75326715,0,1);
insert into test3 (rn,amt,qty,oqty) values (4,1875443.6364,1,0);
insert into test3 (rn,amt,qty,oqty) values (5,1647727.2727,3,0);
insert into test3 (rn,amt,qty,oqty) values (6,3012987.01302857,0,1);
insert into test3 (rn,amt,qty,oqty) values (7,3012987.01302857,0,1);

select * from test3; (already sorted desc so rn=1 is the newest transaction)

rn  amt        qty  oqty
0   2260038.168 8   0    --> this is the current average
1   1647727.273 3   0
2   2489654.753 0   1
3   2489654.753 0   1
4   1875443.636 1   0
5   1647727.273 3   0
6   3012987.013 0   1
7   3012987.013 0   1

Average Costing Method backtracking ( given current avg calculate last transaction avg, and so on until nth transactions )

Avg (n) = ((Avg(n-1) * (Cum Qty(n)+In Qty(n))) – (In Amount(n) * In Qty (n)) + (Avg(n-1) * Out Qty(n))/(Cum Qty(n)+Out Amount(n))

Cumulative qty for backtracking transactions would be minus for in, plus for out. So if current qty is 8, transaction in qty before is 3, then cumulative qty for that transaction is 5.

To calculate the average for one transaction before last, then we use current average to use in that transaction calculation.

with recursive
runsum (id,amt,qty,oqty,sqty,avg) as
    (select data.id, data.amt, data.qty, data.oqty, data.sqty, data.avg
     from (
        select rn as id,amt,qty, oqty,
        sum(case when rn=0 then qty else
             case when oqty=0 then qty*-1
                else oqty end end) over (order by rn) as sqty, lag(amt) over (order by rn) as avg
          from test3 ) data
         ),
counter (maximum) as
         (select count(rn)
          from test3
         ),
trans (n, id,amt,qty,oqty,sqty,prevavg,avg) as
    (select 0 n, id,amt,qty,oqty, sqty,avg,avg
      from runsum
     union
    select trans.n+1, runsum.id,trans.amt,trans.qty, trans.oqty, trans.sqty,
    lag(trans.avg) over (order by 1),
    case when runsum.sqty=0 then runsum.amt else
    ((trans.prevavg*(runsum.sqty+trans.qty))-(runsum.amt*trans.qty)+(trans.prevavg*trans.oqty))/(runsum.sqty+trans.oqty)
    end
    from runsum join trans using (id)
    where trans.n<(select maximum*2 from counter))
select *
from trans
where prevavg is null and avg is not null
order by id;

The result is supposed to be like this

rn  amt        qty oqty sqty sum avg
1   1647727.273 3   0   5   2627424.705
2   2489654.753 0   1   6   2627424.705
3   2489654.753 0   1   7   2627424.705
4   1875443.636 1   0   6   2752754.883
5   1647727.273 3   0   3   3857782.493
6   3012987.013 0   1   4   3857782.493
7   3012987.013 0   1   5   3857782.493

I hope we could have something working in near future. So stay tuned.

Goodwill Consulting is a long time Adempiere / Idempiere supporter since their inception. We are offering software-as-a-service solution on the cloud based on Adempiere / Idempiere. For more information, you can drop us a visit at www.goodwillerp.com

Nov 27

Invoicing and payment terms

Commonly used invoice payment terms and their meanings

This list explains many of the terms commonly used on invoices.

Invoice payment terms

Net 7 Payment seven days after invoice date
Net 10 Payment ten days after invoice date
Net 30 Payment 30 days after invoice date
Net 60 Payment 60 days after invoice date
Net 90 Payment 90 days after invoice date
EOM End of month
21 MFI 21st of the month following invoice date
1 % 10 Net 30 1 per cent discount if payment received within ten days otherwise payment 30 days after invoice date
COD Cash on delivery
Cash account Account conducted on a cash basis, no credit
Letter of credit A documentary credit confirmed by a bank, often used for export
Bill of exchange A promise to pay at a later date, usually supported by a bank
CND Cash next delivery
CBS Cash before shipment
CIA Cash in advance
CWO Cash with order
1MD Monthly credit payment of a full month’s supply
2MD As above plus an extra calendar month
Contra Payment from the customer offset against the value of supplies purchased from the customer
Stage payment Payment of agreed amounts at stages

Many of them are working out-of-the-box in our Goodwill ERP. However in implementations we sometimes find a very unusual requirement. Like in one case, in Karawang, they sell  motorcycles with payment term “after harvesting” (what?) which means the customer will pay you after the next harvest season. Only in Indonesia, grrr…. :D

Anyway, if you need a special treatment for your business case, let us know. We can help you.

Nov 22

Flexible Precision In Numeric Display Type

Hi all,

Today I would like to share my approach to provide  flexible precision in numeric display type. As you know there are several numeric display types in Adempiere / Idempiere. You can find them in the list of Reference Type in Table & Column window. You can see you can have either Number, Amount, Cost+Price, Quantity or Integer. While Integer is obviously for whole number, there is confusion to know the difference between the rest.

The differences are easily tracked down in DisplayType class which you can find in org.compiere.util. It is the minimum number of digits allowed in the fraction portion of a number. So there you have:

Integer  : None
Quantity : None
Amount   : 2
Cost+Price: 2
Number   : 1

As you can see Cost+Price is having the same number of digits as Amount. You can not tell the difference between the two. So let’s make some difference. My workaround is to modify one line in DisplayType class. I would change the code so the minimum fraction digits for Cost+Price is taken from System Configuration that I can manage later. It even gives me better flexibility!

else if (displayType == CostPrice)
{
format.setMaximumIntegerDigits(MAX_DIGITS);
format.setMaximumFractionDigits(MAX_FRACTION);
format.setMinimumFractionDigits(
MSysConfig.getIntValue(“DISPLAY_TYPE_COSTPRICE_FRACTION”, AMOUNT_FRACTION, Env.getAD_Client_ID(Env.getCtx())));
}

In implementation you would probably need to have a numeric display type where it can support more than 2 number of digits in the fraction portion. I hope the modification I share with you today can help you in this situation.

Goodwill Consulting is a long time Adempiere / Idempiere supporter since their inception. We are offering software-as-a-service solution on the cloud based on Adempiere / Idempiere. For more information, you can drop us a visit at www.goodwillerp.com

Nov 21

Keamanan Software Open Source

Banyak orang kerap meragukan sistem keamanan software open source. Menurut anggapan mereka, karena open source maka siapa saja bisa mengetahui sistem keamanan yang digunakan, membongkar kelemahannya dan akhirnya membobolnya.

Menurut saya sebaliknya. Beberapa software propietary memang ada yang menerapkan sistem keamanan yang sifatnya propietary. Tetapi dalam banyak hal, sistem keamanan software open source sama dengan sistem keamanan yang dipakai di software lain. Dengan model terbuka, software open source justru menjamin bahwa sistem keamanan yang dipakai adalah sistem yang jujur.

Cobalah baca berita yang satu ini.

The NSA has asked Linus Torvalds to install backdoors into GNU/Linux

Berita yang mengejutkan ini datang dari pengakuan Nils Torvalds, ayah dari Linus Torvalds si pembuat Linux, yang adalah anggota parlemen Uni Eropa. Karena Linux adalah sistem operasi open source maka hal tersebut mustahil untuk dilakukan karena siapa pun akan dapat menemukan backdoor yang dipasang.

Akan berbeda ceritanya dengan software propietary. Kita tidak akan pernah tahu apa yang terdapat di dalam software tersebut. Pemakai tidak akan pernah tahu ada tidaknya backdoor. Bahkan pejabat resmi vendor software tersebut pun tidak dapat (atau tidak mau) menjawabnya.

Untuk video lengkapnya tonton disini

Kenyataan ini sangat mengerikan apabila kita membayangkan orang lain bisa mengakses dan mengontrol komputer kita karena sistem operasi yang kita pakai mempunyai backdoor. Bagaimana pula dengan aplikasi finansial kita ? Database kita ? Atau firmware yang dipakai di handphone kita ? Tidak heran apabila para pejabat di negeri kita pun tidak luput dari penyadapan yang dilakukan oleh pihak asing.

Karena sebagai pemakai software propietary kita berada dalam posisi konsumen yang lemah. Ibaratnya anda sedang menyantap makanan yang tidak dapat anda ketahui isi dan resepnya. Sebaliknya pada software open source, resiko keamanan seperti ini justru dapat terhindarkan.

Nov 11

Payment Term with Fixed Payment Schedule date

How often you wish you could do something to tweak your ERP ? The blessing to use an open source ERP is you have access to its source codes. Isn’t it great if you could just make a lil bit change so you can get exactly what you want, and not to depend on what your software dictates you.

During one implementation in a car dealer, we were facing with one requirement to support installment sales. We thought it should be easy as we knew Adempiere has already payment schedule feature. Just open up Payment Term window and create a new payment term with Fixed Due Date being checked.

1-year-installment

1-year-installment

And then we entered all the schedules with equally divided percentages, for example if it is a one-year installment than the percentage is 100/12, which 8.3333. The net days is how Adempiere will determine the due date of each schedule, which in this case is the accumulation of 30 days that end up to 360 days (supposedly equal to one year length).

Payment Schedule

Payment Schedule

However, the Fixed Due Date option didn’t give what we expected. The Due date is falling on different date each month! And the worst is in one occasion, two schedules can due on the same month (see month of July in the picture below).

Order Schedule before tweak

Order Schedule before tweak

How it happens ? Because every month has a different length in days, you can’t just accumulate the net days with an exact 30-day length. That explains how we end up with 360 days a year, and not 365 days as in actual.

Luckily we are using open source ERP. There is nothing can stop us. The show must go on. So what we did it back in the day is to bring a new option called Fixed Payment Schedule date. This option will complement the existing Fixed Due date feature.

1-year-installment_fixed

1-year-installment_fixed

The following is how the schedule is generated using this new option. It exactly gives what our client wants that for each month of the installment period, the Due date will certainly fall into the same date. And that shows the power of open source ERP!

Order Schedule after fixed

Order Schedule after fixed

If you think this feature is worthy enough to be included in the next release of Adempiere or Idempiere, let us know. We will also be grateful to have your feedback. Until next time!

Goodwill Consulting is a long time Adempiere / Idempiere supporter since their inception. We are offering software-as-a-service solution on the cloud based on Adempiere / Idempiere. For more information, you can drop us a visit at www.goodwillerp.com