Snippets Collections
The main purpose of creating a hotel reservation system is to streamline and optimize hotel operations more efficiently, improve the guest experience, and increase overall profits from their business. Here we listed out the breakdown key points in an easily understandable way

Centralized operations
◦ Reservation Management: From this category, you'll get complete reservation management that effectively manages your platform for your users, handling bookings, cancellations, and modifications efficiently.
◦ Front Desk Operations: Streamline check-in/check-out, room assignments, and guest registration.
◦ Housekeeping Management: Track room status, assign cleaning tasks, and coordinate maintenance.

Enhanced Guest Experience:

◦ Personalized Service: Gather guest preferences and tailor services accordingly.
◦ Improved Communication: Facilitate communication with guests through various channels.
◦ Loyalty Programs: Manage loyalty programs and reward repeat guests.

Increased Efficiency:

◦ Automation: Automate repetitive tasks, freeing up staff for other duties.
◦ Reduced Errors: Minimize human error in data entry and other tasks.
◦ Improved Communication: Facilitate better communication between departments.

If you have any plans to uplift your business in all aspects, then you choose the best hotel booking engine script to effectively manage your hotel business.


The `@track` decorator in Lightning Web Components (LWC) is used to make a property reactive, meaning that changes to the property will cause the component to re-render. However, `@track` is used for internal state management within the component itself and is not intended for exposing properties to parent or other components.

Here’s a comparison:

- `@api`: Used to expose properties and methods to parent components. It makes the property or method public.
- `@track`: Used to make properties reactive within the component. It is used for internal state management.

Example using `@track`:

```javascript
import { LightningElement, track } from 'lwc';

export default class MyComponent extends LightningElement {
    @track internalState = {}; // This property is reactive within the component

    handleChange(event) {
        this.internalState.value = event.target.value;
    }
}
```

In this example, `internalState` is a reactive property that will cause the component to re-render when its value changes, but it is not exposed to parent components.

Use `@api` when you need to expose properties or methods to parent components, and use `@track` for managing internal state that should trigger re-renders when changed.










import { LightningElement, track } from 'lwc';

export default class MyComponent extends LightningElement {
    @track internalState = {}; // This property is reactive within the component

    handleChange(event) {
        this.internalState.value = event.target.value;
    }
}
const turnOverDataList =[
    {
      "turnover_data": [
        {
          "debit_amt": 3089315000,
          "credit_amt": 1663958000
        }
      ]
    },
    {
      "turnover_data": [
        {
          "debit_amt": 215278167000,
          "credit_amt": 272487858350
        }
      ]
    },
    {
      "turnover_data": [
        {
          "debit_amt": 30414730000,
          "credit_amt": 39515585500
        }
      ]
    }
  ]


let { debitAmount, creditAmount } = turnOverDataList.reduce((acc, x) => {
                acc.debitAmount += x.turnover_data[0].debit_amt;
                acc.creditAmount += x.turnover_data[0].credit_amt;
                return acc;
            }, { debitAmount: 0, creditAmount: 0 });

 debitAmount = debitAmount > 0 ? debitAmount : 1;

     const   previousRTP = creditAmount / debitAmount * 100;

console.log(previousRTP)
add_filter( 'pcp_hr_grid_first_item_content_limit', function($limit, $shortcode_id ){
	if ( 3842 == $shortcode_id ){ // Update 2923 with your shortcode id
		$limit = 99;
	}
	return $limit;
}, 10, 2);
{!$CustomMetadata.APINameoftheCMDT__mdt.APINameoftheSpecificCMDT.APINameoftheField}

Example:
{!$CustomMetadata.Generic_Configuration__mdt.Cancelled_Event_Owner.Value__c}
add_action('wpcf7_mail_sent', 'save_cf7_form_data');

function save_cf7_form_data($contact_form) {
    global $wpdb;

    $form_id = $contact_form->id();
    $submission = WPCF7_Submission::get_instance();
    if ($submission) {
        $form_data = $submission->get_posted_data();
        $table_name = 'wpyy_cf7_submissions'; // Use your custom table name directly

        $wpdb->insert(
            $table_name,
            [
                'form_id' => $form_id,
                'form_data' => maybe_serialize($form_data),
            ],
            [
                '%d',
                '%s'
            ]
        );
    }
}


add_action('wpcf7_mail_sent', 'add_submission_to_layout');


function add_submission_to_layout($contact_form) {
    global $wpdb;

    // Get form data
    $submission = WPCF7_Submission::get_instance();
    if ($submission) {
        $data = $submission->get_posted_data();

        // Define variables for all fields
        $name = isset($data['Full-name']) ? $data['Full-name'] : 'Unknown';
        $sport = isset($data['Sport']) ? $data['Sport'] : 'Unknown';
        $email_address = isset($data['Email-address']) ? $data['Email-address'] : 'Unknown';
        $phone_Number = isset($data['Phone-Number']) ? $data['Phone-Number'] : 'Unknown';
        $nick_name = isset($data['Nick-name']) ? $data['Nick-name'] : 'Unknown';
        $player_number = isset($data['Player-Number']) ? $data['Player-Number'] : 'Unknown';
        $graduation_year = isset($data['Graduation-year']) ? $data['Graduation-year'] : 'Unknown';
        $team_club = isset($data['Team-club']) ? $data['Team-club'] : 'Unknown';
        $years_playing = isset($data['Years-playing']) ? $data['Years-playing'] : 'Unknown';
        $stats = isset($data['Stats']) ? $data['Stats'] : 'Unknown';
        $positions = isset($data['Positions']) ? $data['Positions'] : 'Unknown';
        $awards_achievements = isset($data['Awards-Achievements']) ? $data['Awards-Achievements'] : 'Unknown';
        $tiktok_link = isset($data['Tiktok-link']) ? $data['Tiktok-link'] : 'Unknown';
        $instagram_link = isset($data['Instagram-link']) ? $data['Instagram-link'] : 'Unknown';  
        $twitter_link = isset($data['Twitter-link']) ? $data['Twitter-link'] : 'Unknown';
        $imlca_link = isset($data['IMLCA-link']) ? $data['IMLCA-link'] : 'Unknown';
        $youtube_link = isset($data['YouTube-link']) ? $data['YouTube-link'] : 'Unknown';
        $file_id = isset($data['file-upload']) ? $data['file-upload'] : '';
        $dominant_hand = isset($data['hand-dominance']) ? $data['hand-dominance'] : 'Unknown'; 
        if (isset($_POST['hand-dominance'])) {
        $dominant_hand = sanitize_text_field($_POST['hand-dominance']); // Sanitize the input
        }
        $file_url = 'https://sportmeid.com/wp-content/uploads/2024/12/player-profile.webp'; 
        if (!empty($_FILES['file-upload']['name'])) {
            $file = $_FILES['file-upload'];
            $upload_dir = wp_upload_dir();
            $file_path = $upload_dir['path'] . '/' . basename($file['name']);
            move_uploaded_file($file['tmp_name'], $file_path);

            $attachment = array(
                'guid' => $upload_dir['url'] . '/' . basename($file['name']),
                'post_mime_type' => mime_content_type($file_path),
                'post_title' => preg_replace('/\.[^.]+$/', '', basename($file['name'])),
                'post_content' => '',
                'post_status' => 'inherit'
            );

            $attachment_id = wp_insert_attachment($attachment, $file_path);
            require_once(ABSPATH . 'wp-admin/includes/image.php');
            $attachment_metadata = wp_generate_attachment_metadata($attachment_id, $file_path);
            wp_update_attachment_metadata($attachment_id, $attachment_metadata);

            $file_url = wp_get_attachment_url($attachment_id);
        }

        $player_id = uniqid();

        $new_entry = '<a href="' . site_url('/player-detail?id=' . $player_id) . '" >';
        $new_entry .= '<div class="player-card" data-name="' . esc_attr($name) . '" data-sport="' . esc_attr($sport) . '">';
        $new_entry .= '<div class="player-image">';
        $new_entry .= '<img src="' . esc_url($file_url) . '" alt="' . esc_attr($name) . '" class="player-image">';
        $new_entry .= '</div>'; 
        $new_entry .= '<div class="player-card-name">';
        $new_entry .= '<p>Name: ' . esc_html($name) . '</p>';
        $new_entry .= '<p>Sport: ' . esc_html($sport) . '</p>';
        $new_entry .= '<div class="player-image-button">';
        $new_entry .= '</div>';
        $new_entry .= '</div>';
        $new_entry .= '</div>';
        $new_entry .= '</a>';

        $existing_data = get_option('players_data', []);
        $existing_data[$player_id] = array(
            'name' => $name,
            'sport' => $sport,
            'email_address' => $email_address,
            'phone_Number' => $phone_Number,
            'nick_name' => $nick_name,
            'player_number' => $player_number,
            'graduation_year' => $graduation_year,
            'team_club' => $team_club,
            'years_playing' => $years_playing,
            'positions' => $positions,
            'dominant_hand' => $dominant_hand,
            'stats' => $stats,
            'awards_achievements' => $awards_achievements,
            'tiktok_link' => $tiktok_link,
            'instagram_link' => $instagram_link,
            'twitter_link' => $twitter_link,
            'youtube_link' =>  $youtube_link,
            'imlca_link' =>   $imlca_link,
            'file_url' => $file_url
        );

        update_option('players_data', $existing_data);

        $existing_layout = get_option('players_layout', []);
        $existing_layout[] = $new_entry;
        update_option('players_layout', $existing_layout);
    }
}


function render_players_layout() {
    $layout = get_option('players_layout', []);

    if (!empty($layout)) {
        $output = '<div class="players-pof-col">';
        $counter = 0;

        foreach ($layout as $entry) {
            $output .= $entry;

            $counter++;
            if ($counter % -1 === 0) {
                $output .= '</div><div class="players-pof-col">';
            }
        }

        $output .= '</div>';
        echo $output;
    } else {
        echo '<p>No players data found.</p>';
    }
}
function delete_form_submission() {
    if (isset($_GET['delete_submission']) && isset($_GET['entry_id'])) {
        $submission_id = intval($_GET['entry_id']);
        if (is_user_logged_in() && user_can(current_user(), 'delete_posts')) {
            global $wpdb;

            $wpdb->delete($wpdb->prefix . 'flamingo_inbound_messages', array('id' => $submission_id));
        }
    }
}
add_action('wp', 'delete_form_submission');



add_shortcode('players_layout', 'render_players_layout');


add_action('template_redirect', 'handle_player_detail_page');

function handle_player_detail_page() {
    if (isset($_GET['id']) && is_page('player-detail')) {
        $player_id = sanitize_text_field($_GET['id']);
        $players_data = get_option('players_data', []);

        if (isset($players_data[$player_id])) {
            $player = $players_data[$player_id];

            // Display player detail page
            include get_template_directory() . '/player-detail-template.php';
            exit; // Prevent further processing
        } else {
            wp_die('Player not found.');
        }
    }
}


add_filter('wpcf7_form_tag', 'set_default_dropdown_value', 10, 2);

function set_default_dropdown_value($tag, $unused) {
    if ($tag['name'] === 'hand-dominance') {
        $submitted_value = isset($_POST['hand-dominance']) ? $_POST['hand-dominance'] : '';
        foreach ($tag['raw_values'] as &$value) {
            if ($value === $submitted_value) {
                $value = $value . ' default:1';
            }
        }
    }
    return $tag;
}


function sports_textarea_field() {
    ob_start();
    ?>
    <div id="sports-wrapper" class="text-fild">
        <textarea id="sports-textarea" name="Sport" class="auto-height" placeholder="Sports will be shown here..." readonly></textarea>
        <div id="sports-input-wrapper" class="add-text-input" style="display: none;">
            <input type="text" id="sports-input" placeholder="Enter sport here..." />
        </div>
        <p id="sports-warning-message" style="color: blue; display: none; margin-top: 10px;"></p> <!-- Warning message -->
        <div class="add-buttons">
            <button type="button" id="sports-add-save-button">Add</button>
            <button type="button" id="sports-delete-last-button" style="display: none;">Delete Last</button>
        </div>
    </div>
    <script>
        document.addEventListener('DOMContentLoaded', function () {
            const textarea = document.getElementById('sports-textarea');
            const addSaveButton = document.getElementById('sports-add-save-button');
            const deleteButton = document.getElementById('sports-delete-last-button');
            const inputWrapper = document.getElementById('sports-input-wrapper');
            const sportsInput = document.getElementById('sports-input');
            const warningMessage = document.getElementById('sports-warning-message');
            let sportsCounter = 1; 

            function toggleDeleteButton() {
                if (textarea.value.trim() === '') {
                    deleteButton.style.display = 'none';
                } else {
                    deleteButton.style.display = 'block';
                }
            }

            function showWarning(message) {
                warningMessage.textContent = message;
                warningMessage.style.display = 'block';
            }

            function hideWarning() {
                warningMessage.textContent = '';
                warningMessage.style.display = 'none';
            }

            function autoGrowTextarea() {
                textarea.style.height = 'auto'; 
                textarea.style.height = textarea.scrollHeight + 'px'; // Corrected height adjustment
            }

            addSaveButton.addEventListener('click', function () {
                hideWarning(); 
                if (addSaveButton.textContent === 'Add') {
                    inputWrapper.style.display = 'block';
                    sportsInput.focus();
                    addSaveButton.textContent = 'Save';
                } else if (addSaveButton.textContent === 'Save') {
                    const newSport = sportsInput.value.trim();
                    if (newSport) {
                        const currentValue = textarea.value;
                        const newSportText = `Sport ${sportsCounter}: ${newSport}`;
                        textarea.value = currentValue
                            ? currentValue + '\n' + newSportText
                            : newSportText;
                        sportsInput.value = ''; 
                        sportsCounter++; 
                        inputWrapper.style.display = 'none'; 
                        addSaveButton.textContent = 'Add'; 
                        toggleDeleteButton(); 
                        autoGrowTextarea(); // Adjust height after adding new content
                    } else {
                        showWarning("Please enter a sport before saving.");
                    }
                }
            });

            deleteButton.addEventListener('click', function () {
                hideWarning(); 
                const sports = textarea.value.split('\n');
                if (sports.length === 0 || textarea.value.trim() === '') {
                    showWarning("No sports to delete.");
                    return;
                }
                sports.pop(); 
                textarea.value = sports.join('\n'); 
                sportsCounter--; 
                toggleDeleteButton(); 
                autoGrowTextarea(); // Adjust height after deleting content
            });

            textarea.addEventListener('input', autoGrowTextarea); // Adjust height on user input

            toggleDeleteButton();
            autoGrowTextarea(); // Initialize height adjustment
        });
    </script>
    <?php
    return ob_get_clean();
}
add_shortcode('sports_field', 'sports_textarea_field');


function positions_textarea_field() {
    ob_start();
    ?>
    <div id="positions-wrapper" class="text-fild">
        <textarea id="positions-textarea" name="Positions" class="auto-height" placeholder="Positions will be shown here..." readonly></textarea>
        <div id="positions-input-wrapper" class="add-text-input" style="display: none;">
            <input type="text" id="positions-input" placeholder="Enter position here..." />
        </div>
        <p id="positions-warning-message" style="color: red; display: none; margin-top: 10px;"></p> <!-- Warning message -->
        <div class="add-buttons">
            <button type="button" id="positions-add-save-button">Add</button>
            <button type="button" id="positions-delete-last-button" style="display: none;">Delete Last</button>
        </div>
    </div>
    <script>
        document.addEventListener('DOMContentLoaded', function () {
            const textarea = document.getElementById('positions-textarea');
            const addSaveButton = document.getElementById('positions-add-save-button');
            const deleteButton = document.getElementById('positions-delete-last-button');
            const inputWrapper = document.getElementById('positions-input-wrapper');
            const positionInput = document.getElementById('positions-input');
            const warningMessage = document.getElementById('positions-warning-message');
            let positionCounter = 1; 

            function toggleDeleteButton() {
                if (textarea.value.trim() === '') {
                    deleteButton.style.display = 'none';
                } else {
                    deleteButton.style.display = 'block';
                }
            }

            function showWarning(message) {
                warningMessage.textContent = message;
                warningMessage.style.display = 'block';
            }

            function hideWarning() {
                warningMessage.textContent = '';
                warningMessage.style.display = 'none';
            }

            function autoGrowTextarea() {
                textarea.style.height = 'auto'; // Reset height to calculate new scrollHeight
                textarea.style.height = textarea.scrollHeight + 'px';
            }

            addSaveButton.addEventListener('click', function () {
                hideWarning(); 
                if (addSaveButton.textContent === 'Add') {
                    inputWrapper.style.display = 'block';
                    positionInput.focus();
                    addSaveButton.textContent = 'Save';
                } else if (addSaveButton.textContent === 'Save') {
                    const newPosition = positionInput.value.trim();
                    if (newPosition) {
                        const currentValue = textarea.value;
                        const newPositionText = `Position ${positionCounter}: ${newPosition}`;
                        textarea.value = currentValue
                            ? currentValue + '\n' + newPositionText
                            : newPositionText;
                        positionInput.value = ''; 
                        positionCounter++; 
                        inputWrapper.style.display = 'none'; 
                        addSaveButton.textContent = 'Add'; 
                        toggleDeleteButton(); 
                        autoGrowTextarea(); // Adjust height after adding new content
                    } else {
                        showWarning("Please enter a position before saving.");
                    }
                }
            });

            deleteButton.addEventListener('click', function () {
                hideWarning(); 
                const positions = textarea.value.split('\n');
                if (positions.length === 0 || textarea.value.trim() === '') {
                    showWarning("No positions to delete.");
                    return;
                }
                positions.pop(); 
                textarea.value = positions.join('\n'); 
                positionCounter--; 
                toggleDeleteButton(); 
                autoGrowTextarea(); // Adjust height after deleting content
            });

            textarea.addEventListener('input', autoGrowTextarea); // Adjust height on user input

            toggleDeleteButton();
            autoGrowTextarea(); // Initialize height adjustment
        });
    </script>
    <?php
    return ob_get_clean();
}
add_shortcode('positions_field', 'positions_textarea_field');

