@@ -527,6 +527,30 @@ private function _getCart(bool $forceSave = false): Order
527
527
private function _setAddresses (): void
528
528
{
529
529
$ currentUser = Craft::$ app ->getUser ()->getIdentity ();
530
+
531
+ $ setShippingAddress = true ;
532
+ if ($ this ->request ->getParam ('clearShippingAddress ' ) !== null ) {
533
+ $ this ->_cart ->setShippingAddress (null );
534
+ $ this ->_cart ->sourceShippingAddressId = null ;
535
+ $ setShippingAddress = false ;
536
+ }
537
+
538
+ $ setBillingAddress = true ;
539
+ if ($ this ->request ->getParam ('clearBillingAddress ' ) !== null ) {
540
+ $ this ->_cart ->setBillingAddress (null );
541
+ $ this ->_cart ->sourceBillingAddressId = null ;
542
+ $ setBillingAddress = false ;
543
+ }
544
+
545
+ if ($ this ->request ->getParam ('clearAddresses ' ) !== null ) {
546
+ $ this ->_cart ->setShippingAddress (null );
547
+ $ this ->_cart ->sourceShippingAddressId = null ;
548
+ $ this ->_cart ->setBillingAddress (null );
549
+ $ this ->_cart ->sourceBillingAddressId = null ;
550
+ $ setBillingAddress = false ;
551
+ $ setShippingAddress = false ;
552
+ }
553
+
530
554
// Copy address options
531
555
$ shippingIsBilling = $ this ->request ->getParam ('shippingAddressSameAsBilling ' );
532
556
$ billingIsShipping = $ this ->request ->getParam ('billingAddressSameAsShipping ' );
@@ -541,68 +565,72 @@ private function _setAddresses(): void
541
565
$ shippingAddressId = $ this ->request ->getParam ('shippingAddressId ' );
542
566
$ billingAddressId = $ this ->request ->getParam ('billingAddressId ' );
543
567
544
- // Shipping address
545
- if ($ shippingAddressId && !$ shippingIsBilling ) {
546
- /** @var Address|null $userShippingAddress */
547
- $ userShippingAddress = Collection::make ($ currentUser ->getAddresses ())->firstWhere ('id ' , $ shippingAddressId );
568
+ if ($ setShippingAddress ) {
569
+ // Shipping address
570
+ if ($ shippingAddressId && !$ shippingIsBilling ) {
571
+ /** @var Address|null $userShippingAddress */
572
+ $ userShippingAddress = Collection::make ($ currentUser ->getAddresses ())->firstWhere ('id ' , $ shippingAddressId );
548
573
549
- // If a user's address ID has been submitted duplicate the address to the order
550
- if ($ userShippingAddress ) {
551
- $ this ->_cart ->sourceShippingAddressId = $ shippingAddressId ;
574
+ // If a user's address ID has been submitted duplicate the address to the order
575
+ if ($ userShippingAddress ) {
576
+ $ this ->_cart ->sourceShippingAddressId = $ shippingAddressId ;
552
577
553
- /** @var Address $cartShippingAddress */
554
- $ cartShippingAddress = Craft::$ app ->getElements ()->duplicateElement ($ userShippingAddress , ['ownerId ' => $ this ->_cart ->id ]);
555
- $ this ->_cart ->setShippingAddress ($ cartShippingAddress );
578
+ /** @var Address $cartShippingAddress */
579
+ $ cartShippingAddress = Craft::$ app ->getElements ()->duplicateElement ($ userShippingAddress , ['ownerId ' => $ this ->_cart ->id ]);
580
+ $ this ->_cart ->setShippingAddress ($ cartShippingAddress );
556
581
557
- if ($ billingIsShipping ) {
558
- $ this ->_cart ->sourceBillingAddressId = $ userShippingAddress ->id ;
559
- $ this ->_cart ->setBillingAddress ($ cartShippingAddress );
582
+ if ($ billingIsShipping ) {
583
+ $ this ->_cart ->sourceBillingAddressId = $ userShippingAddress ->id ;
584
+ $ this ->_cart ->setBillingAddress ($ cartShippingAddress );
585
+ }
560
586
}
561
- }
562
- } elseif ($ shippingAddress && !$ shippingIsBilling ) {
563
- $ this ->_cart ->sourceShippingAddressId = null ;
564
- $ this ->_cart ->setShippingAddress ($ shippingAddress );
587
+ } elseif ($ shippingAddress && !$ shippingIsBilling ) {
588
+ $ this ->_cart ->sourceShippingAddressId = null ;
589
+ $ this ->_cart ->setShippingAddress ($ shippingAddress );
565
590
566
- if (!empty ($ shippingAddress ['fields ' ]) && $ this ->_cart ->getShippingAddress ()) {
567
- $ this ->_cart ->getShippingAddress ()->setFieldValues ($ shippingAddress ['fields ' ]);
568
- }
591
+ if (!empty ($ shippingAddress ['fields ' ]) && $ this ->_cart ->getShippingAddress ()) {
592
+ $ this ->_cart ->getShippingAddress ()->setFieldValues ($ shippingAddress ['fields ' ]);
593
+ }
569
594
570
- if ($ billingIsShipping ) {
571
- $ this ->_cart ->sourceBillingAddressId = null ;
572
- $ this ->_cart ->setBillingAddress ($ this ->_cart ->getShippingAddress ());
595
+ if ($ billingIsShipping ) {
596
+ $ this ->_cart ->sourceBillingAddressId = null ;
597
+ $ this ->_cart ->setBillingAddress ($ this ->_cart ->getShippingAddress ());
598
+ }
573
599
}
574
600
}
575
601
576
602
// Billing address
577
- if ($ billingAddressId && !$ billingIsShipping ) {
578
- /** @var Address|null $userBillingAddress */
579
- $ userBillingAddress = Collection::make ($ currentUser ->getAddresses ())->firstWhere ('id ' , $ billingAddressId );
580
-
581
- // If a user's address ID has been submitted duplicate the address to the order
582
- if ($ userBillingAddress ) {
583
- $ this ->_cart ->sourceBillingAddressId = $ billingAddressId ;
603
+ if ($ setBillingAddress ) {
604
+ if ($ billingAddressId && !$ billingIsShipping ) {
605
+ /** @var Address|null $userBillingAddress */
606
+ $ userBillingAddress = Collection::make ($ currentUser ->getAddresses ())->firstWhere ('id ' , $ billingAddressId );
607
+
608
+ // If a user's address ID has been submitted duplicate the address to the order
609
+ if ($ userBillingAddress ) {
610
+ $ this ->_cart ->sourceBillingAddressId = $ billingAddressId ;
611
+
612
+ /** @var Address $cartBillingAddress */
613
+ $ cartBillingAddress = Craft::$ app ->getElements ()->duplicateElement ($ userBillingAddress , ['ownerId ' => $ this ->_cart ->id ]);
614
+ $ this ->_cart ->setBillingAddress ($ cartBillingAddress );
615
+
616
+ if ($ shippingIsBilling ) {
617
+ $ this ->_cart ->sourceShippingAddressId = $ userBillingAddress ->id ;
618
+ $ this ->_cart ->setShippingAddress ($ cartBillingAddress );
619
+ }
620
+ }
621
+ } elseif ($ billingAddress && !$ billingIsShipping ) {
622
+ $ this ->_cart ->sourceBillingAddressId = null ;
623
+ $ this ->_cart ->setBillingAddress ($ billingAddress );
584
624
585
- /** @var Address $cartBillingAddress */
586
- $ cartBillingAddress = Craft:: $ app -> getElements ()->duplicateElement ( $ userBillingAddress , [ ' ownerId ' => $ this -> _cart -> id ]);
587
- $ this -> _cart -> setBillingAddress ( $ cartBillingAddress );
625
+ if (! empty ( $ billingAddress [ ' fields ' ]) && $ this -> _cart -> getBillingAddress ()) {
626
+ $ this -> _cart -> getBillingAddress ()->setFieldValues ( $ billingAddress [ ' fields ' ]);
627
+ }
588
628
589
629
if ($ shippingIsBilling ) {
590
- $ this ->_cart ->sourceShippingAddressId = $ userBillingAddress -> id ;
591
- $ this ->_cart ->setShippingAddress ($ cartBillingAddress );
630
+ $ this ->_cart ->sourceShippingAddressId = null ;
631
+ $ this ->_cart ->setShippingAddress ($ this -> _cart -> getBillingAddress () );
592
632
}
593
633
}
594
- } elseif ($ billingAddress && !$ billingIsShipping ) {
595
- $ this ->_cart ->sourceBillingAddressId = null ;
596
- $ this ->_cart ->setBillingAddress ($ billingAddress );
597
-
598
- if (!empty ($ billingAddress ['fields ' ]) && $ this ->_cart ->getBillingAddress ()) {
599
- $ this ->_cart ->getBillingAddress ()->setFieldValues ($ billingAddress ['fields ' ]);
600
- }
601
-
602
- if ($ shippingIsBilling ) {
603
- $ this ->_cart ->sourceShippingAddressId = null ;
604
- $ this ->_cart ->setShippingAddress ($ this ->_cart ->getBillingAddress ());
605
- }
606
634
}
607
635
608
636
// Estimated Shipping Address
@@ -629,17 +657,21 @@ private function _setAddresses(): void
629
657
$ this ->_cart ->setEstimatedBillingAddress ($ estimatedBillingAddress );
630
658
}
631
659
660
+
632
661
$ this ->_cart ->billingSameAsShipping = (bool )$ billingIsShipping ;
633
662
$ this ->_cart ->shippingSameAsBilling = (bool )$ shippingIsBilling ;
634
663
$ this ->_cart ->estimatedBillingSameAsShipping = (bool )$ estimatedBillingIsShipping ;
635
664
636
665
// Set primary addresses
637
- if ($ this ->request ->getBodyParam ('makePrimaryShippingAddress ' )) {
638
- $ this ->_cart ->makePrimaryShippingAddress = true ;
666
+ if ($ setShippingAddress ) {
667
+ if ($ this ->request ->getBodyParam ('makePrimaryShippingAddress ' )) {
668
+ $ this ->_cart ->makePrimaryShippingAddress = true ;
669
+ }
639
670
}
640
-
641
- if ($ this ->request ->getBodyParam ('makePrimaryBillingAddress ' )) {
642
- $ this ->_cart ->makePrimaryBillingAddress = true ;
671
+ if ($ setBillingAddress ) {
672
+ if ($ this ->request ->getBodyParam ('makePrimaryBillingAddress ' )) {
673
+ $ this ->_cart ->makePrimaryBillingAddress = true ;
674
+ }
643
675
}
644
676
}
645
677
}
0 commit comments