Beispiel #1
0
    def run(self, dispatcher: CollectingDispatcher, tracker: Tracker,
            domain: Dict[Text, Any]) -> List[Dict[Text, Any]]:
        sender_id = tracker.current_state()['sender_id']
        if sender_id is None:
            sender_id = "rasa-shell"

        res = WatchStock.select().where(WatchStock.sender_id == sender_id)
        if len(res) == 0:
            dispatcher.utter_message(template="utter_inform_empty_list", )
            return []

        for item in res:
            result = RequestPrice.CurrentPrice(item.symbol)
            date = result[0][constants.DATE]
            time = result[0][constants.TIME]

            dispatcher.utter_message(
                template='utter_answer_price',
                time=time_format.TimeHelper.toDisplayText(date, time),
                symbol=item.symbol,
                basic_price=result[0][constants.PRICE_TYPE_BASIC],
                floor_price=result[0][constants.PRICE_TYPE_FLOOR],
                ceiling_price=result[0][constants.PRICE_TYPE_CEILING],
                high_price=result[0][constants.PRICE_TYPE_HIGH],
                low_price=result[0][constants.PRICE_TYPE_LOW],
                change=result[0][constants.PRICE_TYPE_AD_CHANGE],
                change_pct=result[0][constants.PRICE_TYPE_AD_CHANGE_PCT],
                change_symbol=display_text.DisplayHelper.numberToArrow(
                    result[0][constants.PRICE_TYPE_AD_CHANGE]))

        dispatcher.utter_message(template="utter_more_info")
        hook.after_processed(tracker, "action_show_watching_list")
        return []
Beispiel #2
0
    def run(self, dispatcher: CollectingDispatcher, tracker: Tracker,
            domain: Dict[Text, Any]) -> List[Dict[Text, Any]]:
        try:
            stock_code = tracker.get_slot("stock_code")
            if not stock_code:
                dispatcher.utter_message(
                    template='utter_ask_particular_stock_name')
                return []

            res = Company.search_by_symbol(symbol=stock_code)
            if not res:
                dispatcher.utter_message(
                    template='utter_ask_particular_stock_name')
                return []

            company = res
            dispatcher.utter_message(
                template='utter_answer_company_overview',
                symbol=company.symbol,
                company_name=company.name,
                overview=company.overview,
                classification=company.classification.name,
                employees=company.employees,
                listing_volume='{:,}'.format(company.listing_volume),
                date_of_issue=company.date_of_issue.strftime("%d/%m/%Y"))

            hook.after_processed(tracker, "action_get_info")
            return []
        except:
            hook.after_processed(tracker, "action_get_info")
            dispatcher.utter_message(
                "Có lỗi xảy ra 😔 Hãy thử lại sau!")
            return []
Beispiel #3
0
    def run(self, dispatcher: CollectingDispatcher, tracker: Tracker,
            domain: Dict[Text, Any]) -> List[Dict[Text, Any]]:
        stock_code = tracker.get_slot("stock_code")
        if stock_code is None:
            dispatcher.utter_message(
                template='utter_ask_particular_stock_name')
            return []
        sender_id = tracker.current_state()['sender_id']
        if sender_id is None:
            sender_id = "rasa-shell"

        res = WatchStock.select().where(WatchStock.sender_id == sender_id
                                        and WatchStock.symbol == stock_code)
        if len(res) == 0:
            dispatcher.utter_message(
                template="utter_remove_from_watch_list_fail",
                stock_code="stock_code")
        else:
            q = WatchStock.get(symbol=stock_code, sender_id=sender_id)
            q.delete_instance()
            dispatcher.utter_message(
                template="utter_remove_from_watch_list_success",
                stock_code=stock_code)
        dispatcher.utter_message(template="utter_ask_for_show_list", )

        hook.after_processed(tracker, "action_remove_from_watching_list")
        return []
Beispiel #4
0
    def run(self, dispatcher: CollectingDispatcher,
            tracker: Tracker,
            domain: Dict[Text, Any]) -> List[Dict[Text, Any]]:
        stock_code = tracker.get_slot("stock_code")
        date_range = tracker.get_slot("date_range")
        if not stock_code:
            dispatcher.utter_message(
                template='utter_ask_particular_stock_code'
            )
            return []

        image_url = service.Service.HandleChangeCheatSeatAction(stock_code, date_range)
        date_range_text = utils.date_range_to_text(date_range=date_range)

        dispatcher.utter_message(
            template='utter_answer_price_change',
            chart_image=image_url,
            date_range_text=date_range_text
        )

        dispatcher.utter_message(
            template='utter_support_price_date_range'
        )

        hook.after_processed(tracker, "action_request_price_change")
        return [SlotSet("stock_code", stock_code)]
