Exemple #1
0
    def __init__(self):
        """The Constructor for ObuSummary class"""

        self.postgres = PostgreSQL()
        self.couch_query = Queries()
        self.unit_conversion = UnitConversion()
        super(ObuSummary, self).__init__()
Exemple #2
0
 def __init__(self):
     """The Constructor for DeviceOverview class"""
     self.postgres = PostgreSQL()
     self.couch_query = Queries()
     self.unit_conversion = UnitConversion()
     self.calc = calculate_alarm_trigger.CalculateAlarmTrigger()
     super(DeviceOverview, self).__init__()
Exemple #3
0
    def failover(self):
        """
        This API is for Getting Failover
        ---
        tags:
          - Vessel
        produces:
          - application/json
        parameters:
          - name: token
            in: header
            description: Token
            required: true
            type: string
          - name: userid
            in: header
            description: User ID
            required: true
            type: string
          - name: vessel_id
            in: query
            description: Vessel ID
            required: true
            type: string
          - name: date
            in: query
            description: Epoch date
            required: false
            type: string
          - name: limit
            in: query
            description: Limit
            required: true
            type: integer
          - name: page
            in: query
            description: Page
            required: true
            type: integer
          - name: sort_type
            in: query
            description: Sort Type
            required: false
            type: string
          - name: sort_column
            in: query
            description: Sort Column
            required: false
            type: string
          - name: filter_column
            in: query
            description: Filter Column
            required: false
            type: string
          - name: filter_value
            in: query
            description: Filter Value
            required: false
            type: string

        responses:
          500:
            description: Error
          200:
            description: Vessel Failover
        """

        data = {}

        # VESSEL ID
        vessel_id = request.args.get('vessel_id')
        epoch_date = request.args.get('date')
        limit = int(request.args.get('limit'))
        page = int(request.args.get('page'))
        sort_type = request.args.get('sort_type')
        sort_column = request.args.get('sort_column')
        filter_column = request.args.get('filter_column')
        filter_value = request.args.get('filter_value')

        # GET DATA
        token = request.headers.get('token')
        userid = request.headers.get('userid')

        # CHECK TOKEN
        token_validation = self.validate_token(token, userid)

        if not token_validation:
            data["alert"] = "Invalid Token"
            data['status'] = 'Failed'

            # RETURN ALERT
            return self.return_data(data)

        if not vessel_id:
            data["alert"] = "Please complete parameters!"
            data['status'] = 'Failed'

            # RETURN ALERT
            return self.return_data(data)

        filter_mod_val = ""
        filter_subcat = ""
        filter_option = ""
        filter_val = ""
        if filter_column and filter_value:

            i = 0
            for filter_col in filter_column.split(","):
                if filter_col == "category":
                    filter_mod_val = filter_value.split(",")[i]
                elif filter_col == "sub_category":
                    filter_subcat = filter_value.split(",")[i]
                elif filter_col == "option":
                    filter_option = filter_value.split(",")[i]
                elif filter_col == "value":
                    filter_val = filter_value.split(",")[i]
                i += 1

        data = {}

        data['data'] = []
        total_page = 0

        if epoch_date:

            values = self.couch_query.get_complete_values(
                vessel_id,
                "FAILOVER",
                str(self.epoch_default),
                str(epoch_date),
                flag='one_doc'
            )

        else:

            values = self.couch_query.get_complete_values(
                vessel_id,
                "FAILOVER",
                flag='one_doc'
            )

        if values:

            all_values = values['value']
            timestamp = values['timestamp']

            temp_datas, options, categories = self.values_wrapper("FAILOVER",
                                                                  all_values,
                                                                  timestamp
                                                                 )
            convert = UnitConversion()
            temp_datas = convert.check_unit(temp_datas)
            temp_datas = self.add_device_subcategory(temp_datas)
            temp_datas = self.add_device_category(temp_datas)
            rows = self.value_filter(filter_mod_val, filter_subcat,
                                     filter_option, filter_val, temp_datas)

            if sort_type and sort_column:
                sort_column = sort_column.lower()

                if sort_type.lower() == "desc" and sort_column in ['category', 'sub_category',
                                                                   'option', 'value']:
                    rows = sorted(rows, key=lambda i: i[sort_column], reverse=True)
                if sort_type.lower() == "asc":
                    rows = sorted(rows, key=lambda i: i[sort_column])
        else:

            rows = []
            options = []
            categories = []

        datas = self.limits(rows, limit, page)
        total_count = len(datas)
        total_page = int(math.ceil(int(total_count - 1) / limit))

        final_data = []
        temp_category = ''
        temp_subcat = ''
        for item in datas:

            if temp_category == item['category']:
                item['category'] = ''
            else:
                temp_category = item['category']

            if temp_subcat == item['sub_category']:
                item['sub_category'] = ''
            else:
                temp_subcat = item['sub_category']

            final_data.append(item)

        data['data'] = final_data
        data['total_page'] = total_page
        data['limit'] = int(limit)
        data['page'] = int(page)
        data['total_rows'] = total_count
        data['options'] = options
        data['categories'] = categories
        data['subcategories'] = self.get_device_subcategory(datas)
        data['status'] = 'ok'

        return self.return_data(data)
