Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

139 lines
4.0KB

  1. <?php
  2. namespace domain\Payment;
  3. use common\helpers\MeanPayment;
  4. use domain\Order\Order\Order;
  5. use domain\_\AbstractService;
  6. use domain\_\SolverInterface;
  7. class PaymentSolver extends AbstractService implements SolverInterface
  8. {
  9. public function isTypeDebit(Payment $payment): bool
  10. {
  11. return in_array($payment->getType(), [
  12. Payment::TYPE_DEBIT,
  13. Payment::TYPE_PAYMENT,
  14. ]);
  15. }
  16. public function isTypeCredit(Payment $payment): bool
  17. {
  18. return in_array($payment->getType(), [
  19. Payment::TYPE_CREDIT,
  20. Payment::TYPE_INITIAL_CREDIT,
  21. Payment::TYPE_REFUND
  22. ]);
  23. }
  24. public function sumAmountPaid(Payment $payment, float $amount = 0)
  25. {
  26. if($this->isTypeDebit($payment)) {
  27. $amount += $payment->amount;
  28. }
  29. else {
  30. $amount -= $payment->amount;
  31. }
  32. return $amount;
  33. }
  34. public function getAmount(Payment $payment, bool $format = false): string
  35. {
  36. if ($format) {
  37. return number_format($payment->getAmount(), 2, ',', ' ') . '&nbsp;€';
  38. } else {
  39. return $payment->getAmount();
  40. }
  41. }
  42. /**
  43. * Retourne le libellé du CreditHistory informant de son type et
  44. * éventuellement de la date de sa commande associée.
  45. *
  46. */
  47. public function getStrWording(Payment $payment, Order $order = null): string
  48. {
  49. $str = '';
  50. $type = $payment->getType();
  51. if (Payment::TYPE_INITIAL_CREDIT == $type) {
  52. $str = 'Crédit initial cagnotte';
  53. } elseif (Payment::TYPE_CREDIT == $type) {
  54. $str = 'Crédit cagnotte';
  55. } elseif (Payment::TYPE_PAYMENT == $type) {
  56. $str = 'Paiement';
  57. } elseif (Payment::TYPE_REFUND == $type) {
  58. $str = 'Remboursement';
  59. } elseif (Payment::TYPE_DEBIT == $type) {
  60. $str = 'Débit cagnotte';
  61. }
  62. if (Payment::TYPE_PAYMENT == $type || Payment::TYPE_REFUND == $type) {
  63. // Optimisation
  64. if(!$order) {
  65. $order = $payment->order;
  66. }
  67. if ($order && $order->distribution) {
  68. //$str .= '<br /><small>commande du <a href="'.\Yii::$app->urlManager->createUrl(['distribution/index', 'date' => $order->distribution->date]).'">' . date('d/m/Y', strtotime($order->distribution->date)).'</a></small>';
  69. $str .= '<br /><small>Commande du ' . date('d/m/Y', strtotime($order->distribution->date)).'</small>';
  70. } else {
  71. $str .= '<br /><small>Commande supprimée</small>';
  72. }
  73. }
  74. return $str;
  75. }
  76. public function getDate(Payment $payment, bool $format = false): string
  77. {
  78. $date = $payment->getDate();
  79. if ($format) {
  80. return date('d/m/Y à H:i:s', strtotime($date));
  81. } else {
  82. return $date;
  83. }
  84. }
  85. public function isMeanPaymentCredit(Payment $payment): bool
  86. {
  87. return $payment->mean_payment == MeanPayment::CREDIT;
  88. }
  89. public function getStrMeanPayment(Payment $payment): string
  90. {
  91. return MeanPayment::getStrBy($payment->getMeanPayment());
  92. }
  93. public function getStrType(Payment $payment): string
  94. {
  95. switch($payment->type) {
  96. case Payment::TYPE_PAYMENT:
  97. return 'Paiement';
  98. case Payment::TYPE_DEBIT:
  99. return 'Débit';
  100. case Payment::TYPE_CREDIT:
  101. return 'Crédit';
  102. case Payment::TYPE_REFUND:
  103. return 'Remboursement';
  104. case Payment::TYPE_INITIAL_CREDIT:
  105. return 'Crédit initial';
  106. }
  107. return 'Type de paiement inconnu';
  108. }
  109. public function getStrUserAction(Payment $payment): string
  110. {
  111. $userAction = $payment->getUserActionObject();
  112. if ($userAction) {
  113. return $userAction->getName() . ' ' . $userAction->getlastname();
  114. } else {
  115. return 'Système';
  116. }
  117. }
  118. }