function stats_textarea_field() {
    ob_start();
    ?>
    <div id="stats-wrapper" class="text-fild">
        <textarea id="stats-textarea" name="Stats" placeholder="Stats will be shown here..." readonly></textarea>
        <div id="input-wrapper" class="add-text-input" style="display: none;">
            <input type="text" id="stats-input" placeholder="Enter stats here..." />
        </div>
        <p id="warning-message" style="color: #fff; display: none; margin-top: 10px;"></p> <!-- Warning message -->
        <div class="add-buttons">
            <button type="button" id="add-save-stats">Add</button>
            <button type="button" id="delete-last-stats" style="display: none;">Delete Last</button>
        </div>
    </div>
    <script>
        document.addEventListener('DOMContentLoaded', function () {
            const textarea = document.getElementById('stats-textarea');
            const addSaveButton = document.getElementById('add-save-stats');
            const deleteButton = document.getElementById('delete-last-stats');
            const inputWrapper = document.getElementById('input-wrapper');
            const statsInput = document.getElementById('stats-input');
            const warningMessage = document.getElementById('warning-message');
            let statsCounter = 1; 
            
            function toggleDeleteButton() {
                if (textarea.value.trim() === '') {
                    deleteButton.style.display = 'none';
                } else {
                    deleteButton.style.display = 'block';
                }
            }

            function showWarning(message) {
                warningMessage.textContent = message;
                warningMessage.style.display = 'block';
            }

            function hideWarning() {
                warningMessage.textContent = '';
                warningMessage.style.display = 'none';
            }

            function autoGrowTextarea() {
                textarea.style.height = 'auto'; // Reset height to calculate new scrollHeight
                textarea.style.height = textarea.scrollHeight + 'px';
            }

            addSaveButton.addEventListener('click', function () {
                hideWarning(); 
                if (addSaveButton.textContent === 'Add') {
                    inputWrapper.style.display = 'block';
                    statsInput.focus();
                    addSaveButton.textContent = 'Save';
                } else if (addSaveButton.textContent === 'Save') {
                    const newStats = statsInput.value.trim();
                    if (newStats) {
                        const currentValue = textarea.value;
                        const newStatsText = `Stats ${statsCounter}: ${newStats}`;
                        textarea.value = currentValue
                            ? currentValue + '\n' + newStatsText
                            : newStatsText;
                        statsInput.value = ''; 
                        statsCounter++; 
                        inputWrapper.style.display = 'none'; 
                        addSaveButton.textContent = 'Add'; 
                        toggleDeleteButton(); 
                        autoGrowTextarea(); // Adjust height after adding new content
                    } else {
                        showWarning("Please enter stats before saving.");
                    }
                }
            });

            deleteButton.addEventListener('click', function () {
                hideWarning(); 
                const stats = textarea.value.split('\n');
                if (stats.length === 0 || textarea.value.trim() === '') {
                    showWarning("No stats to delete.");
                    return;
                }
                stats.pop(); 
                textarea.value = stats.join('\n'); 
                statsCounter--; 
                toggleDeleteButton(); 
                autoGrowTextarea(); // Adjust height after deleting content
            });

            textarea.addEventListener('input', autoGrowTextarea); // Adjust height on user input

            toggleDeleteButton();
            autoGrowTextarea(); // Initialize height adjustment
        });
    </script>
    <?php
    return ob_get_clean();
}
add_shortcode('stats_field', 'stats_textarea_field');

function team_level_club_affiliation_field() {
    ob_start();
    ?>
    <div id="team-level-wrapper" class="text-fild">
        <textarea id="team-level-textarea" name="Team-club" class="auto-height" placeholder="Team Level & Club Affiliation will be shown here..." readonly></textarea>
        <div id="team-level-input-wrapper" class="add-text-input" style="display: none;">
            <input type="text" id="team-level-input" placeholder="Enter team level or club affiliation here..." />
        </div>
        <p id="team-level-warning-message" style="color: green; display: none; margin-top: 10px;"></p>
        <div class="add-buttons">
            <button type="button" id="team-level-add-save-button">Add</button>
            <button type="button" id="team-level-delete-last-button" style="display: none;">Delete Last</button>
        </div>
    </div>
    <script>
        document.addEventListener('DOMContentLoaded', function () {
            const textarea = document.getElementById('team-level-textarea');
            const addSaveButton = document.getElementById('team-level-add-save-button');
            const deleteButton = document.getElementById('team-level-delete-last-button');
            const inputWrapper = document.getElementById('team-level-input-wrapper');
            const teamLevelInput = document.getElementById('team-level-input');
            const warningMessage = document.getElementById('team-level-warning-message');

            function adjustTextareaHeight() {
                // Adjust the height of the textarea based on its scrollHeight
                textarea.style.height = 'auto'; // Reset height first
                textarea.style.height = textarea.scrollHeight + 'px'; // Set height to scrollHeight
            }

            function toggleDeleteButton() {
                deleteButton.style.display = textarea.value.trim() === '' ? 'none' : 'block';
            }

            function showWarning(message) {
                warningMessage.textContent = message;
                warningMessage.style.display = 'block';
            }

            function hideWarning() {
                warningMessage.style.display = 'none';
            }

            addSaveButton.addEventListener('click', function () {
                hideWarning();
                if (addSaveButton.textContent === 'Add') {
                    inputWrapper.style.display = 'block';
                    teamLevelInput.focus();
                    addSaveButton.textContent = 'Save';
                } else if (addSaveButton.textContent === 'Save') {
                    const newEntry = teamLevelInput.value.trim();
                    if (newEntry) {
                        const currentValue = textarea.value;
                        const newText = newEntry; // Correct string interpolation
                        textarea.value = currentValue ? currentValue + "\n" + newText : newText; // Concatenate new text
                        teamLevelInput.value = '';
                        inputWrapper.style.display = 'none';
                        addSaveButton.textContent = 'Add';
                        toggleDeleteButton();
                        adjustTextareaHeight(); // Adjust height after adding new content
                    } else {
                        showWarning("Please enter a value before saving.");
                    }
                }
            });

            deleteButton.addEventListener('click', function () {
                hideWarning();
                const entries = textarea.value.split('\n');
                if (entries.length === 0 || textarea.value.trim() === '') {
                    showWarning("No entries to delete.");
                    return;
                }
                entries.pop();
                textarea.value = entries.join('\n');
                toggleDeleteButton();
                adjustTextareaHeight(); // Adjust height after deleting content
            });

            // Adjust height on initial page load and when textarea content changes
            adjustTextareaHeight();
            textarea.addEventListener('input', adjustTextareaHeight);

            toggleDeleteButton();
        });
    </script>
    <?php
    return ob_get_clean();
}
add_shortcode('team_level_club_field', 'team_level_club_affiliation_field');

function player_number_field() {
    ob_start();
    ?>
    <div id="player-number-wrapper" class="text-fild">
        <textarea id="player-number-textarea" name="Player-Number" class="auto-height" placeholder="Player Numbers will be shown here..." readonly></textarea>
        <div id="player-number-input-wrapper" class="add-text-input" style="display: none;">
            <input type="text" id="player-number-input" placeholder="Enter player number here..." />
        </div>
        <p id="player-number-warning-message" style="color: blue; display: none; margin-top: 10px;"></p>
        <div class="add-buttons">
            <button type="button" id="player-number-add-save-button">Add</button>
            <button type="button" id="player-number-delete-last-button" style="display: none;">Delete Last</button>
        </div>
    </div>
    <script>
        document.addEventListener('DOMContentLoaded', function () {
            const textarea = document.getElementById('player-number-textarea');
            const addSaveButton = document.getElementById('player-number-add-save-button');
            const deleteButton = document.getElementById('player-number-delete-last-button');
            const inputWrapper = document.getElementById('player-number-input-wrapper');
            const playerNumberInput = document.getElementById('player-number-input');
            const warningMessage = document.getElementById('player-number-warning-message');

            function adjustTextareaHeight() {
                // Adjust the height of the textarea based on its scrollHeight
                textarea.style.height = 'auto'; // Reset height first
                textarea.style.height = textarea.scrollHeight + 'px'; // Set height to scrollHeight
            }

            function toggleDeleteButton() {
                deleteButton.style.display = textarea.value.trim() === '' ? 'none' : 'block';
            }

            function showWarning(message) {
                warningMessage.textContent = message;
                warningMessage.style.display = 'block';
            }

            function hideWarning() {
                warningMessage.style.display = 'none';
            }

            addSaveButton.addEventListener('click', function () {
                hideWarning();
                if (addSaveButton.textContent === 'Add') {
                    inputWrapper.style.display = 'block';
                    playerNumberInput.focus();
                    addSaveButton.textContent = 'Save';
                } else if (addSaveButton.textContent === 'Save') {
                    const newEntry = playerNumberInput.value.trim();
                    if (newEntry) {
                        const currentValue = textarea.value;
                        const newText = newEntry; // Correct string concatenation
                        textarea.value = currentValue ? currentValue + "\n" + newText : newText; // Concatenate new text
                        playerNumberInput.value = '';
                        inputWrapper.style.display = 'none';
                        addSaveButton.textContent = 'Add';
                        toggleDeleteButton();
                        adjustTextareaHeight(); // Adjust height after adding new content
                    } else {
                        showWarning("Please enter a value before saving.");
                    }
                }
            });

            deleteButton.addEventListener('click', function () {
                hideWarning();
                const entries = textarea.value.split('\n');
                if (entries.length === 0 || textarea.value.trim() === '') {
                    showWarning("No entries to delete.");
                    return;
                }
                entries.pop();
                textarea.value = entries.join('\n');
                toggleDeleteButton();
                adjustTextareaHeight(); // Adjust height after deleting content
            });

            // Adjust height on initial page load and when textarea content changes
            adjustTextareaHeight();
            textarea.addEventListener('input', adjustTextareaHeight);

            toggleDeleteButton();
        });
    </script>
    <?php
    return ob_get_clean();
}
add_shortcode('player_number_field', 'player_number_field');

function awards_achievements_field() {
    ob_start();
    ?>
    <div id="awards-achievements-wrapper" class="text-fild">
        <textarea id="awards-achievements-textarea" name="Awards-Achievements" class="auto-height" placeholder="Awards and Achievements will be shown here..." readonly></textarea>
        <div id="awards-achievements-input-wrapper" class="add-text-input" style="display: none;">
            <input type="text" id="awards-achievements-input" placeholder="Enter award or achievement here..." />
        </div>
        <p id="awards-achievements-warning-message" style="color: purple; display: none; margin-top: 10px;"></p>
        <div class="add-buttons">
            <button type="button" id="awards-achievements-add-save-button">Add</button>
            <button type="button" id="awards-achievements-delete-last-button" style="display: none;">Delete Last</button>
        </div>
    </div>
    <script>
        document.addEventListener('DOMContentLoaded', function () {
            const textarea = document.getElementById('awards-achievements-textarea');
            const addSaveButton = document.getElementById('awards-achievements-add-save-button');
            const deleteButton = document.getElementById('awards-achievements-delete-last-button');
            const inputWrapper = document.getElementById('awards-achievements-input-wrapper');
            const awardsAchievementsInput = document.getElementById('awards-achievements-input');
            const warningMessage = document.getElementById('awards-achievements-warning-message');

            function adjustTextareaHeight() {
                // Adjust the height of the textarea based on its scrollHeight
                textarea.style.height = 'auto'; // Reset height first
                textarea.style.height = textarea.scrollHeight + 'px'; // Set height to scrollHeight
            }

            function toggleDeleteButton() {
                deleteButton.style.display = textarea.value.trim() === '' ? 'none' : 'block';
            }

            function showWarning(message) {
                warningMessage.textContent = message;
                warningMessage.style.display = 'block';
            }

            function hideWarning() {
                warningMessage.style.display = 'none';
            }

            addSaveButton.addEventListener('click', function () {
                hideWarning();
                if (addSaveButton.textContent === 'Add') {
                    inputWrapper.style.display = 'block';
                    awardsAchievementsInput.focus();
                    addSaveButton.textContent = 'Save';
                } else if (addSaveButton.textContent === 'Save') {
                    const newEntry = awardsAchievementsInput.value.trim();
                    if (newEntry) {
                        const currentValue = textarea.value;
                        const newText = newEntry;
                        textarea.value = currentValue ? currentValue + "\n" + newText : newText; // Corrected concatenation
                        awardsAchievementsInput.value = '';
                        inputWrapper.style.display = 'none';
                        addSaveButton.textContent = 'Add';
                        toggleDeleteButton();
                        adjustTextareaHeight(); // Adjust height after adding new content
                    } else {
                        showWarning("Please enter a value before saving.");
                    }
                }
            });

            deleteButton.addEventListener('click', function () {
                hideWarning();
                const entries = textarea.value.split('\n');
                if (entries.length === 0 || textarea.value.trim() === '') {
                    showWarning("No entries to delete.");
                    return;
                }
                entries.pop();
                textarea.value = entries.join('\n');
                toggleDeleteButton();
                adjustTextareaHeight(); // Adjust height after deleting content
            });

            // Adjust height on initial page load and when textarea content changes
            adjustTextareaHeight();
            textarea.addEventListener('input', adjustTextareaHeight);

            toggleDeleteButton();
        });
    </script>
    <?php
    return ob_get_clean();
}
add_shortcode('awards_achievements_field', 'awards_achievements_field');


<script>
document.addEventListener('DOMContentLoaded', () => {
    const fileInput = document.querySelector('input[type="file"]');
    if (fileInput) {
        fileInput.addEventListener('change', (e) => {
            let file = e.target.files[0];

            if (file) {
                let split_name = file.name.split('.');
                let randomString = Math.random().toString(36).substring(2, 8);
                let name = `playerprofileimg${randomString}.` + split_name[split_name.length - 1];
                let blob = file.slice(0, file.size, file.type);
                let new_file = new File([blob], name, { type: file.type });
                const data_transfer = new DataTransfer();
                data_transfer.items.add(new_file);
                e.target.files = data_transfer.files;
            }
        });
    } else {
        console.error("No input[type='file'] found in the DOM.");
    }
});


</script>
<?php
if (!defined('ABSPATH')) {
    exit;
}

$player = $players_data[$player_id];

get_header(); ?>


<style>
header#masthead {
  display: none;
}

footer {
  display: none;
}
</style>

<div class="back-button">
    <a href="https://sportmeid.com/view-profile/"><span><img
                src="https://sportmeid.com/wp-content/uploads/2024/12/arrow.svg"></span> Back</a>
