com.odoo.addons.sale.models.SaleOrder.java Source code

Java tutorial

Introduction

Here is the source code for com.odoo.addons.sale.models.SaleOrder.java

Source

/**
 * Odoo, Open Source Management Solution
 * Copyright (C) 2012-today Odoo SA (<http:www.odoo.com>)
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Affero General Public License as
 * published by the Free Software Foundation, either version 3 of the
 * License, or (at your option) any later version
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Affero General Public License for more details
 *
 * You should have received a copy of the GNU Affero General Public License
 * along with this program.  If not, see <http:www.gnu.org/licenses/>
 *
 * Created on 13/1/15 11:06 AM
 */
package com.odoo.addons.sale.models;

import android.app.ProgressDialog;
import android.content.Context;
import android.net.Uri;
import android.os.AsyncTask;

import com.odoo.App;
import com.odoo.R;
import com.odoo.addons.sale.Sales;
import com.odoo.base.addons.res.ResCompany;
import com.odoo.base.addons.res.ResCurrency;
import com.odoo.base.addons.res.ResPartner;
import com.odoo.base.addons.res.ResUsers;
import com.odoo.core.orm.ODataRow;
import com.odoo.core.orm.OModel;
import com.odoo.core.orm.OValues;
import com.odoo.core.orm.ServerDataHelper;
import com.odoo.core.orm.annotation.Odoo;
import com.odoo.core.orm.fields.OColumn;
import com.odoo.core.orm.fields.types.ODate;
import com.odoo.core.orm.fields.types.ODateTime;
import com.odoo.core.orm.fields.types.OFloat;
import com.odoo.core.orm.fields.types.OInteger;
import com.odoo.core.orm.fields.types.OVarchar;
import com.odoo.core.support.OUser;
import com.odoo.core.utils.OResource;

import org.json.JSONArray;
import org.json.JSONObject;

import java.util.HashMap;
import java.util.List;

import odoo.OArguments;

public class SaleOrder extends OModel {
    public static final String TAG = SaleOrder.class.getSimpleName();
    public static final String AUTHORITY = "com.odoo.core.crm.provider.content.sync.sale_order";
    private Context mContext;
    OColumn name = new OColumn("name", OVarchar.class);
    OColumn date_order = new OColumn("Date", ODateTime.class);
    @Odoo.onChange(method = "onPartnerIdChange", bg_process = true)
    OColumn partner_id = new OColumn("Customer", ResPartner.class, OColumn.RelationType.ManyToOne).setRequired();
    OColumn user_id = new OColumn("Salesperson", ResUsers.class, OColumn.RelationType.ManyToOne);
    OColumn amount_total = new OColumn("Total", OFloat.class);
    OColumn payment_term = new OColumn("Payment Term", AccountPaymentTerm.class, OColumn.RelationType.ManyToOne);
    OColumn amount_untaxed = new OColumn("Untaxed", OInteger.class);
    OColumn amount_tax = new OColumn("Tax", OInteger.class);
    OColumn client_order_ref = new OColumn("Client Order Reference", OVarchar.class).setSize(100);
    OColumn state = new OColumn("status", OVarchar.class).setSize(10).setDefaultValue("draft");
    @Odoo.Functional(method = "getStateTitle", store = true, depends = { "state" })
    OColumn state_title = new OColumn("State Title", OVarchar.class).setLocalColumn();
    @Odoo.Functional(method = "storePartnerName", store = true, depends = { "partner_id" })
    OColumn partner_name = new OColumn("State Title", OVarchar.class).setLocalColumn();
    OColumn currency_id = new OColumn("currency", ResCurrency.class, OColumn.RelationType.ManyToOne);
    @Odoo.Functional(method = "storeCurrencySymbol", store = true, depends = { "currency_id" })
    OColumn currency_symbol = new OColumn("State Title", OVarchar.class).setLocalColumn();
    OColumn order_line = new OColumn("Order Lines", SalesOrderLine.class, OColumn.RelationType.OneToMany)
            .setRelatedColumn("order_id");
    @Odoo.Functional(method = "countOrderLines", store = true, depends = { "order_line" })
    OColumn order_line_count = new OColumn("Total Lines", OVarchar.class).setLocalColumn();

