Implementing Delivery Provider

How to configure and adapt Aimeos based shops as developer
Forum rules
Always add your Aimeos and PHP version as well as your environment (Linux/Mac/Win)
Spam and unrelated posts will be removed immediately!
khizar
Posts: 99
Joined: 19 Jan 2021, 09:51

Implementing Delivery Provider

Post by khizar » 10 Mar 2021, 09:54

Hi aimeos,
i am using laravel 8 and aimeos "~2020.10".I am trying to implement Delivery service provider for which i have generated a file Myprovider.php in the directory ext\moudhah\lib\custom\src\MShop\Service\Provider\Delivery

Code: Select all

	<?php
namespace Aimeos\MShop\Service\Provider\Delivery;

use Illuminate\Support\Facades\Http;

class Myprovider
    extends \Aimeos\MShop\Service\Provider\Delivery\Base
    implements \Aimeos\MShop\Service\Provider\Delivery\Iface
{
    /**
     * Sends the order details to the ERP system for further processing.
     *
     * @param \Aimeos\MShop\Order\Item\Iface $order Order invoice object to process
     */
    public function process( \Aimeos\MShop\Order\Item\Iface $order ) : \Aimeos\MShop\Order\Item\Iface
    {   
        
        $parts = \Aimeos\MShop\Order\Item\Base\Base::PARTS_ALL;
        
        $basket = $this->getOrderBase( $order->getBaseId(), $parts );
        info(print_r($basket->getAddresses()));
        return $order;

        
    }

    
}

now i want to make an api call in this process method but before that i want to access all the order information.For that purpose you can see above i have added the code $basket->getAddresses() and it gives me an array of addresses

Code: Select all

 
	Aimeos\Map Object
(
    [list:protected] => Array
        (
            [payment] => Array
                (
                    [0] => Aimeos\MShop\Order\Item\Base\Address\Standard Object
                        (
                            [prefix:Aimeos\MShop\Common\Item\Address\Base:private] => order.base.address.
                            [available:Aimeos\MShop\Common\Item\Base:private] => 1
                            [modified:Aimeos\MShop\Common\Item\Base:private] =>
                            [bdata:protected] => Array
                                (
                                    [order.base.address.id] => 20
                                    [order.base.address.baseid] => 12
                                    [order.base.address.siteid] => 7.
                                    [order.base.address.addressid] =>
                                    [order.base.address.type] => payment
                                    [order.base.address.company] =>
                                    [order.base.address.vatid] =>
                                    [order.base.address.salutation] => mr
                                    [order.base.address.title] =>
                                    [order.base.address.firstname] => khizar
                                    [order.base.address.lastname] => samin
                                    [order.base.address.address1] => mystreet
                                    [order.base.address.address2] =>
                                    [order.base.address.address3] =>
                                    [order.base.address.postal] => 091
                                    [order.base.address.city] => peshawar
                                    [order.base.address.state] =>
                                    [order.base.address.countryid] => PK
                                    [order.base.address.languageid] => en
                                    [order.base.address.telephone] => 03239549005
                                    [order.base.address.email] => khizar.samin@gmail.com
                                    [order.base.address.telefax] =>
                                    [order.base.address.website] =>
                                    [order.base.address.longitude] =>
                                    [order.base.address.latitude] =>
                                    [order.base.address.position] => 0
                                    [order.base.address.mtime] => 2021-02-17 09:58:14
                                    [order.base.address.editor] => khizar samin
                                    [order.base.address.ctime] => 2021-02-17 09:58:14
                                    [order.base.address.birthday] =>
                                )

                            [prefix:Aimeos\MShop\Common\Item\Base:private] => order.base.address.
                        )

                )

            [delivery] => Array
                (
                    [1] => Aimeos\MShop\Order\Item\Base\Address\Standard Object
                        (
                            [prefix:Aimeos\MShop\Common\Item\Address\Base:private] => order.base.address.
                            [available:Aimeos\MShop\Common\Item\Base:private] => 1
                            [modified:Aimeos\MShop\Common\Item\Base:private] =>
                            [bdata:protected] => Array
                                (
                                    [order.base.address.id] => 21
                                    [order.base.address.baseid] => 12
                                    [order.base.address.siteid] => 7.
                                    [order.base.address.addressid] => 1
                                    [order.base.address.type] => delivery
                                    [order.base.address.company] =>
                                    [order.base.address.vatid] =>
                                    [order.base.address.salutation] => mr
                                    [order.base.address.title] =>
                                    [order.base.address.firstname] => my firstname
                                    [order.base.address.lastname] => my lastname
                                    [order.base.address.address1] => my shipstreet
                                    [order.base.address.address2] => my shipadditional address
                                    [order.base.address.address3] =>
                                    [order.base.address.postal] => myshipcode
                                    [order.base.address.city] => my shipcity
                                    [order.base.address.state] =>
                                    [order.base.address.countryid] => PK
                                    [order.base.address.languageid] => en
                                    [order.base.address.telephone] =>
                                    [order.base.address.email] =>
                                    [order.base.address.telefax] =>
                                    [order.base.address.website] =>
                                    [order.base.address.longitude] =>
                                    [order.base.address.latitude] =>
                                    [order.base.address.position] => 1
                                    [order.base.address.mtime] => 2021-02-17 09:58:14
                                    [order.base.address.editor] => khizar samin
                                    [order.base.address.ctime] => 2021-02-17 09:58:14
                                    [order.base.address.birthday] =>
                                )

                            [prefix:Aimeos\MShop\Common\Item\Base:private] => order.base.address.
                        )

                )

        )

)
now i want to access the attributes in that object.E.g i want to access the first name of payment and delivery separately.can you please guide me how can i access these fields separately i mean billing first name and delivery firstname separately.
Note: i have tried

