বিলিং এবং শিপিংয়ের ঠিকানা সমান কিনা তা কীভাবে পরীক্ষা করবেন?


16

চালানের পিডিএফ তৈরি করার সময় আমি বিলিং এবং শিপিংয়ের ঠিকানা সমান কিনা তা খতিয়ে দেখার চেষ্টা করছি।

আমি এখন পর্যন্ত যা চেষ্টা করেছি তা হ'ল:

$order = $invoice->getOrder();
if( $order->getBillingAddress()->getData() != $order->getShippingAddress()->getData() )

অথবা

$order = $invoice->getOrder();
if( $order->getShippingAddress()->getData('same_as_billing')!='1' )

কিন্তু কোনটিই কাজ করে না। আমিও ব্যবহার করে উক্তিটি পাওয়ার চেষ্টা করছিলাম $order->getQuote()কিন্তু এটিও কার্যকর হয়নি।

বিলিং এবং শিপিং ঠিকানা সমান কিনা তা পরীক্ষা করার কোনও উপায় আছে কি?

উত্তর:


10

অ্যারে_ডিফ ব্যবহার করুন।

$order = $invoice->getOrder();
$billing = $order->getBillingAddress()->getData();
$shipping = $order->getShippingAddress()->getData();

$diff = array_diff($billing,$shipping);

রেফ: http://us3.php.net/array_diff

ভিন্নতার আগে আপনাকে প্রতিটি অ্যারের কিছু ডেটা বের করতে হবে। আমি নিশ্চিত আপনি এটি কার্যকর করতে পারবেন;)


2
যদিও এটি প্রায় সমস্ত ব্যবহারিক ক্ষেত্রে কাজ করবে, এটি হওয়া উচিত array_diff_assocকারণ অ্যারে_ডিফ কেবল মানগুলির সাথে তুলনা করে, তাই আপনি উদাহরণস্বরূপ যদি প্রথম নাম এবং পদবি পরিবর্তন করেন তবে ঠিকানাগুলি এখনও সমান হিসাবে বিবেচিত হবে
ফ্যাবিয়ান শেমংলার

7

যদিও ইতিমধ্যে স্বীকৃত উত্তর রয়েছে, তৃতীয় পক্ষের মডিউলে আমি এই সমাধানটি দেখেছি (অনুরূপ) একবার শেয়ার করতে চাই:

function serializeAddress(Mage_Sales_Model_Quote_Address $address)  {  
        return serialize(
            array(
                 'firstname' => $address->getFirstname(),
                 'lastname'  => $address->getLastname(),
                 'street'    => $address->getStreet(),
                 'city'      => $address->getCity(),
                 'postcode'  => $address->getPostcode(),
                 //add the attributes you want to check for here for ex. company,...
            )
        );
}

যা তখন বলা হত:

$shippingAddress = $invoice->getShippingAddress();

if (!$shippingAddress->getSameAsBilling()) {

     $shippingData = $this->serializeAddress($shippingAddress);
     $billingData = $this->serializeAddress($invoice->getBillingAddress());

     if (strcmp($shippingData, $billingData) != 0) {
        return false;
     }
}

5

ঠিক আছে, তাই প্রক্সি ব্লুয়ের পরামর্শ অনুসরণ করে এখানে আমার প্রচেষ্টা:

$excludeKeys = array('entity_id', 'customer_address_id', 'quote_address_id', 'region_id', 'customer_id', 'address_type');
$oBillingAddress = $order->getBillingAddress()->getData();
$oShippingAddress = $order->getShippingAddress()->getData();
$oBillingAddressFiltered = array_diff_key($oBillingAddress, array_flip($excludeKeys));
$oShippingAddressFiltered = array_diff_key($oShippingAddress, array_flip($excludeKeys));

$addressDiff = array_diff($oBillingAddressFiltered, $oShippingAddressFiltered);

if( $addressDiff ) { // billing and shipping addresses are different
    // Print stuff
}

মূলত আমি একটি $excludeKeysঅ্যারে ব্যবহার করে কিছু কী সরিয়ে আছি , সুতরাং array_diffকেবলমাত্র সম্পর্কিত ডেটার সাথে তুলনা করা হবে। একটি লুপ তৈরি না করে বেশ কয়েকটি কী ছাঁটাতে, আমি অযথা অ্যারে কীগুলি থেকে মুক্তি পেতে array_diff_keyসংমিশ্রণে ব্যবহার করছি array_flip