Exemple #4
0
 def __init__(self):
     """The Constructor for NoonReportData class """
     self.postgresql_query = PostgreSQL()
     self.unit_conversion = UnitConversion()
     super(NoonReportData, self).__init__()
Exemple #5
0
class NoonReportData(Common):
    """Class for NoonReportData"""
    # INITIALIZE
    def __init__(self):
        """The Constructor for NoonReportData class """
        self.postgresql_query = PostgreSQL()
        self.unit_conversion = UnitConversion()
        super(NoonReportData, self).__init__()

    def noon_report_data(self):
        """
        This API is to get noon report
        ---
        tags:
          - Email
        produces:
          - application/json
        parameters:
          - name: token
            in: header
            description: Token
            required: true
            type: string
          - name: userid
            in: header
            description: User ID
            required: true
            type: string
          - name: mail_log_ids
            in: query
            description: Mail log ID's
            required: true
            type: string

        responses:
          500:
            description: Error
          200:
            description: Permission
        """
        data = {}

        # GET DATA
        token = request.headers.get('token')
        userid = request.headers.get('userid')
        mail_log_ids = request.args.get('mail_log_ids')

        # CHECK TOKEN
        token_validation = self.validate_token(token, userid)

        if not token_validation:
            data["alert"] = "Invalid Token"
            data['status'] = 'Failed'

            # RETURN ALERT
            return self.return_data(data)

        # COMPANY DATA
        datas = self.get_noon_report_data(mail_log_ids)

        datas['status'] = 'ok'

        return self.return_data(datas)

    def get_noon_report_data(self, mail_log_ids):
        """Return Noon Report Data"""

        # MAIL LOG IDs
        if len(mail_log_ids.split(",")) == 1:
            mlis = "(" + str(mail_log_ids) +")"
        else:

            mlis = tuple(mail_log_ids.split(","))

        sql_str = "SELECT mail_log_id,message,data_date FROM email_log  WHERE "
        sql_str += "mail_log_id in " + str(mlis)

        datas = self.postgresql_query.query_fetch_all(sql_str)

        rows = []
        for data in datas or []:
            temp = {}
            msg = ""
            msg += "As of " + data['data_date'] + "\n\n"

            for message in data['message']:
                if message['label'] == "":
                    msg += "\n"
                else:

                    try:

                        # if message['label'] == "LATITUDE":
                        #     latitude = self.to_degrees(message['value'])

                        #     lat_cardinal = "S"
                        #     if float(message['value']) >= 0: lat_cardinal = "N"

                        #     message['value'] = str(latitude) + " " + str(lat_cardinal)

                        # elif message['label'] == "LONGITUDE":

                        #     longitude = self.to_degrees(message['value'])

                        #     long_cardinal = "W"
                        #     if float(message['value']) >= 0: long_cardinal = "E"

                        #     message['value'] = str(longitude) + " " + str(long_cardinal)

                        if message['label'] in ["LATITUDE", "LONGITUDE"]:

                            message['value'] = self.unit_conversion.to_degrees(message['label'],
                                                                               message['value'])

                        elif message['label'] == "HEADING":

                            message['value'] = str(int(float(message['value']))) + "°"

                    except:

                        message['value'] = ""

                    msg += message['label'] + ": " + message['value'] + "\n"

            temp['message'] = msg
            temp['mail_log_id'] = data['mail_log_id']

            rows.append(temp)

        data = {}
        data['rows'] = rows

        return data
