martedì 21 novembre 2023

Calcolo in python dei giorni lavorativi (lunedì venerdì) per anno 2023, escludendo le feste se capitano dal lunedì al venerdì.

Questo è un esempio di un calcolo in python dei giorni lavorativi (lunedì venerdì) per anno 2023, escludendo le feste se capitano dal lunedì al venerdì. La Pasquetta e il S.Patrono sono variabili ma le altre sono fisse: 1 e 6 gennaio, 10 aprile pasquetta per il 2023, 25 aprile, 1 maggio, 2 giugno, 29 giugno (S.Patrono a Roma), 15 agosto, 1 novembre, 8 dicembre, 25 e 26 dicembre. Il secondo script è parziale per la scrittura del mese e dei giorni. Sostitutendo l'anno si potranno avere altri risultati, ma ricordarsi di inserire il giorno di Pasquetta corretto. Basta copiare gli script in un qualsiasi editor online per eseguire una verifica.

#calcolo del numero di giorni lavorativi all'anno, per esempio il 2023
from datetime import date, timedelta

def count_weekdays_excluding_holidays(year, holidays):
    start_date = date(year, 1, 1)
    end_date = date(year, 12, 31)
    total_weekdays = 0

    holidays_set = set(date(year, int(d.split('/')[1]), int(d.split('/')[0])) for d in holidays)

    current_date = start_date
    while current_date <= end_date:
        if current_date.weekday() < 5 and current_date not in holidays_set:
            total_weekdays += 1
        current_date += timedelta(days=1)

    return total_weekdays

# Festività 2023
holidays_2023 = ["1/1", "6/1", "10/4", "25/4", "1/5", "2/6", "29/6",
"15/8", "1/11", "8/12", "25/12", "26/12"]

print(count_weekdays_excluding_holidays(2023, holidays_2023))

#-------------------------------------------------------------------------------------

#calcolo del numero di giorni lavorativi all'anno per mese, in questo caso il 2023, con scrittura del mese e numero giorni
from datetime import date, timedelta
import calendar

def monthly_working_days(year, holidays):
    monthly_days = {}

    holidays_set = set(date(year, int(d.split('/')[1]), int(d.split('/')[0])) for d in holidays)

    for month in range(1, 13):
        total_days = 0
        for day in range(1, calendar.monthrange(year, month)[1] + 1):
            current_date = date(year, month, day)
            if current_date.weekday() < 5 and current_date not in holidays_set:
                total_days += 1
        month_name = calendar.month_name[month]
        monthly_days[month_name] = total_days

    return monthly_days

# Festivi
holidays_2023 = ["1/1", "6/1", "10/4", "25/4", "1/5", "2/6", "29/6", "15/8", "1/11", "8/12", "25/12", "26/12"]
monthly_working_days_2023 = monthly_working_days(2023, holidays_2023)
print(monthly_working_days_2023)

#Risultato: {'January': 21, 'February': 20, 'March': 23, 'April': 18, 'May': 22, 
'June': 20, 'July': 21, 'August': 22, 'September': 21, 'October': 22, 'November': 21, 'December': 18}

venerdì 23 settembre 2022

Caricare una DropDownList con MVC C#

Esempio di un caricamento di una DropDownList in MVC C# partendo dal relativo Controller (file.cs).
In questo caso carico la dropdownlist del pagesize, ossia quanti dati mosterò a video ad esempio su di una grid.

Parte relativa al back-end

public ActionResult Index()
{
  LoadItem();
}

private void LoadItem()
{
	ViewData["offsetlist"] = new List {
		new SelectListItem { Text = "5", Value = "5" },
		new SelectListItem { Text = "10", Value = "10" },
		new SelectListItem { Text = "15", Value = "15" },
		new SelectListItem { Text = "50", Value = "50" }
	};
}

Nella View del file csthml inserire la seguente sintassi:

@Html.DropDownList("pagesize",
(ViewData["offsetlist"] as IEnumerable), "Page Size"
  , new { @class = "form-control", onchange = "this.form.submit()" })
}

lunedì 19 settembre 2022

Apertura o Download di un file pdf già creato con MVC C#

In questo esempio è possibile aprire e poi scaricare un file pdf da un sito creato con MVC c#.
Nella View inserire la seguente sintassi che permetterà il download del file.


<a class="text-default" href="@Url.Action("PdfGuide", "Home")" 
target="_blank" title="Download guide"> <i class="dropdown-icon fe fe-help-circle"></i> </a>


Parte relativa al back-end, inserire il file pdf sotto la root del progetto ~/assets/help (se non esiste la dir crearne una nuova)

public FileResult PdfGuide()
{
	//include the .pdf extention at the end
	string path = Server.MapPath(String.Format("~/assets/help/guide.pdf"));

	string mime = MimeMapping.GetMimeMapping(path);

	return File(path, mime);
}

mercoledì 27 gennaio 2021

Portare un valore da un campo testo sulla barra degli indirizzi con html e javascript

L'esempio seguente mostra come è possibile inviare un valore inerito in un campo testo nella barra degli indirizzi del browser con html e javascript.
Questo metodo è utile se vogliamo ad esempio inviare il valore in un'altra pagina html o php.
<html>
<body>
<form name='frmPagin' action='javascript:searchItem();' method='post'>
<table border="0" >
	<tr>
	<td valign="top"> 
		<input name="inputsearch" id="inputsearch" 
        type="text"  maxlength="80"  placeholder="Search">
	</td>
	</tr>
	<tr>
	<td valign="top"> 
		<input name="btnsearch" id="btnsearch" type="submit" value"SEND">
	</td>
	</tr>
</table>
<script>
function searchItem(){
	addOrUpdateUrlParam('Search',document.getElementById("inputsearch").value);	
}
function addOrUpdateUrlParam(name, value)
{
	var href = window.location.href;
	var regex = new RegExp("[&\\?]" + name + "=");
	if(value=="")
		value="0";
	if(regex.test(href))
	{
		regex = new RegExp("([&\\?])" + name + "=\\w+");
		window.location.href = href.replace(regex, "$1" + name + "=" + value);
	}
	else
	{
	if(href.indexOf("?") > -1)
	  window.location.href = href + "&" + name + "=" + value;
	else
	  window.location.href = href + "?" + name + "=" + value;
	}
}
</script>
</form>
</body>
</html>