mustafal / Odoo-JsonRpc-with-Flutter

A Framework for odoo mobile with Flutter
85 stars 88 forks source link

When i try to get value some fields from line it return "null" #2

Closed pradityamsook closed 3 years ago

pradityamsook commented 4 years ago

I use "OdooResponse result_int = await client.searchRead("stock.picking", domain_int, fields);" then I want to get data from lines 's notebookpage. model name of line in notebookpage 's "stock.move" Screenshot from 2020-08-24 16-00-39

mustafal commented 4 years ago

Hey @pradityamsook can you please paste some code here? so I can get more idea about your issue.

pradityamsook commented 4 years ago

`import 'dart:async'; import 'dart:collection'; import 'dart:convert'; import 'dart:typed_data';

import 'package:flutter/material.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/services.dart'; import 'package:loadmore/loadmore.dart'; import 'package:odoo_api/odoo_api.dart'; import 'package:odoo_api/odoo_api_connector.dart'; import 'package:odoo_api/odoo_user_response.dart'; import 'package:task/pages/packing.dart';

void main() => runApp(MyApp());

final List tabs = [ Tab(text: "PACKING",), Tab(text: "DELIVERY",), Tab(text: "STOCK TAKE",), Tab(text: "TRANSFER",) ];

List listdata = [];

class MyApp extends StatelessWidget { // This widget is the root of your application. @override Widget build(BuildContext context) { return new MaterialApp( title: 'Flutter Demo', theme: new ThemeData( primarySwatch: Colors.blue, ), home: new MyHomePage(title: 'Flutter Hello World'), ); } }

class MyHomePage extends StatefulWidget { MyHomePage({Key key, this.title}) : super(key: key); final String title;

@override _MyHomePageState createState() => _MyHomePageState(); }

class Debouncer { final int milliseconds; VoidCallback action; Timer _timer; Debouncer({this.milliseconds}); run(VoidCallback action) { if (null != _timer) { _timer.cancel(); } _timer = Timer(Duration(milliseconds: milliseconds), action); } }

class _MyHomePageState extends State with SingleTickerProviderStateMixin { // final List allData;

// _MyHomePageState({Key key, @required this.allData}) : super(key: key);

var count = 10; bool check = true; var userName; // List listdata = []; List data = []; List dataType = []; List dataDeli = []; List dataTypeINT, dataINT = []; List updateData = [68]; List dataStk = []; Map<dynamic, dynamic> mapData = { "purchase_number": "12207666", }; var state = new List(); List OPTypeDeli = [{'name':[], 'state':[], 'id':[]}]; var imageView; RegExp exp = new RegExp(r"(\Receipts)"); final _debouncer = Debouncer(milliseconds: 1000); TextEditingController searchButtonController = new TextEditingController(); TabController tabController;

@override void initState() { super.initState(); _getOrders(); // getRecipts(); tabController = new TabController(vsync: this, length: 4); }

@override void dispose() { tabController.dispose(); super.dispose(); }

//------------------------------Progress Odoo data transfer------------------// var client = OdooClient("http://sfsolutions1.dyndns.org:8020"); Future _getOrders() async { final domain_receipts = [['picking_type_id', '=', 'Receipts']]; final domain_delivery = [['picking_type_id', '=', 'Delivery Orders']]; final domain_int = [['picking_type_id', '=', 'Internal Transfers']]; var fields = [ "id", "name", "partner_id", "state", "picking_type_id", "product_id", "location_dest_id", "origin", "location_id", "purchase_number", "product_uom_qty", "quantity_done", "move_lines", "product_uom", ]; var fieldsStockMove = ["product_uom_qty", "product_id", "id"]; // final Data dataTest = new Data(""); AuthenticateCallback auth = await client.authenticate( "admin", "admin", "3KWMS_Test"); if (auth.isSuccess) { final user = auth.getUser(); userName = user.username; print("${user.username}"); } else { print("Login failed"); } OdooResponse update = await client.write("stock.picking", updateData, mapData); if (!update.hasError()) { setState(() { check = false; var response = update.getResult(); print(response); }); }

/* Call back data use by method of class name's "OdooResponse" */
OdooResponse result =
    await client.searchRead("stock.picking", domain_receipts, fields);
OdooResponse result_deli =
    await client.searchRead("stock.picking", domain_delivery, fields);
OdooResponse result_int =
    await client.searchRead("stock.picking", domain_int, fields);
OdooResponse stockMove =
    await client.searchRead("stock.move", [], fieldsStockMove);
/****************************************************************/

if (!result.hasError()) {

// print("Successful"); setState(() { check = false; var response = result.getResult(); data = response['records']; listdata = data; // print("List data OK"); // print(listdata); print(listdata.length); }); } else { print(result.getError()); }

if (!result_deli.hasError()) {

// print("Successful Stock picking type"); setState((){ check = false; var response = result_deli.getResult(); dataType = response['records']; dataDeli = dataType; // print("Test ${dataType}"); }); } else { print(result_deli.getError()); }

if (!result_int.hasError()) {

// print("Successful Stock picking type"); setState((){ check = false; var response = result_int.getResult(); dataTypeINT = response['records']; dataINT = dataTypeINT; // print("Test ${dataTypeINT}"); }); } else { print(result_int.getError()); }

if (!stockMove.hasError()) {

// print("Successful Stock picking type"); setState((){ check = false; var response = stockMove.getResult(); var dataStock = response['records']; dataStk = dataStock; print("Test ${dataStk[0]["product_id"]}"); }); } else { print(stockMove.getError()); }

for (var i = 0; i <= listdata.length; i++) {
  if (listdata[i]['state'].toString() == 'draft') {
    listdata[i]['state'] = "Draft";
  }
  else if (listdata[i]['state'] == 'waiting') {
    listdata[i]['state'] = "Waiting Another Operation";
  }
  else if (listdata[i]['state'] == 'confirmed') {
    listdata[i]['state'] = "Waiting";
  }
  else if (listdata[i]['state'] == 'assigned') {
    listdata[i]['state'] = "Ready";
  }
  else if (listdata[i]['state'] == 'done') {
    listdata[i]['state'] = "Done";
  }
  else {
    listdata[i]['state'] = "Cancelled";
  }

  OPTypeDeli = listdata;

// print(listdata[i]["product_uom"]);

}

for (var i = 0; i <= dataType.length; i++) {
  if (dataType[i]['state'].toString() == 'draft') {
    dataType[i]['state'] = "Draft";
  }
  else if (listdata[i]['state'] == 'waiting') {
    dataType[i]['state'] = "Waiting Another Operation";
  }
  else if (listdata[i]['state'] == 'confirmed') {
    dataType[i]['state'] = "Waiting";
  }
  else if (listdata[i]['state'] == 'assigned') {
    dataType[i]['state'] = "Ready";
  }
  else if (listdata[i]['state'] == 'done') {
    dataType[i]['state'] = "Done";
  }
  else {
    dataType[i]['state'] = "Cancelled";
  }
  dataDeli = dataType;
}

}

@override Widget build(BuildContext context) { double screenWidth = MediaQuery.of(context).size.width; double screenHeight = MediaQuery.of(context).size.height; return Scaffold( appBar: AppBar( centerTitle: true, title: TextField( style: TextStyle( fontSize: 15.0, color: Colors.black, ), decoration: InputDecoration( contentPadding: EdgeInsets.all(10.0), border: OutlineInputBorder( borderRadius: BorderRadius.circular(5.0), borderSide: BorderSide.none), hintText: "Search..", prefixIcon: Icon( Icons.search, color: Colors.white, ), // suffixIcon: Icon( // Icons.list, // color: Colors.black, // ),

          hintStyle: TextStyle(
            fontSize: 15.0,
            color: Colors.white,
          ),
        ),
        maxLines: 1,
        controller: searchButtonController,
        onChanged: (string) {
          _debouncer.run(() {
            setState(() {
              listdata = data
                  .where((u) => (u['name']
                          .toString()
                          .toLowerCase()
                          .contains(string.toLowerCase()) ||
                      u['partner_id']
                          .toString()
                          .toLowerCase()
                          .contains(string.toLowerCase()) ||
                      u['state']
                          .toString()
                          .toLowerCase()
                          .contains(string.toLowerCase())))
                  .toList();
              dataDeli = dataType
                  .where((u) => (u['name']
                  .toString()
                  .toLowerCase()
                  .contains(string.toLowerCase()) ||
                  u['partner_id']
                      .toString()
                      .toLowerCase()
                      .contains(string.toLowerCase()) ||
                  u['state']
                      .toString()
                      .toLowerCase()
                      .contains(string.toLowerCase())))
                  .toList();
              OPTypeDeli = data
                  .where((u) => (u['name']
                  .toString()
                  .toLowerCase()
                  .contains(string.toLowerCase()) ||
                  u['partner_id']
                      .toString()
                      .toLowerCase()
                      .contains(string.toLowerCase()) ||
                  u['state']
                      .toString()
                      .toLowerCase()
                      .contains(string.toLowerCase()) ||
                  u['picking_type_id'][1]
                      .toString()
                      .toLowerCase()
                      .contains(string.toLowerCase())
                  )).toList();
              dataINT = dataTypeINT
                  .where((u) => (u['name']
                  .toString()
                  .toLowerCase()
                  .contains(string.toLowerCase()) ||
                  u['partner_id']
                      .toString()
                      .toLowerCase()
                      .contains(string.toLowerCase()) ||
                  u['state']
                      .toString()
                      .toLowerCase()
                      .contains(string.toLowerCase()) ||
                  u['picking_type_id'][1]
                      .toString()
                      .toLowerCase()
                      .contains(string.toLowerCase())
              )).toList();
              state.where((element) => element.toString().toLowerCase()
                  .contains(string.toLowerCase()));
            });
          });
        },
      ),
      bottom: new TabBar(
        controller: tabController,
        tabs: <Tab>[
          new Tab(text: "PACKING", icon: Icon(Icons.local_mall)),
          new Tab(text: "DELIVERY", icon: Icon(Icons.departure_board)),
          new Tab(text: "STOCK TAKE", icon: Icon(Icons.add_shopping_cart)),
          new Tab(text: "TRANSFER", icon: Icon(Icons.transfer_within_a_station)),
        ],
      ),
      flexibleSpace: Container(
        decoration: BoxDecoration(
            gradient: LinearGradient(
                begin: Alignment.topLeft,
                end: Alignment.bottomRight,
                colors: <Color>[Colors.lightBlueAccent, Colors.lightBlueAccent])
        ),
      ),
    ),
    drawer: Drawer(
      child: ListView(
        children: <Widget>[
          UserAccountsDrawerHeader(
            accountName: Text("User name: ${userName}"),
          )
        ],
      ),
    ),
    body: check
        ? Center(
            child: CircularProgressIndicator(),
          )
        : listdata.length == 0
        ? Center(
            child: Text("No Data Found"),
          )
            : TabBarView(
              controller: tabController,
              children: <Widget>[
                //Packing mode//
                Tab(
                  child: ListView.builder(
                    scrollDirection: Axis.vertical,
                    itemCount: OPTypeDeli.length,
                    itemBuilder: (context, int index) {
                      return Container(
                        margin: EdgeInsets.all(4),
                        child: Card(
                          elevation: 2,
                          child: ListTile(
                            title: Column(
                              crossAxisAlignment: CrossAxisAlignment.start,
                              children: <Widget>[
                              SizedBox(
                                  height: 5,
                                ),
                                Text(
                                  OPTypeDeli[index]['state'].toString(),
                                  style: TextStyle(
                                    fontSize: 10,
                                    color: Colors.black54,
                                  ),
                                ),
                                Row(
                                  children: <Widget>[
                                    Icon(Icons.turned_in_not),
                                    SizedBox(
                                      height: 10,
                                    ),
                                    Text(
                                      OPTypeDeli[index]['name'].toString(),
                                      style: TextStyle(
                                        fontSize: 20,
                                      ),
                                    ),
                                  ]
                                ),
                                SizedBox(
                                  height: 10,
                                ),
                              ],
                            ),
                            onTap: () {
                              Navigator.push(
                                  context,
                                  MaterialPageRoute(
                                    builder: (context) => PackingRoute(
                                      id: OPTypeDeli[index]["id"],
                                      name: OPTypeDeli[index]["name"].toString(),
                                      partner_id: OPTypeDeli[index]["partner_id"][1],
                                      sourceLocate: OPTypeDeli[index]["location_id"][1].toString(),
                                      destinationLocate: OPTypeDeli[index]["location_dest_id"][1].toString(),
                                      sourceDocs: OPTypeDeli[index]["origin"] is !bool ? OPTypeDeli[index]["origin"].toString() : "N/A",
                                      customerPO: OPTypeDeli[index]["purchase_number"] is !bool ? OPTypeDeli[index]["purchase_number"].toString() : "N/A",
                                      product: OPTypeDeli[index]["product_id"][1].toString(),
                                      productUOMQty: OPTypeDeli[index]["product_uom_qty"].toString(),
                                    )
                                  )
                              );
                            },
                          ),
                        ),
                      );
                    },
                  ),
                ),

                //*********************Delivery mode***********************//
                Tab(
                  child: ListView.builder(
                    scrollDirection: Axis.vertical,
                    itemCount: dataDeli.length,
                    itemBuilder: (context, int index) {
                      return Container(
                        margin: EdgeInsets.all(4),
                        child: Card(
                          elevation: 2,
                          child: ListTile(
                            title: Column(
                              crossAxisAlignment: CrossAxisAlignment.start,
                              children: <Widget>[
                                SizedBox(
                                  height: 5,
                                ),
                                Text(
                                  dataDeli[index]['state'].toString(),
                                  style: TextStyle(
                                    fontSize: 10,
                                    color: Colors.black54,
                                  ),
                                ),
                                Row(
                                    children: <Widget>[
                                      Icon(Icons.turned_in_not),
                                      SizedBox(
                                        height: 10,
                                      ),
                                      Text(
                                        dataDeli[index]['name'].toString(),
                                        style: TextStyle(
                                          fontSize: 20,
                                        ),
                                      ),
                                    ]
                                ),
                                SizedBox(
                                  height: 10,
                                ),
                              ],
                            ),
                            onTap: () {
                              Navigator.push(
                                  context,
                                  MaterialPageRoute(
                                    builder: (context) => PackingRoute(
                                          name: dataDeli[index]["name"],
                                        )
                                  ),
                              );
                            },
                          ),
                        ),
                      );
                    },
                  ),
                ),

                //*********************Stock take mode********************//
                Tab(
                  child: ListView.builder(
                    scrollDirection: Axis.vertical,
                    itemCount: listdata.length,
                    itemBuilder: (context, int index) {
                      return Container(
                        margin: EdgeInsets.all(4),
                        child: Card(
                          elevation: 2,
                          child: ListTile(
                            title: Column(
                              crossAxisAlignment: CrossAxisAlignment.start,
                              children: <Widget>[
                                SizedBox(
                                  height: 5,
                                ),
                                Text(
                                  listdata[index]['state'].toString(),
                                  style: TextStyle(
                                    fontSize: 10,
                                    color: Colors.black54,
                                  ),
                                ),
                                Row(
                                    children: <Widget>[
                                      Icon(Icons.turned_in_not),
                                      SizedBox(
                                        height: 10,
                                      ),
                                      Text(
                                        listdata[index]['name'].toString(),
                                        style: TextStyle(
                                          fontSize: 20,
                                        ),
                                      ),
                                    ]
                                ),
                                SizedBox(
                                  height: 10,
                                ),
                              ],
                            ),
                            onTap: () {
                              Navigator.push(
                                  context,
                                  MaterialPageRoute(
                                    builder: (context) => PackingRoute(
                                      name: listdata[index]['name'],
                                    )
                                  ),
                              );
                            },
                          ),
                        ),
                      );
                    },
                  ),
                ),

                //*********************Transfer mode**********************//
                Tab(
                  child: ListView.builder(
                    scrollDirection: Axis.vertical,
                    itemCount: dataINT.length,
                    itemBuilder: (context, int index) {
                      return Container(
                        margin: EdgeInsets.all(4),
                        child: Card(
                          elevation: 2,
                          child: ListTile(
                            title: Column(
                              crossAxisAlignment: CrossAxisAlignment.start,
                              children: <Widget>[
                                SizedBox(
                                  height: 5,
                                ),
                                Text(
                                  dataINT[index]['state'].toString(),
                                  style: TextStyle(
                                    fontSize: 10,
                                    color: Colors.black54,
                                  ),
                                ),
                                Row(
                                    children: <Widget>[
                                      Icon(Icons.turned_in_not),
                                      SizedBox(
                                        height: 10,
                                      ),
                                      Text(
                                        dataINT[index]['name'].toString(),
                                        style: TextStyle(
                                          fontSize: 20,
                                        ),
                                      ),
                                    ]
                                ),
                                SizedBox(
                                  height: 10,
                                ),
                              ],
                            ),
                            onTap: () {
                              Navigator.push(
                                context,
                                MaterialPageRoute(
                                  builder: (context) => PackingRoute(
                                    name: dataINT[index]["name"],
                                  )
                                ),
                              );
                            },
                          ),
                        ),
                      );
                    },
                  ),
                ),
              ],
            ),

// floatingActionButton: FloatingActionButton( // backgroundColor: Colors.blue, // onPressed: () { // // }, // child: Icon(Icons.add), // ), ); } } `

pradityamsook commented 4 years ago

This my code, Sorry if my code is chaos and bad concept.

mustafal commented 3 years ago

try wih the new commit