</div>
<div class="player-detail">
    <div class="player-main-img">
            <div class="player-wrapper-img">
        <img src="<?php echo esc_url($player['file_url']); ?>" alt="<?php echo esc_attr($player['name']); ?>" />
     </div>
    </div>
    <div class="profile-container">
        <h1>Player Profile</h1>
        <table>
            <tr>
                <td>Full Name:</td>
                <td><?php echo esc_html(strtolower($player['name'])); ?></td>
            </tr>
            <tr>
                <td>Sport:</td>
                <td><?php echo nl2br(esc_html(strtolower($player['sport']))); ?></td>
            </tr>
            <tr>
                <td>Email Address:</td>
                <td><?php echo esc_html(strtolower($player['email_address'])); ?></td>
            </tr>
             <tr>
                <td>Phone Number:</td>
                <td><?php echo esc_html(strtolower($player['phone_Number'])); ?></td>
            </tr>
            <tr>
                <td>Nickname:</td>
                <td><?php echo esc_html(strtolower($player['nick_name'])); ?></td>
            </tr>
            <tr>
                <td>Player Number:</td>
                <td><?php echo nl2br(esc_html(strtolower($player['player_number']))); ?></td>
            </tr>
            <tr>
                <td>Graduation Year:</td>
                <td><?php echo esc_html(strtolower($player['graduation_year'])); ?></td>
            </tr>
            <tr>
                <td>Team Level & Team/Club Affiliation:</td>
                <td><?php echo nl2br(esc_html(strtolower($player['team_club']))); ?></td>
            </tr>
            <tr>
                <td>Years Playing/Experience:</td>
                <td><?php echo esc_html(strtolower($player['years_playing'])); ?></td>
            </tr>
            <tr>
                <td>Dominant Hand:</td>
                <td><?php echo esc_html($player['dominant_hand']); ?></td>
            </tr>
            <tr>
                <td>Stats:</td>
                <td><?php echo nl2br(esc_html(strtolower($player['stats']))); ?></td>
            </tr>
            <tr>
                <td>Positions:</td>
                <td><?php echo nl2br(esc_html(strtolower($player['positions']))); ?></td>
            </tr>
            <tr>
                <td>Sports Awards/Achievements:</td>
                <td><?php echo nl2br(esc_html(strtolower($player['awards_achievements']))); ?></td>
            </tr>
            <tr>
                <td>Social Media Links:</td>
                <td class="social-media">
                    <a href="<?php echo esc_html(strtolower($player['tiktok_link'])); ?>"><img src="https://sportmeid.com/wp-content/uploads/2024/12/tiktok.svg"></a>
                    <a href="<?php echo esc_html(strtolower($player['instagram_link'])); ?>"><img src="https://sportmeid.com/wp-content/uploads/2024/12/instagram.svg"></a>
                    <a href="<?php echo esc_html(strtolower($player['twitter_link'])); ?>"><img src="https://sportmeid.com/wp-content/uploads/2024/12/twitter.svg"></a>
                    <a href="<?php echo esc_html(strtolower($player['youtube_link'])); ?>"><img src="https://sportmeid.com/wp-content/uploads/2024/12/youtube.svg"></a> 
                    <a href="<?php echo esc_html(strtolower($player['imlca_link'])); ?>"><img src="https://sportmeid.mmcgbl.ae/wp-content/uploads/2024/12/imlca-icon.png"></a>   
                </td>
            </tr>
        </table>
    </div>
</div>
<script>
  document.addEventListener("DOMContentLoaded", () => {
    const socialLinks = document.querySelectorAll("td.social-media a");

    socialLinks.forEach(link => {
        if (!link.getAttribute("href").trim()) {
            link.style.display = "none";
        }
    });
});
</script>


function delete_players_layout_data() {
    // Delete the 'players_layout' option from the database
    delete_option('players_layout');
}

function remove_players_shortcode() {
    // Replace 'your_shortcode_name' with the actual shortcode name
    remove_shortcode('your_shortcode_name');
}

add_action('init', 'delete_players_layout_data');
add_action('init', 'remove_players_shortcode');

  
function remove_specific_player_data() {
    // The specific player ID to remove
    $player_id_to_remove = '676c0c99aab75';

    // Retrieve the existing data
    $players_data = get_option('players_data', []);
    $players_layout = get_option('players_layout', []);

    // Remove the player data with the specific ID
    if (isset($players_data[$player_id_to_remove])) {
        unset($players_data[$player_id_to_remove]);
        update_option('players_data', $players_data);
    }

    // Filter the players layout to remove the entry with the specific ID
    if (!empty($players_layout)) {
        $players_layout = array_filter($players_layout, function ($entry) use ($player_id_to_remove) {
            return strpos($entry, $player_id_to_remove) === false;
        });
        update_option('players_layout', $players_layout);
    }
}

// Hook the function to an admin action
add_action('admin_init', 'remove_specific_player_data');
SELECT RIGHT(Email, LEN(Email) - CHARINDEX('@', email)) as emaildomain ,
COUNT(Email) as EmailCount
FROM   [Your data extension]
WHERE  LEN(Email) > 0
GROUP BY RIGHT(Email, LEN(Email) - CHARINDEX('@', email))
SELECT
    "v"."Id" AS "ePOS_Variant_Id",
    "v"."ePOS Variant Name" AS "ePOS_Variant_Name",
    "vv"."CRM Record Id" AS "Verification_Record_Id",
    "vv"."Name" AS "Verification_Name",

    CASE
        WHEN "vv"."CRM Record Id" IS NULL THEN 'Create'
        WHEN "v"."Id" IS NULL THEN 'Delete'
        WHEN "v"."ePOS Variant Name" <> "vv"."Name" THEN 'Update'
    END AS "Action"
FROM  "ePOS Variants" AS "v"
FULL OUTER JOIN "ePOS Variant (Zoho Creator-Trees Verification Process)" AS "vv" 
    ON "v"."Id" = "vv"."CRM Record Id"
WHERE
    "vv"."CRM Record Id" IS NULL
    OR "v"."Id" IS NULL
    OR "v"."ePOS Variant Name" <> "vv"."Name"
Extending Classes
One of the powerful features of classes is they can be extended. You can create a new class based on an existing class, and this new class will not only inherit all the properties and methods of the existing class, but you can add new properties and methods to the new class.

This is useful when you have a class that works for most situations, but there are some cases where you need to add new features. Instead of starting from scratch and creating an entirely new class, you can extend the existing class and add the new features. A classic example of this is making a main class called MotorVehicle with properties and methods that are common to all motor vehicles, then extending this class with more specific classes like Car, Truck, and Motorcycle.

Earlier in the course you worked with the Backpack class which has properties and methods that apply to all backpacks. But there's a snag: In my closet I have a hiking backpack with an extra feature that isn't covered by the Backpack class—a hydration pack. For my dataset to be complete, I need the ability to track the hydration capacity of my pack, for obvious reasons. The bigger the hydration capacity, the heavier the pack can potentially get at the start of a hike.

To solve this problem, let's create a new class called HikingBackpack by extending the Backpack class.

Here's the original Backpack class for reference:

class Backpack {
  constructor(
    // Defines parameters:
    name,
    volume,
    color,
    pocketNum,
    strapLengthL,
    strapLengthR,
    lidOpen
  ) {
    // Define properties:
    this.name = name;
    this.volume = volume;
    this.color = color;
    this.pocketNum = pocketNum;
    this.strapLength = {
      left: strapLengthL,
      right: strapLengthR,
    };
    this.lidOpen = lidOpen;
  }
  // Add methods like normal functions:
  toggleLid(lidStatus) {
    this.lidOpen = lidStatus;
  }
  newStrapLength(lengthLeft, lengthRight) {
    this.strapLength.left = lengthLeft;
    this.strapLength.right = lengthRight;
  }
}
To create a new class from an existing one, use the extends keyword followed by the name of the class you want to extend:

class HikingBackpack extends Backpack {}
Next, define all the properties the class needs in the constructor. This includes both the existing properties from the parent class and any new properties you want to add:

class HikingBackpack extends Backpack {
  constructor(
    name,
    volume,
    color,
    pocketNum,
    strapLengthL,
    strapLengthR,
    lidOpen,
    hydrationCapacity
  ) {
    // Initialize the parent class properties
    super(name, volume, color, pocketNum, strapLengthL, strapLengthR, lidOpen);
    // New property specific to HikingBackpack
    this.hydrationCapacity = hydrationCapacity; // Capacity in liters
  }
}
In the above example, you see hydrationCapacity has been added in the constructor. This is the new property specific to the HikingBackpack class. The super() method is used to call the constructor of the parent class and pass in the properties common to both classes. Finally, the new hydrationCapacity property is added.

The new HikingBackpack class can also be extended with new methods. That's done the same way as before:

// Method to check the hydration level.
  checkHydration() {
    if (this.hydrationCapacity > 0) {
      console.log(`You have ${this.hydrationCapacity} liters of water left.`);
    } else {
      console.log("Time to refill your water!");
    }
  }
You can also override methods from the parent class by defining a new method with the same name, calling in the parent method with the super keyword, and then adding new functionality:

toggleLid(lidStatus) {
    super.toggleLid(lidStatus); // Call the parent method
    if (lidStatus) {
      console.log("Your hiking backpack lid is open. Remember to check to make sure the hydration pack is inserted.");
    } else {
      console.log("Your hiking backpack lid is closed. Remember to check to make sure the hydration pack is inserted.");
    }
  }
Here's the full code for the extended HikingBackpack class:

class HikingBackpack extends Backpack {
  constructor(
    name,
    volume,
    color,
    pocketNum,
    strapLengthL,
    strapLengthR,
    lidOpen,
    hydrationCapacity
  ) {
    // Initialize the parent class properties
    super(name, volume, color, pocketNum, strapLengthL, strapLengthR, lidOpen);
    // New property specific to HikingBackpack
    this.hydrationCapacity = hydrationCapacity; // Capacity in liters
  }

  // Method to check the hydration level and alert if it needs refilling
  checkHydration() {
    if (this.hydrationCapacity > 0) {
      console.log(`You have ${this.hydrationCapacity} liters of water left.`);
    } else {
      console.log("Time to refill your water!");
    }
  }

  // Extend or override methods from the parent class if necessary
  // For example, adding extra functionality when the lid is toggled
  toggleLid(lidStatus) {
    super.toggleLid(lidStatus); // Call the parent method
    if (lidStatus) {
      console.log(
        "Your hiking backpack lid is open. Remember to check to make sure the hydration pack is inserted."
      );
    } else {
      console.log(
        "Your hiking backpack lid is closed. Remember to check to make sure the hydration pack is inserted."
      );
    }
  }
}
SELECT InterventionType.*, InterventionLocation.*, InterventionService.* FROM

(SELECT SURef, 
COALESCE([1],0) AS Phone,
COALESCE([2],0) AS [Assessment/Intervention],
COALESCE([3],0) AS Meeting,
COALESCE([4],0) AS Equipment,
COALESCE([5],0) AS [Admin],
COALESCE([6],0) AS Travel,

SUM(
COALESCE([1],0) + 
COALESCE([2],0) + 
COALESCE([3],0) + 
COALESCE([4],0) + 
COALESCE([5],0) + 
COALESCE([6],0)
) AS TotalInterventions
FROM
(
  SELECT SURef, InterventionType
  FROM [BOCClientIndex - SU Interventions]
 
) src
pivot
(
  COUNT(InterventionType)
  for InterventionType in ([1], [2], [3], [4], [5], [6])
) piv
GROUP BY SURef, 
COALESCE([1],0) ,
COALESCE([2],0) ,
COALESCE([3],0) ,
COALESCE([4],0) ,
COALESCE([5],0) ,
COALESCE([6],0) 
) AS InterventionType

INNER JOIN

(SELECT SURef, 
COALESCE([1],0) AS TeamBase,
COALESCE([2],0) AS [FamilyHomeRes],
COALESCE([3],0) AS Preschool,
COALESCE([4],0) AS School,
COALESCE([5],0) AS [DayService],
COALESCE([6],0) AS RespiteFamilyHomeShare,
COALESCE([7],0) AS [Other],
COALESCE([8],0) AS TeleHealth,


SUM(
COALESCE([1],0) + 
COALESCE([2],0) + 
COALESCE([3],0) + 
COALESCE([4],0) + 
COALESCE([5],0) + 
COALESCE([6],0) +
COALESCE([7],0) + 
COALESCE([8],0) 

) AS TotalInterventions

from 
(
  SELECT SURef, InterventionLocation
  FROM [BOCClientIndex - SU Interventions]
 
) src
pivot
(
  COUNT(InterventionLocation)
  FOR InterventionLocation in ([1], [2], [3], [4], [5], [6], [7], [8])
) piv
GROUP BY SURef, 
COALESCE([1],0) ,
COALESCE([2],0) ,
COALESCE([3],0) ,
COALESCE([4],0) ,
COALESCE([5],0) ,
COALESCE([6],0) ,
COALESCE([7],0) ,
COALESCE([8],0) 
) As InterventionLocation 

ON InterventionType.SURef = InterventionLocation.SURef

INNER JOIN

(
SELECT SURef, 
COALESCE([1],0) AS CommunityNursing,
COALESCE([2],0) AS OccupationalTherapy,
COALESCE([3],0) AS Paediatrics,
COALESCE([4],0) AS Physiotherapy,
COALESCE([5],0) AS Psychology,
COALESCE([6],0) AS PreSchoolLiaison,
COALESCE([7],0) AS SocialWork,
COALESCE([8],0) AS SpeechLanguage,
COALESCE([9],0) AS Psychiatry,
COALESCE([10],0) AS ClinicalNurse,
COALESCE([11],0) AS BehaviourSupport,
COALESCE([12],0) AS CommunityLinkWorker,
COALESCE([13],0) AS Psychotherapy,
COALESCE([14],0) AS AdvancedNursePractitioner,
COALESCE([15],0) AS AssistiveTechnology,

SUM(
COALESCE([1],0) + 
COALESCE([2],0) + 
COALESCE([3],0) + 
COALESCE([4],0) + 
COALESCE([5],0) + 
COALESCE([6],0) +
COALESCE([7],0) + 
COALESCE([8],0) +
COALESCE([9],0) + 
COALESCE([10],0) + 
COALESCE([11],0) + 
COALESCE([12],0) + 
COALESCE([13],0) + 
COALESCE([14],0) +
COALESCE([15],0) 

) AS TotalInterventions

from 
(
  select SURef, [Service]
  from [BOCClientIndex - SU Interventions]
 
) src
pivot
(
  COUNT([Service])
  FOR [Service] in ([1], [2], [3], [4], [5], [6], [7], [8], [9], [10], [11], [12], [13], [14], [15])
) piv
GROUP BY SURef, 
COALESCE([1],0) ,
COALESCE([2],0) ,
COALESCE([3],0) ,
COALESCE([4],0) ,
COALESCE([5],0) ,
COALESCE([6],0) ,
COALESCE([7],0) ,
COALESCE([8],0) ,
COALESCE([9],0) ,
COALESCE([10],0) ,
COALESCE([11],0) ,
COALESCE([12],0) ,
COALESCE([13],0) ,
COALESCE([14],0) ,
COALESCE([15],0) ) AS InterventionService

ON InterventionType.SURef = InterventionService.SURef


ORDER BY InterventionLocation.SURef

<script>
    document.addEventListener("DOMContentLoaded", function () {
  const marqueeElement = document.querySelector(".marquee");
  const text = marqueeElement.textContent; 
  const speed = 200; 
  marqueeElement.textContent = ""; // Clear the text initially
  let index = 0;

  function typeWriter() {
    if (index < text.length) {
      marqueeElement.textContent += text.charAt(index);
      index++;
      setTimeout(typeWriter, speed);
    }
  }

  typeWriter();
});
</script>
1a opção:
if(!parentCaseIds.isEmpty()) {
    for(Id parentCaseId : parentCaseIds) {
        Case objCase = new Case();
        objCase.Id = parentCaseId;
        objCase.Status = 'Concluído';
        casesToUpdate.add(objCase);
    }
}
---------------------------------------
2a opção:
if(!parentCaseIds.isEmpty()) {
    for(Id parentCaseId : parentCaseIds) {
        casesToUpdate.add(new Case(Id=parentCaseId, Status='Concluído'));
    }
}
--------------------------------------- 
jQuery(document).ready(function($) {
    // Function to show the loader
    function showLoader() {
        document.getElementById('page-loader').style.display = 'flex'; // Ensure the loader is shown
    }
  
      // Expose the showLoader function globally
    window.showLoader = showLoader;

    // Function to hide the loader - might be used elsewhere or for initial page load
    function hideLoader() {
        document.getElementById('page-loader').style.display = 'none'; // Ensure the loader is hidden
    }
    // Function to initialize Cloudinary widget and handle upload success
    function setupCloudinaryWidget(editButtonId, urlFieldSelector, submitButtonSelector) {
        var widget = cloudinary.createUploadWidget({
            cloudName: "drt2tlz1j",
            uploadPreset: "giftWidget",
            show_powered_by: false,
            sources: ["local", "image_search", "url"],
            defaultSource: "local",
            googleApiKey: "AIzaSyAhy7PJXH7_3t9qbIiczK5nZHsaUOGEFMM",
            searchBySites: ["all", "unsplash.com", "pexels.com", "vecteezy.com", "forestnation.com/net/"],
            showAdvancedOptions: false,
            cropping: true,
            croppingAspectRatio: 9 / 16,
            croppingShowBackButton: true,
            multiple: false,
            folder: "gs-uploads",
            clientAllowedFormats: ["image/*", "video/*", "mp4", "mov", "webm", "webp", "gif", "jpg", "png", "svg"],
            showCompletedButton: true,
            styles: {
                palette: {
                    window: "#00000099",
                    windowBorder: "#FFFFFF",
                    tabIcon: "#009A42",
                    menuIcons: "#FFFFFF",
                    textDark: "#FFFFFF",
                    textLight: "#FFFFFF",
                    link: "#009A42",
                    action: "#009A42",
                    inactiveTabIcon: "#FFFFFF",
                    error: "#FA9B32",
                    inProgress: "#009A42",
                    complete: "#009A42",
                    sourceBg: "#00000059"
                },
                fonts: {
                    default: null,
                    "'Montserrat', sans-serif": {
                        url: "https://fonts.googleapis.com/css?family=Montserrat:400,700",
                        active: true
                    }
            }
            }
        }, (error, result) => {
            if (!error && result && result.event === "success") {
                console.log('Done! Here is the image info: ', result.info);
                var uploadedUrl = result.info.secure_url;
                
                // Fill the ACF URL field with the uploaded URL
                $(urlFieldSelector).val(uploadedUrl);
							
                // Show the loader before submitting the form
                showLoader();
                
                // Submit the ACF form
                $(submitButtonSelector).click();
            }
        });

        // Attach click event to the edit button to open the widget
        $(editButtonId).on('click', function() {
            widget.open();
        });
    }

    // Setup Cloudinary widget for each edit button, URL field, and submit button
    setupCloudinaryWidget("#slide1edit", "input[name='acf[field_65c630a53001b]']", "button[name='acf[field_65c630e33001f]']");
    setupCloudinaryWidget("#slide2edit", "input[name='acf[field_65c630c93001c]']", "button[name='acf[field_65c6311130020]']");
    setupCloudinaryWidget("#slide3edit", "input[name='acf[field_65c630cf3001d]']", "button[name='acf[field_65c6311930021]']");
    setupCloudinaryWidget("#slide4edit", "input[name='acf[field_65c630d63001e]']", "button[name='acf[field_65c6312330022]']");
});
const cloudinarySettings = {
        cloudName: "drt2tlz1j",
        uploadPreset: "giftWidget",
        show_powered_by: false,
        sources: ["local", "image_search"],
        defaultSource: "local",
        googleApiKey: "AIzaSyAhy7PJXH7_3t9qbIiczK5nZHsaUOGEFMM",
        searchBySites: ["all", "unsplash.com", "pexels.com", "vecteezy.com"],
        showAdvancedOptions: false,
        cropping: true,
        croppingShowBackButton: true,
        multiple: false,
        folder: "gs-uploads",
        clientAllowedFormats: ["webp", "gif", "jpg", "png", "svg"],
        showCompletedButton: true,
        styles: {
            palette: {
                window: "#00000099",
                windowBorder: "#FFFFFF",
                tabIcon: "#009A42",
                menuIcons: "#FFFFFF",
                textDark: "#FFFFFF",
                textLight: "#FFFFFF",
                link: "#009A42",
                action: "#009A42",
                inactiveTabIcon: "#FFFFFF",
                error: "#FA9B32",
                inProgress: "#009A42",
                complete: "#009A42",
                sourceBg: "#00000059"
            },
            fonts: {
                default: null,
                "'Montserrat', sans-serif": {
                    url: "https://fonts.googleapis.com/css?family=Montserrat:400,700",
                    active: true
                }
            }
        }
    };
