Openerp 如何创建退款和注册付款XML-RPC odoo

Openerp 如何创建退款和注册付款XML-RPC odoo,openerp,xml-rpc,odoo,odoo-8,Openerp,Xml Rpc,Odoo,Odoo 8,如何创建退款并通过xml rpc在odoo中注册退款付款。到目前为止,我拥有的代码创建了退款发票,但它没有为该发票注册任何付款,因此即使创建并过账凭证,客户退款发票仍保持打开状态 $invoiceData = $OERP->searchread(array(array('id','=',$invoiceId )), 'account.invoice'); $invoiceDatas = array(); foreach($invoiceDa

如何创建退款并通过xml rpc在odoo中注册退款付款。到目前为止,我拥有的代码创建了退款发票,但它没有为该发票注册任何付款,因此即使创建并过账凭证,客户退款发票仍保持打开状态

        $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]);


我找到了创建发票退款的答案如果对任何人都有帮助,这里是代码

      $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]);

我找到了创建发票退款的答案如果对任何人都有帮助,这里是代码

      $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]);