Chia sẻ Tạo x2, x3,... giải thưởng Addons BookieByte


DM Exness

duocmatduocmat is verified member.

DM Founder
Staff member
DM Lover
VIP Member
20/8/24
147
1,938
10,085
duocmat.net
Token
1,002,460
USDT
9.00

Tạo x2, x3,... giải thưởng Addons BookieByte​


Edit template: aspbb_settle_event từ bảng admin

HTML:
<xf:title>{$event.title}</xf:title>
<xf:h1 hidden="true" />
<xf:breadcrumb href="{{ link('bookiebyte', null, {'category' : $event.Category.sys_id}) }}">{$event.Category.title}</xf:breadcrumb>
<xf:breadcrumb href="{{ link('bookiebyte/event/view', $event) }}">{$event.title}</xf:breadcrumb>
<div class="block-rowMessage block-rowMessage--highlight block-rowMessage--iconic">
    {{phrase('aspbb_ota_settle_warning')}}
</div>
<div class="block">
    <div class="block-container">
        <div class="block-body">         
            <xf:form action="" method="post" ajax="true" autocomplete="off" class="block" data-force-flash-message="on">             
                <xf:if is="count($event.Outcomes) > 0">
                    <xf:foreach loop="$event.Outcomes" value="$outcome">
                        <xf:formrow label="{{ phrase('aspbb_outcome') }}">
                            <strong><em>{$outcome.title}</em></strong>
                        </xf:formrow>
                        <xf:formrow label="{{ phrase('aspbb_odds') }}">
                            {$outcome.numerator}/{$outcome.denominator} ({$outcome.fraction|number(2)})
                        </xf:formrow>                     
                        <xf:radiorow name="settle[{$outcome.sys_id}]" label="{{phrase('aspbb_action')}}" value="nopay">
                            <xf:option value="pay" label="{{phrase('aspbb_payout')}}" />
                            <xf:option value="payx2" label="{{phrase('aspbb_payout')}}x2" />
                            <xf:option value="payx3" label="{{phrase('aspbb_payout')}}x3" />
                            <xf:option value="nopay" label="{{phrase('aspbb_no_payout')}}" />
                            <xf:option value="push" label="{{phrase('aspbb_push')}}" />
                        </xf:radiorow>
                        <hr class="formRowSep" />
                    </xf:foreach>
                </xf:if>
                <xf:submitrow submit="{{phrase('aspbb_submit')}}" icon="payment" />
            </xf:form>
        </div>
    </div>
</div>



Đường dẫn /src/addons/Asprin/BB/Service/Event/Settle.php

PHP:
<?php

namespace Asprin\BB\Service\Event;

use Asprin\BB\Entity\Event;
use Asprin\BB\Utils as Utils;

class Settle extends \XF\Service\AbstractService
{
    use \XF\Service\ValidateAndSavableTrait;
  
    /**
     * @var \Asprin\BB\Entity\Event
     */
    protected $event;

    protected $total_paid_out = 0;

    public function __construct(\XF\App $app, Event $event)
    {
        parent::__construct($app);
        $this->event = $event;
        $this->logs = array();
    }
  