Concurrency: A single chef multitasking between several dishes.
Parallelism: Multiple chefs working on separate dishes simultaneously.

1. Using Promises for Concurrency
Promises are one of the simplest ways to achieve concurrency in TypeScript.

const fetchData = (url: string) => {
  return new Promise<string>((resolve) => {
    setTimeout(() => resolve(`Data from ${url}`), 1000);
  });
};

const main = async () => {
  console.log('Fetching data concurrently...');
  const data1 = fetchData('https://api.example.com/1');
  const data2 = fetchData('https://api.example.com/2');

  const results = await Promise.all([data1, data2]);
  console.log(results); // ["Data from https://api.example.com/1", "Data from https://api.example.com/2"]
};
main();

Explanation:
Promise.all allows both fetch operations to run concurrently, saving time. 2. Concurrency with Async/Await async/await simplifies promise chaining while maintaining the asynchronous nature.

async function task1() {
  console.log("Task 1 started");
  await new Promise((resolve) => setTimeout(resolve, 2000));
  console.log("Task 1 completed");
}

async function task2() {
  console.log("Task 2 started");
  await new Promise((resolve) => setTimeout(resolve, 1000));
  console.log("Task 2 completed");
}

async function main() {
  console.log("Concurrent execution...");
  await Promise.all([task1(), task2()]);
  console.log("All tasks completed");
}
main();

Parallelism in TypeScript
While JavaScript doesn’t natively support multi-threading, Web Workers and Node.js Worker Threads enable parallelism. These features leverage separate threads to handle computationally expensive tasks.

1. Web Workers for Parallelism
In browser environments, Web Workers execute scripts in a separate thread.

// worker.ts
addEventListener('message', (event) => {
  const result = event.data.map((num: number) => num * 2);
  postMessage(result);
});
// main.ts
const worker = new Worker('worker.js');

worker.onmessage = (event) => {
  console.log('Result from worker:', event.data);
};

worker.postMessage([1, 2, 3, 4]);


2. Node.js Worker Threads
For server-side applications, Node.js provides worker_threads.

// worker.js
const { parentPort } = require('worker_threads');
parentPort.on('message', (data) => {
  const result = data.map((num) => num * 2);
  parentPort.postMessage(result);
});
// main.js
const { Worker } = require('worker_threads');

const worker = new Worker('./worker.js');
worker.on('message', (result) => {
  console.log('Worker result:', result);
});
worker.postMessage([1, 2, 3, 4]);
Patterns for Effective Concurrency and Parallelism
1. Task Queues for Managing Concurrency
When dealing with many tasks, task queues ensure controlled execution.

class TaskQueue {
  private queue: (() => Promise<void>)[] = [];
  private running = 0;
  constructor(private concurrencyLimit: number) {}

  enqueue(task: () => Promise<void>) {
    this.queue.push(task);
    this.run();
  }

  private async run() {
    if (this.running >= this.concurrencyLimit || this.queue.length === 0) return;

    this.running++;
    const task = this.queue.shift();
    if (task) await task();
    this.running--;
    this.run();
  }
}

// Usage
const queue = new TaskQueue(3);
for (let i = 0; i < 10; i++) {
  queue.enqueue(async () => {
    console.log(`Task ${i} started`);
    await new Promise((resolve) => setTimeout(resolve, 1000));
    console.log(`Task ${i} completed`);
  });
}

2. Load Balancing with Worker Pools
Worker pools efficiently distribute tasks across multiple workers.

import { Worker, isMainThread, parentPort, workerData } from 'worker_threads';

if (isMainThread) {
  const workers = Array.from({ length: 4 }, () => new Worker(__filename));
  const tasks = [10, 20, 30, 40];
  workers.forEach((worker, index) => {
    worker.postMessage(tasks[index]);
    worker.on('message', (result) => console.log('Result:', result));
  });
} else {
  parentPort.on('message', (task) => {
    parentPort.postMessage(task * 2);
  });
}
Challenges and Solutions
1. Debugging Asynchronous Code

Use tools like async_hooks in Node.js to trace async operations.
Use IDEs that support debugging async/await code.
2. Error Handling

Wrap promises in try/catch blocks or use .catch() with Promise.all.
3. Race Conditions
Avoid shared state or use locking mechanisms.

Best Practices for Concurrency and Parallelism
1. Prioritize Asynchronous I/O: Avoid blocking the main thread for I/O-heavy operations.
2. Use Worker Threads for CPU-Intensive Tasks: Offload heavy computations to worker threads or Web Workers.
3. Limit Concurrency: Use task queues or libraries like p-limit to control concurrency levels.
4. Leverage Libraries: Use libraries like Bull for task queues or Workerpool for worker thread management.
//docuRef.clear();
//select firstonly docuRef 
//    where docuRef.RefTableId == tableName2Id("HcmApplicant")
//    && docuRef.RefRecId == HcmApplicant.RecId;

//if(docuRef)
//{
//    builder.addAttachment(DocumentManagement::getAttachmentStream(docuRef),docuRef.Name);
//}
import 'package:flutter/material.dart';

class AnimatedNavigation {
  static push({
    required BuildContext context,
    required Widget page,
  }) {
    return Navigator.of(context).push(
      PageRouteBuilder(
        transitionDuration: const Duration(milliseconds: 250),
        pageBuilder: (context, animation, secondaryAnimation) => page,
        transitionsBuilder: (context, animation, secondaryAnimation, child) {
          const begin = 0.0;
          const end = 1.0;
          final tween = Tween(begin: begin, end: end);
          final offsetAnimation = animation.drive(tween);

          return FadeTransition(
            opacity: offsetAnimation,
            child: child,
          );
        },
      ),
    );
  }

  static pushAndRemoveUntil({
    required BuildContext context,
    required Widget page,
  }) {
    return Navigator.of(context).pushAndRemoveUntil(
      PageRouteBuilder(
        transitionDuration: const Duration(milliseconds: 250),
        pageBuilder: (context, animation, secondaryAnimation) => page,
        transitionsBuilder: (context, animation, secondaryAnimation, child) {
          const begin = 0.0;
          const end = 1.0;
          final tween = Tween(begin: begin, end: end);
          final offsetAnimation = animation.drive(tween);

          return FadeTransition(
            opacity: offsetAnimation,
            child: child,
          );
        },
      ),
          (route) => false,
    );
  }
}
Yes, crypto payment gateways have the potential to become a standard in global e-commerce due to their ability to process fast, secure, and borderless transactions. They eliminate the need for intermediaries, reducing transaction fees and enabling merchants to accept payments from customers worldwide. With the growing demand for decentralized finance and the increasing adoption of cryptocurrencies, crypto payment gateway development is evolving to support diverse currencies, making cross-border payments more efficient. However, regulatory challenges and volatility in cryptocurrency markets need to be addressed before they can fully replace traditional payment systems.
Intro:
MIm7  SOL  MIm7  SOL

MIm7  LA7/4  MIm7  LA7/4  SOL

MIm7  SOL  MIm7  SOL

MIm7  LA7/4  MIm7  LA7/4  SOL

DO                       RE/FA#
So, so you think you can tell,
            LAm/MI                SOL
Heaven from Hell, blue skies from pain.
                     RE/FA#
Can you tell a green field
                  DO                   LAm
from a cold steel rail, a smile from a veil
                     SOL
Do you think you can tell?
                    DO                    RE/FA#
Did they get you to trade your heroes for ghosts
              LAm/MI               SOL
Hot ashes for trees, hot air for a cool breeze
                 RE/FA#
cold comfort for change
              DO                           LAm
And did you exchange a walk on part in the war
                     SOL
for a lead role in a cage?

MIm7  SOL  MIm7  SOL

MIm7  LA7/4  MIm7  LA7/4  SOL

DO                                RE/FA#
  How I wish, how I wish you were here.
           LAm/MI
We're just two lost souls swimming in a fish bowl
SOL
  year after year
RE/FA#
  Running over the same old ground.
DO
  What have we found?
             LAm                  SOL
The same old fears. Wish you were here...

MIm7  SOL  MIm7  SOL

MIm7  LA7/4  MIm7  LA7/4  SOL
Investing in a crypto banking solution can significantly enhance your business's financial capabilities. It allows for seamless cryptocurrency transactions, which can attract tech-savvy customers and improve user experience. With features like multi-currency support, real-time reporting, and robust security measures, this software enables businesses to streamline operations and reduce transaction costs. Furthermore, as the demand for digital assets grows, adopting crypto banking software solutions positions your business at the forefront of financial innovation. Overall, the long-term benefits, including increased customer loyalty and potential revenue growth, make crypto banking software a worthwhile investment.

Yes, a white Label crypto payment gateway can significantly boost transaction security for e-commerce stores. By utilizing advanced encryption techniques and blockchain technology, these gateways minimize the risk of fraud and chargebacks. They offer secure wallet integrations, ensuring that sensitive customer information remains protected throughout the transaction. Additionally, many white-label solutions implement multi-signature wallets and robust identity verification measures, further enhancing security. White label crypto payment gateway safeguards transactions and builds customer trust, making it a viable option for e-commerce businesses looking to enhance their security posture while accepting cryptocurrency payments.
// HTML Code
<div class="home-video">
	<div class="hp-video-container">
		<div class="slideshow-container">
			<!-- <div class="mySlides fade">
				<video loop muted autoplay playsinline class="fullscreen-bg__video">
					<source src="https://static-trailercentral.s3.amazonaws.com/videos/LUND23_W2F_Pre-roll_15_16x9_FINAL-1920.mp4" type="video/mp4">
				</video>
			</div> -->
			<div class="mySlides fade" style="opacity: 0;">
				<video loop="" muted="" autoplay="" playsinline="" class="fullscreen-bg__video">
					<source src="https://static-trailercentral.s3.amazonaws.com/videos/ben-my23-homepage-video-desktop.mp4" type="video/mp4">
				</video>
			</div>
			<div class="mySlides fade" style="opacity: 1;">
				<video loop="" muted="" autoplay="" playsinline="" class="fullscreen-bg__video">
					<source src="https://static-trailercentral.s3.amazonaws.com/videos/macdonaldmarineinc_5.mp4" type="video/mp4">
				</video>
			</div>

			
			<div class="mySlides fade" style="opacity: 0;">
				<video loop="" muted="" autoplay="" playsinline="" class="fullscreen-bg__video">
					<source src="https://static-trailercentral.s3.amazonaws.com/videos/MY2024-B2.mp4" type="video/mp4">
				</video>
			</div>
			
			<a class="prev" onclick="plusSlides(-1)">❮</a>
			<a class="next" onclick="plusSlides(1)">❯</a>
            
            <!-- <div class="dot-container">
				<span class="dot" onclick="currentSlide(1)"></span>
				<span class="dot" onclick="currentSlide(2)"></span>
				<span class="dot" onclick="currentSlide(3)"></span>
				<span class="dot" onclick="currentSlide(4)"></span>
				<span class="dot" onclick="currentSlide(5)"></span>
			</div> -->
		</div>
	</div>
	<script type="text/javascript">
		document.querySelector('.fullscreen-bg__video').playbackRate = 1;

		var slideIndex = 1;
			var myTimer;
			var slideshowContainer;
			window.addEventListener("load", function () {
				showSlides(slideIndex);
				myTimer = setInterval(function () {
					(1);
				}, 15000);
			//UNCOMMENT OUT THE LINE BELOW TO KEEP ARROWS PART OF MOUSEENTER PAUSE/RESUME
				slideshowContainer = document.getElementsByClassName("slideshow-container")[0];
			slideshowContainer.addEventListener("mouseenter", pause);
			slideshowContainer.addEventListener("mouseleave", resume);
			});
			// NEXT AND PREVIOUS CONTROL
			function plusSlides(n) {
				clearInterval(myTimer);
				if (n < 0) {
					showSlides((slideIndex -= 1));
				} else {
					showSlides((slideIndex += 1));
				}
				//COMMENT OUT THE LINES BELOW TO KEEP ARROWS PART OF MOUSEENTER PAUSE/RESUME
				if (n === -1) {
					myTimer = setInterval(function () {
						plusSlides(n + 2);
					}, 15000);
				} else {
					myTimer = setInterval(function () {
						plusSlides(n + 1);
					}, 15000);
				}
			}
			//Controls the current slide and resets interval if needed
			function currentSlide(n) {
				clearInterval(myTimer);
				myTimer = setInterval(function () {
					plusSlides(n + 1);
				}, 15000);
				showSlides((slideIndex = n));
			}


			var current = 0,
				slides = document.getElementsByClassName("mySlides");

			setInterval(function() {
			  for (var i = 0; i < slides.length; i++) {
				slides[i].style.opacity = 0;
			  }
			  current = (current != slides.length - 1) ? current + 1 : 0;
			  slides[current].style.opacity = 1;
			}, 15000);


			function showSlides(n) {
				var i;
				var slides = document.getElementsByClassName("mySlides");
				var dots = document.getElementsByClassName("dot");
				if (n > slides.length) {
					slideIndex = 1;
				}
				if (n < 1) {
					slideIndex = slides.length;
				}
				for (i = 0; i < slides.length; i++) {
					slides[i].style.opacity = 0;
				}
				for (i = 0; i < dots.length; i++) {
					dots[i].className = dots[i].className.replace(" active", "");
				}
				slides[slideIndex - 1].style.opacity = 1;
				// dots[slideIndex - 1].className += " active";
			}
			pause = () => {
				clearInterval(myTimer);
			};
			resume = () => {
				clearInterval(myTimer);
				myTimer = setInterval(function () {
					plusSlides(slideIndex);
				}, 15000);
			};
	</script>
</div>

