403Webshell
Server IP : 103.234.187.230  /  Your IP : 216.73.216.216
Web Server : Apache
System : Linux lserver42043-ind.megavelocity.net 3.10.0-1160.108.1.el7.x86_64 #1 SMP Thu Jan 25 16:17:31 UTC 2024 x86_64
User : apache ( 48)
PHP Version : 7.4.33
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : ON  |  Sudo : ON  |  Pkexec : ON
Directory :  /var/www/html/api.hellogtx.com/apihellogtx/flightinventory/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /var/www/html/api.hellogtx.com/apihellogtx/flightinventory/serializers.py
from rest_framework import serializers
from .models import FlightInventory, AirLineInventory, AirLinePrice, CancellationRules, AirLinePriceHistory, \
    AirLinePriceUpdateHistory, agencyToAgencyMapping
from datetime import date


class AirLinePriceHistorySerializer(serializers.ModelSerializer):
    status = serializers.SerializerMethodField()
    cancellation_charge = serializers.SerializerMethodField()

    class Meta:
        model = AirLinePriceHistory

        fields = ('status', 'cancellation_charge')
        """
        fields = ('HistoryId', 'AirLinePrice', 'ReferenceNo', 'Adult', 'Child', 'Infant', 'Inventory',
                  'InventoryStatus', 'UpdatedDate', 'ReleasedDate', 'status', 'cancellation_charge')
        """

    def get_status(self, instance):
        return True

    def get_cancellation_charge(self, instance):
        return 600


class CancellationRulesSerializer(serializers.ModelSerializer):
    class Meta:
        model = CancellationRules
        fields = ('id', 'SecurityKey', 'AirLinePrice', 'Days', 'PercentageValue', 'FixedVal', 'IsMaster', 'CreatedDate',
                  'UpdatedDate', 'IsMarkForDelete')


class AirLinePriceSerializer(serializers.ModelSerializer):
    class Meta:
        model = AirLinePrice
        fields = ('id', 'IsRefundable', 'FromDate', 'OnwardGroupPNR', 'OnwardAutoTicket', 'InDate', 'InwardGroupPNR',
                  'InwardAutoTicket', 'Seats', 'Hold', 'Sold', 'CurrentSeat', 'MinimumBooking', 'CutOffDate', 'Fare',
                  'Taxes', 'MarkupType', 'B2CMarkup', 'Markup', 'InfantFare', 'InfantMarkup', 'IsActive')


class AirLineInventorySerializer(serializers.ModelSerializer):
    class Meta:
        model = AirLineInventory
        fields = ('id', 'FlightType', 'AirLines', 'FlightNumber', 'FromCityCode', 'FromTerminal', 'ToCityCode',
                  'ToTerminal', 'Stops', 'DepartureTime', 'EstimateHours', 'ArrivalTime')


class FlightInventorySerializer(serializers.ModelSerializer):
    airlineinventories = AirLineInventorySerializer(many=True)
    airlineprices = AirLinePriceSerializer(many=True)

    class Meta:
        model = FlightInventory
        fields = (
            'id', 'Title', 'SecurityKey', 'Title', 'FlightType', 'Supplier', 'Currency', 'CheckInLuggage',
            'InCabinLuggage',
            'Fare',
            'CancellationPolicy', 'InternalRemarks', 'IsActive', 'CreatedBy', 'CreatedOn', 'OnwardFromAirportCode',
            'OnwardToAirportCode', 'InwardFromAirportCode', 'InwardToAirportCode', 'airlineinventories',
            'airlineprices')

    def create(self, validated_data):
        temp_airline_inventories = validated_data.pop('airlineinventories')
        temp_airline_prices = validated_data.pop('airlineprices')
        new_book = FlightInventory.objects.create(**validated_data)
        for i in temp_airline_inventories:
            AirLineInventory.objects.create(**i, FlightInventory=new_book)
        for j in temp_airline_prices:
            AirLinePrice.objects.create(**j, FlightInventory=new_book)
        return new_book

    def update(self, instance, validated_data):
        temp_airline_prices = dict((i.id, i) for i in instance.airlineprices.all())
        temp_airline_inventories = dict((i.id, i) for i in instance.airlineinventories.all())
        request = self.context['request']
        airline_price = request.data.get('airlineprices', [])
        for airline_price_data in airline_price:
            if 'id' in airline_price_data:
                airline_price_obj = AirLinePrice.objects.filter(id=airline_price_data['id']).first()
            else:
                airline_price_obj = None
            if airline_price_obj is not None:
                temp_airline_prices.pop(int(airline_price_data['id']))
                airline_serializer = AirLinePriceSerializer(airline_price_obj, data=airline_price_data)
                if airline_serializer.is_valid():
                    if 'CurrentSeat' not in airline_price_data or int(airline_price_data['CurrentSeat']) >= 0:
                        airline_serializer.save()
            else:
                AirLinePrice.objects.create(FlightInventory=instance, **airline_price_data)

        if len(temp_airline_prices) > 0:
            for price_data in temp_airline_prices.values():
                price_data.delete()

        airline_inventory = request.data.get('airlineinventories', [])
        for airline_inventory_data in airline_inventory:
            if 'id' in airline_inventory_data:
                airline_inventory_obj = AirLineInventory.objects.filter(id=airline_inventory_data['id']).first()
            else:
                airline_inventory_obj = None
            if airline_inventory_obj is not None:
                temp_airline_inventories.pop(int(airline_inventory_data['id']))
                airline_inventory_serializer = AirLineInventorySerializer(airline_inventory_obj,
                                                                          data=airline_inventory_data)
                if airline_inventory_serializer.is_valid():
                    airline_inventory_serializer.save()
            else:
                AirLineInventory.objects.create(FlightInventory=instance, **airline_inventory_data)

        if len(temp_airline_inventories) > 0:
            for air_inventory_data in temp_airline_inventories.values():
                air_inventory_data.delete()

        instance.__dict__.update(validated_data)
        instance.save()
        return instance