    public function processSettling(array $settle)
    {
        $logs = array();     
        $outcomes = $this->event->Outcomes;
        if(count($settle) > 0 && count($outcomes) > 0)
        {         
            foreach($outcomes as $outcome)
            {
                $outcome_paid_out = 0;
                if(isset($settle[$outcome->sys_id]))
                {
                    $selection = $settle[$outcome->sys_id];                     
                    $result = 'na';
                    $multiplier = 0;

                    $wagers = $outcome->Wagers;                                 
                    foreach($wagers as $wager)
                    { 
                        if($selection == 'pay' ||$selection == 'payx2' ||$selection == 'payx3' || $selection == 'push' || $selection == 'cancel')
                        {                                                   
                            if($selection == 'pay')
                            {
                                $result = 'won';
                                $multiplier = (float) $outcome->fraction; 
                                $multiplierAmount = (int) ceil($wager->staked * $multiplier);
                                $finalAmount = $wager->staked + $multiplierAmount;                               
                            }
                          
                            else if($selection == 'payx2')
                            {
                                $result = 'won';
                                $multiplier = (float) $outcome->fraction; 
                                $multiplierAmount = (int) ceil($wager->staked *2* $multiplier);
                                $finalAmount = $wager->staked + $multiplierAmount; 
                            }                         
                          
                            else if($selection == 'payx3')
                            {
                                $result = 'won';
                                $multiplier = (float) $outcome->fraction; 
                                $multiplierAmount = (int) ceil($wager->staked *3* $multiplier);
                                $finalAmount = $wager->staked + $multiplierAmount; 
                            }                         
                          
                          
                            else if($selection == 'push')
                            {
                                $result = 'returned';
                                $finalAmount = $wager->staked;
                            }
                            else if($selection == 'cancel')
                            {
                                $result = 'cancel';
                                $finalAmount = $wager->staked;
                            }
                        } 
                        else if($selection == 'nopay')
                        {                         
                            $result = 'lost';
                            $finalAmount = $wager->staked;
                        }
                      
                      
                        if(in_array($selection, ['pay','payx2','payx3', 'push', 'nopay', 'cancel']))
                        {
                            $wagerer = $wager->Owner;
                            $curr_balance = (int) $wagerer->getCashBalance();
                            if($selection == 'pay' ||$selection == 'payx2' ||$selection == 'payx3' || $selection == 'push' || $selection == 'cancel')
                            {
                                $new_balance = $curr_balance + $finalAmount;
                                $wagerer->fastUpdate($wagerer->getCashColumn(), $new_balance);                             

                                if($selection == 'pay')
                                {
                                    $this->total_paid_out += $finalAmount;
                                    $outcome_paid_out += $finalAmount;
                                    $wager->fastUpdate('paid', $finalAmount);
                                    $wagerer->setWon($multiplierAmount);
                                }
                                else if($selection == 'payx2')
                                {
                                    $this->total_paid_out += $finalAmount;
                                    $outcome_paid_out += $finalAmount;
                                    $wager->fastUpdate('paid', $finalAmount);
                                    $wagerer->setWon($multiplierAmount);
                                }                                 
                                else if($selection == 'payx3')
                                {
                                    $this->total_paid_out += $finalAmount;
                                    $outcome_paid_out += $finalAmount;
                                    $wager->fastUpdate('paid', $finalAmount);
                                    $wagerer->setWon($multiplierAmount);
                                }                                 
                              
                                else if($selection == 'push')
                                {                                 
                                    $wager->fastUpdate('pushed', 1);
                                }
                                else if($selection == 'cancel')
                                {                                 
                                    $wager->fastUpdate('cancelled', 1);
                                }
                            }
                            else if($selection == 'nopay')
                            {                                 
                                $wager->fastUpdate('lost', 1);                               
                            }
                          
                            if($selection != 'cancel')
                            {
                                $wager->fastUpdate('settled_on', time());
                            }                         
                            $this->alertVisitor($wagerer, $outcome, $finalAmount, $result);
                        }
                        else
                        {
                            // log exception, this should ideally not happen
                            // this would mean the wager on this outcome would be termed invalid entry

                            Utils::log($outcome->title.' ('.$outcome->Event->title.') wager could not be settled for '.$wager->Owner->username.' via settle form. The selection value was '.$selection);
                            $unsettled = $this->event->getNewUnsettled();
                            $unsettled->outcome = $wager->Outcome->sys_id;
                            $unsettled->wager = $wager->sys_id;
                            $unsettled->save();
                        }
                    }

                    if($selection == 'push')
                    {
                        $outcome->fastUpdate('is_push', 1);
                    }                 
                    else if($selection == 'pay')
                    {
                        $outcome->fastUpdate('paid', $outcome_paid_out);
                    }
                    else if($selection == 'payx2')
                    {
                        $outcome->fastUpdate('paid', $outcome_paid_out);
                    }                 
                    else if($selection == 'payx3')
                    {
                        $outcome->fastUpdate('paid', $outcome_paid_out);
                    }                 
                  
                }
                else
                {
                    // log exception, this should ideally not happen
                    // this would mean that outcome sys_id in the form posted data was wrong
                    Utils::log($outcome->title.' ('.$outcome->Event->title.') was not passed correctly via settle form. The outcome sys_id was '.$outcome->sys_id);
                }
            }
          
            $this->event->fastUpdate('num_paid', $this->total_paid_out);
        }     

        $this->logs = $logs;
    }

    protected function alertVisitor(\XF\Entity\User $wagerer, \Asprin\BB\Entity\Outcome $outcome, $amount, $result)
    {
        if($result == 'won' || $result == 'lost')
        {
            $template = 'aspbb_won_or_lost';
        }
        else if($result == 'returned')
        {
            $template = 'aspbb_returned';
        }
        else
        {
            $template = 'aspbb_cancelled';
        }
      
        $amount = number_format($amount, 0, "", ",");
        $link = $this->app->router('public')->buildLink('bookiebyte/event/view', $outcome->Event);

        $sender = \XF::visitor();
        $alertRepo = $this->app->repository('XF:UserAlert');
        $alertRepo->alert($wagerer, $sender->user_id, $sender->username, 'user', $wagerer->user_id, $template, array('result' => $result, 'amount' => $amount, 'outcome' => $outcome->title, 'event' => $outcome->Event->title, 'link' => $link));     
    }

    public function finalSteps($cancel = null)
    {
        if($cancel == 'cancel')
        {
            $this->event->status = Utils::$cancelled;
        }
        else
        {
            $this->event->status = Utils::$awarded;
            $this->event->settled_on = time();
            $this->event->settled_by = \XF::visitor()->user_id;
        }             
    }

  

    protected function _validate()
    {     
        $this->event->preSave();
        $errors = $this->event->getErrors();

        return $errors;
    }

    protected function _save()
    {     
        $this->event->save(true, false);

        return $this->event;
    }
}
 
Last edited:


Thành viên trực tuyến

Forum statistics

Threads
289
Messages
326
Thành viên
124
Latest member
ricotysunson