Nov 11

Financial Report improvement featuring Multi report sources

When doing implementation we often struggle to produce Financial Report with complex multi-dimensional accounting layouts. One of the case is when we would like to breakdown an account by Cost Centers or by Sales Regions. In traditional accounting, we used to find a structure of Chart of Account which composed of many duplicated accounts, for example one set of travel expense accounts for General activity and another set of the same travel expense accounts for Sales activity. With multi-dimensional feature that Adempiere has, we often suggest our clients to get rid of those duplicated accounts and tell them that later on they can break them down by any other dimensions they want.

Sample report breakdown by Dept dimension

Sample report breakdown by Dept dimension

Well, not that easy. When it comes to Financial Report, we get hit by the wall that it is so difficult to prepare such a layout using the existing functionality. There is Combination feature in Report Source tab introduced sometimes ago but it is also not offering an easy way we thought. You can use that feature if the dimension only contains small data but what if you have hundreds of records, such as “tell me how much is the Revenue breakdown by products”.

Team Goodwill have tried to improve the current Report Source tab to allow combining multiple report sources in one Report Line using the And/Or condition. Future development would include support for condition in parentheses. For example you can combine two report sources, Account “AND” Business Partner, to produce a Receivables detail report showing the balance for each customer.

Just take a look at the sample report above. The sample #1 is a Report Line using single report source, which is only Account type. By choosing a summary account, it can then expand all its child accounts.

The sample #2 is a Report Line using two report source, one is Account type, and the other is Activity. The Activity is purposely left empty because we want to show all. The system would always expand the details of the report source with the highest Sequence Number, in this case the Activity.

Travel Expense - ALL DEPT (breakdown by Dept)

Travel Expense – ALL DEPT (breakdown by Dept)

Here, we used Activity dimension as “Departments”.

The Tree of Activity as Departments

The Tree of Activity as Departments

Ok, let’s take a look another examples. In sample #5, we show Travel Expense and filtered by General departments only.

Sample Report Filtered and Breakdown

Sample Report Filtered and Breakdown

This is how we do it. We add two report sources like above. But this time we enter “General” activity. In this sample, when the Sequence number is the same, the system would expand the details of the last report source we entered. And since “General” is a summary level activity, system will show all its children.

Travel Expense - General only (breakdown by Dept)

Travel Expense – General only (breakdown by Dept)

In sample #6, thing is getting serious. We want to show Travel Expense, filtered by Sales dept and breakdown by Sales Region. Here how we do it.

Travel Expense - Sales Dept (breakdown by Sales Region)

Travel Expense – Sales Dept (breakdown by Sales Region)

That’s it folks. We would like hearing your feedback on how to improve this functionality. Let’s make Adempiere great again :)

Oct 28

News Update Adempiere 3.9.0

Info mengenai perkembangan terkini project open source Adempiere.

Project Adempiere tetap merupakan project yang aktif dan terus menerus melakukan inovasi. Tentunya kita perlu berterima kasih kepada kontributor-kontributor utama Adempiere seperti Adaxa dan E-Evolution.

Komunitas Adempiere telah melakukan beberapa langkah untuk meningkatkan kolaborasi, di antaranya:

1. Repository Source code dipindahkan ke :

https://github.com/adempiere/

2. Launching portal baru disini :

http://www.adempiere.net/web/guest/welcome

3. Sentralisasi forum disini :

http://adempiere.io/web/guest/forum/

4. 24×7 Chat online disini :

http://www.adempiere.net/web/guest/chat-on-line

Untuk planning release terbaru bisa dicek disini :

http://www.adempiere.com/Release_390

Semoga informasi ini bermanfaat buat semua.

Jun 30

Import Data Faktur Pajak dari Goodwill ERP ke e-Faktur

Anda pasti sudah mendengar bahwa mulai 1 Juli 2015 Pengusaha Kena Pajak (PKP) yang dikukuhkan pada Kantor Pelayanan Pajak di Jawa dan Bali diwajibkan membuat faktur pajak berbentuk elektronik (e-Faktur).

Pemberlakuan e-Faktur merupakan wujud peningkatan layanan Direktorat Jenderal (Ditjen) Pajak bagi PKP yang dimaksudkan untuk memberikan kemudahan, kenyamanan, dan keamanan dalam melaksanakan kewajiban perpajakan khususnya pembuatan Faktur Pajak.

Pemberlakuan e-Faktur tentu saja membawa perubahan cara bekerja bagi semua orang. Selama ini para pemakai Goodwill ERP sudah langsung membuat dan mencetak Faktur Pajak dari menu Sales Invoice. Setelah 1 Juli 2015, nantinya kita harus membuatnya melalui aplikasi e-Faktur yang disediakan oleh Ditjen Pajak. Dan Faktur Pajak nantinya tidak usah dicetak lagi, tapi cukup diapprove secara online lewat aplikasi e-Faktur.

Tentunya ini menimbulkan persoalan jika kita harus mengentri ulang semua data penjualan dan pembelian ke dalam e-Faktur. Oleh sebab itu sebagai komitmen kami untuk selalu memberikan layanan terbaik kepada Anda, kami sudah merilis fitur baru yakni Tax Allocation dengan dua kemampuan yakni:

1. Alokasi PPN Keluaran dan PPN Masukan sehingga Anda bisa dengan mudah menghitung kurang/lebih bayar-nya.

2. Ekspor data pajak ke file CSV. Nantinya file ini bisa diimport masuk ke dalam aplikasi e-Faktur.

Untuk lebih jelasnya, kami juga sudah menyediakan video demonstrasi cara mengimport data faktur pajak dari Goodwill ERP ke e-Faktur di bawah ini. Semoga bermanfaat.

Bagian ke-2

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!

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.