Code: Select all

	$basket->getAddresses()->getFirstname();
which gave me

Code: Select all

	Aimeos\Map Object
(
    [list:protected] => Array
        (
        )

)

User avatar
aimeos
Administrator
Posts: 8012
Joined: 01 Jan 1970, 00:00

Re: Implementing Delivery Provider

Post by aimeos » 10 Mar 2021, 11:26

Use

Code: Select all

$addr = current( $basket->getAddress( 'payment' ) )
Check the order base item interface and the interfaces of the items within to see what methods they implement:
https://github.com/aimeos/aimeos-core/b ... /Iface.php
Professional support and custom implementation are available at Aimeos.com
If you like Aimeos, Image give us a star

khizar
Posts: 99
Joined: 19 Jan 2021, 09:51

Re: Implementing Delivery Provider

Post by khizar » 10 Mar 2021, 11:32

aimeos wrote: 10 Mar 2021, 11:26 Use

Code: Select all

$addr = current( $basket->getAddress( 'payment' ) )
Check the order base item interface and the interfaces of the items within to see what methods they implement:
https://github.com/aimeos/aimeos-core/b ... /Iface.php
what is the purpose of current method

User avatar
aimeos
Administrator
Posts: 8012
Joined: 01 Jan 1970, 00:00

Re: Implementing Delivery Provider

Post by aimeos » 10 Mar 2021, 11:35

It returns the first item of an array:
https://www.php.net/manual/en/function.current

Alternatively, you can use:

Code: Select all

$addr = $basket->getAddress( 'payment', 0 )
but it will fail if there's no address at position 0.
Professional support and custom implementation are available at Aimeos.com
If you like Aimeos, Image give us a star

khizar
Posts: 99
Joined: 19 Jan 2021, 09:51

Re: Implementing Delivery Provider

Post by khizar » 10 Mar 2021, 11:39

aimeos wrote: 10 Mar 2021, 11:35 It returns the first item of an array:
https://www.php.net/manual/en/function.current

Alternatively, you can use:

Code: Select all

$addr = $basket->getAddress( 'payment', 0 )
but it will fail if there's no address at position 0.

Code: Select all

	$addr = $basket->getAddress( 'payment',9 );
	info($addr);
i tried that to get the first name but variable is empty .as you can see above 'firstname' is at 9 position

User avatar
aimeos
Administrator
Posts: 8012
Joined: 01 Jan 1970, 00:00

Re: Implementing Delivery Provider

Post by aimeos » 10 Mar 2021, 11:43

Code: Select all

if( $addr = current( $basket->getAddress( 'payment' ) ) )
{
	$firstname = $addr->getFirstname();
	$lastname = $addr->getLastname();
	// ...
	// Alternative:
	$map = $addr->toArray();
}
Professional support and custom implementation are available at Aimeos.com
If you like Aimeos, Image give us a star

khizar
Posts: 99
Joined: 19 Jan 2021, 09:51

Re: Implementing Delivery Provider

Post by khizar » 10 Mar 2021, 11:48

aimeos wrote: 10 Mar 2021, 11:43

Code: Select all

if( $addr = current( $basket->getAddress( 'payment' ) ) )
{
	$firstname = $addr->getFirstname();
	$lastname = $addr->getLastname();
	// ...
	// Alternative:
	$map = $addr->toArray();
}
it worked.Thankyou so much aimeos.

Post Reply