Jump to content

ARV187

Members
  • Posts

    260
  • Joined

  • Last visited

  • Days Won

    2

Posts posted by ARV187

  1. 30 minutes ago, DisposableHero said:

    Why do you need a text change for it ? It is the "block time cost" of an aircraft (comes from subfleet of course) and it is the correct phrase to use there. In theory, it is the cost of using that aircraft for xx minutes, defined hourly as like in real life but calculated per minute. So in short, it is correctly designed, being calculated and used.

     

    Please do not mix up things with other things and try to find a way around to have what you wish to see, by requesting changes to working features ;)

     

    That custom expense not working is still an open bug, probably will be fixed soon (after Laravel9 switch). If you need to stick with current dev for some reason, then you can design a really simple module to pass your custom expenses, that works, only "custom expenses without a module" solution/example is failing :)

     

    And just wondering, why do you need to create "a cost of crew salary" ? Pilots do get their pays, it is calculated. If you are trying to simulate cabin crew salaries, then doing it with an expense is much more logical.  ;) No need to brake working block time cost for that :)

     

    Best wishes

     

    I know that this cost includes a lot of expenses, all those that the plane has per hour. But as we wanted to have have each expense detailed, we were doing it with the "expenses" section below. The problem, as I commented in github, is that the cost type "time" is missing.

    Yes, what we want to simulate is the cost of the cabin crew, not the pilot. We could do a cost per flight but it would not adjust to the duration of the hours worked by the crew.
     

    The name change was to make it simpler for us, as much as changing a word, to know where it could be done, obviously the change was just for us to do it, not to be done in development 😅. It was difficult for us to know what was the "block time cost" because we knew it by the name given in the administration "cost per hour" and by doing the maths we realised that it was the field we used for the wage/hour of the crew. 😄

    Thanks Dispo!!


    imagen.png.cf15ba3ed5a24e3c2a0c6fb836c7da34.png

  2. Hi, To recreate the cost of crew salary

    We are adding up their hourly wages and putting them in this box "Cost Per Hour" as there is no other box in the system to do an hourly calculation. When the pirep is sent instead of hourly cost it says "block time cost" so it was a bit difficult to relate that both were the same.
    You could change the word in the resulting pirep.

     

     

    imagen.thumb.png.83265d97adfe94ee6d4bc8997ae5c150.png

     

    Or better yet, do this:  https://github.com/nabeelio/phpvms/issues/776 Adding the possibility of create a expense for time.

    Any solution? Thanks!!

  3. Hi, I'm trying to charge to pilot to accept a pirep not scheduled.
    I tried to follow an example, but I don't know what I must write in condition.
    if ($event->pirep-> !scheduled)
    Or how charge the Debit of pirep
    $amount = pirep expenses/debit;

    Thanks!

    \app\Listeners\FreeFlight.php

    <?php
    
    namespace App\Listeners;
    
    use App\Contracts\Listener;
    use App\Events\Expenses;
    use App\Events\PirepAccepted;
    use App\Models\Enums\ExpenseType;
    use App\Models\Expense;
    
    class FreeFlight extends Listener
    {
        public function handle(Expenses $event)
        {
            $expenses = [];
            $amount = pirep expenses/debit;
    
            if ($event->pirep-> !scheduled) { 
                return $expenses; 
            }
        
            $expenses[] = new Expense([
                'type'              => ExpenseType::FLIGHT,
                'amount'            => $amount,
                'transaction_group' => 'Free Flight',
                'name'              => 'Free flight Fee For Pirep='.$event->pirep->id,
                'multiplier'        => false,
                'charge_to_user'    => true
            ]);
    
            return $expenses;
        }
    }

     

  4. Search by time:

    \lib\skins\YourSkin\schedule_searchform.tpl

    <li class="nav-item"><a class="nav-link" href="#flighttimetab"><span><button type="button" class="btn btn-primary">Por tiempo</button></span></a></li> //write this with the others tabs code
    
    <div id="flighttimetab" class="card-body text-white bg-dark">
    		<p>Selecciona tiempo de vuelo:</p>
    		<select id="type" name="type">
    			<option value="greater">Mayor que</option>
    			<option value="less">Menor que</option>			            
    		</select>
    		<input type="text" name="flighttime" value="" />  Horas      
    		<input type="submit" name="submit" value="Buscar vuelos" />
    </div>

     

     

    \core\modules\Schedules\Schedules.php

    		if($this->post->flighttime != '')
    		{
    			if($this->post->type == 'greater')
    				$value = '> ';
    			if($this->post->type == 'less')
    				$value = '< ';						
    			$value .= $this->post->flighttime;
    			
    			$params = array('s.flighttime' => $value);			
    		}

     

  5. Thanks to @DisposableHero and @Nabeelfor the help

    Code from DisposableHero:

     

    <?php 
    		   
       require_once ("xxx/db.php");
       mysqli_select_db($db, $database_db);
       $resultSet = "SELECT icao, registration FROM phpvms_aircraft WHERE `enabled`='1' ORDER BY `icao` ASC";		   
    ?>
    
    <select id="dropdown" onChange="ChangeFormValues()">
    <?php
    	$resultSet = mysqli_query($db, $resultSet) or die(mysqli_error($db));
    	while ($rows = $resultSet->fetch_assoc()) {
    	  $icao = $rows['icao'];
    	  $reg = $rows['registration'];
    	  // Build your dropdown with php, just put a seperator between them like #
    	  echo '<option value="'.$icao.'#'.$reg.'">'.$icao.' '.$reg.'</option>';
    	}
    ?>
    </select>
    
    <input type="text" id="icao" name="type" maxlength="4" placeholder="ICAO Type" readonly>
    <input type="text" id="reg" name="reg" maxlength="7" placeholder="Registration" readonly>
    
    
    <script selectIcao="text/javascript">
    function ChangeFormValues() {
    	// Get the selection, and then split it
    	var selected = document.getElementById('dropdown').value.split("#") ;
    	// Now set your form field values according to selection
    	document.getElementById('icao').value = selected[0] ;
    	// Start. Added later, as a quick and temporary solution to aircraft that are not in simbrief DB, a custom airframe is created and when choosing the icao in the dropdown it is replaced by the Simbrief Internal ID.
    	if (document.getElementById('icao').value=="B38M") {
    		document.getElementById('icao').value = "288759_1640167452930" ;}
    	// end
    	document.getElementById('reg').value = selected[1] ;
    }
    </script>

    imagen.thumb.png.60df9be183bf38153a89eb502252e651.png

  6. Hi, I'm trying the solution via json aproach, but I get this error:
     

    SyntaxError: JSON.parse: expected property name or '}' at line 1 column 1 of the JSON data

     

    My code:
     

    <?php 
    $resultSet = "SELECT icao, registration FROM phpvms_aircraft";	
    $resultSet = mysqli_query($xxxx, $resultSet) or die(mysqli_error($xxxx));
    while($rows = $resultSet->fetch_assoc())			
    {
    	echo $icao = $rows['icao'] . ' ';
        echo $reg = $rows['registration'] . '<br>';
    	$dropdown = array('icao','registration');
    }
    
    //Print out the array in a JSON format.
    header('Content-Type: application/json');
    echo json_encode($dropdown);//Print out the array in a JSON format.
    ?>


    I'm using this example: https://thisinterestsme.com/select-options-with-ajax/

     

    Do you see what I am doing wrong at first glance?

    P.S: Fixed, I still don't know what was wrong.
    I'm now in dropdown step (select aircraft, extract icao & registration in separate inputs).

  7. Thank you @DisposableHero
    I tried your modifications, but same result that mine.

    If I edit:

    $resultSet2 = "SELECT registration FROM phpvms_aircraft WHERE icao='".$avion."'";

    To:

    $resultSet2 = "SELECT registration FROM phpvms_aircraft WHERE icao='A20N'";

     

    The line:

    echo '<option value="'.$reg.'">'.$reg.'</option>';

    Show: RG-101 (the right reg to A20N), but when I send the form (<form id="sbapiform"> in \lib\skins\bs4\schedule_briefing.tpl) the result from simbrief (SimBrief?ofp_id=fpNumber) is an auto reg because when you don't pass a "reg" simbrief autogenerate one.

     

    However if I write in input type text:

    <input name="reg" id="regist">

    the result from simbrief is the correct value written in the input text field.

    GqytYg5.png

    So I see two issues:
    1º Form isn't sending the value from:

    echo '<option value="'.$reg.'">'.$reg.'</option>';

    but this value is showed rightly in form page (<form id="sbapiform"> in \lib\skins\bs4\schedule_briefing.tpl).

    2º I'm not sure if WHERE variable is working because when I use icao='".$avion."' not is showing nothing in the web page echo '<option value="'.$reg.'">'.$reg.'</option>'; However if I use WHERE icao='A20N' is showed in form web page.

    $resultSet2 = "SELECT registration FROM phpvms_aircraft WHERE icao='".$avion."'";

     

    The full original code is here Line 123 and below: https://github.com/vangelisb/Simbrief/tree/5022f0bcfa886767f197ae890bffcc29fb98ba6a/phpvms/copy included file to your template folder

    L131 <?php $planedata=(OperationsData::getAircraftByReg($schedule->registration)) ;?>
             <td><input type="hidden" name="type" size="5" type="text" placeholder="ZZZZ" value="<?php echo $planedata->icao ;?>"></td>

    L186 <input type="hidden" name="reg" value="<?php echo $schedule->registration?>">
     

  8. 11 minutes ago, ProAvia said:

    phpVMS version?

    PHP version?

    MySQL/MariaDB version?

     

    What modules are you using?

    Are you using the FltBook module?

    I'm so sorry, I completely forgot about that.


    phpVMS version? Version 2.1.936

    PHP version? 5.6

    MySQL/MariaDB version? 5.7.35

     

    What modules are you using? None.

    Are you using the FltBook module? No.

    All work well, only I want add that auto reg selection in the input
    <input type="hidden" name="reg" value="<?php echo $schedule->registration?>">
    For reference: https://github.com/vangelisb/Simbrief/tree/5022f0bcfa886767f197ae890bffcc29fb98ba6a/phpvms

  9. Hi there,

     

    Im trying autoselecting the registration code from DB after select aircraft in a dropdown menu. But I don't know why not work. Simbrief plan set an auto registration to selected airplane.

    At the moment I coded this:

    Input name values that simbrief form get are: "type" to aircraft, "reg" to registration.

     

    		   <?php 
    		   
    		   require_once ("/Connections/db.php");
    		   mysqli_select_db($db, $database_db);
    		   $resultSet = "SELECT icao, registration FROM phpvms_aircraft";		   
    		   ?>
    
    			<select name="type" id="typo" onChange="upicao()">
    			<?php 
    			$resultSet = mysqli_query($db, $resultSet) or die(mysqli_error($db));
    			while($rows = $resultSet->fetch_assoc())			
    			{
    				$icao = $rows['icao'];
                    $reg = $rows['registration']; 
    				echo "<option value=$icao>$icao $reg</option>";				
    			}					
    			?>
    			</select>
    			<?php
    			$avion = "<input type=hidden id=typo readonly>";
    			?>
    				<script type="text/javascript">
    		function upicao() {
    				var select = document.getElementById('typo');				
    				var option = select.options[select.selectedIndex];
    
    				document.getElementById('typo').value = option.value;
    				
    			}
                      upicao();
    		</script>
    		
    		<?php
    		
    		if (($avion)!=null) {
    		require_once ("/Connections/db.php");
    		   mysqli_select_db($db, $database_db);
    		   $resultSet2 = "SELECT registration FROM phpvms_aircraft WHERE icao='" . $avion . "'";
    		?>
    		  
    		<b>Registro</b> (opcional):&nbsp;
    		<input name="reg" id="regist">
    		<?php
    		$resultSet2 = mysqli_query($db, $resultSet2) or die(mysqli_error($db));
    		while($rows = $resultSet2->fetch_assoc())
    			{
    			$reg = $rows['registration'];
    			echo "<option value=$reg>$reg</option>";
    		}			
    		}
    		?>


    Could someone help me with the code, it's been two weeks ...

    Thank you!

  10. Updated OSM for flown_routes_map from Discord by Justin RR
     

    <div id="routemap" style="width: 100%; height: 800px;"></div>
    
                <script src="<?php echo SITE_URL?>/lib/js/base_map.js"></script>
                <script type="text/javascript">
    
                const map = createMap({
                    render_elem: 'routemap',
                    provider: '<?php echo Config::Get("MAP_TYPE"); ?>',
                });
                var latlngs = [
                        <?php
                    $shown = array();
                    
                    foreach($allschedules as $route)
                    {    
                        // Dont show repeated routes        
                        if(in_array($route->code.$route->flightnum, $shown))
                            continue;
                        else
                            $shown[] = $route->code.$route->flightnum;
                        
                        if(empty($route->arrlat) || empty($route->arrlng)
                            || empty($route->deplat) || empty($route->deplng))
                        {
                            continue;
                        }
                    ?>
                    [
                        new L.LatLng(<?php echo $route->deplat; ?>, <?php echo $route->deplng; ?>),
                        new L.LatLng(<?php echo $route->arrlat; ?>, <?php echo $route->arrlng; ?>),
                    ],
                    
                    <?php } ?>
    
                ];
                const pointsLayer = L.geodesic(latlngs, {
                    weight: 2,
                    opacity: 0.5,
                    color: '#2e4a66',
                    steps: 10
                }).addTo(map);
                    </script> 

     

  11. Hi, I' trying to modify the search function to not only have '<' or '>' distance, if not between 'distance1' and 'distance2' too, and by flight time.

    I have not gotten it to work for me, I don't know if I have to modify something else, or how to implement it in the existing code. My phpvms version is v2.

    Thanks!

     

    So in SchedulesData.class.php Line 19:

     

    class SchedulesData extends CodonData
    {	
    
    /**
    	 * A generic find function for schedules. As parameters, do:
    	 * 
    	 * $params = array( 's.depicao' => 'value',
    	 *					's.arricao' => array ('multiple', 'values'),
    	 *	);
    	 * 
    	 * Syntax is ('s.columnname' => 'value'), where value can be
    	 *	an array is multiple values, or with a SQL wildcard (%) 
    	 *  if that's what is desired.
    	 * 
    	 * Columns from the schedules table should be prefixed by 's.',
    	 * the aircraft table as 'a.'
    	 * 
    	 * You can also pass offsets ($start and $count) in order to 
    	 * facilitate pagination
    	 * 
    	 * @tutorial http://docs.phpvms.net/media/development/searching_and_retriving_schedules
    	 */
    	public static function findSchedules($params, $count = '', $start = '')
    	{
    		$sql = 'SELECT s.*, 
    					a.id as aircraftid, a.name as aircraft, a.registration,
    					a.minrank as aircraft_minrank, a.ranklevel as aircraftlevel,
    					dep.name as depname, dep.lat AS deplat, dep.lng AS deplng,
    					arr.name as arrname, arr.lat AS arrlat, arr.lng AS arrlng
    				FROM '.TABLE_PREFIX.'schedules AS s
    				LEFT JOIN '.TABLE_PREFIX.'airports AS dep ON dep.icao = s.depicao
    				LEFT JOIN '.TABLE_PREFIX.'airports AS arr ON arr.icao = s.arricao
    				LEFT JOIN '.TABLE_PREFIX.'aircraft AS a ON a.id = s.aircraft ';
    	
    		/* Build the select "WHERE" based on the columns passed, this is a generic function */
    		$sql .= DB::build_where($params);
    		
    		// Order matters
    		if(Config::Get('SCHEDULES_ORDER_BY') != '')
    		{
    			$sql .= ' ORDER BY '.Config::Get('SCHEDULES_ORDER_BY');
    		}
    		
    		if(strlen($count) != 0)
    		{
    			$sql .= ' LIMIT '.$count;
    		}
    		
    		if(strlen($start) != 0)
    		{
    			$sql .= ' OFFSET '. $start;
    		}
    		
    		$ret = DB::get_results($sql);
    		return $ret;
    	}

     

    schedule_searchform.tpl at line 92

    <div id="flighttime">
    		<p>Selecciona tiempo de vuelo:</p>
    		<select id="type" name="type">
    			<option value="greater">Mayor que</option>
    			<option value="less">Menor que</option>			            
    		</select>
    		<input type="text" name="flighttime" value="" />        
    		<input type="submit" name="submit" value="Buscar vuelos" />
    	</div>

     

    Schedules.php at line 175

    	public function findFlight()
    	{
    		
    		if($this->post->depicao != '')
    		{
    			$params = array('s.depicao' => $this->post->depicao);
    		}
    		
    		if($this->post->arricao != '')
    		{
    			$params = array('s.arricao' => $this->post->arricao);
    		}
    		
    		if($this->post->equipment != '')
    		{
    			$params = array('a.name' => $this->post->equipment);
    		}
    		
    		if($this->post->distance != '')
    		{
    			if($this->post->type == 'greater')
    				$value = '> ';
    			if($this->post->type == 'less')
    				$value = '< ';			
    			$value .= $this->post->distance;
    			
    			$params = array('s.distance' => $value);			
    		}
    		
    //////////////////////* my code start *////////////////////////
                  
                if($this->post->flighttime != '')
    		{
    			if($this->post->type == 'greater')
    				$value = '> ';
    			if($this->post->type == 'less')
    				$value = '< ';			
    			$value .= $this->post->flighttime;
    			
    			$params = array('s.flighttime' => $value);			
    		}
    //////////////////////* my code end *////////////////////////
                  
    		$params['s.enabled'] = 1;
    		$this->set('allroutes', SchedulesData::findSchedules($params));
    		$this->render('schedule_results.tpl');
    	}

     

  12. It was just the only line one that had not changed more than a year ago with "static". 😅

    SchedulesData.class.php L739 public static function getLatestBid($pilotid).

     

    I can't reproduce the error again nor before applying the fix, It only appeared once. Seems that the "you may be able to continue" was serious and has not reappeared.

    Will the "cannot modify header information" be fixed after the change?

    I found the file, in L394 say: "header('Content-type: text/xml');"

    public function sendXML($params)
    	{
    		$xml = new SimpleXMLElement("<sitedata />");
    		
    		$info_xml = $xml->addChild('info');
    		foreach($params as $name => $value)
    		{
    			$info_xml->addChild($name, $value);
    		}
    		
    		header('Content-type: text/xml'); 		
    		$xml_string = $xml->asXML();
    		echo $xml_string;
    		
    		# For debug
    		#$this->log("Sending: \n".print_r($xml_string, true), 'kacars');
    		
    		return;	
    	}

     

  13. v2.1.936 version, I saw that function, but I don't figure that do with that, the function calculate the distance between two points.
    I can do that in phpmyadmin with a sql sentence, but I do not know how to move it to that in schedule_searchform distances section with the existing form, where the data of the query "between" are those that the user enters in two fields type number.

     

    <div id="distance">
    		<p>Selecciona distancia:</p>
    		<select id="type" name="type">
    			<option value="greater">Greater than</option>
    			<option value="less">Less than</option>            
    		</select>
    		<input type="text" name="distance" value="" />        
    		<input type="submit" name="submit" value="Search flight" />
    <br /><br />
    			<option value="between">Between</option>
            		<?php $sql = "SELECT *  FROM `phpvms_schedules` WHERE `distance` BETWEEN $distance1 AND $distance2"; ?>
            <input type="number" name="distance1" min="1" max="9999" value="" /> > <input type="number" name="distance2" min="1" max="9999" value="" />
            <input type="submit" name="submit" value="Search flight" />
    </div>

     

  14. I would like to add an option to allow you to search for a flight that has for example between 200 miles and 300 miles
    something similar to: search flight where 'distance' between "$distance1" and "$distance2"

    I have scanned these files:

    • schedule_searchform.tpl
    • core/modules/Schedules/schedules.php

    but I can not find out what code I need to do this.

×
×
  • Create New...