// SCSS
.home-video{
            position: relative;
            overflow: hidden;
            .hp-video-container{
                width: 100%;
                text-align: center;
                .slideshow-container{
                    width: 100%;
                    height: 50vw;
                    position: relative;
                    margin: auto;
                    background-color: #000;
                }
            }
            .mySlides{
                position: absolute;
                -webkit-transition: opacity .5s ease-in;
                transition: opacity .5s ease-in;
                width: 100%;
                height: 100%;
                display: -webkit-box;
                display: -webkit-flex;
                display: -ms-flexbox;
                display: flex;
                -webkit-box-align: center;
                -webkit-align-items: center;
                -ms-flex-align: center;
                align-items: center;
                -webkit-box-pack: center;
                -webkit-justify-content: center;
                -ms-flex-pack: center;
                justify-content: center;
                &+.mySlides{
                    opacity: 0;
                }
            }
            .prev, .next{
                cursor: pointer;
                position: absolute;
                top: 50%;
                width: auto;
                padding: 10px 15px;
                color: white;
                font-weight: bold;
                font-size: 18px;
                -webkit-transition: 0.6s ease;
                transition: 0.6s ease;
                border-radius: 2px;
                -webkit-user-select: none;
                -moz-user-select: none;
                -ms-user-select: none;
                user-select: none;
                -webkit-transform: translatey(-50%);
                -ms-transform: translatey(-50%);
                transform: translatey(-50%);
                z-index: 9;
                -webkit-filter: drop-shadow(0px 4px 6px black);
                filter: drop-shadow(0px 4px 6px black);
            }
            .prev{ left: 0; }
            .next{ right: 0; }
            video{
                height: 100%;
                width: 100%;
                object-fit: cover;
            }
        }
921dd32d0e41f0002d113f7a7c0a2b7a
If you are looking for a reliable OST to PST converter, I highly recommend trying EmailsGuru OST to PST Conveter. It is user-friendly and efficiently recovers inaccessible OST files, converting them to PST without any hassle. This tool offers offers a quick and hassle-free conversion process. The tool maintain data integrity and support multiple versions of Outlook. Additionally, it provide a preview feature, allowing you to view emails before conversion. Users can smoothly run it on Windows 10, 8.1, 7, XP, Vista and all below versions. Users can try a free trial version also.
class node{
    data;
    next=null;
}
class linklistNodes{
    head=null;
    
    add(value){
          let newNode=new node
          newNode.data=value
          if( this.head==null){
              this.head=newNode
             console.log('ia am head')
               this.head.data=value
                
               return
          }
          
          let lastNode= this.head
        
          while(lastNode.next!==null){
              lastNode=lastNode.next
                }
          lastNode.next=newNode}
    
    
    find(value){
        let currentNode=this.head
        let find;
        while(currentNode.next!=null){
                 currentNode=  currentNode.next
            if(currentNode.data==value){
                find=currentNode
                console.log('find')
                
            } }
            return find
         }
         
         
         deletex(value){
             
            let linklist= this.head
            if(linklist.data==value){
                console.log('......')
               this.head=linklist.next
            }
            while(linklist.next!=null){
                
                if(linklist.next.data==value){
                    linklist.next=linklist.next.next
                    console.log('......................')
                    console.log(linklist)
                    console.log(linklist.next.next)
                       console.log('......................')
                    return
                }
                linklist= linklist.next
            }
             
             
         }
}

const linklist=new linklistNodes
linklist.add('21')
linklist.add('25')
linklist.add('26')
linklist.add('26')
linklist.add('21')
linklist.add('25')
linklist.add('26')
linklist.add('26')

linklist. deletex('25')
console.log(linklist.head)
$(document).ready(function () {
    var isFirefox = navigator.userAgent.toLowerCase().indexOf('firefox') > -1;
  
    /*
    var userAgent = navigator.userAgent.toLowerCase();
      var isChrome = userAgent.indexOf('chrome') > -1 && userAgent.indexOf('edge') === -1 && userAgent.indexOf('opr') === -1; // Esclude Edge e Opera
      var isSafari = userAgent.indexOf('safari') > -1 && userAgent.indexOf('chrome') === -1; // Safari ma non Chrome

      var isNotChromeAndSafari = !isChrome && !isSafari;

      console.log("isChrome:", isChrome);
      console.log("isSafari:", isSafari);
      console.log("isNotChromeAndSafari:", isNotChromeAndSafari);

    */

    // Rilevamento del browser
    if (isFirefox) {
        console.log("Rilevato Firefox: Applicare una soluzione alternativa.");
    }

    // Funzione per memorizzare il testo originale
    $('#prefix option').each(function () {
        if (isFirefox) {
            // Per Firefox, usa l'attributo direttamente nel DOM
            $(this).attr('data-original-text', $(this).text());
        } else {
            // Per altri browser, usa jQuery .data()
            $(this).data('original-text', $(this).text());
        }
        console.log("Testo originale:", $(this).text());
    });

    // Gestione dell'evento 'change'
    $(document).on('change', '#prefix', function () {
        $('#prefix option').each(function () {
            if (isFirefox) {
                // Recupera il testo originale dall'attributo
                $(this).text($(this).attr('data-original-text'));
            } else {
                // Recupera il testo originale dai dati di jQuery
                $(this).text($(this).data('original-text'));
            }
        });

        var selectedValue = $(this).val();
        var formattedPrefix = '(' + selectedValue + ')';

        // Modifica il testo dell'opzione selezionata
        $(this).find('option:selected').text(formattedPrefix);
    });

    // Gestione dell'evento 'click'
    $(document).on('click', '#prefix', function () {
        $('#prefix option').each(function () {
            if (isFirefox) {
                // Recupera il testo originale dall'attributo
                $(this).text($(this).attr('data-original-text'));
            } else {
                // Recupera il testo originale dai dati di jQuery
                $(this).text($(this).data('original-text'));
            }
        });
    });
});
// Shortcode [fellow_intern type='']

function fellow_intern ( $atts, $content = null) {
    $today = date('Ymd');
	$atts = shortcode_atts(
        array(
            'type' => '',
            'number' => '-1',
        ),
        $atts,
        'fellow_intern'
    );
    $args = array(
        'post_type' => 'fellow-intern',
		'posts_per_page' => -1,
        'post_status' => 'publish',
        'orderby' => 'date',
        'order' => 'ASC',
    );

	if( !empty( $atts['type'] ) ) {
		$args['tax_query'] = array(
			array(
				'taxonomy' => 'fellow-type',
				'field' => 'slug',
				'terms' => $atts['type'],
            )
		);
	}

    $fellow_query = new WP_Query($args);

    ob_start();
    if($fellow_query->have_posts()) { ?>

    <div class="fellows-wrapper">

    <?php

    while ($fellow_query->have_posts()) {
    $fellow_query->the_post(); ?>

    <div class="fellow-inner">
		<!-- Thumbnail -->
		<div class="fellow-img">
			<?php if ( has_post_thumbnail() ) { the_post_thumbnail('full'); } ?>
		</div>
		<div class="fellow-content">
			<!-- Title -->
			<h3><?php echo the_title(); ?></h3>
			<!-- Details -->
			<div class="fellow-details">
				<?php echo the_content(); ?>
			</div>
		</div>
	</div>

    <?php }
    wp_reset_postdata();
    ?>
    </div>

    <?php
    } else { ?>
        <div>No fellows found</div>
    <?php }
    return ob_get_clean();
}
add_shortcode('fellow_intern', 'fellow_intern');
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=s, initial-scale=1.0">
    <title>Document</title>
    <style>
        body{
            background-color: rgb(66, 31, 92);
        }
        form{
            width:400px;
            margin:auto;
            border:solid 3pt rgb(197, 174, 202);
            padding:6px;
        }
        input{
            margin:5px;
            background-color: rgb(189, 161, 215);
            font-size: medium;
            border: solid 3pt rgb(199, 178, 204);
        }
        input[type=button]{
            width:80px;
            border-radius:10px;
            height:50px;
            border:solid 3pt rgb(171, 159, 184);
        }
        h1{
            text-align: center;
            color: rgb(177, 158, 191);

        }
        footer{
            text-align: center;
            padding: 10px;
            font-weight: 700;
            color: rgb(190, 163, 193);
        }
        input[type=text]{
           color: rgb(0, 0, 0);
        }
    </style>
</head>
<body>
    <h1>Calculator</h1>
    <form name="calform">
        <input type="text" id="answer" naame="answer"/>
        

        <input type="button" value="C" onclick="calform.answer.value=''"/>
      <br>
        <input type="button" value="1" onclick="calform.answer.value+='1'"/>

        <input type="button" value="2" onclick="calform.answer.value+='2'"/>
  
        <input type="button" value="3" onclick="calform.answer.value+='3'"/>
     
        <input type="button" value="+" onclick="calform.answer.value+='+'"/>
        <br>
        
        <input type="button" value="4" onclick="calform.answer.value+='4'"/>
   
        <input type="button" value="5" onclick="calform.answer.value+='5'"/>
     
        <input type="button" value="6" onclick="calform.answer.value+='6'"/>
     
        <input type="button" value="-" onclick="calform.answer.value+='-'"/>
        <br>

        <input type="button" value="7" onclick="calform.answer.value+='7'"/>

        <input type="button" value="8" onclick="calform.answer.value+='8'"/>

        <input type="button" value="9" onclick="calform.answer.value+='9'"/>

        <input type="button" value="*" onclick="calform.answer.value+='*'"/>
        <br>
        <input type="button" value="/" onclick="calform.answer.value+='/'"/>
        <input type="button" value="0" onclick="calform.answer.value+='0'"/>
        <input type="button" value="." onclick="calform.answer.value+='.'"/>
        <input type="button" value="%" onclick="calform.answer.value+='%'"/>
        <br>
        <input type="button" value="x^2" onclick="squarenumber()">
        <input type="button" value="sqrt" onclick="squareroot()">
        <input type="button" value="^" onclick="calform.answer.value='**'">
        <input type="button" value="=" onclick="calform.answer.value=eval(calform.answer.value)" />
    </form>
    
    <script>
        function squarenumber(){
            let value=calform.answer.value;
            calform.answer.value=Math.pow(value,2);
        }

        function squareroot(){
            let value=calform.answer.value;
            if(value>=0){
                calform.answer.value=Math.sqrt(value)
            }
            else{
                calform.aanswer.value="error"
            }
        }
    </script>
</body>
<footer>
    AKSHITA VASU [DEPARTMENT OD CSE ]
</footer>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Newspaper</title>
    <style>
        #container{
            width:95%;
            overflow:auto;
            margin:auto;
        }
        header{
            text-align: center;
            background-color: aquamarine;
        }
        nav ul{
            list-style-type:none;
            margin:0;padding:0;
            overflow:hidden;
        }
        nav li{
            float:left;
        }
        nav li a{
            text-decoration:none;
            text-align:center;
            padding:15px ;
        }
        nav li a:hover{
            background-color: aqua;
        }
        section{
            width:70%;
            margin:5px;
            float:left;
            padding:6px;
            border:solid 1pt black;
            background-color: burlywood;
        }

        aside{
           display:inline-block;
           margin:5px;
           padding:5px;
           width:25%;
            position: inherit;
            vertical-align:top;
            background-color: bisque;

        }
        figure{
            float:left;
            margin-right: 5px;
        }
        footer{
            text-align: center;
            font-weight:500;
            height:30px;
            background-color: rgb(131, 117, 131);
            width: 100%;
            font-size: larger;
        }

    </style>
</head>
<body>
    <div id="container">
        <header>
            <img src="TOI.png" width="500px"/>
            <nav role="navigation">
                <ul>
                    <li><a href="#">City</a></li>
                    <li><a href="#">world</a></li>
                    <li><a href="#">business</a></li>
                    <li><a href="#">tech</a></li>
                    <li><a href="#">Cricket</a></li>
                </ul>
            </nav>
        </header>

        <section>
            <h2>latest News</h2>
            <article>
                <h3>how cyclone done</h3>
                <figure>
                    <img src="cyclone.JPG" width="200px" />
                    <figcaption>CYCLONE</figcaption>
                </figure>
                Lorem ipsum dolor sit amet consectetur adipisicing elit. Necessitatibus aspernatur in earum cupiditate odit inventore aperiam iure quia ratione unde. Et voluptatem assumenda fugiat mollitia esse porro recusandae voluptatibus a!
            </article>
        </section>
        <section>
            <h2>latest News</h2>
            <article>
                <h3>how cyclone done</h3>
                <figure>
                    <img src="cyclone.JPG" width="200px" />
                    <figcaption>CYCLONE</figcaption>
                </figure>
                Lorem ipsum dolor sit amet consectetur adipisicing elit. Necessitatibus aspernatur in earum cupiditate odit inventore aperiam iure quia ratione unde. Et voluptatem assumenda fugiat mollitia esse porro recusandae voluptatibus a!
            </article>
        </section><section>
            <h2>latest News</h2>
            <article>
                <h3>how cyclone done</h3>
                <figure>
                    <img src="cyclone.JPG" width="200px" />
                    <figcaption>CYCLONE</figcaption>
                </figure>
                Lorem ipsum dolor sit amet consectetur adipisicing elit. Necessitatibus aspernatur in earum cupiditate odit inventore aperiam iure quia ratione unde. Et voluptatem assumenda fugiat mollitia esse porro recusandae voluptatibus a!
            </article>
        </section>
        <section>
            <h2>latest News</h2>
            <article>
                <h3>how cyclone done</h3>
                <figure>
                    <img src="cyclone.JPG" width="200px" />
                    <figcaption>CYCLONE</figcaption>
                </figure>
                Lorem ipsum dolor sit amet consectetur adipisicing elit. Necessitatibus aspernatur in earum cupiditate odit inventore aperiam iure quia ratione unde. Et voluptatem assumenda fugiat mollitia esse porro recusandae voluptatibus a!
            </article>
        </section>
        <aside>
            <hgroup>
                <h3> <a href="#">SOMETHING</a></h3>
                <h3> <a href="#">SOMETHING</a></h3>
                <h3> <a href="#">SOMETHING</a></h3>
            </hgroup>
            <figure>
                <img src="sucess1.JPG" width="260px"/>
            </figure>
            <figure>
                <img src="quotes2.JPG" width="260px"/>
            </figure>
            <figure>
                <img src="quotes 3.JPG" width="260px"/>
            </figure>
        </aside>
        </div>
        <footer>
            aksh|hey|bhkm
        </footer>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
     <style>
        #container{
            background-color: #E2F1E7;
            color:#243642;
            width: 95%;
            border: solid 1pt black;
            margin:auto;
            padding: 10px;
        

        }
        form{
        background-color:#629584;
        padding: 10px;
          
        }
        label{
            color: #E2F1E7;
            font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
            font-weight: 200px;
        
       
        }
        input{
            padding: 10px;
            width:200px;
            font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
            border-radius:10px;
        }
        input[type=checkbox]{
            width:30px;

        }
        input[type=submit],input[type=reset] {
            margin:10px;
            background-color:#DA8359;
            color:#030303;
        }
        input:focus{
            background-color: #FCFAEE;
        }
        select{
            border-color:#243642;
            background-color:#E2F1E7;
        }
       
    </style>
</head>
<body>
    <div id="container">
        <h1>registration form</h1>
        <form >
            <table>
                <tr>
                    <td><label for= "usn">usn</label></td>
                    <td><input id="usn" type="text"></td>
                </tr>
                <tr>
                    <td><label for="uname">uname</label></td>
                    <td><input id="uname" type="text"></td>
                </tr>
                <tr>
                    <td><label for="password">password</label></td>
                    <td><input id="password" type="password"></td>
                </tr>
                <tr>
                    <td><label for="bday">bday</label></td>
                    <td><input id="bday" type="date"></td>
                </tr>
                <tr>
                    <td><label for="city">select city</label></td>
                    <td><select id="city" >
                        <option>bang</option>
                        <option>mum</option>
                    </select></td>
                </tr>
                <tr>
                    <td><label for="plang">select programming lang</label>
                    </td>
                    <td><input id="plang" type="checkbox" value="C">c<br>
                    <input id="plang" type="checkbox" value="C++">C++<br>
                    <input id="plang" type="checkbox"  value="java">java</td>
                </tr>
                <tr>
                    <td><label for="mypic">upload a photo</label></td>
                    <td><input id="mypic" type="file"></td>
                </tr>
                <tr>
                    <td><label for="pskill">Rate your programming skills in Web Technology</label></td>
                    <td><input id="pkill" name="pskill" type="range" min="1" max="10" step="1" /></td>
                </tr>
                <tr>
                    <td><label for="fcolor">choose you fav color</label></td>
                    <td><input id="fcolor" type="color"></td>

                </tr>
<tr>
                <td colspan="2"><input name="submit" type="submit" /><input type="reset" /></td>
            </tr>
            </table>
        </form>
    </div>
</body>
</html>
<html>

<head>
    <title>Program-3</title>
    <link rel="stylesheet" type="text/css" href="style.css">
</head>

<body>
    <h2  id="heading">PROGRAM 3</h2>
    <h3 id="h2">GIVING DIFFERENT STYLE USING CSS</h3>
    <hr id="line">
    <p id="para">
     
        Internal - by using a style element in the head section
        External - by using a link element to link to an external CSS file
        The most common way to add CSS, is to keep the styles in external CSS files.
    </p>
    <div id="mydiv">
        <h2>CSS</h2>
        <p>
            CSS stands for cascading syle sheet that is used to style the webpage

        </p>
        <span id="span">CSS IN HTML</span>
    </div>
    <p>The website will be working from <time id="time">10.00</time> am to <time id="time">04.00</time> pm</p>
    <img src="image.png" id="img"><br>
    Click <a href="https://www.youtube.com">here</a> to open YouTube

