Metadata-Version: 2.1
Name: python-networkdays
Version: 0.0.1
Summary: Networkday function like spreadsheet, plus job schedule
Home-page: https://github.com/cadu-leite/networkdays
Author: Carlos Leite
Author-email: caduado@gmail.com
License: UNKNOWN
Keywords: networkdays calendar schedule project
Platform: UNKNOWN
Classifier: Programming Language :: Python :: 3
Classifier: License :: OSI Approved :: BSD License
Classifier: Operating System :: OS Independent
Classifier: Topic :: Office/Business :: Scheduling
Requires-Python: >=3.6
Description-Content-Type: text/x-rst

***********
Networkdays
***********


- Business days calendar.
- JobSchedule on business days.

.. tip::

    **Just Python built-in libs, no dependencies**


Networkdays:
    Return working days between two dates exclude weekends and holidays.

    - just like spreadsheets `networdays` function
    - exclude Holidays
    - Exclude "days off" per week.


Job schedule:
    Calculate the period for a given job hours, based on `Networdays`.



.. contents:: Table of Contents



Examples
========


Networkdays.networkdays()
-------------------------

.. code:: python

    import datetime
    from networkdays import networkdays

    HOLIDAYS  = { datetime.date(2020, 12, 25),}

    days = networkdays.Networkdays(datetime.date(2020, 12, 1), datetime.date(2020, 12, 31), holidays=HOLIDAYS)

    # you have methods to get holidays and weekends date list as well.
    # here i just got the size of each set
    print(f'''
    Bussiness days: {len(days.networkdays())}
        {days.networkdays()[:2]}
        ...{days.networkdays()[-2:]}

    Weekends:       {len(days.weekends())}
        {days.weekends()[:2]}
        ...{days.weekends()[-2:]}

    Holidays:       {len(days.holidays())}
    ''')


.. parsed-literal::


    Bussiness days: 22
        [datetime.date(2020, 12, 1), datetime.date(2020, 12, 2)]
        ...[datetime.date(2020, 12, 30), datetime.date(2020, 12, 31)]

    Weekends:       8
        [datetime.date(2020, 12, 5), datetime.date(2020, 12, 6)]
        ...[datetime.date(2020, 12, 26), datetime.date(2020, 12, 27)]

    Holidays:       1



Networkdays.jobschedule()
-------------------------

.. code:: python

    # jobSchedule
    import datetime
    from networkdays import networkdays

    # Distribute the 600 hrs of effort, starting on december 1, 2020 working 8hrs per day.
    jobschedule = networkdays.JobSchedule(600, 8, datetime.date(2020, 12, 1), networkdays=None)
    job_dates = jobschedule.job_workdays()

    # print results ...
    print(f'''

    bussines days:          {jobschedule.bussines_days}
    calendar days:          {jobschedule.total_days}
    starts - ends:          {jobschedule.prj_starts} - {jobschedule.prj_ends}

    years:                  {list(jobschedule.years())}
    months:                 {list(jobschedule.months())}
    weeks (ISO):            {list(jobschedule.weeks())}

    days:
        {list(jobschedule.days())[:2]} ...\n ...{list(jobschedule.days())[-2:]}

    Works days dates on january:
        {list(jobschedule.days())[:2]} ...\n ...{list(jobschedule.days())[-2:]}
    ''')


.. parsed-literal::



    bussines days:          54
    calendar days:          73 days, 0:00:00
    starts - ends:          12/01/20 - 02/12/21

    years:                  [2020, 2021]
    months:                 [12, 1, 2]
    weeks (ISO):            [49, 50, 51, 52, 53, 1, 2, 3, 4, 5, 6]

    days:
        [datetime.date(2020, 12, 1), datetime.date(2020, 12, 2)] ...
     ...[datetime.date(2021, 2, 11), datetime.date(2021, 2, 12)]

    Works days dates on january:
        [datetime.date(2020, 12, 1), datetime.date(2020, 12, 2)] ...
     ...[datetime.date(2021, 2, 11), datetime.date(2021, 2, 12)]



