문제

Using Magento ver. 1.9.0.1
.

이 놀랍도록 잘 작성된 대답을 사용하여 " 열을 그리드에 추가 (옵저버) - 열의 'store_id'컬럼 절이 모호한 문제 sales_flat_order_grid에 새로운 기본 열을 추가했습니다 표.

그러나 내 요구 사항의 다음 부분은 나를 괴롭 혔습니다! Case MySQL을 사용하여 데이터 조작 된 데이터가있는 Sales_Flat_Order_Grid 테이블에 새 열을 추가하려고합니다. 이 아이디어는 주문이 지불되었거나, sales_flat_order_payment 테이블에서 데이터를 기반으로 지불을 기반으로 지불되거나 지급되거나 여전히 지불을 기다리는 경우 새로운 열이 추가된다는 것입니다.

MySQL의 쿼리는 다음과 같습니다.


SELECT `order_grid`.*,
CASE
WHEN `order`.`total_paid` > `order`.`grand_total` AND `order`.`total_paid` > 0 THEN 'part_paid'
WHEN `order`.`total_paid` = `order`.`grand_total` THEN 'paid'
ELSE 'not_paid'
END AS `payment_status`
FROM `sales_flat_order_grid` AS `order_grid`
LEFT JOIN `sales_flat_order` AS `order`
ON `order`.`entity_id` = `order_grid`.`entity_id`

.

Zend Appert 가이 (가) 다음과 같이 보입니다.


/*
=================
Code sample from modified version of
/app/code/community/Example/SalesGrid/sql/example_salesgrid_setup/install-0.1.0.php
(See linked example above)
=================
*/

$adapter = $this->getConnection();
$select = $adapter->select();

$case_payment_status = $adapter->getCaseSql('', array(
    'order_payment.amount_paid  0' => '"part_paid"',
    'order_payment.amount_paid = order_payment.amount_ordered' => '"paid"'
), '"not_paid"');

$select->join(
    array('order_payment'=>$this->getTable('sales/order_payment')),
    $this->getConnection()->quoteInto(
        'order_payment.parent_id = order_grid.entity_id'
    ),
    array(
        'payment_status' => $case_payment_status
    )
);

.

이 코드는 새로운 payment_status 열 이이 사례의 데이터가 설치 / 업그레이드 / app / code / community / example / salesgrid / sql / example_salesgrid_setup을 올바르게 채워졌습니다. install-0.1.0.php

# 질문 #

내 질문은 addVirtualGridColumn 을 사용하여 리소스 에이 새로운 대소 문자를 작성한 payment_status 열을 어떻게 추가 할 수 있습니까? 아래 코드는 주문 업데이트 / 저장에 대해 알 수없는 오류를 제공합니다 ...


class Example_SalesGrid_Model_Observer {

    public function addColumnToResource(Varien_Event_Observer $observer) {
        // Only needed if you use a table other than sales/order (sales_flat_order)

        $resource = $observer->getEvent()->getResource();

        $adapter = $resource->getReadConnection();
        $case_payment_status = $adapter->getCaseSql('', array(
            '{{table}}.amount_paid  0' => '"part_paid"',
            '{{table}}.amount_paid = {{table}}.amount_ordered' => '"paid"'
        ), '"not_paid"');

        $resource->addVirtualGridColumn(
            'payment_status',
            'sales/order_payment',
            array('parent_id' => 'entity_id'),
            $case_payment_status
        );
    }
}

.

해결책이 매우 가까이 있지만 혼자 도달 할 수 없다고 생각하는 것처럼 누군가가 올바른 방향으로 나를 도울 수 있거나 나를 가리킬 수 있기를 바랍니다.

문제를 충분히 설명하지 않았다면 질문이 있으시면 알려주십시오.

미리 감사드립니다!

도움이 되었습니까?

해결책

정렬!누구나 솔루션에 관심이 있으시면 링크 된 대답으로 배치 된 단계를 따르지 만 Observer에서 :


class Example_SalesGrid_Model_Observer {

    public function addColumnToResource(Varien_Event_Observer $observer) {
        // Only needed if you use a table other than sales/order (sales_flat_order)

        $resource = $observer->getEvent()->getResource();
        $adapter = $resource->getReadConnection();

        // Define the CASE Statement
        // ------------------------
        $casePaymentStatus = $adapter->getCaseSql('', array(
            '{{table}}.amount_paid  0' => '"part_paid"',
            '{{table}}.amount_paid = {{table}}.amount_ordered' => '"paid"',
        ), '"not_paid"');



        // Insert the CASE Statement into the getConcatSql() Method
        // ------------------------
        $concatPaymentStatus = $adapter->getConcatSql(array($casePaymentStatus));



        // Add the Virtual Grid Column
        // ------------------------
        $resource->addVirtualGridColumn(
            'payment_status',
            'sales/order_payment',
            array('entity_id' => 'parent_id'),
            $concatPaymentStatus
        );
    }
}

.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 magento.stackexchange
scroll top