如何让所有用户付款/完成订单?

时间:2015-06-17 14:56:32

标签: php magento

我正在开发自定义Magento扩展程序。

以下是我如何接纳客户群中的所有客户:

class DbMasterActor extends Actor with ActorLogging {


  private var originalSender: ActorRef = _

  //TODO: Need to add routing to the config to limit instances
  val summaryActor = context.actorOf(Props(new SummaryActor), "summaryactor")

  def receive = {

    case msg: DbMessage => {
      this.originalSender = sender
      msg.query match {
        case "summary" => {

          getDbResults().onComplete{
            case Success(result) => originalSender ! result
            case Failure(ex) => log.error(ex.getMessage)

          }
        }
      }
    }

    //If not match log an error
    case _ => log.error("Received unknown message: {} ")

  }


  def getDbResults(): Future[SummaryResponse] = {
    log.debug("hitting db results")
    val mongoResult = Future{ Thread.sleep(500); "Mongo"}
    val redisResult = Future{ Thread.sleep(800); "redis"}

    for{
      mResult <- mongoResult
      rResult <- redisResult

    } yield SummaryResponse(mResult, rResult)

  }
}

这是我如何获取有关特定客户群中用户的信息。

如何让所有用户付款或完成(例如)订单?

2 个答案:

答案 0 :(得分:0)

这是90%的方式:

<?php
require_once '<path_to_magento_root>/app/Mage.php';
Mage::app('default');

$customers = Mage::getResourceModel('reports/customer_collection')
  ->setPage(0,10)
  //->addAttributeToFilter('orders_count', array('gt' => 0))
  ->addOrdersStatistics();

foreach ($customers as $c) {
  echo $c->getId().' - '.$c->getEmail().': '.$c->getOrdersCount()." orders, average amount ".$c->getOrdersAvgAmount().", sum amount ".$c->getOrdersSumAmount().PHP_EOL;
}

缺少的10%是列出所有客户及其订单信息,而不是仅包含至少一个订单的订单(包括正在进行的订单 - addOrdersStatistics()包含任何非订单取消)。

我在那里注释了一行,//->addAttributeToFilter('orders_count', array('gt' => 0)),因为我应该这样做,但它似乎什么都不做。尽管如此,我认为我至少应该放弃这一点,因为它可能至少是朝着正确方向迈出的一步。

当然,您也可以遍历每个订单,并构建符合您标准的客户数组,但这可能比使用像这样的Magento报表模型要慢得多。但作为最后的手段,它确实有效。所以就这样直接查询数据库。

答案 1 :(得分:0)

尝试以下解决方案,这应该适合您。

    $customers = Mage::getModel('customer/customer')
        ->getCollection()
        ->addAttributeToSelect('*');

        $customers->joinTable(
                array('sales/order'),
                'customer_email=email',
                array('*'),
                null,
                'right'
            ); 
   // print_r($customers->getData());

$data = $customers->getData();
foreach($data as $d)
{
    //print_r($d); // print this to see the available fields 
    echo $d[customer_email]; //get the desired information
    echo "<br>";
}