How can i create a refund and register payment for that refund in odoo via xml-rpc. The code that i have so far it creates the invoice for refund but it doesn't register any payment for that invoice, so the costumer refund invoice stays in open state even though a voucher is created and posted.
$invoiceData = $OERP->searchread(array(array('id','=',$invoiceId )), 'account.invoice');
$invoiceDatas = array();
foreach($invoiceData as $data)
{
$invoiceDatas["amount_total"] = $data["amount_total"];
$invoiceDatas["partner_id"] = $data["partner_id"];
$invoiceDatas["account_id"] = $data["account_id"];
$invoiceDatas["invoice_line"] = $data["invoice_line"];
$invoiceDatas["reference"] = $data["reference"];
$invoiceDatas["period_id"] = $data["period_id"];
}
$invoiceLineData = $OERP->searchread(array(array('invoice_id','=', intval($invoiceId) )), 'account.invoice.line');
foreach($invoiceLineData as $data)
{
$invoiceLine["product_id"] = $data["product_id"];
$invoiceLine["price_unit"] = $data["price_unit"];
}
$createRefundParams = array(
'date_invoice' => date('Y/m/d'),
'partner_id' => $invoiceDatas["partner_id"][0],
'journal_id' => 3,// $journalId,
'account_id' => $invoiceDatas["account_id"][0],
'name'=>'front end refundi',
'type'=>'out_refund' // dallon invoicen nga refund
);
$createRefund = $OERP->create($createRefundParams, 'account.invoice');
$invoiceProduct = array(
'invoice_id'=>$createRefund,
'product_id'=>$invoiceLine["product_id"][0],
'name'=>'refund',
'price_unit'=>$invoiceLine["price_unit"],
);
$createRefundLines = $OERP->create($invoiceProduct,"account.invoice.line");
$validateRefund = $OERP->workflow('account.invoice', 'invoice_open', $createRefund);
$amount_total = -$invoiceDatas['amount_total'];
$newInvoice = $OERP -> searchread(array(array('id','=',$createRefund)),'account.invoice' );
$moveId = array();
foreach($newInvoice as $data)
{
$moveId["move_id"] = $data["move_id"];
}
$createVoucher = array(
'date' => date('Y/m/d'),
'partner_id' => $invoiceDatas['partner_id'][0],
'amount' =>$amount_total ,
'journal_id' => 7,// $journalId,
'account_id' => 25,
'period_id' => $invoiceDatas['period_id'][0],
'type' => 'receipt'
);
$voucherResult = $OERP->create($createVoucher, 'account.voucher');
$invoice_object_line = $OERP->searchread(array(array('move_id', '=', $moveId["move_id"][0])), 'account.move.line');
$voucherLineItems = array(
'journal_id' => 7,// $journalId,
'period_id' => $invoiceDatas['period_id'][0],
'date' => date('Y/m/d'),
'date_due' => date('Y/m/d'),
'name' => 'Payment for refund',
'payment_option' => 'without_writeoff',
'amount_original' => -$amount_total,
// 'amount'=>-$amount_total,
'amount_unreconciled' => -$amount_total,
'voucher_id' => $voucherResult,//$voucher_id,
'partner_id' => $invoiceDatas['partner_id'][0],
'account_id' => $invoiceDatas['account_id'][0],
'move_line_id' => $invoice_object_line[0]["id"],
'type' => 'cr'
);
$createVoucherLine = $OERP->create($voucherLineItems, 'account.voucher.line');
$performa_voucher_result = $OERP->workflow('account.voucher', 'proforma_voucher', intval($voucherResult));
$invoiceMovId = $OERP->searchread(array(array('id','=',$createRefund)),'account.invoice' );
$button_validate_result = $OERP->button_click('account.move', 'button_validate', $invoiceMovId[0]["move_id"][0]);
I figured it out the answer to create an invoice refund here is the code if it helps anyone
$invoiceId = $_REQUEST["invoiceID"];
$OERP = new OpenERP();
$OERPUserID = $OERP->login($_SESSION['OERP-username'], $_SESSION['OERP-password']);
$invoiceData = $OERP->searchread(array(array('id','=',$invoiceId )), 'account.invoice');
$invoiceDatas = array();
foreach($invoiceData as $data)
{
$invoiceDatas["amount_total"] = $data["amount_total"];
$invoiceDatas["partner_id"] = $data["partner_id"];
$invoiceDatas["account_id"] = $data["account_id"];
$invoiceDatas["invoice_line"] = $data["invoice_line"];
$invoiceDatas["reference"] = $data["reference"];
$invoiceDatas["period_id"] = $data["period_id"];
}
$invoiceLineData = $OERP->searchread(array(array('invoice_id','=', intval($invoiceId) )), 'account.invoice.line');
foreach($invoiceLineData as $data)
{
$invoiceLine["product_id"] = $data["product_id"];
$invoiceLine["price_unit"] = $data["price_unit"];
}
//create Refund
$createRefundParams = array(
'date_invoice' => date('Y/m/d'),
'partner_id' => $invoiceDatas["partner_id"][0],
'journal_id' => 3,// $journalId,
'account_id' => $invoiceDatas["account_id"][0],
// 'reference'=>$invoiceDatas["reference"],
'name'=>'front end refundi',
'type'=>'out_refund' // dallon invoicen nga refund
);
$createRefund = $OERP->create($createRefundParams, 'account.invoice');
$invoiceProduct = array(
'invoice_id'=>$createRefund,
'product_id'=>$invoiceLine["product_id"][0],
'name'=>'refund',//$invoiceLine["product_id"][1],
'account_id'=>19,
'price_unit'=>$invoiceLine["price_unit"]
);
$createRefundLines = $OERP->create($invoiceProduct,"account.invoice.line");
$validateRefund = $OERP->workflow('account.invoice', 'invoice_open', $createRefund);
//================ Payments ===========================
$amount_total = -$invoiceDatas['amount_total'];
$newInvoice = $OERP -> searchread(array(array('id','=',$createRefund)),'account.invoice' );
$moveId = array();
foreach($newInvoice as $data)
{
$moveId["move_id"] = $data["move_id"];
}
$createVoucher = array(
'date' => date('Y/m/d'),
'partner_id' => $invoiceDatas['partner_id'][0],
'amount' =>$amount_total ,
'journal_id' => 7,// $journalId,
'account_id' => 25,
'period_id' => $invoiceDatas['period_id'][0],
'type' => 'receipt'
);
// $createRefund
$voucherResult = $OERP->create($createVoucher, 'account.voucher');
$invoice_object_line = $OERP->searchread(array(array('move_id', '=', $moveId["move_id"][0])), 'account.move.line');
$voucherLineItems = array(
//notice that amount values are positive since there is an extra minus in variable intialization
'journal_id' => 7,// $journalId,
'period_id' => $invoiceDatas['period_id'][0],
'date' => date('Y/m/d'),
'date_due' => date('Y/m/d'),
'name' => 'Payment for refund',
'payment_option' => 'without_writeoff',
'amount_original' => -$amount_total,
'amount'=>-$amount_total,
'amount_unreconciled' => -$amount_total,
'voucher_id' => $voucherResult,//$voucher_id,
'partner_id' => $invoiceDatas['partner_id'][0],
'account_id' => $invoiceDatas['account_id'][0],
'move_line_id' => $invoice_object_line[0]["id"],
'type' => 'dr'
);
$createVoucherLine = $OERP->create($voucherLineItems, 'account.voucher.line');
$performa_voucher_result = $OERP->workflow('account.voucher', 'proforma_voucher', intval($voucherResult));
$invoiceMovId = $OERP->searchread(array(array('id','=',$createRefund)),'account.invoice' );
$button_validate_result = $OERP->button_click('account.move', 'button_validate', $invoiceMovId[0]["move_id"][0]);