class IsDeleteFlightInventorySerializer(serializers.ModelSerializer):
    class Meta:
        model = FlightInventory
        fields = ('IsMarkForDelete',)

    def update(self, instance, validated_data):
        request = self.context['request']
        instance.IsMarkForDelete = request.data.get('IsMarkForDelete', instance.SecurityKey)
        instance.save()
        return instance


class UpdateIsRefundableAirLinePriceSerializer(serializers.ModelSerializer):
    class Meta:
        model = AirLinePrice
        fields = ('IsRefundable',)

    def update(self, instance, validated_data):
        request = self.context['request']
        instance.IsRefundable = request.data.get('IsRefundable', 0)
        instance.save()
        return instance


class AirLinePriceUpdateHistorySerializer(serializers.ModelSerializer):
    class Meta:
        model = AirLinePriceUpdateHistory
        fields = ('PSeat', 'PHold', 'PSold', 'PCurrent', 'AvailableSeat')


class AgencyToAgencyMappingSerializer(serializers.ModelSerializer):
    class Meta:
        model = agencyToAgencyMapping
        fields = ('SecurityKey', 'MasterSecurityKey')

    def create(self, validated_data):
        request = self.context['request']
        security_key = request.data.get('SecurityKey', None)
        master_security_key = request.data.get('MasterSecurityKey', None)
        agency_mapping_list = agencyToAgencyMapping.objects.filter(SecurityKey=security_key,
                                                                   MasterSecurityKey=master_security_key).first()
        new_book = []
        if agency_mapping_list is None:
            new_book = agencyToAgencyMapping.objects.create(**validated_data)
        return new_book


class UpdateSeatInPriceTableSerializer(serializers.ModelSerializer):
    class Meta:
        model = AirLinePrice
        fields = ('CurrentSeat', 'Hold', 'Seats', 'Sold',)
        read_only_fields = ('Hold', 'Seats', 'Sold',)

    def to_representation(self, instance):
        if self.context['request'].method in ['PATCH', 'PUT']:
            if type(instance) == dict:
                return instance
        return super().to_representation(instance)

    def update(self, instance, validated_data):
        return_status = True
        result = {}
        instance1 = instance
        airline_price_update_history_data = {}
        request = self.context['request']
        security_key = request.data.get('securityKey', None)
        # data = super(UpdateSeatInPriceTableSerializer, self).to_representation(instance)
        available_seat = int(request.data.get('CurrentSeat', 0))
        previous_seats = int(instance.Seats)
        previous_sold_seats = int(instance.Sold)
        previous_hold_seats = int(instance.Hold)
        previous_current_seats = int(instance.CurrentSeat)
        previous_current_seat_with_hold = previous_current_seats + previous_hold_seats
        if previous_current_seat_with_hold > available_seat:
            check_inventory = previous_current_seats - (previous_current_seat_with_hold - available_seat)
            if check_inventory >= 0:
                instance.CurrentSeat = check_inventory
                instance.Seats = previous_seats - (previous_current_seat_with_hold - available_seat)
                instance.save()
                airline_price_update_history_data['PSeat'] = previous_seats
                airline_price_update_history_data['PHold'] = previous_hold_seats
                airline_price_update_history_data['PSold'] = previous_sold_seats
                airline_price_update_history_data['PCurrent'] = previous_current_seats
                airline_price_update_history_data['AvailableSeat'] = available_seat
                AirLinePriceUpdateHistory.objects.create(AirLinePrice=instance1, **airline_price_update_history_data)
                return_status = True
            else:
                return_status = False
        elif available_seat > previous_current_seat_with_hold:
            calculate_price = (available_seat - (previous_hold_seats + previous_current_seats))
            instance.CurrentSeat = previous_current_seats + calculate_price
            instance.Seats = (previous_seats + calculate_price)
            instance.save()
            airline_price_update_history_data['PSeat'] = previous_seats
            airline_price_update_history_data['PHold'] = previous_hold_seats
            airline_price_update_history_data['PSold'] = previous_sold_seats
            airline_price_update_history_data['PCurrent'] = previous_current_seats
            airline_price_update_history_data['AvailableSeat'] = available_seat
            AirLinePriceUpdateHistory.objects.create(AirLinePrice=instance1, **airline_price_update_history_data)
            return_status = True
        return {'status': return_status, "CurrentSeat": instance.CurrentSeat, "Hold": instance.Hold,
                "Seats": instance.Seats, "Sold": instance.Sold}

Youez - 2016 - github.com/yon3zu
LinuXploit