from __future__ import unicode_literals
import frappe

def execute():
    frappe.reload_doc("accounts", "doctype", "gl_entry")

    for doctype in ["Sales Invoice", "Purchase Invoice", "Journal Entry"]:
        frappe.reload_doc("accounts", "doctype", frappe.scrub(doctype))

        frappe.db.sql(""" UPDATE `tabGL Entry`, `tab{doctype}`
            SET
                `tabGL Entry`.due_date = `tab{doctype}`.due_date
            WHERE
                `tabGL Entry`.voucher_no = `tab{doctype}`.name and `tabGL Entry`.party is not null
                and `tabGL Entry`.voucher_type in ('Sales Invoice', 'Purchase Invoice', 'Journal Entry')
                and `tabGL Entry`.account in (select name from `tabAccount` where account_type in ('Receivable', 'Payable'))""" #nosec
            .format(doctype=doctype))