    OColumn partner_invoice_id = new OColumn("partner_invoice_id", OVarchar.class).setLocalColumn();
    OColumn partner_shipping_id = new OColumn("partner_shipping_id", OVarchar.class).setLocalColumn();
    OColumn pricelist_id = new OColumn("pricelist_id", OVarchar.class).setLocalColumn();
    OColumn fiscal_position = new OColumn("fiscal_position", OVarchar.class).setLocalColumn();

    public SaleOrder(Context context, OUser user) {
        super(context, "sale.order", user);
        mContext = context;
        setHasMailChatter(true);
        if (getUser().getVersion_number() == 7) {
            date_order.setType(ODate.class);
        }

    }

    @Override
    public Uri uri() {
        return buildURI(AUTHORITY);
    }

    public ODataRow onPartnerIdChange(ODataRow row) {
        ODataRow data = new ODataRow();
        try {
            ResPartner partner = new ResPartner(mContext, getUser());
            AccountPaymentTerm term = new AccountPaymentTerm(mContext, getUser());
            ODataRow customer = partner.browse(row.getInt(OColumn.ROW_ID));
            App app = (App) mContext.getApplicationContext();
            if (app.inNetwork()) {
                ServerDataHelper helper = getServerDataHelper();
                OArguments args = new OArguments();
                args.add(new JSONArray());
                args.add(customer.getInt("id"));
                JSONObject res = ((JSONObject) helper.callMethod("onchange_partner_id", args, new JSONObject()))
                        .getJSONObject("value");
                if (res.has("partner_invoice_id"))
                    data.put("partner_invoice_id", res.get("partner_invoice_id"));
                if (res.has("partner_shipping_id"))
                    data.put("partner_shipping_id", res.get("partner_shipping_id"));
                if (res.has("pricelist_id"))
                    data.put("pricelist_id", res.get("pricelist_id"));
                if (res.has("payment_term") && !res.getString("payment_term").equals("false"))
                    data.put("payment_term", term.selectRowId(res.getInt("payment_term")));
                if (res.has("fiscal_position")) {
                    data.put("fiscal_position", res.get("fiscal_position"));
                }
                partner.update(customer.getInt(OColumn.ROW_ID), data.toValues());
            } else {
                data.put("partner_invoice_id", customer.get("partner_invoice_id"));
                data.put("partner_shipping_id", customer.get("partner_shipping_id"));
                data.put("pricelist_id", customer.get("pricelist_id"));
                data.put("payment_term", customer.get("payment_term"));
                data.put("fiscal_position", customer.get("fiscal_position"));
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return data;
    }

    public ODataRow currency() {
        ResCompany company = new ResCompany(mContext, getUser());
        ODataRow row = company.browse(null, "id = ? ", new String[] { getUser().getCompany_id() });
        if (row != null && !row.getString("currency_id").equals("false")) {
            return row.getM2ORecord("currency_id").browse();
        } else {
            ResCurrency currency = new ResCurrency(mContext, getUser());
            List<ODataRow> list = currency.select();
            if (list.size() > 0) {
                return list.get(0);
            }
        }
        return null;
    }

    public String getStateTitle(OValues row) {
        HashMap<String, String> mStates = new HashMap<String, String>();
        mStates.put("draft", "Draft Quotation");
        mStates.put("sent", "Quotation Sent");
        mStates.put("cancel", "Cancelled");
        mStates.put("waiting_date", "Waiting Schedule");
        mStates.put("progress", "Sales Order");
        mStates.put("manual", "Sale to Invoice");
        mStates.put("shipping_except", "Shipping Exception");
        mStates.put("invoice_except", "Invoice Exception");
        mStates.put("done", "Done");
        return mStates.get(row.getString("state"));
    }

    public String storeCurrencySymbol(OValues values) {
        try {
            if (!values.getString("currency_id").equals("false")) {
                JSONArray currency_id = new JSONArray(values.getString("currency_id"));
                return currency_id.getString(1);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return "false";
    }

    public String storePartnerName(OValues values) {
        try {
            if (!values.getString("partner_id").equals("false")) {
                JSONArray partner_id = new JSONArray(values.getString("partner_id"));
                return partner_id.getString(1);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return "false";
    }

    public String countOrderLines(OValues values) {
        try {
            JSONArray order_line = new JSONArray(values.getString("order_line"));
            if (order_line.length() > 0) {
                return " (" + order_line.length() + " lines)";
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return " (No lines)";
    }

    public void cancelOrder(final Sales.Type type, final ODataRow quotation,
            final OnOperationSuccessListener listener) {
        new AsyncTask<Void, Void, Void>() {
            private ProgressDialog dialog;

            @Override
            protected void onPreExecute() {
                super.onPreExecute();
                dialog = new ProgressDialog(mContext);
                dialog.setTitle(R.string.title_please_wait);
                dialog.setMessage(OResource.string(mContext, R.string.title_working));
                dialog.setCancelable(false);
                dialog.show();
            }

            @Override
            protected Void doInBackground(Void... params) {
                try {
                    if (type == Sales.Type.SaleOrder) {
                        OArguments args = new OArguments();
                        args.add(new JSONArray().put(quotation.getInt("id")));
                        args.add(new JSONObject());
                        getServerDataHelper().callMethod("action_cancel", args);
                    } else {
                        getServerDataHelper().executeWorkFlow(quotation.getInt("id"), "cancel");
                    }
                    OValues values = new OValues();
                    values.put("state", "cancel");
                    values.put("state_title", getStateTitle(values));
                    values.put("_is_dirty", "false");
                    update(quotation.getInt(OColumn.ROW_ID), values);
                } catch (Exception e) {
                    e.printStackTrace();
                }
                return null;
            }

            @Override
            protected void onPostExecute(Void aVoid) {
                super.onPostExecute(aVoid);
                dialog.dismiss();
                if (listener != null) {
                    listener.OnSuccess();
                }
            }

            @Override
            protected void onCancelled() {
                super.onCancelled();
                dialog.dismiss();
                if (listener != null) {
                    listener.OnCancelled();
                }
            }
        }.execute();
    }

    public void confirmSale(final ODataRow quotation, final OnOperationSuccessListener listener) {
        new AsyncTask<Void, Void, Void>() {
            private ProgressDialog dialog;

            @Override
            protected void onPreExecute() {
                super.onPreExecute();
                dialog = new ProgressDialog(mContext);
                dialog.setTitle(R.string.title_please_wait);
                dialog.setMessage(OResource.string(mContext, R.string.title_working));
                dialog.setCancelable(false);
                dialog.show();
            }

            @Override
            protected Void doInBackground(Void... params) {
                try {
                    OArguments args = new OArguments();
                    args.add(new JSONArray().put(quotation.getInt("id")));
                    args.add(new JSONObject());
                    getServerDataHelper().callMethod("action_button_confirm", args);
                    OValues values = new OValues();
                    values.put("state", "manual");
                    values.put("state_title", getStateTitle(values));
                    values.put("_is_dirty", "false");
                    update(quotation.getInt(OColumn.ROW_ID), values);
                } catch (Exception e) {
                    e.printStackTrace();
                }
                return null;
            }

            @Override
            protected void onPostExecute(Void aVoid) {
                super.onPostExecute(aVoid);
                dialog.dismiss();
                if (listener != null) {
                    listener.OnSuccess();
                }
            }

            @Override
            protected void onCancelled() {
                super.onCancelled();
                dialog.dismiss();
                if (listener != null) {
                    listener.OnCancelled();
                }
            }
        }.execute();
    }

    public void newCopyQuotation(final ODataRow quotation, final OnOperationSuccessListener listener) {
        new AsyncTask<Void, Void, Void>() {
            private ProgressDialog dialog;

            @Override
            protected void onPreExecute() {
                super.onPreExecute();
                dialog = new ProgressDialog(mContext);
                dialog.setTitle(R.string.title_please_wait);
                dialog.setMessage(OResource.string(mContext, R.string.title_working));
                dialog.setCancelable(false);
                dialog.show();
            }

            @Override
            protected Void doInBackground(Void... params) {
                try {
                    OArguments args = new OArguments();
                    args.add(new JSONArray().put(quotation.getInt("id")));
                    args.add(new JSONObject());
                    getServerDataHelper().callMethod("copy_quotation", args);
                } catch (Exception e) {
                    e.printStackTrace();
                }
                return null;
            }

            @Override
            protected void onPostExecute(Void aVoid) {
                super.onPostExecute(aVoid);
                dialog.dismiss();
                if (listener != null) {
                    listener.OnSuccess();
                }
            }

            @Override
            protected void onCancelled() {
                super.onCancelled();
                dialog.dismiss();
                if (listener != null) {
                    listener.OnCancelled();
                }
            }
        }.execute();
    }

    public static interface OnOperationSuccessListener {
        public void OnSuccess();

        public void OnCancelled();
    }
}