Beispiel #1
0
    def send_mail(self, to, subject, body, attachments=None):
        msg = MIMEMultipart()
        msg['From'] = self.user
        msg['To'] = ', '.join(to)
        msg['Date'] = formatdate(localtime=True)
        msg['Subject'] = subject
        msg.attach(MIMEText(body, 'plain'))

        if attachments is not None:
            for attachment in attachments:
                part = MIMEBase('application', 'octet-stream')
                part.set_payload(attachment[1].read())
                encoders.encode_base64(part)
                part.add_header('Content-Disposition',
                                'attachment; filename = ' + attachment[0])
                msg.attach(part)

        content = msg.as_string()
        try:
            self.server.sendmail(self.user, to, content)
        except Exception as error:
            logger = Logger()
            logger.send(
                f'An Error occurred while sending the mail! ERROR: {error}')
            sys.exit(6)
Beispiel #2
0
def SalesForceConnector():
    try:
        conf = get_config()
        _sf = Salesforce(username=conf['SF_USER'],
                         password=conf['SF_PWD'],
                         security_token=conf['SF_TOKEN'])

    except Exception as error:
        logger = Logger()
        logger.send(
            f"It was not possible to generate a connection with SalesForce! Error: {error}"
        )
        sys.exit(7)

    return _sf
def get_data() -> pd.DataFrame:
    sf = SalesForceConnector()

    with open('./queries/sf_query.sql', 'r') as file_query:
        sf_query = file_query.read()

    try:
        _df = pd.DataFrame(
            sf.query_all(sf_query)['records']).drop(columns='attributes')

    except Exception as error:
        logger = Logger()
        logger.send(
            f"It was not possible to get data from SalesForce! Error: {error}")
        sys.exit(5)

    return _df
Beispiel #4
0
def get_config():

    _config = defaultdict(lambda: False)
    _keys = [
        'SF_USER', 'SF_PWD', 'SF_TOKEN', 'MAIL_USER', 'MAIL_PASS',
        'RUNNING_TIME'
    ]

    for _key in _keys:
        if _key in os.environ.keys():
            _config[_key] = os.getenv(_key)
        else:
            logger = Logger()
            logger.send(
                f"The key {_key} is not set in environment, exiting...")
            raise Exception
    return _config
def generate_file(data: pd.DataFrame):
    chip_multi = data
    chip_multi['StoneCode'] = chip_multi['Opportunity__r'].map(
        lambda row: row['StoneCode__c'])
    chip_multi['Account'] = chip_multi['Opportunity__r'].map(
        lambda row: row['Account']['Id'])
    chip_multi['Polo'] = chip_multi['Opportunity__r'].map(
        lambda row: row['Account']['Grupo_3_SF__c'])
    chip_multi['Comercial'] = chip_multi['Opportunity__r'].map(
        lambda row: row['Account']['Grupo_4_SF__c'])
    chip_multi['CreatedDate'] = chip_multi['Opportunity__r'].map(
        lambda row: row['CreatedDate'])
    chip_multi['CreatedDate'] = pd.to_datetime(
        chip_multi['CreatedDate']).map(lambda x: x.replace(tzinfo=None))
    chip_multi.drop(columns='Opportunity__r', inplace=True)
    chip_multi.sort_values('CreatedDate', ascending=False, inplace=True)
    today_work = chip_multi[
        chip_multi['CreatedDate'] > f'{date.today().strftime(date_format)}']
    cred = chip_multi.dropna(subset=['StoneCode'])
    ncred = chip_multi.loc[chip_multi['StoneCode'].isna()]

    file_name = f'files/{today_str}_Credenciamento_Chip_Multi.xlsx'

    try:
        with pd.ExcelWriter(file_name) as writer:
            today_work.to_excel(writer, sheet_name='Hoje', index=False)
            cred.to_excel(writer, sheet_name='Credenciados', index=False)
            ncred.to_excel(writer, sheet_name='Não Credenciados', index=False)

    except Exception as error:
        logger = Logger()
        logger.send(
            f'An Error occurred generating attach file! ERROR: {error}')
        sys.exit(6)

    return file_name
Beispiel #6
0
def job():
    logger = Logger()
    logger.send('Starting Job')
    logger.send('Collecting Data')
    cm = get_data()
    chip_multi_url = generate_file(data=cm)

    logger.send('Sending e-mail')
    gmail = Email()
    gmail.login()
    _body, _subject, _recipients, _attachs = format_mail(
        attachs=[chip_multi_url])
    gmail.send_mail(to=_recipients,
                    subject=_subject,
                    body=_body,
                    attachments=_attachs)
    gmail.logout()
    logger.send('Finish Processing')

    return True