首页 > 编程语言 >D365 - C#计算两个时间点之间的节假日和调休

D365 - C#计算两个时间点之间的节假日和调休

时间:2024-04-15 15:58:46浏览次数:19  
标签:C# workingDay D365 int fixDays qe startTime new 调休

其中调休配置在了new_holidayconfig这张表,表里还有国家和日期字段,如果不是D365可以用其他办法去存。

 

public static int WorkingDayCount(DateTime startTime, DateTime endTime, string countryId, IOrganizationService adminOrganizationService)
        {
            int workingDay=0;
            int totalDays = (int)(endTime-startTime).TotalDays;
            for(int i =0; i < totalDays; i++)
            {
                if(startTime.AddDays(i).DayOfWeek!=DayOfWeek.Saturday && startTime.AddDays(i).DayOfWeek != DayOfWeek.Sunday)
                {
                    workingDay++;
                }
            }
            if (string.IsNullOrWhiteSpace(countryId))
                return workingDay;
            //如果有国家,去除节日 增补调休日
            var qe = new QueryExpression("new_holidayconfig");
            qe.NoLock = true;
            qe.ColumnSet = new ColumnSet("new_holidayconfigid","new_daytypecode");
            qe.Criteria.AddCondition("new_country_id", ConditionOperator.Equal, countryId);
            qe.Criteria.AddCondition("statecode", ConditionOperator.Equal, 0);
            qe.Criteria.AddCondition("new_date", ConditionOperator.OnOrAfter, startTime);
            qe.Criteria.AddCondition("new_date", ConditionOperator.OnOrBefore, endTime);
            var fixDays = adminOrganizationService.RetrieveMultiple(qe);
            if(fixDays!=null&&fixDays.Entities!=null&& fixDays.Entities.Count>0)
            {
                for(int i = 0; i < fixDays.Entities.Count; i++)
                {
                    if (fixDays.Entities[i].Contains("new_daytypecode"))
                    {
                        var type = fixDays.Entities[i].GetAttributeValue<OptionSetValue>("new_daytypecode").Value;
                        if(type == 1)//节日自增
                        {
                            workingDay++;
                        }
                        else if (type == 2) 
                        {
                            workingDay--;
                        }
                    }
                }
            }
            return workingDay;
        }

  

 

标签:C#,workingDay,D365,int,fixDays,qe,startTime,new,调休
From: https://www.cnblogs.com/RegularMoon/p/18136112/calculateworkingday

相关文章

  • FireDAC将UniDBGrid数据另存为网页HTML格式,方便导出
    procedureDBGrid1ToHTML(aFDquery:TFDQuery;aHTMLFileName:string);varaHTMLtext:TstringList;j:integer;beginaHTMLtext:=TstringList.Create;aHTMLtext.Add('<!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN"&......
  • 前端面试题 — webpack
    1.webpack的安装和使用方式安装Node.js和npm首先,确保你的计算机上安装了Node.js和npm(Node包管理器),因为Webpack是通过npm进行安装和管理的。创建项目目录并初始化npmnpminit-y安装Webpacknpminstallwebpackwebpack-cli......
  • docker安装rabbitmq
    //查找镜像dockersearchrabbitmq//默认拉取官方最新版本dockerpullrabbitmq//创建容器,也可直接执行该命令,没有镜像会去先拉取镜像dockerrun-d--namemyrabbitmq-p5672:5672-p15672:15672rabbitmq//进入镜像dockerexec-it容器id/bin/bash//安装UI插件rabb......
  • EasyExcel 自定义宽高
    packagecom.cloud.module.management.common.handler;importcn.hutool.core.util.ObjectUtil;importcom.alibaba.excel.enums.CellDataTypeEnum;importcom.alibaba.excel.metadata.Head;importcom.alibaba.excel.metadata.data.CellData;importcom.alibaba.excel.......
  • 记录解决VS 2022调试C++ DLL项目时卡顿的问题
    项目结构运行时为DotNet6的C#通过Cli/C++去调用C++的DLL。问题表现在VisualStudio2022中调试C++DLL代码时,按下F5、F10、F11跳转到下一行时VS卡顿会2秒左右,体验非常不好。问题原因然后发现原因是项目的配置属性中,调试那一行,调试器类型选择的是“自动”。解决此问题的方法......
  • C# 冻结Excel窗口以锁定行列、或解除冻结
    在处理大型Excel工作簿时,有时候我们需要在工作表中冻结窗格,这样可以在滚动查看数据的同时保持某些行或列固定不动。冻结窗格可以帮助我们更容易地导航和理解复杂的数据集。相反,当你不需要冻结窗格时,你可能需要解冻它们以获得完整的视野。下面将介绍如何使用免费.NET库通过C#实现......
  • comcat白名单(十)leak
    0为什么used不好用PlatformDependent.usedDirectMemory始终返回-1跟踪下来,io.netty.util.internal.PlatformDependent0#hasDirectBufferNoCleanerConstructor始终返回false  关于mxbeanhttps://blog.51cto.com/u_16175492/7224266https://segmentfault.com/a/1190000044......
  • C# 异或校验两种方法
    12publicbyteGetXor(byte[]data)3{4byteCheckCode=0;5intlen=data.Length;6for(inti=0;i<len;i++)7{8CheckCode^=data[i];9......
  • Mysql安装和远程登录--Centos7
    在Centos7中使用的包管理工具是yum,当然使用包管理工具安装也是最方便的。本文操作内容需要在root用户下,否则有些步骤无法成功执行。系统环境信息展示安装MySQL提供的RPMwgethttps://dev.mysql.com/get/mysql80-community-release-el7-11.noarch.rpm检查是否下载成功......
  • layUI select下拉框动态赋值和设置选中值
    layUIselect下拉框动态赋值和设置选中值<script>layui.use(['form','layedit','laydate'],function(){var$=layui.jquery;$.ajax({url:'../api/SysType/GetArticleType?parentId=1',//json文......