</body>

</html>
<!DOCTYPE html>
<html>
<head>
 
    <title>Titmetable</title>
    <style>
        table {
            border:solid 1pt black;
            border-collapse: collapse;
        }
        td,th {border:solid 1pt black;
        padding: 5pt;
        text-align: center;}

        .lab {
            background-color: azure;
        }
        thead, th{
            background-color: lightgray;
        }
        caption{
            border: solid 1pt black;
            padding: 5pt;
            background-color: aliceblue;
            color:crimson;
            font-weight: bold;
        }
        tfoot {
            background-color: lavender;
            color:brown;
            font-weight:bolder;
        }
    </style>
</head>
<body>
    <h1> Timetable </h1>
    <table>
        <caption>My class timetable</caption>
        <thead>
            <tr>
                <th>Time/Day</th>
                <th>08:00 - 09:00 AM</th>
                <th>09:00 - 10:00 AM</th>
                <th ></th>
                <th>10:20 - 11:20 AM</th>
                <th>11:20 - 12:20 AM</th>
                <th></th>
                <th>01:00 - 02:00 PM</th>
                <th>02:00 - 02:00 PM</th>
                <th>03:00 - 04:00 PM</th>

            </tr>
        </thead>
        <tbody>
            <tr>
            <th>Mon</th>
            <td>CC-B</td> <td>CC-C</td><td rowspan="6">Short Break (10.00 - 10.20 a.m.)</td>
            <td colspan="2" class="lab">5B3 Web lab</td><td rowspan="6">Lunch Break 
                (12.20 - 1.00 PM)</td><td>TOC-B</td>
            <td colspan="2"></td>
             </tr>
             <tr>
                <th>Tue</th>
                <td>CC-C</td> <td></td><td></td>
                <td>TOC-B</td><td ></td>
                <td ></td><td colspan="2"></td>
             </tr>
             <tr>
                <th>Wed</th>
                <td colspan="2" class="lab">5A3 Web lab</td>
                <td>CC-B</td><td></td>
                <td></td><td colspan="2">Club Activity</td>
             </tr>
             <tr>
                <th>Thu</th>
                <td>TOC-B</td> <td>CC-C</td>
                <td>CC-B</td><td></td><td></td>
                <td colspan="2">Mini Projects</td>
             </tr>
             <tr>
                <th>Fri</th>
                <td>CC-B</td> <td>TOC-B</td>
                <td></td><td>CC-C</td><td></td>
                <td colspan="2" class="lab">5C2-Web lab</td>
             </tr>
             <tr>
                <th>Sat</th>
                <td></td> <td></td>
                <td colspan="2">College level activity</td><td></td>
                <td colspan="2"></td>
             </tr>
        </tbody>
        <tfoot>
            <tr>
                <td colspan="10"> 2024-2025 Department of CSE</td>
            </tr>
        </tfoot>
    </table>
    
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>My First Web Page</title>
</head>
<body>
    <marquee>Basic HTML Tags</marquee>
    <h1></h1>
    <h2></h2>
    <h3></h3>
    <p></p>
    <h3></h3>
    <p>
        <b>Uttara Kannada</b> district<sup>[7]</sup>.
        <br />
         <strong>Siddapura</strong> 
        <br/>
        I <i>Kargal town</i> 
        <em>Shimoga district</em>, <u>Karnataka</u>, 
        
    </p>
    <p></p>
        <hr>
    <h2></h2>
    <h3></h3>
    <h3></h3>
    
    <blockquote>“Jobs fill your pocket, but adventures fill your soul.” – Jamie Lyn Beatty</blockquote>

    <pre>
*    +       * 
       *
    </pre>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
   

        <script src="jquery-3.7.1.min.js"></script>
        <script src="jquery.animate-colors.js"></script>
    <title>jQuery</title>
   
</head>
<body>
    <h1> JQuery </h1>
    <h2>Append content to end of paragraph and list</h2>
    <button id="btnAppend">Append Demo</button>
    <p id="aboutjq"> jQuery dates back to 2005</p>
    <ul id="featuresjq">
        <li>HTML/DOM manipulation</li>
        <li> CSS manipulation</li>
    </ul>
    <script>
        $("#btnAppend").click(function(){
            $("#aboutjq").append("<br> The various features are: ");
            $("#featuresjq").append("<li>HTML manipulation</li>");
        });
        
    </script>
    <h2>Change the state of CSS style element  </h2>
    <button id="btnGrow">Animate Text - Increase Size</button>
    <button id="btnShrink">Animate Text - Decrease Size</button>
    <div id="animText">jQuery</div>
    <script>
        $("#btnGrow").click(function() {
            $("#animText").animate({
                "opacity":0.25,
                "fontSize":"+=4px"
        });
        });
        $("#btnShrink").click(function() {
            $("#animText").animate({
                "opacity":1,
                "fontSize":"-=4px"
        });
        });
    </script>
    <h2>Change the color of any div that is animated</h2>
    <input type="color" id="ipColor" />
    <button id="btnColor">Change color</button>
    <div id="foo" style="width:200px; height:150px; border:solid 1pt black;margin:10px;"></div>
    <script>
    $("#btnColor").click(function() {
        $("#foo").animate({ backgroundColor: $("#ipColor").val()},"slow" );
    });
    </script>
</body>
</html>
sudo /sbin/ifconfig ham0 mtu 1200

#or

sudo ip link set mtu 1200 ham0

#persistence:

# create a file (example: hamachi) at /etc/network/if-up.d/hamachi
# with this contents:

#!/bin/sh

if [ "$IFACE" = "ham0" ]; then
    ifconfig ham0 mtu 1200
fi
#include <iostream>
#include <stdexcept>
#include <string>

int main() {
	setlocale(LC_ALL, "RU");

	class Car {
	private:
		std::string name; // Приватное поле
		int mx_speed; // Приватное поле

	public:
		Car(const std::string& name, int mx_speed) {
			setName(name);
			setMaxspeed(mx_speed);
		}

		void setName(const std::string& name) {
			this->name = name;
		}

		std::string getName() const {
			return name;
		}

		void setMaxspeed(int mx_speed) {
			if (mx_speed < 0) {
				throw std::invalid_argument("Скорость машины не может быть отрицательной.");
			}
			this->mx_speed = mx_speed;
		}

		int getMaxspeed() const {
			return mx_speed;
		}
	};

	// Производный класс
	class Porshe : public Car {
	private:
		std::string color; // Новое поле

	public:
		Porshe(const std::string& name, int mx_speed, const std::string& color)
			: Car(name, mx_speed), color(color) {}

		void display() const {
			std::cout << "Porshe: " << getName() << ", Максимальная скорость: " << getMaxspeed() << ", Цвет: " << color << std::endl;
		}
	};

	// Класс, основанный на двух других
	class Price : public Porshe {
	private:
		int cost; // Новое поле

	public:
		Price(const std::string& name, int mx_speed, const std::string& color, int cost)
			: Porshe(name, mx_speed, color), cost(cost) {}

		void showPrice() const {
			display();
			std::cout << "Цена: " << cost << std::endl;
		}
	};

	// Класс, наследующий от Rose
	class SpecialPorshe : public Porshe {
	public:
		using Porshe::Porshe; // Наследуем конструктор

	private:
		// Доступ к полям базового класса ограничен
		void setColor(const std::string& color) {
			// Метод для изменения цвета, доступен только в классе
		}
	};

	// Основная функция
	try {
		Car car("Porshe Cayenne", 260);
		car.setMaxspeed(300);
		std::cout << "Машина: " << car.getName() << ", Максимальная скорость: " << car.getMaxspeed() << std::endl;

		Porshe porshe("Porshe Macan", 330, "Голубой");
		porshe.display();

		Price price("Porshe Panamera", 250, "Белый", 3000000);
		price.showPrice();

		SpecialPorshe specialPorshe("Porshe 911", 330, "Синий");
		// specialRose.setColor("Зеленый"); // Это вызовет ошибку, так как метод недоступен в main

	}
	catch (const std::invalid_argument& e) {
		std::cerr << "Ошибка: " << e.what() << std::endl;
	}

	return 0;
}
Zomato is the famous food delivery platform in India and secondary in UAE. A lot of entrepreneurs planning to develop their Zomato clone mobile app for their business with industry-leading latest technology Here, we listed out the appropriate technology for the food mobile app development.

1. Frontend
◦ React Native is a popular cross-platform mobile app development, offering a smoother experience and faster deployment time than other technologies.
◦ Flutter: The second most powerful framework is for developing cross-platform apps because of its better performance and responsive UI.

2. Backend
◦ Node.js: An excellent JavaScript runtime environment for real-time applications, such as food delivery, effectively managing concurrent connections and high traffic.
◦ Python (with frameworks like Django or Flask): A versatile language suitable for building scalable and maintainable backend systems.

3. Database:
◦ PostgreSQL: A powerful relational database that can handle complex queries and large datasets.
◦ MongoDB: A NoSQL database that's flexible and scalable, ideal for storing unstructured data like user preferences and order history.

The technologies that are essential to the development of all mobile apps and other on-demand app development were mentioned above. We Appticz are the pro-player in the Zomato clone script provider in the highly competitive market.
options:
  parameters:
    author: ''
    catch_exceptions: 'True'
    category: Custom
    cmake_opt: ''
    comment: ''
    copyright: ''
    description: ''
    gen_cmake: 'On'
    gen_linking: dynamic
    generate_options: qt_gui
    hier_block_src_path: '.:'
    id: top_block
    max_nouts: '0'
    output_language: python
    placement: (0,0)
    qt_qss_theme: ''
    realtime_scheduling: ''
    run: 'True'
    run_command: '{python} -u {filename}'
    run_options: prompt
    sizing_mode: fixed
    thread_safe_setters: ''
    title: ''
    window_size: 1280, 1024
  states:
    bus_sink: false
    bus_source: false
    bus_structure: null
    coordinate: [10, 10]
    rotation: 0
    state: enabled

blocks:
- name: audio_gain
  id: variable_qtgui_range
  parameters:
    comment: ''
    gui_hint: ''
    label: ''
    min_len: '200'
    orient: QtCore.Qt.Horizontal
    rangeType: float
    start: '0'
    step: '0.1'
    stop: '10'
    value: '1'
    widget: counter_slider
  states:
    bus_sink: false
    bus_source: false
    bus_structure: null
    coordinate: [792, 324.0]
    rotation: 0
    state: true
- name: center_freq
  id: variable
  parameters:
    comment: ''
    value: 97.9e6
  states:
    bus_sink: false
    bus_source: false
    bus_structure: null
    coordinate: [8, 229]
    rotation: 0
    state: enabled
- name: channel_freq
  id: variable
  parameters:
    comment: ''
    value: 96.5e6
  states:
    bus_sink: false
    bus_source: false
    bus_structure: null
    coordinate: [8, 287]
    rotation: 0
    state: enabled
- name: channel_width
  id: variable
  parameters:
    comment: ''
    value: 200e3
  states:
    bus_sink: false
    bus_source: false
    bus_structure: null
    coordinate: [9, 346]
    rotation: 0
    state: enabled
- name: samp_rate
  id: variable
  parameters:
    comment: ''
    value: 8e6
  states:
    bus_sink: false
    bus_source: false
    bus_structure: null
    coordinate: [8, 170]
    rotation: 0
    state: enabled
- name: analog_sig_source_x_0
  id: analog_sig_source_x
  parameters:
    affinity: ''
    alias: ''
    amp: '1'
    comment: ''
    freq: center_freq - channel_freq
    maxoutbuf: '0'
    minoutbuf: '0'
    offset: '0'
    phase: '0'
    samp_rate: samp_rate
    type: complex
    waveform: analog.GR_COS_WAVE
  states:
    bus_sink: false
    bus_source: false
    bus_structure: null
    coordinate: [200, 324.0]
    rotation: 0
    state: enabled
- name: analog_wfm_rcv_0
  id: analog_wfm_rcv
  parameters:
    affinity: ''
    alias: ''
    audio_decimation: '10'
    comment: ''
    maxoutbuf: '0'
    minoutbuf: '0'
    quad_rate: 480e3
  states:
    bus_sink: false
    bus_source: false
    bus_structure: null
    coordinate: [912, 252.0]
    rotation: 0
    state: enabled
- name: audio_sink_0
  id: audio_sink
  parameters:
    affinity: ''
    alias: ''
    comment: ''
    device_name: ''
    num_inputs: '1'
    ok_to_block: 'True'
    samp_rate: '48000'
  states:
    bus_sink: false
    bus_source: false
    bus_structure: null
    coordinate: [944, 396.0]
    rotation: 0
    state: enabled
- name: blocks_multiply_const_vxx_0
  id: blocks_multiply_const_vxx
  parameters:
    affinity: ''
    alias: ''
    comment: ''
    const: audio_gain
    maxoutbuf: '0'
    minoutbuf: '0'
    type: float
    vlen: '1'
  states:
    bus_sink: false
    bus_source: false
    bus_structure: null
    coordinate: [944, 332.0]
    rotation: 0
    state: enabled
- name: blocks_multiply_xx_0
  id: blocks_multiply_xx
  parameters:
    affinity: ''
    alias: ''
    comment: ''
    maxoutbuf: '0'
    minoutbuf: '0'
    num_inputs: '2'
    type: complex
    vlen: '1'
  states:
    bus_sink: false
    bus_source: false
    bus_structure: null
    coordinate: [472, 256.0]
    rotation: 0
    state: enabled
- name: low_pass_filter_0
  id: low_pass_filter
  parameters:
    affinity: ''
    alias: ''
    beta: '6.76'
    comment: ''
    cutoff_freq: 75e3
    decim: int(samp_rate/channel_width)
    gain: '1'
    interp: '1'
    maxoutbuf: '0'
    minoutbuf: '0'
    samp_rate: samp_rate
    type: fir_filter_ccf
    width: 25e3
    win: window.WIN_HAMMING
  states:
    bus_sink: false
    bus_source: false
    bus_structure: null
    coordinate: [664, 148.0]
    rotation: 0
    state: enabled