Beispiel #5
0
    def run(self, dispatcher: CollectingDispatcher, tracker: Tracker,
            domain: Dict[Text, Any]) -> List[Dict[Text, Any]]:
        stock_code = tracker.get_slot("stock_code")
        date_range = tracker.get_slot("date_range")

        if not stock_code:
            dispatcher.utter_message(
                template='utter_ask_particular_stock_name')
            return []

        if date_range == "year":
            time = "năm"
        else:
            time = "quý"
        res = FinancialReport.get_last_report(symbol=stock_code,
                                              time_range=date_range)
        company = Company.search_by_symbol(symbol=stock_code)
        dispatcher.utter_message(
            template='utter_answer_business_result',
            company_name=company.name,
            time=res.time,
            sales='{:.2f}'.format(res.sales / 1000000000),
            gross_profit='{:.2f}'.format(res.gross_profit / 1000000000),
            operating_profit='{:.2f}'.format(res.operating_profit /
                                             1000000000),
            net_profit='{:.2f}'.format(res.net_profit / 1000000000),
        )

        dispatcher.utter_message(template="utter_refer_business_report",
                                 symbol=stock_code,
                                 date_range=time)

        hook.after_processed(tracker, "action_get_business_result")
        return [events.SlotSet("stock_code", stock_code)]
Beispiel #6
0
    def run(self, dispatcher: CollectingDispatcher, tracker: Tracker,
            domain: Dict[Text, Any]) -> List[Dict[Text, Any]]:

        if tracker.get_slot("branch") is None:
            return [events.FollowupAction("action_get_branch_list")]

        branch_id = int(tracker.get_slot("branch"))
        branch = Classification.get_by_id(branch_id)
        number_of_companies = Company.count_by_branch(branch_id)
        top_profit_companies = Company.highest_profit_by_branch(branch_id)
        print(top_profit_companies)
        if branch.profit_growth > 10:
            comment = "khả quan"
        elif branch.profit_growth > 0:
            comment = "trung lập"
        else:
            comment = "kém khả quan"

        company_list = ""
        for company in top_profit_companies:
            company_list += "👉 {name} - mã *{symbol}*\n".format(
                name=company.name, symbol=company.symbol)
        dispatcher.utter_message(template="utter_answer_branch_finance",
                                 branch_name=branch.name,
                                 number_of_companies=number_of_companies,
                                 profit_growth=branch.profit_growth,
                                 pe_avg=branch.pe_avg,
                                 comment=comment)

        dispatcher.utter_message(template="utter_answer_top_profit",
                                 company_list=company_list,
                                 branch_name=branch.name)
        hook.after_processed(tracker, self.name())
        return []
Beispiel #7
0
    def run(self, dispatcher: CollectingDispatcher, tracker: Tracker,
            domain: Dict[Text, Any]) -> List[Dict[Text, Any]]:
        branches = Classification.select()
        text = ""
        for branch in branches:
            text += "👉 {branch_name}\n".format(branch_name=branch.name)

        dispatcher.utter_message(template="utter_answer_branch_list",
                                 branch_list=text)
        hook.after_processed(tracker, self.name())
        return []
Beispiel #8
0
    def run(self, dispatcher: CollectingDispatcher, tracker: Tracker,
            domain: Dict[Text, Any]) -> List[Dict[Text, Any]]:
        try:
            result_list = json.loads(tracker.get_slot("result_list"))
            result_text = []
            for company in result_list:
                result_text.append("👉 *{name}* - mã *{symbol}*".format(
                    name=company["name"], symbol=company["symbol"]))

            dispatcher.utter_message(template="utter_list_results",
                                     result_text="\n".join(result_text))
            dispatcher.utter_message(template="utter_ask_exact_code", )

            hook.after_processed(tracker, "action_show_search_result")
            return [events.SlotSet("stock_code", None)]
        except:
            hook.after_processed(tracker, "action_get_info")
            dispatcher.utter_message(
                "Có lỗi xảy ra 😔 Hãy thử lại sau!")
            return []
Beispiel #9
0
    def run(self, dispatcher: CollectingDispatcher, tracker: Tracker,
            domain: Dict[Text, Any]) -> List[Dict[Text, Any]]:
        stock_code = tracker.get_slot("stock_code")
        date_range = tracker.get_slot("date_range")

        print(stock_code)
        if not stock_code:
            dispatcher.utter_message(
                template='utter_ask_particular_stock_name')
            return []

        image_url = Service.handle_business_report_action(
            stock_code, date_range)
        company = Company.search_by_symbol(symbol=stock_code)
        dispatcher.utter_message(template='utter_answer_business_set_report',
                                 company_name=company.name,
                                 image_url=image_url)

        hook.after_processed(tracker, "action_evaluate_business")
        return []