Exemple #6
0
class NoonReportPDF(Common):
    """Class for NoonReportPDF"""

    # INITIALIZE
    def __init__(self):
        """The Constructor for NoonReportPDF class"""
        self.postgresql_query = PostgreSQL()
        self.unit_conversion = UnitConversion()
        super(NoonReportPDF, self).__init__()

    def noon_report_pdf(self):
        """
        This API is to get noon report
        ---
        tags:
          - Email
        produces:
          - application/json
        parameters:
          - name: token
            in: header
            description: Token
            required: true
            type: string
          - name: userid
            in: header
            description: User ID
            required: true
            type: string
          - name: mail_log_ids
            in: query
            description: Mail log ID's
            required: true
            type: string

        responses:
          500:
            description: Error
          200:
            description: Permission
        """
        data = {}

        # GET DATA
        token = request.headers.get('token')
        userid = request.headers.get('userid')
        mail_log_ids = request.args.get('mail_log_ids')

        # CHECK TOKEN
        token_validation = self.validate_token(token, userid)

        if not token_validation:
            data["alert"] = "Invalid Token"
            data['status'] = 'Failed'

            # RETURN ALERT
            return self.return_data(data)

        output_file = "pdf/" + str(int(time.time())) + "_noon_report.pdf"

        pdf = self.generate_pdf(mail_log_ids)
        pdf.output(output_file, "F")

        datas = {}
        datas['location'] = output_file
        datas['status'] = 'ok'

        return self.return_data(datas)

    def generate_pdf(self, mail_log_ids):
        """Generate PDF"""

        # PDF SIZE Y, X
        pdf = FPDF('L', 'mm', (279.4, 215.9))

        # MAIL LOG IDs
        if len(mail_log_ids.split(",")) == 1:
            mlis = "(" + str(mail_log_ids) + ")"
        else:

            mlis = tuple(mail_log_ids.split(","))

        sql_str = "SELECT el.mail_log_id,el.message,el.data_date,el.created_on,ev.email FROM"
        sql_str += " email_log el INNER JOIN email_vessel ev ON"
        sql_str += " el.email_vessel_id=ev.email_vessel_id WHERE"
        sql_str += " mail_log_id in " + str(mlis)

        rows = self.postgresql_query.query_fetch_all(sql_str)

        header = "Noon report"

        for row in rows:
            pdf.add_page()

            self.render_header_data(pdf, header)

            self.render_details_data(pdf, row)
            self.render_footer_data(pdf)

        return pdf

    def render_details_data(self, pdf, details):
        """Render Details Data"""

        pdf.set_font('Arial', '', 10)
        start_y = 25

        data = "As of " + details['data_date']

        pdf.text(10, start_y, str(data))

        start_y += 10

        for info in details['message']:

            if info['label'] == "":

                start_y += 5

            else:

                try:

                    # if info['label'] == "LATITUDE":
                    #     latitude = self.to_degrees(info['value'])

                    #     lat_cardinal = "S"
                    #     if float(info['value']) >= 0: lat_cardinal = "N"

                    #     info['value'] = str(latitude) + " " + str(lat_cardinal)

                    # elif info['label'] == "LONGITUDE":

                    #     longitude = self.to_degrees(info['value'])

                    #     long_cardinal = "W"
                    #     if float(info['value']) >= 0: long_cardinal = "E"

                    #     info['value'] = str(longitude) + " " + str(long_cardinal)

                    if info['label'] in ["LATITUDE", "LONGITUDE"]:

                        info['value'] = self.unit_conversion.to_degrees(
                            info['label'], info['value'])

                    elif info['label'] == "HEADING":

                        info['value'] = str(int(float(info['value']))) + "°"

                except:

                    info['value'] = ""

                data = info['label'] + ": " + info['value']

                pdf.text(10, start_y, str(data))

                start_y += 5

        start_y += 5
        # TIME AND DATE EMAIL SEND
        utc = datetime.utcfromtimestamp(
            details['created_on']).strftime('%A, %d %B %Y %I:%M:%S %p')
        date_send = utc + " UTC"

        data = "DATE SENT: " + str(date_send)
        pdf.text(10, start_y, str(data))
        start_y += 5

        # EMAIL RECIPIENT
        data = "RECIPIENT: " + details['email']
        pdf.text(10, start_y, str(data))
        start_y += 5

    def render_header_data(self, pdf, header):
        """Render Header Data"""

        # TITLE
        pdf.set_font('Courier', 'B', 16.5)
        top_width = pdf.get_string_width(header)
        pdf.text((top_width / 2) + 65, 12, header)

    def render_footer_data(self, pdf):
        """Render Footer Data"""

        pdf.set_font('Arial', '', 8)