উন্নতি এবং প্রতিক্রিয়া স্বাগত। :)


1
যদিও এটি প্রায় সমস্ত ব্যবহারিক ক্ষেত্রে কাজ করবে, এটি হওয়া উচিত array_diff_assocকারণ অ্যারে_ডিফ কেবল মানগুলির সাথে তুলনা করে, তাই আপনি উদাহরণস্বরূপ যদি প্রথম নাম এবং পদবি পরিবর্তন করেন তবে ঠিকানাগুলি এখনও সমান হিসাবে বিবেচিত হবে।
ফ্যাবিয়ান শেমংলার

3

আপনার উদ্ধৃতিটি ব্যবহার করা দরকার

$order = $invoice->getOrder();
$quote = Mage::getModel('sales/quote')->load($order->getQuoteId());

তারপরে আপনি উদ্ধৃতিটি থেকে শিপিং ঠিকানাটি পেতে পারেন এবং এটি বিলিং ঠিকানার মতোই চিহ্নিত করা হয়েছে কিনা তা পরীক্ষা করতে পারেন:

if($quote->getShippingAddress()->getSameAsBilling()){
    // do stuff
}

কোথায় এটি একই হিসাবে চিহ্নিত করা হচ্ছে? দেখে মনে হচ্ছে এটি আমার পক্ষে কাজ করছে না, কারণ ডিফল্ট ঠিকানাগুলি স্পষ্টভাবে পৃথক হলেও গ্রাহক সর্বদা এটি একই হিসাবে চিহ্নিত থাকে।
TheKitMurkit

0

ঠিকানাগুলির তুলনা করতে হয়েছিল - এর মধ্যে একটি সবেমাত্র তৈরি হয়েছিল (সংরক্ষণ করা হয়নি)। সম্ভবত এটি কাউকে সহায়তা করে:

@ আলফাওয়ালফ উত্তরের ভিত্তিতে:

public function isDifferentAddresses(Mage_Customer_Model_Address $adr1, Mage_Customer_Model_Address $adr2, array $excludeKeys = array())
{
    if (!count($excludeKeys)) {
        $excludeKeys = array(
            'entity_id',
            'entity_type_id',
            'attribute_set_id',
            'is_active',
            'increment_id',
            'parent_id',
            'created_at',
            'updated_at',
            'customer_id',
            'customer_address_id',
            'quote_address_id',
            'region_id',
            'address_type',
            'is_default_billing',
            'is_default_shipping',
            'save_in_address_book'
        );
    }
    $excludeKeys = array_flip($excludeKeys);
    $adr1Filtered = array_diff_key($adr1->getData(), $excludeKeys);
    $adr2Filtered = array_diff_key($adr2->getData(), $excludeKeys);
    $diff = array_diff_assoc($adr1Filtered, $adr2Filtered); 
    return !empty($diff);
}

20 01 2016 সম্পাদনা করুন

আমি উপরের সংস্করণটি পোস্ট করার পরে আমি নিম্নলিখিত পদ্ধতিটি ব্যবহার করছি এবং এটি আমার পক্ষে কাজ করে - ভেবেছিল এটি কারও সাহায্য করতে পারে:

/**
 * returns if address 1 is different to address 2
 *
 * @param Mage_Customer_Model_Address $adr1
 * @param Mage_Customer_Model_Address $adr2
 * @param array                       $excludeKeys
 *
 * @return bool
 */
public function isDifferentAddresses(Mage_Customer_Model_Address $adr1,
    Mage_Customer_Model_Address $adr2, array $excludeKeys = array()
) {
    if (!count($excludeKeys)) {
        $excludeKeys = array(
            'prefix',
            'suffix',
            //'region',
            //'region_id',
            'entity_id',
            'vat_id',
            'entity_type_id',
            'attribute_set_id',
            'is_active',
            'increment_id',
            'parent_id',
            'created_at',
            'updated_at',
            'customer_id',
            'customer_address_id',
            'quote_address_id',
            'address_type',
            'is_default_billing',
            'is_default_shipping',
            'save_in_address_book'
        );
    }
    $excludeKeys = array_flip($excludeKeys);
    $adr1Filtered = array_diff_key($adr1->getData(), $excludeKeys);
    $adr2Filtered = array_diff_key($adr2->getData(), $excludeKeys);
    $diff = array_diff_assoc($adr1Filtered, $adr2Filtered);
    return !empty($diff);
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.