- name: osmosdr_source_0
  id: osmosdr_source
  parameters:
    affinity: ''
    alias: ''
    ant0: ''
    ant1: ''
    ant10: ''
    ant11: ''
    ant12: ''
    ant13: ''
    ant14: ''
    ant15: ''
    ant16: ''
    ant17: ''
    ant18: ''
    ant19: ''
    ant2: ''
    ant20: ''
    ant21: ''
    ant22: ''
    ant23: ''
    ant24: ''
    ant25: ''
    ant26: ''
    ant27: ''
    ant28: ''
    ant29: ''
    ant3: ''
    ant30: ''
    ant31: ''
    ant4: ''
    ant5: ''
    ant6: ''
    ant7: ''
    ant8: ''
    ant9: ''
    args: hackrf=0
    bb_gain0: '20'
    bb_gain1: '20'
    bb_gain10: '20'
    bb_gain11: '20'
    bb_gain12: '20'
    bb_gain13: '20'
    bb_gain14: '20'
    bb_gain15: '20'
    bb_gain16: '20'
    bb_gain17: '20'
    bb_gain18: '20'
    bb_gain19: '20'
    bb_gain2: '20'
    bb_gain20: '20'
    bb_gain21: '20'
    bb_gain22: '20'
    bb_gain23: '20'
    bb_gain24: '20'
    bb_gain25: '20'
    bb_gain26: '20'
    bb_gain27: '20'
    bb_gain28: '20'
    bb_gain29: '20'
    bb_gain3: '20'
    bb_gain30: '20'
    bb_gain31: '20'
    bb_gain4: '20'
    bb_gain5: '20'
    bb_gain6: '20'
    bb_gain7: '20'
    bb_gain8: '20'
    bb_gain9: '20'
    bw0: '0'
    bw1: '0'
    bw10: '0'
    bw11: '0'
    bw12: '0'
    bw13: '0'
    bw14: '0'
    bw15: '0'
    bw16: '0'
    bw17: '0'
    bw18: '0'
    bw19: '0'
    bw2: '0'
    bw20: '0'
    bw21: '0'
    bw22: '0'
    bw23: '0'
    bw24: '0'
    bw25: '0'
    bw26: '0'
    bw27: '0'
    bw28: '0'
    bw29: '0'
    bw3: '0'
    bw30: '0'
    bw31: '0'
    bw4: '0'
    bw5: '0'
    bw6: '0'
    bw7: '0'
    bw8: '0'
    bw9: '0'
    clock_source0: ''
    clock_source1: ''
    clock_source2: ''
    clock_source3: ''
    clock_source4: ''
    clock_source5: ''
    clock_source6: ''
    clock_source7: ''
    comment: ''
    corr0: '0'
    corr1: '0'
    corr10: '0'
    corr11: '0'
    corr12: '0'
    corr13: '0'
    corr14: '0'
    corr15: '0'
    corr16: '0'
    corr17: '0'
    corr18: '0'
    corr19: '0'
    corr2: '0'
    corr20: '0'
    corr21: '0'
    corr22: '0'
    corr23: '0'
    corr24: '0'
    corr25: '0'
    corr26: '0'
    corr27: '0'
    corr28: '0'
    corr29: '0'
    corr3: '0'
    corr30: '0'
    corr31: '0'
    corr4: '0'
    corr5: '0'
    corr6: '0'
    corr7: '0'
    corr8: '0'
    corr9: '0'
    dc_offset_mode0: '0'
    dc_offset_mode1: '0'
    dc_offset_mode10: '0'
    dc_offset_mode11: '0'
    dc_offset_mode12: '0'
    dc_offset_mode13: '0'
    dc_offset_mode14: '0'
    dc_offset_mode15: '0'
    dc_offset_mode16: '0'
    dc_offset_mode17: '0'
    dc_offset_mode18: '0'
    dc_offset_mode19: '0'
    dc_offset_mode2: '0'
    dc_offset_mode20: '0'
    dc_offset_mode21: '0'
    dc_offset_mode22: '0'
    dc_offset_mode23: '0'
    dc_offset_mode24: '0'
    dc_offset_mode25: '0'
    dc_offset_mode26: '0'
    dc_offset_mode27: '0'
    dc_offset_mode28: '0'
    dc_offset_mode29: '0'
    dc_offset_mode3: '0'
    dc_offset_mode30: '0'
    dc_offset_mode31: '0'
    dc_offset_mode4: '0'
    dc_offset_mode5: '0'
    dc_offset_mode6: '0'
    dc_offset_mode7: '0'
    dc_offset_mode8: '0'
    dc_offset_mode9: '0'
    freq0: center_freq
    freq1: 100e6
    freq10: 100e6
    freq11: 100e6
    freq12: 100e6
    freq13: 100e6
    freq14: 100e6
    freq15: 100e6
    freq16: 100e6
    freq17: 100e6
    freq18: 100e6
    freq19: 100e6
    freq2: 100e6
    freq20: 100e6
    freq21: 100e6
    freq22: 100e6
    freq23: 100e6
    freq24: 100e6
    freq25: 100e6
    freq26: 100e6
    freq27: 100e6
    freq28: 100e6
    freq29: 100e6
    freq3: 100e6
    freq30: 100e6
    freq31: 100e6
    freq4: 100e6
    freq5: 100e6
    freq6: 100e6
    freq7: 100e6
    freq8: 100e6
    freq9: 100e6
    gain0: '0'
    gain1: '10'
    gain10: '10'
    gain11: '10'
    gain12: '10'
    gain13: '10'
    gain14: '10'
    gain15: '10'
    gain16: '10'
    gain17: '10'
    gain18: '10'
    gain19: '10'
    gain2: '10'
    gain20: '10'
    gain21: '10'
    gain22: '10'
    gain23: '10'
    gain24: '10'
    gain25: '10'
    gain26: '10'
    gain27: '10'
    gain28: '10'
    gain29: '10'
    gain3: '10'
    gain30: '10'
    gain31: '10'
    gain4: '10'
    gain5: '10'
    gain6: '10'
    gain7: '10'
    gain8: '10'
    gain9: '10'
    gain_mode0: 'False'
    gain_mode1: 'False'
    gain_mode10: 'False'
    gain_mode11: 'False'
    gain_mode12: 'False'
    gain_mode13: 'False'
    gain_mode14: 'False'
    gain_mode15: 'False'
    gain_mode16: 'False'
    gain_mode17: 'False'
    gain_mode18: 'False'
    gain_mode19: 'False'
    gain_mode2: 'False'
    gain_mode20: 'False'
    gain_mode21: 'False'
    gain_mode22: 'False'
    gain_mode23: 'False'
    gain_mode24: 'False'
    gain_mode25: 'False'
    gain_mode26: 'False'
    gain_mode27: 'False'
    gain_mode28: 'False'
    gain_mode29: 'False'
    gain_mode3: 'False'
    gain_mode30: 'False'
    gain_mode31: 'False'
    gain_mode4: 'False'
    gain_mode5: 'False'
    gain_mode6: 'False'
    gain_mode7: 'False'
    gain_mode8: 'False'
    gain_mode9: 'False'
    if_gain0: '20'
    if_gain1: '20'
    if_gain10: '20'
    if_gain11: '20'
    if_gain12: '20'
    if_gain13: '20'
    if_gain14: '20'
    if_gain15: '20'
    if_gain16: '20'
    if_gain17: '20'
    if_gain18: '20'
    if_gain19: '20'
    if_gain2: '20'
    if_gain20: '20'
    if_gain21: '20'
    if_gain22: '20'
    if_gain23: '20'
    if_gain24: '20'
    if_gain25: '20'
    if_gain26: '20'
    if_gain27: '20'
    if_gain28: '20'
    if_gain29: '20'
    if_gain3: '20'
    if_gain30: '20'
    if_gain31: '20'
    if_gain4: '20'
    if_gain5: '20'
    if_gain6: '20'
    if_gain7: '20'
    if_gain8: '20'
    if_gain9: '20'
    iq_balance_mode0: '0'
    iq_balance_mode1: '0'
    iq_balance_mode10: '0'
    iq_balance_mode11: '0'
    iq_balance_mode12: '0'
    iq_balance_mode13: '0'
    iq_balance_mode14: '0'
    iq_balance_mode15: '0'
    iq_balance_mode16: '0'
    iq_balance_mode17: '0'
    iq_balance_mode18: '0'
    iq_balance_mode19: '0'
    iq_balance_mode2: '0'
    iq_balance_mode20: '0'
    iq_balance_mode21: '0'
    iq_balance_mode22: '0'
    iq_balance_mode23: '0'
    iq_balance_mode24: '0'
    iq_balance_mode25: '0'
    iq_balance_mode26: '0'
    iq_balance_mode27: '0'
    iq_balance_mode28: '0'
    iq_balance_mode29: '0'
    iq_balance_mode3: '0'
    iq_balance_mode30: '0'
    iq_balance_mode31: '0'
    iq_balance_mode4: '0'
    iq_balance_mode5: '0'
    iq_balance_mode6: '0'
    iq_balance_mode7: '0'
    iq_balance_mode8: '0'
    iq_balance_mode9: '0'
    maxoutbuf: '0'
    minoutbuf: '0'
    nchan: '1'
    num_mboards: '1'
    sample_rate: samp_rate
    sync: sync
    time_source0: ''
    time_source1: ''
    time_source2: ''
    time_source3: ''
    time_source4: ''
    time_source5: ''
    time_source6: ''
    time_source7: ''
    type: fc32
  states:
    bus_sink: false
    bus_source: false
    bus_structure: null
    coordinate: [168, 92.0]
    rotation: 0
    state: enabled
- name: qtgui_freq_sink_x_0
  id: qtgui_freq_sink_x
  parameters:
    affinity: ''
    alias: ''
    alpha1: '1.0'
    alpha10: '1.0'
    alpha2: '1.0'
    alpha3: '1.0'
    alpha4: '1.0'
    alpha5: '1.0'
    alpha6: '1.0'
    alpha7: '1.0'
    alpha8: '1.0'
    alpha9: '1.0'
    autoscale: 'False'
    average: '0.2'
    axislabels: 'True'
    bw: samp_rate
    color1: '"blue"'
    color10: '"dark blue"'
    color2: '"red"'
    color3: '"green"'
    color4: '"black"'
    color5: '"cyan"'
    color6: '"magenta"'
    color7: '"yellow"'
    color8: '"dark red"'
    color9: '"dark green"'
    comment: ''
    ctrlpanel: 'True'
    fc: center_freq
    fftsize: '1024'
    freqhalf: 'True'
    grid: 'False'
    gui_hint: ''
    label: Relative Gain
    label1: ''
    label10: ''''''
    label2: ''''''
    label3: ''''''
    label4: ''''''
    label5: ''''''
    label6: ''''''
    label7: ''''''
    label8: ''''''
    label9: ''''''
    legend: 'True'
    maxoutbuf: '0'
    minoutbuf: '0'
    name: '""'
    nconnections: '1'
    norm_window: 'False'
    showports: 'False'
    tr_chan: '0'
    tr_level: '0.0'
    tr_mode: qtgui.TRIG_MODE_FREE
    tr_tag: '""'
    type: complex
    units: dB
    update_time: '0.10'
    width1: '1'
    width10: '1'
    width2: '1'
    width3: '1'
    width4: '1'
    width5: '1'
    width6: '1'
    width7: '1'
    width8: '1'
    width9: '1'
    wintype: window.WIN_BLACKMAN_hARRIS
    ymax: '10'
    ymin: '-140'
  states:
    bus_sink: false
    bus_source: false
    bus_structure: null
    coordinate: [448, 36.0]
    rotation: 0
    state: enabled
- name: qtgui_freq_sink_x_1
  id: qtgui_freq_sink_x
  parameters:
    affinity: ''
    alias: ''
    alpha1: '1.0'
    alpha10: '1.0'
    alpha2: '1.0'
    alpha3: '1.0'
    alpha4: '1.0'
    alpha5: '1.0'
    alpha6: '1.0'
    alpha7: '1.0'
    alpha8: '1.0'
    alpha9: '1.0'
    autoscale: 'False'
    average: '0.1'
    axislabels: 'True'
    bw: samp_rate
    color1: '"blue"'
    color10: '"dark blue"'
    color2: '"red"'
    color3: '"green"'
    color4: '"black"'
    color5: '"cyan"'
    color6: '"magenta"'
    color7: '"yellow"'
    color8: '"dark red"'
    color9: '"dark green"'
    comment: ''
    ctrlpanel: 'True'
    fc: channel_freq
    fftsize: '1024'
    freqhalf: 'True'
    grid: 'False'
    gui_hint: ''
    label: Relative Gain
    label1: ''
    label10: ''''''
    label2: ''''''
    label3: ''''''
    label4: ''''''
    label5: ''''''
    label6: ''''''
    label7: ''''''
    label8: ''''''
    label9: ''''''
    legend: 'True'
    maxoutbuf: '0'
    minoutbuf: '0'
    name: '""'
    nconnections: '1'
    norm_window: 'False'
    showports: 'False'
    tr_chan: '0'
    tr_level: '0.0'
    tr_mode: qtgui.TRIG_MODE_FREE
    tr_tag: '""'
    type: complex
    units: dB
    update_time: '0.10'
    width1: '1'
    width10: '1'
    width2: '1'
    width3: '1'
    width4: '1'
    width5: '1'
    width6: '1'
    width7: '1'
    width8: '1'
    width9: '1'
    wintype: window.WIN_BLACKMAN_hARRIS
    ymax: '10'
    ymin: '-140'
  states:
    bus_sink: false
    bus_source: false
    bus_structure: null
    coordinate: [568, 356.0]
    rotation: 0
    state: enabled
- name: rational_resampler_xxx_0
  id: rational_resampler_xxx
  parameters:
    affinity: ''
    alias: ''
    comment: ''
    decim: '5'
    fbw: '0'
    interp: '12'
    maxoutbuf: '0'
    minoutbuf: '0'
    taps: ''
    type: ccc
  states:
    bus_sink: false
    bus_source: false
    bus_structure: null
    coordinate: [864, 132.0]
    rotation: 0
    state: enabled

connections:
- [analog_sig_source_x_0, '0', blocks_multiply_xx_0, '1']
- [analog_wfm_rcv_0, '0', blocks_multiply_const_vxx_0, '0']
- [blocks_multiply_const_vxx_0, '0', audio_sink_0, '0']
- [blocks_multiply_xx_0, '0', low_pass_filter_0, '0']
- [blocks_multiply_xx_0, '0', qtgui_freq_sink_x_1, '0']
- [low_pass_filter_0, '0', rational_resampler_xxx_0, '0']
- [osmosdr_source_0, '0', blocks_multiply_xx_0, '0']
- [osmosdr_source_0, '0', qtgui_freq_sink_x_0, '0']
- [rational_resampler_xxx_0, '0', analog_wfm_rcv_0, '0']

metadata:
  file_format: 1
// Cannot Find with Title in one line - stacked on mobile
.cannot-find-section{
    padding: _res-m(130) _res-m(121);
    @include screen-sm-min{
        padding: _res(52) 0;
        >.ari-row{
            @include _flex($halign: space-between);
            &::before, &::after{
                display: none;
            }
        }
        .cannot-find-search{
            width: 80%;
        }
    }
    @include section-padding;
}
.cannot-find-title{
    margin-bottom: _res-m(63);
    @include screen-sm-min{
        margin-bottom: 0;
        width: 20%;
    }
    .title{
        color: $brand-secondary;
        font-family: $headings-font-family;
        font-weight: normal;
        font-size: _res-m(74);
        text-align: center;
        line-height: 1.2;
        @include screen-sm-min{
            font-size: _res(38);
            text-align: left;
        }
    }
}
.cannot-find-search{
    .Advanced-Inventory-Search_1-0-2{
        .advanced-inventory-search.collapse-never{
            padding: 0;
            .row-flex{
                @include screen-xs{
                    flex-direction: column;
                    gap: _res-m(63);
                }
                @include screen-sm-min{
                    flex-wrap: nowrap;
                    gap: _res(27);
                }
                .column-auto.collapse{
                    padding: 0;
                    @include screen-xs{
                        width: 100% !important;
                    }
                    select{
                        border: none;
                        height: _res-m(128);
                        font-size: _res-m(33);
                        margin: 0;
                        padding: 0 _res-m(47);
                        @include screen-sm-min{
                            height: _res(31,54);
                            font-size: _res(10,14);
                            padding: 0 _res(20);
                        }
                    }
                    &.column-btn{
                        #viewResults{
                            @include btn-style;
                            width: 100%;
                            font-size: 0;
                            &::before{
                                content: "Search";
                                font-size: _res-m(30);
                            }
                            @include screen-sm-min{
                                font-size: 0;
                                &::before{
                                    font-size: _res(10,18);
                                }
                            }
                        }
                    }
                    &:nth-child(5), &:last-child{
                        display: none !important;
                    }
                }
            }
        }
    }
}
internal final class NW_PurchAgreementHelper
{
    public static PurchAgreementId CreatePA(NW_SigningContract contract)
    {
        AgreementHeaderDefault agreementHeaderDefault;
        PurchAgreementHeader purchAgreementHeader;
        PurchAgreementHeaderDefault purchAgreementHeaderDefault;
        PurchAgreementFormDatasourceManager Manager;
        Common  purchSalesagreementHeaderDefault;
        PurchAgreementId tmpAgreementId;
        NumberSeq num;
        NW_SigningContractLine  NW_SigningContractLine;

        num = NumberSeq::newGetNum(PurchParameters::numRefPurchAgreementId());
        tmpAgreementId = num.num();
        VendTable VendTable = VendTable::find(contract.VendAccount);
        purchAgreementHeader.clear();
        purchAgreementHeader.initValue();
        purchAgreementHeader.VendAccount = contract.VendAccount;
        purchAgreementHeader.initFromVendTable();
        purchAgreementHeader.AgreementDescription= contract.AgreementDescription;
        purchAgreementHeader.PurchNumberSequence = tmpAgreementId;
        purchAgreementHeader.DocumentTitle = tmpAgreementId;
        purchAgreementHeader.DefaultAgreementLineType = CommitmentType::ProductCategory;
        purchAgreementHeader.DefaultAgreementLineEffectiveDate = contract.DefaultAgreementLineEffectiveDate;
        purchAgreementHeader.DefaultAgreementLineExpirationDate = contract.DefaultAgreementLineExpirationDate;
        purchAgreementHeader.NADepartment = contract.NADepartment;

        agreementHeaderDefault.clear();
        agreementHeaderDefault.initValue();

        purchAgreementHeaderDefault.clear();
        purchAgreementHeaderDefault.initValue();

        purchAgreementHeader.doInsert(); // skip insert code
        agreementHeaderDefault.initFromVendTable(VendTable);
        agreementHeaderDefault.AgreementHeader = purchAgreementHeader.RecId;
        agreementHeaderDefault.insert();
        purchAgreementHeaderDefault.initFromVendTable(VendTable);
        purchAgreementHeaderDefault.PurchaseAgreementHeader = purchAgreementHeader.RecId;
        purchAgreementHeaderDefault.insert();

        // copy attatchement 
        Docu::copy(contract, purchAgreementHeader);

        //lines
        AgreementLine agreementLine;
        //AgreementLineQuantityCommitment agreementLineQuantity;
        AgreementLineVolumeCommitment agreementLineVolume;
        AgreementLineDefault agreementLineDefault;
        InventDimId inventDimId = InventDim::findOrCreateBlank().inventDimId;

        while select NW_SigningContractLine
            where NW_SigningContractLine.HeaderRequestId == contract.RequestId
        {
            //RecId category = 5637147352;
            
            agreementLineVolume.clear();
            agreementLineVolume.Agreement = purchAgreementHeader.RecId;
            agreementLineVolume.Category = NW_SigningContractLine.Category;
            agreementLineVolume.InventDimId = inventDimId;
            agreementLineVolume.InventDimDataAreaId = curExt();
            agreementLineVolume.LineDiscountPercent = NW_SigningContractLine.LineDiscountPercent;
            agreementLineVolume.CommitedAmount = NW_SigningContractLine.CommitedAmount;
            agreementLineVolume.EffectiveDate = NW_SigningContractLine.EffectiveDate;
            agreementLineVolume.ExpirationDate = NW_SigningContractLine.ExpirationDate;
            agreementLineVolume.DefaultDimension = NW_SigningContractLine.DefaultDimension;
            agreementLineVolume.insert();

            //agreementLineDefault.ProjectActivityNumberDataAreaId = companyView.id;
            agreementLineDefault.AgreementLine = agreementLineVolume.RecId;
            //agreementLineDefault.ProjectCategoryDataAreaId = companyView.id;
            //agreementLineDefault.SalesCommissionGroupDataAreaId = companyView.id;
            //agreementLineDefault.SalesModeOfDeliveryDataAreaId = companyView.id;
            agreementLineDefault.insert();
        }
        return tmpAgreementId;
    }