Beispiel #10
0
    def run(self, dispatcher: CollectingDispatcher,
            tracker: Tracker,
            domain: Dict[Text, Any]) -> List[Dict[Text, Any]]:
        name = tracker.get_slot("company_name")
        result = Company.search_by_name(name)
        if len(result) == 0:
            dispatcher.utter_message(
                template='utter_ask_particular_stock_name'
            )
            return []

        company = result[0]

        result = RequestPrice.CurrentPrice(company.symbol)
        date = result[0][constants.DATE]
        time = result[0][constants.TIME]

        dispatcher.utter_message(
            template='utter_answer_price_with_name',
            time=time_format.TimeHelper.toDisplayText(date, time),
            symbol=company.symbol,
            company_name=company.name,
            basic_price=result[0][constants.PRICE_TYPE_BASIC],
            floor_price=result[0][constants.PRICE_TYPE_FLOOR],
            ceiling_price=result[0][constants.PRICE_TYPE_CEILING],
            high_price=result[0][constants.PRICE_TYPE_HIGH],
            low_price=result[0][constants.PRICE_TYPE_LOW],
            change=result[0][constants.PRICE_TYPE_AD_CHANGE],
            change_pct=result[0][constants.PRICE_TYPE_AD_CHANGE_PCT],
            change_symbol=display_text.DisplayHelper.numberToArrow(result[0][constants.PRICE_TYPE_AD_CHANGE])
        )

        dispatcher.utter_message(
            template='utter_support_after_answer_price',
            stock_code=company.symbol,
        )

        hook.after_processed(tracker, "action_request_price_by_company")

        return [SlotSet("stock_code", company.symbol)]
Beispiel #11
0
    def run(self, dispatcher: CollectingDispatcher,
            tracker: Tracker,
            domain: Dict[Text, Any]) -> List[Dict[Text, Any]]:
        stock_code = tracker.get_slot("stock_code")
        if not stock_code:
            dispatcher.utter_message(
                template='utter_ask_particular_stock_name'
            )
            return []
        sender_id = tracker.current_state()['sender_id']
        result = RequestPrice.CurrentPrice(stock_code)
        date = result[0][constants.DATE]
        time = result[0][constants.TIME]

        dispatcher.utter_message(
            template='utter_answer_price',
            time=time_format.TimeHelper.toDisplayText(date, time),
            symbol=stock_code,
            basic_price=result[0][constants.PRICE_TYPE_BASIC],
            floor_price=result[0][constants.PRICE_TYPE_FLOOR],
            ceiling_price=result[0][constants.PRICE_TYPE_CEILING],
            high_price=result[0][constants.PRICE_TYPE_HIGH],
            low_price=result[0][constants.PRICE_TYPE_LOW],
            change=result[0][constants.PRICE_TYPE_AD_CHANGE],
            change_pct=result[0][constants.PRICE_TYPE_AD_CHANGE_PCT],
            change_symbol=display_text.DisplayHelper.numberToArrow(result[0][constants.PRICE_TYPE_AD_CHANGE])
        )

        dispatcher.utter_message(
            template='utter_support_after_answer_price',
            stock_code=stock_code
        )

        hook.after_processed(tracker, "action_request_price")

        return []
Beispiel #12
0
    def run(self, dispatcher: CollectingDispatcher, tracker: Tracker,
            domain: Dict[Text, Any]) -> List[Dict[Text, Any]]:
        try:
            stock_code = tracker.get_slot("stock_code")
            if not stock_code:
                dispatcher.utter_message(
                    template='utter_ask_particular_stock_name')
                return []

            res = FinancialIndicator.search_by_symbol(symbol=stock_code)
            company = Company.search_by_symbol(symbol=stock_code)
            if not res:
                dispatcher.utter_message(
                    template='utter_ask_particular_stock_name')
                return []

            dispatcher.utter_message(
                template='utter_answer_company_financial',
                company_name=company.name,
                pe='{:.2f}'.format(res.PE),
                ps='{:.2f}'.format(res.PS),
                eps='{:.2f}'.format(res.EPS),
                pb='{:.2f}'.format(res.PB),
                roa='{:.2f}%'.format(res.ROA),
                roe='{:.2f}%'.format(res.ROE),
                roic='{:.2f}%'.format(res.ROIC),
                roce='{:.2f}%'.format(res.ROCE),
            )

            hook.after_processed(tracker, "action_get_financial_indicator")
            return []
        except:
            hook.after_processed(tracker, "action_get_financial_indicator")
            dispatcher.utter_message(
                "Có lỗi xảy ra 😔 Hãy thử lại sau!")
            return []