自动生成带有条件字母前缀、下一个可用号码和当前年份的案例 ID

问题描述 投票:0回答:1

我已经对此进行了研究,并考虑了如何做其中的一部分,但不太明白如何将它们组合在一起。当有人在我的应用程序中创建新记录时,如果

InvestigationLog.CourtType
下拉列表的结果是“转入 (F)”或“转入 (M)”,那么我需要填写一个文本字段,
InvestigationLog.TCaseNo
带有案例编号,但仅当它是这两个选择之一时。 (除了这两个还有其他选择。)

案件编号需要采用

T(then F or M depending upon the 2 choices above)-###-YY
的格式。例如,
TF-001-24
将是 2024 年的第一个 F 案例。

我当前该字段的 .cshtml 是:

<td style="width: 25%">
    <div class="mb-3">
        <label asp-for="InvestigationLog.TCaseNo"></label>
        <input asp-for="InvestigationLog.TCaseNo" id="TCaseNumber" type="text" class="form-control" readonly="readonly" />
    </div>
</td>            

Investigation.CourtType 字段的 .cshtml 为:

                <td style="width: 25%">
                    <div class="mb-3">
                        <label asp-for="InvestigationLog.CourtType"></label>
                        <select asp-for="InvestigationLog.CourtType" id="SelectCourtType" class="form-select" asp-items="@(new SelectList(Model.DisplayCourtTypeData.OrderBy(x => x.CourtTypeDesc),"CourtTypeDesc", "CourtTypeDesc"))" onchange="assignCaseNo" ><option value="" selected disabled>---Select Court Type---</option></select>
                    </div>
                </td>

我希望一旦有人从

TCaseNo
下拉列表中跳出,即可填充此
InvestigationLog.CourtType
。如果他们返回(在提交和绑定记录之前)更改
CourtType
下拉列表的值,我希望它相应地更改。

在我的研究中,我想出了这个来增加“F”和“M”

TCaseNo

var year = DateTime.Now.Year;

int incFCaseNo=0;
"F" + String.Format("{0:000}", incNumber, year);  
incNumber++;

int incMCaseNo=0;
"M" + String.Format("{0:000}", incNumber, year);  
incNumber++;

我的问题是如何将其放入

<input asp-for="InvestigationLog.TCaseNo"...>

假设我需要在 JavaScript 函数中为 allocateCaseNo 编写类似这样的 if 语句。只是不知道足够的 Javascript 来正确地执行此操作。这是我可怜的尝试:

<script type="text/javascript">

    function assignData() {
        const courtTypeChoice = courtType[$("#SelectCourtType").val()];
        $("#CourtType").val(courtTypeChoice).trigger('input');
    }

    function updateTCaseNumber('#TCaseNumber') {
        if ('#SelectCourtType').val() = "Transfer In (F)"
        {
            var year = DateTime.Now.Year;
            int incFCaseNo = 0;
            "F" + String.Format("{0:000}", incNumber, year);
            incNumber++;
        }
        else if('#SelectCourtType').val() = "Transfer In (M)"
        {
            var year = DateTime.Now.Year;
            int incMCaseNo = 0;
            "M" + String.Format("{0:000}", incNumber, year);
            incNumber++;
        }
        else
        {
            null
        }
        $(document).ready(function () {
            $('#SelectCourtType').on('input', updateTCaseNumber);
        });

    }
</script>

请知道,我知道这远远不正确,但我正在努力。

我也不知道事后如何处理自动生成的号码?例如,后来有人想要编辑

CourtType
,它就不再是 Transfer 类型。是否应该将
TCaseNo
释放出来以供重复使用?它会发生什么?这方面有标准做法吗?

预先感谢您对此的指导!恐怕其中大部分都超出了我的能力范围。

c# razor razor-pages auto-generate
1个回答
0
投票

这是一种应该由“企业”决定的规则。这与“身份必须是一个完整的序列吗?”是同一类问题。对于数字 ID。

一般来说,如果您有一个可以根据对象的各个方面(类型/标志)和创建它的条件(日期、位置等)计算的 ID,那么这些东西需要“始终”准确地表示对象目的。否则标准就没用了。 这意味着如果这些属性之一可以在事后更改,则标准必须允许。想象一下,如果您制作了

TF-001-24

,有人对其进行了更改,使其需要为

TM-001-24
,但后来决定不再等待......这确实是一个
TF
。如果您允许原始 ID 在切换后被其他东西使用,那么您就违反了标准,因为现在您要么无法将初始大小写回
F
,要么您
可以
但 ID 无法更改。在第二种情况下,你已经正式否定了可计算 ID 的目的。 在您提供的标准中,

001

不是

TF
TM
子集
。它是一个独立的计数器。您不需要知道它是否是今年的第一个,因为从技术上讲,如果您可以在创建后更改类型,那么这是不可知的。
我最喜欢的问题跟踪器使用此方案的修改版本,其中项目的短代码是前缀,数字是该项目中问题的顺序。所以

BC-123

IR-456
等。但是项目字段可以更改!如果我将
BC-123
从项目
BC
移至
IR
,它就会变成
IR-457
。但旧身份证怎么办?嗯,实际上它仍然映射到那个问题。因此,世界上可能存在的任何指向
BC-123
的链接仍然有效,并将带您前往
IR-457
。如果我将项目更改回
BC
,它将返回到
BC-123
的原始 ID,现在
IR-457
的任何链接都将指向那里。
当涉及到计算 ID 时,必须始终有一些独特的东西,但不是全部。就您而言,每年的案件数量是独一无二的。正在制作的案件总是有顺序的,只要您不需要担心总体 ID 中的空白,就没有理由可以随时更改您可能放入 ID 中的案件的所有其他方面.

这里更重要的部分是,无论存在什么其他值,

001-24

都足以让您达到这种情况。把它想象成跟踪器中的问题。如果 ID 的一部分可以更改,旧的 ID 必须保持有效,否则任何及时冻结的引用(例如便利贴或电子邮件)都将无效。

    

© www.soinside.com 2019 - 2024. All rights reserved.