Search code examples
node.jssoapmagento-1.9

Combined complex filter for ranges in Nodejs


On Magento 1.8 SOAP APIv2, i'm looking for a way to get a date range to retrieve information from the SOAP API. I have consulted a query from stackoverflow itself i.e Combined complex filter for ranges. Need to apply same type of complex filters in my node project. Curently using magento node wrapper i.e https://github.com/MadisonReed/magentoapi

exports.find = function (req, res) {
  async.waterfall([
    function (done) {
      magento.login(function(err, sessId) {
        if (err) {
          // deal with error
          console.log('login error:' + err);
          return;
        }
        done(err, done);
        // http://localhost/api/rest/customers
      });
    },

    function (filteredCustomer, done) {
      var attributes = [];
      var filteredCustomer = [];
      magento.customer.list({filters: [  ]},function(err, customerCollection) {
        _.forEach(customerCollection, function(customer, key) {
          var attributes = _.pick(customer, [
            'customer_id',
            'created_at',
            'updated_at',
            'firstname',
            'lastname',
            'gender',
            'credit_value',
            'customer_referral_code',
          ]);
          var customerDocument = {
            'email': customer.email,
            'number': customer.contact_no,
            'created_at': Date.now(),
            'initialSource': 'magento',
            'attributes': attributes
          };
          filteredCustomer.push(customerDocument);
        });
        done(filteredCustomer);
      });
    },
    function (filteredCustomer, done) {
      console.log(filteredCustomer);
      if(!err){
        done(filteredCustomer);
      }
    }
  ],
  function (err) {
    if (err) {
      console.log(err);
    }
  });
};

output:

[ 
 { 
    email: '[email protected]',
    number: '1313543132',
    created_at: 1478785224233,
    initialSource: 'magento',
    attributes: 
     { customer_id: '1',
       created_at: '2016-03-10 04:39:16',
       updated_at: '2016-10-03 10:09:21',
       firstname: 'rohit',
       lastname: 'Rai',
       gender: '1',
       credit_value: '0.0000',
       customer_referral_code: 'dS518' 
     } 
 },   
 {
    email: '[email protected]',
    number: '9088694978',
    created_at: 1478785224233,
    initialSource: 'magento',
    attributes: 
     { 
       customer_id: '2',
       created_at: '2016-04-10 23:52:05',
       updated_at: '2016-11-04 05:22:09',
       firstname: 'rajveer',
       gender: '1',
       credit_value: '0.0000',
       customer_referral_code: 'Cw624' 
     } 
 },
 { 
    email: '[email protected]',
    number: '1321321231',
    created_at: 1478785224233,
    initialSource: 'magento',
    attributes: 
     { 
       customer_id: '3',
       created_at: '2016-07-11 05:00:55',
       updated_at: '2016-11-07 10:03:54',
       firstname: 'rohit',
       gender: '1',
       credit_value: '0.0000',
       customer_referral_code: 'aj318' 
     } 
 } 
]

Solution

  • I figured out the way to send data in magento and get the required result in Node. Its working smooth. Hope it helps.

    'use strict';
    
    /**
     * Module dependencies.
     */
    var path = require('path'),
      mongoose = require('mongoose'),
      errorHandler = require(path.resolve('./modules/core/server/controllers/errors.server.controller')),
      _ = require('lodash'),
      Customers = mongoose.model('Customers'),
        async = require('async'),
          moment = require('moment');
    
    var MagentoAPI = require('magento');
    
    var magento = new MagentoAPI({
      host: 'localhost',
      port: 80,
      path: '/happilyustraa/api/xmlrpc/',
      login: 'rhtrai',
      pass: 'rohitisla'
    });
    
    
    
    
    
    exports.find = function (req, res) {
      async.waterfall([
        function (done) {
          magento.login(function(err, sessId) {
            if (err) {
              // deal with error
              console.log('login error:' + err);
              return;
            }
            done(err, done);
            // http://localhost/api/rest/customers
          });
        },
    
        function (filteredCustomer, done) {
          var attributes = [];
          var filteredCustomer = [];
          magento.customer.list({filters: {"CREATED_AT": {'from': "2016-03-10 04:39:16"}, "created_at":{ 'to': "2016-04-10 23:52:05"}   } },function(err, customerCollection) {
            _.forEach(customerCollection, function(customer, key) {
              // var attributes = _.pick(customer, [
              //   'customer_id',
              //   'created_at',
              //   'updated_at',
              //   'firstname',
              //   'lastname',
              //   'gender',
              //   'credit_value',
              //   'customer_referral_code',
              // ]);
              // var customerDocument = {
              //   'email': customer.email,
              //   'number': customer.contact_no,
              //   'created_at': Date.now(),
              //   'initialSource': 'magento',
              //   'attributes': attributes
              // };
              // filteredCustomer.push(customerDocument);
              console.log(customer);
            });
            done(filteredCustomer);
          });
        },
        function (filteredCustomer, done) {
          // console.log(filteredCustomer);
          if(!err){
            done(filteredCustomer);
          }
        }
      ],
      function (err) {
        if (err) {
          console.log(err);
        }
      });
    };