    public static void CancelPA(PurchAgreementId Id)
    {
        PurchAgreementHeader    PurchAgreementHeader;
        ttsbegin;
        select forupdate PurchAgreementHeader where PurchAgreementHeader.PurchNumberSequence == Id;
        PurchAgreementHeader.AgreementState = AgreementState::Closed;
        PurchAgreementHeader.update();
        ttscommit;
    }

    public static void ChangePA(PurchAgreementId Id, NW_SigningContract contract)
    {
        NW_SigningContractLine  NW_SigningContractLine;
        PurchAgreementHeader    PurchAgreementHeader;

        ttsbegin;
        select forupdate PurchAgreementHeader where PurchAgreementHeader.PurchNumberSequence == Id;
        PurchAgreementHeader.DefaultAgreementLineEffectiveDate = contract.DefaultAgreementLineEffectiveDate;
        PurchAgreementHeader.DefaultAgreementLineExpirationDate = contract.DefaultAgreementLineExpirationDate;
        PurchAgreementHeader.NADepartment = contract.NADepartment;
        PurchAgreementHeader.update();
        ttscommit;
        // lines
        AgreementLine agreementLine;
        //AgreementLineQuantityCommitment agreementLineQuantity;
        AgreementLineVolumeCommitment agreementLineVolume;
        AgreementLineDefault agreementLineDefault;
        InventDimId inventDimId = InventDim::findOrCreateBlank().inventDimId;
        ttsbegin;
        while select NW_SigningContractLine
            where NW_SigningContractLine.HeaderRequestId == contract.RequestId
        {
            if(NW_SigningContractLine.AgreementRecId) // updare
            {
                select forupdate agreementLineVolume where agreementLineVolume.RecId == NW_SigningContractLine.AgreementRecId;
                agreementLineVolume.CommitedAmount = NW_SigningContractLine.CommitedAmount;
                agreementLineVolume.EffectiveDate = NW_SigningContractLine.EffectiveDate;
                agreementLineVolume.ExpirationDate = NW_SigningContractLine.ExpirationDate;
                agreementLineVolume.DefaultDimension = NW_SigningContractLine.DefaultDimension;
                agreementLineVolume.update();
            }
            else //insert
            {
                agreementLineVolume.clear();
                agreementLineVolume.Agreement = purchAgreementHeader.RecId;
                agreementLineVolume.Category = NW_SigningContractLine.Category;
                agreementLineVolume.InventDimId = inventDimId;
                agreementLineVolume.InventDimDataAreaId = curExt();
                agreementLineVolume.LineDiscountPercent = NW_SigningContractLine.LineDiscountPercent;
                agreementLineVolume.CommitedAmount = NW_SigningContractLine.CommitedAmount;
                agreementLineVolume.EffectiveDate = NW_SigningContractLine.EffectiveDate;
                agreementLineVolume.ExpirationDate = NW_SigningContractLine.ExpirationDate;
                agreementLineVolume.DefaultDimension = NW_SigningContractLine.DefaultDimension;
                agreementLineVolume.insert();

                agreementLineDefault.AgreementLine = agreementLineVolume.RecId;
                agreementLineDefault.insert();
            }
        }
        ttscommit;
    }

    public static void SendEmailGeneratedPA(str Id)
    {
        NW_ProcurmentEmailSetup EmailSetup;
        NW_SigningContract          contract;
        Email                       ToEmail;
        select EmailSetup
            where EmailSetup.NW_ProcurmentEmailTypes == NW_ProcurmentEmailTypes::GeneratedPA;
        select firstonly contract where contract.RequestId == Id;
        if(EmailSetup)
        {
            str body="";
            SysMailerMessageBuilder builder = new SysMailerMessageBuilder();
            Body=EmailSetup.jobAdText;
            Body=strReplace(Body,"{RequestId}", contract.RequestId);
            Body=strReplace(Body,"{AgreementId}", contract.PurchNumberSequence);
            Body=strReplace(Body,"{Type}", enum2Str(contract.ContractType));
            Body=strReplace(Body,"{VendorName}", contract.vendName());
            Body=strReplace(Body,"{EffectiveDate}", any2Str(contract.DefaultAgreementLineEffectiveDate));
            Body=strReplace(Body,"{ExpirationDate}",any2Str(contract.DefaultAgreementLineExpirationDate));
            builder.setSubject(EmailSetup.Subject);
            builder.setBody(body,true);
            builder.setFrom(EmailSetup.Sender);
            builder.addTo(VendTable::find(contract.VendAccount).email());
            SysMailerFactory::getNonInteractiveMailer().sendNonInteractive(builder.getMessage());
        }
    }

    public static void SendEmailSendSigningToVendor(str Id)
    {
        NW_ProcurmentEmailSetup EmailSetup;
        NW_SigningContract          contract;
        Email                       ToEmail;
        select EmailSetup
            where EmailSetup.NW_ProcurmentEmailTypes == NW_ProcurmentEmailTypes::SendSigningToVendor;
        select firstonly contract where contract.RequestId == Id;
        if(EmailSetup)
        {
            str body="";
            SysMailerMessageBuilder builder = new SysMailerMessageBuilder();
            Body=EmailSetup.jobAdText;
            Body=strReplace(Body,"{RequestId}", contract.RequestId);
            Body=strReplace(Body,"{AgreementId}", contract.PurchNumberSequence);
            Body=strReplace(Body,"{Type}", enum2Str(contract.ContractType));
            Body=strReplace(Body,"{VendorName}", contract.vendName());
            Body=strReplace(Body,"{EffectiveDate}",any2Str(contract.DefaultAgreementLineEffectiveDate));
            Body=strReplace(Body,"{ExpirationDate}",any2Str(contract.DefaultAgreementLineExpirationDate));
            builder.setSubject(EmailSetup.Subject);
            builder.setBody(body,true);
            builder.setFrom(EmailSetup.Sender);
            builder.addTo(VendTable::find(contract.VendAccount).email());
            SysMailerFactory::getNonInteractiveMailer().sendNonInteractive(builder.getMessage());
        }
    }

    public static void SendEmailVendorAction(str Id)
    {
        NW_ProcurmentEmailSetup EmailSetup;
        NW_SigningContract          contract;
        Email                       ToEmail;
        select EmailSetup
            where EmailSetup.NW_ProcurmentEmailTypes == NW_ProcurmentEmailTypes::VendorAction;
        select firstonly contract where contract.RequestId == Id;
        if(EmailSetup)
        {
            str body="";
            SysMailerMessageBuilder builder = new SysMailerMessageBuilder();
            Body=EmailSetup.jobAdText;
            Body=strReplace(Body,"{RequestId}", contract.RequestId);
            Body=strReplace(Body,"{AgreementId}", contract.PurchNumberSequence);
            Body=strReplace(Body,"{Type}", enum2Str(contract.ContractType));
            Body=strReplace(Body,"{VendorName}", contract.vendName());
            Body=strReplace(Body,"{EffectiveDate}",any2Str(contract.DefaultAgreementLineEffectiveDate));
            Body=strReplace(Body,"{ExpirationDate}",any2Str(contract.DefaultAgreementLineExpirationDate));
            builder.setSubject(EmailSetup.Subject);
            builder.setBody(body,true);
            builder.setFrom(EmailSetup.Sender);
            builder.addTo(VendTable::find(contract.VendAccount).email());
            SysMailerFactory::getNonInteractiveMailer().sendNonInteractive(builder.getMessage());
        }
    }

}
/* Safari 11+ */
@media not all and (min-resolution:.001dpcm)
{ @supports (-webkit-appearance:none) and (stroke-color:transparent) {

  Your Code here
  
}}
/* Test website on real Safari 11+ */
<P CLASS=”text-eclips”>hello i am shailesh gupta.</P>


.text-eclips{
   display: -webkit-box;
   max-width: 100%;
   -webkit-line-clamp: 2;
   -webkit-box-orient: vertical;
   overflow: hidden;
   text-overflow: ellipsis;
}
star

Fri Dec 20 2024 12:26:10 GMT+0000 (Coordinated Universal Time) https://appticz.com/hotel-booking-script

@aditi_sharma_

star

Fri Dec 20 2024 09:52:36 GMT+0000 (Coordinated Universal Time)

@Naveen@1833 #nodejs

star

Fri Dec 20 2024 03:53:21 GMT+0000 (Coordinated Universal Time)

@Pulak

star

Fri Dec 20 2024 00:10:45 GMT+0000 (Coordinated Universal Time) https://help.salesforce.com/s/articleView?id=platform.custommetadatatypes_formula_fields.htm&type=5

@dannygelf #salesforce #custommetadatatype #flow #cmdt

star

Thu Dec 19 2024 23:42:17 GMT+0000 (Coordinated Universal Time)

@BilalRaza12

star

Thu Dec 19 2024 22:10:51 GMT+0000 (Coordinated Universal Time)

@shirnunn

star

Thu Dec 19 2024 16:22:05 GMT+0000 (Coordinated Universal Time)

@RehmatAli2024 #deluge

star

Thu Dec 19 2024 13:38:02 GMT+0000 (Coordinated Universal Time) https://www.linkedin.com/learning/javascript-essential-training/javascript-the-soil-from-which-the-modern-web-grows

@NaviAndrei #javascript

star

Thu Dec 19 2024 12:55:50 GMT+0000 (Coordinated Universal Time) https://appticz.com/uber-for-handyman-app-development

@davidscott

star

Thu Dec 19 2024 11:32:39 GMT+0000 (Coordinated Universal Time)

@paulbarry

star

Thu Dec 19 2024 11:05:25 GMT+0000 (Coordinated Universal Time)

@Huzaifa

star

Thu Dec 19 2024 01:42:46 GMT+0000 (Coordinated Universal Time) https://stackoverflow.com/questions/76127897/netsuite-results-where-one-field-is-true-and-the-other-is-false-that-it-returns

@susilogn

star

Thu Dec 19 2024 01:42:20 GMT+0000 (Coordinated Universal Time) https://stackoverflow.com/questions/76127897/netsuite-results-where-one-field-is-true-and-the-other-is-false-that-it-returns

@susilogn

star

Wed Dec 18 2024 18:25:49 GMT+0000 (Coordinated Universal Time)

@gbritgs

star

Wed Dec 18 2024 16:17:41 GMT+0000 (Coordinated Universal Time)

@FOrestNAtion

star

Wed Dec 18 2024 16:16:54 GMT+0000 (Coordinated Universal Time)

@FOrestNAtion

star

Wed Dec 18 2024 15:37:27 GMT+0000 (Coordinated Universal Time) https://dev.to/shafayeat/mastering-concurrency-and-parallelism-in-typescript-1bgf

@StephenThevar #nodejs #javascript

star

Wed Dec 18 2024 15:00:37 GMT+0000 (Coordinated Universal Time)

@MinaTimo

star

Wed Dec 18 2024 13:38:20 GMT+0000 (Coordinated Universal Time)

@Samuel1347

star

Wed Dec 18 2024 13:28:13 GMT+0000 (Coordinated Universal Time) https://maticz.com/cryptocurrency-payment-gateway-development

@Ameliasebastian #white #crypto

star

Wed Dec 18 2024 13:24:28 GMT+0000 (Coordinated Universal Time) https://www.accordiespartiti.it/accordi/internazionali/pink-floyd/wish-you-were-here-3/

@cinzia

star

Wed Dec 18 2024 13:11:55 GMT+0000 (Coordinated Universal Time) https://maticz.com/crypto-banking-software

@Ameliasebastian #white #crypto

star

Wed Dec 18 2024 12:59:15 GMT+0000 (Coordinated Universal Time) https://maticz.com/white-label-crypto-payment-gateway

@Ameliasebastian #white #crypto

star

Wed Dec 18 2024 10:29:05 GMT+0000 (Coordinated Universal Time)

@vishalsingh21

star

Wed Dec 18 2024 10:19:09 GMT+0000 (Coordinated Universal Time) https://home.openweathermap.org/api_keys

@A_Znk

star

Wed Dec 18 2024 10:07:25 GMT+0000 (Coordinated Universal Time) https://www.emailsguru.com/ost/pst/

@adamsmith #osttopst #convertosttopst #osttopstconverter #ost #pst #emails #tools

star

Wed Dec 18 2024 10:03:12 GMT+0000 (Coordinated Universal Time) https://tobiasahlin.com/blog/hiding-an-element-if-its-empty/

@zaki

star

Wed Dec 18 2024 08:59:40 GMT+0000 (Coordinated Universal Time)

@ziaurrehman #html

star

Wed Dec 18 2024 07:46:43 GMT+0000 (Coordinated Universal Time)

@StefanoGi

star

Wed Dec 18 2024 06:45:55 GMT+0000 (Coordinated Universal Time)

@omnixima #javascript

star

Wed Dec 18 2024 06:20:02 GMT+0000 (Coordinated Universal Time) https://www.earnlogic.in/gst-registration-in-coimbatore.php

@earnlogic #gstregistration in coimbatore

star

Wed Dec 18 2024 06:19:38 GMT+0000 (Coordinated Universal Time) https://www.earnlogic.in/copyright-registration-in-coimbatore.php

@earnlogic #copyrightregistration in coimbatore

star

Wed Dec 18 2024 06:19:01 GMT+0000 (Coordinated Universal Time) https://www.earnlogic.in/trademark-registration-in-coimbatore.php

@earnlogic #trademarkregistration in coimbatore #trademarkregistration

star

Wed Dec 18 2024 03:11:30 GMT+0000 (Coordinated Universal Time)

@akshva

star

Wed Dec 18 2024 02:49:03 GMT+0000 (Coordinated Universal Time)

@akshva

star

Wed Dec 18 2024 02:45:28 GMT+0000 (Coordinated Universal Time)

@akshva

star

Wed Dec 18 2024 01:57:21 GMT+0000 (Coordinated Universal Time)

@akshva

star

Wed Dec 18 2024 01:21:55 GMT+0000 (Coordinated Universal Time)

@akshva

star

Wed Dec 18 2024 01:19:19 GMT+0000 (Coordinated Universal Time)

@akshva

star

Wed Dec 18 2024 00:53:28 GMT+0000 (Coordinated Universal Time)

@akshva

star

Tue Dec 17 2024 22:24:42 GMT+0000 (Coordinated Universal Time)

@marcopinero #bash

star

Tue Dec 17 2024 21:31:25 GMT+0000 (Coordinated Universal Time)

@Yakostoch #c++

star

Tue Dec 17 2024 13:50:31 GMT+0000 (Coordinated Universal Time) https://appticz.com/zomato-clone

@aditi_sharma_

star

Tue Dec 17 2024 11:35:58 GMT+0000 (Coordinated Universal Time) https://greatscottgadgets.com/sdr/grc/lesson1.grc

@Alexlotl

star

Tue Dec 17 2024 11:10:42 GMT+0000 (Coordinated Universal Time)

@vishalsingh21

star

Tue Dec 17 2024 10:41:38 GMT+0000 (Coordinated Universal Time)

@MinaTimo

star

Tue Dec 17 2024 07:38:33 GMT+0000 (Coordinated Universal Time) undefined

@Fudgiebars

star

Tue Dec 17 2024 06:41:37 GMT+0000 (Coordinated Universal Time)

@sayali14

star

Tue Dec 17 2024 06:41:19 GMT+0000 (Coordinated Universal Time)

@sayali14

Save snippets that work with our extensions

Available in the Chrome Web Store Get Firefox Add-on Get VS Code extension