Compare commits
34 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
50f1ced127 | ||
|
|
72d0e6a589 | ||
|
|
58954219c8 | ||
|
|
0776ed8c59 | ||
|
|
d2b7b982f3 | ||
|
|
c2f249c937 | ||
|
|
b7c80baadc | ||
|
|
a2bde9e920 | ||
|
|
78a6666e5a | ||
|
|
2f52c96067 | ||
|
|
24bcb27d07 | ||
|
|
16d509cf06 | ||
|
|
1daf15d92f | ||
|
|
329b8b70d4 | ||
|
|
e8160eefba | ||
|
|
275c6dfd10 | ||
|
|
a3b9ffef1c | ||
|
|
c4f958e688 | ||
|
|
547ec5d45a | ||
|
|
bb4934a031 | ||
|
|
c6cb8d5cce | ||
|
|
e5cfa0f10c | ||
|
|
5033fbbc06 | ||
|
|
58af3ffece | ||
|
|
4bea52c7ab | ||
|
|
fba8e12376 | ||
|
|
1c84a87f11 | ||
|
|
3c0b18f474 | ||
|
|
4e80ecca77 | ||
|
|
da4af4cb2a | ||
|
|
330129d24d | ||
|
|
45ce71c7da | ||
|
|
8f33c860ec | ||
|
|
30f2f917a4 |
5
.gitignore
vendored
5
.gitignore
vendored
@@ -9,6 +9,8 @@
|
||||
|
||||
# Compilación .NET Framework / ASP.NET
|
||||
[Bb]in/
|
||||
!SIG.Web/[Bb]in/
|
||||
!SIG.Web/[Bb]in/**
|
||||
[Oo]bj/
|
||||
[Dd]ebug/
|
||||
[Rr]elease/
|
||||
@@ -43,6 +45,8 @@ SIG.Web/App_Data/*.ldf
|
||||
SIG.Web/App_Data/*.log
|
||||
**/App_Data/log.txt
|
||||
SIG.Web/App_Data/Temp/
|
||||
SIG.Web/App_Data/Documentos/
|
||||
|
||||
SIG.Web/App_Data/Uploads/
|
||||
|
||||
# Herramientas y trabajo local de Codex
|
||||
@@ -72,3 +76,4 @@ coverage/
|
||||
*.secrets.json
|
||||
Web.local.config
|
||||
appsettings.local.json
|
||||
/SIG.Web/Documentos/**
|
||||
|
||||
Binary file not shown.
745
AGENTS.md
745
AGENTS.md
@@ -45,6 +45,8 @@ Database
|
||||
## Language rules
|
||||
|
||||
- All new code must be **C#**.
|
||||
- All new project-owned identifiers and file names must use Spanish domain terminology. This includes file names, namespaces, classes, interfaces, methods, properties, fields, parameters and local variables in C#; JavaScript functions and variables; CSS hooks; HTML `data-*` attributes; and `ViewState` keys. Keep framework, library, protocol, generated-code, and established external API names unchanged.
|
||||
- Do not introduce English aliases for Spanish database or business concepts. For example, use `CveUnidadMedida`, `unidadMedida`, or `data-cve-unidad-medida`, not `MeasurementUnit`, `measurementUnit`, or `data-measurement-unit-id`.
|
||||
- Do not add VB.NET files.
|
||||
- Do not add `.vb` files to the active project.
|
||||
- Old VB files may exist only as migration reference files using `.vb.txt`.
|
||||
@@ -53,652 +55,62 @@ Database
|
||||
|
||||
---
|
||||
|
||||
## Command rules
|
||||
|
||||
When giving commands for this project:
|
||||
|
||||
- Prefer **PowerShell**, **Developer PowerShell**, or **Visual Studio Package Manager Console** commands.
|
||||
- Commands must be written in **one line**.
|
||||
- Do not use PowerShell line continuation with backticks.
|
||||
- Do not suggest `dotnet new webforms` because WebForms is not supported by the .NET CLI as an ASP.NET Core project.
|
||||
- If a WebForms project must be created from command line, use Visual Studio/MSBuild-compatible project files or create the project through Visual Studio using **ASP.NET Web Application (.NET Framework)**.
|
||||
- Target framework must be `.NET Framework 4.8` or `.NET Framework 4.8.1`.
|
||||
|
||||
Recommended project creation path:
|
||||
|
||||
```powershell
|
||||
mkdir "C:\Proyectos\Agua de hermosillo\Plataforma de Desarrolladores"
|
||||
```
|
||||
|
||||
```powershell
|
||||
cd "C:\Proyectos\Agua de hermosillo\Plataforma de Desarrolladores"
|
||||
```
|
||||
|
||||
Then create/open the WebForms project in Visual Studio 2022 as:
|
||||
|
||||
```text
|
||||
ASP.NET Web Application (.NET Framework) → Web Forms → C# → .NET Framework 4.8/4.8.1
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Project folder rules
|
||||
|
||||
Use this base structure:
|
||||
|
||||
```text
|
||||
SIG.Web/
|
||||
AppCode/
|
||||
Infrastructure/
|
||||
Sql/
|
||||
Repositories/
|
||||
Security/
|
||||
Utilities/
|
||||
Contracts/
|
||||
Models/
|
||||
Services/
|
||||
Styles/
|
||||
Scripts/
|
||||
Metronic/
|
||||
Site.master
|
||||
Site.master.cs
|
||||
Login.aspx
|
||||
Login.aspx.cs
|
||||
Inicio.aspx
|
||||
Inicio.aspx.cs
|
||||
BundleConfig.cs
|
||||
Global.asax
|
||||
Global.asax.cs
|
||||
Web.config
|
||||
```
|
||||
|
||||
Rules:
|
||||
|
||||
- Do not place database access directly inside `.aspx.cs`, `.ascx.cs`, or `Site.master.cs`.
|
||||
- Database-related helpers go under `App_Code/Sql` or a clearly named SQL/data folder.
|
||||
- Business access goes through `Contracts` and `Services`.
|
||||
- If the project file needs explicit compilation entries, include C# files recursively, for example `App_Code\**\*.cs`, but avoid duplicate compile entries that include the same file twice.
|
||||
|
||||
---
|
||||
|
||||
## Asset folder rules
|
||||
|
||||
The following folders are legacy visual dependencies and must be copied as complete folders:
|
||||
|
||||
```text
|
||||
Styles/
|
||||
Scripts/
|
||||
Metronic/
|
||||
```
|
||||
|
||||
Do not replace Metronic with Bootstrap-only layout.
|
||||
Do not upgrade Metronic unless the user explicitly asks.
|
||||
Do not remove old scripts just because they look unused; only remove references from bundles when they are not used by the master/login flow.
|
||||
|
||||
---
|
||||
|
||||
## Bundle rules
|
||||
|
||||
The project must implement only the bundle methods needed by the current `Site.master` and login page.
|
||||
|
||||
Do not bring every old bundle method from the legacy project.
|
||||
Do not add unused bundle groups just because they existed before.
|
||||
Do not add duplicate bundle keys.
|
||||
Do not add empty bundle methods.
|
||||
|
||||
Allowed current bundle keys are the ones actually rendered by master/login, especially:
|
||||
|
||||
```text
|
||||
~/bundles/modernizr
|
||||
~/bundles/scripts
|
||||
~/bundles/highcharts
|
||||
~/Metronic/assets/global/scripts/JSV1
|
||||
~/Metronic/assets/global/css/cssV1
|
||||
```
|
||||
|
||||
WebForms/AjaxControlToolkit support bundles are allowed only when referenced by `ScriptManager` or required by WebForms controls:
|
||||
|
||||
```text
|
||||
~/bundles/jquery
|
||||
~/bundles/WebFormsJs
|
||||
~/bundles/MsAjaxJs
|
||||
~/Content/AjaxControlToolkit/Styles/Bundle
|
||||
```
|
||||
|
||||
Rules:
|
||||
|
||||
- If `Site.master` or `Login.aspx` does not render a bundle, do not add it.
|
||||
- If a bundle exists only for old pages not migrated yet, leave it out until the page needs it.
|
||||
- Prefer preserving original asset paths from `Styles`, `Scripts`, and `Metronic`.
|
||||
- Use `CssRewriteUrlTransform` for CSS bundles that reference fonts, images, or relative URLs.
|
||||
- Do not register CSS/JS from server controls when the style/script is global; use `BundleConfig` and the master page.
|
||||
|
||||
---
|
||||
|
||||
## WebForms page rules
|
||||
|
||||
All normal `.aspx` pages must use `Site.master`, except the login page.
|
||||
|
||||
Normal pages:
|
||||
|
||||
- Must include `MasterPageFile="~/Site.master"`.
|
||||
- Must not include `<html>`, `<head>`, `<body>`, or `<form>`.
|
||||
- Must use `<asp:Content>` controls.
|
||||
- Should inherit from `ClsPaginaBase` or the current C# page base class.
|
||||
- Must not connect directly to SQL classes.
|
||||
- Must call contracts/services for data, authentication, permissions, catalogs, menus, and user context.
|
||||
|
||||
Public registration exception:
|
||||
|
||||
- `Pages/Security/RegistroCliente.aspx`, `RegistroPendiente.aspx` and `VerificarCorreo.aspx` may be standalone public pages with their own `form runat="server"`.
|
||||
- `RegistroCliente.aspx` keeps its two-step draft in encrypted ViewState and persists only after all client/company validations pass.
|
||||
- All persistence continues through contracts/services/repositories and stored procedures.
|
||||
|
||||
Login page:
|
||||
|
||||
- Is the only page allowed to have its own full HTML structure.
|
||||
- May inherit from `System.Web.UI.Page` or its own login base class.
|
||||
- Must not inherit from `ClsPaginaBase` if that base class requires an authenticated session.
|
||||
- Must use `IAuthContract` or the current auth contract.
|
||||
- Must create a dummy session until real authentication is implemented.
|
||||
- Must not hardcode real database login logic in `Login.aspx.cs`.
|
||||
|
||||
Important naming rule:
|
||||
|
||||
- Do not create both `Login.aspx` and `LogIn.aspx`.
|
||||
- If the starter already uses `LogIn.aspx`, keep that name and keep `Web.config` consistent.
|
||||
- If creating from scratch, prefer `Login.aspx`, but update `Web.config`, redirects, and links consistently.
|
||||
|
||||
---
|
||||
|
||||
## Master page rules
|
||||
|
||||
`Site.master` owns the main HTML structure.
|
||||
|
||||
Rules:
|
||||
|
||||
- `Site.master` owns the only main `<form runat="server">`.
|
||||
- `Site.master` must keep the Metronic layout structure.
|
||||
- Keep the sidebar/header/page-content structure similar to the original Metronic project.
|
||||
- Do not restore the hidden search box from the old header.
|
||||
- Keep the actions button if it exists in the selected master layout.
|
||||
- Do not hardcode real user/menu database logic inside `Site.master.cs`.
|
||||
- User data must come from a contract/service.
|
||||
- Menu data must come from a contract/service.
|
||||
- Breadcrumb/title/layout data must come from a contract/service when dynamic.
|
||||
- Do not use `<title id="Titulo" runat="server">`.
|
||||
- Prefer `<title><%: Page.Title %></title>`.
|
||||
- If a generated starter currently uses a title literal, replace it with `Page.Title` unless there is a specific reason to keep the literal.
|
||||
|
||||
Current preferred contracts:
|
||||
|
||||
```text
|
||||
IAuthContract
|
||||
IUserSessionContract
|
||||
IMenuContract
|
||||
IMasterPageContract
|
||||
```
|
||||
|
||||
If old names such as `IUserContextProvider` or `IMenuProvider` exist, migrate them to the current contract naming or create adapters. Do not keep two competing naming systems.
|
||||
|
||||
---
|
||||
|
||||
## ContentPlaceHolder rules
|
||||
|
||||
`Site.master` must use short placeholder IDs.
|
||||
|
||||
Preferred final placeholder IDs:
|
||||
|
||||
```text
|
||||
H = page-specific head/CSS content
|
||||
C = main page content
|
||||
J = page-specific JavaScript
|
||||
```
|
||||
|
||||
Example in `Site.master`:
|
||||
|
||||
```aspx
|
||||
<asp:ContentPlaceHolder ID="H" runat="server" />
|
||||
<asp:ContentPlaceHolder ID="C" runat="server" />
|
||||
<asp:ContentPlaceHolder ID="J" runat="server" />
|
||||
```
|
||||
|
||||
Example in a normal page:
|
||||
|
||||
```aspx
|
||||
<asp:Content ID="ContentHead" ContentPlaceHolderID="H" runat="server">
|
||||
</asp:Content>
|
||||
|
||||
<asp:Content ID="ContentMain" ContentPlaceHolderID="C" runat="server">
|
||||
</asp:Content>
|
||||
|
||||
<asp:Content ID="ContentScripts" ContentPlaceHolderID="J" runat="server">
|
||||
</asp:Content>
|
||||
```
|
||||
|
||||
If the generated starter currently has `HeadContent`, `MainContent`, or `ScriptsContent`, rename them to `H`, `C`, and `J` before adding more pages.
|
||||
|
||||
Do not mix placeholder naming systems in the same project.
|
||||
|
||||
---
|
||||
|
||||
## Login and session rules
|
||||
|
||||
Authentication must go through a contract.
|
||||
|
||||
Required flow:
|
||||
|
||||
```text
|
||||
Login.aspx.cs
|
||||
↓
|
||||
IAuthContract
|
||||
↓
|
||||
DummyAuthContract now, real AuthService later
|
||||
↓
|
||||
IUserSessionContract
|
||||
↓
|
||||
Session user
|
||||
```
|
||||
|
||||
Initial login may be dummy.
|
||||
|
||||
Dummy session user should be safe and clearly fake, for example:
|
||||
|
||||
```text
|
||||
UserId: 15
|
||||
CompanyId: 1
|
||||
RoleId: 1
|
||||
RoleName: Administrador
|
||||
CompanyName: Empresa Demo
|
||||
DisplayName: Usuario Demo
|
||||
```
|
||||
|
||||
Rules:
|
||||
|
||||
- Dummy login may accept any non-empty username and password during starter setup.
|
||||
- Mark dummy authentication clearly in code comments.
|
||||
- Do not mix real SQL authentication with dummy authentication in the same class.
|
||||
- When real login is implemented, create a new service such as `SqlAuthContract` or `AuthService`.
|
||||
- Do not store passwords in session.
|
||||
- Do not log raw passwords.
|
||||
- Use Forms Authentication if staying with classic WebForms auth.
|
||||
|
||||
---
|
||||
|
||||
## Contract rules
|
||||
|
||||
Contracts belong in `/Contracts`.
|
||||
|
||||
Current minimum contracts:
|
||||
|
||||
```text
|
||||
Contracts/IAuthContract.cs
|
||||
Contracts/IUserSessionContract.cs
|
||||
Contracts/IMenuContract.cs
|
||||
Contracts/IMasterPageContract.cs
|
||||
```
|
||||
|
||||
Suggested future contracts:
|
||||
|
||||
```text
|
||||
Contracts/IPermissionContract.cs
|
||||
Contracts/INotificationContract.cs
|
||||
Contracts/ICatalogSearchContract.cs
|
||||
Contracts/IAuditContract.cs
|
||||
Contracts/ICurrentCompanyContract.cs
|
||||
```
|
||||
|
||||
Rules:
|
||||
|
||||
- Pages call contracts, not SQL classes.
|
||||
- Master page calls contracts, not SQL classes.
|
||||
- Login calls contracts, not SQL classes.
|
||||
- Contracts must return models, DTOs, or result objects, not raw `DataTable` unless migrating legacy code.
|
||||
- If legacy `DataTable` is required, isolate it behind a contract and document why.
|
||||
|
||||
---
|
||||
|
||||
## Service rules
|
||||
|
||||
Services belong in `/Services`.
|
||||
|
||||
Current starter services may include:
|
||||
|
||||
```text
|
||||
Services/ContractRegistry.cs
|
||||
Services/DummyAuthContract.cs
|
||||
Services/UserSessionContract.cs
|
||||
Services/DummyMenuContract.cs
|
||||
Services/MasterPageContract.cs
|
||||
```
|
||||
|
||||
Rules:
|
||||
|
||||
- `ContractRegistry` may be used as a simple manual dependency resolver for WebForms.
|
||||
- Do not introduce a complex dependency injection framework unless required.
|
||||
- Services may depend on SQL helpers/repositories.
|
||||
- `.aspx.cs` files should be thin and delegate work to services.
|
||||
- Keep dummy services separate from SQL-backed services.
|
||||
|
||||
---
|
||||
|
||||
## Model rules
|
||||
|
||||
Models belong in `/Models`.
|
||||
|
||||
Current starter models may include:
|
||||
|
||||
```text
|
||||
Models/AppUser.cs
|
||||
Models/LoginResult.cs
|
||||
Models/MenuItemModel.cs
|
||||
Models/MasterLayoutModel.cs
|
||||
Models/BreadcrumbItem.cs
|
||||
```
|
||||
|
||||
Rules:
|
||||
|
||||
- Use models to move data between contracts and WebForms pages.
|
||||
- Do not pass anonymous objects across layers.
|
||||
- Do not expose SQL connection classes or `SqlDataReader` from services to pages.
|
||||
- Keep models simple and serializable when possible.
|
||||
|
||||
---
|
||||
|
||||
## Database and SQL structure rules
|
||||
|
||||
All database connection structure must be centralized under `App_Code/Sql` or an equivalent SQL/data folder.
|
||||
|
||||
Current starter SQL structure:
|
||||
|
||||
```text
|
||||
App_Code/Sql/ConnectionNames.cs
|
||||
App_Code/Sql/IConnectionStringProvider.cs
|
||||
App_Code/Sql/WebConfigConnectionStringProvider.cs
|
||||
App_Code/Sql/SqlConnectionFactory.cs
|
||||
App_Code/Sql/SqlQueryExecutor.cs
|
||||
```
|
||||
|
||||
Rules:
|
||||
|
||||
- Define connection names in one place.
|
||||
- Read connection strings from `Web.config`.
|
||||
- Do not hardcode connection strings in pages, master, controls, or services.
|
||||
- Do not create `SqlConnection` directly in `.aspx.cs`.
|
||||
- Do not create `SqlCommand` directly in `.aspx.cs`.
|
||||
- Use repositories or SQL executor classes behind contracts.
|
||||
- All application database reads and writes must use stored procedures; inline SQL in C# is prohibited.
|
||||
- Mandatory: read and follow `AGENTS_STORED_PROCEDURES.md` for naming, output parameters, TRY/CATCH, logging, transactions, and logical deletion.
|
||||
- Mandatory: read and follow `AGENTS_DATA_READER_MAPPING.md` for object, list, `DataTable`, and `JArray` result mapping.
|
||||
- Mandatory: read and follow `AGENTS_DATABASE_ERROR_LOGGING.md` for safe parameter logging and reproducible stored-procedure calls.
|
||||
- Mandatory: read and follow `AGENTS_PAGE_STRUCTURE.md` for the `Pages/Modulo/` location of all new WebForms pages.
|
||||
- Mandatory: read and follow `AGENTS_WEBFORMS_PARTIAL_POSTBACKS.md` for the single master form, ScriptManager ownership, UpdatePanel usage, and partial-postback rules.
|
||||
- Mandatory: read and follow `AGENTS_JAVASCRIPT_INITIALIZATION.md` for per-element initialization flags, global event guards, and idempotent control setup after partial postbacks.
|
||||
- Keep stored procedure names centralized.
|
||||
- Repositories must use `CommandType.StoredProcedure` and parameterized inputs/outputs.
|
||||
- Never concatenate raw user input into SQL.
|
||||
|
||||
Recommended Web.config connection string pattern:
|
||||
|
||||
```xml
|
||||
<connectionStrings>
|
||||
<add name="DefaultConnection" connectionString="..." providerName="System.Data.SqlClient" />
|
||||
<add name="SecurityConnection" connectionString="..." providerName="System.Data.SqlClient" />
|
||||
<add name="ReportingConnection" connectionString="..." providerName="System.Data.SqlClient" />
|
||||
</connectionStrings>
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Base page rules
|
||||
|
||||
Normal pages should inherit from a C# base page.
|
||||
|
||||
Preferred base class:
|
||||
|
||||
```text
|
||||
App_Code/Infrastructure/ClsPaginaBase.cs
|
||||
```
|
||||
|
||||
If the starter currently has `WebFormsPageBase.cs`, either:
|
||||
|
||||
- rename it to `ClsPaginaBase.cs`, or
|
||||
- keep `WebFormsPageBase` and update this AGENTS.md/project rules consistently.
|
||||
|
||||
Do not keep both base classes doing the same job.
|
||||
|
||||
Base page responsibilities:
|
||||
|
||||
- Validate authenticated session.
|
||||
- Expose current user from `IUserSessionContract`.
|
||||
- Provide helper methods for messages, redirects, and permissions.
|
||||
- Avoid database access.
|
||||
- Avoid page-specific business logic.
|
||||
|
||||
---
|
||||
|
||||
## Global.asax rules
|
||||
|
||||
`Global.asax` / `Global.asax.cs` should:
|
||||
|
||||
- Register bundles through `BundleConfig.RegisterBundles(BundleTable.Bundles)`.
|
||||
- Configure basic application startup.
|
||||
- Avoid business logic.
|
||||
- Avoid direct database startup queries unless absolutely required.
|
||||
|
||||
If OWIN is not used, prevent startup errors by adding this to `Web.config`:
|
||||
|
||||
```xml
|
||||
<add key="owin:AutomaticAppStartup" value="false" />
|
||||
```
|
||||
|
||||
Do not add OWIN packages unless the project actually needs OWIN.
|
||||
|
||||
---
|
||||
|
||||
## Web.config rules
|
||||
|
||||
`Web.config` must stay compatible with ASP.NET WebForms on .NET Framework 4.8/4.8.1.
|
||||
|
||||
Rules:
|
||||
|
||||
- Use Forms Authentication unless a different auth system is explicitly requested.
|
||||
- Allow anonymous access only to the login page and required static assets.
|
||||
- Do not add ASP.NET Core middleware settings.
|
||||
- Do not add unsupported `.NET Core` config sections.
|
||||
- Do not add CodeDom provider entries unless the matching NuGet package is installed.
|
||||
- If this error appears: `No se pudo ubicar el tipo de proveedor CodeDom Microsoft.CodeDom.Providers.DotNetCompilerPlatform...`, either install the exact package version or remove/fix the `system.codedom` section.
|
||||
- Keep MIME mappings for fonts such as `.woff` and `.woff2` when Metronic requires them.
|
||||
|
||||
---
|
||||
|
||||
## OWIN rule
|
||||
|
||||
If the application shows this error:
|
||||
|
||||
```text
|
||||
No assembly found containing an OwinStartupAttribute
|
||||
```
|
||||
|
||||
And the project does not use OWIN, add this in `appSettings`:
|
||||
|
||||
```xml
|
||||
<add key="owin:AutomaticAppStartup" value="false" />
|
||||
```
|
||||
|
||||
Do not create an empty OWIN startup class just to silence the error unless OWIN is actually required.
|
||||
|
||||
---
|
||||
|
||||
## Site.master rendering rules
|
||||
|
||||
The master page should render bundles and scripts in this general order:
|
||||
|
||||
Inside `<head>`:
|
||||
|
||||
```aspx
|
||||
<%: Scripts.Render("~/bundles/modernizr") %>
|
||||
<%: Styles.Render("~/Content/AjaxControlToolkit/Styles/Bundle") %>
|
||||
<%: Styles.Render("~/Metronic/assets/global/css/cssV1") %>
|
||||
<asp:ContentPlaceHolder ID="H" runat="server" />
|
||||
```
|
||||
|
||||
Inside `<form>` near the top:
|
||||
|
||||
```aspx
|
||||
<asp:ScriptManager ID="TSM" runat="server" />
|
||||
<%: Scripts.Render("~/bundles/scripts") %>
|
||||
```
|
||||
|
||||
Before closing `</form>`:
|
||||
|
||||
```aspx
|
||||
<%: Scripts.Render("~/Metronic/assets/global/scripts/JSV1") %>
|
||||
<%: Scripts.Render("~/bundles/highcharts") %>
|
||||
<asp:ContentPlaceHolder ID="J" runat="server" />
|
||||
```
|
||||
|
||||
Rules:
|
||||
|
||||
- Do not render the same script twice.
|
||||
- Do not render JQuery twice.
|
||||
- Keep `ScriptManager` if AjaxControlToolkit, UpdatePanel, or WebForms AJAX is used.
|
||||
- Keep `TSM_AsyncPostBackError` only if implemented in code-behind.
|
||||
- Remove or implement any event handler referenced by markup.
|
||||
|
||||
---
|
||||
|
||||
## Header/menu rules
|
||||
|
||||
The master header must preserve the selected Metronic layout.
|
||||
|
||||
Rules:
|
||||
|
||||
- Keep user dropdown.
|
||||
- Keep logout option.
|
||||
- Keep actions button when present.
|
||||
- Do not restore the hidden/old search box from legacy header.
|
||||
- Sidebar menu must be built from `IMenuContract`.
|
||||
- Do not build the menu from SQL inside `Site.master.cs`.
|
||||
- Menu items should use `MenuItemModel` or an equivalent model.
|
||||
- Encode text output when generating HTML menu strings.
|
||||
|
||||
---
|
||||
|
||||
## Page title and breadcrumb rules
|
||||
|
||||
Page title and breadcrumb should be handled consistently.
|
||||
|
||||
Rules:
|
||||
|
||||
- Use `Page.Title` for the browser title.
|
||||
- Use a master/layout model for visible page title and breadcrumb.
|
||||
- Do not hardcode global breadcrumb logic in every page.
|
||||
- Normal pages may set page title in `Page_Load` or via properties.
|
||||
|
||||
Preferred model:
|
||||
|
||||
```text
|
||||
MasterLayoutModel
|
||||
PageTitle
|
||||
Breadcrumbs
|
||||
CurrentUser
|
||||
MenuItems
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Security rules
|
||||
|
||||
- Do not store passwords in code, comments, Web.config examples, or session.
|
||||
- Do not expose real connection strings in committed files.
|
||||
- Use dummy values in examples.
|
||||
- Use parameterized SQL.
|
||||
- Validate uploaded files by extension, MIME type, and size when uploads are later added.
|
||||
- Avoid writing raw exception details to the user in production.
|
||||
- Keep `customErrors mode="Off"` only for local development.
|
||||
|
||||
---
|
||||
|
||||
## Error handling rules
|
||||
|
||||
- Handle null session user cleanly and redirect to login.
|
||||
- Handle failed login with a friendly message.
|
||||
- Handle async postback errors through `ScriptManager.AsyncPostBackError` only if the handler exists.
|
||||
- Avoid infinite loading states in JavaScript controls.
|
||||
- For AJAX/server search controls, use client and server timeouts.
|
||||
- Recommended default search timeout: about 20 to 30 seconds unless the user asks otherwise.
|
||||
|
||||
---
|
||||
|
||||
## JavaScript and CSS rules
|
||||
|
||||
- Global scripts/styles must be registered in `BundleConfig` and rendered by master.
|
||||
- Page-specific scripts go in placeholder `J`.
|
||||
- Page-specific CSS/head content goes in placeholder `H`.
|
||||
- Do not inline large JavaScript blocks in `.aspx` unless page-specific and small.
|
||||
- Do not remove existing custom legacy files unless the user asks.
|
||||
- Fix null `addEventListener` errors by checking that the element exists before attaching events.
|
||||
- Avoid blocking Ctrl+V unless a specific feature requires it.
|
||||
|
||||
---
|
||||
|
||||
## User control rules
|
||||
|
||||
If server controls are migrated:
|
||||
|
||||
- Prefer C# classes under `App_Code/SigControls` when creating reusable server controls.
|
||||
- Do not mix WebForms `.ascx` user controls with App_Code server-control classes unless there is a clear reason.
|
||||
- Do not register global CSS/JS from the control when master bundles already include them.
|
||||
- Controls should expose properties/events and avoid direct SQL access.
|
||||
- Controls should call contracts/services when they need data.
|
||||
|
||||
---
|
||||
|
||||
## PDF viewer migration rules
|
||||
|
||||
If the PDF viewer is added to this project later:
|
||||
|
||||
- Implement it in C#.
|
||||
- Prefer `App_Code/SigControls` for server controls.
|
||||
- Do not add VB files.
|
||||
- Do not use `/* */` comments in VB reference files; VB references must remain `.vb.txt` only.
|
||||
- Keep global PDF viewer CSS/JS references in bundles.
|
||||
- Do not register duplicate resources from the control and master at the same time.
|
||||
- Session or temp-folder PDF storage must be explicit and centralized.
|
||||
|
||||
---
|
||||
|
||||
## Home page rules
|
||||
|
||||
Use only one active home page convention.
|
||||
|
||||
Allowed options:
|
||||
|
||||
```text
|
||||
Default.aspx
|
||||
Inicio.aspx
|
||||
```
|
||||
|
||||
Rules:
|
||||
|
||||
- Do not keep both as competing entry pages.
|
||||
- If using `Inicio.aspx`, redirect `Default.aspx` to `Inicio.aspx` or update Forms Authentication default URL.
|
||||
- If using `Default.aspx`, keep Web.config and menu links pointing to `Default.aspx`.
|
||||
- The home page must use `Site.master`.
|
||||
|
||||
---
|
||||
|
||||
## File delivery rules for this project
|
||||
|
||||
When generating a single downloadable file:
|
||||
|
||||
- If the file is `.js` or `.css` and it is not inside a ZIP, append `.txt` to the filename.
|
||||
- Example: `custom.js.txt`, `styles.css.txt`.
|
||||
- If the file is inside a ZIP, keep the real extension `.js` or `.css`.
|
||||
- For project-level delivery, prefer ZIP files.
|
||||
|
||||
---
|
||||
## Terminología de usuarios y asociado CANADEVI
|
||||
|
||||
- Los usuarios que no son clientes se denominan **usuarios de Agua de Hermosillo** o **mojados**.
|
||||
- Sólo los usuarios de Agua de Hermosillo (mojados) pueden activar o desactivar **Asociado CANADEVI** en el registro de un desarrollador. Los usuarios clientes pueden consultar ese dato, pero no modificarlo. La restricción debe aplicarse también en servidor al guardar, no sólo en la interfaz.
|
||||
|
||||
## Source code readability rules
|
||||
|
||||
All generated or modified source code must be formatted for human maintenance.
|
||||
|
||||
- Do not compress multiple controls, HTML elements, CSS rules, SQL clauses, assignments, conditions, or statements onto one line merely to reduce file length.
|
||||
- Use consistent indentation and line breaks that make nesting and control flow visible.
|
||||
- Put independent C# statements on separate lines. Expand non-trivial `if`, loops, object initializers, method calls, and methods across multiple lines.
|
||||
- In ASPX/HTML, place nested elements and server controls on separate indented lines. Keep attributes readable; wrap long declarations across lines.
|
||||
- Format CSS with one declaration per line for page-specific styles. Format JavaScript and SQL using the same readability principle.
|
||||
- Prefer clear diffs and easy future editing over compact generated output.
|
||||
- The command rule requiring one-line PowerShell or terminal commands applies only to commands. It does not apply to C#, ASPX, HTML, CSS, JavaScript, SQL, XML, or configuration source.
|
||||
|
||||
## Agent instruction file maintenance rules
|
||||
|
||||
- Before modifying `AGENTS.md` or any complementary `AGENTS_*.md` file, read the existing file and apply only the smallest required addition or correction.
|
||||
- Do not rewrite or replace an entire agent instruction file unless the user explicitly requests a complete rewrite.
|
||||
- Preserve existing user-authored rules, terminology, capitalization, examples, and formatting outside the requested change.
|
||||
- When adding a rule, first verify whether an equivalent or conflicting rule already exists and update only the relevant section.
|
||||
|
||||
## Mandatory authorization and change-control rules
|
||||
|
||||
- The agent is permanently prohibited from executing `git commit`, `git commit --amend`, creating commits through another command, or asking another agent to create a commit in this repository.
|
||||
- Before modifying code, files, configuration, stored procedures, database schema, or database data, the agent must tell the user exactly which files and objects it proposes to change and what each change will do.
|
||||
- The agent must wait for the user's explicit confirmation before making any modification.
|
||||
- Until explicit confirmation is received, the agent may perform read-only inspection and diagnosis only.
|
||||
- Authorization to inspect, diagnose, or review does not authorize implementation.
|
||||
- Authorization is limited to the files and objects explicitly disclosed. If the proposed scope changes, the agent must explain the additional changes and obtain new explicit confirmation.
|
||||
- Authorization to edit a SQL script does not authorize installing or executing it against a database. Database execution requires separate explicit confirmation.
|
||||
- A corrective action, rollback, or attempted restoration is still a modification and also requires explicit confirmation before execution.
|
||||
- The agent must never infer authorization from urgency, prior approval for a different change, or the fact that the agent caused the problem.
|
||||
|
||||
## Mandatory complementary instruction files
|
||||
|
||||
- Antes de trabajar en cada solicitud del proyecto, leer `AGENTS.md` y los agentes complementarios aplicables. Nunca omitirlos al corregir errores o reutilizar código existente; verificar también el código que se conserva.
|
||||
- El CSS y JavaScript específicos de una página `.aspx` deben permanecer dentro de ese mismo `.aspx`: CSS en un bloque `<style>` de la sección `H` y JavaScript en un bloque `<script>` de la sección `J`. No crear archivos `.css` o `.js` separados para esa página ni trasladar su código a bundles globales, salvo petición explícita del usuario. Esta regla no cambia la carga global de recursos compartidos y de UserControls.
|
||||
- Los archivos CSS/JS de controles y UserControls deben cargarse globalmente desde `Styles/` y `Scripts/`, mediante los bundles de la master, aunque el control no esté presente. No usar `Page.Header.Controls.Add` ni inyectar archivos o definiciones CSS/JS desde el control. Para acciones puntuales desde el servidor, usar el `RegistraScript` existente (`PageScriptRegistrar.RegistraScript` en UserControls); no inventar colas ni serializar acciones como alternativa.
|
||||
- Cada instancia de un componente debe marcar su inicialización JavaScript con un atributo `data-*` propio. Inicializar sólo elementos sin marca, sin quitar y volver a agregar eventos. Aplican las reglas de `AGENTS_WEBFORMS_ESTRUCTURA.md` y `AGENTS_JAVASCRIPT_INITIALIZATION.md`.
|
||||
|
||||
The following files are part of these instructions. Read each file whose scope applies before taking action:
|
||||
|
||||
- `AGENTS_ARQUITECTURA.md`: project structure, contracts, services, repositories, models, database access, and transactions.
|
||||
- `AGENTS_WEBFORMS_ESTRUCTURA.md`: WebForms pages, master page, login, bundles, assets, configuration, controls, and application shell.
|
||||
- `AGENTS_MANTENIMIENTO_PROYECTO.md`: commands, security, errors, feedback, grids, delivery, checklist, and project evolution.
|
||||
- `AGENTS_STORED_PROCEDURES.md`: stored-procedure rules.
|
||||
- `AGENTS_DATA_READER_MAPPING.md`: database-result mapping.
|
||||
- `AGENTS_DATABASE_ERROR_LOGGING.md`: database error diagnostics.
|
||||
- `AGENTS_PAGE_STRUCTURE.md`: page locations and structure.
|
||||
- `AGENTS_WEBFORMS_PARTIAL_POSTBACKS.md`: forms, ScriptManager, UpdatePanel, and partial postbacks.
|
||||
- `AGENTS_JAVASCRIPT_INITIALIZATION.md`: idempotent JavaScript initialization.
|
||||
- `AGENTS_CATALOG_STRUCTURE.md`: catalog layout and behavior.
|
||||
- `AGENTS_DOCUMENT_STORAGE.md`: protected document storage and retrieval.
|
||||
|
||||
## What not to add yet
|
||||
|
||||
@@ -724,45 +136,6 @@ The starter must stay small and focused: commands, master page, login, contracts
|
||||
|
||||
---
|
||||
|
||||
## Current implementation checklist
|
||||
|
||||
When modifying or regenerating the project, verify:
|
||||
|
||||
- [ ] Project targets .NET Framework 4.8 or 4.8.1.
|
||||
- [ ] All new code is C#.
|
||||
- [ ] No active `.vb` files were added.
|
||||
- [ ] `Styles`, `Scripts`, and `Metronic` were copied as-is.
|
||||
- [ ] `BundleConfig.cs` contains only bundles rendered by master/login or required by WebForms AJAX.
|
||||
- [ ] `Site.master` owns the only main form.
|
||||
- [ ] Normal pages use `Site.master`.
|
||||
- [ ] Normal pages do not contain full HTML structure.
|
||||
- [ ] Login is the only standalone full HTML page.
|
||||
- [ ] User/session data comes from `IUserSessionContract`.
|
||||
- [ ] Login uses `IAuthContract`.
|
||||
- [ ] Menu comes from `IMenuContract`.
|
||||
- [ ] Master layout data comes from `IMasterPageContract`.
|
||||
- [ ] SQL connection helpers are centralized under `App_Code/Sql`.
|
||||
- [ ] Pages do not directly instantiate SQL connections.
|
||||
- [ ] Placeholder IDs are `H`, `C`, and `J`.
|
||||
- [ ] No hidden old search box was restored.
|
||||
- [ ] Actions button is preserved when present in the selected layout.
|
||||
- [ ] `Web.config` login URL matches the actual login page filename.
|
||||
- [ ] No duplicate `Login.aspx` / `LogIn.aspx` pages exist.
|
||||
- [ ] No OWIN startup error exists, or OWIN automatic startup is disabled.
|
||||
- [ ] No missing CodeDom provider error exists.
|
||||
|
||||
---
|
||||
|
||||
## Preferred next evolution
|
||||
|
||||
After the starter works, the safest growth path is:
|
||||
|
||||
1. Replace dummy login with SQL-backed `IAuthContract`.
|
||||
2. Replace dummy menu with SQL-backed `IMenuContract`.
|
||||
3. Add permission contract.
|
||||
4. Add base page authorization checks.
|
||||
5. Add reusable controls one by one.
|
||||
6. Add catalog search and UI helpers.
|
||||
7. Add PDF viewer only after the base shell is stable.
|
||||
|
||||
Keep every new feature behind contracts so the WebForms UI remains thin and easier to migrate later if needed.
|
||||
REGLA OBLIGATORIA: Nunca usar args.get_panelsUpdated() ni get_panelsUpdated() en JavaScript de WebForms/UpdatePanel de este proyecto; esa llamada rompe repetidamente el entorno. Para reinicializar después de postbacks parciales usar PageRequestManager.add_endRequest(function () { ... }) sin depender de args, o eventos delegados cuando corresponda.
|
||||
232
AGENTS_ARQUITECTURA.md
Normal file
232
AGENTS_ARQUITECTURA.md
Normal file
@@ -0,0 +1,232 @@
|
||||
# AGENTS_ARQUITECTURA.md
|
||||
|
||||
These rules complement `AGENTS.md` and are mandatory whenever the task changes project structure, C# architecture, database access, repositories, services, contracts, models, or application transactions.
|
||||
|
||||
## Project folder rules
|
||||
|
||||
Use this base structure:
|
||||
|
||||
```text
|
||||
SIG.Web/
|
||||
App_Code/
|
||||
Infrastructure/
|
||||
Sql/
|
||||
Repositories/
|
||||
Security/
|
||||
Utilities/
|
||||
Contracts/
|
||||
Models/
|
||||
Services/
|
||||
Styles/
|
||||
Scripts/
|
||||
Metronic/
|
||||
Site.master
|
||||
Site.master.cs
|
||||
Login.aspx
|
||||
Login.aspx.cs
|
||||
Inicio.aspx
|
||||
Inicio.aspx.cs
|
||||
BundleConfig.cs
|
||||
Global.asax
|
||||
Global.asax.cs
|
||||
Web.config
|
||||
```
|
||||
|
||||
Rules:
|
||||
|
||||
- The active application uses the ASP.NET Web Site runtime-compilation model.
|
||||
- Shared C# source belongs in the exact special folder `App_Code`.
|
||||
- Pages, master pages, controls, handlers, and `Global.asax` use `CodeFile` or source compiled from `App_Code`; do not introduce new `CodeBehind` dependencies on `SIG.Web.dll`.
|
||||
- Keep third-party and external assemblies in `bin`, but do not build or deploy a project assembly named `SIG.Web.dll`.
|
||||
- Do not place database access directly inside `.aspx.cs`, `.ascx.cs`, or `Site.master.cs`.
|
||||
- Database-related helpers go under `App_Code/Sql` or a clearly named SQL/data folder.
|
||||
- Business access goes through `Contracts` and `Services`.
|
||||
- The active Web Site does not use explicit project compilation entries; C# files under `App_Code` compile automatically at runtime.
|
||||
|
||||
---
|
||||
|
||||
## Contract rules
|
||||
|
||||
Contracts belong in `/Contracts`.
|
||||
|
||||
Current minimum contracts:
|
||||
|
||||
```text
|
||||
Contracts/IAuthContract.cs
|
||||
Contracts/IUserSessionContract.cs
|
||||
Contracts/IMenuContract.cs
|
||||
Contracts/IMasterPageContract.cs
|
||||
```
|
||||
|
||||
Suggested future contracts:
|
||||
|
||||
```text
|
||||
Contracts/IPermissionContract.cs
|
||||
Contracts/INotificationContract.cs
|
||||
Contracts/ICatalogSearchContract.cs
|
||||
Contracts/IAuditContract.cs
|
||||
Contracts/ICurrentCompanyContract.cs
|
||||
```
|
||||
|
||||
Rules:
|
||||
|
||||
- Pages call contracts, not SQL classes.
|
||||
- Master page calls contracts, not SQL classes.
|
||||
- Login calls contracts, not SQL classes.
|
||||
- Contracts must return models, DTOs, or result objects, not raw `DataTable` unless migrating legacy code.
|
||||
- If legacy `DataTable` is required, isolate it behind a contract and document why.
|
||||
|
||||
---
|
||||
|
||||
## Repository ownership rules
|
||||
|
||||
Repository ownership is determined by the data domain and stored-procedure prefix, not by the page or feature that currently consumes the data.
|
||||
|
||||
- Procedures named `PA_Gral_*` belong behind contracts and repositories under `Contracts/General` and `Repositories/General`.
|
||||
- General catalogs such as states, countries, municipalities, neighborhoods, and postal codes must not be placed in a security, registration, sales, or page-specific repository.
|
||||
- A feature service such as public registration may orchestrate both its feature repository and `IGeneralCatalogRepository`, but it must not move general catalog access into the feature repository.
|
||||
- Apply the same ownership rule to future procedure families: `PA_Sis_*` belongs to security/system infrastructure, `PA_Tra_*` to procedures, `PA_Vta_*` to sales, and so on.
|
||||
|
||||
## Database executor ownership rules
|
||||
|
||||
- `IDbExecutor`, `DbExecutor`, `StoredProcedureCommand`, `IDbCommand`, and direct stored-procedure execution may only be used inside classes under `Repositories` or repository database infrastructure.
|
||||
- Services must not reference or receive `IDbExecutor`, create database commands, execute readers, or call stored procedures directly.
|
||||
- A service that needs persisted data must depend on a repository contract. The concrete repository receives `IDbExecutor` and owns parameter configuration and result mapping.
|
||||
- Keep the `DbExecutor` implementation under `Repositories/Database`; do not place it under `Services` or expose it publicly through `AppServices`.
|
||||
|
||||
---
|
||||
|
||||
## Service rules
|
||||
|
||||
Services belong in `/Services`.
|
||||
|
||||
Current starter services may include:
|
||||
|
||||
```text
|
||||
Services/ContractRegistry.cs
|
||||
Services/DummyAuthContract.cs
|
||||
Services/UserSessionContract.cs
|
||||
Services/DummyMenuContract.cs
|
||||
Services/MasterPageContract.cs
|
||||
```
|
||||
|
||||
Rules:
|
||||
|
||||
- `ContractRegistry` may be used as a simple manual dependency resolver for WebForms.
|
||||
- Do not introduce a complex dependency injection framework unless required.
|
||||
- Services may depend on SQL helpers/repositories.
|
||||
- `.aspx.cs` files should be thin and delegate work to services.
|
||||
- Keep dummy services separate from SQL-backed services.
|
||||
- Services own application transactions when one business operation performs one or more repository mutations.
|
||||
- Use `TransactionLogic` inside a `using` block around the repository calls and invoke `Commit()` only after every required repository result succeeds.
|
||||
- Pages and repositories must not create, commit, roll back, or dispose application transactions.
|
||||
- Repositories participate through the ambient `TransactionScope`; connection strings used for transactional work must not set `Enlist=false`.
|
||||
- Select `TransactionScopeOption`, isolation level, and timeout in the service according to the business operation. Use `RequiresNew` or `Suppress` only when that behavior is intentional and documented by the call site.
|
||||
- Do not include slow external operations such as SMTP or HTTP calls inside a database transaction.
|
||||
|
||||
---
|
||||
|
||||
## Model rules
|
||||
|
||||
Models belong in `/Models`.
|
||||
|
||||
Current starter models may include:
|
||||
|
||||
```text
|
||||
Models/AppUser.cs
|
||||
Models/LoginResult.cs
|
||||
Models/MenuItemModel.cs
|
||||
Models/MasterLayoutModel.cs
|
||||
Models/BreadcrumbItem.cs
|
||||
```
|
||||
|
||||
Rules:
|
||||
|
||||
- Use models to move data between contracts and WebForms pages.
|
||||
- Do not pass anonymous objects across layers.
|
||||
- Do not expose SQL connection classes or `SqlDataReader` from services to pages.
|
||||
- Keep models simple and serializable when possible.
|
||||
|
||||
---
|
||||
|
||||
## Database and SQL structure rules
|
||||
|
||||
All database connection structure must be centralized under `App_Code/Sql` or an equivalent SQL/data folder.
|
||||
|
||||
Current starter SQL structure:
|
||||
|
||||
```text
|
||||
App_Code/Sql/ConnectionNames.cs
|
||||
App_Code/Sql/IConnectionStringProvider.cs
|
||||
App_Code/Sql/WebConfigConnectionStringProvider.cs
|
||||
App_Code/Sql/SqlConnectionFactory.cs
|
||||
App_Code/Sql/SqlQueryExecutor.cs
|
||||
```
|
||||
|
||||
Rules:
|
||||
|
||||
- Define connection names in one place.
|
||||
- Read connection strings from `Web.config`.
|
||||
- Do not hardcode connection strings in pages, master, controls, or services.
|
||||
- Do not create `SqlConnection` directly in `.aspx.cs`.
|
||||
- Do not create `SqlCommand` directly in `.aspx.cs`.
|
||||
- Use repositories or SQL executor classes behind contracts.
|
||||
- All application database reads and writes must use stored procedures; inline SQL in C# is prohibited.
|
||||
- Access to modules and catalogs is controlled by the menu and page-access layer. Reusable catalog stored procedures must not query `Sis_Usuarios`, restrict execution by `CveRol`, or return access-denied messages for module authorization.
|
||||
- Keep `@CveUsuarioEjecuta` in catalog procedures for the required signature and auditing when applicable, not to authorize access to the module.
|
||||
- Do not invent or add authorization, role, user-client association, ownership, or business-prerequisite validations to any stored procedure unless the user explicitly requests that exact validation. The user prefers to add those validations manually.
|
||||
- Mandatory: read and follow `AGENTS_STORED_PROCEDURES.md` for naming, output parameters, TRY/CATCH, logging, transactions, and physical deletion.
|
||||
- Mandatory: read and follow `AGENTS_DATA_READER_MAPPING.md` for object, list, `DataTable`, and `JArray` result mapping.
|
||||
- Mandatory: read and follow `AGENTS_DATABASE_ERROR_LOGGING.md` for safe parameter logging and reproducible stored-procedure calls.
|
||||
- Mandatory: read and follow `AGENTS_PAGE_STRUCTURE.md` for the `Pages/Modulo/` location of all new WebForms pages.
|
||||
- Mandatory: read and follow `AGENTS_WEBFORMS_PARTIAL_POSTBACKS.md` for the single master form, ScriptManager ownership, UpdatePanel usage, and partial-postback rules.
|
||||
- Mandatory: read and follow `AGENTS_JAVASCRIPT_INITIALIZATION.md` for per-element initialization flags, global event guards, and idempotent control setup after partial postbacks.
|
||||
- Mandatory: read and follow `AGENTS_CATALOG_STRUCTURE.md` for catalog titles, breadcrumbs, actions, filters, indicators, grids, quick-create modals, and detail pages.
|
||||
- Mandatory: read and follow `AGENTS_DOCUMENT_STORAGE.md` for document folders, client access validation, protected file retrieval, and GIS file naming.
|
||||
- Keep stored procedure names centralized.
|
||||
- Repositories must use `CommandType.StoredProcedure` and parameterized inputs/outputs.
|
||||
- Never concatenate raw user input into SQL.
|
||||
- The database default collation and general text columns must use `Modern_Spanish_CS_AS`.
|
||||
- Columns named `Codigo`, beginning with `Codigo`, or containing a real user login identifier such as `NombreUsuario`, `UsuarioPortal`, or `Acum_PortalUsuario` must use `Modern_Spanish_CI_AS`.
|
||||
- `AgenteUsuario` is browser/device metadata, not a login identifier, and must use the general `Modern_Spanish_CS_AS` collation.
|
||||
- Do not use `Modern_Spanish_CS_AI`.
|
||||
|
||||
Recommended Web.config connection string pattern:
|
||||
|
||||
```xml
|
||||
<connectionStrings>
|
||||
<add name="DefaultConnection" connectionString="..." providerName="System.Data.SqlClient" />
|
||||
<add name="SecurityConnection" connectionString="..." providerName="System.Data.SqlClient" />
|
||||
<add name="ReportingConnection" connectionString="..." providerName="System.Data.SqlClient" />
|
||||
</connectionStrings>
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Base page rules
|
||||
|
||||
Normal pages should inherit from a C# base page.
|
||||
|
||||
Preferred base class:
|
||||
|
||||
```text
|
||||
App_Code/Infrastructure/ClsPaginaBase.cs
|
||||
```
|
||||
|
||||
If the starter currently has `WebFormsPageBase.cs`, either:
|
||||
|
||||
- rename it to `ClsPaginaBase.cs`, or
|
||||
- keep `WebFormsPageBase` and update this AGENTS.md/project rules consistently.
|
||||
|
||||
Do not keep both base classes doing the same job.
|
||||
|
||||
Base page responsibilities:
|
||||
|
||||
- Validate authenticated session.
|
||||
- Expose current user from `IUserSessionContract`.
|
||||
- Provide helper methods for messages, redirects, and permissions.
|
||||
- Avoid database access.
|
||||
- Avoid page-specific business logic.
|
||||
|
||||
---
|
||||
|
||||
116
AGENTS_CATALOG_STRUCTURE.md
Normal file
116
AGENTS_CATALOG_STRUCTURE.md
Normal file
@@ -0,0 +1,116 @@
|
||||
# Reglas obligatorias para páginas de catálogo
|
||||
|
||||
Estas reglas complementan `AGENTS.md`, `AGENTS_PAGE_STRUCTURE.md`, `AGENTS_WEBFORMS_PARTIAL_POSTBACKS.md` y `AGENTS_JAVASCRIPT_INITIALIZATION.md`.
|
||||
|
||||
## Estructura visual
|
||||
|
||||
Toda página de catálogo debe organizarse, en este orden:
|
||||
|
||||
1. Título de la página.
|
||||
2. Barra de navegación ascendente y menú de acciones.
|
||||
3. Barra o control de filtros.
|
||||
4. Sección opcional de cabecera con indicadores o resúmenes.
|
||||
5. Grid o contenido principal.
|
||||
|
||||
- El título, breadcrumb y contenedor de acciones pertenecen a `Site.master`; no deben duplicarse en cada ASPX.
|
||||
- La barra de navegación debe mostrar la jerarquía ascendente hasta la página actual, por ejemplo `Inicio > Desarrolladores > Fraccionamientos`.
|
||||
- La master debe exponer un `ContentPlaceHolder` de acciones dentro de un `<ul>`; las páginas insertan elementos `<li>` o un `UpdatePanel` que produzca esos elementos.
|
||||
- Las acciones principales del catálogo, como agregar, exportar o imprimir, deben colocarse en ese menú cuando corresponda.
|
||||
|
||||
## Filtros
|
||||
|
||||
- Los catálogos deben usar el control reutilizable de filtros activos; no construir una barra distinta en cada página.
|
||||
- El control muestra los filtros aplicados y permite abrir un modal para seleccionarlos o modificarlos.
|
||||
- Los combos, buscadores y demás campos de selección pertenecen al modal de filtros.
|
||||
- Todo `asp:DropDownList` nuevo de una página de catálogo debe incluir la clase `select2me`, además de sus clases visuales necesarias.
|
||||
- Los filtros aplicados deben describirse con texto comprensible y permitir retirarse o limpiarse.
|
||||
- La búsqueda debe volver a enlazar indicadores y contenido principal con el mismo conjunto de filtros.
|
||||
- El control reutilizable de filtros debe permanecer como server control de C#, conservar la imagen de chips y toolbar acordada, y exponer un evento `Consultar` para que cada página ejecute su propia búsqueda.
|
||||
- Los estilos del control de filtros pertenecen a `Styles/Filtros.css` y deben registrarse en el bundle global; no duplicarlos en `Estilos2.css`, en páginas ASPX ni registrarlos desde el control.
|
||||
- El control debe reconstruir sus hijos con IDs estables y conservar su estado y eventos al trabajar dentro de un `UpdatePanel`; no debe registrar scripts globales ni crear otro `ScriptManager`.
|
||||
|
||||
## Presentación de grids
|
||||
|
||||
- Todo `asp:GridView` nuevo o modificado debe declarar `GridLines="None"`.
|
||||
- Su `CssClass` debe incluir la clase exacta `Widthall`.
|
||||
- No usar la clase `table-bordered` en grids de catálogo o detalle.
|
||||
- Se pueden conservar `table`, `table-striped` y `table-hover` cuando correspondan al diseño.
|
||||
|
||||
## Ordenamiento manual de catálogos
|
||||
|
||||
- Cuando una tabla de catálogo tenga el campo `Orden`, no mostrar ese campo en formularios, modales ni columnas del grid.
|
||||
- En el alta, el procedimiento almacenado asigna `ISNULL(MAX(Orden), 0) + 1`; cuando el orden dependa de una entidad padre, calcular el máximo únicamente dentro de ese padre.
|
||||
- Las modificaciones ordinarias conservan el orden existente. Si el registro cambia de padre, asignarle el siguiente orden disponible dentro del nuevo padre.
|
||||
- El procedimiento de listado ordena primero por `Orden` y después por un campo descriptivo estable.
|
||||
- El grid permite reordenar filas mediante arrastre y muestra únicamente un asa visual; no muestra el valor numérico de `Orden`.
|
||||
- El reordenamiento usa un procedimiento almacenado dedicado, valida en servidor el registro, la referencia y su pertenencia al mismo padre, y se ejecuta mediante repositorio y servicio.
|
||||
- Todo cambio de orden se registra mediante `IBitacoraService` dentro de la misma transacción de aplicación que actualiza el catálogo.
|
||||
- La inicialización del arrastre debe ser idempotente y volver a ejecutarse después de postbacks parciales sin duplicar eventos.
|
||||
## Indicadores y contenido
|
||||
|
||||
- La sección de cabecera es opcional; se usa cuando existen indicadores útiles como totales, activos, pendientes, etapas o avances.
|
||||
- No agregar tarjetas decorativas sin información funcional.
|
||||
- El grid o contenido principal siempre aparece después de filtros e indicadores.
|
||||
- Los estados vacíos deben explicar que no existen registros para los filtros actuales.
|
||||
|
||||
## Mensajes originados en modales
|
||||
|
||||
- Los labels dentro del modal se reservan para validaciones de captura conocidas, como campos requeridos, formatos inválidos o valores que el usuario puede corregir directamente.
|
||||
- Las reglas de negocio, resultados de servicios, errores técnicos, confirmaciones y mensajes de éxito deben mostrarse mediante el sistema central de alertas, aunque la acción se haya iniciado dentro del modal.
|
||||
- Cuando guardar falle, el modal debe conservar los valores y permanecer abierto o volver a abrirse; la alerta debe mostrarse por encima del overlay.
|
||||
- Un guardado exitoso puede cerrar el modal y mostrar un toast. Las alertas deben encolarse para no sobreponerse.
|
||||
- La misma regla aplica durante postbacks completos y parciales con `UpdatePanel`.
|
||||
## Navegación a páginas de detalle
|
||||
|
||||
- Cuando una fila abre una página de detalle, usar `asp:HyperLink` con `NavigateUrl` o un enlace HTML real.
|
||||
- No usar `LinkButton`, `CommandName`, `RowCommand` ni postback únicamente para navegar al detalle.
|
||||
- Los nombres de controles, métodos y variables deben identificar la entidad de la fila, por ejemplo `LnkFraccionamientoDetalle`, `cveFraccionamiento` y `fraccionamientoDetalleUrl`.
|
||||
- Reservar los comandos con postback para operaciones de servidor como guardar, eliminar, activar o ejecutar una acción de negocio.
|
||||
## Pestañas y estado de página
|
||||
|
||||
- AjaxControlToolkit debe registrarse globalmente en `Web.config` con el prefijo exacto `ajax`; no agregar directivas `<%@ Register ... %>` en cada página.
|
||||
- Las pestañas de catálogos y páginas de detalle deben implementarse con `ajax:TabContainer` y `ajax:TabPanel`.
|
||||
- No crear pestañas funcionales mediante `nav-tabs` de Bootstrap, paneles ocultos manualmente o navegación JavaScript independiente del ciclo de vida de WebForms.
|
||||
- Las claves y modos internos que deban sobrevivir postback se conservan en propiedades tipadas de `ViewState`.
|
||||
- No usar `asp:HiddenField` para estado exclusivamente del servidor. Reservarlo para valores que JavaScript necesite leer o modificar y validarlos nuevamente en el servidor.
|
||||
- Los nombres de las propiedades ViewState deben describir la entidad, por ejemplo `CveFraccionamientoActual` y `CveFraccionamientoEtapaActual`.
|
||||
## Alta rápida y detalle
|
||||
|
||||
- Antes de implementar un catálogo se debe definir si agregar y editar usarán modal, página de detalle o ambas modalidades.
|
||||
- La captura rápida se realiza en modal y contiene únicamente los campos necesarios para crear el registro.
|
||||
- Cuando el alta tenga modalidad básica y avanzada, el modal debe incluir un botón `Avanzado` que navegue a la página completa.
|
||||
- Cuando editar requiera relaciones, historial, etapas, documentos, trámites o estados, debe abrir una página de detalle en lugar de sobrecargar el modal.
|
||||
- La página de detalle puede editar la información principal y administrar sus relaciones en secciones o pestañas claramente identificadas.
|
||||
- No asumir automáticamente que alta y edición usan la misma interfaz.
|
||||
|
||||
## Bitácora de catálogos
|
||||
|
||||
- Toda alta, modificación, activación, desactivación o eliminación de un catálogo debe registrarse mediante `IBitacoraService` dentro de la misma transacción de aplicación que la operación principal.
|
||||
- El servicio confirma la transacción únicamente después de guardar correctamente la operación y toda su bitácora. Un fallo del encabezado, relaciones o campos revierte también la operación principal.
|
||||
- No registrar consultas, búsquedas, filtros, paginación ni visualizaciones de detalle sin cambios.
|
||||
- El servicio del catálogo construye el evento; el ASPX, su code-behind y los repositorios de negocio no deben registrar la bitácora directamente.
|
||||
- `Bit_Bitacora` guarda el encabezado del movimiento. Cada evento debe enviar una lista genérica de relaciones formada por tabla, campo y valor; el procedimiento resuelve `CveTabla`, `CveCampo` y si el valor se almacena como número entero o texto.
|
||||
- Los catálogos ligados a un cliente deben incluir una relación para la entidad afectada y otra para `Clientes.CveCliente`. Cada relación declara explícitamente `VisibleDesarrollador`.
|
||||
- Las altas envían todos los campos auditables y establecen `DiscriminarCamposSinCambios = false`.
|
||||
- Las modificaciones envían valor anterior y nuevo de los campos candidatos; `DiscriminarCamposSinCambios = true` es el valor predeterminado y guarda únicamente los campos que realmente cambiaron, distinguiendo correctamente entre `NULL` y texto vacío.
|
||||
- Las eliminaciones registran encabezado y relaciones, pero no requieren registros en `Bit_BitacoraCampos`.
|
||||
- Nunca registrar contraseñas, hashes, tokens, secretos ni otros valores sensibles en los campos de bitácora.
|
||||
- Para consultar la bitácora, `SuperUsuario` y `Administrador` pueden ver todos los registros. El rol `Empresa` se considera desarrollador y sólo puede ver eventos con una relación `Clientes.CveCliente` visible que coincida con cualquiera de sus clientes activos en `Sis_UsuariosClientes`.
|
||||
- Antes de liberar un catálogo nuevo, sus tablas y campos auditables deben estar registrados y activos en `Bit_Tablas` y `Bit_Campos`, junto con el script de configuración correspondiente.
|
||||
## Regla actual para fraccionamientos
|
||||
|
||||
- `Agregar fraccionamiento` usa captura rápida en modal.
|
||||
- `Editar` o `Ver detalle` navega a una página dedicada.
|
||||
- El detalle muestra la información del fraccionamiento, sus etapas, los trámites asociados a cada etapa y el último estado disponible, incluyendo estados finales como cancelado o terminado cuando existan.
|
||||
|
||||
## Legibilidad del código
|
||||
|
||||
- El ASPX, C#, CSS y JavaScript del catálogo debe conservar sangría y saltos de línea legibles.
|
||||
- No colocar grids, columnas, modales, controles anidados, validaciones ni varios statements C# en una sola línea.
|
||||
- Los archivos deben quedar preparados para que otro programador pueda localizar y modificar una sección sin tener que reformatearla primero.
|
||||
## WebForms
|
||||
|
||||
- Los modales permanecen dentro del único formulario de `Site.master`; ninguna página declara un formulario adicional.
|
||||
- Los eventos de botones dentro de acciones o modales siguen pasando por code-behind delgado, servicios, contratos, repositorios y procedimientos almacenados.
|
||||
- Después de un postback parcial, Select2 y los modales deben reinicializarse de manera idempotente según `AGENTS_JAVASCRIPT_INITIALIZATION.md`.
|
||||
- No copiar VB del sistema anterior; sólo usarlo como referencia funcional y reconstruir la solución en C#.
|
||||
@@ -56,8 +56,18 @@ SELECT @ErrorMostrar, @ErrorTipo, @Return;
|
||||
- Los mensajes `RAISERROR` de severidad 10 pueden registrarse mediante `SqlConnection.InfoMessage` sin activar esa opción.
|
||||
- Si `@Return`, `@ErrorTipo` y `@ErrorMostrar` regresan sin valor, registrar que la versión instalada del PA no devolvió el contrato requerido.
|
||||
|
||||
## Clasificación y retención
|
||||
|
||||
- `@ErrorTipo = 1` representa un error técnico o funcional que requiere atención. Debe conservarse en el log técnico principal con el diagnóstico y `ReplaySql`.
|
||||
- `@ErrorTipo = 2` representa una advertencia o resultado controlado, por ejemplo un código postal inexistente. No debe escribirse en el log técnico principal.
|
||||
- Las advertencias controladas se registran en archivos diarios `log/controlled/controlled-AAAA-MM-DD.log`.
|
||||
- Los archivos controlados conservan exactamente tres días calendario: el actual y los dos anteriores. Los más antiguos se eliminan automáticamente al escribir el siguiente evento.
|
||||
- El log controlado es compacto: fecha, origen, procedimiento, URL, mensaje amigable y tipo de excepción. No incluye stack trace completo, parámetros ni `ReplaySql`.
|
||||
- Un `throw` deliberadamente controlado debe usar `ControlledApplicationException`; el clasificador no debe convertir excepciones técnicas genéricas en eventos controlados.
|
||||
- Si `@ErrorTipo` es `0` pero `@Return` es falso, tratarlo como incumplimiento del contrato y enviarlo al log principal.
|
||||
|
||||
## Alcance
|
||||
|
||||
- Registrar parámetros detallados sólo cuando exista un error o advertencia que requiera diagnóstico.
|
||||
- Registrar parámetros detallados y `ReplaySql` únicamente para `@ErrorTipo = 1` o fallas técnicas; las advertencias controladas usan el registro compacto sin parámetros.
|
||||
- No registrar cada ejecución exitosa de manera predeterminada.
|
||||
- No usar el log como auditoría de operaciones exitosas; la auditoría pertenece a su propio contrato o procedimiento.
|
||||
|
||||
44
AGENTS_DOCUMENT_STORAGE.md
Normal file
44
AGENTS_DOCUMENT_STORAGE.md
Normal file
@@ -0,0 +1,44 @@
|
||||
# Reglas obligatorias para almacenamiento de documentos
|
||||
|
||||
Estas reglas complementan `AGENTS.md` y aplican a todo archivo persistido por la aplicación.
|
||||
|
||||
## Estructura física
|
||||
|
||||
La raíz de documentos de la aplicación es:
|
||||
|
||||
```text
|
||||
Documentos/
|
||||
Generales/
|
||||
Clientes/
|
||||
{CveCliente}/
|
||||
```
|
||||
|
||||
- `Generales` contiene documentos que no pertenecen a un cliente específico.
|
||||
- `Clientes` contiene una carpeta por `CveCliente`.
|
||||
- Antes de guardar un archivo, el servicio debe asegurar la existencia de `Documentos`, `Documentos/Generales`, `Documentos/Clientes` y de la carpeta específica del cliente cuando aplique.
|
||||
- No asumir que las carpetas ya existen. Usar una operación idempotente como `Directory.CreateDirectory` para crearlas cuando falten.
|
||||
- La misma regla aplica a futuras subcarpetas de documentos.
|
||||
|
||||
## Acceso y seguridad
|
||||
|
||||
- Las páginas WebForms y handlers no deben construir rutas físicas ni abrir archivos de cliente por su cuenta.
|
||||
- Todo guardado y obtención de archivos debe pasar por un servicio dedicado de documentos. Un handler de descarga sólo puede transmitir el archivo previamente autorizado y resuelto por ese servicio.
|
||||
- Antes de construir o abrir una ruta física, el servicio debe resolver en servidor el cliente propietario a partir de la entidad de negocio y validar el acceso del usuario.
|
||||
- No confiar para autorización en `CveCliente`, rutas físicas, rutas relativas ni nombres de archivo recibidos desde el navegador.
|
||||
- El rol `Empresa` se considera desarrollador y sólo puede acceder a documentos de clientes activos que tenga asignados en `Sis_UsuariosClientes`.
|
||||
- Los demás roles activos, incluidos `Administrador` y `SuperUsuario`, tienen acceso global a documentos, salvo que una regla funcional más restrictiva se defina explícitamente para un módulo.
|
||||
- Las rutas físicas bajo `Documentos` no deben exponerse como URLs públicas. Las descargas deben pasar por un endpoint autenticado que vuelva a validar el acceso mediante el servicio.
|
||||
|
||||
## GIS de etapas de fraccionamiento
|
||||
|
||||
- El botón `Agregar GIS` carga un archivo físico con extensión `.gis`; no solicita nombre ni URL de visualización al usuario.
|
||||
- El archivo se guarda en `Documentos/Clientes/{CveCliente}/`.
|
||||
- El nombre se genera exclusivamente en servidor con el formato:
|
||||
|
||||
```text
|
||||
gis-{CveFraccionamiento}-{CveFraccionamientoEtapa}.gis
|
||||
```
|
||||
|
||||
- El usuario no puede elegir ni modificar el nombre final del archivo.
|
||||
- Al reemplazar el GIS de una etapa se conserva el mismo nombre físico y se sobrescribe el archivo correspondiente.
|
||||
- La obtención del GIS debe usar el servicio de documentos y nunca una URL directa al folder `Documentos`.
|
||||
@@ -16,8 +16,10 @@ Los inicializadores deben poder ejecutarse después de la carga inicial y despu
|
||||
|
||||
- Cada control inicializado debe conservar una bandera en el propio elemento HTML.
|
||||
- Los inicializadores deben seleccionar únicamente elementos que todavía no tengan su bandera.
|
||||
- Para código nuevo, usar atributos con namespace `data-sig-<componente>-initialized="1"`.
|
||||
- Para código nuevo, usar atributos con namespace `data-sig-<componente>-inicializado="1"` (o `inicializada`, según corresponda).
|
||||
- La bandera debe identificar el componente, no usar nombres genéricos que puedan colisionar.
|
||||
- La marca pertenece a cada elemento, no al tipo de UserControl: dos instancias iguales deben inicializarse independientemente. Una bandera global sólo protege el registro global y no sustituye las marcas por elemento.
|
||||
- Usar nombres en español para las marcas nuevas, por ejemplo `data-sig-confirmacion-inicializada="1"`; conservar las marcas heredadas `*-initialized` mientras sigan en uso.
|
||||
|
||||
Ejemplos:
|
||||
|
||||
@@ -101,7 +103,7 @@ if (window.SIG_PARTIAL_INITIALIZERS_REGISTERED !== true) {
|
||||
|
||||
- Los eventos delegados sobre `body`, `document` o un contenedor permanente deben registrarse una sola vez mediante una bandera global.
|
||||
- `custom.js` ya usa `window.SIG_CUSTOM_READY_INITIALIZED`; conservar este patrón para el bloque global existente.
|
||||
- No ejecutar repetidamente `.off().on()` sobre todos los controles después de cada postback parcial.
|
||||
- Está prohibido quitar y volver a agregar eventos para inicializar: no usar `.off().on()`, `.unbind().bind()`, `removeEventListener` ni equivalentes para ese propósito. Conservar los eventos existentes y omitir los elementos ya marcados; la destrucción explícita de un componente no es una estrategia de inicialización.
|
||||
- Para eventos directos inevitables, inicializar únicamente elementos sin bandera y usar eventos con namespace.
|
||||
|
||||
Ejemplo de evento directo:
|
||||
@@ -160,5 +162,6 @@ function destroySelect2(control) {
|
||||
- Cada inicializador debe ser una función pequeña e idempotente que acepte un elemento raíz.
|
||||
- La función central sólo coordina inicializadores; no debe contener toda la lógica de cada plugin.
|
||||
- No duplicar inicializadores dentro de páginas `.aspx` si pertenecen globalmente a `Scripts/custom.js`.
|
||||
- El JavaScript específico de una página puede vivir en el placeholder `J`, pero debe seguir las mismas reglas de banderas y postbacks parciales.
|
||||
- No definir implementaciones JavaScript ni cargar sus archivos desde `.ascx` o su C#. Mantener el comportamiento en archivos de `Scripts/` incluidos globalmente. Para llamadas puntuales desde el servidor, usar el `RegistraScript` existente (`PageScriptRegistrar.RegistraScript` en UserControls), sin colas ni acciones serializadas alternativas.
|
||||
- El JavaScript específico de una página debe permanecer dentro de ese mismo `.aspx`, en un bloque `<script>` del placeholder `J`; no crear un archivo `.js` separado ni trasladarlo a un bundle global, salvo petición explícita del usuario. Debe seguir las mismas reglas de banderas y postbacks parciales.
|
||||
- No modificar archivos minificados ni dependencias de terceros para implementar estas banderas.
|
||||
|
||||
155
AGENTS_MANTENIMIENTO_PROYECTO.md
Normal file
155
AGENTS_MANTENIMIENTO_PROYECTO.md
Normal file
@@ -0,0 +1,155 @@
|
||||
# AGENTS_MANTENIMIENTO_PROYECTO.md
|
||||
|
||||
These rules complement `AGENTS.md` and are mandatory whenever the task involves commands, security, error handling, user feedback, grids, PDF migration, file delivery, verification, or project evolution.
|
||||
|
||||
## Command rules
|
||||
|
||||
When giving commands for this project:
|
||||
|
||||
- Prefer **PowerShell**, **Developer PowerShell**, or **Visual Studio Package Manager Console** commands.
|
||||
- Commands must be written in **one line**.
|
||||
- Do not use PowerShell line continuation with backticks.
|
||||
- Do not suggest `dotnet new webforms` because WebForms is not supported by the .NET CLI as an ASP.NET Core project.
|
||||
- If a WebForms project must be created from command line, use Visual Studio/MSBuild-compatible project files or create the project through Visual Studio using **ASP.NET Web Application (.NET Framework)**.
|
||||
- Target framework must be `.NET Framework 4.8` or `.NET Framework 4.8.1`.
|
||||
|
||||
Recommended project creation path:
|
||||
|
||||
```powershell
|
||||
mkdir "C:\Proyectos\Agua de hermosillo\Plataforma de Desarrolladores"
|
||||
```
|
||||
|
||||
```powershell
|
||||
cd "C:\Proyectos\Agua de hermosillo\Plataforma de Desarrolladores"
|
||||
```
|
||||
|
||||
Then create/open the WebForms project in Visual Studio 2022 as:
|
||||
|
||||
```text
|
||||
ASP.NET Web Application (.NET Framework) → Web Forms → C# → .NET Framework 4.8/4.8.1
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Security rules
|
||||
|
||||
- Do not store passwords in code, comments, Web.config examples, or session.
|
||||
- Do not expose real connection strings in committed files.
|
||||
- Use dummy values in examples.
|
||||
- Use parameterized SQL.
|
||||
- Validate uploaded files by extension, MIME type, and size when uploads are later added.
|
||||
- Avoid writing raw exception details to the user in production.
|
||||
- Keep `customErrors mode="Off"` only for local development.
|
||||
|
||||
---
|
||||
|
||||
## Error handling rules
|
||||
|
||||
Controlled outcomes and technical failures must use different logs.
|
||||
|
||||
- `@ErrorTipo = 1`, SQL exceptions, timeouts, contract failures, and unexpected exceptions go to the main technical log.
|
||||
- `@ErrorTipo = 2` is a controlled warning. It must not be written to the main technical log.
|
||||
- Controlled warnings go to daily compact files under `~/log/controlled`.
|
||||
- Controlled log files retain only the current day and the previous two days. The retention is configured with `ControlledLogRetentionDays = 3`.
|
||||
- Explicit controlled throws must use `ControlledApplicationException`; do not classify arbitrary `Exception` or `InvalidOperationException` instances as controlled.
|
||||
- Controlled logs record date, source, procedure, URL, and friendly message, but omit full stack traces and replay SQL to remain compact.
|
||||
- A controlled exception must still return a friendly result to the page and must never be presented as an unexpected application failure.
|
||||
|
||||
- Handle null session user cleanly and redirect to login.
|
||||
- Handle failed login with a friendly message.
|
||||
- Handle async postback errors through `ScriptManager.AsyncPostBackError` only if the handler exists.
|
||||
- Avoid infinite loading states in JavaScript controls.
|
||||
- For AJAX/server search controls, use client and server timeouts.
|
||||
- Recommended default search timeout: about 20 to 30 seconds unless the user asks otherwise.
|
||||
|
||||
## Action availability and feedback rules
|
||||
|
||||
- Do not disable a button or primary action only because a business prerequisite is missing, such as an unassigned client or an empty related catalog.
|
||||
- Keep the action available by default; when the user clicks it, validate the prerequisite and show a clear message explaining why the operation cannot continue and what must be done next.
|
||||
- Never leave a disabled action without an immediately visible explanation.
|
||||
- Before adding `Enabled="false"`, the HTML `disabled` attribute, or an equivalent disabled CSS/JavaScript state to a catalog or page action, ask the user whether disabling is acceptable or whether a message, modal, link, or other alternative should be used.
|
||||
- A transient disabled state used only while a request is being processed to prevent duplicate submissions is allowed, but the action must be restored when processing finishes.
|
||||
|
||||
---
|
||||
|
||||
## Grid display rules
|
||||
|
||||
- Los valores numéricos de negocio (hectáreas, superficies, avances, porcentajes, cantidades, importes y saldos) deben alinearse a la derecha tanto en los campos de captura como en las celdas y resúmenes donde se muestran. Usar las clases visuales existentes o la alineación del control; esta regla no convierte claves, folios ni códigos en cantidades.
|
||||
|
||||
- Every new or modified `asp:GridView` must declare `GridLines="None"`.
|
||||
- Its `CssClass` must include the exact utility class `Widthall` so the grid uses the full available width.
|
||||
- Do not add `table-bordered` to a GridView. Existing visual classes such as `table`, `table-striped`, and `table-hover` may be retained when appropriate.
|
||||
- Keep GridView declarations and their columns expanded and indented according to the source code readability rules.
|
||||
- Detail-page navigation from a GridView or list must use `asp:HyperLink` or another real link with `NavigateUrl`; do not use `LinkButton`, `RowCommand`, or a postback only to open a detail page.
|
||||
- URL-building variables and helpers must describe the row entity, for example `cveFraccionamiento`, `fraccionamientoDetalleUrl`, or `GetFraccionamientoDetalleUrl`. Avoid generic names such as `id`, `itemUrl`, or `detailUrl` when the entity is known.
|
||||
|
||||
---
|
||||
|
||||
## PDF viewer migration rules
|
||||
|
||||
If the PDF viewer is added to this project later:
|
||||
|
||||
- Implement it in C#.
|
||||
- Prefer `App_Code/SigControls` for server controls.
|
||||
- Do not add VB files.
|
||||
- Do not use `/* */` comments in VB reference files; VB references must remain `.vb.txt` only.
|
||||
- Keep global PDF viewer CSS/JS references in bundles.
|
||||
- Do not register duplicate resources from the control and master at the same time.
|
||||
- Session or temp-folder PDF storage must be explicit and centralized.
|
||||
|
||||
---
|
||||
|
||||
## File delivery rules for this project
|
||||
|
||||
When generating a single downloadable file:
|
||||
|
||||
- If the file is `.js` or `.css` and it is not inside a ZIP, append `.txt` to the filename.
|
||||
- Example: `custom.js.txt`, `styles.css.txt`.
|
||||
- If the file is inside a ZIP, keep the real extension `.js` or `.css`.
|
||||
- For project-level delivery, prefer ZIP files.
|
||||
|
||||
---
|
||||
|
||||
## Current implementation checklist
|
||||
|
||||
When modifying or regenerating the project, verify:
|
||||
|
||||
- [ ] Project targets .NET Framework 4.8 or 4.8.1.
|
||||
- [ ] All new code is C#.
|
||||
- [ ] No active `.vb` files were added.
|
||||
- [ ] `Styles`, `Scripts`, and `Metronic` were copied as-is.
|
||||
- [ ] `BundleConfig.cs` contains only bundles rendered by master/login or required by WebForms AJAX.
|
||||
- [ ] `Site.master` owns the only main form.
|
||||
- [ ] Normal pages use `Site.master`.
|
||||
- [ ] Normal pages do not contain full HTML structure.
|
||||
- [ ] Login is the only standalone full HTML page.
|
||||
- [ ] User/session data comes from `IUserSessionContract`.
|
||||
- [ ] Login uses `IAuthContract`.
|
||||
- [ ] Menu comes from `IMenuContract`.
|
||||
- [ ] Master layout data comes from `IMasterPageContract`.
|
||||
- [ ] SQL connection helpers are centralized under `App_Code/Sql`.
|
||||
- [ ] Pages do not directly instantiate SQL connections.
|
||||
- [ ] Placeholder IDs are `H`, `C`, and `J`.
|
||||
- [ ] No hidden old search box was restored.
|
||||
- [ ] Actions button is preserved when present in the selected layout.
|
||||
- [ ] `Web.config` login URL matches the actual login page filename.
|
||||
- [ ] No duplicate `Login.aspx` / `LogIn.aspx` pages exist.
|
||||
- [ ] No OWIN startup error exists, or OWIN automatic startup is disabled.
|
||||
- [ ] No missing CodeDom provider error exists.
|
||||
|
||||
---
|
||||
|
||||
## Preferred next evolution
|
||||
|
||||
After the starter works, the safest growth path is:
|
||||
|
||||
1. Replace dummy login with SQL-backed `IAuthContract`.
|
||||
2. Replace dummy menu with SQL-backed `IMenuContract`.
|
||||
3. Add permission contract.
|
||||
4. Add base page authorization checks.
|
||||
5. Add reusable controls one by one.
|
||||
6. Add catalog search and UI helpers.
|
||||
7. Add PDF viewer only after the base shell is stable.
|
||||
|
||||
Keep every new feature behind contracts so the WebForms UI remains thin and easier to migrate later if needed.
|
||||
|
||||
@@ -18,6 +18,21 @@ Estas reglas complementan `AGENTS.md` y son obligatorias para toda consulta nuev
|
||||
- `<Entidad>` identifica el objeto y `<Accion>` describe claramente la operación; por ejemplo `Add`, `Update`, `List`, `Activate`, `Deactivate` o `Delete`.
|
||||
- Ejemplos: `PA_Sis_UsuarioAdd`, `PA_Sis_UsuarioUpdate`, `PA_Sis_UsuarioList`, `PA_Sis_UsuarioActivate`, `PA_Sis_UsuarioDeactivate` y `PA_Sis_UsuarioDelete`.
|
||||
|
||||
## Procedimientos de tareas programadas
|
||||
|
||||
- Los procedimientos de tareas programadas deben usar el prefijo `PA_Job_` y nombres descriptivos en español, por ejemplo `PA_Job_VerificaVigencias`.
|
||||
- Ejecutarlos mediante el programador externo; no invocarlos desde cargas de página, consultas del tablero ni peticiones web.
|
||||
- Documentar su periodicidad, hora y zona horaria. La verificación de vigencias se programa diariamente a las 03:00, hora de Hermosillo.
|
||||
- El recálculo puntual después de guardar cambios permanece en su servicio y no debe disparar la revisión global de vigencias.
|
||||
- Preparar el SQL no autoriza su ejecución ni la activación del trabajo; requieren confirmación explícita conforme a `AGENTS.md`.
|
||||
|
||||
## Formato de JOIN
|
||||
|
||||
- Mantener cada `JOIN` y su condición `ON` en la misma línea cuando la condición sea simple o pueda continuarse de forma legible en las líneas siguientes.
|
||||
- No separar `ON` en una línea independiente únicamente por estilo.
|
||||
- Evitar subconsultas con `SELECT` directamente dentro de un `JOIN`. Cuando la consulta relacionada sea compleja, preferir un CTE con `WITH` y realizar el `JOIN` contra ese CTE.
|
||||
- Una condición extensa del `ON` puede continuar en líneas adicionales, alineando cada `AND` para conservar la legibilidad.
|
||||
|
||||
## Parámetros y resultado obligatorios
|
||||
|
||||
Todos los procedimientos deben declarar:
|
||||
@@ -43,21 +58,22 @@ Todos los procedimientos deben declarar:
|
||||
## Control de errores
|
||||
|
||||
- Usar `SET NOCOUNT ON` y `TRY/CATCH` en todos los procedimientos.
|
||||
- Usar `SET XACT_ABORT ON` cuando exista una mutación o transacción.
|
||||
- Iniciar la transacción dentro de `TRY`, confirmar sólo después del éxito y ejecutar rollback en `CATCH` cuando `XACT_STATE() <> 0`.
|
||||
- Los procedimientos no deben usar `SET XACT_ABORT ON`, `BEGIN TRANSACTION`, `COMMIT TRANSACTION`, `ROLLBACK TRANSACTION` ni modificar una transacción recibida.
|
||||
- La transacción pertenece a la capa de servicio en C#, que debe usar `TransactionLogic` dentro de `using` al coordinar las llamadas a repositorios.
|
||||
- El servicio llama `Commit()` solamente cuando todas las operaciones requeridas terminan correctamente. Un fallo, excepción o salida sin `Commit()` debe permitir que `Dispose()` revierta la transacción ambiental.
|
||||
- Una validación fallida debe establecer los parámetros de salida y ejecutar `RETURN`; no debe continuar la mutación.
|
||||
- Para validar existencia, usar normalmente `EXISTS` en lugar de `COUNT(*)`.
|
||||
- En `CATCH`, generar un mensaje técnico separado con `ERROR_NUMBER()`, `ERROR_PROCEDURE()`, `ERROR_LINE()` y `ERROR_MESSAGE()` para el log.
|
||||
- El mensaje técnico puede notificarse con severidad informativa para que el ejecutor lo registre, pero nunca debe mostrarse directamente al usuario.
|
||||
|
||||
## Borrado lógico
|
||||
## Borrado físico
|
||||
|
||||
- Está prohibido usar `DELETE` físico en procedimientos CRUD normales.
|
||||
- Para borrar: `Borrado = 1` y `FechaBorrado = SYSDATETIME()`.
|
||||
- Para restaurar: `Borrado = 0` y `FechaBorrado = NULL`.
|
||||
- Las consultas normales deben filtrar `Borrado = 0` en cada tabla participante, excepto cuando el caso de uso solicite expresamente registros borrados.
|
||||
- La eliminación permanente sólo puede realizarse mediante el procedimiento controlado de retención y limpieza.
|
||||
- Ninguna página ASPX puede llamar directamente a la limpieza física.
|
||||
- La base de datos no utiliza las columnas `Borrado` ni `FechaBorrado`; no deben agregarse a tablas, modelos, consultas ni procedimientos nuevos.
|
||||
- Las operaciones de eliminación deben usar `DELETE` físico dentro de un procedimiento almacenado.
|
||||
- Antes de eliminar, validar las relaciones que deban conservarse. Si existen dependencias que impiden la operación, devolver una advertencia controlada con `@ErrorTipo = 2` y un mensaje claro.
|
||||
- Las eliminaciones de una entidad con hijos propios deben ejecutarse en orden, desde los hijos hasta el padre. El servicio que invoque el procedimiento debe envolver la operación en una transacción de aplicación.
|
||||
- No deshabilitar constraints ni eliminar información relacionada que pertenezca a otro proceso únicamente para permitir el `DELETE`.
|
||||
- Las páginas ASPX continúan llamando contratos y servicios; nunca deben ejecutar `DELETE` directamente.
|
||||
|
||||
## Plantilla requerida
|
||||
|
||||
@@ -71,8 +87,6 @@ CREATE OR ALTER PROCEDURE [dbo].[PA_Sis_RolAdd]
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON;
|
||||
SET XACT_ABORT ON;
|
||||
|
||||
SELECT
|
||||
@ErrorMostrar = NULL,
|
||||
@ErrorTipo = 0,
|
||||
@@ -84,7 +98,6 @@ BEGIN
|
||||
SELECT 1
|
||||
FROM dbo.Sis_Roles
|
||||
WHERE NombreRol = @Rol
|
||||
AND Borrado = 0
|
||||
)
|
||||
BEGIN
|
||||
SET @ErrorMostrar = CONCAT('El rol ''', @Rol, ''' ya se encuentra registrado.');
|
||||
@@ -100,9 +113,6 @@ BEGIN
|
||||
SET @Return = 1;
|
||||
END TRY
|
||||
BEGIN CATCH
|
||||
IF XACT_STATE() <> 0
|
||||
ROLLBACK TRANSACTION;
|
||||
|
||||
SET @ErrorMostrar = 'Ocurrió un error al agregar el rol; favor de contactar a Sistemas.';
|
||||
SET @ErrorTipo = 1;
|
||||
SET @Return = 0;
|
||||
@@ -120,4 +130,4 @@ END;
|
||||
GO
|
||||
```
|
||||
|
||||
Cuando el procedimiento use una transacción, debe incluir `BEGIN TRANSACTION` dentro de `TRY` y `COMMIT TRANSACTION` antes de establecer `@Return = 1`.
|
||||
Aunque un procedimiento ejecute varias escrituras, no debe administrar la transacción. La atomicidad se define en el servicio que coordina los repositorios.
|
||||
|
||||
422
AGENTS_WEBFORMS_ESTRUCTURA.md
Normal file
422
AGENTS_WEBFORMS_ESTRUCTURA.md
Normal file
@@ -0,0 +1,422 @@
|
||||
# AGENTS_WEBFORMS_ESTRUCTURA.md
|
||||
|
||||
These rules complement `AGENTS.md` and are mandatory whenever the task changes WebForms pages, the master page, login, session behavior, bundles, assets, configuration, controls, or the application shell.
|
||||
|
||||
## Asset folder rules
|
||||
|
||||
The following folders are legacy visual dependencies and must be copied as complete folders:
|
||||
|
||||
```text
|
||||
Styles/
|
||||
Scripts/
|
||||
Metronic/
|
||||
```
|
||||
|
||||
Do not replace Metronic with Bootstrap-only layout.
|
||||
Do not upgrade Metronic unless the user explicitly asks.
|
||||
Do not remove old scripts just because they look unused; only remove references from bundles when they are not used by the master/login flow.
|
||||
|
||||
---
|
||||
|
||||
## Bundle rules
|
||||
|
||||
The project must implement only the bundle methods needed by the current `Site.master` and login page.
|
||||
|
||||
Do not bring every old bundle method from the legacy project.
|
||||
Do not add unused bundle groups just because they existed before.
|
||||
Do not add duplicate bundle keys.
|
||||
Do not add empty bundle methods.
|
||||
|
||||
Allowed current bundle keys are the ones actually rendered by master/login, especially:
|
||||
|
||||
```text
|
||||
~/bundles/modernizr
|
||||
~/bundles/scripts
|
||||
~/bundles/highcharts
|
||||
~/Metronic/assets/global/scripts/JSV1
|
||||
~/Metronic/assets/global/css/cssV1
|
||||
```
|
||||
|
||||
WebForms/AjaxControlToolkit support bundles are allowed only when referenced by `ScriptManager` or required by WebForms controls:
|
||||
|
||||
```text
|
||||
~/bundles/jquery
|
||||
~/bundles/WebFormsJs
|
||||
~/bundles/MsAjaxJs
|
||||
~/Content/AjaxControlToolkit/Styles/Bundle
|
||||
```
|
||||
|
||||
Rules:
|
||||
|
||||
- If `Site.master` or `Login.aspx` does not render a bundle, do not add it.
|
||||
- If a bundle exists only for old pages not migrated yet, leave it out until the page needs it.
|
||||
- Prefer preserving original asset paths from `Styles`, `Scripts`, and `Metronic`.
|
||||
- Use `CssRewriteUrlTransform` for CSS bundles that reference fonts, images, or relative URLs.
|
||||
- Load CSS/JS files for server controls and UserControls globally from `Styles/` and `Scripts/` through `BundleConfig` and the master page, even when no instance is present; never inject these files from controls. Remove duplicate page references when moving a resource to a global bundle. This does not prohibit individual server-triggered calls through the existing `RegistraScript`.
|
||||
|
||||
---
|
||||
|
||||
## WebForms page rules
|
||||
|
||||
All normal `.aspx` pages must use `Site.master`, except the login page.
|
||||
|
||||
Normal pages:
|
||||
|
||||
- Must include `MasterPageFile="~/Site.master"`.
|
||||
- Must not include `<html>`, `<head>`, `<body>`, or `<form>`.
|
||||
- Must use `<asp:Content>` controls.
|
||||
- Should inherit from `ClsPaginaBase` or the current C# page base class.
|
||||
- Must not connect directly to SQL classes.
|
||||
- Must call contracts/services for data, authentication, permissions, catalogs, menus, and user context.
|
||||
|
||||
Public registration exception:
|
||||
|
||||
- `Pages/Security/RegistroCliente.aspx`, `RegistroPendiente.aspx` and `VerificarCorreo.aspx` may be standalone public pages with their own `form runat="server"`.
|
||||
- `RegistroCliente.aspx` keeps its two-step draft in encrypted ViewState and persists only after all client/company validations pass.
|
||||
- All persistence continues through contracts/services/repositories and stored procedures.
|
||||
|
||||
Login page:
|
||||
|
||||
- Is the only page allowed to have its own full HTML structure.
|
||||
- May inherit from `System.Web.UI.Page` or its own login base class.
|
||||
- Must not inherit from `ClsPaginaBase` if that base class requires an authenticated session.
|
||||
- Must use `IAuthContract` or the current auth contract.
|
||||
- Must create a dummy session until real authentication is implemented.
|
||||
- Must not hardcode real database login logic in `Login.aspx.cs`.
|
||||
|
||||
Important naming rule:
|
||||
|
||||
- Do not create both `Login.aspx` and `LogIn.aspx`.
|
||||
- If the starter already uses `LogIn.aspx`, keep that name and keep `Web.config` consistent.
|
||||
- If creating from scratch, prefer `Login.aspx`, but update `Web.config`, redirects, and links consistently.
|
||||
|
||||
---
|
||||
|
||||
## Master page rules
|
||||
|
||||
`Site.master` owns the main HTML structure.
|
||||
|
||||
Rules:
|
||||
|
||||
- `Site.master` owns the only main `<form runat="server">`.
|
||||
- `Site.master` must keep the Metronic layout structure.
|
||||
- Keep the sidebar/header/page-content structure similar to the original Metronic project.
|
||||
- Do not restore the hidden search box from the old header.
|
||||
- Keep the actions button if it exists in the selected master layout.
|
||||
- Do not hardcode real user/menu database logic inside `Site.master.cs`.
|
||||
- User data must come from a contract/service.
|
||||
- Menu data must come from a contract/service.
|
||||
- Breadcrumb/title/layout data must come from a contract/service when dynamic.
|
||||
- Do not use `<title id="Titulo" runat="server">`.
|
||||
- Prefer `<title><%: Page.Title %></title>`.
|
||||
- If a generated starter currently uses a title literal, replace it with `Page.Title` unless there is a specific reason to keep the literal.
|
||||
|
||||
Current preferred contracts:
|
||||
|
||||
```text
|
||||
IAuthContract
|
||||
IUserSessionContract
|
||||
IMenuContract
|
||||
IMasterPageContract
|
||||
```
|
||||
|
||||
If old names such as `IUserContextProvider` or `IMenuProvider` exist, migrate them to the current contract naming or create adapters. Do not keep two competing naming systems.
|
||||
|
||||
---
|
||||
|
||||
## ContentPlaceHolder rules
|
||||
|
||||
`Site.master` must use short placeholder IDs.
|
||||
|
||||
Preferred final placeholder IDs:
|
||||
|
||||
```text
|
||||
H = page-specific head/CSS content
|
||||
C = main page content
|
||||
J = page-specific JavaScript
|
||||
```
|
||||
|
||||
Example in `Site.master`:
|
||||
|
||||
```aspx
|
||||
<asp:ContentPlaceHolder ID="H" runat="server" />
|
||||
<asp:ContentPlaceHolder ID="C" runat="server" />
|
||||
<asp:ContentPlaceHolder ID="J" runat="server" />
|
||||
```
|
||||
|
||||
Example in a normal page:
|
||||
|
||||
```aspx
|
||||
<asp:Content ID="ContentHead" ContentPlaceHolderID="H" runat="server">
|
||||
</asp:Content>
|
||||
|
||||
<asp:Content ID="ContentMain" ContentPlaceHolderID="C" runat="server">
|
||||
</asp:Content>
|
||||
|
||||
<asp:Content ID="ContentScripts" ContentPlaceHolderID="J" runat="server">
|
||||
</asp:Content>
|
||||
```
|
||||
|
||||
If the generated starter currently has `HeadContent`, `MainContent`, or `ScriptsContent`, rename them to `H`, `C`, and `J` before adding more pages.
|
||||
|
||||
Do not mix placeholder naming systems in the same project.
|
||||
|
||||
---
|
||||
|
||||
## WebForms tab and page-state rules
|
||||
|
||||
- Register AjaxControlToolkit once in `Web.config` under `system.web/pages/controls` with the exact prefix `ajax`; do not add `<%@ Register ... %>` directives for it in individual pages.
|
||||
- AjaxControlToolkit controls must use the `ajax:` prefix, for example `ajax:TabContainer` and `ajax:TabPanel`; do not use `ajaxToolkit:` or another page-specific prefix.
|
||||
- Tabs in WebForms pages must use `ajax:TabContainer` and `ajax:TabPanel`; do not build page tabs with Bootstrap `nav-tabs`, custom hidden panels, or JavaScript-only tab switching.
|
||||
- Use the `ScriptManager` owned by `Site.master` and the existing AjaxControlToolkit resources. Do not add another `ScriptManager` or duplicate Toolkit scripts/styles.
|
||||
- Server-side page state such as current entity keys, selected child keys, editing mode, flags, and the active tab must be stored in typed `ViewState` properties when it must survive postback.
|
||||
- Do not add `asp:HiddenField` merely to preserve server-side state across postbacks. A hidden field is allowed only when client-side JavaScript must read or change the value.
|
||||
- Hidden-field values are client-controlled and must never be trusted for authorization or sensitive decisions; validate them again on the server when their use is unavoidable.
|
||||
- Keep ViewState values small and serializable. Do not store database connections, commands, readers, services, repositories, or unnecessarily large result sets in ViewState.
|
||||
- ViewState property and key names must identify the entity and purpose, for example `CveFraccionamientoActual` and `CveFraccionamientoEtapaActual`.
|
||||
- When a postback needs to recover related values from an already loaded catalog, store the typed serializable object list in a typed `ViewState` property and locate the selected object by its key.
|
||||
- Do not copy server-owned catalog or model values into HTML `data-*` attributes, CSS classes, hidden fields, or other client-controlled markup merely to recover them during a postback. Read them from the typed object list stored in `ViewState`.
|
||||
|
||||
### Server-control visibility rules
|
||||
|
||||
- Never use the effective `Visible` property of an ASP.NET server control as business or page state, as an `if` condition, or as the input used to mutate another control or object. An invisible ancestor causes every descendant to report `Visible == false`, regardless of the value assigned directly to that descendant.
|
||||
- Calculate visibility in independent, clearly named Boolean variables or a typed state model. Use those values both for decisions and for assigning each control's `Visible` property.
|
||||
- When configuring children of a server container that starts hidden, make the parent container visible before assigning child visibility. After assigning the children, hide the parent again only when the independent visibility values indicate that none of its children should be rendered.
|
||||
|
||||
---
|
||||
|
||||
## Login and session rules
|
||||
|
||||
Authentication must go through a contract.
|
||||
|
||||
Required flow:
|
||||
|
||||
```text
|
||||
Login.aspx.cs
|
||||
↓
|
||||
IAuthContract
|
||||
↓
|
||||
DummyAuthContract now, real AuthService later
|
||||
↓
|
||||
IUserSessionContract
|
||||
↓
|
||||
Session user
|
||||
```
|
||||
|
||||
Initial login may be dummy.
|
||||
|
||||
Dummy session user should be safe and clearly fake, for example:
|
||||
|
||||
```text
|
||||
UserId: 15
|
||||
CompanyId: 1
|
||||
RoleId: 1
|
||||
RoleName: Administrador
|
||||
CompanyName: Empresa Demo
|
||||
DisplayName: Usuario Demo
|
||||
```
|
||||
|
||||
Rules:
|
||||
|
||||
- Dummy login may accept any non-empty username and password during starter setup.
|
||||
- Mark dummy authentication clearly in code comments.
|
||||
- Do not mix real SQL authentication with dummy authentication in the same class.
|
||||
- When real login is implemented, create a new service such as `SqlAuthContract` or `AuthService`.
|
||||
- Do not store passwords in session.
|
||||
- Do not log raw passwords.
|
||||
- Use Forms Authentication if staying with classic WebForms auth.
|
||||
|
||||
---
|
||||
|
||||
## Global.asax rules
|
||||
|
||||
`Global.asax` / `Global.asax.cs` should:
|
||||
|
||||
- Register bundles through `BundleConfig.RegisterBundles(BundleTable.Bundles)`.
|
||||
- Configure basic application startup.
|
||||
- Avoid business logic.
|
||||
- Avoid direct database startup queries unless absolutely required.
|
||||
|
||||
If OWIN is not used, prevent startup errors by adding this to `Web.config`:
|
||||
|
||||
```xml
|
||||
<add key="owin:AutomaticAppStartup" value="false" />
|
||||
```
|
||||
|
||||
Do not add OWIN packages unless the project actually needs OWIN.
|
||||
|
||||
---
|
||||
|
||||
## Web.config rules
|
||||
|
||||
`Web.config` must stay compatible with ASP.NET WebForms on .NET Framework 4.8/4.8.1.
|
||||
|
||||
Rules:
|
||||
|
||||
- Use Forms Authentication unless a different auth system is explicitly requested.
|
||||
- Allow anonymous access only to the login page and required static assets.
|
||||
- Do not add ASP.NET Core middleware settings.
|
||||
- Do not add unsupported `.NET Core` config sections.
|
||||
- Do not add CodeDom provider entries unless the matching NuGet package is installed.
|
||||
- If this error appears: `No se pudo ubicar el tipo de proveedor CodeDom Microsoft.CodeDom.Providers.DotNetCompilerPlatform...`, either install the exact package version or remove/fix the `system.codedom` section.
|
||||
- Keep MIME mappings for fonts such as `.woff` and `.woff2` when Metronic requires them.
|
||||
|
||||
---
|
||||
|
||||
## OWIN rule
|
||||
|
||||
If the application shows this error:
|
||||
|
||||
```text
|
||||
No assembly found containing an OwinStartupAttribute
|
||||
```
|
||||
|
||||
And the project does not use OWIN, add this in `appSettings`:
|
||||
|
||||
```xml
|
||||
<add key="owin:AutomaticAppStartup" value="false" />
|
||||
```
|
||||
|
||||
Do not create an empty OWIN startup class just to silence the error unless OWIN is actually required.
|
||||
|
||||
---
|
||||
|
||||
## Site.master rendering rules
|
||||
|
||||
The master page should render bundles and scripts in this general order:
|
||||
|
||||
Inside `<head>`:
|
||||
|
||||
```aspx
|
||||
<%: Scripts.Render("~/bundles/modernizr") %>
|
||||
<%: Styles.Render("~/Content/AjaxControlToolkit/Styles/Bundle") %>
|
||||
<%: Styles.Render("~/Metronic/assets/global/css/cssV1") %>
|
||||
<asp:ContentPlaceHolder ID="H" runat="server" />
|
||||
```
|
||||
|
||||
Inside `<form>` near the top:
|
||||
|
||||
```aspx
|
||||
<asp:ScriptManager ID="TSM" runat="server" />
|
||||
<%: Scripts.Render("~/bundles/scripts") %>
|
||||
```
|
||||
|
||||
Before closing `</form>`:
|
||||
|
||||
```aspx
|
||||
<%: Scripts.Render("~/Metronic/assets/global/scripts/JSV1") %>
|
||||
<%: Scripts.Render("~/bundles/highcharts") %>
|
||||
<asp:ContentPlaceHolder ID="J" runat="server" />
|
||||
```
|
||||
|
||||
Rules:
|
||||
|
||||
- Do not render the same script twice.
|
||||
- Do not render JQuery twice.
|
||||
- Keep `ScriptManager` if AjaxControlToolkit, UpdatePanel, or WebForms AJAX is used.
|
||||
- Keep `TSM_AsyncPostBackError` only if implemented in code-behind.
|
||||
- Remove or implement any event handler referenced by markup.
|
||||
|
||||
---
|
||||
|
||||
## Header/menu rules
|
||||
|
||||
The master header must preserve the selected Metronic layout.
|
||||
|
||||
Rules:
|
||||
|
||||
- Keep user dropdown.
|
||||
- Keep logout option.
|
||||
- Keep actions button when present.
|
||||
- Do not restore the hidden/old search box from legacy header.
|
||||
- Sidebar menu must be built from `IMenuContract`.
|
||||
- Do not build the menu from SQL inside `Site.master.cs`.
|
||||
- Menu items should use `MenuItemModel` or an equivalent model.
|
||||
- Encode text output when generating HTML menu strings.
|
||||
- Module visibility and page access are separate concerns: `Sis_Modulos.Visible` controls whether an item is shown in the menu, but it must not deny direct page access.
|
||||
- `PA_Sis_PaginaAccessCheck` must validate role assignment, `PuedeVer`, active state, and URL. It must not require `Sis_Modulos.Visible = 1`.
|
||||
|
||||
---
|
||||
|
||||
## Page title and breadcrumb rules
|
||||
|
||||
Page title and breadcrumb should be handled consistently.
|
||||
|
||||
Rules:
|
||||
|
||||
- Use `Page.Title` for the browser title.
|
||||
- Use a master/layout model for visible page title and breadcrumb.
|
||||
- Do not hardcode global breadcrumb logic in every page.
|
||||
- Normal pages may set page title in `Page_Load` or via properties.
|
||||
|
||||
Preferred model:
|
||||
|
||||
```text
|
||||
MasterLayoutModel
|
||||
PageTitle
|
||||
Breadcrumbs
|
||||
CurrentUser
|
||||
MenuItems
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## JavaScript and CSS rules
|
||||
|
||||
- Global scripts/styles must be registered in `BundleConfig` and rendered by master.
|
||||
- El JavaScript específico de una página debe quedar dentro del mismo `.aspx`, en un bloque `<script>` del placeholder `J`.
|
||||
- El CSS específico de una página debe quedar dentro del mismo `.aspx`, en un bloque `<style>` del placeholder `H`.
|
||||
- No crear archivos `.js` o `.css` separados para una página ni mover su código a bundles globales, independientemente de su tamaño, salvo petición explícita del usuario. Los recursos compartidos y de UserControls conservan su carga global.
|
||||
- Do not remove existing custom legacy files unless the user asks.
|
||||
- Fix null `addEventListener` errors by checking that the element exists before attaching events.
|
||||
- Avoid blocking Ctrl+V unless a specific feature requires it.
|
||||
|
||||
---
|
||||
|
||||
## User control rules
|
||||
|
||||
If server controls are migrated:
|
||||
|
||||
- Prefer C# classes under `App_Code/SigControls` when creating reusable server controls.
|
||||
- Do not mix WebForms `.ascx` user controls with App_Code server-control classes unless there is a clear reason.
|
||||
- Never use `Page.Header.Controls.Add` or dynamic `HtmlLink`/`style`/`script` insertion to load resources or define CSS/JS from a control. Keep implementations in global files; use the existing `RegistraScript` (`PageScriptRegistrar.RegistraScript` in UserControls) for individual server-triggered calls. Do not replace it with action queues or serialized commands. Keep the existing centralized alert service and open lateral panels on the client click through `data-sig-panel-abrir`.
|
||||
- Business UserControls belong in `UserControl/` as `.ascx` and `.ascx.cs`; a request for a UserControl must not be implemented as an `App_Code` `CompositeControl`.
|
||||
- Verify the complete page lifecycle, including `PreRender` with the master header containing `<% ... %>` blocks, multiple instances and partial postbacks. Compilation alone does not verify this behavior.
|
||||
- Controls should expose properties/events and avoid direct SQL access.
|
||||
- Controls should call contracts/services when they need data.
|
||||
|
||||
---
|
||||
|
||||
## Home page rules
|
||||
|
||||
Use only one active home page convention.
|
||||
|
||||
For local development, the canonical home URL is:
|
||||
|
||||
```text
|
||||
http://localhost:52706/Inicio.aspx
|
||||
```
|
||||
|
||||
The application root must be equivalent and redirect explicitly to that page:
|
||||
|
||||
```text
|
||||
http://localhost:52706/ -> http://localhost:52706/Inicio.aspx
|
||||
```
|
||||
|
||||
Keep the root redirect and the `Inicio.aspx` default document consistent. Do not introduce another startup page.
|
||||
|
||||
Allowed options:
|
||||
|
||||
```text
|
||||
Default.aspx
|
||||
Inicio.aspx
|
||||
```
|
||||
|
||||
Rules:
|
||||
|
||||
- Do not keep both as competing entry pages.
|
||||
- If using `Inicio.aspx`, redirect `Default.aspx` to `Inicio.aspx` or update Forms Authentication default URL.
|
||||
- If using `Default.aspx`, keep Web.config and menu links pointing to `Default.aspx`.
|
||||
- The home page must use `Site.master`.
|
||||
|
||||
---
|
||||
@@ -31,27 +31,27 @@ Estas reglas complementan `AGENTS.md` y `AGENTS_PAGE_STRUCTURE.md`.
|
||||
- Preferir esta configuración:
|
||||
|
||||
```aspx
|
||||
<asp:UpdatePanel ID="UpUsuarios" runat="server" UpdateMode="Conditional" ChildrenAsTriggers="false">
|
||||
<asp:UpdatePanel ID="UpUsuarios" runat="server" UpdateMode="Conditional" ChildrenAsTriggers="true">
|
||||
<ContentTemplate>
|
||||
<!-- Sección que se actualiza parcialmente -->
|
||||
</ContentTemplate>
|
||||
<Triggers>
|
||||
<asp:AsyncPostBackTrigger ControlID="BtnBuscar" EventName="Click" />
|
||||
</Triggers>
|
||||
</asp:UpdatePanel>
|
||||
```
|
||||
|
||||
- Usar `UpdateMode="Conditional"` de manera predeterminada.
|
||||
- Preferir `ChildrenAsTriggers="false"` y declarar triggers explícitos para que el comportamiento sea fácil de revisar.
|
||||
- Preferir `ChildrenAsTriggers="true"` y aprovechar los eventos de los controles hijos; no declarar `AsyncPostBackTrigger` para controles que ya están dentro del mismo panel.
|
||||
- Llamar `Update()` únicamente en paneles condicionales y sólo cuando el servidor haya modificado su contenido.
|
||||
- Evitar `UpdatePanel` anidados. Si son necesarios, documentar qué evento actualiza cada panel.
|
||||
- No actualizar varios paneles si sólo cambió una sección.
|
||||
- Los controles externos que disparen actualización parcial deben declararse como `AsyncPostBackTrigger` o registrarse mediante `ScriptManager.RegisterAsyncPostBackControl`.
|
||||
- Los controles externos que disparen actualización parcial deben colocarse dentro del panel correspondiente cuando sea apropiado; en caso contrario, registrarlos mediante `ScriptManager.RegisterAsyncPostBackControl` y actualizar explícitamente los paneles afectados.
|
||||
- Conservar `<Triggers>` únicamente cuando exista una necesidad técnica. Evitar referencias declarativas a controles de otros contenedores de nombres o secciones que puedan no estar disponibles; usar la referencia del control al registrarlo mediante `ScriptManager`.
|
||||
- En cada modal, colocar un solo `UpdatePanel` inmediatamente dentro del segundo `div` (`modal-dialog`), con todo el `modal-content` dentro de su `ContentTemplate`. No dividir el contenido del mismo modal en varios paneles.
|
||||
- Las operaciones normales de guardar, seleccionar valores, ejecutar `RowCommand` y abrir o modificar modales deben usar postbacks parciales y conservar sus eventos existentes.
|
||||
|
||||
## Operaciones que requieren postback completo
|
||||
|
||||
- Usar `PostBackTrigger` para cargas de archivos, descargas que escriben directamente en `Response`, exportaciones y otras operaciones incompatibles con postback asíncrono.
|
||||
- No intentar procesar `FileUpload` dentro de un postback parcial sin `PostBackTrigger`.
|
||||
- Conservar postbacks completos únicamente para una necesidad técnica real: cargas mediante `FileUpload`, descargas que escriben directamente en `Response`, exportaciones y otras respuestas incompatibles con AJAX. Usar `PostBackTrigger` o `ScriptManager.RegisterPostBackControl` según el contenedor del control; no usarlos para botones que únicamente guardan información o actualizan la interfaz.
|
||||
- No intentar recibir archivos mediante `FileUpload` en un postback parcial; su botón de envío debe estar registrado para postback completo.
|
||||
- No iniciar una descarga binaria desde una respuesta parcial de `UpdatePanel`.
|
||||
|
||||
## Ciclo de vida y rendimiento
|
||||
@@ -90,7 +90,7 @@ Estas reglas complementan `AGENTS.md` y `AGENTS_PAGE_STRUCTURE.md`.
|
||||
|
||||
<asp:Content ID="ContentMain" ContentPlaceHolderID="C" runat="server">
|
||||
<asp:UpdatePanel ID="UpContenido" runat="server"
|
||||
UpdateMode="Conditional" ChildrenAsTriggers="false">
|
||||
UpdateMode="Conditional" ChildrenAsTriggers="true">
|
||||
<ContentTemplate>
|
||||
<!-- No agregar otro form ni otro ScriptManager. -->
|
||||
</ContentTemplate>
|
||||
|
||||
BIN
AGUAHH.zip
Normal file
BIN
AGUAHH.zip
Normal file
Binary file not shown.
BIN
AP01-CANTABRIA2 ETAPA 1-20250917-v03.dwg
Normal file
BIN
AP01-CANTABRIA2 ETAPA 1-20250917-v03.dwg
Normal file
Binary file not shown.
1266
Ajuste_Bitacora_Plantillas_20260920.sql
Normal file
1266
Ajuste_Bitacora_Plantillas_20260920.sql
Normal file
File diff suppressed because it is too large
Load Diff
1708
Bitacora_Procedimientos.sql
Normal file
1708
Bitacora_Procedimientos.sql
Normal file
File diff suppressed because it is too large
Load Diff
573
Catalogo_ProductosServicios.sql
Normal file
573
Catalogo_ProductosServicios.sql
Normal file
@@ -0,0 +1,573 @@
|
||||
SET NOCOUNT ON;
|
||||
GO
|
||||
|
||||
CREATE OR ALTER PROCEDURE dbo.PA_Gral_ProductoServicioList
|
||||
@Texto varchar(200) = NULL,
|
||||
@IncluirInactivos bit = 0,
|
||||
@CveUsuarioEjecuta int,
|
||||
@ErrorMostrar varchar(max) OUTPUT,
|
||||
@ErrorTipo int OUTPUT,
|
||||
@Return bit OUTPUT
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON;
|
||||
SELECT @ErrorMostrar = NULL, @ErrorTipo = 0, @Return = 0;
|
||||
|
||||
BEGIN TRY
|
||||
SET @Texto = NULLIF(LTRIM(RTRIM(@Texto)), '');
|
||||
|
||||
SELECT
|
||||
PS.CvePS,
|
||||
PS.Codigo,
|
||||
PS.PS,
|
||||
PS.CveTipoPS,
|
||||
CASE PS.CveTipoPS
|
||||
WHEN 2 THEN 'Producto'
|
||||
ELSE 'Servicio'
|
||||
END AS TipoPS,
|
||||
PS.CveClasificacion,
|
||||
C.Clasificacion,
|
||||
PS.CveUnidadMedida,
|
||||
UM.UnidadMedida,
|
||||
CONVERT(decimal(18, 2), PS.Precio) AS Precio,
|
||||
PS.Estado AS EsActivo
|
||||
FROM dbo.ProductosServicios AS PS
|
||||
INNER JOIN dbo.Clasificaciones AS C
|
||||
ON C.CveClasificacion = PS.CveClasificacion
|
||||
INNER JOIN dbo.UnidadesMedida AS UM
|
||||
ON UM.CveUnidadMedida = PS.CveUnidadMedida
|
||||
WHERE (@IncluirInactivos = 1 OR PS.Estado = 1)
|
||||
AND
|
||||
(
|
||||
@Texto IS NULL
|
||||
OR PS.Codigo LIKE '%' + @Texto + '%'
|
||||
OR PS.PS LIKE '%' + @Texto + '%'
|
||||
OR C.Clasificacion LIKE '%' + @Texto + '%'
|
||||
OR UM.UnidadMedida LIKE '%' + @Texto + '%'
|
||||
)
|
||||
ORDER BY PS.PS, PS.CvePS;
|
||||
|
||||
SET @Return = 1;
|
||||
END TRY
|
||||
BEGIN CATCH
|
||||
SELECT
|
||||
@ErrorMostrar = 'Ocurrió un error al consultar los productos y servicios; favor de contactar a Sistemas.',
|
||||
@ErrorTipo = 1,
|
||||
@Return = 0;
|
||||
|
||||
DECLARE @ErrorTecnico nvarchar(2048) = CONCAT(
|
||||
'Número: ', ERROR_NUMBER(),
|
||||
'; Procedimiento: ', COALESCE(ERROR_PROCEDURE(), 'PA_Gral_ProductoServicioList'),
|
||||
'; Línea: ', ERROR_LINE(),
|
||||
'; Detalle: ', ERROR_MESSAGE());
|
||||
|
||||
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
|
||||
END CATCH;
|
||||
END;
|
||||
GO
|
||||
|
||||
CREATE OR ALTER PROCEDURE dbo.PA_Gral_ProductoServicioGet
|
||||
@CvePS int,
|
||||
@CveUsuarioEjecuta int,
|
||||
@ErrorMostrar varchar(max) OUTPUT,
|
||||
@ErrorTipo int OUTPUT,
|
||||
@Return bit OUTPUT
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON;
|
||||
SELECT @ErrorMostrar = NULL, @ErrorTipo = 0, @Return = 0;
|
||||
|
||||
BEGIN TRY
|
||||
SELECT
|
||||
PS.CvePS,
|
||||
PS.Codigo,
|
||||
PS.PS,
|
||||
PS.CveTipoPS,
|
||||
CASE PS.CveTipoPS
|
||||
WHEN 2 THEN 'Producto'
|
||||
ELSE 'Servicio'
|
||||
END AS TipoPS,
|
||||
PS.CveClasificacion,
|
||||
C.Clasificacion,
|
||||
PS.CveUnidadMedida,
|
||||
UM.UnidadMedida,
|
||||
CONVERT(decimal(18, 2), PS.Precio) AS Precio,
|
||||
PS.Estado AS EsActivo
|
||||
FROM dbo.ProductosServicios AS PS
|
||||
INNER JOIN dbo.Clasificaciones AS C
|
||||
ON C.CveClasificacion = PS.CveClasificacion
|
||||
INNER JOIN dbo.UnidadesMedida AS UM
|
||||
ON UM.CveUnidadMedida = PS.CveUnidadMedida
|
||||
WHERE PS.CvePS = @CvePS;
|
||||
|
||||
SET @Return = 1;
|
||||
END TRY
|
||||
BEGIN CATCH
|
||||
SELECT
|
||||
@ErrorMostrar = 'Ocurrió un error al consultar el producto o servicio; favor de contactar a Sistemas.',
|
||||
@ErrorTipo = 1,
|
||||
@Return = 0;
|
||||
|
||||
DECLARE @ErrorTecnico nvarchar(2048) = CONCAT(
|
||||
'Número: ', ERROR_NUMBER(),
|
||||
'; Procedimiento: ', COALESCE(ERROR_PROCEDURE(), 'PA_Gral_ProductoServicioGet'),
|
||||
'; Línea: ', ERROR_LINE(),
|
||||
'; Detalle: ', ERROR_MESSAGE());
|
||||
|
||||
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
|
||||
END CATCH;
|
||||
END;
|
||||
GO
|
||||
|
||||
CREATE OR ALTER PROCEDURE dbo.PA_Gral_ProductoServicioOpcionesList
|
||||
@CveClasificacionActual int = NULL,
|
||||
@CveUnidadMedidaActual int = NULL,
|
||||
@CveUsuarioEjecuta int,
|
||||
@ErrorMostrar varchar(max) OUTPUT,
|
||||
@ErrorTipo int OUTPUT,
|
||||
@Return bit OUTPUT
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON;
|
||||
SELECT @ErrorMostrar = NULL, @ErrorTipo = 0, @Return = 0;
|
||||
|
||||
BEGIN TRY
|
||||
SELECT
|
||||
CveClasificacion,
|
||||
CASE
|
||||
WHEN NULLIF(LTRIM(RTRIM(Codigo)), '') IS NULL
|
||||
THEN Clasificacion COLLATE Modern_Spanish_CS_AS
|
||||
ELSE
|
||||
Codigo COLLATE Modern_Spanish_CS_AS
|
||||
+ ' - '
|
||||
+ Clasificacion COLLATE Modern_Spanish_CS_AS
|
||||
END AS Clasificacion
|
||||
FROM dbo.Clasificaciones
|
||||
WHERE
|
||||
(
|
||||
Estado = 1
|
||||
AND Afectable = 1
|
||||
)
|
||||
OR CveClasificacion = @CveClasificacionActual
|
||||
ORDER BY Clasificacion, Codigo, CveClasificacion;
|
||||
|
||||
SELECT
|
||||
CveUnidadMedida,
|
||||
CASE
|
||||
WHEN NULLIF(LTRIM(RTRIM(Abreviatura)), '') IS NULL
|
||||
THEN UnidadMedida COLLATE Modern_Spanish_CS_AS
|
||||
ELSE
|
||||
UnidadMedida COLLATE Modern_Spanish_CS_AS
|
||||
+ ' ('
|
||||
+ Abreviatura COLLATE Modern_Spanish_CS_AS
|
||||
+ ')'
|
||||
END AS UnidadMedida
|
||||
FROM dbo.UnidadesMedida
|
||||
WHERE Estado = 1
|
||||
OR CveUnidadMedida = @CveUnidadMedidaActual
|
||||
ORDER BY UnidadMedida, CveUnidadMedida;
|
||||
|
||||
SET @Return = 1;
|
||||
END TRY
|
||||
BEGIN CATCH
|
||||
SELECT
|
||||
@ErrorMostrar = 'Ocurrió un error al consultar las opciones del catálogo; favor de contactar a Sistemas.',
|
||||
@ErrorTipo = 1,
|
||||
@Return = 0;
|
||||
|
||||
DECLARE @ErrorTecnico nvarchar(2048) = CONCAT(
|
||||
'Número: ', ERROR_NUMBER(),
|
||||
'; Procedimiento: ', COALESCE(ERROR_PROCEDURE(), 'PA_Gral_ProductoServicioOpcionesList'),
|
||||
'; Línea: ', ERROR_LINE(),
|
||||
'; Detalle: ', ERROR_MESSAGE());
|
||||
|
||||
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
|
||||
END CATCH;
|
||||
END;
|
||||
GO
|
||||
|
||||
CREATE OR ALTER PROCEDURE dbo.PA_Gral_ProductoServicioSave
|
||||
@CvePS int = NULL,
|
||||
@Codigo varchar(50) = NULL,
|
||||
@PS varchar(846),
|
||||
@CveTipoPS int,
|
||||
@CveClasificacion int,
|
||||
@CveUnidadMedida int,
|
||||
@Precio decimal(18, 2),
|
||||
@EsActivo bit,
|
||||
@CveUsuarioEjecuta int,
|
||||
@ErrorMostrar varchar(max) OUTPUT,
|
||||
@ErrorTipo int OUTPUT,
|
||||
@Return bit OUTPUT
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON;
|
||||
SELECT @ErrorMostrar = NULL, @ErrorTipo = 0, @Return = 0;
|
||||
|
||||
BEGIN TRY
|
||||
SELECT
|
||||
@CvePS = NULLIF(@CvePS, 0),
|
||||
@Codigo = NULLIF(LTRIM(RTRIM(@Codigo)), ''),
|
||||
@PS = LTRIM(RTRIM(@PS));
|
||||
|
||||
IF NULLIF(@PS, '') IS NULL
|
||||
BEGIN
|
||||
SELECT
|
||||
@ErrorMostrar = 'Capture la descripción del producto o servicio.',
|
||||
@ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
IF @CveTipoPS NOT IN (1, 2)
|
||||
BEGIN
|
||||
SELECT
|
||||
@ErrorMostrar = 'Seleccione si el registro es producto o servicio.',
|
||||
@ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
IF @Precio < 0
|
||||
BEGIN
|
||||
SELECT
|
||||
@ErrorMostrar = 'El precio no puede ser negativo.',
|
||||
@ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
IF NOT EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM dbo.Clasificaciones
|
||||
WHERE CveClasificacion = @CveClasificacion
|
||||
AND
|
||||
(
|
||||
Estado = 1
|
||||
OR CveClasificacion =
|
||||
(
|
||||
SELECT CveClasificacion
|
||||
FROM dbo.ProductosServicios
|
||||
WHERE CvePS = @CvePS
|
||||
)
|
||||
)
|
||||
)
|
||||
BEGIN
|
||||
SELECT
|
||||
@ErrorMostrar = 'Seleccione una clasificación vigente.',
|
||||
@ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
IF NOT EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM dbo.UnidadesMedida
|
||||
WHERE CveUnidadMedida = @CveUnidadMedida
|
||||
AND
|
||||
(
|
||||
Estado = 1
|
||||
OR CveUnidadMedida =
|
||||
(
|
||||
SELECT CveUnidadMedida
|
||||
FROM dbo.ProductosServicios
|
||||
WHERE CvePS = @CvePS
|
||||
)
|
||||
)
|
||||
)
|
||||
BEGIN
|
||||
SELECT
|
||||
@ErrorMostrar = 'Seleccione una unidad de medida vigente.',
|
||||
@ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
IF @Codigo IS NOT NULL
|
||||
AND EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM dbo.ProductosServicios
|
||||
WHERE Codigo = @Codigo
|
||||
AND CvePS <> ISNULL(@CvePS, 0)
|
||||
)
|
||||
BEGIN
|
||||
SELECT
|
||||
@ErrorMostrar = 'El código ya está asignado a otro producto o servicio.',
|
||||
@ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
IF @CvePS IS NULL
|
||||
BEGIN
|
||||
INSERT dbo.ProductosServicios
|
||||
(
|
||||
CveClasificacion,
|
||||
CveUnidadMedida,
|
||||
Codigo,
|
||||
PS,
|
||||
Precio,
|
||||
Estado,
|
||||
Fecha,
|
||||
CveTipoPS,
|
||||
CveUsuario,
|
||||
CveUsuarioModifico,
|
||||
FechaUltimaModificacion
|
||||
)
|
||||
VALUES
|
||||
(
|
||||
@CveClasificacion,
|
||||
@CveUnidadMedida,
|
||||
@Codigo,
|
||||
@PS,
|
||||
CONVERT(float, @Precio),
|
||||
@EsActivo,
|
||||
GETDATE(),
|
||||
@CveTipoPS,
|
||||
@CveUsuarioEjecuta,
|
||||
@CveUsuarioEjecuta,
|
||||
GETDATE()
|
||||
);
|
||||
|
||||
SET @CvePS = CONVERT(int, SCOPE_IDENTITY());
|
||||
END
|
||||
ELSE
|
||||
BEGIN
|
||||
IF NOT EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM dbo.ProductosServicios
|
||||
WHERE CvePS = @CvePS
|
||||
)
|
||||
BEGIN
|
||||
SELECT
|
||||
@ErrorMostrar = 'El producto o servicio seleccionado no existe.',
|
||||
@ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
UPDATE dbo.ProductosServicios
|
||||
SET CveClasificacion = @CveClasificacion,
|
||||
CveUnidadMedida = @CveUnidadMedida,
|
||||
Codigo = @Codigo,
|
||||
PS = @PS,
|
||||
Precio = CONVERT(float, @Precio),
|
||||
Estado = @EsActivo,
|
||||
CveTipoPS = @CveTipoPS,
|
||||
CveUsuarioModifico = @CveUsuarioEjecuta,
|
||||
FechaUltimaModificacion = GETDATE()
|
||||
WHERE CvePS = @CvePS;
|
||||
END;
|
||||
|
||||
SELECT @CvePS AS CvePS;
|
||||
SET @Return = 1;
|
||||
END TRY
|
||||
BEGIN CATCH
|
||||
SELECT
|
||||
@ErrorMostrar = 'Ocurrió un error al guardar el producto o servicio; favor de contactar a Sistemas.',
|
||||
@ErrorTipo = 1,
|
||||
@Return = 0;
|
||||
|
||||
DECLARE @ErrorTecnico nvarchar(2048) = CONCAT(
|
||||
'Número: ', ERROR_NUMBER(),
|
||||
'; Procedimiento: ', COALESCE(ERROR_PROCEDURE(), 'PA_Gral_ProductoServicioSave'),
|
||||
'; Línea: ', ERROR_LINE(),
|
||||
'; Detalle: ', ERROR_MESSAGE());
|
||||
|
||||
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
|
||||
END CATCH;
|
||||
END;
|
||||
GO
|
||||
|
||||
CREATE OR ALTER PROCEDURE dbo.PA_Gral_ProductoServicioDelete
|
||||
@CvePS int,
|
||||
@CveUsuarioEjecuta int,
|
||||
@ErrorMostrar varchar(max) OUTPUT,
|
||||
@ErrorTipo int OUTPUT,
|
||||
@Return bit OUTPUT
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON;
|
||||
SELECT @ErrorMostrar = NULL, @ErrorTipo = 0, @Return = 0;
|
||||
|
||||
BEGIN TRY
|
||||
IF NOT EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM dbo.ProductosServicios
|
||||
WHERE CvePS = @CvePS
|
||||
)
|
||||
BEGIN
|
||||
SELECT
|
||||
@ErrorMostrar = 'El producto o servicio seleccionado no existe.',
|
||||
@ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
IF EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM dbo.Tra_CostosTramite
|
||||
WHERE CvePS = @CvePS
|
||||
)
|
||||
OR EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM dbo.Tra_PagosDetalle
|
||||
WHERE CvePS = @CvePS
|
||||
)
|
||||
OR EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM dbo.VentasDetalle
|
||||
WHERE CvePS = @CvePS
|
||||
)
|
||||
OR EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM dbo.ProductosServicios
|
||||
WHERE CvePS <> @CvePS
|
||||
AND
|
||||
(
|
||||
CvePSAdicional = @CvePS
|
||||
OR CveCompuesto = @CvePS
|
||||
)
|
||||
)
|
||||
BEGIN
|
||||
SELECT
|
||||
@ErrorMostrar = 'El producto o servicio tiene trámites, pagos, ventas o productos relacionados y no puede eliminarse.',
|
||||
@ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
DELETE dbo.ProductosServicios
|
||||
WHERE CvePS = @CvePS;
|
||||
|
||||
SET @Return = 1;
|
||||
END TRY
|
||||
BEGIN CATCH
|
||||
IF ERROR_NUMBER() = 547
|
||||
BEGIN
|
||||
SELECT
|
||||
@ErrorMostrar = 'El producto o servicio tiene información relacionada y no puede eliminarse.',
|
||||
@ErrorTipo = 2,
|
||||
@Return = 0;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
SELECT
|
||||
@ErrorMostrar = 'Ocurrió un error al eliminar el producto o servicio; favor de contactar a Sistemas.',
|
||||
@ErrorTipo = 1,
|
||||
@Return = 0;
|
||||
|
||||
DECLARE @ErrorTecnico nvarchar(2048) = CONCAT(
|
||||
'Número: ', ERROR_NUMBER(),
|
||||
'; Procedimiento: ', COALESCE(ERROR_PROCEDURE(), 'PA_Gral_ProductoServicioDelete'),
|
||||
'; Línea: ', ERROR_LINE(),
|
||||
'; Detalle: ', ERROR_MESSAGE());
|
||||
|
||||
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
|
||||
END CATCH;
|
||||
END;
|
||||
GO
|
||||
|
||||
DECLARE @CveTabla int;
|
||||
|
||||
SELECT @CveTabla = CveTabla
|
||||
FROM dbo.Bit_Tablas
|
||||
WHERE NombreTablaSQL = 'ProductosServicios' COLLATE Modern_Spanish_CS_AS;
|
||||
|
||||
IF @CveTabla IS NULL
|
||||
BEGIN
|
||||
INSERT dbo.Bit_Tablas
|
||||
(
|
||||
NombreTablaSQL,
|
||||
NombreMostrar,
|
||||
Descripcion,
|
||||
NombreCampoLlaveSQL,
|
||||
Activo
|
||||
)
|
||||
VALUES
|
||||
(
|
||||
'ProductosServicios',
|
||||
'Productos y servicios',
|
||||
'Catálogo de productos y servicios.',
|
||||
'CvePS',
|
||||
1
|
||||
);
|
||||
|
||||
SET @CveTabla = CONVERT(int, SCOPE_IDENTITY());
|
||||
END
|
||||
ELSE
|
||||
BEGIN
|
||||
UPDATE dbo.Bit_Tablas
|
||||
SET NombreMostrar = 'Productos y servicios',
|
||||
Descripcion = 'Catálogo de productos y servicios.',
|
||||
NombreCampoLlaveSQL = 'CvePS',
|
||||
Activo = 1,
|
||||
FechaMod = GETDATE()
|
||||
WHERE CveTabla = @CveTabla;
|
||||
END;
|
||||
|
||||
DECLARE @Campos TABLE
|
||||
(
|
||||
NombreCampoSQL varchar(128) COLLATE Modern_Spanish_CS_AS NOT NULL,
|
||||
NombreMostrar varchar(150) COLLATE Modern_Spanish_CS_AS NOT NULL,
|
||||
MostrarEnBitacora bit NOT NULL
|
||||
);
|
||||
|
||||
INSERT INTO @Campos
|
||||
(NombreCampoSQL, NombreMostrar, MostrarEnBitacora)
|
||||
VALUES
|
||||
('CvePS', 'Clave', 0),
|
||||
('Codigo', 'Código', 1),
|
||||
('PS', 'Descripción', 1),
|
||||
('CveTipoPS', 'Tipo', 1),
|
||||
('CveClasificacion', 'Clasificación', 1),
|
||||
('CveUnidadMedida', 'Unidad de medida', 1),
|
||||
('Precio', 'Precio', 1),
|
||||
('Estado', 'Activo', 1);
|
||||
|
||||
UPDATE BC
|
||||
SET NombreMostrar = C.NombreMostrar,
|
||||
MostrarEnBitacora = C.MostrarEnBitacora,
|
||||
TipoDatoSQL = TY.name COLLATE Modern_Spanish_CS_AS,
|
||||
Activo = 1,
|
||||
FechaMod = GETDATE()
|
||||
FROM dbo.Bit_Campos AS BC
|
||||
INNER JOIN @Campos AS C
|
||||
ON C.NombreCampoSQL = BC.NombreCampoSQL
|
||||
INNER JOIN sys.columns AS SC
|
||||
ON SC.object_id = OBJECT_ID(N'dbo.ProductosServicios')
|
||||
AND SC.name COLLATE Modern_Spanish_CS_AS = C.NombreCampoSQL
|
||||
INNER JOIN sys.types AS TY
|
||||
ON TY.user_type_id = SC.user_type_id
|
||||
WHERE BC.CveTabla = @CveTabla;
|
||||
|
||||
INSERT dbo.Bit_Campos
|
||||
(
|
||||
CveTabla,
|
||||
NombreCampoSQL,
|
||||
NombreMostrar,
|
||||
MostrarEnBitacora,
|
||||
TipoDatoSQL,
|
||||
Activo
|
||||
)
|
||||
SELECT
|
||||
@CveTabla,
|
||||
C.NombreCampoSQL,
|
||||
C.NombreMostrar,
|
||||
C.MostrarEnBitacora,
|
||||
TY.name COLLATE Modern_Spanish_CS_AS,
|
||||
1
|
||||
FROM @Campos AS C
|
||||
INNER JOIN sys.columns AS SC
|
||||
ON SC.object_id = OBJECT_ID(N'dbo.ProductosServicios')
|
||||
AND SC.name COLLATE Modern_Spanish_CS_AS = C.NombreCampoSQL
|
||||
INNER JOIN sys.types AS TY
|
||||
ON TY.user_type_id = SC.user_type_id
|
||||
WHERE NOT EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM dbo.Bit_Campos AS BC
|
||||
WHERE BC.CveTabla = @CveTabla
|
||||
AND BC.NombreCampoSQL = C.NombreCampoSQL
|
||||
);
|
||||
GO
|
||||
674
Catalogos_Clasificaciones_UnidadesMedida.sql
Normal file
674
Catalogos_Clasificaciones_UnidadesMedida.sql
Normal file
@@ -0,0 +1,674 @@
|
||||
SET NOCOUNT ON;
|
||||
GO
|
||||
|
||||
CREATE OR ALTER PROCEDURE dbo.PA_Gral_ClasificacionList
|
||||
@Texto varchar(200) = NULL,
|
||||
@IncluirInactivos bit = 0,
|
||||
@CveUsuarioEjecuta int,
|
||||
@ErrorMostrar varchar(max) OUTPUT,
|
||||
@ErrorTipo int OUTPUT,
|
||||
@Return bit OUTPUT
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON;
|
||||
SELECT
|
||||
@ErrorMostrar = NULL,
|
||||
@ErrorTipo = 0,
|
||||
@Return = 0;
|
||||
|
||||
BEGIN TRY
|
||||
SET @Texto = NULLIF(LTRIM(RTRIM(@Texto)), '');
|
||||
|
||||
SELECT
|
||||
CveClasificacion,
|
||||
Codigo,
|
||||
Clasificacion,
|
||||
Afectable,
|
||||
Estado AS EsActivo
|
||||
FROM dbo.Clasificaciones
|
||||
WHERE (@IncluirInactivos = 1 OR Estado = 1)
|
||||
AND
|
||||
(
|
||||
@Texto IS NULL
|
||||
OR Codigo LIKE '%' + @Texto + '%'
|
||||
OR Clasificacion LIKE '%' + @Texto + '%'
|
||||
)
|
||||
ORDER BY Clasificacion, Codigo, CveClasificacion;
|
||||
|
||||
SET @Return = 1;
|
||||
END TRY
|
||||
BEGIN CATCH
|
||||
SELECT
|
||||
@ErrorMostrar = 'Ocurrió un error al consultar las clasificaciones; favor de contactar a Sistemas.',
|
||||
@ErrorTipo = 1,
|
||||
@Return = 0;
|
||||
|
||||
DECLARE @ErrorTecnico nvarchar(2048) = CONCAT(
|
||||
'Número: ', ERROR_NUMBER(),
|
||||
'; Procedimiento: ', COALESCE(ERROR_PROCEDURE(), 'PA_Gral_ClasificacionList'),
|
||||
'; Línea: ', ERROR_LINE(),
|
||||
'; Detalle: ', ERROR_MESSAGE());
|
||||
|
||||
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
|
||||
END CATCH;
|
||||
END;
|
||||
GO
|
||||
|
||||
CREATE OR ALTER PROCEDURE dbo.PA_Gral_ClasificacionGet
|
||||
@CveClasificacion int,
|
||||
@CveUsuarioEjecuta int,
|
||||
@ErrorMostrar varchar(max) OUTPUT,
|
||||
@ErrorTipo int OUTPUT,
|
||||
@Return bit OUTPUT
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON;
|
||||
SELECT
|
||||
@ErrorMostrar = NULL,
|
||||
@ErrorTipo = 0,
|
||||
@Return = 0;
|
||||
|
||||
BEGIN TRY
|
||||
SELECT
|
||||
CveClasificacion,
|
||||
Codigo,
|
||||
Clasificacion,
|
||||
Afectable,
|
||||
Estado AS EsActivo
|
||||
FROM dbo.Clasificaciones
|
||||
WHERE CveClasificacion = @CveClasificacion;
|
||||
|
||||
SET @Return = 1;
|
||||
END TRY
|
||||
BEGIN CATCH
|
||||
SELECT
|
||||
@ErrorMostrar = 'Ocurrió un error al consultar la clasificación; favor de contactar a Sistemas.',
|
||||
@ErrorTipo = 1,
|
||||
@Return = 0;
|
||||
|
||||
DECLARE @ErrorTecnico nvarchar(2048) = CONCAT(
|
||||
'Número: ', ERROR_NUMBER(),
|
||||
'; Procedimiento: ', COALESCE(ERROR_PROCEDURE(), 'PA_Gral_ClasificacionGet'),
|
||||
'; Línea: ', ERROR_LINE(),
|
||||
'; Detalle: ', ERROR_MESSAGE());
|
||||
|
||||
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
|
||||
END CATCH;
|
||||
END;
|
||||
GO
|
||||
|
||||
CREATE OR ALTER PROCEDURE dbo.PA_Gral_ClasificacionSave
|
||||
@CveClasificacion int = NULL,
|
||||
@Codigo varchar(20) = NULL,
|
||||
@Clasificacion varchar(200),
|
||||
@Afectable bit,
|
||||
@EsActivo bit,
|
||||
@CveUsuarioEjecuta int,
|
||||
@ErrorMostrar varchar(max) OUTPUT,
|
||||
@ErrorTipo int OUTPUT,
|
||||
@Return bit OUTPUT
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON;
|
||||
SELECT
|
||||
@ErrorMostrar = NULL,
|
||||
@ErrorTipo = 0,
|
||||
@Return = 0;
|
||||
|
||||
BEGIN TRY
|
||||
SELECT
|
||||
@CveClasificacion = NULLIF(@CveClasificacion, 0),
|
||||
@Codigo = NULLIF(LTRIM(RTRIM(@Codigo)), ''),
|
||||
@Clasificacion = LTRIM(RTRIM(@Clasificacion));
|
||||
|
||||
IF NULLIF(@Clasificacion, '') IS NULL
|
||||
BEGIN
|
||||
SELECT
|
||||
@ErrorMostrar = 'Capture la clasificación.',
|
||||
@ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
IF EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM dbo.Clasificaciones
|
||||
WHERE Clasificacion = @Clasificacion
|
||||
AND CveClasificacion <> ISNULL(@CveClasificacion, 0)
|
||||
)
|
||||
BEGIN
|
||||
SELECT
|
||||
@ErrorMostrar = 'Ya existe una clasificación con ese nombre.',
|
||||
@ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
IF @Codigo IS NOT NULL
|
||||
AND EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM dbo.Clasificaciones
|
||||
WHERE Codigo = @Codigo
|
||||
AND CveClasificacion <> ISNULL(@CveClasificacion, 0)
|
||||
)
|
||||
BEGIN
|
||||
SELECT
|
||||
@ErrorMostrar = 'El código ya está asignado a otra clasificación.',
|
||||
@ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
IF @CveClasificacion IS NULL
|
||||
BEGIN
|
||||
INSERT dbo.Clasificaciones
|
||||
(
|
||||
Codigo,
|
||||
Clasificacion,
|
||||
Estado,
|
||||
Afectable,
|
||||
Fecha,
|
||||
CveUsuario
|
||||
)
|
||||
VALUES
|
||||
(
|
||||
@Codigo,
|
||||
@Clasificacion,
|
||||
@EsActivo,
|
||||
@Afectable,
|
||||
CONVERT(date, GETDATE()),
|
||||
@CveUsuarioEjecuta
|
||||
);
|
||||
|
||||
SET @CveClasificacion = CONVERT(int, SCOPE_IDENTITY());
|
||||
END
|
||||
ELSE
|
||||
BEGIN
|
||||
IF NOT EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM dbo.Clasificaciones
|
||||
WHERE CveClasificacion = @CveClasificacion
|
||||
)
|
||||
BEGIN
|
||||
SELECT
|
||||
@ErrorMostrar = 'La clasificación seleccionada no existe.',
|
||||
@ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
UPDATE dbo.Clasificaciones
|
||||
SET Codigo = @Codigo,
|
||||
Clasificacion = @Clasificacion,
|
||||
Estado = @EsActivo,
|
||||
Afectable = @Afectable
|
||||
WHERE CveClasificacion = @CveClasificacion;
|
||||
END;
|
||||
|
||||
SELECT @CveClasificacion AS CveClasificacion;
|
||||
SET @Return = 1;
|
||||
END TRY
|
||||
BEGIN CATCH
|
||||
SELECT
|
||||
@ErrorMostrar = 'Ocurrió un error al guardar la clasificación; favor de contactar a Sistemas.',
|
||||
@ErrorTipo = 1,
|
||||
@Return = 0;
|
||||
|
||||
DECLARE @ErrorTecnico nvarchar(2048) = CONCAT(
|
||||
'Número: ', ERROR_NUMBER(),
|
||||
'; Procedimiento: ', COALESCE(ERROR_PROCEDURE(), 'PA_Gral_ClasificacionSave'),
|
||||
'; Línea: ', ERROR_LINE(),
|
||||
'; Detalle: ', ERROR_MESSAGE());
|
||||
|
||||
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
|
||||
END CATCH;
|
||||
END;
|
||||
GO
|
||||
|
||||
CREATE OR ALTER PROCEDURE dbo.PA_Gral_ClasificacionDelete
|
||||
@CveClasificacion int,
|
||||
@CveUsuarioEjecuta int,
|
||||
@ErrorMostrar varchar(max) OUTPUT,
|
||||
@ErrorTipo int OUTPUT,
|
||||
@Return bit OUTPUT
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON;
|
||||
SELECT
|
||||
@ErrorMostrar = NULL,
|
||||
@ErrorTipo = 0,
|
||||
@Return = 0;
|
||||
|
||||
BEGIN TRY
|
||||
IF NOT EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM dbo.Clasificaciones
|
||||
WHERE CveClasificacion = @CveClasificacion
|
||||
)
|
||||
BEGIN
|
||||
SELECT
|
||||
@ErrorMostrar = 'La clasificación seleccionada no existe.',
|
||||
@ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
IF EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM dbo.ProductosServicios
|
||||
WHERE CveClasificacion = @CveClasificacion
|
||||
OR CveClasificacion2 = @CveClasificacion
|
||||
)
|
||||
OR EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM dbo.Conta_PrePolizasDetalle
|
||||
WHERE CveClasificacion = @CveClasificacion
|
||||
)
|
||||
BEGIN
|
||||
SELECT
|
||||
@ErrorMostrar = 'La clasificación tiene productos, servicios o pólizas relacionados y no puede eliminarse.',
|
||||
@ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
DELETE dbo.Clasificaciones
|
||||
WHERE CveClasificacion = @CveClasificacion;
|
||||
|
||||
SET @Return = 1;
|
||||
END TRY
|
||||
BEGIN CATCH
|
||||
IF ERROR_NUMBER() = 547
|
||||
BEGIN
|
||||
SELECT
|
||||
@ErrorMostrar = 'La clasificación tiene información relacionada y no puede eliminarse.',
|
||||
@ErrorTipo = 2,
|
||||
@Return = 0;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
SELECT
|
||||
@ErrorMostrar = 'Ocurrió un error al eliminar la clasificación; favor de contactar a Sistemas.',
|
||||
@ErrorTipo = 1,
|
||||
@Return = 0;
|
||||
|
||||
DECLARE @ErrorTecnico nvarchar(2048) = CONCAT(
|
||||
'Número: ', ERROR_NUMBER(),
|
||||
'; Procedimiento: ', COALESCE(ERROR_PROCEDURE(), 'PA_Gral_ClasificacionDelete'),
|
||||
'; Línea: ', ERROR_LINE(),
|
||||
'; Detalle: ', ERROR_MESSAGE());
|
||||
|
||||
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
|
||||
END CATCH;
|
||||
END;
|
||||
GO
|
||||
|
||||
CREATE OR ALTER PROCEDURE dbo.PA_Gral_UnidadMedidaList
|
||||
@Texto varchar(100) = NULL,
|
||||
@IncluirInactivos bit = 0,
|
||||
@CveUsuarioEjecuta int,
|
||||
@ErrorMostrar varchar(max) OUTPUT,
|
||||
@ErrorTipo int OUTPUT,
|
||||
@Return bit OUTPUT
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON;
|
||||
SELECT
|
||||
@ErrorMostrar = NULL,
|
||||
@ErrorTipo = 0,
|
||||
@Return = 0;
|
||||
|
||||
BEGIN TRY
|
||||
SET @Texto = NULLIF(LTRIM(RTRIM(@Texto)), '');
|
||||
|
||||
SELECT
|
||||
CveUnidadMedida,
|
||||
UnidadMedida,
|
||||
Abreviatura,
|
||||
Estado AS EsActivo
|
||||
FROM dbo.UnidadesMedida
|
||||
WHERE (@IncluirInactivos = 1 OR Estado = 1)
|
||||
AND
|
||||
(
|
||||
@Texto IS NULL
|
||||
OR UnidadMedida LIKE '%' + @Texto + '%'
|
||||
OR Abreviatura LIKE '%' + @Texto + '%'
|
||||
)
|
||||
ORDER BY UnidadMedida, CveUnidadMedida;
|
||||
|
||||
SET @Return = 1;
|
||||
END TRY
|
||||
BEGIN CATCH
|
||||
SELECT
|
||||
@ErrorMostrar = 'Ocurrió un error al consultar las unidades de medida; favor de contactar a Sistemas.',
|
||||
@ErrorTipo = 1,
|
||||
@Return = 0;
|
||||
|
||||
DECLARE @ErrorTecnico nvarchar(2048) = CONCAT(
|
||||
'Número: ', ERROR_NUMBER(),
|
||||
'; Procedimiento: ', COALESCE(ERROR_PROCEDURE(), 'PA_Gral_UnidadMedidaList'),
|
||||
'; Línea: ', ERROR_LINE(),
|
||||
'; Detalle: ', ERROR_MESSAGE());
|
||||
|
||||
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
|
||||
END CATCH;
|
||||
END;
|
||||
GO
|
||||
|
||||
CREATE OR ALTER PROCEDURE dbo.PA_Gral_UnidadMedidaGet
|
||||
@CveUnidadMedida int,
|
||||
@CveUsuarioEjecuta int,
|
||||
@ErrorMostrar varchar(max) OUTPUT,
|
||||
@ErrorTipo int OUTPUT,
|
||||
@Return bit OUTPUT
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON;
|
||||
SELECT
|
||||
@ErrorMostrar = NULL,
|
||||
@ErrorTipo = 0,
|
||||
@Return = 0;
|
||||
|
||||
BEGIN TRY
|
||||
SELECT
|
||||
CveUnidadMedida,
|
||||
UnidadMedida,
|
||||
Abreviatura,
|
||||
Estado AS EsActivo
|
||||
FROM dbo.UnidadesMedida
|
||||
WHERE CveUnidadMedida = @CveUnidadMedida;
|
||||
|
||||
SET @Return = 1;
|
||||
END TRY
|
||||
BEGIN CATCH
|
||||
SELECT
|
||||
@ErrorMostrar = 'Ocurrió un error al consultar la unidad de medida; favor de contactar a Sistemas.',
|
||||
@ErrorTipo = 1,
|
||||
@Return = 0;
|
||||
|
||||
DECLARE @ErrorTecnico nvarchar(2048) = CONCAT(
|
||||
'Número: ', ERROR_NUMBER(),
|
||||
'; Procedimiento: ', COALESCE(ERROR_PROCEDURE(), 'PA_Gral_UnidadMedidaGet'),
|
||||
'; Línea: ', ERROR_LINE(),
|
||||
'; Detalle: ', ERROR_MESSAGE());
|
||||
|
||||
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
|
||||
END CATCH;
|
||||
END;
|
||||
GO
|
||||
|
||||
CREATE OR ALTER PROCEDURE dbo.PA_Gral_UnidadMedidaSave
|
||||
@CveUnidadMedida int = NULL,
|
||||
@UnidadMedida varchar(50),
|
||||
@Abreviatura varchar(15),
|
||||
@EsActivo bit,
|
||||
@CveUsuarioEjecuta int,
|
||||
@ErrorMostrar varchar(max) OUTPUT,
|
||||
@ErrorTipo int OUTPUT,
|
||||
@Return bit OUTPUT
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON;
|
||||
SELECT
|
||||
@ErrorMostrar = NULL,
|
||||
@ErrorTipo = 0,
|
||||
@Return = 0;
|
||||
|
||||
BEGIN TRY
|
||||
SELECT
|
||||
@CveUnidadMedida = NULLIF(@CveUnidadMedida, 0),
|
||||
@UnidadMedida = LTRIM(RTRIM(@UnidadMedida)),
|
||||
@Abreviatura = LTRIM(RTRIM(@Abreviatura));
|
||||
|
||||
IF NULLIF(@UnidadMedida, '') IS NULL
|
||||
BEGIN
|
||||
SELECT
|
||||
@ErrorMostrar = 'Capture la unidad de medida.',
|
||||
@ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
IF NULLIF(@Abreviatura, '') IS NULL
|
||||
BEGIN
|
||||
SELECT
|
||||
@ErrorMostrar = 'Capture la abreviatura.',
|
||||
@ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
IF EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM dbo.UnidadesMedida
|
||||
WHERE UnidadMedida = @UnidadMedida
|
||||
AND CveUnidadMedida <> ISNULL(@CveUnidadMedida, 0)
|
||||
)
|
||||
BEGIN
|
||||
SELECT
|
||||
@ErrorMostrar = 'Ya existe una unidad de medida con ese nombre.',
|
||||
@ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
IF EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM dbo.UnidadesMedida
|
||||
WHERE Abreviatura = @Abreviatura
|
||||
AND CveUnidadMedida <> ISNULL(@CveUnidadMedida, 0)
|
||||
)
|
||||
BEGIN
|
||||
SELECT
|
||||
@ErrorMostrar = 'La abreviatura ya está asignada a otra unidad de medida.',
|
||||
@ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
IF @CveUnidadMedida IS NULL
|
||||
BEGIN
|
||||
INSERT dbo.UnidadesMedida
|
||||
(
|
||||
UnidadMedida,
|
||||
Abreviatura,
|
||||
Estado,
|
||||
Fecha,
|
||||
CveUsuario
|
||||
)
|
||||
VALUES
|
||||
(
|
||||
@UnidadMedida,
|
||||
@Abreviatura,
|
||||
@EsActivo,
|
||||
CONVERT(date, GETDATE()),
|
||||
@CveUsuarioEjecuta
|
||||
);
|
||||
|
||||
SET @CveUnidadMedida = CONVERT(int, SCOPE_IDENTITY());
|
||||
END
|
||||
ELSE
|
||||
BEGIN
|
||||
IF NOT EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM dbo.UnidadesMedida
|
||||
WHERE CveUnidadMedida = @CveUnidadMedida
|
||||
)
|
||||
BEGIN
|
||||
SELECT
|
||||
@ErrorMostrar = 'La unidad de medida seleccionada no existe.',
|
||||
@ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
UPDATE dbo.UnidadesMedida
|
||||
SET UnidadMedida = @UnidadMedida,
|
||||
Abreviatura = @Abreviatura,
|
||||
Estado = @EsActivo
|
||||
WHERE CveUnidadMedida = @CveUnidadMedida;
|
||||
END;
|
||||
|
||||
SELECT @CveUnidadMedida AS CveUnidadMedida;
|
||||
SET @Return = 1;
|
||||
END TRY
|
||||
BEGIN CATCH
|
||||
SELECT
|
||||
@ErrorMostrar = 'Ocurrió un error al guardar la unidad de medida; favor de contactar a Sistemas.',
|
||||
@ErrorTipo = 1,
|
||||
@Return = 0;
|
||||
|
||||
DECLARE @ErrorTecnico nvarchar(2048) = CONCAT(
|
||||
'Número: ', ERROR_NUMBER(),
|
||||
'; Procedimiento: ', COALESCE(ERROR_PROCEDURE(), 'PA_Gral_UnidadMedidaSave'),
|
||||
'; Línea: ', ERROR_LINE(),
|
||||
'; Detalle: ', ERROR_MESSAGE());
|
||||
|
||||
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
|
||||
END CATCH;
|
||||
END;
|
||||
GO
|
||||
|
||||
CREATE OR ALTER PROCEDURE dbo.PA_Gral_UnidadMedidaDelete
|
||||
@CveUnidadMedida int,
|
||||
@CveUsuarioEjecuta int,
|
||||
@ErrorMostrar varchar(max) OUTPUT,
|
||||
@ErrorTipo int OUTPUT,
|
||||
@Return bit OUTPUT
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON;
|
||||
SELECT
|
||||
@ErrorMostrar = NULL,
|
||||
@ErrorTipo = 0,
|
||||
@Return = 0;
|
||||
|
||||
BEGIN TRY
|
||||
IF NOT EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM dbo.UnidadesMedida
|
||||
WHERE CveUnidadMedida = @CveUnidadMedida
|
||||
)
|
||||
BEGIN
|
||||
SELECT
|
||||
@ErrorMostrar = 'La unidad de medida seleccionada no existe.',
|
||||
@ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
IF EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM dbo.ProductosServicios
|
||||
WHERE CveUnidadMedida = @CveUnidadMedida
|
||||
)
|
||||
OR EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM dbo.Tra_PagosDetalle
|
||||
WHERE CveUM = @CveUnidadMedida
|
||||
)
|
||||
BEGIN
|
||||
SELECT
|
||||
@ErrorMostrar = 'La unidad de medida tiene productos, servicios o pagos relacionados y no puede eliminarse.',
|
||||
@ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
DELETE dbo.UnidadesMedida
|
||||
WHERE CveUnidadMedida = @CveUnidadMedida;
|
||||
|
||||
SET @Return = 1;
|
||||
END TRY
|
||||
BEGIN CATCH
|
||||
IF ERROR_NUMBER() = 547
|
||||
BEGIN
|
||||
SELECT
|
||||
@ErrorMostrar = 'La unidad de medida tiene información relacionada y no puede eliminarse.',
|
||||
@ErrorTipo = 2,
|
||||
@Return = 0;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
SELECT
|
||||
@ErrorMostrar = 'Ocurrió un error al eliminar la unidad de medida; favor de contactar a Sistemas.',
|
||||
@ErrorTipo = 1,
|
||||
@Return = 0;
|
||||
|
||||
DECLARE @ErrorTecnico nvarchar(2048) = CONCAT(
|
||||
'Número: ', ERROR_NUMBER(),
|
||||
'; Procedimiento: ', COALESCE(ERROR_PROCEDURE(), 'PA_Gral_UnidadMedidaDelete'),
|
||||
'; Línea: ', ERROR_LINE(),
|
||||
'; Detalle: ', ERROR_MESSAGE());
|
||||
|
||||
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
|
||||
END CATCH;
|
||||
END;
|
||||
GO
|
||||
|
||||
DECLARE @Tablas TABLE
|
||||
(
|
||||
NombreTablaSQL varchar(128) COLLATE Modern_Spanish_CS_AS NOT NULL,
|
||||
NombreMostrar varchar(150) COLLATE Modern_Spanish_CS_AS NOT NULL,
|
||||
CampoLlave varchar(128) COLLATE Modern_Spanish_CS_AS NOT NULL
|
||||
);
|
||||
|
||||
INSERT INTO @Tablas
|
||||
(NombreTablaSQL, NombreMostrar, CampoLlave)
|
||||
VALUES
|
||||
('Clasificaciones', 'Clasificaciones', 'CveClasificacion'),
|
||||
('UnidadesMedida', 'Unidades de medida', 'CveUnidadMedida');
|
||||
|
||||
UPDATE BT
|
||||
SET NombreMostrar = S.NombreMostrar,
|
||||
NombreCampoLlaveSQL = S.CampoLlave,
|
||||
Activo = 1,
|
||||
FechaMod = GETDATE()
|
||||
FROM dbo.Bit_Tablas AS BT
|
||||
INNER JOIN @Tablas AS S
|
||||
ON S.NombreTablaSQL = BT.NombreTablaSQL;
|
||||
|
||||
INSERT dbo.Bit_Tablas
|
||||
(NombreTablaSQL, NombreMostrar, Descripcion, NombreCampoLlaveSQL, Activo)
|
||||
SELECT
|
||||
S.NombreTablaSQL,
|
||||
S.NombreMostrar,
|
||||
'Catálogo general de productos y servicios.',
|
||||
S.CampoLlave,
|
||||
1
|
||||
FROM @Tablas AS S
|
||||
WHERE NOT EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM dbo.Bit_Tablas AS BT
|
||||
WHERE BT.NombreTablaSQL = S.NombreTablaSQL
|
||||
);
|
||||
|
||||
INSERT dbo.Bit_Campos
|
||||
(CveTabla, NombreCampoSQL, NombreMostrar, MostrarEnBitacora, TipoDatoSQL, Activo)
|
||||
SELECT
|
||||
BT.CveTabla,
|
||||
C.name,
|
||||
C.name,
|
||||
CASE WHEN C.name = S.CampoLlave THEN 0 ELSE 1 END,
|
||||
TY.name,
|
||||
1
|
||||
FROM @Tablas AS S
|
||||
INNER JOIN sys.tables AS T
|
||||
ON T.name COLLATE Modern_Spanish_CS_AS = S.NombreTablaSQL
|
||||
INNER JOIN sys.schemas AS SC
|
||||
ON SC.schema_id = T.schema_id
|
||||
AND SC.name = 'dbo'
|
||||
INNER JOIN sys.columns AS C
|
||||
ON C.object_id = T.object_id
|
||||
INNER JOIN sys.types AS TY
|
||||
ON TY.user_type_id = C.user_type_id
|
||||
INNER JOIN dbo.Bit_Tablas AS BT
|
||||
ON BT.NombreTablaSQL = S.NombreTablaSQL
|
||||
WHERE NOT EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM dbo.Bit_Campos AS BC
|
||||
WHERE BC.CveTabla = BT.CveTabla
|
||||
AND BC.NombreCampoSQL = C.name COLLATE Modern_Spanish_CS_AS
|
||||
);
|
||||
GO
|
||||
414
Catalogos_Postales_Registro.sql
Normal file
414
Catalogos_Postales_Registro.sql
Normal file
@@ -0,0 +1,414 @@
|
||||
SET ANSI_NULLS ON;
|
||||
GO
|
||||
SET QUOTED_IDENTIFIER ON;
|
||||
GO
|
||||
SET XACT_ABORT ON;
|
||||
GO
|
||||
|
||||
/*
|
||||
Catálogos postales para el registro público.
|
||||
|
||||
Este script NO elimina, vacía ni recrea las tablas pobladas.
|
||||
Solamente agrega columnas/índices faltantes y crea o actualiza
|
||||
el procedimiento almacenado de consulta.
|
||||
*/
|
||||
|
||||
IF OBJECT_ID(N'dbo.Gral_SAT_CP', N'U') IS NULL
|
||||
THROW 51020, N'Falta la tabla poblada dbo.Gral_SAT_CP.', 1;
|
||||
IF OBJECT_ID(N'dbo.Gral_SAT_Municipio', N'U') IS NULL
|
||||
THROW 51021, N'Falta la tabla poblada dbo.Gral_SAT_Municipio.', 1;
|
||||
IF OBJECT_ID(N'dbo.Gral_SAT_Localidad', N'U') IS NULL
|
||||
THROW 51022, N'Falta la tabla poblada dbo.Gral_SAT_Localidad.', 1;
|
||||
IF OBJECT_ID(N'dbo.Gral_SAT_Colonia', N'U') IS NULL
|
||||
THROW 51023, N'Falta la tabla poblada dbo.Gral_SAT_Colonia.', 1;
|
||||
IF OBJECT_ID(N'dbo.Gral_SAT_Estado', N'U') IS NULL
|
||||
THROW 51024, N'Falta la tabla poblada dbo.Gral_SAT_Estado.', 1;
|
||||
IF OBJECT_ID(N'dbo.Gral_SAT_Pais', N'U') IS NULL
|
||||
THROW 51025, N'Falta la tabla poblada dbo.Gral_SAT_Pais.', 1;
|
||||
GO
|
||||
|
||||
/* Borrado lógico incremental para los catálogos utilizados. */
|
||||
DECLARE @Tablas TABLE ([Tabla] sysname NOT NULL PRIMARY KEY);
|
||||
INSERT INTO @Tablas ([Tabla])
|
||||
VALUES
|
||||
(N'Gral_SAT_CP'),
|
||||
(N'Gral_SAT_Municipio'),
|
||||
(N'Gral_SAT_Localidad'),
|
||||
(N'Gral_SAT_Colonia'),
|
||||
(N'Gral_SAT_Estado'),
|
||||
(N'Gral_SAT_Pais');
|
||||
|
||||
DECLARE @Tabla sysname;
|
||||
DECLARE @Sql nvarchar(max);
|
||||
DECLARE Catalogos CURSOR LOCAL FAST_FORWARD FOR SELECT [Tabla] FROM @Tablas ORDER BY [Tabla];
|
||||
|
||||
OPEN Catalogos;
|
||||
FETCH NEXT FROM Catalogos INTO @Tabla;
|
||||
|
||||
WHILE @@FETCH_STATUS = 0
|
||||
BEGIN
|
||||
IF COL_LENGTH(N'dbo.' + @Tabla, N'Borrado') IS NULL
|
||||
BEGIN
|
||||
SET @Sql = N'ALTER TABLE [dbo].' + QUOTENAME(@Tabla)
|
||||
+ N' ADD [Borrado] bit NOT NULL CONSTRAINT '
|
||||
+ QUOTENAME(N'DF_' + @Tabla + N'_Borrado')
|
||||
+ N' DEFAULT ((0)) WITH VALUES;';
|
||||
EXEC sys.sp_executesql @Sql;
|
||||
END;
|
||||
|
||||
IF COL_LENGTH(N'dbo.' + @Tabla, N'FechaBorrado') IS NULL
|
||||
BEGIN
|
||||
SET @Sql = N'ALTER TABLE [dbo].' + QUOTENAME(@Tabla)
|
||||
+ N' ADD [FechaBorrado] datetime2(0) NULL;';
|
||||
EXEC sys.sp_executesql @Sql;
|
||||
END;
|
||||
|
||||
IF NOT EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM sys.check_constraints
|
||||
WHERE [parent_object_id] = OBJECT_ID(N'dbo.' + @Tabla)
|
||||
AND [name] = N'CK_' + @Tabla + N'_BorradoLogico'
|
||||
)
|
||||
BEGIN
|
||||
SET @Sql = N'ALTER TABLE [dbo].' + QUOTENAME(@Tabla)
|
||||
+ N' ADD CONSTRAINT ' + QUOTENAME(N'CK_' + @Tabla + N'_BorradoLogico')
|
||||
+ N' CHECK (([Borrado] = (0) AND [FechaBorrado] IS NULL)'
|
||||
+ N' OR ([Borrado] = (1) AND [FechaBorrado] IS NOT NULL));';
|
||||
EXEC sys.sp_executesql @Sql;
|
||||
END;
|
||||
|
||||
FETCH NEXT FROM Catalogos INTO @Tabla;
|
||||
END;
|
||||
|
||||
CLOSE Catalogos;
|
||||
DEALLOCATE Catalogos;
|
||||
GO
|
||||
|
||||
IF NOT EXISTS
|
||||
(
|
||||
SELECT 1 FROM sys.indexes
|
||||
WHERE [object_id] = OBJECT_ID(N'dbo.Gral_SAT_CP')
|
||||
AND [name] = N'IX_Gral_SAT_CP_BusquedaRegistro'
|
||||
)
|
||||
CREATE NONCLUSTERED INDEX [IX_Gral_SAT_CP_BusquedaRegistro]
|
||||
ON [dbo].[Gral_SAT_CP] ([CP])
|
||||
INCLUDE ([CveCP], [ClaveSATEstado], [ClaveSATMunicipio], [ClaveSATLocalidad])
|
||||
WHERE [Borrado] = (0);
|
||||
GO
|
||||
|
||||
IF NOT EXISTS
|
||||
(
|
||||
SELECT 1 FROM sys.indexes
|
||||
WHERE [object_id] = OBJECT_ID(N'dbo.Gral_SAT_Colonia')
|
||||
AND [name] = N'IX_Gral_SAT_Colonia_CP_Vigente'
|
||||
)
|
||||
CREATE NONCLUSTERED INDEX [IX_Gral_SAT_Colonia_CP_Vigente]
|
||||
ON [dbo].[Gral_SAT_Colonia] ([CP])
|
||||
INCLUDE ([CveColonia], [ClaveSATColonia], [NombreAsentamiento])
|
||||
WHERE [Borrado] = (0);
|
||||
GO
|
||||
|
||||
IF NOT EXISTS
|
||||
(
|
||||
SELECT 1 FROM sys.indexes
|
||||
WHERE [object_id] = OBJECT_ID(N'dbo.Gral_SAT_Municipio')
|
||||
AND [name] = N'IX_Gral_SAT_Municipio_Claves_Vigente'
|
||||
)
|
||||
CREATE NONCLUSTERED INDEX [IX_Gral_SAT_Municipio_Claves_Vigente]
|
||||
ON [dbo].[Gral_SAT_Municipio] ([ClaveSATEstado], [ClaveSATMunicipio])
|
||||
INCLUDE ([CveMunicipio], [Descripcion])
|
||||
WHERE [Borrado] = (0);
|
||||
GO
|
||||
|
||||
IF NOT EXISTS
|
||||
(
|
||||
SELECT 1 FROM sys.indexes
|
||||
WHERE [object_id] = OBJECT_ID(N'dbo.Gral_SAT_Localidad')
|
||||
AND [name] = N'IX_Gral_SAT_Localidad_Claves_Vigente'
|
||||
)
|
||||
CREATE NONCLUSTERED INDEX [IX_Gral_SAT_Localidad_Claves_Vigente]
|
||||
ON [dbo].[Gral_SAT_Localidad] ([ClaveSATEstado], [ClaveSATLocalidad])
|
||||
INCLUDE ([CveLocalidad], [NombreLocalidad])
|
||||
WHERE [Borrado] = (0);
|
||||
GO
|
||||
|
||||
/* Claves normalizadas utilizadas por el registro. */
|
||||
IF OBJECT_ID(N'dbo.Clientes', N'U') IS NULL
|
||||
THROW 51026, N'Falta la tabla dbo.Clientes.', 1;
|
||||
|
||||
IF COL_LENGTH(N'dbo.Clientes', N'CveLocalidad') IS NULL
|
||||
ALTER TABLE [dbo].[Clientes] ADD [CveLocalidad] int NULL;
|
||||
GO
|
||||
|
||||
IF OBJECT_ID(N'dbo.FK_Clientes_Gral_SAT_Pais', N'F') IS NULL
|
||||
AND NOT EXISTS (SELECT 1 FROM [dbo].[Clientes] C LEFT JOIN [dbo].[Gral_SAT_Pais] P ON P.[CvePais]=C.[CvePais] WHERE C.[CvePais] IS NOT NULL AND P.[CvePais] IS NULL)
|
||||
ALTER TABLE [dbo].[Clientes] WITH CHECK ADD CONSTRAINT [FK_Clientes_Gral_SAT_Pais] FOREIGN KEY ([CvePais]) REFERENCES [dbo].[Gral_SAT_Pais] ([CvePais]);
|
||||
GO
|
||||
|
||||
IF OBJECT_ID(N'dbo.FK_Clientes_Gral_SAT_Estado_Normalizado', N'F') IS NULL
|
||||
AND NOT EXISTS (SELECT 1 FROM [dbo].[Clientes] C LEFT JOIN [dbo].[Gral_SAT_Estado] E ON E.[CveEstado]=C.[CveEstado] WHERE C.[CveEstado] IS NOT NULL AND E.[CveEstado] IS NULL)
|
||||
ALTER TABLE [dbo].[Clientes] WITH CHECK ADD CONSTRAINT [FK_Clientes_Gral_SAT_Estado_Normalizado] FOREIGN KEY ([CveEstado]) REFERENCES [dbo].[Gral_SAT_Estado] ([CveEstado]);
|
||||
GO
|
||||
|
||||
IF OBJECT_ID(N'dbo.FK_Clientes_Gral_SAT_Municipio', N'F') IS NULL
|
||||
AND NOT EXISTS (SELECT 1 FROM [dbo].[Clientes] C LEFT JOIN [dbo].[Gral_SAT_Municipio] M ON M.[CveMunicipio]=C.[CveMunicipio] WHERE C.[CveMunicipio] IS NOT NULL AND M.[CveMunicipio] IS NULL)
|
||||
ALTER TABLE [dbo].[Clientes] WITH CHECK ADD CONSTRAINT [FK_Clientes_Gral_SAT_Municipio] FOREIGN KEY ([CveMunicipio]) REFERENCES [dbo].[Gral_SAT_Municipio] ([CveMunicipio]);
|
||||
GO
|
||||
|
||||
IF OBJECT_ID(N'dbo.FK_Clientes_Gral_SAT_Localidad', N'F') IS NULL
|
||||
ALTER TABLE [dbo].[Clientes] WITH CHECK ADD CONSTRAINT [FK_Clientes_Gral_SAT_Localidad] FOREIGN KEY ([CveLocalidad]) REFERENCES [dbo].[Gral_SAT_Localidad] ([CveLocalidad]);
|
||||
GO
|
||||
|
||||
IF OBJECT_ID(N'dbo.FK_Clientes_Gral_SAT_Colonia', N'F') IS NULL
|
||||
AND NOT EXISTS (SELECT 1 FROM [dbo].[Clientes] C LEFT JOIN [dbo].[Gral_SAT_Colonia] CO ON CO.[CveColonia]=C.[CveColonia] WHERE C.[CveColonia] IS NOT NULL AND CO.[CveColonia] IS NULL)
|
||||
ALTER TABLE [dbo].[Clientes] WITH CHECK ADD CONSTRAINT [FK_Clientes_Gral_SAT_Colonia] FOREIGN KEY ([CveColonia]) REFERENCES [dbo].[Gral_SAT_Colonia] ([CveColonia]);
|
||||
GO
|
||||
|
||||
CREATE OR ALTER PROCEDURE [dbo].[PA_Gral_CodigoPostalGet]
|
||||
@CP varchar(5),
|
||||
@CveUsuarioEjecuta int,
|
||||
@ErrorMostrar varchar(max) OUTPUT,
|
||||
@ErrorTipo int OUTPUT,
|
||||
@Return bit OUTPUT
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON;
|
||||
SELECT @ErrorMostrar = NULL, @ErrorTipo = 0, @Return = 0;
|
||||
SET @CP = LTRIM(RTRIM(@CP));
|
||||
|
||||
BEGIN TRY
|
||||
IF LEN(@CP) <> 5 OR @CP LIKE '%[^0-9]%'
|
||||
BEGIN
|
||||
SET @ErrorMostrar = 'El código postal debe contener exactamente 5 dígitos.';
|
||||
SET @ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
DECLARE
|
||||
@CvePais int,
|
||||
@Pais varchar(100),
|
||||
@CveEstado int,
|
||||
@Estado varchar(50),
|
||||
@CveMunicipio int,
|
||||
@Municipio varchar(100),
|
||||
@CveLocalidad int,
|
||||
@Localidad varchar(100);
|
||||
|
||||
SELECT TOP (1)
|
||||
@CvePais = P.[CvePais],
|
||||
@Pais = P.[Descripcion],
|
||||
@CveEstado = E.[CveEstado],
|
||||
@Estado = E.[NombreEstado],
|
||||
@CveMunicipio = M.[CveMunicipio],
|
||||
@Municipio = M.[Descripcion],
|
||||
@CveLocalidad = L.[CveLocalidad],
|
||||
@Localidad = L.[NombreLocalidad]
|
||||
FROM [dbo].[Gral_SAT_CP] AS CP
|
||||
INNER JOIN [dbo].[Gral_SAT_Estado] AS E
|
||||
ON E.[ClaveSATEstado] = CP.[ClaveSATEstado]
|
||||
AND E.[Borrado] = (0)
|
||||
INNER JOIN [dbo].[Gral_SAT_Pais] AS P
|
||||
ON P.[ClaveSATPais] = E.[ClaveSATPais]
|
||||
AND P.[Borrado] = (0)
|
||||
INNER JOIN [dbo].[Gral_SAT_Municipio] AS M
|
||||
ON M.[ClaveSATEstado] = CP.[ClaveSATEstado]
|
||||
AND M.[ClaveSATMunicipio] = CP.[ClaveSATMunicipio]
|
||||
AND M.[Borrado] = (0)
|
||||
LEFT JOIN [dbo].[Gral_SAT_Localidad] AS L
|
||||
ON L.[ClaveSATEstado] = CP.[ClaveSATEstado]
|
||||
AND L.[ClaveSATLocalidad] = CP.[ClaveSATLocalidad]
|
||||
AND L.[Borrado] = (0)
|
||||
WHERE CP.[CP] = @CP
|
||||
AND CP.[Borrado] = (0);
|
||||
|
||||
IF @CvePais IS NULL OR @CveEstado IS NULL OR @CveMunicipio IS NULL
|
||||
BEGIN
|
||||
SET @ErrorMostrar = CONCAT(
|
||||
'El código postal ', @CP,
|
||||
' no existe o sus relaciones de país, estado y municipio están incompletas.');
|
||||
SET @ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
SELECT
|
||||
@CvePais AS [CvePais],
|
||||
@Pais AS [Pais],
|
||||
@CveEstado AS [CveEstado],
|
||||
@Estado AS [Estado],
|
||||
@CveMunicipio AS [CveMunicipio],
|
||||
@Municipio AS [Municipio],
|
||||
@CveLocalidad AS [CveLocalidad],
|
||||
@Localidad AS [Localidad],
|
||||
COALESCE(NULLIF(@Localidad, ''), @Municipio) AS [Ciudad];
|
||||
|
||||
SELECT
|
||||
C.[CveColonia],
|
||||
C.[NombreAsentamiento]
|
||||
FROM [dbo].[Gral_SAT_Colonia] AS C
|
||||
WHERE C.[CP] = @CP
|
||||
AND C.[Borrado] = (0)
|
||||
ORDER BY C.[NombreAsentamiento];
|
||||
|
||||
SET @Return = 1;
|
||||
END TRY
|
||||
BEGIN CATCH
|
||||
SET @ErrorMostrar = 'Ocurrió un error al consultar el código postal; favor de contactar a Sistemas.';
|
||||
SET @ErrorTipo = 1;
|
||||
SET @Return = 0;
|
||||
DECLARE @E nvarchar(2048) = CONCAT(
|
||||
'Número: ', ERROR_NUMBER(),
|
||||
'; Procedimiento: ', ERROR_PROCEDURE(),
|
||||
'; Línea: ', ERROR_LINE(),
|
||||
'; Detalle: ', ERROR_MESSAGE());
|
||||
RAISERROR(N'%s', 10, 1, @E);
|
||||
END CATCH;
|
||||
END;
|
||||
GO
|
||||
|
||||
CREATE OR ALTER PROCEDURE [dbo].[PA_Sis_RegistroClienteAdd]
|
||||
@NombreUsuario varchar(100),
|
||||
@HashContrasena varchar(500),
|
||||
@CorreoElectronico varchar(255),
|
||||
@RFC varchar(15),
|
||||
@RazonSocial varchar(200),
|
||||
@NombreComercial varchar(200) = NULL,
|
||||
@Direccion varchar(90),
|
||||
@NoExt varchar(20) = NULL,
|
||||
@NoInt varchar(50) = NULL,
|
||||
@Colonia varchar(100),
|
||||
@Ciudad varchar(100),
|
||||
@CveSATEstado int,
|
||||
@Pais varchar(100) = 'México',
|
||||
@CP varchar(5),
|
||||
@Telefono varchar(25) = NULL,
|
||||
@CvePais int,
|
||||
@CveMunicipio int,
|
||||
@CveLocalidad int = NULL,
|
||||
@CveColonia int,
|
||||
@HashToken char(64),
|
||||
@HorasExpiracion int = 24,
|
||||
@CveUsuarioEjecuta int,
|
||||
@ErrorMostrar varchar(max) OUTPUT,
|
||||
@ErrorTipo int OUTPUT,
|
||||
@Return bit OUTPUT
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON;
|
||||
SELECT @ErrorMostrar = NULL, @ErrorTipo = 0, @Return = 0;
|
||||
|
||||
BEGIN TRY
|
||||
DECLARE @CveRolEmpresa int, @CveUsuario int, @CveCliente int;
|
||||
DECLARE @NombreEstado varchar(50), @PaisCatalogo varchar(100);
|
||||
DECLARE @CiudadCatalogo varchar(100), @ColoniaCatalogo varchar(100);
|
||||
|
||||
SET @NombreUsuario = LTRIM(RTRIM(@NombreUsuario));
|
||||
SET @CorreoElectronico = LOWER(LTRIM(RTRIM(@CorreoElectronico)));
|
||||
SET @RFC = UPPER(REPLACE(LTRIM(RTRIM(@RFC)), ' ', ''));
|
||||
SET @CP = LTRIM(RTRIM(@CP));
|
||||
|
||||
SELECT @CveRolEmpresa = [CveRol]
|
||||
FROM [dbo].[Sis_Roles]
|
||||
WHERE [NombreRol] = 'Empresa' AND [Activo] = (1) AND [Borrado] = (0);
|
||||
|
||||
SELECT TOP (1)
|
||||
@NombreEstado = LEFT(E.[NombreEstado], 35),
|
||||
@PaisCatalogo = LEFT(P.[Descripcion], 50),
|
||||
@CiudadCatalogo = LEFT(COALESCE(NULLIF(L.[NombreLocalidad], ''), M.[Descripcion]), 50),
|
||||
@ColoniaCatalogo = LEFT(C.[NombreAsentamiento], 50)
|
||||
FROM [dbo].[Gral_SAT_CP] AS CP
|
||||
INNER JOIN [dbo].[Gral_SAT_Estado] AS E
|
||||
ON E.[ClaveSATEstado] = CP.[ClaveSATEstado]
|
||||
AND E.[CveEstado] = @CveSATEstado AND E.[Borrado] = (0)
|
||||
INNER JOIN [dbo].[Gral_SAT_Pais] AS P
|
||||
ON P.[ClaveSATPais] = E.[ClaveSATPais]
|
||||
AND P.[CvePais] = @CvePais AND P.[Borrado] = (0)
|
||||
INNER JOIN [dbo].[Gral_SAT_Municipio] AS M
|
||||
ON M.[ClaveSATEstado] = CP.[ClaveSATEstado]
|
||||
AND M.[ClaveSATMunicipio] = CP.[ClaveSATMunicipio]
|
||||
AND M.[CveMunicipio] = @CveMunicipio AND M.[Borrado] = (0)
|
||||
LEFT JOIN [dbo].[Gral_SAT_Localidad] AS L
|
||||
ON L.[ClaveSATEstado] = CP.[ClaveSATEstado]
|
||||
AND L.[ClaveSATLocalidad] = CP.[ClaveSATLocalidad] AND L.[Borrado] = (0)
|
||||
INNER JOIN [dbo].[Gral_SAT_Colonia] AS C
|
||||
ON C.[CP] = CP.[CP] AND C.[CveColonia] = @CveColonia AND C.[Borrado] = (0)
|
||||
WHERE CP.[CP] = @CP AND CP.[Borrado] = (0)
|
||||
AND (@CveLocalidad IS NULL OR L.[CveLocalidad] = @CveLocalidad);
|
||||
|
||||
IF @CveRolEmpresa IS NULL
|
||||
BEGIN
|
||||
SELECT @ErrorMostrar = 'No fue posible determinar el rol Empresa.', @ErrorTipo = 1;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
IF @NombreEstado IS NULL OR @PaisCatalogo IS NULL OR @CiudadCatalogo IS NULL OR @ColoniaCatalogo IS NULL
|
||||
BEGIN
|
||||
SELECT @ErrorMostrar = 'Los datos del código postal no coinciden con los catálogos vigentes. Actualiza el código postal.', @ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
SELECT @Pais = @PaisCatalogo, @Ciudad = @CiudadCatalogo, @Colonia = @ColoniaCatalogo;
|
||||
|
||||
IF EXISTS (SELECT 1 FROM [dbo].[Sis_Usuarios] WHERE [NombreUsuario] = @NombreUsuario)
|
||||
OR EXISTS (SELECT 1 FROM [dbo].[Sis_Usuarios] WHERE LOWER([CorreoElectronico]) = @CorreoElectronico)
|
||||
OR EXISTS (SELECT 1 FROM [dbo].[Clientes] WHERE UPPER(REPLACE(LTRIM(RTRIM([RFC])), ' ', '')) = @RFC)
|
||||
BEGIN
|
||||
SELECT @ErrorMostrar = 'Los datos ya fueron registrados por otra solicitud. Actualiza la página e inténtalo nuevamente.', @ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
|
||||
INSERT INTO [dbo].[Sis_Usuarios]
|
||||
([NombreUsuario], [HashContrasena], [CorreoElectronico], [CveRol], [Activo], [DebeCambiarContrasena], [CorreoVerificado])
|
||||
VALUES (@NombreUsuario, @HashContrasena, @CorreoElectronico, @CveRolEmpresa, (0), (0), (0));
|
||||
|
||||
SET @CveUsuario = CONVERT(int, SCOPE_IDENTITY());
|
||||
|
||||
INSERT INTO [dbo].[Clientes]
|
||||
([Nombre], [NombreComercial], [Direccion], [NoExt], [NoInt], [Colonia],
|
||||
[Ciudad], [Estado], [CveSATEstado], [Pais], [RFC], [CP], [Telefono],
|
||||
[Mail], [Estatus], [Fecha], [CveUsuario], [FechaIng],
|
||||
[CvePais], [CveEstado], [CveMunicipio], [CveLocalidad], [CveColonia])
|
||||
VALUES
|
||||
(@RazonSocial, NULLIF(@NombreComercial, ''), @Direccion, NULLIF(@NoExt, ''),
|
||||
NULLIF(@NoInt, ''), @Colonia, @Ciudad, @NombreEstado, @CveSATEstado,
|
||||
@Pais, @RFC, @CP, NULLIF(@Telefono, ''), @CorreoElectronico, (0),
|
||||
CONVERT(date, GETDATE()), @CveUsuario, GETDATE(),
|
||||
@CvePais, @CveSATEstado, @CveMunicipio, @CveLocalidad, @CveColonia);
|
||||
|
||||
SET @CveCliente = CONVERT(int, SCOPE_IDENTITY());
|
||||
|
||||
INSERT INTO [dbo].[Sis_UsuariosClientes]
|
||||
([CveUsuario], [CveCliente], [Orden], [EsPrincipal], [Activo], [CveUsuarioRegistro])
|
||||
VALUES (@CveUsuario, @CveCliente, (1), (1), (1), @CveUsuario);
|
||||
|
||||
INSERT INTO [dbo].[Sis_UsuariosVerificacionesCorreo]
|
||||
([CveUsuario], [CveClienteRegistro], [HashToken], [FechaExpiracion])
|
||||
VALUES (@CveUsuario, @CveCliente, @HashToken, DATEADD(HOUR, @HorasExpiracion, SYSDATETIME()));
|
||||
|
||||
|
||||
SELECT @CveUsuario AS [CveUsuario], @CveCliente AS [CveCliente];
|
||||
SET @Return = 1;
|
||||
END TRY
|
||||
BEGIN CATCH
|
||||
SELECT @ErrorMostrar = 'Ocurrió un error al crear el registro; favor de contactar a Sistemas.', @ErrorTipo = 1, @Return = 0;
|
||||
DECLARE @E nvarchar(2048) = CONCAT('Número: ', ERROR_NUMBER(), '; Procedimiento: ', ERROR_PROCEDURE(), '; Línea: ', ERROR_LINE(), '; Detalle: ', ERROR_MESSAGE());
|
||||
RAISERROR(N'%s', 10, 1, @E);
|
||||
END CATCH;
|
||||
END;
|
||||
GO
|
||||
|
||||
/*
|
||||
Se registran para limpieza, pero la limpieza física queda deshabilitada.
|
||||
Habilitarla posteriormente requiere autorización expresa.
|
||||
*/
|
||||
IF OBJECT_ID(N'dbo.Sis_ConfigurarLimpieza', N'P') IS NOT NULL
|
||||
BEGIN
|
||||
EXEC [dbo].[Sis_ConfigurarLimpieza] @Esquema=N'dbo', @Tabla=N'Gral_SAT_CP', @DiasRetencion=365, @TamanoLote=500, @Habilitada=0;
|
||||
EXEC [dbo].[Sis_ConfigurarLimpieza] @Esquema=N'dbo', @Tabla=N'Gral_SAT_Municipio', @DiasRetencion=365, @TamanoLote=500, @Habilitada=0;
|
||||
EXEC [dbo].[Sis_ConfigurarLimpieza] @Esquema=N'dbo', @Tabla=N'Gral_SAT_Localidad', @DiasRetencion=365, @TamanoLote=500, @Habilitada=0;
|
||||
EXEC [dbo].[Sis_ConfigurarLimpieza] @Esquema=N'dbo', @Tabla=N'Gral_SAT_Colonia', @DiasRetencion=365, @TamanoLote=500, @Habilitada=0;
|
||||
EXEC [dbo].[Sis_ConfigurarLimpieza] @Esquema=N'dbo', @Tabla=N'Gral_SAT_Estado', @DiasRetencion=365, @TamanoLote=500, @Habilitada=0;
|
||||
EXEC [dbo].[Sis_ConfigurarLimpieza] @Esquema=N'dbo', @Tabla=N'Gral_SAT_Pais', @DiasRetencion=365, @TamanoLote=500, @Habilitada=0;
|
||||
END;
|
||||
GO
|
||||
1260
Catalogos_Tramites_Internos.sql
Normal file
1260
Catalogos_Tramites_Internos.sql
Normal file
File diff suppressed because it is too large
Load Diff
657
Clientes_Desarrolladores.sql
Normal file
657
Clientes_Desarrolladores.sql
Normal file
@@ -0,0 +1,657 @@
|
||||
-- Catálogo y detalle de desarrolladores.
|
||||
-- Preparar este archivo no autoriza su ejecución. Requiere instalación explícita.
|
||||
-- Reutiliza Clientes, Sis_Usuarios, Sis_UsuariosClientes y la bitácora vigente.
|
||||
-- La transacción de altas y cambios pertenece a ServicioDesarrolladores.
|
||||
SET NOCOUNT ON;
|
||||
GO
|
||||
|
||||
IF COL_LENGTH('dbo.Clientes', 'Duplicador') IS NULL
|
||||
BEGIN
|
||||
ALTER TABLE dbo.Clientes ADD Duplicador varchar(50) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
END;
|
||||
GO
|
||||
|
||||
IF COL_LENGTH('dbo.Clientes', 'Referencia') IS NULL
|
||||
BEGIN
|
||||
ALTER TABLE dbo.Clientes ADD Referencia varchar(200) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
END;
|
||||
GO
|
||||
|
||||
IF COL_LENGTH('dbo.Clientes', 'AsociadoCanadevi') IS NULL
|
||||
BEGIN
|
||||
ALTER TABLE dbo.Clientes ADD AsociadoCanadevi bit NOT NULL CONSTRAINT DF_Clientes_AsociadoCanadevi DEFAULT (0);
|
||||
END;
|
||||
GO
|
||||
|
||||
IF COL_LENGTH('dbo.Clientes', 'Adherente') IS NULL
|
||||
BEGIN
|
||||
ALTER TABLE dbo.Clientes ADD Adherente varchar(200) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
END;
|
||||
GO
|
||||
|
||||
CREATE OR ALTER PROCEDURE dbo.PA_Clientes_DesarrolladorList
|
||||
@Texto varchar(200) = NULL,
|
||||
@IncluirInactivos bit = 0,
|
||||
@CveUsuarioEjecuta int,
|
||||
@ErrorMostrar varchar(max) OUTPUT,
|
||||
@ErrorTipo int OUTPUT,
|
||||
@Return bit OUTPUT
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON;
|
||||
SELECT
|
||||
@ErrorMostrar = NULL,
|
||||
@ErrorTipo = 0,
|
||||
@Return = 0;
|
||||
|
||||
BEGIN TRY
|
||||
SELECT
|
||||
C.CveCliente,
|
||||
C.RFC,
|
||||
C.Nombre,
|
||||
C.Direccion,
|
||||
C.NoExt,
|
||||
C.Duplicador,
|
||||
C.Referencia,
|
||||
C.Telefono,
|
||||
C.Mail,
|
||||
C.Adherente,
|
||||
C.Colonia,
|
||||
C.CP,
|
||||
C.Ciudad,
|
||||
C.Estado,
|
||||
C.Pais,
|
||||
C.CvePais,
|
||||
C.CveSATEstado,
|
||||
C.CveMunicipio,
|
||||
C.CveLocalidad,
|
||||
C.CveColonia,
|
||||
C.AsociadoCanadevi,
|
||||
C.Estatus
|
||||
FROM dbo.Clientes AS C
|
||||
WHERE (@IncluirInactivos = 1 OR C.Estatus = 1)
|
||||
AND
|
||||
(
|
||||
NULLIF(@Texto, '') IS NULL
|
||||
OR C.Nombre LIKE '%' + @Texto + '%'
|
||||
OR C.RFC LIKE '%' + @Texto + '%'
|
||||
OR C.Mail LIKE '%' + @Texto + '%'
|
||||
)
|
||||
ORDER BY C.Nombre, C.CveCliente;
|
||||
SET @Return = 1;
|
||||
END TRY
|
||||
BEGIN CATCH
|
||||
SET @ErrorMostrar = 'Ocurrió un error al procesar el desarrollador; favor de contactar a Sistemas.';
|
||||
SET @ErrorTipo = 1;
|
||||
SET @Return = 0;
|
||||
DECLARE @ErrorTecnico nvarchar(2048) = CONCAT(
|
||||
'Número: ', ERROR_NUMBER(),
|
||||
'; Procedimiento: ', COALESCE(ERROR_PROCEDURE(), 'PA_Clientes_DesarrolladorList'),
|
||||
'; Línea: ', ERROR_LINE(),
|
||||
'; Detalle: ', ERROR_MESSAGE()
|
||||
);
|
||||
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
|
||||
END CATCH;
|
||||
END;
|
||||
GO
|
||||
|
||||
CREATE OR ALTER PROCEDURE dbo.PA_Clientes_DesarrolladorGet
|
||||
@CveCliente int,
|
||||
@CveUsuarioEjecuta int,
|
||||
@ErrorMostrar varchar(max) OUTPUT,
|
||||
@ErrorTipo int OUTPUT,
|
||||
@Return bit OUTPUT
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON;
|
||||
SELECT
|
||||
@ErrorMostrar = NULL,
|
||||
@ErrorTipo = 0,
|
||||
@Return = 0;
|
||||
|
||||
BEGIN TRY
|
||||
SELECT
|
||||
C.CveCliente,
|
||||
C.RFC,
|
||||
C.Nombre,
|
||||
C.Direccion,
|
||||
C.NoExt,
|
||||
C.Duplicador,
|
||||
C.Referencia,
|
||||
C.Telefono,
|
||||
C.Mail,
|
||||
C.Adherente,
|
||||
C.Colonia,
|
||||
C.CP,
|
||||
C.Ciudad,
|
||||
C.Estado,
|
||||
C.Pais,
|
||||
C.CvePais,
|
||||
C.CveSATEstado,
|
||||
C.CveMunicipio,
|
||||
C.CveLocalidad,
|
||||
C.CveColonia,
|
||||
C.AsociadoCanadevi,
|
||||
C.Estatus
|
||||
FROM dbo.Clientes AS C
|
||||
WHERE C.CveCliente = @CveCliente;
|
||||
SET @Return = 1;
|
||||
END TRY
|
||||
BEGIN CATCH
|
||||
SET @ErrorMostrar = 'Ocurrió un error al procesar el desarrollador; favor de contactar a Sistemas.';
|
||||
SET @ErrorTipo = 1;
|
||||
SET @Return = 0;
|
||||
DECLARE @ErrorTecnico nvarchar(2048) = CONCAT(
|
||||
'Número: ', ERROR_NUMBER(),
|
||||
'; Procedimiento: ', COALESCE(ERROR_PROCEDURE(), 'PA_Clientes_DesarrolladorGet'),
|
||||
'; Línea: ', ERROR_LINE(),
|
||||
'; Detalle: ', ERROR_MESSAGE()
|
||||
);
|
||||
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
|
||||
END CATCH;
|
||||
END;
|
||||
GO
|
||||
|
||||
CREATE OR ALTER PROCEDURE dbo.PA_Clientes_DesarrolladorAdd
|
||||
@RFC varchar(15),
|
||||
@Nombre varchar(200),
|
||||
@Direccion varchar(90),
|
||||
@NoExt varchar(20),
|
||||
@Duplicador varchar(50),
|
||||
@Referencia varchar(200),
|
||||
@Telefono varchar(25),
|
||||
@Mail varchar(255),
|
||||
@Adherente varchar(200),
|
||||
@Colonia varchar(50),
|
||||
@CP varchar(10),
|
||||
@Ciudad varchar(50),
|
||||
@Estado varchar(35),
|
||||
@Pais varchar(50),
|
||||
@CvePais int,
|
||||
@CveSATEstado int,
|
||||
@CveMunicipio int,
|
||||
@CveLocalidad int,
|
||||
@CveColonia int,
|
||||
@AsociadoCanadevi bit,
|
||||
@GenerarUsuario bit = 0,
|
||||
@NombreUsuario varchar(100) = NULL,
|
||||
@CorreoUsuario varchar(255) = NULL,
|
||||
@HashContrasena varchar(500) = NULL,
|
||||
@CveUsuarioEjecuta int,
|
||||
@ErrorMostrar varchar(max) OUTPUT,
|
||||
@ErrorTipo int OUTPUT,
|
||||
@Return bit OUTPUT
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON;
|
||||
SELECT
|
||||
@ErrorMostrar = NULL,
|
||||
@ErrorTipo = 0,
|
||||
@Return = 0;
|
||||
|
||||
BEGIN TRY
|
||||
IF NULLIF(LTRIM(RTRIM(@Nombre)), '') IS NULL
|
||||
OR NULLIF(LTRIM(RTRIM(@RFC)), '') IS NULL
|
||||
OR NULLIF(LTRIM(RTRIM(@Direccion)), '') IS NULL
|
||||
BEGIN
|
||||
SET @ErrorMostrar = 'Capture RFC, nombre y calle.';
|
||||
SET @ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
DECLARE @AsociadoAnterior bit = 0;
|
||||
-- Regla solicitada: únicamente los usuarios no clientes pueden cambiar CANADEVI.
|
||||
IF @AsociadoCanadevi <> ISNULL(@AsociadoAnterior, 0)
|
||||
AND NOT EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM dbo.Sis_Usuarios
|
||||
WHERE CveUsuario = @CveUsuarioEjecuta
|
||||
AND CveRol <> 3
|
||||
AND Activo = 1
|
||||
)
|
||||
BEGIN
|
||||
SET @ErrorMostrar = 'Sólo los usuarios de Agua de Hermosillo pueden cambiar Asociado CANADEVI.';
|
||||
SET @ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
IF EXISTS (SELECT 1 FROM dbo.Clientes WHERE RFC = @RFC)
|
||||
BEGIN
|
||||
SET @ErrorMostrar = 'Ya existe un desarrollador con ese RFC.';
|
||||
SET @ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
DECLARE @CveUsuarioNuevo int = 0;
|
||||
DECLARE @CveCliente int;
|
||||
IF @GenerarUsuario = 1
|
||||
BEGIN
|
||||
IF NULLIF(LTRIM(RTRIM(@NombreUsuario)), '') IS NULL
|
||||
OR NULLIF(LTRIM(RTRIM(@CorreoUsuario)), '') IS NULL
|
||||
OR NULLIF(@HashContrasena, '') IS NULL
|
||||
BEGIN
|
||||
SET @ErrorMostrar = 'Capture usuario y correo para generar el acceso.';
|
||||
SET @ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
IF EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM dbo.Sis_Usuarios
|
||||
WHERE NombreUsuario = @NombreUsuario
|
||||
OR CorreoElectronico = @CorreoUsuario
|
||||
)
|
||||
BEGIN
|
||||
SET @ErrorMostrar = 'El usuario o correo de acceso ya está registrado.';
|
||||
SET @ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
INSERT INTO dbo.Sis_Usuarios
|
||||
(
|
||||
NombreUsuario, CorreoElectronico, HashContrasena, CveRol,
|
||||
Activo, DebeCambiarContrasena, CorreoVerificado, FechaCreacion
|
||||
)
|
||||
VALUES
|
||||
(
|
||||
@NombreUsuario, @CorreoUsuario, @HashContrasena, 3,
|
||||
1, 1, 1, SYSDATETIME()
|
||||
);
|
||||
SET @CveUsuarioNuevo = CONVERT(int, SCOPE_IDENTITY());
|
||||
END;
|
||||
|
||||
INSERT INTO dbo.Clientes
|
||||
(
|
||||
RFC,
|
||||
Nombre,
|
||||
Direccion,
|
||||
NoExt,
|
||||
Duplicador,
|
||||
Referencia,
|
||||
Telefono,
|
||||
Mail,
|
||||
Adherente,
|
||||
Colonia,
|
||||
CP,
|
||||
Ciudad,
|
||||
Estado,
|
||||
Pais,
|
||||
CvePais,
|
||||
CveSATEstado,
|
||||
CveMunicipio,
|
||||
CveLocalidad,
|
||||
CveColonia,
|
||||
AsociadoCanadevi,
|
||||
CveEstado,
|
||||
Estatus,
|
||||
Fecha,
|
||||
CveUsuario,
|
||||
FechaIng
|
||||
)
|
||||
VALUES
|
||||
(
|
||||
@RFC,
|
||||
@Nombre,
|
||||
@Direccion,
|
||||
@NoExt,
|
||||
@Duplicador,
|
||||
@Referencia,
|
||||
@Telefono,
|
||||
@Mail,
|
||||
@Adherente,
|
||||
@Colonia,
|
||||
@CP,
|
||||
@Ciudad,
|
||||
@Estado,
|
||||
@Pais,
|
||||
@CvePais,
|
||||
@CveSATEstado,
|
||||
@CveMunicipio,
|
||||
@CveLocalidad,
|
||||
@CveColonia,
|
||||
@AsociadoCanadevi,
|
||||
@CveSATEstado,
|
||||
1,
|
||||
CONVERT(date, GETDATE()),
|
||||
@CveUsuarioEjecuta,
|
||||
GETDATE()
|
||||
);
|
||||
SET @CveCliente = CONVERT(int, SCOPE_IDENTITY());
|
||||
|
||||
IF @GenerarUsuario = 1
|
||||
BEGIN
|
||||
INSERT INTO dbo.Sis_UsuariosClientes
|
||||
(
|
||||
CveUsuario, CveCliente, Orden, EsPrincipal, Activo, CveUsuarioRegistro
|
||||
)
|
||||
VALUES
|
||||
(
|
||||
@CveUsuarioNuevo, @CveCliente, 1, 1, 1, @CveUsuarioEjecuta
|
||||
);
|
||||
END;
|
||||
|
||||
SELECT @CveCliente AS CveCliente, @CveUsuarioNuevo AS CveUsuario;
|
||||
SET @Return = 1;
|
||||
END TRY
|
||||
BEGIN CATCH
|
||||
SET @ErrorMostrar = 'Ocurrió un error al procesar el desarrollador; favor de contactar a Sistemas.';
|
||||
SET @ErrorTipo = 1;
|
||||
SET @Return = 0;
|
||||
DECLARE @ErrorTecnico nvarchar(2048) = CONCAT(
|
||||
'Número: ', ERROR_NUMBER(),
|
||||
'; Procedimiento: ', COALESCE(ERROR_PROCEDURE(), 'PA_Clientes_DesarrolladorAdd'),
|
||||
'; Línea: ', ERROR_LINE(),
|
||||
'; Detalle: ', ERROR_MESSAGE()
|
||||
);
|
||||
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
|
||||
END CATCH;
|
||||
END;
|
||||
GO
|
||||
|
||||
CREATE OR ALTER PROCEDURE dbo.PA_Clientes_DesarrolladorUpdate
|
||||
@CveCliente int,
|
||||
@RFC varchar(15),
|
||||
@Nombre varchar(200),
|
||||
@Direccion varchar(90),
|
||||
@NoExt varchar(20),
|
||||
@Duplicador varchar(50),
|
||||
@Referencia varchar(200),
|
||||
@Telefono varchar(25),
|
||||
@Mail varchar(255),
|
||||
@Adherente varchar(200),
|
||||
@Colonia varchar(50),
|
||||
@CP varchar(10),
|
||||
@Ciudad varchar(50),
|
||||
@Estado varchar(35),
|
||||
@Pais varchar(50),
|
||||
@CvePais int,
|
||||
@CveSATEstado int,
|
||||
@CveMunicipio int,
|
||||
@CveLocalidad int,
|
||||
@CveColonia int,
|
||||
@AsociadoCanadevi bit,
|
||||
@CveUsuarioEjecuta int,
|
||||
@ErrorMostrar varchar(max) OUTPUT,
|
||||
@ErrorTipo int OUTPUT,
|
||||
@Return bit OUTPUT
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON;
|
||||
SELECT
|
||||
@ErrorMostrar = NULL,
|
||||
@ErrorTipo = 0,
|
||||
@Return = 0;
|
||||
|
||||
BEGIN TRY
|
||||
IF NULLIF(LTRIM(RTRIM(@Nombre)), '') IS NULL
|
||||
OR NULLIF(LTRIM(RTRIM(@RFC)), '') IS NULL
|
||||
OR NULLIF(LTRIM(RTRIM(@Direccion)), '') IS NULL
|
||||
BEGIN
|
||||
SET @ErrorMostrar = 'Capture RFC, nombre y calle.';
|
||||
SET @ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
IF NOT EXISTS (SELECT 1 FROM dbo.Clientes WHERE CveCliente = @CveCliente)
|
||||
BEGIN
|
||||
SET @ErrorMostrar = 'El desarrollador ya no existe.';
|
||||
SET @ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
DECLARE @AsociadoAnterior bit;
|
||||
SELECT @AsociadoAnterior = AsociadoCanadevi
|
||||
FROM dbo.Clientes WITH (UPDLOCK)
|
||||
WHERE CveCliente = @CveCliente;
|
||||
-- Regla solicitada: únicamente los usuarios no clientes pueden cambiar CANADEVI.
|
||||
IF @AsociadoCanadevi <> ISNULL(@AsociadoAnterior, 0)
|
||||
AND NOT EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM dbo.Sis_Usuarios
|
||||
WHERE CveUsuario = @CveUsuarioEjecuta
|
||||
AND CveRol <> 3
|
||||
AND Activo = 1
|
||||
)
|
||||
BEGIN
|
||||
SET @ErrorMostrar = 'Sólo los usuarios de Agua de Hermosillo pueden cambiar Asociado CANADEVI.';
|
||||
SET @ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
IF EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM dbo.Clientes
|
||||
WHERE RFC = @RFC AND CveCliente <> @CveCliente
|
||||
)
|
||||
BEGIN
|
||||
SET @ErrorMostrar = 'Ya existe otro desarrollador con ese RFC.';
|
||||
SET @ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
UPDATE dbo.Clientes
|
||||
SET
|
||||
RFC = @RFC,
|
||||
Nombre = @Nombre,
|
||||
Direccion = @Direccion,
|
||||
NoExt = @NoExt,
|
||||
Duplicador = @Duplicador,
|
||||
Referencia = @Referencia,
|
||||
Telefono = @Telefono,
|
||||
Mail = @Mail,
|
||||
Adherente = @Adherente,
|
||||
Colonia = @Colonia,
|
||||
CP = @CP,
|
||||
Ciudad = @Ciudad,
|
||||
Estado = @Estado,
|
||||
Pais = @Pais,
|
||||
CvePais = @CvePais,
|
||||
CveSATEstado = @CveSATEstado,
|
||||
CveMunicipio = @CveMunicipio,
|
||||
CveLocalidad = @CveLocalidad,
|
||||
CveColonia = @CveColonia,
|
||||
AsociadoCanadevi = @AsociadoCanadevi,
|
||||
CveEstado = @CveSATEstado,
|
||||
CveUsuarioModifico = @CveUsuarioEjecuta
|
||||
WHERE CveCliente = @CveCliente;
|
||||
SET @Return = 1;
|
||||
END TRY
|
||||
BEGIN CATCH
|
||||
SET @ErrorMostrar = 'Ocurrió un error al procesar el desarrollador; favor de contactar a Sistemas.';
|
||||
SET @ErrorTipo = 1;
|
||||
SET @Return = 0;
|
||||
DECLARE @ErrorTecnico nvarchar(2048) = CONCAT(
|
||||
'Número: ', ERROR_NUMBER(),
|
||||
'; Procedimiento: ', COALESCE(ERROR_PROCEDURE(), 'PA_Clientes_DesarrolladorUpdate'),
|
||||
'; Línea: ', ERROR_LINE(),
|
||||
'; Detalle: ', ERROR_MESSAGE()
|
||||
);
|
||||
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
|
||||
END CATCH;
|
||||
END;
|
||||
GO
|
||||
|
||||
-- Configuración de campos auditables; no incluye contraseñas ni hashes.
|
||||
DECLARE @Acciones TABLE
|
||||
(
|
||||
CodigoAccion varchar(150) COLLATE Modern_Spanish_CI_AS,
|
||||
NombreAccion varchar(150)
|
||||
);
|
||||
INSERT INTO @Acciones (CodigoAccion, NombreAccion)
|
||||
VALUES
|
||||
('AgregarDesarrollador', 'Agregar desarrollador'),
|
||||
('ActualizarDesarrollador', 'Actualizar desarrollador');
|
||||
|
||||
INSERT INTO dbo.Bit_DefinicionesAccion
|
||||
(CodigoAccion, NombreAccion, DescripcionAccion, CveTabla, CveTipoMovimiento, Activo)
|
||||
SELECT A.CodigoAccion, A.NombreAccion, A.NombreAccion, NULL, NULL, 1
|
||||
FROM @Acciones AS A
|
||||
WHERE NOT EXISTS
|
||||
(
|
||||
SELECT 1 FROM dbo.Bit_DefinicionesAccion AS D
|
||||
WHERE D.CodigoAccion = A.CodigoAccion
|
||||
);
|
||||
|
||||
UPDATE D
|
||||
SET Activo = 1
|
||||
FROM dbo.Bit_DefinicionesAccion AS D
|
||||
INNER JOIN @Acciones AS A ON A.CodigoAccion = D.CodigoAccion;
|
||||
|
||||
IF NOT EXISTS (SELECT 1 FROM dbo.Bit_Tablas WHERE NombreTablaSQL = 'Clientes')
|
||||
BEGIN
|
||||
INSERT INTO dbo.Bit_Tablas
|
||||
(NombreTablaSQL, NombreMostrar, NombreCampoLlaveSQL, Activo, FechaAlta)
|
||||
VALUES
|
||||
('Clientes', 'Desarrolladores', 'CveCliente', 1, GETDATE());
|
||||
END;
|
||||
|
||||
UPDATE dbo.Bit_Tablas
|
||||
SET Activo = 1, NombreCampoLlaveSQL = 'CveCliente'
|
||||
WHERE NombreTablaSQL = 'Clientes';
|
||||
|
||||
DECLARE @Campos TABLE
|
||||
(
|
||||
Campo varchar(128),
|
||||
Nombre varchar(150),
|
||||
Tipo varchar(128)
|
||||
);
|
||||
INSERT INTO @Campos (Campo, Nombre, Tipo)
|
||||
VALUES
|
||||
('CveCliente', 'CveCliente', 'int'),
|
||||
('RFC', 'RFC', 'varchar'),
|
||||
('Nombre', 'Nombre', 'varchar'),
|
||||
('Direccion', 'Direccion', 'varchar'),
|
||||
('NoExt', 'NoExt', 'varchar'),
|
||||
('Duplicador', 'Duplicador', 'varchar'),
|
||||
('Referencia', 'Referencia', 'varchar'),
|
||||
('Telefono', 'Telefono', 'varchar'),
|
||||
('Mail', 'Mail', 'varchar'),
|
||||
('Adherente', 'Adherente', 'varchar'),
|
||||
('Colonia', 'Colonia', 'varchar'),
|
||||
('CP', 'CP', 'varchar'),
|
||||
('Ciudad', 'Ciudad', 'varchar'),
|
||||
('Estado', 'Estado', 'varchar'),
|
||||
('Pais', 'Pais', 'varchar'),
|
||||
('CvePais', 'CvePais', 'int'),
|
||||
('CveSATEstado', 'CveSATEstado', 'int'),
|
||||
('CveMunicipio', 'CveMunicipio', 'int'),
|
||||
('CveLocalidad', 'CveLocalidad', 'int'),
|
||||
('CveColonia', 'CveColonia', 'int'),
|
||||
('AsociadoCanadevi', 'AsociadoCanadevi', 'bit'),
|
||||
('Estatus', 'Estatus', 'bit');
|
||||
|
||||
INSERT INTO dbo.Bit_Campos
|
||||
(CveTabla, NombreCampoSQL, NombreMostrar, TipoDatoSQL, MostrarEnBitacora, Activo, FechaAlta)
|
||||
SELECT T.CveTabla, C.Campo, C.Nombre, C.Tipo, 1, 1, GETDATE()
|
||||
FROM @Campos AS C
|
||||
INNER JOIN dbo.Bit_Tablas AS T ON T.NombreTablaSQL = 'Clientes'
|
||||
WHERE NOT EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM dbo.Bit_Campos AS B
|
||||
WHERE B.CveTabla = T.CveTabla AND B.NombreCampoSQL = C.Campo
|
||||
);
|
||||
|
||||
UPDATE B
|
||||
SET Activo = 1, MostrarEnBitacora = 1
|
||||
FROM dbo.Bit_Campos AS B
|
||||
INNER JOIN dbo.Bit_Tablas AS T ON T.CveTabla = B.CveTabla AND T.NombreTablaSQL = 'Clientes'
|
||||
INNER JOIN @Campos AS C ON C.Campo = B.NombreCampoSQL;
|
||||
GO
|
||||
|
||||
-- Rutas del catálogo y detalle; el detalle hereda los permisos del catálogo.
|
||||
DECLARE @CvePlataforma int;
|
||||
DECLARE @CvePadre int;
|
||||
SELECT TOP (1)
|
||||
@CvePadre = CveModulo,
|
||||
@CvePlataforma = CvePlataforma
|
||||
FROM dbo.Sis_Modulos
|
||||
WHERE NombreModulo = 'Desarrolladores' AND CveModuloPadre IS NULL
|
||||
ORDER BY CveModulo;
|
||||
|
||||
IF @CvePlataforma IS NULL
|
||||
BEGIN
|
||||
THROW 51001, 'No se encontró el módulo padre Desarrolladores.', 1;
|
||||
END;
|
||||
|
||||
IF NOT EXISTS
|
||||
(
|
||||
SELECT 1 FROM dbo.Sis_Modulos
|
||||
WHERE Url = '~/Pages/Desarrolladores/Desarrolladores.aspx'
|
||||
)
|
||||
BEGIN
|
||||
INSERT INTO dbo.Sis_Modulos
|
||||
(
|
||||
CveModuloPadre, CvePlataforma, NombreModulo, Url,
|
||||
ClaseCssIcono, OrdenVisualizacion, Visible, Activo, FechaCreacion
|
||||
)
|
||||
VALUES
|
||||
(
|
||||
@CvePadre, @CvePlataforma, 'Registro de desarrolladores',
|
||||
'~/Pages/Desarrolladores/Desarrolladores.aspx',
|
||||
'fa fa-users', 5, 1, 1, GETDATE()
|
||||
);
|
||||
END;
|
||||
|
||||
DECLARE @CveCatalogo int;
|
||||
SELECT @CveCatalogo = CveModulo
|
||||
FROM dbo.Sis_Modulos
|
||||
WHERE Url = '~/Pages/Desarrolladores/Desarrolladores.aspx';
|
||||
|
||||
IF NOT EXISTS
|
||||
(
|
||||
SELECT 1 FROM dbo.Sis_Modulos
|
||||
WHERE Url = '~/Pages/Desarrolladores/DesarrolladorDetalle.aspx'
|
||||
)
|
||||
BEGIN
|
||||
INSERT INTO dbo.Sis_Modulos
|
||||
(
|
||||
CveModuloPadre, CvePlataforma, NombreModulo, Url,
|
||||
ClaseCssIcono, OrdenVisualizacion, Visible, Activo, FechaCreacion
|
||||
)
|
||||
VALUES
|
||||
(
|
||||
@CveCatalogo, @CvePlataforma, 'Detalle de desarrollador',
|
||||
'~/Pages/Desarrolladores/DesarrolladorDetalle.aspx',
|
||||
'fa fa-building', 1, 0, 1, GETDATE()
|
||||
);
|
||||
END;
|
||||
|
||||
-- Se conservan permisos ya existentes. Para el catálogo nuevo se reutilizan los del padre.
|
||||
INSERT INTO dbo.Sis_RolesModulos
|
||||
(
|
||||
CveRol, CveModulo, PuedeVer, PuedeCrear, PuedeModificar,
|
||||
PuedeEliminar, PuedeImprimir, PuedeExportar, FechaCreacion
|
||||
)
|
||||
SELECT
|
||||
R.CveRol, @CveCatalogo, R.PuedeVer, R.PuedeCrear, R.PuedeModificar,
|
||||
0, 0, 0, GETDATE()
|
||||
FROM dbo.Sis_RolesModulos AS R
|
||||
WHERE R.CveModulo = @CvePadre
|
||||
AND NOT EXISTS
|
||||
(
|
||||
SELECT 1 FROM dbo.Sis_RolesModulos AS E
|
||||
WHERE E.CveRol = R.CveRol AND E.CveModulo = @CveCatalogo
|
||||
);
|
||||
|
||||
INSERT INTO dbo.Sis_RolesModulos
|
||||
(
|
||||
CveRol, CveModulo, PuedeVer, PuedeCrear, PuedeModificar,
|
||||
PuedeEliminar, PuedeImprimir, PuedeExportar, FechaCreacion
|
||||
)
|
||||
SELECT
|
||||
R.CveRol, D.CveModulo, R.PuedeVer, R.PuedeCrear, R.PuedeModificar,
|
||||
0, 0, 0, GETDATE()
|
||||
FROM dbo.Sis_RolesModulos AS R
|
||||
INNER JOIN dbo.Sis_Modulos AS D ON D.Url = '~/Pages/Desarrolladores/DesarrolladorDetalle.aspx'
|
||||
WHERE R.CveModulo = @CveCatalogo
|
||||
AND NOT EXISTS
|
||||
(
|
||||
SELECT 1 FROM dbo.Sis_RolesModulos AS E
|
||||
WHERE E.CveRol = R.CveRol AND E.CveModulo = D.CveModulo
|
||||
);
|
||||
GO
|
||||
BIN
Cobro de Derechos y Aportaciones Cantabria 2.xlsx
Normal file
BIN
Cobro de Derechos y Aportaciones Cantabria 2.xlsx
Normal file
Binary file not shown.
77
Configuracion_DocumentosSolicitud_20260918.sql
Normal file
77
Configuracion_DocumentosSolicitud_20260918.sql
Normal file
@@ -0,0 +1,77 @@
|
||||
/*
|
||||
Configuración particular de documentos por solicitud.
|
||||
Instalación verificada: 18/09/2026. Respaldo COPY_ONLY con CHECKSUM:
|
||||
E:\SqlServer2022\MSSQL16.MSSQLSERVER\MSSQL\Backup\SIG_PlataformaDesarolladores_configuracion_documentos_20260918_083743.bak
|
||||
Aplicar junto con Procedimientos_DocumentosSolicitudConfiguracion_20260918.sql
|
||||
en una transacción de instalación. No copia ni modifica configuraciones generales.
|
||||
Una fila particular sustituye la configuración general completa.
|
||||
EsActivo = 0 suspende el requisito particular; eliminar la fila vuelve a heredar.
|
||||
Los archivos físicos y su validación permanecen en Tra_DocumentosSolicitud.
|
||||
*/
|
||||
SET NOCOUNT ON;
|
||||
|
||||
IF OBJECT_ID('dbo.Tra_SolicitudDocumentoConfiguracion', 'U') IS NULL
|
||||
BEGIN
|
||||
CREATE TABLE dbo.Tra_SolicitudDocumentoConfiguracion
|
||||
(
|
||||
CveSolicitud int NOT NULL,
|
||||
CveTipoDocumento int NOT NULL,
|
||||
EsRequerido bit NOT NULL
|
||||
CONSTRAINT DF_Tra_SolicitudDocumentoConfiguracion_EsRequerido DEFAULT (0),
|
||||
EsCliente bit NOT NULL
|
||||
CONSTRAINT DF_Tra_SolicitudDocumentoConfiguracion_EsCliente DEFAULT (1),
|
||||
TieneVigencia bit NOT NULL
|
||||
CONSTRAINT DF_Tra_SolicitudDocumentoConfiguracion_TieneVigencia DEFAULT (0),
|
||||
Orden int NOT NULL
|
||||
CONSTRAINT DF_Tra_SolicitudDocumentoConfiguracion_Orden DEFAULT (0),
|
||||
EsActivo bit NOT NULL
|
||||
CONSTRAINT DF_Tra_SolicitudDocumentoConfiguracion_EsActivo DEFAULT (1),
|
||||
CONSTRAINT PK_Tra_SolicitudDocumentoConfiguracion
|
||||
PRIMARY KEY CLUSTERED (CveSolicitud, CveTipoDocumento),
|
||||
CONSTRAINT FK_Tra_SolicitudDocumentoConfiguracion_Solicitud
|
||||
FOREIGN KEY (CveSolicitud) REFERENCES dbo.Tra_Solicitudes (CveSolicitud),
|
||||
CONSTRAINT FK_Tra_SolicitudDocumentoConfiguracion_TipoDocumento
|
||||
FOREIGN KEY (CveTipoDocumento) REFERENCES dbo.Tra_TiposDocumento (CveTipoDocumento)
|
||||
);
|
||||
END;
|
||||
|
||||
IF NOT EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM dbo.Bit_Tablas
|
||||
WHERE NombreTablaSQL = 'Tra_SolicitudDocumentoConfiguracion'
|
||||
)
|
||||
BEGIN
|
||||
INSERT INTO dbo.Bit_Tablas
|
||||
(NombreTablaSQL, NombreMostrar, Descripcion, NombreCampoLlaveSQL, Activo)
|
||||
VALUES
|
||||
('Tra_SolicitudDocumentoConfiguracion', 'Documentos particulares de la solicitud',
|
||||
'Configuración de documentos exclusiva de una solicitud.', NULL, 1);
|
||||
END;
|
||||
|
||||
DECLARE @CveTabla int;
|
||||
SELECT @CveTabla = CveTabla
|
||||
FROM dbo.Bit_Tablas
|
||||
WHERE NombreTablaSQL = 'Tra_SolicitudDocumentoConfiguracion';
|
||||
|
||||
INSERT INTO dbo.Bit_Campos
|
||||
(CveTabla, NombreCampoSQL, NombreMostrar, MostrarEnBitacora, TipoDatoSQL, Activo)
|
||||
SELECT @CveTabla, C.Nombre, C.Titulo, 1, C.Tipo, 1
|
||||
FROM
|
||||
(
|
||||
VALUES
|
||||
('CveSolicitud', 'Solicitud', 'int'),
|
||||
('CveTipoDocumento', 'Tipo de documento', 'int'),
|
||||
('EsRequerido', 'Requerido', 'bit'),
|
||||
('EsCliente', 'Lo proporciona el desarrollador', 'bit'),
|
||||
('TieneVigencia', 'Tiene vigencia', 'bit'),
|
||||
('Orden', 'Orden', 'int'),
|
||||
('EsActivo', 'Activo', 'bit')
|
||||
) AS C(Nombre, Titulo, Tipo)
|
||||
WHERE NOT EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM dbo.Bit_Campos AS B
|
||||
WHERE B.CveTabla = @CveTabla
|
||||
AND B.NombreCampoSQL = C.Nombre
|
||||
);
|
||||
649
Convenios_Etapa_TipoTramite_20261002.sql
Normal file
649
Convenios_Etapa_TipoTramite_20261002.sql
Normal file
@@ -0,0 +1,649 @@
|
||||
/*
|
||||
Preparado a partir de las definiciones instaladas; no ejecutado.
|
||||
Instalar junto con la aplicación. No modifica conceptos, recibos ni pagos.
|
||||
CveSolicitud se conserva únicamente como referencia histórica.
|
||||
Los convenios históricos sin una solicitud conservan CveTipoTramite NULL:
|
||||
su asignación requiere una decisión de negocio; no se elige un trámite arbitrario.
|
||||
*/
|
||||
SET NOCOUNT ON;
|
||||
|
||||
IF COL_LENGTH('dbo.Convenios', 'CveTipoTramite') IS NULL
|
||||
ALTER TABLE dbo.Convenios ADD CveTipoTramite int NULL;
|
||||
GO
|
||||
|
||||
UPDATE C
|
||||
SET CveTipoTramite = S.CveTipoTramite
|
||||
FROM dbo.Convenios AS C
|
||||
INNER JOIN dbo.Tra_Solicitudes AS S ON S.CveSolicitud = C.CveSolicitud
|
||||
WHERE C.CveTipoTramite IS NULL;
|
||||
|
||||
IF NOT EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM sys.foreign_keys
|
||||
WHERE name = 'FK_Convenios_TipoTramite'
|
||||
)
|
||||
ALTER TABLE dbo.Convenios WITH CHECK
|
||||
ADD CONSTRAINT FK_Convenios_TipoTramite
|
||||
FOREIGN KEY (CveTipoTramite)
|
||||
REFERENCES dbo.Tra_TiposTramite (CveTipoTramite);
|
||||
|
||||
IF NOT EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM sys.indexes
|
||||
WHERE object_id = OBJECT_ID('dbo.Convenios')
|
||||
AND name = 'IX_Convenios_Etapa_TipoTramite'
|
||||
)
|
||||
CREATE INDEX IX_Convenios_Etapa_TipoTramite
|
||||
ON dbo.Convenios (CveFraccionamientoEtapa, CveTipoTramite);
|
||||
|
||||
DECLARE @QuitarRelacion nvarchar(max) = N'';
|
||||
SELECT @QuitarRelacion = @QuitarRelacion
|
||||
+ N'ALTER TABLE dbo.Convenios DROP CONSTRAINT ' + QUOTENAME(F.name) + N';'
|
||||
FROM sys.foreign_keys AS F
|
||||
WHERE F.parent_object_id = OBJECT_ID('dbo.Convenios')
|
||||
AND F.referenced_object_id = OBJECT_ID('dbo.Tra_Solicitudes');
|
||||
IF @QuitarRelacion <> N''
|
||||
EXEC sys.sp_executesql @QuitarRelacion;
|
||||
|
||||
-- Resultado de diagnóstico; no cambia la clasificación de estos convenios.
|
||||
SELECT CveConvenio, NumeroConvenio, CveFraccionamientoEtapa
|
||||
FROM dbo.Convenios
|
||||
WHERE CveTipoTramite IS NULL;
|
||||
GO
|
||||
|
||||
CREATE OR ALTER PROCEDURE dbo.PA_Tra_ConvenioAdd
|
||||
@CveCliente int,
|
||||
@CveFraccionamientoEtapa int,
|
||||
@CveTipoTramite int,
|
||||
@NumeroConvenio varchar(100),
|
||||
@NumeroOficio varchar(100) = NULL,
|
||||
@ViviendasAutorizadas int = NULL,
|
||||
@ViviendasEnConvenio int,
|
||||
@ViviendasPendientes int = NULL,
|
||||
@ViviendasContratadas int = NULL,
|
||||
@FechaConvenio date,
|
||||
@Observaciones varchar(1000) = NULL,
|
||||
@ConceptosXml xml,
|
||||
@CveUsuarioEjecuta int,
|
||||
@ErrorMostrar varchar(max) OUTPUT,
|
||||
@ErrorTipo int OUTPUT,
|
||||
@Return bit OUTPUT
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON;
|
||||
|
||||
SELECT
|
||||
@ErrorMostrar = NULL,
|
||||
@ErrorTipo = 0,
|
||||
@Return = 0;
|
||||
|
||||
BEGIN TRY
|
||||
SET @NumeroConvenio = NULLIF(LTRIM(RTRIM(@NumeroConvenio)), '');
|
||||
SET @NumeroOficio = NULLIF(LTRIM(RTRIM(@NumeroOficio)), '');
|
||||
SET @Observaciones = NULLIF(LTRIM(RTRIM(@Observaciones)), '');
|
||||
|
||||
IF @CveCliente <= 0
|
||||
BEGIN
|
||||
SET @ErrorMostrar = 'Seleccione el desarrollador del convenio.';
|
||||
SET @ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
IF @CveFraccionamientoEtapa <= 0
|
||||
BEGIN
|
||||
SET @ErrorMostrar = 'Seleccione el fraccionamiento y etapa del convenio.';
|
||||
SET @ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
IF ISNULL(@CveTipoTramite, 0) <= 0
|
||||
BEGIN
|
||||
SET @ErrorMostrar = 'Seleccione el tipo de trámite del convenio.';
|
||||
SET @ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
IF @NumeroConvenio IS NULL
|
||||
BEGIN
|
||||
SET @ErrorMostrar = 'Capture el número de convenio.';
|
||||
SET @ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
IF @ViviendasEnConvenio < 0
|
||||
OR ISNULL(@ViviendasAutorizadas, 0) < 0
|
||||
OR ISNULL(@ViviendasPendientes, 0) < 0
|
||||
OR ISNULL(@ViviendasContratadas, 0) < 0
|
||||
BEGIN
|
||||
SET @ErrorMostrar = 'Las cantidades de viviendas no son válidas.';
|
||||
SET @ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
IF NOT EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM dbo.FraccionamientosEtapas AS E
|
||||
INNER JOIN dbo.Fraccionamientos AS F ON F.CveFraccionamiento = E.CveFraccionamiento
|
||||
WHERE E.CveFraccionamientoEtapa = @CveFraccionamientoEtapa
|
||||
AND F.CveCliente = @CveCliente
|
||||
)
|
||||
BEGIN
|
||||
SET @ErrorMostrar = 'La etapa seleccionada no pertenece al desarrollador indicado.';
|
||||
SET @ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
IF EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM dbo.Convenios AS C
|
||||
WHERE C.NumeroConvenio = @NumeroConvenio
|
||||
)
|
||||
BEGIN
|
||||
SET @ErrorMostrar = 'Ya existe un convenio con ese número.';
|
||||
SET @ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
DECLARE @Conceptos TABLE
|
||||
(
|
||||
Orden int NOT NULL PRIMARY KEY,
|
||||
CveConvenioConcepto int NOT NULL,
|
||||
Importe decimal(18,6) NOT NULL,
|
||||
Tipo varchar(20) NOT NULL,
|
||||
NumeroPagos int NOT NULL
|
||||
);
|
||||
|
||||
DECLARE @Recibos TABLE
|
||||
(
|
||||
OrdenConcepto int NOT NULL,
|
||||
Orden int NOT NULL,
|
||||
Importe decimal(18,6) NOT NULL,
|
||||
FechaVencimiento date NOT NULL,
|
||||
Estatus varchar(30) NOT NULL,
|
||||
PRIMARY KEY (OrdenConcepto, Orden)
|
||||
);
|
||||
|
||||
IF @ConceptosXml IS NOT NULL
|
||||
BEGIN
|
||||
INSERT INTO @Conceptos
|
||||
(
|
||||
Orden,
|
||||
CveConvenioConcepto,
|
||||
Importe,
|
||||
Tipo,
|
||||
NumeroPagos
|
||||
)
|
||||
SELECT
|
||||
C.value('@Orden', 'int'),
|
||||
C.value('@CveConvenioConcepto', 'int'),
|
||||
C.value('@Importe', 'decimal(18,6)'),
|
||||
C.value('@Tipo', 'varchar(20)'),
|
||||
C.value('@NumeroPagos', 'int')
|
||||
FROM @ConceptosXml.nodes('/Conceptos/Concepto') AS X(C);
|
||||
|
||||
INSERT INTO @Recibos
|
||||
(
|
||||
OrdenConcepto,
|
||||
Orden,
|
||||
Importe,
|
||||
FechaVencimiento,
|
||||
Estatus
|
||||
)
|
||||
SELECT
|
||||
C.value('@Orden', 'int'),
|
||||
R.value('@Orden', 'int'),
|
||||
R.value('@Importe', 'decimal(18,6)'),
|
||||
R.value('@FechaVencimiento', 'date'),
|
||||
COALESCE(
|
||||
NULLIF(R.value('@Estatus', 'varchar(30)'), ''),
|
||||
'PENDIENTE'
|
||||
)
|
||||
FROM @ConceptosXml.nodes('/Conceptos/Concepto') AS CX(C)
|
||||
CROSS APPLY C.nodes('Recibos/Recibo') AS RX(R);
|
||||
END;
|
||||
|
||||
IF NOT EXISTS (SELECT 1 FROM @Conceptos)
|
||||
BEGIN
|
||||
SET @ErrorMostrar = 'Agregue al menos un concepto al convenio.';
|
||||
SET @ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
IF EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM @Conceptos AS C
|
||||
LEFT JOIN dbo.ConveniosConceptos AS CC ON CC.CveConvenioConcepto = C.CveConvenioConcepto
|
||||
AND CC.EsActivo = 1
|
||||
WHERE CC.CveConvenioConcepto IS NULL
|
||||
OR C.Importe <= 0
|
||||
OR NULLIF(LTRIM(RTRIM(C.Tipo)), '') IS NULL
|
||||
OR C.NumeroPagos NOT BETWEEN 1 AND 12
|
||||
)
|
||||
BEGIN
|
||||
SET @ErrorMostrar = 'Uno de los conceptos del convenio no es válido.';
|
||||
SET @ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
IF EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM @Recibos AS R
|
||||
WHERE R.Importe <= 0
|
||||
OR R.FechaVencimiento IS NULL
|
||||
)
|
||||
BEGIN
|
||||
SET @ErrorMostrar = 'Todas las parcialidades deben tener importe y vencimiento válidos.';
|
||||
SET @ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
IF EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM @Conceptos AS C
|
||||
OUTER APPLY
|
||||
(
|
||||
SELECT
|
||||
COUNT(*) AS NumeroRecibos,
|
||||
SUM(R.Importe) AS ImporteRecibos
|
||||
FROM @Recibos AS R
|
||||
WHERE R.OrdenConcepto = C.Orden
|
||||
) AS R
|
||||
WHERE ISNULL(R.NumeroRecibos, 0) <> C.NumeroPagos
|
||||
OR ISNULL(R.ImporteRecibos, 0) <> C.Importe
|
||||
)
|
||||
BEGIN
|
||||
SET @ErrorMostrar =
|
||||
'La cantidad y suma de las parcialidades debe coincidir con cada concepto.';
|
||||
SET @ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
INSERT INTO dbo.Convenios
|
||||
(
|
||||
CveCliente,
|
||||
NumeroConvenio,
|
||||
NumeroOficio,
|
||||
CveFraccionamientoEtapa,
|
||||
CveTipoTramite,
|
||||
ViviendasAutorizadas,
|
||||
ViviendasEnConvenio,
|
||||
ViviendasPendientes,
|
||||
ViviendasContratadas,
|
||||
FechaConvenio,
|
||||
Observaciones,
|
||||
Estatus,
|
||||
CveConvenioOrigen,
|
||||
CveUsuario
|
||||
)
|
||||
VALUES
|
||||
(
|
||||
@CveCliente,
|
||||
@NumeroConvenio,
|
||||
@NumeroOficio,
|
||||
@CveFraccionamientoEtapa,
|
||||
@CveTipoTramite,
|
||||
@ViviendasAutorizadas,
|
||||
@ViviendasEnConvenio,
|
||||
@ViviendasPendientes,
|
||||
@ViviendasContratadas,
|
||||
@FechaConvenio,
|
||||
@Observaciones,
|
||||
'ACTIVO',
|
||||
NULL,
|
||||
@CveUsuarioEjecuta
|
||||
);
|
||||
|
||||
DECLARE @CveConvenio int = CONVERT(int, SCOPE_IDENTITY());
|
||||
DECLARE @OrdenConcepto int = 0;
|
||||
DECLARE @CveConvenioConcepto int;
|
||||
DECLARE @ImporteConcepto decimal(18,6);
|
||||
DECLARE @Tipo varchar(20);
|
||||
DECLARE @NumeroPagos int;
|
||||
DECLARE @CveConvenioDetalle int;
|
||||
|
||||
WHILE EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM @Conceptos
|
||||
WHERE Orden > @OrdenConcepto
|
||||
)
|
||||
BEGIN
|
||||
SELECT TOP (1)
|
||||
@OrdenConcepto = C.Orden,
|
||||
@CveConvenioConcepto = C.CveConvenioConcepto,
|
||||
@ImporteConcepto = C.Importe,
|
||||
@Tipo = C.Tipo,
|
||||
@NumeroPagos = C.NumeroPagos
|
||||
FROM @Conceptos AS C
|
||||
WHERE C.Orden > @OrdenConcepto
|
||||
ORDER BY C.Orden;
|
||||
|
||||
INSERT INTO dbo.ConveniosDetalle
|
||||
(
|
||||
CveConvenio,
|
||||
CveConvenioConcepto,
|
||||
Importe,
|
||||
Tipo,
|
||||
NumeroPagos,
|
||||
Observaciones
|
||||
)
|
||||
VALUES
|
||||
(
|
||||
@CveConvenio,
|
||||
@CveConvenioConcepto,
|
||||
@ImporteConcepto,
|
||||
@Tipo,
|
||||
@NumeroPagos,
|
||||
NULL
|
||||
);
|
||||
|
||||
SET @CveConvenioDetalle = CONVERT(int, SCOPE_IDENTITY());
|
||||
|
||||
INSERT INTO dbo.ConveniosRecibos
|
||||
(
|
||||
CveConvenioDetalle,
|
||||
NumeroRecibo,
|
||||
Importe,
|
||||
FechaVencimiento,
|
||||
Estatus
|
||||
)
|
||||
SELECT
|
||||
@CveConvenioDetalle,
|
||||
CONCAT(
|
||||
'RD',
|
||||
CONVERT(char(8), GETDATE(), 112),
|
||||
@CveConvenio,
|
||||
'-',
|
||||
RIGHT('000' + CONVERT(varchar(3), @OrdenConcepto), 3),
|
||||
'-',
|
||||
RIGHT('000' + CONVERT(varchar(3), R.Orden), 3)
|
||||
),
|
||||
R.Importe,
|
||||
R.FechaVencimiento,
|
||||
R.Estatus
|
||||
FROM @Recibos AS R
|
||||
WHERE R.OrdenConcepto = @OrdenConcepto
|
||||
ORDER BY R.Orden;
|
||||
END;
|
||||
|
||||
SELECT @CveConvenio AS CveConvenio;
|
||||
SET @Return = 1;
|
||||
END TRY
|
||||
BEGIN CATCH
|
||||
SET @ErrorMostrar =
|
||||
'Ocurrió un error al guardar el convenio; favor de contactar a Sistemas.';
|
||||
SET @ErrorTipo = 1;
|
||||
SET @Return = 0;
|
||||
|
||||
DECLARE @ErrorTecnico nvarchar(2048) = CONCAT(
|
||||
'Número: ', ERROR_NUMBER(),
|
||||
'; Procedimiento: ', COALESCE(
|
||||
ERROR_PROCEDURE(),
|
||||
'PA_Tra_ConvenioAdd'
|
||||
),
|
||||
'; Línea: ', ERROR_LINE(),
|
||||
'; Detalle: ', ERROR_MESSAGE()
|
||||
);
|
||||
|
||||
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
|
||||
END CATCH;
|
||||
END;
|
||||
|
||||
GO
|
||||
|
||||
/*
|
||||
Se vuelven a definir List/Get únicamente para alinear la salida
|
||||
con Clientes.Nombre y devolver el encabezado completo del modal.
|
||||
*/
|
||||
CREATE OR ALTER PROCEDURE dbo.PA_Tra_ConvenioList
|
||||
@CveTipoTramite int = NULL,
|
||||
@CveCliente int = NULL,
|
||||
@CveFraccionamiento int = NULL,
|
||||
@CveFraccionamientoEtapa int = NULL,
|
||||
@Estatus varchar(30) = NULL,
|
||||
@ConSaldoPendiente bit = NULL,
|
||||
@CveUsuarioEjecuta int,
|
||||
@ErrorMostrar varchar(max) OUTPUT,
|
||||
@ErrorTipo int OUTPUT,
|
||||
@Return bit OUTPUT
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON;
|
||||
|
||||
SELECT
|
||||
@ErrorMostrar = NULL,
|
||||
@ErrorTipo = 0,
|
||||
@Return = 0;
|
||||
|
||||
BEGIN TRY
|
||||
;WITH PagadoRecibo AS
|
||||
(
|
||||
SELECT
|
||||
PR.CveConvenioRecibo,
|
||||
SUM(PR.ImporteAplicado) AS ImportePagado
|
||||
FROM dbo.ConveniosPagosRecibos AS PR
|
||||
GROUP BY PR.CveConvenioRecibo
|
||||
),
|
||||
Totales AS
|
||||
(
|
||||
SELECT
|
||||
D.CveConvenio,
|
||||
SUM(R.Importe) AS ImporteConvenio,
|
||||
SUM(ISNULL(P.ImportePagado, 0)) AS ImportePagado,
|
||||
SUM(R.Importe - ISNULL(P.ImportePagado, 0)) AS SaldoPendiente,
|
||||
MAX(CASE WHEN P.CveConvenioRecibo IS NULL THEN 0 ELSE 1 END) AS TienePagos
|
||||
FROM dbo.ConveniosDetalle AS D
|
||||
LEFT JOIN dbo.ConveniosRecibos AS R ON R.CveConvenioDetalle = D.CveConvenioDetalle
|
||||
LEFT JOIN PagadoRecibo AS P ON P.CveConvenioRecibo = R.CveConvenioRecibo
|
||||
GROUP BY D.CveConvenio
|
||||
)
|
||||
SELECT
|
||||
C.CveConvenio,
|
||||
C.CveTipoTramite,
|
||||
TT.TipoTramite,
|
||||
C.CveCliente,
|
||||
CL.Nombre AS Cliente,
|
||||
F.CveFraccionamiento,
|
||||
F.Fraccionamiento,
|
||||
FE.CveFraccionamientoEtapa,
|
||||
FE.Etapa,
|
||||
C.NumeroConvenio,
|
||||
C.NumeroOficio,
|
||||
C.Estatus,
|
||||
C.FechaConvenio,
|
||||
ISNULL(T.ImporteConvenio, 0) AS ImporteConvenio,
|
||||
ISNULL(T.ImportePagado, 0) AS ImportePagado,
|
||||
ISNULL(T.SaldoPendiente, 0) AS SaldoPendiente,
|
||||
CONVERT(bit, ISNULL(T.TienePagos, 0)) AS TienePagos
|
||||
FROM dbo.Convenios AS C
|
||||
LEFT JOIN dbo.Tra_TiposTramite AS TT ON TT.CveTipoTramite = C.CveTipoTramite
|
||||
INNER JOIN dbo.FraccionamientosEtapas AS FE ON FE.CveFraccionamientoEtapa = C.CveFraccionamientoEtapa
|
||||
INNER JOIN dbo.Fraccionamientos AS F ON F.CveFraccionamiento = FE.CveFraccionamiento
|
||||
INNER JOIN dbo.Clientes AS CL ON CL.CveCliente = C.CveCliente
|
||||
LEFT JOIN Totales AS T ON T.CveConvenio = C.CveConvenio
|
||||
WHERE (@CveCliente IS NULL OR C.CveCliente = @CveCliente)
|
||||
AND (@CveTipoTramite IS NULL OR C.CveTipoTramite = @CveTipoTramite)
|
||||
AND (@CveFraccionamiento IS NULL OR F.CveFraccionamiento = @CveFraccionamiento)
|
||||
AND (@CveFraccionamientoEtapa IS NULL OR C.CveFraccionamientoEtapa = @CveFraccionamientoEtapa)
|
||||
AND (NULLIF(@Estatus, '') IS NULL OR C.Estatus = @Estatus)
|
||||
AND
|
||||
(
|
||||
@ConSaldoPendiente IS NULL
|
||||
OR @ConSaldoPendiente = CASE
|
||||
WHEN ISNULL(T.SaldoPendiente, 0) > 0 THEN 1
|
||||
ELSE 0
|
||||
END
|
||||
)
|
||||
ORDER BY
|
||||
C.FechaConvenio DESC,
|
||||
C.CveConvenio DESC;
|
||||
|
||||
SET @Return = 1;
|
||||
END TRY
|
||||
BEGIN CATCH
|
||||
SET @ErrorMostrar =
|
||||
'Ocurrió un error al consultar los convenios; favor de contactar a Sistemas.';
|
||||
SET @ErrorTipo = 1;
|
||||
SET @Return = 0;
|
||||
|
||||
DECLARE @ErrorTecnico nvarchar(2048) = CONCAT(
|
||||
'Número: ', ERROR_NUMBER(),
|
||||
'; Procedimiento: ', COALESCE(
|
||||
ERROR_PROCEDURE(),
|
||||
'PA_Tra_ConvenioList'
|
||||
),
|
||||
'; Línea: ', ERROR_LINE(),
|
||||
'; Detalle: ', ERROR_MESSAGE()
|
||||
);
|
||||
|
||||
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
|
||||
END CATCH;
|
||||
END;
|
||||
|
||||
GO
|
||||
|
||||
CREATE OR ALTER PROCEDURE dbo.PA_Tra_ConvenioGet
|
||||
@CveConvenio int,
|
||||
@CveUsuarioEjecuta int,
|
||||
@ErrorMostrar varchar(max) OUTPUT,
|
||||
@ErrorTipo int OUTPUT,
|
||||
@Return bit OUTPUT
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON;
|
||||
|
||||
SELECT
|
||||
@ErrorMostrar = NULL,
|
||||
@ErrorTipo = 0,
|
||||
@Return = 0;
|
||||
|
||||
BEGIN TRY
|
||||
IF NOT EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM dbo.Convenios
|
||||
WHERE CveConvenio = @CveConvenio
|
||||
)
|
||||
BEGIN
|
||||
SET @ErrorMostrar = 'No se encontró el convenio solicitado.';
|
||||
SET @ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
;WITH PagadoRecibo AS
|
||||
(
|
||||
SELECT
|
||||
PR.CveConvenioRecibo,
|
||||
SUM(PR.ImporteAplicado) AS ImportePagado
|
||||
FROM dbo.ConveniosPagosRecibos AS PR
|
||||
GROUP BY PR.CveConvenioRecibo
|
||||
),
|
||||
Totales AS
|
||||
(
|
||||
SELECT
|
||||
D.CveConvenio,
|
||||
SUM(R.Importe) AS ImporteConvenio,
|
||||
SUM(ISNULL(P.ImportePagado, 0)) AS ImportePagado,
|
||||
SUM(R.Importe - ISNULL(P.ImportePagado, 0)) AS SaldoPendiente
|
||||
FROM dbo.ConveniosDetalle AS D
|
||||
LEFT JOIN dbo.ConveniosRecibos AS R ON R.CveConvenioDetalle = D.CveConvenioDetalle
|
||||
LEFT JOIN PagadoRecibo AS P ON P.CveConvenioRecibo = R.CveConvenioRecibo
|
||||
GROUP BY D.CveConvenio
|
||||
)
|
||||
SELECT
|
||||
C.CveConvenio,
|
||||
C.CveTipoTramite,
|
||||
TT.TipoTramite,
|
||||
C.CveCliente,
|
||||
C.CveFraccionamientoEtapa,
|
||||
C.NumeroConvenio,
|
||||
C.NumeroOficio,
|
||||
CL.Nombre AS Cliente,
|
||||
F.Fraccionamiento,
|
||||
FE.Etapa,
|
||||
C.Estatus,
|
||||
C.FechaConvenio,
|
||||
C.ViviendasAutorizadas,
|
||||
C.ViviendasEnConvenio,
|
||||
C.ViviendasPendientes,
|
||||
C.ViviendasContratadas,
|
||||
C.Observaciones,
|
||||
ISNULL(T.ImporteConvenio, 0) AS ImporteConvenio,
|
||||
ISNULL(T.ImportePagado, 0) AS ImportePagado,
|
||||
ISNULL(T.SaldoPendiente, 0) AS SaldoPendiente
|
||||
FROM dbo.Convenios AS C
|
||||
LEFT JOIN dbo.Tra_TiposTramite AS TT ON TT.CveTipoTramite = C.CveTipoTramite
|
||||
INNER JOIN dbo.FraccionamientosEtapas AS FE ON FE.CveFraccionamientoEtapa = C.CveFraccionamientoEtapa
|
||||
INNER JOIN dbo.Fraccionamientos AS F ON F.CveFraccionamiento = FE.CveFraccionamiento
|
||||
INNER JOIN dbo.Clientes AS CL ON CL.CveCliente = C.CveCliente
|
||||
LEFT JOIN Totales AS T ON T.CveConvenio = C.CveConvenio
|
||||
WHERE C.CveConvenio = @CveConvenio;
|
||||
|
||||
SELECT
|
||||
D.CveConvenioDetalle,
|
||||
D.CveConvenioConcepto,
|
||||
CC.Concepto,
|
||||
D.Importe,
|
||||
D.Tipo,
|
||||
D.NumeroPagos
|
||||
FROM dbo.ConveniosDetalle AS D
|
||||
INNER JOIN dbo.ConveniosConceptos AS CC ON CC.CveConvenioConcepto = D.CveConvenioConcepto
|
||||
WHERE D.CveConvenio = @CveConvenio
|
||||
ORDER BY D.CveConvenioDetalle;
|
||||
|
||||
;WITH Pagado AS
|
||||
(
|
||||
SELECT
|
||||
PR.CveConvenioRecibo,
|
||||
SUM(PR.ImporteAplicado) AS ImportePagado
|
||||
FROM dbo.ConveniosPagosRecibos AS PR
|
||||
GROUP BY PR.CveConvenioRecibo
|
||||
)
|
||||
SELECT
|
||||
R.CveConvenioRecibo,
|
||||
R.CveConvenioDetalle,
|
||||
R.NumeroRecibo,
|
||||
R.Importe,
|
||||
ISNULL(P.ImportePagado, 0) AS ImportePagado,
|
||||
R.Importe - ISNULL(P.ImportePagado, 0) AS SaldoPendiente,
|
||||
R.FechaVencimiento,
|
||||
R.Estatus
|
||||
FROM dbo.ConveniosRecibos AS R
|
||||
INNER JOIN dbo.ConveniosDetalle AS D ON D.CveConvenioDetalle = R.CveConvenioDetalle
|
||||
LEFT JOIN Pagado AS P ON P.CveConvenioRecibo = R.CveConvenioRecibo
|
||||
WHERE D.CveConvenio = @CveConvenio
|
||||
ORDER BY
|
||||
R.CveConvenioDetalle,
|
||||
R.FechaVencimiento,
|
||||
R.CveConvenioRecibo;
|
||||
|
||||
SET @Return = 1;
|
||||
END TRY
|
||||
BEGIN CATCH
|
||||
SET @ErrorMostrar =
|
||||
'Ocurrió un error al consultar el detalle del convenio; favor de contactar a Sistemas.';
|
||||
SET @ErrorTipo = 1;
|
||||
SET @Return = 0;
|
||||
|
||||
DECLARE @ErrorTecnico nvarchar(2048) = CONCAT(
|
||||
'Número: ', ERROR_NUMBER(),
|
||||
'; Procedimiento: ', COALESCE(
|
||||
ERROR_PROCEDURE(),
|
||||
'PA_Tra_ConvenioGet'
|
||||
),
|
||||
'; Línea: ', ERROR_LINE(),
|
||||
'; Detalle: ', ERROR_MESSAGE()
|
||||
);
|
||||
|
||||
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
|
||||
END CATCH;
|
||||
END;
|
||||
|
||||
GO
|
||||
BIN
DS01- CANTABRIA 2 ETAPA -052025-03.dwg
Normal file
BIN
DS01- CANTABRIA 2 ETAPA -052025-03.dwg
Normal file
Binary file not shown.
Binary file not shown.
146
Documentos_Compartidos_Etapa_Estructura_20261002.sql
Normal file
146
Documentos_Compartidos_Etapa_Estructura_20261002.sql
Normal file
@@ -0,0 +1,146 @@
|
||||
/*
|
||||
Consolidación de documentos compartidos por etapa y tipo de documento.
|
||||
Preparado para revisión; no ejecutado.
|
||||
Requiere la migración Etapa_TipoTramite_20261002 ya instalada.
|
||||
Ejecutar estructura y procedimientos en la misma transacción de instalación,
|
||||
detenerse ante errores y confirmar sólo tras verificar los resultados.
|
||||
No borra archivos ni filas históricas de documentos.
|
||||
Las copias idénticas quedan como versiones históricas; se conserva una vigente.
|
||||
Las configuraciones particulares idénticas se consolidan en una por etapa.
|
||||
Si hubo ediciones diferentes por trámite, se detiene para no elegir una
|
||||
aprobación, nota o marca de requerido arbitraria.
|
||||
Convenios no se modifican.
|
||||
*/
|
||||
SET NOCOUNT ON;
|
||||
|
||||
IF @@TRANCOUNT = 0
|
||||
THROW 51000, 'Abrir una transacción de instalación antes de ejecutar y revertirla ante cualquier error.', 1;
|
||||
|
||||
IF EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM dbo.Tra_DocumentosSolicitud AS D
|
||||
INNER JOIN dbo.Tra_DocumentosSolicitud AS O ON O.CveFraccionamientoEtapa = D.CveFraccionamientoEtapa
|
||||
AND O.CveTipoDocumento = D.CveTipoDocumento
|
||||
AND O.CveDocumentoSolicitud < D.CveDocumentoSolicitud
|
||||
WHERE D.EsActivo = 1
|
||||
AND O.EsActivo = 1
|
||||
AND EXISTS
|
||||
(
|
||||
SELECT D.NombreArchivo, D.NombreArchivoFisico, D.RutaArchivo,
|
||||
D.ContentType, D.TamanoBytes, D.ComentarioCliente,
|
||||
D.ComentarioAdministrativo, D.EsAprobado, D.CveUsuarioCarga,
|
||||
D.CveUsuarioRevisa, D.FechaRevision, D.FechaAlta, D.UltimaNota,
|
||||
D.FechaDocumento, D.FechaVencimiento, D.Vencido
|
||||
EXCEPT
|
||||
SELECT O.NombreArchivo, O.NombreArchivoFisico, O.RutaArchivo,
|
||||
O.ContentType, O.TamanoBytes, O.ComentarioCliente,
|
||||
O.ComentarioAdministrativo, O.EsAprobado, O.CveUsuarioCarga,
|
||||
O.CveUsuarioRevisa, O.FechaRevision, O.FechaAlta, O.UltimaNota,
|
||||
O.FechaDocumento, O.FechaVencimiento, O.Vencido
|
||||
)
|
||||
)
|
||||
THROW 51000, 'Hay versiones vigentes con datos distintos por trámite. Revisarlas antes de consolidar; no se eliminaron documentos.', 1;
|
||||
|
||||
IF EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM dbo.Tra_SolicitudDocumentoConfiguracion
|
||||
GROUP BY CveFraccionamientoEtapa, CveTipoDocumento
|
||||
HAVING MIN(CONVERT(int, EsRequerido)) <> MAX(CONVERT(int, EsRequerido))
|
||||
OR MIN(CONVERT(int, EsCliente)) <> MAX(CONVERT(int, EsCliente))
|
||||
OR MIN(CONVERT(int, TieneVigencia)) <> MAX(CONVERT(int, TieneVigencia))
|
||||
OR MIN(CONVERT(int, EsActivo)) <> MAX(CONVERT(int, EsActivo))
|
||||
OR MIN(Orden) <> MAX(Orden)
|
||||
)
|
||||
THROW 51000, 'Hay configuraciones manuales distintas por trámite. Resolverlas antes de consolidar la marca de la etapa.', 1;
|
||||
|
||||
IF EXISTS
|
||||
(
|
||||
SELECT 1 FROM sys.indexes
|
||||
WHERE object_id = OBJECT_ID('dbo.Tra_DocumentosSolicitud')
|
||||
AND name = 'UX_Tra_DocumentosSolicitud_Etapa_Tramite_Documento'
|
||||
)
|
||||
DROP INDEX UX_Tra_DocumentosSolicitud_Etapa_Tramite_Documento
|
||||
ON dbo.Tra_DocumentosSolicitud;
|
||||
|
||||
IF EXISTS
|
||||
(
|
||||
SELECT 1 FROM sys.indexes
|
||||
WHERE object_id = OBJECT_ID('dbo.Tra_SolicitudDocumentoConfiguracion')
|
||||
AND name = 'UX_Tra_ConfiguracionDocumento_Etapa_Tramite_Documento'
|
||||
)
|
||||
DROP INDEX UX_Tra_ConfiguracionDocumento_Etapa_Tramite_Documento
|
||||
ON dbo.Tra_SolicitudDocumentoConfiguracion;
|
||||
|
||||
-- Las columnas se conservan por compatibilidad de esquema; ya no son propietarias.
|
||||
ALTER TABLE dbo.Tra_DocumentosSolicitud ALTER COLUMN CveTipoTramite int NULL;
|
||||
ALTER TABLE dbo.Tra_SolicitudDocumentoConfiguracion ALTER COLUMN CveTipoTramite int NULL;
|
||||
|
||||
;WITH Versiones AS
|
||||
(
|
||||
SELECT
|
||||
CveDocumentoSolicitud,
|
||||
ROW_NUMBER() OVER
|
||||
(
|
||||
PARTITION BY CveFraccionamientoEtapa, CveTipoDocumento
|
||||
ORDER BY CveDocumentoSolicitud
|
||||
) AS NumeroVersion
|
||||
FROM dbo.Tra_DocumentosSolicitud
|
||||
WHERE EsActivo = 1
|
||||
)
|
||||
UPDATE D
|
||||
SET EsActivo = 0
|
||||
FROM dbo.Tra_DocumentosSolicitud AS D
|
||||
INNER JOIN Versiones AS V ON V.CveDocumentoSolicitud = D.CveDocumentoSolicitud
|
||||
WHERE V.NumeroVersion > 1;
|
||||
|
||||
-- Sólo se retiran copias de configuración cuyos valores son idénticos.
|
||||
;WITH Configuraciones AS
|
||||
(
|
||||
SELECT
|
||||
CveConfiguracionDocumento,
|
||||
ROW_NUMBER() OVER
|
||||
(
|
||||
PARTITION BY CveFraccionamientoEtapa, CveTipoDocumento
|
||||
ORDER BY CveConfiguracionDocumento
|
||||
) AS NumeroConfiguracion
|
||||
FROM dbo.Tra_SolicitudDocumentoConfiguracion
|
||||
)
|
||||
DELETE C
|
||||
FROM dbo.Tra_SolicitudDocumentoConfiguracion AS C
|
||||
INNER JOIN Configuraciones AS O ON O.CveConfiguracionDocumento = C.CveConfiguracionDocumento
|
||||
WHERE O.NumeroConfiguracion > 1;
|
||||
|
||||
UPDATE dbo.Tra_DocumentosSolicitud
|
||||
SET CveTipoTramite = NULL
|
||||
WHERE CveTipoTramite IS NOT NULL;
|
||||
|
||||
UPDATE dbo.Tra_SolicitudDocumentoConfiguracion
|
||||
SET CveTipoTramite = NULL
|
||||
WHERE CveTipoTramite IS NOT NULL;
|
||||
|
||||
IF NOT EXISTS
|
||||
(
|
||||
SELECT 1 FROM sys.indexes
|
||||
WHERE object_id = OBJECT_ID('dbo.Tra_DocumentosSolicitud')
|
||||
AND name = 'UX_Tra_DocumentosSolicitud_Etapa_TipoDocumento'
|
||||
)
|
||||
CREATE UNIQUE INDEX UX_Tra_DocumentosSolicitud_Etapa_TipoDocumento
|
||||
ON dbo.Tra_DocumentosSolicitud (CveFraccionamientoEtapa, CveTipoDocumento)
|
||||
WHERE EsActivo = 1;
|
||||
|
||||
IF NOT EXISTS
|
||||
(
|
||||
SELECT 1 FROM sys.indexes
|
||||
WHERE object_id = OBJECT_ID('dbo.Tra_SolicitudDocumentoConfiguracion')
|
||||
AND name = 'UX_Tra_ConfiguracionDocumento_Etapa_Documento'
|
||||
)
|
||||
CREATE UNIQUE INDEX UX_Tra_ConfiguracionDocumento_Etapa_Documento
|
||||
ON dbo.Tra_SolicitudDocumentoConfiguracion (CveFraccionamientoEtapa, CveTipoDocumento);
|
||||
|
||||
IF EXISTS (SELECT 1 FROM sys.foreign_keys WHERE name = 'FK_Tra_DocumentosSolicitud_TipoTramite')
|
||||
ALTER TABLE dbo.Tra_DocumentosSolicitud DROP CONSTRAINT FK_Tra_DocumentosSolicitud_TipoTramite;
|
||||
|
||||
IF EXISTS (SELECT 1 FROM sys.foreign_keys WHERE name = 'FK_Tra_ConfiguracionDocumento_TipoTramite')
|
||||
ALTER TABLE dbo.Tra_SolicitudDocumentoConfiguracion DROP CONSTRAINT FK_Tra_ConfiguracionDocumento_TipoTramite;
|
||||
2276
Documentos_Compartidos_Etapa_Procedimientos_20261002.sql
Normal file
2276
Documentos_Compartidos_Etapa_Procedimientos_20261002.sql
Normal file
File diff suppressed because it is too large
Load Diff
109
Documentos_Etapa_Estructura_20260927.sql
Normal file
109
Documentos_Etapa_Estructura_20260927.sql
Normal file
@@ -0,0 +1,109 @@
|
||||
/* Preparación únicamente. Ejecutar junto con los PA dentro de una transacción
|
||||
de instalación administrada por el ejecutor, después de respaldo y autorización.
|
||||
No mueve archivos ni elimina documentos históricos. */
|
||||
SET NOCOUNT ON;
|
||||
|
||||
IF EXISTS
|
||||
(
|
||||
SELECT CveFraccionamientoEtapa, CveTipoDocumento
|
||||
FROM dbo.Tra_DocumentosSolicitud
|
||||
WHERE EsActivo = 1
|
||||
GROUP BY CveFraccionamientoEtapa, CveTipoDocumento
|
||||
HAVING COUNT(*) > 1
|
||||
)
|
||||
THROW 51000, 'Existen versiones activas duplicadas por etapa/tipo. Resolver su versión vigente antes de instalar; no se eliminarán archivos.', 1;
|
||||
|
||||
IF COL_LENGTH('dbo.Tra_DocumentosSolicitud', 'Vencido') IS NULL
|
||||
ALTER TABLE dbo.Tra_DocumentosSolicitud
|
||||
ADD Vencido bit NOT NULL
|
||||
CONSTRAINT DF_Tra_DocumentosSolicitud_Vencido DEFAULT (0);
|
||||
|
||||
IF EXISTS
|
||||
(
|
||||
SELECT 1 FROM sys.indexes
|
||||
WHERE object_id = OBJECT_ID('dbo.Tra_DocumentosSolicitud')
|
||||
AND name = 'UX_Tra_DocumentosSolicitud_Solicitud_TipoDocumento'
|
||||
)
|
||||
DROP INDEX UX_Tra_DocumentosSolicitud_Solicitud_TipoDocumento
|
||||
ON dbo.Tra_DocumentosSolicitud;
|
||||
|
||||
ALTER TABLE dbo.Tra_DocumentosSolicitud ALTER COLUMN CveSolicitud int NULL;
|
||||
|
||||
IF NOT EXISTS
|
||||
(
|
||||
SELECT 1 FROM sys.indexes
|
||||
WHERE object_id = OBJECT_ID('dbo.Tra_DocumentosSolicitud')
|
||||
AND name = 'UX_Tra_DocumentosSolicitud_Etapa_TipoDocumento'
|
||||
)
|
||||
CREATE UNIQUE INDEX UX_Tra_DocumentosSolicitud_Etapa_TipoDocumento
|
||||
ON dbo.Tra_DocumentosSolicitud (CveFraccionamientoEtapa, CveTipoDocumento)
|
||||
WHERE EsActivo = 1;
|
||||
|
||||
IF COL_LENGTH('dbo.Tra_SolicitudDocumentoConfiguracion', 'CveFraccionamientoEtapa') IS NULL
|
||||
ALTER TABLE dbo.Tra_SolicitudDocumentoConfiguracion
|
||||
ADD CveFraccionamientoEtapa int NULL;
|
||||
GO
|
||||
|
||||
UPDATE C
|
||||
SET CveFraccionamientoEtapa = S.CveFraccionamientoEtapa
|
||||
FROM dbo.Tra_SolicitudDocumentoConfiguracion AS C
|
||||
INNER JOIN dbo.Tra_Solicitudes AS S ON S.CveSolicitud = C.CveSolicitud
|
||||
WHERE C.CveFraccionamientoEtapa IS NULL;
|
||||
|
||||
ALTER TABLE dbo.Tra_SolicitudDocumentoConfiguracion
|
||||
ALTER COLUMN CveFraccionamientoEtapa int NOT NULL;
|
||||
|
||||
IF COL_LENGTH('dbo.Tra_SolicitudDocumentoConfiguracion', 'CveConfiguracionDocumento') IS NULL
|
||||
BEGIN
|
||||
ALTER TABLE dbo.Tra_SolicitudDocumentoConfiguracion
|
||||
DROP CONSTRAINT PK_Tra_SolicitudDocumentoConfiguracion;
|
||||
ALTER TABLE dbo.Tra_SolicitudDocumentoConfiguracion
|
||||
ALTER COLUMN CveSolicitud int NULL;
|
||||
ALTER TABLE dbo.Tra_SolicitudDocumentoConfiguracion
|
||||
ADD CveConfiguracionDocumento int IDENTITY(1, 1) NOT NULL
|
||||
CONSTRAINT PK_Tra_SolicitudDocumentoConfiguracion PRIMARY KEY;
|
||||
END;
|
||||
|
||||
IF NOT EXISTS
|
||||
(
|
||||
SELECT 1 FROM sys.foreign_keys
|
||||
WHERE name = 'FK_Tra_SolicitudDocumentoConfiguracion_Etapa'
|
||||
)
|
||||
ALTER TABLE dbo.Tra_SolicitudDocumentoConfiguracion WITH CHECK
|
||||
ADD CONSTRAINT FK_Tra_SolicitudDocumentoConfiguracion_Etapa
|
||||
FOREIGN KEY (CveFraccionamientoEtapa)
|
||||
REFERENCES dbo.FraccionamientosEtapas (CveFraccionamientoEtapa);
|
||||
|
||||
IF NOT EXISTS
|
||||
(
|
||||
SELECT 1 FROM sys.indexes
|
||||
WHERE object_id = OBJECT_ID('dbo.Tra_SolicitudDocumentoConfiguracion')
|
||||
AND name = 'UX_Tra_ConfiguracionDocumento_Solicitud'
|
||||
)
|
||||
BEGIN
|
||||
CREATE UNIQUE INDEX UX_Tra_ConfiguracionDocumento_Solicitud
|
||||
ON dbo.Tra_SolicitudDocumentoConfiguracion (CveSolicitud, CveTipoDocumento)
|
||||
WHERE CveSolicitud IS NOT NULL;
|
||||
CREATE UNIQUE INDEX UX_Tra_ConfiguracionDocumento_Etapa
|
||||
ON dbo.Tra_SolicitudDocumentoConfiguracion (CveFraccionamientoEtapa, CveTipoDocumento)
|
||||
WHERE CveSolicitud IS NULL;
|
||||
END;
|
||||
|
||||
INSERT INTO dbo.Bit_Campos
|
||||
(CveTabla, NombreCampoSQL, NombreMostrar, MostrarEnBitacora, TipoDatoSQL, Activo)
|
||||
SELECT T.CveTabla, C.Campo, C.Titulo, 1, C.Tipo, 1
|
||||
FROM dbo.Bit_Tablas AS T
|
||||
INNER JOIN
|
||||
(
|
||||
VALUES
|
||||
('Tra_DocumentosSolicitud', 'Vencido', 'Requiere renovación', 'bit'),
|
||||
('Tra_DocumentosSolicitud', 'EsActivo', 'Versión vigente', 'bit'),
|
||||
('Tra_SolicitudDocumentoConfiguracion', 'CveFraccionamientoEtapa', 'Etapa', 'int'),
|
||||
('Tra_SolicitudDocumentoConfiguracion', 'CveConfiguracionDocumento', 'Requerimiento', 'int')
|
||||
) AS C(Tabla, Campo, Titulo, Tipo) ON C.Tabla = T.NombreTablaSQL
|
||||
WHERE NOT EXISTS
|
||||
(
|
||||
SELECT 1 FROM dbo.Bit_Campos AS B
|
||||
WHERE B.CveTabla = T.CveTabla AND B.NombreCampoSQL = C.Campo
|
||||
);
|
||||
GO
|
||||
127
Documentos_Etapa_Implementacion_20260927.md
Normal file
127
Documentos_Etapa_Implementacion_20260927.md
Normal file
@@ -0,0 +1,127 @@
|
||||
# Documentos compartidos por etapa
|
||||
|
||||
## Estado de la entrega
|
||||
|
||||
Código preparado y cambios de BD instalados el 27 de septiembre de 2026 en
|
||||
`SIG_PlataformaDesarolladores`, con autorización del usuario. Los dos scripts se
|
||||
ejecutaron en una sola transacción: dos lotes de estructura y trece de procedimientos.
|
||||
El recálculo inicial se ejecutó mediante el comando del paso existente del job,
|
||||
comprobando sus parámetros de salida. Las consultas de verificación no detectaron
|
||||
inconsistencias. La base contenía cero documentos y cero configuraciones particulares;
|
||||
las pruebas integradas de las pantallas indicadas al final siguen pendientes.
|
||||
|
||||
Respaldo previo `COPY_ONLY`, con `CHECKSUM` y `RESTORE VERIFYONLY WITH CHECKSUM` correctos:
|
||||
`E:\SqlServer2022\MSSQL16.MSSQLSERVER\MSSQL\Backup\SIG_PlataformaDesarolladores_documentos_etapa_20260927_092116.bak`.
|
||||
|
||||
El código y los PA deben desplegarse coordinadamente: las firmas nuevas no son compatibles
|
||||
con los PA anteriores.
|
||||
|
||||
## Estructura reutilizada
|
||||
|
||||
- `Tra_DocumentosSolicitud` conserva su nombre y su identidad. La pertenencia es
|
||||
`CveFraccionamientoEtapa + CveTipoDocumento`. `CveSolicitud` queda como origen opcional.
|
||||
- El índice filtrado permite una sola versión activa por etapa/tipo. Las renovaciones
|
||||
ordinarias conservan el registro y archivo anterior, con `EsActivo = 0`, y crean una
|
||||
nueva versión pendiente de revisión. El archivo nuevo tiene un nombre único en
|
||||
`Documentos/Clientes/{cliente}/Etapas/{etapa}/`.
|
||||
- GIS mantiene su mecanismo específico de reemplazo y su nombre físico establecido.
|
||||
No se crean supuestas versiones históricas que apunten al mismo archivo GIS sobrescrito.
|
||||
- Los históricos no se eliminan ni se reactivan al eliminar la versión actual. El nuevo
|
||||
tablero muestra la versión vigente; no agrega una pantalla de historial.
|
||||
- `Tra_TiposTramiteDocumento` permanece como relación general de requisitos.
|
||||
- `Tra_SolicitudDocumentoConfiguracion` agrega etapa y clave propia para permitir
|
||||
`CveSolicitud = NULL`. La configuración particular sigue sustituyendo a la general
|
||||
en su solicitud. La configuración sin trámite pertenece únicamente a la etapa.
|
||||
|
||||
## Requerimientos y vigencia
|
||||
|
||||
El requisito actual resulta de la unión de configuraciones efectivas de solicitudes
|
||||
no finales y requisitos manuales activos sin solicitud. Se conserva `EsFinal` como
|
||||
regla existente: también el estatus `Revisando` está marcado como final en esta BD.
|
||||
No se modifican estatus ni sus definiciones.
|
||||
|
||||
`Vencido = 1` sólo si la versión está activa, su fecha ya pasó y actualmente es requerida.
|
||||
La fecha es inclusiva: un documento que vence hoy todavía no se considera expirado.
|
||||
Se usa `US Mountain Standard Time`, equivalente a la hora de Hermosillo.
|
||||
|
||||
Las lecturas no ejecutan el job ni actualizan documentos. Calculan la presentación
|
||||
con la fecha y los requisitos actuales, de manera que no dependa de esperar al siguiente
|
||||
job. La marca persistida se actualiza tras cambios de archivo, revisión, requisitos,
|
||||
alta manual de trámite y cambio de estatus; la revisión global diaria también la corrige.
|
||||
Cambios de configuración hechos fuera de esos servicios se reflejan en el listado y
|
||||
quedan persistidos en la siguiente ejecución nocturna.
|
||||
|
||||
El PA de listado tiene dos usos: el tablero devuelve una entrada por etapa/tipo;
|
||||
el seguimiento devuelve los requisitos por solicitud apuntando al mismo identificador
|
||||
de archivo. Esas referencias no crean registros ni copias físicas por trámite.
|
||||
|
||||
## Interfaz
|
||||
|
||||
`DocumentosEtapa.ascx` se usa en `DetalleEtapa.ascx` y `FraccionamientoDetalle.aspx`.
|
||||
`EtapaDetalle.aspx` conserva la redirección existente al panel de detalle real.
|
||||
|
||||
Las cortinas siempre aparecen en este orden: Pendientes, Por aprobar, Aprobados, Vencidos.
|
||||
Los rechazados se muestran en Por aprobar con su estado y motivo. Un aprobado expirado
|
||||
sin requisito sigue en Aprobados, con su fecha en rojo. Se conservan los filtros del
|
||||
fraccionamiento y la administración GIS existente.
|
||||
|
||||
La solicitud adicional permite elegir etapa, tipo y trámite opcional. Sólo los usuarios
|
||||
de Agua de Hermosillo pueden guardarla; se comprueba en servicio y PA. Un archivo ya
|
||||
vigente satisface todos los requisitos correspondientes sin volver a pedir una copia.
|
||||
|
||||
Las cargas usan postback completo; las demás acciones son parciales. Cada instancia
|
||||
inicializa sus cortinas una sola vez. El panel padre actualiza cambios de etapa o filtros;
|
||||
los paneles del control actualizan sus operaciones y su formulario. Los recursos se
|
||||
cargan globalmente mediante los bundles existentes.
|
||||
|
||||
## Secuencia de instalación
|
||||
|
||||
1. Respaldar la base y conservar una copia coordinada del código antes del despliegue.
|
||||
2. Ejecutar `Documentos_Etapa_Estructura_20260927.sql` y después
|
||||
`Documentos_Etapa_Procedimientos_20260927.sql`, separando los lotes `GO`, dentro de
|
||||
una transacción administrada por el ejecutor de instalación. Ante un error, no continuar.
|
||||
3. La estructura impide instalar si existen dos versiones activas de un tipo en la misma
|
||||
etapa; no elige ni elimina documentos automáticamente. En la inspección previa había
|
||||
cero documentos y cero configuraciones particulares; comprobar nuevamente al instalar.
|
||||
4. Mantener el job existente `Job_VerificaVigencias` y su horario
|
||||
`Horario_VerificaVigencias_0300`: diariamente a las 03:00. Ambos estaban habilitados
|
||||
y el servidor estaba en `US Mountain Standard Time`. No crear un segundo job.
|
||||
5. Con autorización de ejecución, realizar el recálculo inicial y ejecutar las consultas
|
||||
de `Documentos_Etapa_Verificacion_20260927.sql`. El ejecutor debe comprobar `@Return`
|
||||
y `@ErrorTipo`; el paso existente del job ya administra su transacción y esos resultados.
|
||||
6. Desplegar/verificar el código junto con los PA actualizados y probar los casos siguientes.
|
||||
|
||||
No hay lógica nueva para detener supervisiones. Los procedimientos no administran
|
||||
transacciones; permanecen en servicios C# y en el ejecutor externo del job.
|
||||
|
||||
## Validaciones realizadas
|
||||
|
||||
- Precompilación completa con `aspnet_compiler.exe` de .NET Framework 4.8: correcta.
|
||||
- Análisis sintáctico con `TSql160Parser` de SQL Server 2022: sin errores.
|
||||
- Siete casos ejecutados contra el modelo C#: pendiente, por revisar, rechazado,
|
||||
aprobado vigente, expirado requerido, expirado no requerido y sin revisión expirado
|
||||
no requerido: correctos.
|
||||
- JavaScript: sintaxis correcta; pruebas de inicialización por instancia, inclusión
|
||||
repetida, postback parcial, persistencia de cortinas y etapa fija: correctas.
|
||||
- Instalación SQL y recálculo inicial: correctos. Las seis consultas de inconsistencias
|
||||
devolvieron cero filas, incluidos los siete casos de agrupación.
|
||||
- Job y horario habilitados: ejecución diaria a las 03:00, servidor en
|
||||
`US Mountain Standard Time`. Se conservó la configuración existente.
|
||||
|
||||
## Pruebas integradas pendientes
|
||||
|
||||
- Abrir etapa y fraccionamiento con usuario cliente y con usuario de Agua; recorrer el
|
||||
ciclo completo hasta PreRender con la master y con varias instancias del control.
|
||||
- Crear dos trámites que pidan el mismo tipo; cargar una vez y comprobar que ambos
|
||||
usan la misma clave y ruta, mientras el tablero muestra una sola fila.
|
||||
- Solicitar un tipo sin trámite; cargarlo y aprobarlo desde ambas vistas.
|
||||
- Rechazar y renovar; comprobar que se conserva la versión anterior, se reinicia la
|
||||
revisión de la nueva y se actualizan los trámites afectados.
|
||||
- Expirar un documento requerido, finalizar los trámites y volver a abrir otro:
|
||||
verificar `Vencido` 1 → 0 → 1 y la fecha roja aun cuando no esté en Vencidos.
|
||||
- Verificar autorización de clientes, solicitudes manuales manipuladas, cargas
|
||||
simultáneas, restauración transaccional ante fallo y continuidad de GIS.
|
||||
- Comprobar el efecto del job con documentos vencidos; el recálculo inicial terminó
|
||||
correctamente con el inventario vacío.
|
||||
|
||||
La compilación y el analizador SQL no sustituyen estas pruebas contra la BD instalada.
|
||||
1605
Documentos_Etapa_Procedimientos_20260927.sql
Normal file
1605
Documentos_Etapa_Procedimientos_20260927.sql
Normal file
File diff suppressed because it is too large
Load Diff
340
Documentos_Etapa_TipoTramite_Estructura_20261002.sql
Normal file
340
Documentos_Etapa_TipoTramite_Estructura_20261002.sql
Normal file
@@ -0,0 +1,340 @@
|
||||
/*
|
||||
Preparación únicamente; no ejecutado.
|
||||
Requiere Documentos_Etapa_Estructura_20260927.sql ya instalado.
|
||||
Instalar estructura, procedimientos y aplicación en una ventana coordinada.
|
||||
El ejecutor debe abrir una transacción, detenerse y revertir ante cualquier
|
||||
error, y confirmar sólo después de instalar y verificar todos los scripts.
|
||||
Los registros sin solicitud se conservan en todos los tipos activos aplicables.
|
||||
Se duplica únicamente la metadata: archivos, fechas, revisiones y versiones
|
||||
conservan su contenido. El identificador original queda en el menor tipo;
|
||||
no significa que ese tipo tenga prioridad funcional.
|
||||
GIS histórico 2 se normaliza al documento configurado 1016 / trámite 12.
|
||||
Las asignaciones directas existentes no vuelven a expandirse al reinstalar.
|
||||
*/
|
||||
SET NOCOUNT ON;
|
||||
|
||||
IF @@TRANCOUNT = 0
|
||||
THROW 51000, 'Abrir una transacción de instalación antes de ejecutar este script y revertirla ante cualquier error.', 1;
|
||||
|
||||
SELECT
|
||||
D.CveDocumentoSolicitud,
|
||||
D.CveFraccionamientoEtapa,
|
||||
CASE WHEN D.CveTipoDocumento = 2 THEN 1016 ELSE D.CveTipoDocumento END AS CveTipoDocumento,
|
||||
S.CveTipoTramite AS TipoSolicitud,
|
||||
CONVERT(int, NULL) AS TipoDirecto
|
||||
INTO #OrigenDocumentos
|
||||
FROM dbo.Tra_DocumentosSolicitud AS D
|
||||
LEFT JOIN dbo.Tra_Solicitudes AS S ON S.CveSolicitud = D.CveSolicitud;
|
||||
|
||||
IF COL_LENGTH('dbo.Tra_DocumentosSolicitud', 'CveTipoTramite') IS NOT NULL
|
||||
EXEC sys.sp_executesql N'
|
||||
UPDATE O
|
||||
SET TipoDirecto = D.CveTipoTramite,
|
||||
CveTipoDocumento = D.CveTipoDocumento
|
||||
FROM #OrigenDocumentos AS O
|
||||
INNER JOIN dbo.Tra_DocumentosSolicitud AS D ON D.CveDocumentoSolicitud = O.CveDocumentoSolicitud
|
||||
WHERE D.CveTipoTramite IS NOT NULL;';
|
||||
|
||||
SELECT DISTINCT
|
||||
O.CveDocumentoSolicitud,
|
||||
O.CveFraccionamientoEtapa,
|
||||
O.CveTipoDocumento,
|
||||
COALESCE(O.TipoDirecto, O.TipoSolicitud, T.CveTipoTramite) AS CveTipoTramite
|
||||
INTO #TiposDocumentos
|
||||
FROM #OrigenDocumentos AS O
|
||||
LEFT JOIN dbo.Tra_TiposTramiteDocumento AS T ON T.CveTipoDocumento = O.CveTipoDocumento
|
||||
AND T.EsActivo = 1
|
||||
AND O.TipoDirecto IS NULL
|
||||
AND O.TipoSolicitud IS NULL;
|
||||
|
||||
IF EXISTS (SELECT 1 FROM #TiposDocumentos WHERE CveTipoTramite IS NULL)
|
||||
BEGIN
|
||||
SELECT *
|
||||
FROM #TiposDocumentos
|
||||
WHERE CveTipoTramite IS NULL;
|
||||
THROW 51000, 'Hay documentos sin tipo de trámite aplicable. Resolver su correspondencia y revertir la instalación.', 1;
|
||||
END;
|
||||
|
||||
SELECT
|
||||
D.CveConfiguracionDocumento,
|
||||
D.CveFraccionamientoEtapa,
|
||||
CASE WHEN D.CveTipoDocumento = 2 THEN 1016 ELSE D.CveTipoDocumento END AS CveTipoDocumento,
|
||||
S.CveTipoTramite AS TipoSolicitud,
|
||||
CONVERT(int, NULL) AS TipoDirecto
|
||||
INTO #OrigenConfiguraciones
|
||||
FROM dbo.Tra_SolicitudDocumentoConfiguracion AS D
|
||||
LEFT JOIN dbo.Tra_Solicitudes AS S ON S.CveSolicitud = D.CveSolicitud;
|
||||
|
||||
IF COL_LENGTH('dbo.Tra_SolicitudDocumentoConfiguracion', 'CveTipoTramite') IS NOT NULL
|
||||
EXEC sys.sp_executesql N'
|
||||
UPDATE O
|
||||
SET TipoDirecto = D.CveTipoTramite,
|
||||
CveTipoDocumento = D.CveTipoDocumento
|
||||
FROM #OrigenConfiguraciones AS O
|
||||
INNER JOIN dbo.Tra_SolicitudDocumentoConfiguracion AS D ON D.CveConfiguracionDocumento = O.CveConfiguracionDocumento
|
||||
WHERE D.CveTipoTramite IS NOT NULL;';
|
||||
|
||||
SELECT DISTINCT
|
||||
O.CveConfiguracionDocumento,
|
||||
O.CveFraccionamientoEtapa,
|
||||
O.CveTipoDocumento,
|
||||
COALESCE(O.TipoDirecto, O.TipoSolicitud, T.CveTipoTramite) AS CveTipoTramite
|
||||
INTO #TiposConfiguraciones
|
||||
FROM #OrigenConfiguraciones AS O
|
||||
LEFT JOIN dbo.Tra_TiposTramiteDocumento AS T ON T.CveTipoDocumento = O.CveTipoDocumento
|
||||
AND T.EsActivo = 1
|
||||
AND O.TipoDirecto IS NULL
|
||||
AND O.TipoSolicitud IS NULL;
|
||||
|
||||
IF EXISTS (SELECT 1 FROM #TiposConfiguraciones WHERE CveTipoTramite IS NULL)
|
||||
BEGIN
|
||||
SELECT *
|
||||
FROM #TiposConfiguraciones
|
||||
WHERE CveTipoTramite IS NULL;
|
||||
THROW 51000, 'Hay configuraciones sin tipo de trámite aplicable. Resolver su correspondencia y revertir la instalación.', 1;
|
||||
END;
|
||||
|
||||
-- Nunca reemplazar una configuración específica con otra compartida.
|
||||
IF EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM #TiposConfiguraciones
|
||||
GROUP BY CveFraccionamientoEtapa, CveTipoTramite, CveTipoDocumento
|
||||
HAVING COUNT(*) > 1
|
||||
)
|
||||
BEGIN
|
||||
SELECT CveFraccionamientoEtapa, CveTipoTramite, CveTipoDocumento
|
||||
FROM #TiposConfiguraciones
|
||||
GROUP BY CveFraccionamientoEtapa, CveTipoTramite, CveTipoDocumento
|
||||
HAVING COUNT(*) > 1;
|
||||
THROW 51000, 'Hay configuraciones que convergen al mismo destino. Resolverlas conservando sus valores antes de instalar.', 1;
|
||||
END;
|
||||
|
||||
IF EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM #TiposDocumentos AS T
|
||||
INNER JOIN dbo.Tra_DocumentosSolicitud AS D ON D.CveDocumentoSolicitud = T.CveDocumentoSolicitud
|
||||
WHERE D.EsActivo = 1
|
||||
GROUP BY T.CveFraccionamientoEtapa, T.CveTipoTramite, T.CveTipoDocumento
|
||||
HAVING COUNT(*) > 1
|
||||
)
|
||||
THROW 51000, 'Hay versiones vigentes que convergen al mismo destino. Resolver su vigencia antes de instalar.', 1;
|
||||
|
||||
IF EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM sys.indexes
|
||||
WHERE object_id = OBJECT_ID('dbo.Tra_DocumentosSolicitud')
|
||||
AND name = 'UX_Tra_DocumentosSolicitud_Etapa_TipoDocumento'
|
||||
)
|
||||
DROP INDEX UX_Tra_DocumentosSolicitud_Etapa_TipoDocumento ON dbo.Tra_DocumentosSolicitud;
|
||||
|
||||
IF EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM sys.indexes
|
||||
WHERE object_id = OBJECT_ID('dbo.Tra_SolicitudDocumentoConfiguracion')
|
||||
AND name = 'UX_Tra_ConfiguracionDocumento_Solicitud'
|
||||
)
|
||||
DROP INDEX UX_Tra_ConfiguracionDocumento_Solicitud ON dbo.Tra_SolicitudDocumentoConfiguracion;
|
||||
|
||||
IF EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM sys.indexes
|
||||
WHERE object_id = OBJECT_ID('dbo.Tra_SolicitudDocumentoConfiguracion')
|
||||
AND name = 'UX_Tra_ConfiguracionDocumento_Etapa'
|
||||
)
|
||||
DROP INDEX UX_Tra_ConfiguracionDocumento_Etapa ON dbo.Tra_SolicitudDocumentoConfiguracion;
|
||||
|
||||
IF COL_LENGTH('dbo.Tra_DocumentosSolicitud', 'CveTipoTramite') IS NULL
|
||||
ALTER TABLE dbo.Tra_DocumentosSolicitud ADD CveTipoTramite int NULL;
|
||||
|
||||
-- El SQL dinámico compila después de agregar la columna.
|
||||
EXEC sys.sp_executesql N'
|
||||
;WITH DestinoOriginal AS
|
||||
(
|
||||
SELECT CveDocumentoSolicitud, MIN(CveTipoTramite) AS CveTipoTramite
|
||||
FROM #TiposDocumentos
|
||||
GROUP BY CveDocumentoSolicitud
|
||||
)
|
||||
UPDATE D
|
||||
SET CveTipoTramite = T.CveTipoTramite,
|
||||
CveTipoDocumento = T.CveTipoDocumento
|
||||
FROM dbo.Tra_DocumentosSolicitud AS D
|
||||
INNER JOIN DestinoOriginal AS O ON O.CveDocumentoSolicitud = D.CveDocumentoSolicitud
|
||||
INNER JOIN #TiposDocumentos AS T ON T.CveDocumentoSolicitud = O.CveDocumentoSolicitud
|
||||
AND T.CveTipoTramite = O.CveTipoTramite;
|
||||
|
||||
INSERT INTO dbo.Tra_DocumentosSolicitud
|
||||
(
|
||||
CveFraccionamientoEtapa,
|
||||
CveTipoDocumento,
|
||||
CveTipoTramite,
|
||||
CveSolicitud,
|
||||
NombreArchivo,
|
||||
NombreArchivoFisico,
|
||||
RutaArchivo,
|
||||
ContentType,
|
||||
TamanoBytes,
|
||||
ComentarioCliente,
|
||||
ComentarioAdministrativo,
|
||||
EsAprobado,
|
||||
CveUsuarioCarga,
|
||||
CveUsuarioRevisa,
|
||||
FechaRevision,
|
||||
FechaAlta,
|
||||
UltimaNota,
|
||||
FechaDocumento,
|
||||
FechaVencimiento,
|
||||
EsActivo,
|
||||
Vencido
|
||||
)
|
||||
SELECT
|
||||
T.CveFraccionamientoEtapa,
|
||||
T.CveTipoDocumento,
|
||||
T.CveTipoTramite,
|
||||
D.CveSolicitud,
|
||||
D.NombreArchivo,
|
||||
D.NombreArchivoFisico,
|
||||
D.RutaArchivo,
|
||||
D.ContentType,
|
||||
D.TamanoBytes,
|
||||
D.ComentarioCliente,
|
||||
D.ComentarioAdministrativo,
|
||||
D.EsAprobado,
|
||||
D.CveUsuarioCarga,
|
||||
D.CveUsuarioRevisa,
|
||||
D.FechaRevision,
|
||||
D.FechaAlta,
|
||||
D.UltimaNota,
|
||||
D.FechaDocumento,
|
||||
D.FechaVencimiento,
|
||||
D.EsActivo,
|
||||
D.Vencido
|
||||
FROM dbo.Tra_DocumentosSolicitud AS D
|
||||
INNER JOIN #TiposDocumentos AS T ON T.CveDocumentoSolicitud = D.CveDocumentoSolicitud
|
||||
WHERE T.CveTipoTramite <> D.CveTipoTramite;
|
||||
|
||||
ALTER TABLE dbo.Tra_DocumentosSolicitud ALTER COLUMN CveTipoTramite int NOT NULL;';
|
||||
|
||||
IF COL_LENGTH('dbo.Tra_SolicitudDocumentoConfiguracion', 'CveTipoTramite') IS NULL
|
||||
ALTER TABLE dbo.Tra_SolicitudDocumentoConfiguracion ADD CveTipoTramite int NULL;
|
||||
|
||||
-- El SQL dinámico compila después de agregar la columna.
|
||||
EXEC sys.sp_executesql N'
|
||||
;WITH DestinoOriginal AS
|
||||
(
|
||||
SELECT CveConfiguracionDocumento, MIN(CveTipoTramite) AS CveTipoTramite
|
||||
FROM #TiposConfiguraciones
|
||||
GROUP BY CveConfiguracionDocumento
|
||||
)
|
||||
UPDATE D
|
||||
SET CveTipoTramite = T.CveTipoTramite,
|
||||
CveTipoDocumento = T.CveTipoDocumento
|
||||
FROM dbo.Tra_SolicitudDocumentoConfiguracion AS D
|
||||
INNER JOIN DestinoOriginal AS O ON O.CveConfiguracionDocumento = D.CveConfiguracionDocumento
|
||||
INNER JOIN #TiposConfiguraciones AS T ON T.CveConfiguracionDocumento = O.CveConfiguracionDocumento
|
||||
AND T.CveTipoTramite = O.CveTipoTramite;
|
||||
|
||||
INSERT INTO dbo.Tra_SolicitudDocumentoConfiguracion
|
||||
(
|
||||
CveFraccionamientoEtapa,
|
||||
CveTipoDocumento,
|
||||
CveTipoTramite,
|
||||
CveSolicitud,
|
||||
EsRequerido,
|
||||
EsCliente,
|
||||
TieneVigencia,
|
||||
Orden,
|
||||
EsActivo
|
||||
)
|
||||
SELECT
|
||||
T.CveFraccionamientoEtapa,
|
||||
T.CveTipoDocumento,
|
||||
T.CveTipoTramite,
|
||||
D.CveSolicitud,
|
||||
D.EsRequerido,
|
||||
D.EsCliente,
|
||||
D.TieneVigencia,
|
||||
D.Orden,
|
||||
D.EsActivo
|
||||
FROM dbo.Tra_SolicitudDocumentoConfiguracion AS D
|
||||
INNER JOIN #TiposConfiguraciones AS T ON T.CveConfiguracionDocumento = D.CveConfiguracionDocumento
|
||||
WHERE T.CveTipoTramite <> D.CveTipoTramite;
|
||||
|
||||
ALTER TABLE dbo.Tra_SolicitudDocumentoConfiguracion ALTER COLUMN CveTipoTramite int NOT NULL;';
|
||||
|
||||
IF NOT EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM sys.indexes
|
||||
WHERE object_id = OBJECT_ID('dbo.Tra_DocumentosSolicitud')
|
||||
AND name = 'UX_Tra_DocumentosSolicitud_Etapa_Tramite_Documento'
|
||||
)
|
||||
EXEC sys.sp_executesql N'
|
||||
CREATE UNIQUE INDEX UX_Tra_DocumentosSolicitud_Etapa_Tramite_Documento
|
||||
ON dbo.Tra_DocumentosSolicitud (CveFraccionamientoEtapa, CveTipoTramite, CveTipoDocumento)
|
||||
WHERE EsActivo = 1;';
|
||||
|
||||
IF NOT EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM sys.indexes
|
||||
WHERE object_id = OBJECT_ID('dbo.Tra_SolicitudDocumentoConfiguracion')
|
||||
AND name = 'UX_Tra_ConfiguracionDocumento_Etapa_Tramite_Documento'
|
||||
)
|
||||
EXEC sys.sp_executesql N'
|
||||
CREATE UNIQUE INDEX UX_Tra_ConfiguracionDocumento_Etapa_Tramite_Documento
|
||||
ON dbo.Tra_SolicitudDocumentoConfiguracion
|
||||
(CveFraccionamientoEtapa, CveTipoTramite, CveTipoDocumento);';
|
||||
|
||||
IF NOT EXISTS (SELECT 1 FROM sys.foreign_keys WHERE name = 'FK_Tra_DocumentosSolicitud_TipoTramite')
|
||||
EXEC sys.sp_executesql N'
|
||||
ALTER TABLE dbo.Tra_DocumentosSolicitud WITH CHECK
|
||||
ADD CONSTRAINT FK_Tra_DocumentosSolicitud_TipoTramite
|
||||
FOREIGN KEY (CveTipoTramite) REFERENCES dbo.Tra_TiposTramite (CveTipoTramite);';
|
||||
|
||||
IF NOT EXISTS (SELECT 1 FROM sys.foreign_keys WHERE name = 'FK_Tra_ConfiguracionDocumento_TipoTramite')
|
||||
EXEC sys.sp_executesql N'
|
||||
ALTER TABLE dbo.Tra_SolicitudDocumentoConfiguracion WITH CHECK
|
||||
ADD CONSTRAINT FK_Tra_ConfiguracionDocumento_TipoTramite
|
||||
FOREIGN KEY (CveTipoTramite) REFERENCES dbo.Tra_TiposTramite (CveTipoTramite);';
|
||||
|
||||
-- CveSolicitud se conserva sólo como referencia histórica, sin dependencia relacional.
|
||||
DECLARE @QuitarRelaciones nvarchar(max) = N'';
|
||||
SELECT @QuitarRelaciones = @QuitarRelaciones
|
||||
+ N'ALTER TABLE ' + QUOTENAME(OBJECT_SCHEMA_NAME(F.parent_object_id))
|
||||
+ N'.' + QUOTENAME(OBJECT_NAME(F.parent_object_id))
|
||||
+ N' DROP CONSTRAINT ' + QUOTENAME(F.name) + N';'
|
||||
FROM sys.foreign_keys AS F
|
||||
WHERE F.parent_object_id IN
|
||||
(OBJECT_ID('dbo.Tra_DocumentosSolicitud'), OBJECT_ID('dbo.Tra_SolicitudDocumentoConfiguracion'))
|
||||
AND F.referenced_object_id = OBJECT_ID('dbo.Tra_Solicitudes');
|
||||
IF @QuitarRelaciones <> N''
|
||||
EXEC sys.sp_executesql @QuitarRelaciones;
|
||||
|
||||
INSERT INTO dbo.Bit_Campos
|
||||
(CveTabla, NombreCampoSQL, NombreMostrar, MostrarEnBitacora, TipoDatoSQL, Activo)
|
||||
SELECT
|
||||
T.CveTabla,
|
||||
'CveTipoTramite',
|
||||
'Tipo de trámite',
|
||||
1,
|
||||
'int',
|
||||
1
|
||||
FROM dbo.Bit_Tablas AS T
|
||||
WHERE T.NombreTablaSQL IN ('Tra_DocumentosSolicitud', 'Tra_SolicitudDocumentoConfiguracion')
|
||||
AND NOT EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM dbo.Bit_Campos AS C
|
||||
WHERE C.CveTabla = T.CveTabla
|
||||
AND C.NombreCampoSQL = 'CveTipoTramite'
|
||||
);
|
||||
|
||||
DROP TABLE #TiposDocumentos;
|
||||
DROP TABLE #OrigenDocumentos;
|
||||
DROP TABLE #TiposConfiguraciones;
|
||||
DROP TABLE #OrigenConfiguraciones;
|
||||
2018
Documentos_Etapa_TipoTramite_Procedimientos_20261002.sql
Normal file
2018
Documentos_Etapa_TipoTramite_Procedimientos_20261002.sql
Normal file
File diff suppressed because it is too large
Load Diff
122
Documentos_Etapa_Verificacion_20260927.sql
Normal file
122
Documentos_Etapa_Verificacion_20260927.sql
Normal file
@@ -0,0 +1,122 @@
|
||||
/* Sólo consultas. Ejecutar después de instalar y únicamente con autorización.
|
||||
Las consultas de inconsistencias deben devolver cero filas. */
|
||||
SET NOCOUNT ON;
|
||||
|
||||
-- Una versión vigente por etapa y tipo.
|
||||
SELECT CveFraccionamientoEtapa, CveTipoDocumento, COUNT(*) AS VersionesActivas
|
||||
FROM dbo.Tra_DocumentosSolicitud
|
||||
WHERE EsActivo = 1
|
||||
GROUP BY CveFraccionamientoEtapa, CveTipoDocumento
|
||||
HAVING COUNT(*) > 1;
|
||||
|
||||
-- Las referencias opcionales siguen perteneciendo a la misma etapa.
|
||||
SELECT D.CveDocumentoSolicitud
|
||||
FROM dbo.Tra_DocumentosSolicitud AS D
|
||||
INNER JOIN dbo.Tra_Solicitudes AS S ON S.CveSolicitud = D.CveSolicitud
|
||||
WHERE D.CveFraccionamientoEtapa <> S.CveFraccionamientoEtapa;
|
||||
|
||||
SELECT C.CveConfiguracionDocumento
|
||||
FROM dbo.Tra_SolicitudDocumentoConfiguracion AS C
|
||||
INNER JOIN dbo.Tra_Solicitudes AS S ON S.CveSolicitud = C.CveSolicitud
|
||||
WHERE C.CveFraccionamientoEtapa <> S.CveFraccionamientoEtapa;
|
||||
|
||||
-- Ninguna versión histórica conserva la marca de renovación.
|
||||
SELECT CveDocumentoSolicitud
|
||||
FROM dbo.Tra_DocumentosSolicitud
|
||||
WHERE EsActivo = 0 AND Vencido = 1;
|
||||
|
||||
-- Configuración real del trabajo: diario (4), cada día (1), 03:00 (30000).
|
||||
SELECT J.name AS Trabajo, J.enabled AS Habilitado,
|
||||
S.name AS Horario, S.freq_type, S.freq_interval, S.active_start_time,
|
||||
P.database_name AS BaseDatos, P.command AS Comando
|
||||
FROM msdb.dbo.sysjobs AS J
|
||||
INNER JOIN msdb.dbo.sysjobschedules AS JS ON JS.job_id = J.job_id
|
||||
INNER JOIN msdb.dbo.sysschedules AS S ON S.schedule_id = JS.schedule_id
|
||||
INNER JOIN msdb.dbo.sysjobsteps AS P ON P.job_id = J.job_id
|
||||
WHERE J.name = 'Job_VerificaVigencias';
|
||||
|
||||
-- Inventario de versiones, sin exponer rutas físicas.
|
||||
SELECT CveFraccionamientoEtapa, CveTipoDocumento,
|
||||
COUNT(*) AS Versiones,
|
||||
SUM(CONVERT(int, EsActivo)) AS Vigentes,
|
||||
SUM(CONVERT(int, Vencido)) AS RequierenRenovacion
|
||||
FROM dbo.Tra_DocumentosSolicitud
|
||||
GROUP BY CveFraccionamientoEtapa, CveTipoDocumento;
|
||||
|
||||
-- Casos independientes de los datos reales. Fecha de vencimiento inclusiva.
|
||||
;WITH Casos AS
|
||||
(
|
||||
SELECT * FROM
|
||||
(
|
||||
VALUES
|
||||
('Sin archivo requerido', 0, 1, CAST(NULL AS date), CAST(NULL AS bit), 'Pendientes'),
|
||||
('Archivo sin revisión', 1, 1, CAST('20261001' AS date), CAST(NULL AS bit), 'Por aprobar'),
|
||||
('Archivo rechazado', 1, 1, CAST('20261001' AS date), CAST(0 AS bit), 'Por aprobar'),
|
||||
('Aprobado vigente', 1, 1, CAST('20261001' AS date), CAST(1 AS bit), 'Aprobados'),
|
||||
('Expirado requerido', 1, 1, CAST('20260901' AS date), CAST(1 AS bit), 'Vencidos'),
|
||||
('Expirado sin requisito', 1, 0, CAST('20260901' AS date), CAST(1 AS bit), 'Aprobados'),
|
||||
('Vence hoy', 1, 1, CAST('20260927' AS date), CAST(1 AS bit), 'Aprobados')
|
||||
) AS C(Nombre, TieneArchivo, EsRequerido, FechaVencimiento, EsAprobado, Esperado)
|
||||
), Resultado AS
|
||||
(
|
||||
SELECT *, CASE
|
||||
WHEN TieneArchivo = 0 THEN 'Pendientes'
|
||||
WHEN FechaVencimiento < CAST('20260927' AS date) AND EsRequerido = 1 THEN 'Vencidos'
|
||||
WHEN EsAprobado = 1 THEN 'Aprobados'
|
||||
ELSE 'Por aprobar'
|
||||
END AS Obtenido
|
||||
FROM Casos
|
||||
)
|
||||
SELECT Nombre, Esperado, Obtenido
|
||||
FROM Resultado
|
||||
WHERE Esperado <> Obtenido;
|
||||
|
||||
-- La marca persistida coincide con los requerimientos efectivos actuales.
|
||||
DECLARE @Hoy date = CONVERT(date, SYSDATETIMEOFFSET() AT TIME ZONE 'US Mountain Standard Time');
|
||||
;WITH Configuracion AS
|
||||
(
|
||||
SELECT S.CveSolicitud, S.CveFraccionamientoEtapa, G.CveTipoDocumento,
|
||||
COALESCE(P.EsRequerido, G.EsRequerido) AS EsRequerido,
|
||||
COALESCE(P.EsCliente, G.EsCliente) AS EsCliente,
|
||||
COALESCE(P.TieneVigencia, G.TieneVigencia) AS TieneVigencia,
|
||||
COALESCE(P.EsActivo, G.EsActivo) AS EsActivo,
|
||||
E.EsFinal, S.CveTipoTramite, S.Folio
|
||||
FROM dbo.Tra_Solicitudes AS S
|
||||
INNER JOIN dbo.Tra_EstatusSolicitud AS E ON E.CveEstatusSolicitud = S.CveEstatusSolicitud
|
||||
INNER JOIN dbo.Tra_TiposTramiteDocumento AS G ON G.CveTipoTramite = S.CveTipoTramite
|
||||
LEFT JOIN dbo.Tra_SolicitudDocumentoConfiguracion AS P ON P.CveSolicitud = S.CveSolicitud
|
||||
AND P.CveTipoDocumento = G.CveTipoDocumento
|
||||
UNION ALL
|
||||
SELECT P.CveSolicitud, P.CveFraccionamientoEtapa, P.CveTipoDocumento,
|
||||
P.EsRequerido, P.EsCliente, P.TieneVigencia, P.EsActivo,
|
||||
ISNULL(E.EsFinal, 0), S.CveTipoTramite, S.Folio
|
||||
FROM dbo.Tra_SolicitudDocumentoConfiguracion AS P
|
||||
LEFT JOIN dbo.Tra_Solicitudes AS S ON S.CveSolicitud = P.CveSolicitud
|
||||
LEFT JOIN dbo.Tra_EstatusSolicitud AS E ON E.CveEstatusSolicitud = S.CveEstatusSolicitud
|
||||
WHERE P.CveSolicitud IS NULL OR NOT EXISTS
|
||||
(
|
||||
SELECT 1 FROM dbo.Tra_TiposTramiteDocumento AS G
|
||||
WHERE G.CveTipoTramite = S.CveTipoTramite
|
||||
AND G.CveTipoDocumento = P.CveTipoDocumento
|
||||
)
|
||||
),
|
||||
Requisitos AS
|
||||
(
|
||||
SELECT C.CveFraccionamientoEtapa, C.CveTipoDocumento,
|
||||
CONVERT(bit, MAX(CASE WHEN C.EsActivo = 1 AND C.EsRequerido = 1
|
||||
AND C.EsFinal = 0 AND T.EsActivo = 1 THEN 1 ELSE 0 END)) AS EsRequerido,
|
||||
CONVERT(bit, MAX(CONVERT(int, C.EsCliente))) AS EsCliente,
|
||||
CONVERT(bit, MAX(CONVERT(int, C.TieneVigencia))) AS TieneVigencia,
|
||||
CONVERT(bit, MAX(CASE WHEN C.EsActivo = 1 AND C.EsFinal = 0 THEN 1 ELSE 0 END)) AS TieneContextoAbierto
|
||||
FROM Configuracion AS C
|
||||
INNER JOIN dbo.Tra_TiposDocumento AS T ON T.CveTipoDocumento = C.CveTipoDocumento
|
||||
GROUP BY C.CveFraccionamientoEtapa, C.CveTipoDocumento
|
||||
)
|
||||
SELECT D.CveDocumentoSolicitud, D.Vencido AS MarcaPersistida,
|
||||
CONVERT(bit, CASE WHEN D.EsActivo = 1 AND D.FechaVencimiento < @Hoy
|
||||
AND R.EsRequerido = 1 THEN 1 ELSE 0 END) AS MarcaEsperada
|
||||
FROM dbo.Tra_DocumentosSolicitud AS D
|
||||
LEFT JOIN Requisitos AS R ON R.CveFraccionamientoEtapa = D.CveFraccionamientoEtapa
|
||||
AND R.CveTipoDocumento = D.CveTipoDocumento
|
||||
WHERE D.Vencido <> CONVERT(bit, CASE WHEN D.EsActivo = 1 AND D.FechaVencimiento < @Hoy
|
||||
AND R.EsRequerido = 1 THEN 1 ELSE 0 END);
|
||||
364
Enlaces_FraccionamientoEtapa_20260921.sql
Normal file
364
Enlaces_FraccionamientoEtapa_20260921.sql
Normal file
@@ -0,0 +1,364 @@
|
||||
/*
|
||||
Nombres para el enlace Fraccionamiento · Etapa.
|
||||
Preparado desde las definiciones instaladas consultadas el 21/09/2026.
|
||||
Requiere autorización separada antes de ejecutarse.
|
||||
Sólo modifica las consultas:
|
||||
dbo.PA_Tra_ReporteTramitesList: agrega Etapa al resultado de filas.
|
||||
dbo.PA_Tramites_SolicitudGet: agrega Fraccionamiento.
|
||||
Conserva filtros, permisos, agrupaciones y parámetros existentes.
|
||||
No modifica tablas, datos, estatus ni la programación de vigencias.
|
||||
*/
|
||||
USE [SIG_PlataformaDesarolladores];
|
||||
GO
|
||||
|
||||
CREATE OR ALTER PROCEDURE dbo.PA_Tra_ReporteTramitesList
|
||||
@CveUsuarioEjecuta int,
|
||||
@CveAgrupacion tinyint = 1,
|
||||
@CveFraccionamiento int = NULL,
|
||||
@SoloActivos bit = 1,
|
||||
@SoloBloqueados bit = 0,
|
||||
@EstatusSeleccionados varchar(max) = NULL,
|
||||
@MostrarAutorizados bit = 0,
|
||||
@MostrarCancelados bit = 0,
|
||||
@ErrorMostrar varchar(max) OUTPUT,
|
||||
@ErrorTipo int OUTPUT,
|
||||
@Return bit OUTPUT
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON;
|
||||
|
||||
SELECT
|
||||
@ErrorMostrar = NULL,
|
||||
@ErrorTipo = 0,
|
||||
@Return = 0;
|
||||
|
||||
BEGIN TRY
|
||||
DECLARE @CveRol int;
|
||||
DECLARE @TieneAccesoGlobal bit = 0;
|
||||
|
||||
-- Misma regla de acceso que PA_Tramites_SolicitudGet/List.
|
||||
SELECT
|
||||
@CveRol = U.CveRol,
|
||||
@TieneAccesoGlobal = CASE WHEN U.CveRol <= 2 THEN 1 ELSE 0 END
|
||||
FROM dbo.Sis_Usuarios AS U
|
||||
WHERE U.CveUsuario = @CveUsuarioEjecuta
|
||||
AND U.Activo = 1;
|
||||
|
||||
IF @CveRol IS NULL
|
||||
BEGIN
|
||||
SET @ErrorMostrar = 'El usuario no existe o está inactivo.';
|
||||
SET @ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
IF @CveAgrupacion IS NULL OR @CveAgrupacion NOT IN (1, 2)
|
||||
BEGIN
|
||||
SET @ErrorMostrar = 'Seleccione una agrupación válida.';
|
||||
SET @ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
-- Empresa es el rol cliente actual (UserSessionModel.EsDesarrollador).
|
||||
IF @CveRol = 3
|
||||
BEGIN
|
||||
IF @CveAgrupacion <> 1
|
||||
BEGIN
|
||||
SET @ErrorMostrar = 'La agrupación seleccionada no está disponible para el usuario.';
|
||||
SET @ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
SET @SoloBloqueados = 0;
|
||||
END;
|
||||
|
||||
SELECT
|
||||
F.CveFraccionamiento,
|
||||
F.Fraccionamiento
|
||||
INTO #FraccionamientosAutorizados
|
||||
FROM dbo.Fraccionamientos AS F
|
||||
WHERE @TieneAccesoGlobal = 1
|
||||
OR EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM dbo.Sis_UsuariosClientes AS UC
|
||||
WHERE UC.CveUsuario = @CveUsuarioEjecuta
|
||||
AND UC.CveCliente = F.CveCliente
|
||||
AND UC.Activo = 1
|
||||
);
|
||||
|
||||
IF @CveFraccionamiento IS NOT NULL
|
||||
AND NOT EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM #FraccionamientosAutorizados AS F
|
||||
WHERE F.CveFraccionamiento = @CveFraccionamiento
|
||||
)
|
||||
BEGIN
|
||||
SET @ErrorMostrar = 'El fraccionamiento no existe o no está asignado al usuario.';
|
||||
SET @ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
SELECT
|
||||
S.CveSolicitud,
|
||||
S.CveTipoTramite,
|
||||
S.CveFraccionamiento,
|
||||
S.CveFraccionamientoEtapa,
|
||||
S.CveCliente,
|
||||
CASE @CveAgrupacion
|
||||
WHEN 1 THEN S.CveTipoTramite
|
||||
WHEN 2 THEN S.CveCliente
|
||||
END AS CveAgrupacion,
|
||||
CASE @CveAgrupacion
|
||||
WHEN 1 THEN TT.TipoTramite
|
||||
WHEN 2 THEN C.Nombre
|
||||
END AS Agrupacion,
|
||||
C.Nombre AS Cliente,
|
||||
TT.TipoTramite AS Tramite,
|
||||
F.Fraccionamiento,
|
||||
E.Etapa,
|
||||
CASE
|
||||
WHEN @TieneAccesoGlobal = 1 OR ES.EsCliente = 1
|
||||
THEN ES.EstatusSolicitud
|
||||
ELSE NULL
|
||||
END AS Estatus,
|
||||
S.FechaInicio,
|
||||
E.Avance,
|
||||
S.EstatusProceso
|
||||
INTO #SolicitudesTablero
|
||||
FROM dbo.Tra_Solicitudes AS S
|
||||
INNER JOIN #FraccionamientosAutorizados AS F ON F.CveFraccionamiento = S.CveFraccionamiento
|
||||
INNER JOIN dbo.FraccionamientosEtapas AS E ON E.CveFraccionamientoEtapa = S.CveFraccionamientoEtapa
|
||||
INNER JOIN dbo.Clientes AS C ON C.CveCliente = S.CveCliente
|
||||
INNER JOIN dbo.Tra_TiposTramite AS TT ON TT.CveTipoTramite = S.CveTipoTramite
|
||||
INNER JOIN dbo.Tra_EstatusSolicitud AS ES ON ES.CveEstatusSolicitud = S.CveEstatusSolicitud
|
||||
WHERE (@CveFraccionamiento IS NULL OR S.CveFraccionamiento = @CveFraccionamiento)
|
||||
AND
|
||||
(
|
||||
(NULLIF(@EstatusSeleccionados, '') IS NULL
|
||||
AND (ES.Codigo <> 'Autorizado' OR @MostrarAutorizados = 1)
|
||||
AND (ES.Codigo <> 'Cancelado' OR @MostrarCancelados = 1))
|
||||
OR EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM STRING_SPLIT(@EstatusSeleccionados, ',') AS Seleccion
|
||||
WHERE TRY_CONVERT(int, Seleccion.value) = S.CveEstatusSolicitud
|
||||
)
|
||||
OR (@MostrarAutorizados = 1 AND ES.Codigo = 'Autorizado')
|
||||
OR (@MostrarCancelados = 1 AND ES.Codigo = 'Cancelado')
|
||||
)
|
||||
AND (@SoloActivos = 0 OR TT.EsActivo = 1)
|
||||
AND
|
||||
(
|
||||
@TieneAccesoGlobal = 1
|
||||
OR EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM dbo.Sis_UsuariosClientes AS UC
|
||||
WHERE UC.CveUsuario = @CveUsuarioEjecuta
|
||||
AND UC.CveCliente = S.CveCliente
|
||||
AND UC.Activo = 1
|
||||
)
|
||||
)
|
||||
-- PENDIENTE: agregar el campo de bloqueo en Clientes y su historial.
|
||||
-- Condición conceptual pendiente (no existe aún el campo):
|
||||
-- AND (@SoloBloqueados = 0 OR <campo de bloqueo de C> = 1)
|
||||
;
|
||||
|
||||
-- El grid consume este contrato estable sin conocer la agrupación elegida.
|
||||
SELECT
|
||||
CAST(NULL AS int) AS CveSolicitud,
|
||||
CAST(NULL AS int) AS CveTipoTramite,
|
||||
CAST(NULL AS int) AS CveFraccionamiento,
|
||||
CAST(NULL AS int) AS CveFraccionamientoEtapa,
|
||||
CAST(NULL AS int) AS CveCliente,
|
||||
CveAgrupacion,
|
||||
Agrupacion,
|
||||
2 AS Nivel,
|
||||
CAST(NULL AS varchar(200)) AS Cliente,
|
||||
CAST(NULL AS varchar(200)) AS Tramite,
|
||||
CAST(NULL AS varchar(200)) AS Fraccionamiento,
|
||||
CAST(NULL AS varchar(200)) AS Etapa,
|
||||
CAST(NULL AS varchar(200)) AS Estatus,
|
||||
CAST(NULL AS datetime) AS FechaInicio,
|
||||
CAST(NULL AS decimal(18, 2)) AS Avance,
|
||||
CAST(0 AS tinyint) AS EstatusProceso
|
||||
FROM #SolicitudesTablero
|
||||
GROUP BY CveAgrupacion, Agrupacion
|
||||
|
||||
UNION ALL
|
||||
|
||||
SELECT
|
||||
CveSolicitud,
|
||||
CveTipoTramite,
|
||||
CveFraccionamiento,
|
||||
CveFraccionamientoEtapa,
|
||||
CveCliente,
|
||||
CveAgrupacion,
|
||||
Agrupacion,
|
||||
1 AS Nivel,
|
||||
Cliente,
|
||||
Tramite,
|
||||
Fraccionamiento,
|
||||
Etapa,
|
||||
Estatus,
|
||||
FechaInicio,
|
||||
Avance,
|
||||
EstatusProceso
|
||||
FROM #SolicitudesTablero
|
||||
ORDER BY CveAgrupacion, Nivel DESC, FechaInicio DESC, CveSolicitud DESC;
|
||||
|
||||
-- Segundo resultado: combo con el mismo alcance de acceso del tablero.
|
||||
-- No depende del filtro seleccionado ni del estado activo del tipo.
|
||||
SELECT CveFraccionamiento, Fraccionamiento
|
||||
FROM #FraccionamientosAutorizados
|
||||
ORDER BY Fraccionamiento, CveFraccionamiento;
|
||||
|
||||
-- Opciones del filtro; no altera los permisos para cambiar estatus.
|
||||
SELECT CveEstatusSolicitud, Codigo, EstatusSolicitud, Orden, EsFinal, EsCliente
|
||||
FROM dbo.Tra_EstatusSolicitud
|
||||
WHERE EsActivo = 1
|
||||
ORDER BY Orden, CveEstatusSolicitud;
|
||||
|
||||
SET @Return = 1;
|
||||
END TRY
|
||||
BEGIN CATCH
|
||||
SET @ErrorMostrar = 'Ocurrió un error al consultar el tablero de trámites; favor de contactar a Sistemas.';
|
||||
SET @ErrorTipo = 1;
|
||||
SET @Return = 0;
|
||||
|
||||
DECLARE @ErrorTecnico nvarchar(2048) = CONCAT(
|
||||
'Número: ', ERROR_NUMBER(),
|
||||
'; Procedimiento: ', COALESCE(ERROR_PROCEDURE(), 'PA_Tra_ReporteTramitesList'),
|
||||
'; Línea: ', ERROR_LINE(),
|
||||
'; Detalle: ', ERROR_MESSAGE()
|
||||
);
|
||||
|
||||
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
|
||||
END CATCH;
|
||||
END;
|
||||
GO
|
||||
|
||||
CREATE OR ALTER PROCEDURE dbo.PA_Tramites_SolicitudGet
|
||||
@CveSolicitud int,
|
||||
@CveUsuarioEjecuta int,
|
||||
@ErrorMostrar varchar(max) OUTPUT,
|
||||
@ErrorTipo int OUTPUT,
|
||||
@Return bit OUTPUT
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON;
|
||||
|
||||
SELECT
|
||||
@ErrorMostrar = NULL,
|
||||
@ErrorTipo = 0,
|
||||
@Return = 0;
|
||||
|
||||
BEGIN TRY
|
||||
DECLARE @CveRol int;
|
||||
DECLARE @EsSuperUsuario bit = 0;
|
||||
|
||||
SELECT
|
||||
@CveRol = U.CveRol,
|
||||
@EsSuperUsuario =
|
||||
CASE WHEN U.CveRol <= 2 THEN 1 ELSE 0 END
|
||||
FROM dbo.Sis_Usuarios AS U
|
||||
WHERE U.CveUsuario = @CveUsuarioEjecuta
|
||||
AND U.Activo = 1;
|
||||
|
||||
IF @CveRol IS NULL
|
||||
BEGIN
|
||||
SET @ErrorMostrar = 'El usuario no existe o está inactivo.';
|
||||
SET @ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
IF NOT EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM dbo.Tra_Solicitudes AS S
|
||||
WHERE S.CveSolicitud = @CveSolicitud
|
||||
AND
|
||||
(
|
||||
@EsSuperUsuario = 1
|
||||
OR EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM dbo.Sis_UsuariosClientes AS UC
|
||||
WHERE UC.CveUsuario = @CveUsuarioEjecuta
|
||||
AND UC.CveCliente = S.CveCliente
|
||||
AND UC.Activo = 1
|
||||
)
|
||||
)
|
||||
)
|
||||
BEGIN
|
||||
SET @ErrorMostrar = 'La solicitud no existe o no está asignada al usuario.';
|
||||
SET @ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
SELECT
|
||||
S.CveSolicitud,
|
||||
S.Folio,
|
||||
S.CveCliente,
|
||||
S.CveFraccionamiento,
|
||||
F.Fraccionamiento,
|
||||
S.CveFraccionamientoEtapa,
|
||||
ET.Etapa,
|
||||
S.CveTipoTramite,
|
||||
TT.TipoTramite,
|
||||
S.CveEstatusSolicitud,
|
||||
CASE
|
||||
WHEN @EsSuperUsuario = 1 OR ES.EsCliente = 1
|
||||
THEN ES.EstatusSolicitud
|
||||
ELSE NULL
|
||||
END AS EstatusSolicitud,
|
||||
ES.EsCliente AS EsEstatusCliente,
|
||||
S.FechaInicio,
|
||||
S.FechaAutorizacion,
|
||||
CONVERT(bit,
|
||||
CASE
|
||||
WHEN @EsSuperUsuario = 1
|
||||
AND S.FechaAutorizacion IS NULL
|
||||
AND UPPER(LTRIM(RTRIM(ISNULL(ES.Codigo, '')))) <> 'AUTORIZADO'
|
||||
AND UPPER(LTRIM(RTRIM(ISNULL(ES.EstatusSolicitud, '')))) <> 'AUTORIZADO'
|
||||
THEN 1
|
||||
ELSE 0
|
||||
END) AS PuedeCambiarEstatus,
|
||||
CONVERT(bit,
|
||||
CASE
|
||||
WHEN S.FechaAutorizacion IS NOT NULL
|
||||
OR UPPER(LTRIM(RTRIM(ISNULL(ES.Codigo, '')))) = 'AUTORIZADO'
|
||||
OR UPPER(LTRIM(RTRIM(ISNULL(ES.EstatusSolicitud, '')))) = 'AUTORIZADO'
|
||||
THEN 1
|
||||
ELSE 0
|
||||
END) AS EsAutorizada
|
||||
FROM dbo.Tra_Solicitudes AS S
|
||||
INNER JOIN dbo.Fraccionamientos AS F ON F.CveFraccionamiento = S.CveFraccionamiento
|
||||
INNER JOIN dbo.FraccionamientosEtapas AS ET
|
||||
ON ET.CveFraccionamientoEtapa = S.CveFraccionamientoEtapa
|
||||
INNER JOIN dbo.Tra_TiposTramite AS TT
|
||||
ON TT.CveTipoTramite = S.CveTipoTramite
|
||||
INNER JOIN dbo.Tra_EstatusSolicitud AS ES
|
||||
ON ES.CveEstatusSolicitud = S.CveEstatusSolicitud
|
||||
WHERE S.CveSolicitud = @CveSolicitud;
|
||||
|
||||
SET @Return = 1;
|
||||
END TRY
|
||||
BEGIN CATCH
|
||||
SET @ErrorMostrar = 'Ocurrió un error al consultar la solicitud; favor de contactar a Sistemas.';
|
||||
SET @ErrorTipo = 1;
|
||||
SET @Return = 0;
|
||||
|
||||
DECLARE @ErrorTecnico nvarchar(2048) = CONCAT(
|
||||
'Número: ', ERROR_NUMBER(),
|
||||
'; Procedimiento: ', COALESCE(ERROR_PROCEDURE(), 'PA_Tramites_SolicitudGet'),
|
||||
'; Línea: ', ERROR_LINE(),
|
||||
'; Detalle: ', ERROR_MESSAGE()
|
||||
);
|
||||
|
||||
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
|
||||
END CATCH;
|
||||
END;
|
||||
GO
|
||||
|
||||
BIN
Entrega_CambioEstatus_20260908.zip
Normal file
BIN
Entrega_CambioEstatus_20260908.zip
Normal file
Binary file not shown.
@@ -0,0 +1,482 @@
|
||||
# Propuesta de catálogo y relaciones documento–trámite
|
||||
|
||||
Estado: propuesta para aprobación. No se modificaron archivos del proyecto, documentos, relaciones, PAs, configuración por solicitud ni componentes GIS.
|
||||
Se consultaron las tablas reales y se ejecutó únicamente el modo diagnóstico del SQL (@Aplicar = 0). La sintaxis fue validada con el analizador de SQL Server 2022.
|
||||
|
||||
## Resultado
|
||||
|
||||
- Catálogo actual: 34 registros.
|
||||
- Relaciones generales actuales: 1 (GIS → Prefactibilidad).
|
||||
- Archivos de solicitudes encontrados: 0. Configuraciones particulares encontradas: 0.
|
||||
- Tipos documentales de la propuesta: 66; 14 reutilizan registros existentes.
|
||||
- Nuevos tipos listos para insertar: 45.
|
||||
- Tipos cuya equivalencia debe resolverse antes de crearlos: 7.
|
||||
- Relaciones propuestas: 117; 99 listas y 18 pendientes de definición.
|
||||
- Ninguna de las 117 relaciones propuestas existe actualmente. Se conserva la relación GIS anterior.
|
||||
- Trámites identificados: 18. Ningún proceso de la lista quedó sin clave identificada.
|
||||
- No se detectaron nombres documentales duplicados al comparar mayúsculas y espacios. Sí existe duplicidad conceptual previa entre GIS y Archivo GIS de la Etapa, que no se fusiona automáticamente.
|
||||
|
||||
El script no selecciona un usuario: @CveUsuario queda NULL y debe configurarse con una clave real y activa al aprobar la ejecución.
|
||||
Con @Aplicar = 0 solo consulta. Con @Aplicar = 1 inserta únicamente registros faltantes dentro de una transacción.
|
||||
@PermitirPendientes = 0 impide una carga parcial inadvertida. Resolver las decisiones o autorizar explícitamente la parte lista antes de cambiarlo a 1.
|
||||
|
||||
## Trámites reales y diferencias de nombre
|
||||
|
||||
Las claves 1, 3–13 se contrastaron con la especificación; los nombres siguientes son exactamente los guardados.
|
||||
Las claves 19–24 se localizaron por el proceso descrito. No se inventaron claves ni trámites.
|
||||
|
||||
| Clave | Nombre actual |
|
||||
| --- | --- |
|
||||
| 1 | Prefactibilidad de servicios |
|
||||
| 3 | Convenio de pagos para obras necesarias |
|
||||
| 4 | Convenio de recuperación de caudal |
|
||||
| 5 | Autorización de puntos de conexión del fraccionamiento |
|
||||
| 6 | Convenio de adhesión |
|
||||
| 7 | Autorización de proyectos y presupuesto de obras de cabeza |
|
||||
| 8 | Autorización de proyectos de obra necesaria |
|
||||
| 9 | Convenio de obras necesarias en especie |
|
||||
| 10 | Supervisión de obra externa |
|
||||
| 11 | Factibilidad de servicios |
|
||||
| 12 | Autorización de proyectos de redes internas |
|
||||
| 13 | Supervisión de obra de redes internas |
|
||||
| 19 | Entrega de Infraestructura Externa |
|
||||
| 20 | Contratación de Macromedidor |
|
||||
| 21 | Entrega de Infraestructura Interna |
|
||||
| 22 | Convenio de Actualización de Pagos de Derechos y Aportaciones |
|
||||
| 23 | Contratación de Vivienda |
|
||||
| 24 | Entrega - Recepción |
|
||||
|
||||
Diferencias relevantes frente a los títulos de la especificación:
|
||||
|
||||
- 1: el nombre completo es Prefactibilidad de servicios.
|
||||
- 3: se guarda Convenio de pagos para obras necesarias, sin «Coordinación».
|
||||
- 4: se guarda Convenio de recuperación de caudal.
|
||||
- 5: se guarda Autorización de puntos de conexión del fraccionamiento.
|
||||
- 8: se guarda Autorización de proyectos de obra necesaria.
|
||||
- 9: se guarda Convenio de obras necesarias en especie.
|
||||
- 10: se guarda Supervisión de obra externa.
|
||||
- 11: el nombre completo es Factibilidad de servicios.
|
||||
- 13: se guarda Supervisión de obra de redes internas.
|
||||
- 20: se guarda Contratación de Macromedidor, sin «para».
|
||||
|
||||
También existen estos registros casi iguales:
|
||||
| Clave | Nombre actual | Tratamiento |
|
||||
| --- | --- | --- |
|
||||
| 16 | Convenio de Pagos para Obras Necesarias | No se vincula automáticamente; la especificación indicó 3, 6 y 11. |
|
||||
| 17 | Convenio de Adhesión | No se vincula automáticamente; la especificación indicó 3, 6 y 11. |
|
||||
| 18 | Factibilidad de Servicios | No se vincula automáticamente; la especificación indicó 3, 6 y 11. |
|
||||
|
||||
El script comprueba simultáneamente la clave verificada, el nombre exacto con Modern_Spanish_CS_AS y EsActivo = 1. No elige una coincidencia por similitud ni mezcla estos registros.
|
||||
|
||||
## Catálogo existente completo
|
||||
|
||||
La columna «Uso» identifica los 14 registros reutilizados. Los 20 restantes se conservan sin cambios.
|
||||
No se propone actualizar descripción, extensiones, tamaño máximo ni estado de los registros existentes.
|
||||
|
||||
| Clave actual | TipoDocumento | Extensiones | Máximo MB | Uso |
|
||||
| --- | --- | --- | --- | --- |
|
||||
| 1 | PDF | .pdf | 100 | Conservar |
|
||||
| 2 | GIS | .gis | 100 | Conservar |
|
||||
| 1002 | Proyecto de Redes Internas | — | — | Conservar |
|
||||
| 1003 | Memoria de cálculo | — | — | Reutilizar |
|
||||
| 1004 | Planos de Redes Internas | pdf,dwg | — | Conservar |
|
||||
| 1005 | Proyecto Ejecutivo de Infraestructura Hidráulica | — | — | Reutilizar |
|
||||
| 1006 | Planos del Proyecto de Infraestructura Hidráulica | pdf,dwg | — | Conservar |
|
||||
| 1007 | Presupuesto de Obra | — | — | Conservar |
|
||||
| 1008 | Programa de Obra | — | — | Reutilizar |
|
||||
| 1009 | Permisos vigentes del Ayuntamiento | pdf | — | Conservar |
|
||||
| 1010 | Planos del Tipo de Vivienda | — | — | Conservar |
|
||||
| 1011 | Descripción del Tipo de Vivienda | — | — | Conservar |
|
||||
| 1012 | Documento de Área de Construcción | — | — | Conservar |
|
||||
| 1013 | Cesión de Derechos de Extracción de Agua | pdf | — | Conservar |
|
||||
| 1014 | Garantía de Buena Calidad de las Obras | pdf | — | Conservar |
|
||||
| 1015 | Fianza de Garantía de Buena Calidad | pdf | — | Conservar |
|
||||
| 1016 | Archivo GIS de la Etapa | gis | — | Reutilizar |
|
||||
| 1017 | Dictamen de Prefactibilidad de Servicios | pdf | — | Reutilizar |
|
||||
| 1018 | Dictamen de Factibilidad de Servicios | pdf | — | Reutilizar |
|
||||
| 1019 | Oficio de Negativa | pdf | — | Conservar |
|
||||
| 1020 | Autorización de Puntos de Conexión del Fraccionamiento | pdf | — | Reutilizar |
|
||||
| 1021 | Convenio de Recuperación de Caudal | pdf | — | Reutilizar |
|
||||
| 1022 | Convenio de Aportación para Recuperación de Caudal | pdf | — | Reutilizar |
|
||||
| 1023 | Contrato / Convenio de Adhesión al Fideicomiso | pdf | — | Reutilizar |
|
||||
| 1024 | Convenio de Pagos para Obras Necesarias | pdf | — | Reutilizar |
|
||||
| 1025 | Convenio de Ejecución de Obras Necesarias en Especie | pdf | — | Reutilizar |
|
||||
| 1026 | Autorización de Proyectos y Presupuesto de Obras de Cabeza | pdf | — | Conservar |
|
||||
| 1027 | Autorización de Proyecto de Obra Necesaria | pdf | — | Reutilizar |
|
||||
| 1028 | Autorización de Proyectos de Redes Internas | pdf | — | Reutilizar |
|
||||
| 1029 | Convenio de Actualización de Pagos de Derechos y Aportaciones | pdf | — | Conservar |
|
||||
| 1030 | Constancia de No Adeudo | pdf | — | Conservar |
|
||||
| 1031 | Acta de Entrega-Recepción de Infraestructura | pdf | — | Conservar |
|
||||
| 1032 | Convenio de Cumplimiento de Ejecución de Infraestructura Hidráulica | pdf | — | Conservar |
|
||||
| 1033 | Contrato Temporal con Servicio Medido | pdf | — | Conservar |
|
||||
|
||||
## Documentos nuevos listos para insertar
|
||||
|
||||
Cada nombre aparece una sola vez en el catálogo propuesto. TamanoMaximoMb se deja NULL; no se inventa un límite.
|
||||
En los nuevos registros la descripción es el nombre documental, salvo la descripción explícita de los campos de Relación de Viviendas.
|
||||
No se crean documentos separados por persona física/moral ni por cada dato capturable.
|
||||
|
||||
| Documento | Extensiones propuestas |
|
||||
| --- | --- |
|
||||
| Acta Constitutiva | — |
|
||||
| Autorización de Presupuesto de Obra Necesaria | — |
|
||||
| Carta de Asignación | — |
|
||||
| Comprobante de Domicilio | — |
|
||||
| Comprobante de Pagos de Derechos y Aportaciones | — |
|
||||
| Comprobante del Primer Pago de los Convenios de Adhesión | — |
|
||||
| Constancia de No Adeudo de Tesorería Municipal | — |
|
||||
| Constancia de Situación Fiscal | — |
|
||||
| Contrato de Vivienda | — |
|
||||
| Convenio de Fraccionamiento | — |
|
||||
| Corrida Hidráulica EPANET | — |
|
||||
| Croquis de Ubicación del Predio | — |
|
||||
| Dictamen de Uso de Suelo | — |
|
||||
| Escrito de Solicitud de Convenio de Obra Necesaria en Especie | — |
|
||||
| Escrito de Solicitud de Convenio de Pagos para Obras Necesarias | — |
|
||||
| Escrito de Solicitud de Convenio para Recuperación de Caudal | — |
|
||||
| Escrito de Solicitud de Factibilidad de Servicios | — |
|
||||
| Escrito de Solicitud de Prefactibilidad | — |
|
||||
| Escrito de Solicitud de Revisión y Autorización de Proyectos | — |
|
||||
| Escrituras del Terreno | — |
|
||||
| Formato Beneficiario Controlador | — |
|
||||
| Formato KYC Persona Física | — |
|
||||
| Formato de Alta de Lotes | xls,xlsx |
|
||||
| Identificación Oficial | — |
|
||||
| Liberación de Supervisión | — |
|
||||
| Memorias Descriptivas y Cálculos Hidráulicos | pdf,xls,xlsx |
|
||||
| Oficio de Licencia de Uso de Suelo | — |
|
||||
| Oficio de Rasantes Autorizado | — |
|
||||
| Plano de Nomenclatura | — |
|
||||
| Plano de Rasantes Autorizado | pdf,dwg |
|
||||
| Plano de Sembrado de Vivienda | — |
|
||||
| Plano del Convenio de Fraccionamiento Sellado y Firmado | — |
|
||||
| Planos Autorizados de Proyectos Ejecutivos de Obras Necesarias | — |
|
||||
| Planos de Redes Internas de Agua Potable | pdf,dwg |
|
||||
| Planos de Redes Internas de Alcantarillado Sanitario | pdf,dwg |
|
||||
| Poder del Representante Legal | — |
|
||||
| Pruebas Liberadas | — |
|
||||
| Relación de Viviendas | — |
|
||||
| Solicitud de Entrega-Recepción | — |
|
||||
| Solicitud de Puntos de Conexión | — |
|
||||
| Solicitud de Revisión y Autorización de Proyectos y Presupuesto | — |
|
||||
| Solicitud para Asignación de Supervisor | — |
|
||||
| Solicitud para Contratación del Macromedidor | — |
|
||||
| Solicitud para Entrega de Infraestructura Externa | — |
|
||||
| Solicitud para Entrega de Infraestructura Interna | — |
|
||||
|
||||
## Tipos pendientes: no crear automáticamente
|
||||
|
||||
Estas siete filas tienen RevisionPendiente en el SQL y se omiten incluso al autorizar una carga parcial. Para habilitarlas debe resolverse el nombre canónico, revisar las relaciones asociadas y retirar la marca de revisión correspondiente.
|
||||
Si se decide reutilizar un documento común, consolidar las relaciones por trámite + documento; no introducir dos filas para la misma combinación.
|
||||
|
||||
| Documento solicitado | Decisión necesaria |
|
||||
| --- | --- |
|
||||
| Presupuesto a Costo Directo | Existe Presupuesto de Obra (1007): confirmar si es el mismo documento o un presupuesto distinto a costo directo. |
|
||||
| Autorización de Proyecto de Obras de Cabeza | Existe Autorización de Proyectos y Presupuesto de Obras de Cabeza (1026), un documento conjunto. Confirmar si se separan las dos autorizaciones. |
|
||||
| Autorización de Presupuesto de Obras de Cabeza | Existe Autorización de Proyectos y Presupuesto de Obras de Cabeza (1026), un documento conjunto. Confirmar si se separan las dos autorizaciones. |
|
||||
| Convenio de Adhesión al Fideicomiso de Obras Necesarias | Confirmar si es documento diferente del Contrato / Convenio de Adhesión al Fideicomiso (1023). |
|
||||
| Convenio de Adhesión al Fideicomiso de Recuperación de Caudal | Confirmar si es documento diferente del Contrato / Convenio de Adhesión al Fideicomiso (1023). |
|
||||
| Poder / Carta Poder | Confirmar si basta Poder del Representante Legal o si Carta Poder es un tipo distinto. |
|
||||
| Constancia RFC del Propietario | Confirmar si se acepta la misma Constancia de Situación Fiscal o si es una constancia de RFC diferente. |
|
||||
|
||||
## Equivalencias documentales propuestas para revisión
|
||||
|
||||
Estas equivalencias son decisiones de normalización expresas en la propuesta, no coincidencias semánticas que el SQL busque por su cuenta.
|
||||
El SQL resuelve exclusivamente el nombre canónico de la segunda columna. Las claves actuales del reporte son informativas; no se fijan en los INSERT.
|
||||
|
||||
| Nombre/variante de la especificación | Nombre canónico propuesto | Clave actual |
|
||||
| --- | --- | --- |
|
||||
| Prefactibilidad de Servicios | Dictamen de Prefactibilidad de Servicios | 1017 |
|
||||
| Factibilidad de Servicios | Dictamen de Factibilidad de Servicios | 1018 |
|
||||
| Proyecto Ejecutivo Hidráulico | Proyecto Ejecutivo de Infraestructura Hidráulica | 1005 |
|
||||
| Memoria de Cálculo | Memoria de cálculo | 1003 |
|
||||
| Autorización de Puntos de Conexión del Desarrollo | Autorización de Puntos de Conexión del Fraccionamiento | 1020 |
|
||||
| Convenio de Coordinación de Pagos para Obras Necesarias | Convenio de Pagos para Obras Necesarias | 1024 |
|
||||
| Convenio de Coordinación de Pagos para Recuperación de Caudal | Convenio de Recuperación de Caudal | 1021 |
|
||||
| Convenio de Ejecución de Obra Necesaria en Especie | Convenio de Ejecución de Obras Necesarias en Especie | 1025 |
|
||||
| Identificación Oficial del Representante Legal | Identificación Oficial | — |
|
||||
| Identificación del Representante Legal | Identificación Oficial | — |
|
||||
| Identificación Oficial / INE | Identificación Oficial | — |
|
||||
| Constancia de Situación Fiscal del Representante Legal | Constancia de Situación Fiscal | — |
|
||||
| Constancia de No Adeudo de Tesorería | Constancia de No Adeudo de Tesorería Municipal | — |
|
||||
| Autorización de Redes Internas | Autorización de Proyectos de Redes Internas | 1028 |
|
||||
| Factibilidad Habitacional Vigente | Dictamen de Factibilidad de Servicios | 1018 |
|
||||
|
||||
Revisar especialmente estas normalizaciones:
|
||||
|
||||
- Prefactibilidad / Factibilidad se resuelven con los dictámenes que ya existen; no se crea otro tipo solo por omitir «Dictamen».
|
||||
- La especificación admite Factibilidad Habitacional / Factibilidad de Servicios como alternativas. Se propone reutilizar Dictamen de Factibilidad de Servicios; para el trámite 22 confirmar que cubra la modalidad habitacional.
|
||||
- Identificación oficial, INE e identificación del representante usan el mismo tipo documental. La constancia fiscal del representante reutiliza Constancia de Situación Fiscal.
|
||||
- Proyecto Ejecutivo Hidráulico reutiliza Proyecto Ejecutivo de Infraestructura Hidráulica.
|
||||
- Se conservan Planos de Redes Internas (1004) y Memoria de cálculo (1003). Los documentos específicos de agua potable, alcantarillado y memorias descriptivas se proponen como tipos separados porque la especificación los enumera por separado; revisar si se desean archivos conjuntos en vez de separados.
|
||||
- Constancia de No Adeudo (1030) describe derechos y aportaciones. No permite concluir que sea la constancia de Tesorería Municipal o una constancia independiente de Agua de Hermosillo. Se propone la municipal con su nombre específico; NO se agrega una nueva constancia de Agua, cuya inclusión estaba condicionada a que existiera inequívocamente.
|
||||
|
||||
## Todas las relaciones propuestas
|
||||
|
||||
1 = sí; 0 = no; «Pendiente» en responsable significa que no se insertará esa relación.
|
||||
«Orden lista» conserva la secuencia de la especificación. En la ejecución, las relaciones listas nuevas reciben órdenes consecutivos desde MAX(Orden) + 1 por trámite. Las relaciones previas nunca se reordenan.
|
||||
En una carga parcial se compacta la secuencia solo de las filas listas; al resolver pendientes posteriormente se agregarían al final para no sobrescribir órdenes existentes. Es preferible resolverlos antes de aplicar la carga completa.
|
||||
|
||||
| Trámite | Documento | Requerido | Cliente | Vigencia | Orden lista | Orden listo | Estado |
|
||||
| --- | --- | --- | --- | --- | --- | --- | --- |
|
||||
| 1 | Escrito de Solicitud de Prefactibilidad | 1 | 1 | 0 | 1 | 2 | Nueva lista |
|
||||
| 1 | Escrituras del Terreno | 1 | 1 | 0 | 2 | 3 | Nueva lista |
|
||||
| 1 | Croquis de Ubicación del Predio | 1 | 1 | 0 | 3 | 4 | Nueva lista |
|
||||
| 1 | Dictamen de Uso de Suelo | 1 | 1 | 0 | 4 | 5 | Nueva lista |
|
||||
| 1 | Poder del Representante Legal | 0 | 1 | 0 | 5 | 6 | Nueva lista |
|
||||
| 1 | Identificación Oficial | 1 | 1 | 0 | 6 | 7 | Nueva lista |
|
||||
| 1 | Constancia de No Adeudo de Tesorería Municipal | 1 | 1 | 0 | 7 | 8 | Nueva lista |
|
||||
| 3 | Escrito de Solicitud de Convenio de Pagos para Obras Necesarias | 1 | 1 | 0 | 1 | 1 | Nueva lista |
|
||||
| 3 | Identificación Oficial | 1 | 1 | 0 | 2 | 2 | Nueva lista |
|
||||
| 3 | Constancia de Situación Fiscal | 1 | 1 | 0 | 3 | 3 | Nueva lista |
|
||||
| 3 | Comprobante de Domicilio | 1 | 1 | 0 | 4 | 4 | Nueva lista |
|
||||
| 3 | Constancia de No Adeudo de Tesorería Municipal | 1 | 1 | 0 | 5 | 5 | Nueva lista |
|
||||
| 3 | Dictamen de Prefactibilidad de Servicios | 0 | 0 | 0 | 6 | 6 | Nueva lista |
|
||||
| 3 | Acta Constitutiva | 0 | 1 | 0 | 7 | 7 | Nueva lista |
|
||||
| 3 | Poder del Representante Legal | 0 | 1 | 0 | 8 | 8 | Nueva lista |
|
||||
| 4 | Escrito de Solicitud de Convenio para Recuperación de Caudal | 1 | 1 | 0 | 1 | 1 | Nueva lista |
|
||||
| 4 | Identificación Oficial | 1 | 1 | 0 | 2 | 2 | Nueva lista |
|
||||
| 4 | Constancia de Situación Fiscal | 1 | 1 | 0 | 3 | 3 | Nueva lista |
|
||||
| 4 | Comprobante de Domicilio | 1 | 1 | 0 | 4 | 4 | Nueva lista |
|
||||
| 4 | Constancia de No Adeudo de Tesorería Municipal | 1 | 1 | 0 | 5 | 5 | Nueva lista |
|
||||
| 4 | Dictamen de Prefactibilidad de Servicios | 0 | 0 | 0 | 6 | 6 | Nueva lista |
|
||||
| 4 | Acta Constitutiva | 0 | 1 | 0 | 7 | 7 | Nueva lista |
|
||||
| 4 | Poder del Representante Legal | 0 | 1 | 0 | 8 | 8 | Nueva lista |
|
||||
| 4 | Convenio de Recuperación de Caudal | 0 | 0 | 0 | 9 | 9 | Nueva lista |
|
||||
| 4 | Convenio de Aportación para Recuperación de Caudal | 0 | 0 | 0 | 10 | 10 | Nueva lista |
|
||||
| 5 | Solicitud de Puntos de Conexión | 1 | 1 | 0 | 1 | 1 | Nueva lista |
|
||||
| 5 | Croquis de Ubicación del Predio | 1 | 1 | 0 | 2 | 2 | Nueva lista |
|
||||
| 5 | Dictamen de Factibilidad de Servicios | 0 | 0 | 0 | 3 | 3 | Nueva lista |
|
||||
| 5 | Autorización de Puntos de Conexión del Fraccionamiento | 0 | 0 | 0 | 4 | 4 | Nueva lista |
|
||||
| 6 | Formato KYC Persona Física | 0 | 1 | 0 | 1 | 1 | Nueva lista |
|
||||
| 6 | Formato Beneficiario Controlador | 0 | 1 | 0 | 2 | 2 | Nueva lista |
|
||||
| 6 | Poder del Representante Legal | 0 | 1 | 0 | 3 | 3 | Nueva lista |
|
||||
| 6 | Identificación Oficial | 0 | 1 | 0 | 4 | 4 | Nueva lista |
|
||||
| 6 | Constancia de Situación Fiscal | 0 | 1 | 0 | 5 | 5 | Nueva lista |
|
||||
| 6 | Comprobante de Domicilio | 1 | 1 | 0 | 6 | 6 | Nueva lista |
|
||||
| 6 | Contrato / Convenio de Adhesión al Fideicomiso | 0 | Pendiente | 0 | 7 | — | Pendiente |
|
||||
| 7 | Solicitud de Revisión y Autorización de Proyectos y Presupuesto | 1 | 1 | 0 | 1 | 1 | Nueva lista |
|
||||
| 7 | Proyecto Ejecutivo de Infraestructura Hidráulica | 1 | 1 | 0 | 2 | 2 | Nueva lista |
|
||||
| 7 | Presupuesto a Costo Directo | 1 | 1 | 0 | 3 | — | Pendiente |
|
||||
| 8 | Solicitud de Revisión y Autorización de Proyectos y Presupuesto | 1 | 1 | 0 | 1 | 1 | Nueva lista |
|
||||
| 8 | Proyecto Ejecutivo de Infraestructura Hidráulica | 1 | 1 | 0 | 2 | 2 | Nueva lista |
|
||||
| 8 | Presupuesto a Costo Directo | 1 | 1 | 0 | 3 | — | Pendiente |
|
||||
| 7 | Autorización de Proyecto de Obras de Cabeza | 0 | 0 | 0 | 4 | — | Pendiente |
|
||||
| 7 | Autorización de Presupuesto de Obras de Cabeza | 0 | 0 | 0 | 5 | — | Pendiente |
|
||||
| 8 | Memoria de cálculo | 0 | 1 | 0 | 4 | 3 | Nueva lista |
|
||||
| 8 | Autorización de Proyecto de Obra Necesaria | 0 | 0 | 0 | 5 | 4 | Nueva lista |
|
||||
| 8 | Autorización de Presupuesto de Obra Necesaria | 0 | 0 | 0 | 6 | 5 | Nueva lista |
|
||||
| 9 | Escrito de Solicitud de Convenio de Obra Necesaria en Especie | 1 | 1 | 0 | 1 | 1 | Nueva lista |
|
||||
| 9 | Autorización de Proyecto de Obras de Cabeza | 0 | 0 | 0 | 2 | — | Pendiente |
|
||||
| 9 | Autorización de Proyecto de Obra Necesaria | 0 | 0 | 0 | 3 | 2 | Nueva lista |
|
||||
| 9 | Autorización de Presupuesto de Obras de Cabeza | 0 | 0 | 0 | 4 | — | Pendiente |
|
||||
| 9 | Autorización de Presupuesto de Obra Necesaria | 0 | 0 | 0 | 5 | 3 | Nueva lista |
|
||||
| 9 | Identificación Oficial | 1 | 1 | 0 | 6 | 4 | Nueva lista |
|
||||
| 9 | Constancia de Situación Fiscal | 1 | 1 | 0 | 7 | 5 | Nueva lista |
|
||||
| 9 | Comprobante de Domicilio | 1 | 1 | 0 | 8 | 6 | Nueva lista |
|
||||
| 9 | Constancia de No Adeudo de Tesorería Municipal | 1 | 1 | 0 | 9 | 7 | Nueva lista |
|
||||
| 9 | Dictamen de Prefactibilidad de Servicios | 0 | 0 | 0 | 10 | 8 | Nueva lista |
|
||||
| 9 | Acta Constitutiva | 0 | 1 | 0 | 11 | 9 | Nueva lista |
|
||||
| 9 | Poder del Representante Legal | 0 | 1 | 0 | 12 | 10 | Nueva lista |
|
||||
| 9 | Convenio de Ejecución de Obras Necesarias en Especie | 0 | 0 | 0 | 13 | 11 | Nueva lista |
|
||||
| 10 | Solicitud para Asignación de Supervisor | 1 | 1 | 0 | 1 | 1 | Nueva lista |
|
||||
| 10 | Programa de Obra | 1 | 1 | 0 | 2 | 2 | Nueva lista |
|
||||
| 11 | Escrito de Solicitud de Factibilidad de Servicios | 1 | 1 | 0 | 1 | 1 | Nueva lista |
|
||||
| 11 | Dictamen de Prefactibilidad de Servicios | 0 | 0 | 0 | 2 | 2 | Nueva lista |
|
||||
| 11 | Convenio de Pagos para Obras Necesarias | 0 | 0 | 0 | 3 | 3 | Nueva lista |
|
||||
| 11 | Convenio de Recuperación de Caudal | 0 | 0 | 0 | 4 | 4 | Nueva lista |
|
||||
| 11 | Convenio de Adhesión al Fideicomiso de Obras Necesarias | 0 | Pendiente | 0 | 5 | — | Pendiente |
|
||||
| 11 | Convenio de Adhesión al Fideicomiso de Recuperación de Caudal | 0 | Pendiente | 0 | 6 | — | Pendiente |
|
||||
| 11 | Comprobante del Primer Pago de los Convenios de Adhesión | 0 | 1 | 0 | 7 | 5 | Nueva lista |
|
||||
| 11 | Poder / Carta Poder | 0 | 1 | 0 | 8 | — | Pendiente |
|
||||
| 11 | Identificación Oficial | 1 | 1 | 0 | 9 | 6 | Nueva lista |
|
||||
| 11 | Constancia de No Adeudo de Tesorería Municipal | 1 | 1 | 0 | 10 | 7 | Nueva lista |
|
||||
| 11 | Dictamen de Factibilidad de Servicios | 0 | 0 | 0 | 11 | 8 | Nueva lista |
|
||||
| 12 | Escrito de Solicitud de Revisión y Autorización de Proyectos | 1 | 1 | 0 | 1 | 1 | Nueva lista |
|
||||
| 12 | Constancia de No Adeudo de Tesorería Municipal | 1 | 1 | 0 | 2 | 2 | Nueva lista |
|
||||
| 12 | Oficio de Licencia de Uso de Suelo | 1 | 1 | 0 | 3 | 3 | Nueva lista |
|
||||
| 12 | Convenio de Fraccionamiento | 1 | 1 | 0 | 4 | 4 | Nueva lista |
|
||||
| 12 | Plano del Convenio de Fraccionamiento Sellado y Firmado | 1 | 1 | 0 | 5 | 5 | Nueva lista |
|
||||
| 12 | Oficio de Rasantes Autorizado | 1 | 1 | 0 | 6 | 6 | Nueva lista |
|
||||
| 12 | Plano de Rasantes Autorizado | 1 | 1 | 0 | 7 | 7 | Nueva lista |
|
||||
| 12 | Autorización de Puntos de Conexión del Fraccionamiento | 0 | 0 | 0 | 8 | 8 | Nueva lista |
|
||||
| 12 | Dictamen de Factibilidad de Servicios | 0 | 0 | 0 | 9 | 9 | Nueva lista |
|
||||
| 12 | Planos Autorizados de Proyectos Ejecutivos de Obras Necesarias | 0 | Pendiente | 0 | 10 | — | Pendiente |
|
||||
| 12 | Memorias Descriptivas y Cálculos Hidráulicos | 1 | 1 | 0 | 11 | 10 | Nueva lista |
|
||||
| 12 | Planos de Redes Internas de Agua Potable | 1 | 1 | 0 | 12 | 11 | Nueva lista |
|
||||
| 12 | Planos de Redes Internas de Alcantarillado Sanitario | 1 | 1 | 0 | 13 | 12 | Nueva lista |
|
||||
| 12 | Plano de Sembrado de Vivienda | 1 | 1 | 0 | 14 | 13 | Nueva lista |
|
||||
| 12 | Plano de Nomenclatura | 1 | 1 | 0 | 15 | 14 | Nueva lista |
|
||||
| 12 | Formato de Alta de Lotes | 1 | 1 | 0 | 16 | 15 | Nueva lista |
|
||||
| 12 | Corrida Hidráulica EPANET | 1 | 1 | 0 | 17 | 16 | Nueva lista |
|
||||
| 12 | Archivo GIS de la Etapa | 1 | 1 | 0 | 18 | 17 | Nueva lista |
|
||||
| 12 | Autorización de Proyectos de Redes Internas | 0 | 0 | 0 | 19 | 18 | Nueva lista |
|
||||
| 13 | Solicitud para Asignación de Supervisor | 1 | 1 | 0 | 1 | 1 | Nueva lista |
|
||||
| 13 | Programa de Obra | 1 | 1 | 0 | 2 | 2 | Nueva lista |
|
||||
| 13 | Autorización de Proyectos de Redes Internas | 0 | 0 | 0 | 3 | 3 | Nueva lista |
|
||||
| 19 | Solicitud para Entrega de Infraestructura Externa | 1 | 1 | 0 | 1 | 1 | Nueva lista |
|
||||
| 19 | Pruebas Liberadas | 0 | Pendiente | 0 | 2 | — | Pendiente |
|
||||
| 20 | Solicitud para Contratación del Macromedidor | 1 | 1 | 0 | 1 | 1 | Nueva lista |
|
||||
| 20 | Liberación de Supervisión | 0 | Pendiente | 0 | 2 | — | Pendiente |
|
||||
| 21 | Solicitud para Entrega de Infraestructura Interna | 1 | 1 | 0 | 1 | 1 | Nueva lista |
|
||||
| 21 | Pruebas Liberadas | 0 | Pendiente | 0 | 2 | — | Pendiente |
|
||||
| 22 | Acta Constitutiva | 0 | 1 | 0 | 1 | 1 | Nueva lista |
|
||||
| 22 | Poder del Representante Legal | 0 | 1 | 0 | 2 | 2 | Nueva lista |
|
||||
| 22 | Identificación Oficial | 1 | 1 | 0 | 3 | 3 | Nueva lista |
|
||||
| 22 | Constancia de Situación Fiscal | 1 | 1 | 0 | 4 | 4 | Nueva lista |
|
||||
| 22 | Constancia de No Adeudo de Tesorería Municipal | 1 | 1 | 0 | 5 | 5 | Nueva lista |
|
||||
| 22 | Dictamen de Factibilidad de Servicios | 0 | 0 | 1 | 6 | 6 | Nueva lista |
|
||||
| 22 | Autorización de Proyectos de Redes Internas | 0 | 0 | 0 | 7 | 7 | Nueva lista |
|
||||
| 22 | Plano de Sembrado de Vivienda | 1 | 1 | 0 | 8 | 8 | Nueva lista |
|
||||
| 22 | Relación de Viviendas | 1 | 1 | 0 | 9 | 9 | Nueva lista |
|
||||
| 23 | Carta de Asignación | 0 | Pendiente | 0 | 1 | — | Pendiente |
|
||||
| 23 | Identificación Oficial | 1 | 1 | 0 | 2 | 1 | Nueva lista |
|
||||
| 23 | Constancia RFC del Propietario | 1 | 1 | 0 | 3 | — | Pendiente |
|
||||
| 24 | Solicitud de Entrega-Recepción | 1 | 1 | 0 | 1 | 1 | Nueva lista |
|
||||
| 24 | Pruebas Liberadas | 0 | Pendiente | 0 | 2 | — | Pendiente |
|
||||
| 24 | Comprobante de Pagos de Derechos y Aportaciones | 0 | 1 | 0 | 3 | 2 | Nueva lista |
|
||||
| 24 | Contrato de Vivienda | 0 | Pendiente | 0 | 4 | — | Pendiente |
|
||||
|
||||
## Relaciones existentes
|
||||
|
||||
| Trámite | TipoTramite | Documento | TipoDocumento | Requerido | Cliente | Vigencia | Orden | Activo |
|
||||
| --- | --- | --- | --- | --- | --- | --- | --- | --- |
|
||||
| 1 | Prefactibilidad de servicios | 2 | GIS | 1 | 1 | 0 | 1 | 1 |
|
||||
|
||||
No hay relaciones existentes que coincidan con las 117 combinaciones propuestas. Por eso actualmente no hay diferencias de flags que sobrescribir dentro de ese conjunto.
|
||||
La relación anterior ocupa el orden 1 de Prefactibilidad: los siete documentos nuevos de ese trámite se agregarían en los órdenes 2–8.
|
||||
|
||||
## EsRequerido: casos opcionales o sujetos a revisión
|
||||
|
||||
Los documentos expresamente solicitados, sin condición indicada, se proponen requeridos.
|
||||
Los resultados, antecedentes y requisitos condicionales se dejan en 0. No se implementan condiciones por persona física/moral, propiedad o tipo de obra.
|
||||
Los archivos de otras solicitudes no se reutilizan automáticamente: el código actual comprueba el archivo de la solicitud correspondiente, por eso un antecedente no se vuelve requerido por el mero hecho de existir en otro trámite.
|
||||
|
||||
| Trámite | Documento propuesto opcional | Motivo / revisión |
|
||||
| --- | --- | --- |
|
||||
| 1 | Poder del Representante Legal | Condicionado a representación; se unifica Poder Notarial / Poder del Representante Legal. |
|
||||
| 3 | Dictamen de Prefactibilidad de Servicios | Equivalencia propuesta: Prefactibilidad de Servicios → Dictamen de Prefactibilidad de Servicios. Antecedente emitido por Agua; no existe reutilización automática de archivos entre solicitudes. |
|
||||
| 3 | Acta Constitutiva | Depende de persona moral o representación; no se crea una condición nueva. |
|
||||
| 3 | Poder del Representante Legal | Depende de persona moral o representación; no se crea una condición nueva. |
|
||||
| 4 | Dictamen de Prefactibilidad de Servicios | Equivalencia propuesta: Prefactibilidad de Servicios → Dictamen de Prefactibilidad de Servicios. Antecedente emitido por Agua; no existe reutilización automática de archivos entre solicitudes. |
|
||||
| 4 | Acta Constitutiva | Depende de persona moral o representación; no se crea una condición nueva. |
|
||||
| 4 | Poder del Representante Legal | Depende de persona moral o representación; no se crea una condición nueva. |
|
||||
| 4 | Convenio de Recuperación de Caudal | Resultado generado por Agua. |
|
||||
| 4 | Convenio de Aportación para Recuperación de Caudal | Ya existe en el catálogo; documento condicionado al caso. |
|
||||
| 5 | Dictamen de Factibilidad de Servicios | Equivalencia propuesta: Factibilidad de Servicios → Dictamen de Factibilidad de Servicios. La especificación admite Factibilidad Habitacional / Factibilidad de Servicios; se reutiliza el dictamen existente. |
|
||||
| 5 | Autorización de Puntos de Conexión del Fraccionamiento | Equivalencia propuesta: Autorización de Puntos de Conexión del Desarrollo → Autorización de Puntos de Conexión del Fraccionamiento. Resultado generado por Agua. |
|
||||
| 6 | Formato KYC Persona Física | Revisar aplicación por persona física/moral, representación o beneficiario. |
|
||||
| 6 | Formato Beneficiario Controlador | Revisar aplicación por persona física/moral, representación o beneficiario. |
|
||||
| 6 | Poder del Representante Legal | Revisar aplicación por persona física/moral, representación o beneficiario. |
|
||||
| 6 | Identificación Oficial | Equivalencia propuesta: Identificación Oficial del Representante Legal → Identificación Oficial. Revisar aplicación por persona física/moral, representación o beneficiario. |
|
||||
| 6 | Constancia de Situación Fiscal | Equivalencia propuesta: Constancia de Situación Fiscal del Representante Legal → Constancia de Situación Fiscal. Revisar aplicación por persona física/moral, representación o beneficiario. |
|
||||
| 6 | Contrato / Convenio de Adhesión al Fideicomiso | Existe en catálogo sin relaciones; no se pudo verificar quién carga el convenio formalizado. Relación pendiente. |
|
||||
| 7 | Autorización de Proyecto de Obras de Cabeza | Resultado; revisar documento conjunto existente antes de crear tipos separados. |
|
||||
| 7 | Autorización de Presupuesto de Obras de Cabeza | Resultado; revisar documento conjunto existente antes de crear tipos separados. |
|
||||
| 8 | Memoria de cálculo | Equivalencia propuesta: Memoria de Cálculo → Memoria de cálculo. Existe en el catálogo pero no tiene relación actual; se propone opcional por la condición si corresponde. |
|
||||
| 8 | Autorización de Proyecto de Obra Necesaria | Resultado generado por Agua. |
|
||||
| 8 | Autorización de Presupuesto de Obra Necesaria | Resultado generado por Agua. |
|
||||
| 9 | Autorización de Proyecto de Obras de Cabeza | Antecedentes alternativos: obras de cabeza / obra necesaria; no se exigen ambas variantes. |
|
||||
| 9 | Autorización de Proyecto de Obra Necesaria | Antecedentes alternativos: obras de cabeza / obra necesaria; no se exigen ambas variantes. |
|
||||
| 9 | Autorización de Presupuesto de Obras de Cabeza | Antecedentes alternativos: obras de cabeza / obra necesaria; no se exigen ambas variantes. |
|
||||
| 9 | Autorización de Presupuesto de Obra Necesaria | Antecedentes alternativos: obras de cabeza / obra necesaria; no se exigen ambas variantes. |
|
||||
| 9 | Dictamen de Prefactibilidad de Servicios | Equivalencia propuesta: Prefactibilidad de Servicios → Dictamen de Prefactibilidad de Servicios. Antecedente emitido por Agua. |
|
||||
| 9 | Acta Constitutiva | Condicionado a persona moral o representación. |
|
||||
| 9 | Poder del Representante Legal | Condicionado a persona moral o representación. |
|
||||
| 9 | Convenio de Ejecución de Obras Necesarias en Especie | Equivalencia propuesta: Convenio de Ejecución de Obra Necesaria en Especie → Convenio de Ejecución de Obras Necesarias en Especie. Documento resultante formalizado por Agua. |
|
||||
| 11 | Dictamen de Prefactibilidad de Servicios | Equivalencia propuesta: Prefactibilidad de Servicios → Dictamen de Prefactibilidad de Servicios. Antecedente de otro trámite; revisión de aplicabilidad. |
|
||||
| 11 | Convenio de Pagos para Obras Necesarias | Equivalencia propuesta: Convenio de Coordinación de Pagos para Obras Necesarias → Convenio de Pagos para Obras Necesarias. Antecedente de otro trámite; revisión de aplicabilidad. |
|
||||
| 11 | Convenio de Recuperación de Caudal | Equivalencia propuesta: Convenio de Coordinación de Pagos para Recuperación de Caudal → Convenio de Recuperación de Caudal. Antecedente de otro trámite; revisión de aplicabilidad. |
|
||||
| 11 | Convenio de Adhesión al Fideicomiso de Obras Necesarias | No existe equivalencia específica verificada con el convenio genérico ni responsable de carga confirmado. |
|
||||
| 11 | Convenio de Adhesión al Fideicomiso de Recuperación de Caudal | No existe equivalencia específica verificada con el convenio genérico ni responsable de carga confirmado. |
|
||||
| 11 | Comprobante del Primer Pago de los Convenios de Adhesión | Archivo comprobante, no concepto de pago. Depende de convenio aplicable. |
|
||||
| 11 | Poder / Carta Poder | Solo cuando no sea propietario; revisar diferencia con Poder del Representante Legal. |
|
||||
| 11 | Dictamen de Factibilidad de Servicios | Equivalencia propuesta: Factibilidad de Servicios → Dictamen de Factibilidad de Servicios. Dictamen/oficio de resultado generado por Agua. |
|
||||
| 12 | Autorización de Puntos de Conexión del Fraccionamiento | Equivalencia propuesta: Autorización de Puntos de Conexión del Desarrollo → Autorización de Puntos de Conexión del Fraccionamiento. Antecedente generado por Agua. |
|
||||
| 12 | Dictamen de Factibilidad de Servicios | Equivalencia propuesta: Factibilidad de Servicios → Dictamen de Factibilidad de Servicios. Antecedente generado por Agua. |
|
||||
| 12 | Planos Autorizados de Proyectos Ejecutivos de Obras Necesarias | Solo cuando sean requeridos para la conexión. Confirmar quién entrega/carga el plano autorizado. |
|
||||
| 12 | Autorización de Proyectos de Redes Internas | Resultado generado por Agua. |
|
||||
| 13 | Autorización de Proyectos de Redes Internas | Antecedente generado por Agua; no hay reutilización automática de archivos del trámite anterior. |
|
||||
| 19 | Pruebas Liberadas | Confirmar emisor/cargador y obligatoriedad de las pruebas liberadas. |
|
||||
| 20 | Liberación de Supervisión | Confirmar emisor/cargador y si se obtiene del trámite de supervisión. |
|
||||
| 21 | Pruebas Liberadas | Confirmar emisor/cargador y obligatoriedad de las pruebas liberadas. |
|
||||
| 22 | Acta Constitutiva | Condicionado a persona moral o representación. |
|
||||
| 22 | Poder del Representante Legal | Condicionado a persona moral o representación. |
|
||||
| 22 | Dictamen de Factibilidad de Servicios | Equivalencia propuesta: Factibilidad Habitacional Vigente → Dictamen de Factibilidad de Servicios. Vigencia explícita en la especificación. Antecedente; confirmar que el dictamen general cubre el habitacional. |
|
||||
| 22 | Autorización de Proyectos de Redes Internas | Equivalencia propuesta: Autorización de Redes Internas → Autorización de Proyectos de Redes Internas. Antecedente generado por Agua. |
|
||||
| 23 | Carta de Asignación | Confirmar emisor/cargador y aplicabilidad. |
|
||||
| 24 | Pruebas Liberadas | Confirmar emisor/cargador y obligatoriedad. |
|
||||
| 24 | Comprobante de Pagos de Derechos y Aportaciones | Archivo comprobante, no pago. Revisar obligatoriedad. |
|
||||
| 24 | Contrato de Vivienda | Confirmar si es contrato emitido por Agua o documento proporcionado por el cliente. |
|
||||
|
||||
## EsCliente: decisiones pendientes
|
||||
|
||||
No hay relaciones previas para inferir quién carga los siguientes documentos. Se deja NULL únicamente en la tabla variable de propuesta; nunca se inserta NULL en la tabla real.
|
||||
Para resultados explícitos de Agua se utiliza 0; para documentos que aporta el desarrollador, 1.
|
||||
|
||||
| Trámite | Documento | Motivo |
|
||||
| --- | --- | --- |
|
||||
| 6 | Contrato / Convenio de Adhesión al Fideicomiso | Existe en catálogo sin relaciones; no se pudo verificar quién carga el convenio formalizado. Relación pendiente. |
|
||||
| 11 | Convenio de Adhesión al Fideicomiso de Obras Necesarias | No existe equivalencia específica verificada con el convenio genérico ni responsable de carga confirmado. |
|
||||
| 11 | Convenio de Adhesión al Fideicomiso de Recuperación de Caudal | No existe equivalencia específica verificada con el convenio genérico ni responsable de carga confirmado. |
|
||||
| 12 | Planos Autorizados de Proyectos Ejecutivos de Obras Necesarias | Solo cuando sean requeridos para la conexión. Confirmar quién entrega/carga el plano autorizado. |
|
||||
| 19 | Pruebas Liberadas | Confirmar emisor/cargador y obligatoriedad de las pruebas liberadas. |
|
||||
| 20 | Liberación de Supervisión | Confirmar emisor/cargador y si se obtiene del trámite de supervisión. |
|
||||
| 21 | Pruebas Liberadas | Confirmar emisor/cargador y obligatoriedad de las pruebas liberadas. |
|
||||
| 23 | Carta de Asignación | Confirmar emisor/cargador y aplicabilidad. |
|
||||
| 24 | Pruebas Liberadas | Confirmar emisor/cargador y obligatoriedad. |
|
||||
| 24 | Contrato de Vivienda | Confirmar si es contrato emitido por Agua o documento proporcionado por el cliente. |
|
||||
|
||||
## Vigencia
|
||||
|
||||
Únicamente se propone TieneVigencia = 1 para el dictamen usado como «Factibilidad Habitacional Vigente» en el trámite 22, porque la vigencia es explícita en esa especificación.
|
||||
Las demás relaciones nuevas se dejan en 0. No se modifican relaciones existentes ni se crean bloqueos por vencimiento.
|
||||
|
||||
Recomendaciones para revisión, sin activarlas automáticamente:
|
||||
|
||||
- Constancias de no adeudo: confirmar periodo de validez según emisor.
|
||||
- Prefactibilidad y factibilidad: confirmar plazo y si se aplica también a antecedentes.
|
||||
- Identificación oficial: confirmar captura de vencimiento.
|
||||
- Comprobante de domicilio: confirmar si se valida antigüedad máxima y cómo se captura.
|
||||
- Oficios o licencias municipales y rasantes: confirmar si tienen vencimiento documental.
|
||||
- Permisos vigentes del Ayuntamiento (1009): ya existe en catálogo, pero no está relacionado actualmente; no se agrega como requisito nuevo.
|
||||
|
||||
## GIS: alcance preciso
|
||||
|
||||
- Existe GIS, clave actual 2, con extensión .gis y máximo de 100 MB; está relacionado con Prefactibilidad (1).
|
||||
- Existe Archivo GIS de la Etapa, clave actual 1016, con extensión gis y sin máximo configurado en catálogo.
|
||||
- Se reutiliza por nombre Archivo GIS de la Etapa para Autorización de proyectos de redes internas (12), con EsRequerido = 1, EsCliente = 1, TieneVigencia = 0, EsActivo = 1.
|
||||
- Su posición en la lista completa es 18; en la parte actualmente lista es 17 porque el antecedente de planos autorizados sigue pendiente de EsCliente.
|
||||
- No se crea un tercer GIS, no se fusionan los dos tipos ya existentes y no se elimina la relación 1/2.
|
||||
- ServicioGisFraccionamiento sigue llamando RegisterExternalStageFile con trámite 1 y documento 2. TramiteDocumentoService también reconoce GIS por la clave 2. Este código no se modifica.
|
||||
- Por tanto, este SQL prepara la relación de destino; NO mueve por sí solo la operación de la pantalla ni libera el requisito GIS anterior. Eso corresponde al cambio funcional separado que indica la especificación.
|
||||
|
||||
## Extensiones y diferencias de metadatos
|
||||
|
||||
La BD utiliza ambas notaciones (.pdf / pdf y .gis / gis), además de listas como pdf,dwg.
|
||||
El servicio admite separadores coma, punto y coma, barra vertical o espacio y normaliza el punto inicial. Para tipos nuevos se usa la notación sin punto indicada en la especificación.
|
||||
Los planos específicos usan pdf,dwg; las memorias descriptivas pdf,xls,xlsx; el formato de alta de lotes xls,xlsx.
|
||||
No se fija extensión para EPANET ni para otros documentos cuyo formato no fue definido.
|
||||
|
||||
Los 14 registros reutilizados mantienen exactamente sus descripciones, extensiones y tamaños consultados. No hay cambios de metadatos propuestos para ellos.
|
||||
El SQL compara esos valores con la BD nuevamente y los muestra como diferencias si cambiaron desde esta revisión; no ejecuta UPDATE sobre el catálogo ni sobre relaciones existentes.
|
||||
|
||||
## Conceptos descartados y condiciones de inclusión
|
||||
|
||||
- Pago conforme a rangos del artículo 52: corresponde al módulo de pagos; no se inserta como tipo documental.
|
||||
- Importes, pagos de derechos y aportaciones y pagos adelantados/saldos: no se convierten en documentos.
|
||||
- Teléfono, dirección, correo, RFC capturable y datos de contacto: no se crean como tipos documentales.
|
||||
- Número de manzana, lote, m² y tipo de vivienda son campos del archivo Relación de Viviendas, no cuatro documentos distintos.
|
||||
- Sí se incluyen los archivos Comprobante del Primer Pago y Comprobante de Pagos de Derechos y Aportaciones: son evidencias documentales expresamente solicitadas, no registros ni conceptos de pago.
|
||||
- Memoria de Cálculo se encontró en el catálogo y se propone opcional para el trámite 8.
|
||||
- Convenio de Aportación para Recuperación de Caudal se encontró y se reutiliza para el trámite 4.
|
||||
- No se encontraron antecedentes configurados en Supervisión de obra externa (10), por lo que no se inventan relaciones adicionales allí.
|
||||
- La constancia independiente de No Adeudo de Agua de Hermosillo no pudo identificarse inequívocamente; no se crea ni se vincula por inferencia.
|
||||
|
||||
## Verificación y entrega
|
||||
|
||||
El SQL completo está en Propuesta_Catalogo_Documentos_Tramites.sql, junto a este reporte.
|
||||
No se ejecutó la rama de inserción ni se hicieron pruebas de escritura con rollback, para no consumir identidades ni modificar datos.
|
||||
Se validaron sintaxis y diagnóstico contra SQL Server: 18 trámites resueltos, 66 documentos propuestos, 117 relaciones diagnosticadas, 45 documentos y 99 relaciones listos, 18 relaciones pendientes.
|
||||
La comparación de nombres no detectó duplicados exactos/por mayúsculas y espacios. La duplicidad semántica GIS queda documentada.
|
||||
Las decisiones pendientes están en los datos del propio SQL, no ocultas en un UPDATE. No deben quitarse las marcas de revisión sin resolver primero el documento canónico y su configuración.
|
||||
@@ -0,0 +1,601 @@
|
||||
/*
|
||||
PROPUESTA PARA REVISIÓN. NO EJECUTADA SOBRE LOS DATOS.
|
||||
Diagnóstico por defecto: @Aplicar = 0; no modifica tablas de negocio.
|
||||
Para aplicar después de aprobar: configurar @CveUsuario y @Aplicar = 1.
|
||||
Resolver las revisiones y EsCliente pendientes; o autorizar expresamente
|
||||
una carga parcial con @PermitirPendientes = 1.
|
||||
|
||||
Se conservan todos los documentos, relaciones, metadatos, archivos,
|
||||
excepciones por solicitud y componentes GIS existentes.
|
||||
GIS: se prepara Archivo GIS de la Etapa -> trámite 12; no se retira GIS -> 1.
|
||||
Los IDs documentales siempre se resuelven por nombre, nunca se fijan.
|
||||
Las claves de trámite y sus nombres se verificaron en la BD.
|
||||
Los órdenes nuevos se agregan al máximo existente, sin reordenar filas previas.
|
||||
No inserta pagos, no crea ni altera PAs ni estructuras de negocio.
|
||||
*/
|
||||
SET NOCOUNT ON;
|
||||
SET XACT_ABORT ON;
|
||||
|
||||
DECLARE @Aplicar bit = 0;
|
||||
DECLARE @CveUsuario int = NULL; -- Configurar una clave real de Sis_Usuarios.
|
||||
DECLARE @PermitirPendientes bit = 0; -- Mantener 0 para evitar una carga parcial inadvertida.
|
||||
|
||||
DECLARE @Tramites TABLE
|
||||
(
|
||||
CveVerificada int PRIMARY KEY,
|
||||
NombreVerificado nvarchar(200) COLLATE Modern_Spanish_CS_AS NOT NULL,
|
||||
CveTipoTramite int NULL
|
||||
);
|
||||
INSERT INTO @Tramites (CveVerificada, NombreVerificado)
|
||||
VALUES
|
||||
(1, N'Prefactibilidad de servicios'),
|
||||
(3, N'Convenio de pagos para obras necesarias'),
|
||||
(4, N'Convenio de recuperación de caudal'),
|
||||
(5, N'Autorización de puntos de conexión del fraccionamiento'),
|
||||
(6, N'Convenio de adhesión'),
|
||||
(7, N'Autorización de proyectos y presupuesto de obras de cabeza'),
|
||||
(8, N'Autorización de proyectos de obra necesaria'),
|
||||
(9, N'Convenio de obras necesarias en especie'),
|
||||
(10, N'Supervisión de obra externa'),
|
||||
(11, N'Factibilidad de servicios'),
|
||||
(12, N'Autorización de proyectos de redes internas'),
|
||||
(13, N'Supervisión de obra de redes internas'),
|
||||
(19, N'Entrega de Infraestructura Externa'),
|
||||
(20, N'Contratación de Macromedidor'),
|
||||
(21, N'Entrega de Infraestructura Interna'),
|
||||
(22, N'Convenio de Actualización de Pagos de Derechos y Aportaciones'),
|
||||
(23, N'Contratación de Vivienda'),
|
||||
(24, N'Entrega - Recepción');
|
||||
|
||||
DECLARE @Documentos TABLE
|
||||
(
|
||||
Nombre nvarchar(200) COLLATE Modern_Spanish_CI_AS PRIMARY KEY,
|
||||
Descripcion nvarchar(500) NULL,
|
||||
Extensiones nvarchar(200) NULL,
|
||||
TamanoMaximoMb int NULL,
|
||||
RevisionPendiente nvarchar(1000) NULL,
|
||||
CveTipoDocumento int NULL,
|
||||
Coincidencias int NOT NULL DEFAULT (0),
|
||||
EsActivoActual bit NULL
|
||||
);
|
||||
INSERT INTO @Documentos
|
||||
(Nombre, Descripcion, Extensiones, TamanoMaximoMb, RevisionPendiente)
|
||||
VALUES
|
||||
(N'Escrito de Solicitud de Prefactibilidad', N'Escrito de Solicitud de Prefactibilidad', NULL, NULL, NULL),
|
||||
(N'Escrituras del Terreno', N'Escrituras del Terreno', NULL, NULL, NULL),
|
||||
(N'Croquis de Ubicación del Predio', N'Croquis de Ubicación del Predio', NULL, NULL, NULL),
|
||||
(N'Dictamen de Uso de Suelo', N'Dictamen de Uso de Suelo', NULL, NULL, NULL),
|
||||
(N'Poder del Representante Legal', N'Poder del Representante Legal', NULL, NULL, NULL),
|
||||
(N'Identificación Oficial', N'Identificación Oficial', NULL, NULL, NULL),
|
||||
(N'Constancia de No Adeudo de Tesorería Municipal', N'Constancia de No Adeudo de Tesorería Municipal', NULL, NULL, NULL),
|
||||
(N'Escrito de Solicitud de Convenio de Pagos para Obras Necesarias', N'Escrito de Solicitud de Convenio de Pagos para Obras Necesarias', NULL, NULL, NULL),
|
||||
(N'Constancia de Situación Fiscal', N'Constancia de Situación Fiscal', NULL, NULL, NULL),
|
||||
(N'Comprobante de Domicilio', N'Comprobante de Domicilio', NULL, NULL, NULL),
|
||||
(N'Dictamen de Prefactibilidad de Servicios', N'Dictamen resultado del trámite de Prefactibilidad de Servicios.', N'pdf', NULL, NULL),
|
||||
(N'Acta Constitutiva', N'Acta Constitutiva', NULL, NULL, NULL),
|
||||
(N'Escrito de Solicitud de Convenio para Recuperación de Caudal', N'Escrito de Solicitud de Convenio para Recuperación de Caudal', NULL, NULL, NULL),
|
||||
(N'Convenio de Recuperación de Caudal', N'Convenio correspondiente al proceso de recuperación de caudal.', N'pdf', NULL, NULL),
|
||||
(N'Convenio de Aportación para Recuperación de Caudal', N'Convenio de aportación para recuperación de caudal cuando corresponda.', N'pdf', NULL, NULL),
|
||||
(N'Solicitud de Puntos de Conexión', N'Solicitud de Puntos de Conexión', NULL, NULL, NULL),
|
||||
(N'Dictamen de Factibilidad de Servicios', N'Dictamen resultado del trámite de Factibilidad de Servicios.', N'pdf', NULL, NULL),
|
||||
(N'Autorización de Puntos de Conexión del Fraccionamiento', N'Oficio de autorización de los puntos de conexión del fraccionamiento.', N'pdf', NULL, NULL),
|
||||
(N'Formato KYC Persona Física', N'Formato KYC Persona Física', NULL, NULL, NULL),
|
||||
(N'Formato Beneficiario Controlador', N'Formato Beneficiario Controlador', NULL, NULL, NULL),
|
||||
(N'Contrato / Convenio de Adhesión al Fideicomiso', N'Documento correspondiente a la adhesión al fideicomiso.', N'pdf', NULL, NULL),
|
||||
(N'Solicitud de Revisión y Autorización de Proyectos y Presupuesto', N'Solicitud de Revisión y Autorización de Proyectos y Presupuesto', NULL, NULL, NULL),
|
||||
(N'Proyecto Ejecutivo de Infraestructura Hidráulica', N'Proyecto ejecutivo correspondiente a obras de infraestructura hidráulica.', NULL, NULL, NULL),
|
||||
(N'Presupuesto a Costo Directo', N'Presupuesto a Costo Directo', NULL, NULL, N'Existe Presupuesto de Obra (1007): confirmar si es el mismo documento o un presupuesto distinto a costo directo.'),
|
||||
(N'Autorización de Proyecto de Obras de Cabeza', N'Autorización de Proyecto de Obras de Cabeza', NULL, NULL, N'Existe Autorización de Proyectos y Presupuesto de Obras de Cabeza (1026), un documento conjunto. Confirmar si se separan las dos autorizaciones.'),
|
||||
(N'Autorización de Presupuesto de Obras de Cabeza', N'Autorización de Presupuesto de Obras de Cabeza', NULL, NULL, N'Existe Autorización de Proyectos y Presupuesto de Obras de Cabeza (1026), un documento conjunto. Confirmar si se separan las dos autorizaciones.'),
|
||||
(N'Memoria de cálculo', N'Memoria de cálculo correspondiente al proyecto de infraestructura hidráulica.', NULL, NULL, NULL),
|
||||
(N'Autorización de Proyecto de Obra Necesaria', N'Documento de autorización del proyecto de obra necesaria.', N'pdf', NULL, NULL),
|
||||
(N'Autorización de Presupuesto de Obra Necesaria', N'Autorización de Presupuesto de Obra Necesaria', NULL, NULL, NULL),
|
||||
(N'Escrito de Solicitud de Convenio de Obra Necesaria en Especie', N'Escrito de Solicitud de Convenio de Obra Necesaria en Especie', NULL, NULL, NULL),
|
||||
(N'Convenio de Ejecución de Obras Necesarias en Especie', N'Convenio correspondiente a la ejecución de obras necesarias mediante aportación en especie.', N'pdf', NULL, NULL),
|
||||
(N'Solicitud para Asignación de Supervisor', N'Solicitud para Asignación de Supervisor', NULL, NULL, NULL),
|
||||
(N'Programa de Obra', N'Programa de ejecución de la obra.', NULL, NULL, NULL),
|
||||
(N'Escrito de Solicitud de Factibilidad de Servicios', N'Escrito de Solicitud de Factibilidad de Servicios', NULL, NULL, NULL),
|
||||
(N'Convenio de Pagos para Obras Necesarias', N'Convenio que establece los pagos correspondientes a obras necesarias.', N'pdf', NULL, NULL),
|
||||
(N'Convenio de Adhesión al Fideicomiso de Obras Necesarias', N'Convenio de Adhesión al Fideicomiso de Obras Necesarias', NULL, NULL, N'Confirmar si es documento diferente del Contrato / Convenio de Adhesión al Fideicomiso (1023).'),
|
||||
(N'Convenio de Adhesión al Fideicomiso de Recuperación de Caudal', N'Convenio de Adhesión al Fideicomiso de Recuperación de Caudal', NULL, NULL, N'Confirmar si es documento diferente del Contrato / Convenio de Adhesión al Fideicomiso (1023).'),
|
||||
(N'Comprobante del Primer Pago de los Convenios de Adhesión', N'Comprobante del Primer Pago de los Convenios de Adhesión', NULL, NULL, NULL),
|
||||
(N'Poder / Carta Poder', N'Poder / Carta Poder', NULL, NULL, N'Confirmar si basta Poder del Representante Legal o si Carta Poder es un tipo distinto.'),
|
||||
(N'Escrito de Solicitud de Revisión y Autorización de Proyectos', N'Escrito de Solicitud de Revisión y Autorización de Proyectos', NULL, NULL, NULL),
|
||||
(N'Oficio de Licencia de Uso de Suelo', N'Oficio de Licencia de Uso de Suelo', NULL, NULL, NULL),
|
||||
(N'Convenio de Fraccionamiento', N'Convenio de Fraccionamiento', NULL, NULL, NULL),
|
||||
(N'Plano del Convenio de Fraccionamiento Sellado y Firmado', N'Plano del Convenio de Fraccionamiento Sellado y Firmado', NULL, NULL, NULL),
|
||||
(N'Oficio de Rasantes Autorizado', N'Oficio de Rasantes Autorizado', NULL, NULL, NULL),
|
||||
(N'Plano de Rasantes Autorizado', N'Plano de Rasantes Autorizado', N'pdf,dwg', NULL, NULL),
|
||||
(N'Planos Autorizados de Proyectos Ejecutivos de Obras Necesarias', N'Planos Autorizados de Proyectos Ejecutivos de Obras Necesarias', NULL, NULL, NULL),
|
||||
(N'Memorias Descriptivas y Cálculos Hidráulicos', N'Memorias Descriptivas y Cálculos Hidráulicos', N'pdf,xls,xlsx', NULL, NULL),
|
||||
(N'Planos de Redes Internas de Agua Potable', N'Planos de Redes Internas de Agua Potable', N'pdf,dwg', NULL, NULL),
|
||||
(N'Planos de Redes Internas de Alcantarillado Sanitario', N'Planos de Redes Internas de Alcantarillado Sanitario', N'pdf,dwg', NULL, NULL),
|
||||
(N'Plano de Sembrado de Vivienda', N'Plano de Sembrado de Vivienda', NULL, NULL, NULL),
|
||||
(N'Plano de Nomenclatura', N'Plano de Nomenclatura', NULL, NULL, NULL),
|
||||
(N'Formato de Alta de Lotes', N'Formato de Alta de Lotes', N'xls,xlsx', NULL, NULL),
|
||||
(N'Corrida Hidráulica EPANET', N'Corrida Hidráulica EPANET', NULL, NULL, NULL),
|
||||
(N'Archivo GIS de la Etapa', N'Archivo GIS correspondiente a los lotes y geometrías de la etapa del fraccionamiento.', N'gis', NULL, NULL),
|
||||
(N'Autorización de Proyectos de Redes Internas', N'Documento mediante el cual se autoriza el proyecto de redes internas.', N'pdf', NULL, NULL),
|
||||
(N'Solicitud para Entrega de Infraestructura Externa', N'Solicitud para Entrega de Infraestructura Externa', NULL, NULL, NULL),
|
||||
(N'Pruebas Liberadas', N'Pruebas Liberadas', NULL, NULL, NULL),
|
||||
(N'Solicitud para Contratación del Macromedidor', N'Solicitud para Contratación del Macromedidor', NULL, NULL, NULL),
|
||||
(N'Liberación de Supervisión', N'Liberación de Supervisión', NULL, NULL, NULL),
|
||||
(N'Solicitud para Entrega de Infraestructura Interna', N'Solicitud para Entrega de Infraestructura Interna', NULL, NULL, NULL),
|
||||
(N'Relación de Viviendas', N'Relación de viviendas con número de manzana, número de lote, m² de construcción y tipo de vivienda.', NULL, NULL, NULL),
|
||||
(N'Carta de Asignación', N'Carta de Asignación', NULL, NULL, NULL),
|
||||
(N'Constancia RFC del Propietario', N'Constancia RFC del Propietario', NULL, NULL, N'Confirmar si se acepta la misma Constancia de Situación Fiscal o si es una constancia de RFC diferente.'),
|
||||
(N'Solicitud de Entrega-Recepción', N'Solicitud de Entrega-Recepción', NULL, NULL, NULL),
|
||||
(N'Comprobante de Pagos de Derechos y Aportaciones', N'Comprobante de Pagos de Derechos y Aportaciones', NULL, NULL, NULL),
|
||||
(N'Contrato de Vivienda', N'Contrato de Vivienda', NULL, NULL, NULL);
|
||||
|
||||
DECLARE @Relaciones TABLE
|
||||
(
|
||||
CveVerificada int NOT NULL,
|
||||
Documento nvarchar(200) COLLATE Modern_Spanish_CI_AS NOT NULL,
|
||||
EsRequerido bit NOT NULL,
|
||||
EsCliente bit NULL,
|
||||
TieneVigencia bit NOT NULL,
|
||||
OrdenEspecificacion int NOT NULL,
|
||||
Nota nvarchar(1000) NULL,
|
||||
PRIMARY KEY (CveVerificada, Documento)
|
||||
);
|
||||
INSERT INTO @Relaciones
|
||||
(CveVerificada, Documento, EsRequerido, EsCliente, TieneVigencia, OrdenEspecificacion, Nota)
|
||||
VALUES
|
||||
(1, N'Escrito de Solicitud de Prefactibilidad', 1, 1, 0, 1, NULL),
|
||||
(1, N'Escrituras del Terreno', 1, 1, 0, 2, NULL),
|
||||
(1, N'Croquis de Ubicación del Predio', 1, 1, 0, 3, NULL),
|
||||
(1, N'Dictamen de Uso de Suelo', 1, 1, 0, 4, NULL),
|
||||
(1, N'Poder del Representante Legal', 0, 1, 0, 5, N'Condicionado a representación; se unifica Poder Notarial / Poder del Representante Legal.'),
|
||||
(1, N'Identificación Oficial', 1, 1, 0, 6, NULL),
|
||||
(1, N'Constancia de No Adeudo de Tesorería Municipal', 1, 1, 0, 7, NULL),
|
||||
(3, N'Escrito de Solicitud de Convenio de Pagos para Obras Necesarias', 1, 1, 0, 1, NULL),
|
||||
(3, N'Identificación Oficial', 1, 1, 0, 2, NULL),
|
||||
(3, N'Constancia de Situación Fiscal', 1, 1, 0, 3, NULL),
|
||||
(3, N'Comprobante de Domicilio', 1, 1, 0, 4, NULL),
|
||||
(3, N'Constancia de No Adeudo de Tesorería Municipal', 1, 1, 0, 5, NULL),
|
||||
(3, N'Dictamen de Prefactibilidad de Servicios', 0, 0, 0, 6, N'Equivalencia propuesta: Prefactibilidad de Servicios → Dictamen de Prefactibilidad de Servicios. Antecedente emitido por Agua; no existe reutilización automática de archivos entre solicitudes.'),
|
||||
(3, N'Acta Constitutiva', 0, 1, 0, 7, N'Depende de persona moral o representación; no se crea una condición nueva.'),
|
||||
(3, N'Poder del Representante Legal', 0, 1, 0, 8, N'Depende de persona moral o representación; no se crea una condición nueva.'),
|
||||
(4, N'Escrito de Solicitud de Convenio para Recuperación de Caudal', 1, 1, 0, 1, NULL),
|
||||
(4, N'Identificación Oficial', 1, 1, 0, 2, NULL),
|
||||
(4, N'Constancia de Situación Fiscal', 1, 1, 0, 3, NULL),
|
||||
(4, N'Comprobante de Domicilio', 1, 1, 0, 4, NULL),
|
||||
(4, N'Constancia de No Adeudo de Tesorería Municipal', 1, 1, 0, 5, NULL),
|
||||
(4, N'Dictamen de Prefactibilidad de Servicios', 0, 0, 0, 6, N'Equivalencia propuesta: Prefactibilidad de Servicios → Dictamen de Prefactibilidad de Servicios. Antecedente emitido por Agua; no existe reutilización automática de archivos entre solicitudes.'),
|
||||
(4, N'Acta Constitutiva', 0, 1, 0, 7, N'Depende de persona moral o representación; no se crea una condición nueva.'),
|
||||
(4, N'Poder del Representante Legal', 0, 1, 0, 8, N'Depende de persona moral o representación; no se crea una condición nueva.'),
|
||||
(4, N'Convenio de Recuperación de Caudal', 0, 0, 0, 9, N'Resultado generado por Agua.'),
|
||||
(4, N'Convenio de Aportación para Recuperación de Caudal', 0, 0, 0, 10, N'Ya existe en el catálogo; documento condicionado al caso.'),
|
||||
(5, N'Solicitud de Puntos de Conexión', 1, 1, 0, 1, NULL),
|
||||
(5, N'Croquis de Ubicación del Predio', 1, 1, 0, 2, NULL),
|
||||
(5, N'Dictamen de Factibilidad de Servicios', 0, 0, 0, 3, N'Equivalencia propuesta: Factibilidad de Servicios → Dictamen de Factibilidad de Servicios. La especificación admite Factibilidad Habitacional / Factibilidad de Servicios; se reutiliza el dictamen existente.'),
|
||||
(5, N'Autorización de Puntos de Conexión del Fraccionamiento', 0, 0, 0, 4, N'Equivalencia propuesta: Autorización de Puntos de Conexión del Desarrollo → Autorización de Puntos de Conexión del Fraccionamiento. Resultado generado por Agua.'),
|
||||
(6, N'Formato KYC Persona Física', 0, 1, 0, 1, N'Revisar aplicación por persona física/moral, representación o beneficiario.'),
|
||||
(6, N'Formato Beneficiario Controlador', 0, 1, 0, 2, N'Revisar aplicación por persona física/moral, representación o beneficiario.'),
|
||||
(6, N'Poder del Representante Legal', 0, 1, 0, 3, N'Revisar aplicación por persona física/moral, representación o beneficiario.'),
|
||||
(6, N'Identificación Oficial', 0, 1, 0, 4, N'Equivalencia propuesta: Identificación Oficial del Representante Legal → Identificación Oficial. Revisar aplicación por persona física/moral, representación o beneficiario.'),
|
||||
(6, N'Constancia de Situación Fiscal', 0, 1, 0, 5, N'Equivalencia propuesta: Constancia de Situación Fiscal del Representante Legal → Constancia de Situación Fiscal. Revisar aplicación por persona física/moral, representación o beneficiario.'),
|
||||
(6, N'Comprobante de Domicilio', 1, 1, 0, 6, NULL),
|
||||
(6, N'Contrato / Convenio de Adhesión al Fideicomiso', 0, NULL, 0, 7, N'Existe en catálogo sin relaciones; no se pudo verificar quién carga el convenio formalizado. Relación pendiente.'),
|
||||
(7, N'Solicitud de Revisión y Autorización de Proyectos y Presupuesto', 1, 1, 0, 1, NULL),
|
||||
(7, N'Proyecto Ejecutivo de Infraestructura Hidráulica', 1, 1, 0, 2, N'Equivalencia propuesta: Proyecto Ejecutivo Hidráulico → Proyecto Ejecutivo de Infraestructura Hidráulica.'),
|
||||
(7, N'Presupuesto a Costo Directo', 1, 1, 0, 3, NULL),
|
||||
(8, N'Solicitud de Revisión y Autorización de Proyectos y Presupuesto', 1, 1, 0, 1, NULL),
|
||||
(8, N'Proyecto Ejecutivo de Infraestructura Hidráulica', 1, 1, 0, 2, N'Equivalencia propuesta: Proyecto Ejecutivo Hidráulico → Proyecto Ejecutivo de Infraestructura Hidráulica.'),
|
||||
(8, N'Presupuesto a Costo Directo', 1, 1, 0, 3, NULL),
|
||||
(7, N'Autorización de Proyecto de Obras de Cabeza', 0, 0, 0, 4, N'Resultado; revisar documento conjunto existente antes de crear tipos separados.'),
|
||||
(7, N'Autorización de Presupuesto de Obras de Cabeza', 0, 0, 0, 5, N'Resultado; revisar documento conjunto existente antes de crear tipos separados.'),
|
||||
(8, N'Memoria de cálculo', 0, 1, 0, 4, N'Equivalencia propuesta: Memoria de Cálculo → Memoria de cálculo. Existe en el catálogo pero no tiene relación actual; se propone opcional por la condición si corresponde.'),
|
||||
(8, N'Autorización de Proyecto de Obra Necesaria', 0, 0, 0, 5, N'Resultado generado por Agua.'),
|
||||
(8, N'Autorización de Presupuesto de Obra Necesaria', 0, 0, 0, 6, N'Resultado generado por Agua.'),
|
||||
(9, N'Escrito de Solicitud de Convenio de Obra Necesaria en Especie', 1, 1, 0, 1, NULL),
|
||||
(9, N'Autorización de Proyecto de Obras de Cabeza', 0, 0, 0, 2, N'Antecedentes alternativos: obras de cabeza / obra necesaria; no se exigen ambas variantes.'),
|
||||
(9, N'Autorización de Proyecto de Obra Necesaria', 0, 0, 0, 3, N'Antecedentes alternativos: obras de cabeza / obra necesaria; no se exigen ambas variantes.'),
|
||||
(9, N'Autorización de Presupuesto de Obras de Cabeza', 0, 0, 0, 4, N'Antecedentes alternativos: obras de cabeza / obra necesaria; no se exigen ambas variantes.'),
|
||||
(9, N'Autorización de Presupuesto de Obra Necesaria', 0, 0, 0, 5, N'Antecedentes alternativos: obras de cabeza / obra necesaria; no se exigen ambas variantes.'),
|
||||
(9, N'Identificación Oficial', 1, 1, 0, 6, NULL),
|
||||
(9, N'Constancia de Situación Fiscal', 1, 1, 0, 7, NULL),
|
||||
(9, N'Comprobante de Domicilio', 1, 1, 0, 8, NULL),
|
||||
(9, N'Constancia de No Adeudo de Tesorería Municipal', 1, 1, 0, 9, NULL),
|
||||
(9, N'Dictamen de Prefactibilidad de Servicios', 0, 0, 0, 10, N'Equivalencia propuesta: Prefactibilidad de Servicios → Dictamen de Prefactibilidad de Servicios. Antecedente emitido por Agua.'),
|
||||
(9, N'Acta Constitutiva', 0, 1, 0, 11, N'Condicionado a persona moral o representación.'),
|
||||
(9, N'Poder del Representante Legal', 0, 1, 0, 12, N'Condicionado a persona moral o representación.'),
|
||||
(9, N'Convenio de Ejecución de Obras Necesarias en Especie', 0, 0, 0, 13, N'Equivalencia propuesta: Convenio de Ejecución de Obra Necesaria en Especie → Convenio de Ejecución de Obras Necesarias en Especie. Documento resultante formalizado por Agua.'),
|
||||
(10, N'Solicitud para Asignación de Supervisor', 1, 1, 0, 1, NULL),
|
||||
(10, N'Programa de Obra', 1, 1, 0, 2, NULL),
|
||||
(11, N'Escrito de Solicitud de Factibilidad de Servicios', 1, 1, 0, 1, NULL),
|
||||
(11, N'Dictamen de Prefactibilidad de Servicios', 0, 0, 0, 2, N'Equivalencia propuesta: Prefactibilidad de Servicios → Dictamen de Prefactibilidad de Servicios. Antecedente de otro trámite; revisión de aplicabilidad.'),
|
||||
(11, N'Convenio de Pagos para Obras Necesarias', 0, 0, 0, 3, N'Equivalencia propuesta: Convenio de Coordinación de Pagos para Obras Necesarias → Convenio de Pagos para Obras Necesarias. Antecedente de otro trámite; revisión de aplicabilidad.'),
|
||||
(11, N'Convenio de Recuperación de Caudal', 0, 0, 0, 4, N'Equivalencia propuesta: Convenio de Coordinación de Pagos para Recuperación de Caudal → Convenio de Recuperación de Caudal. Antecedente de otro trámite; revisión de aplicabilidad.'),
|
||||
(11, N'Convenio de Adhesión al Fideicomiso de Obras Necesarias', 0, NULL, 0, 5, N'No existe equivalencia específica verificada con el convenio genérico ni responsable de carga confirmado.'),
|
||||
(11, N'Convenio de Adhesión al Fideicomiso de Recuperación de Caudal', 0, NULL, 0, 6, N'No existe equivalencia específica verificada con el convenio genérico ni responsable de carga confirmado.'),
|
||||
(11, N'Comprobante del Primer Pago de los Convenios de Adhesión', 0, 1, 0, 7, N'Archivo comprobante, no concepto de pago. Depende de convenio aplicable.'),
|
||||
(11, N'Poder / Carta Poder', 0, 1, 0, 8, N'Solo cuando no sea propietario; revisar diferencia con Poder del Representante Legal.'),
|
||||
(11, N'Identificación Oficial', 1, 1, 0, 9, NULL),
|
||||
(11, N'Constancia de No Adeudo de Tesorería Municipal', 1, 1, 0, 10, NULL),
|
||||
(11, N'Dictamen de Factibilidad de Servicios', 0, 0, 0, 11, N'Equivalencia propuesta: Factibilidad de Servicios → Dictamen de Factibilidad de Servicios. Dictamen/oficio de resultado generado por Agua.'),
|
||||
(12, N'Escrito de Solicitud de Revisión y Autorización de Proyectos', 1, 1, 0, 1, NULL),
|
||||
(12, N'Constancia de No Adeudo de Tesorería Municipal', 1, 1, 0, 2, NULL),
|
||||
(12, N'Oficio de Licencia de Uso de Suelo', 1, 1, 0, 3, NULL),
|
||||
(12, N'Convenio de Fraccionamiento', 1, 1, 0, 4, NULL),
|
||||
(12, N'Plano del Convenio de Fraccionamiento Sellado y Firmado', 1, 1, 0, 5, NULL),
|
||||
(12, N'Oficio de Rasantes Autorizado', 1, 1, 0, 6, NULL),
|
||||
(12, N'Plano de Rasantes Autorizado', 1, 1, 0, 7, NULL),
|
||||
(12, N'Autorización de Puntos de Conexión del Fraccionamiento', 0, 0, 0, 8, N'Equivalencia propuesta: Autorización de Puntos de Conexión del Desarrollo → Autorización de Puntos de Conexión del Fraccionamiento. Antecedente generado por Agua.'),
|
||||
(12, N'Dictamen de Factibilidad de Servicios', 0, 0, 0, 9, N'Equivalencia propuesta: Factibilidad de Servicios → Dictamen de Factibilidad de Servicios. Antecedente generado por Agua.'),
|
||||
(12, N'Planos Autorizados de Proyectos Ejecutivos de Obras Necesarias', 0, NULL, 0, 10, N'Solo cuando sean requeridos para la conexión. Confirmar quién entrega/carga el plano autorizado.'),
|
||||
(12, N'Memorias Descriptivas y Cálculos Hidráulicos', 1, 1, 0, 11, NULL),
|
||||
(12, N'Planos de Redes Internas de Agua Potable', 1, 1, 0, 12, NULL),
|
||||
(12, N'Planos de Redes Internas de Alcantarillado Sanitario', 1, 1, 0, 13, NULL),
|
||||
(12, N'Plano de Sembrado de Vivienda', 1, 1, 0, 14, NULL),
|
||||
(12, N'Plano de Nomenclatura', 1, 1, 0, 15, NULL),
|
||||
(12, N'Formato de Alta de Lotes', 1, 1, 0, 16, NULL),
|
||||
(12, N'Corrida Hidráulica EPANET', 1, 1, 0, 17, NULL),
|
||||
(12, N'Archivo GIS de la Etapa', 1, 1, 0, 18, NULL),
|
||||
(12, N'Autorización de Proyectos de Redes Internas', 0, 0, 0, 19, N'Resultado generado por Agua.'),
|
||||
(13, N'Solicitud para Asignación de Supervisor', 1, 1, 0, 1, NULL),
|
||||
(13, N'Programa de Obra', 1, 1, 0, 2, NULL),
|
||||
(13, N'Autorización de Proyectos de Redes Internas', 0, 0, 0, 3, N'Antecedente generado por Agua; no hay reutilización automática de archivos del trámite anterior.'),
|
||||
(19, N'Solicitud para Entrega de Infraestructura Externa', 1, 1, 0, 1, NULL),
|
||||
(19, N'Pruebas Liberadas', 0, NULL, 0, 2, N'Confirmar emisor/cargador y obligatoriedad de las pruebas liberadas.'),
|
||||
(20, N'Solicitud para Contratación del Macromedidor', 1, 1, 0, 1, NULL),
|
||||
(20, N'Liberación de Supervisión', 0, NULL, 0, 2, N'Confirmar emisor/cargador y si se obtiene del trámite de supervisión.'),
|
||||
(21, N'Solicitud para Entrega de Infraestructura Interna', 1, 1, 0, 1, NULL),
|
||||
(21, N'Pruebas Liberadas', 0, NULL, 0, 2, N'Confirmar emisor/cargador y obligatoriedad de las pruebas liberadas.'),
|
||||
(22, N'Acta Constitutiva', 0, 1, 0, 1, N'Condicionado a persona moral o representación.'),
|
||||
(22, N'Poder del Representante Legal', 0, 1, 0, 2, N'Condicionado a persona moral o representación.'),
|
||||
(22, N'Identificación Oficial', 1, 1, 0, 3, N'Equivalencia propuesta: Identificación del Representante Legal → Identificación Oficial.'),
|
||||
(22, N'Constancia de Situación Fiscal', 1, 1, 0, 4, NULL),
|
||||
(22, N'Constancia de No Adeudo de Tesorería Municipal', 1, 1, 0, 5, N'Equivalencia propuesta: Constancia de No Adeudo de Tesorería → Constancia de No Adeudo de Tesorería Municipal.'),
|
||||
(22, N'Dictamen de Factibilidad de Servicios', 0, 0, 1, 6, N'Equivalencia propuesta: Factibilidad Habitacional Vigente → Dictamen de Factibilidad de Servicios. Vigencia explícita en la especificación. Antecedente; confirmar que el dictamen general cubre el habitacional.'),
|
||||
(22, N'Autorización de Proyectos de Redes Internas', 0, 0, 0, 7, N'Equivalencia propuesta: Autorización de Redes Internas → Autorización de Proyectos de Redes Internas. Antecedente generado por Agua.'),
|
||||
(22, N'Plano de Sembrado de Vivienda', 1, 1, 0, 8, NULL),
|
||||
(22, N'Relación de Viviendas', 1, 1, 0, 9, NULL),
|
||||
(23, N'Carta de Asignación', 0, NULL, 0, 1, N'Confirmar emisor/cargador y aplicabilidad.'),
|
||||
(23, N'Identificación Oficial', 1, 1, 0, 2, N'Equivalencia propuesta: Identificación Oficial / INE → Identificación Oficial.'),
|
||||
(23, N'Constancia RFC del Propietario', 1, 1, 0, 3, NULL),
|
||||
(24, N'Solicitud de Entrega-Recepción', 1, 1, 0, 1, NULL),
|
||||
(24, N'Pruebas Liberadas', 0, NULL, 0, 2, N'Confirmar emisor/cargador y obligatoriedad.'),
|
||||
(24, N'Comprobante de Pagos de Derechos y Aportaciones', 0, 1, 0, 3, N'Archivo comprobante, no pago. Revisar obligatoriedad.'),
|
||||
(24, N'Contrato de Vivienda', 0, NULL, 0, 4, N'Confirmar si es contrato emitido por Agua o documento proporcionado por el cliente.');
|
||||
|
||||
BEGIN TRY
|
||||
BEGIN TRANSACTION;
|
||||
|
||||
IF OBJECT_ID('dbo.Tra_TiposDocumento', 'U') IS NULL
|
||||
OR OBJECT_ID('dbo.Tra_TiposTramiteDocumento', 'U') IS NULL
|
||||
OR OBJECT_ID('dbo.Tra_TiposTramite', 'U') IS NULL
|
||||
THROW 51000, 'No se encuentra la estructura de documentos revisada.', 1;
|
||||
|
||||
IF COL_LENGTH('dbo.Tra_TiposDocumento', 'EsCliente') IS NOT NULL
|
||||
OR COL_LENGTH('dbo.Tra_TiposTramiteDocumento', 'TieneVigencia') IS NULL
|
||||
THROW 51000, 'La estructura de documentos no coincide con la nueva versión revisada.', 1;
|
||||
|
||||
IF @Aplicar = 1
|
||||
BEGIN
|
||||
-- Resolver nombres y órdenes sobre un conjunto estable antes de insertar.
|
||||
DECLARE @FilasBloqueadas bigint;
|
||||
SELECT @FilasBloqueadas = COUNT_BIG(*)
|
||||
FROM dbo.Tra_TiposDocumento WITH (TABLOCKX, HOLDLOCK);
|
||||
SELECT @FilasBloqueadas = COUNT_BIG(*)
|
||||
FROM dbo.Tra_TiposTramiteDocumento WITH (TABLOCKX, HOLDLOCK);
|
||||
SELECT @FilasBloqueadas = COUNT_BIG(*)
|
||||
FROM dbo.Tra_TiposTramite WITH (TABLOCKX, HOLDLOCK);
|
||||
END;
|
||||
|
||||
UPDATE T
|
||||
SET CveTipoTramite = B.CveTipoTramite
|
||||
FROM @Tramites AS T
|
||||
INNER JOIN dbo.Tra_TiposTramite AS B ON B.CveTipoTramite = T.CveVerificada
|
||||
AND B.TipoTramite COLLATE Modern_Spanish_CS_AS = T.NombreVerificado
|
||||
AND B.EsActivo = 1;
|
||||
|
||||
-- Comparación sin distinción de mayúsculas, respetando acentos.
|
||||
-- No se buscan equivalencias semánticas automáticamente.
|
||||
UPDATE D
|
||||
SET
|
||||
Coincidencias = C.Cantidad,
|
||||
CveTipoDocumento = CASE WHEN C.Cantidad = 1 THEN C.Clave END,
|
||||
EsActivoActual = CASE WHEN C.Cantidad = 1 THEN CONVERT(bit, C.Activo) END
|
||||
FROM @Documentos AS D
|
||||
OUTER APPLY
|
||||
(
|
||||
SELECT
|
||||
COUNT(*) AS Cantidad,
|
||||
MIN(B.CveTipoDocumento) AS Clave,
|
||||
MIN(CONVERT(int, B.EsActivo)) AS Activo
|
||||
FROM dbo.Tra_TiposDocumento AS B
|
||||
WHERE LTRIM(RTRIM(B.TipoDocumento)) COLLATE Modern_Spanish_CI_AS = D.Nombre
|
||||
) AS C;
|
||||
|
||||
-- Diagnóstico 1: trámites verificados, no encontrados o cuyo nombre cambió.
|
||||
SELECT
|
||||
T.CveVerificada,
|
||||
T.NombreVerificado,
|
||||
B.TipoTramite AS NombreActual,
|
||||
T.CveTipoTramite AS ClaveResuelta,
|
||||
CASE WHEN T.CveTipoTramite IS NULL THEN 'PENDIENTE' ELSE 'Verificado' END AS Estado
|
||||
FROM @Tramites AS T
|
||||
LEFT JOIN dbo.Tra_TiposTramite AS B ON B.CveTipoTramite = T.CveVerificada
|
||||
ORDER BY T.CveVerificada;
|
||||
|
||||
-- Diagnóstico 2: posibles duplicados por nombre (incluye mayúsculas/espacios).
|
||||
SELECT
|
||||
LTRIM(RTRIM(TipoDocumento)) COLLATE Modern_Spanish_CI_AS AS NombreComparado,
|
||||
COUNT(*) AS Coincidencias
|
||||
FROM dbo.Tra_TiposDocumento
|
||||
GROUP BY LTRIM(RTRIM(TipoDocumento)) COLLATE Modern_Spanish_CI_AS
|
||||
HAVING COUNT(*) > 1;
|
||||
|
||||
-- Diagnóstico 3: catálogo completo de la propuesta y diferencias de metadatos.
|
||||
SELECT
|
||||
D.Nombre AS DocumentoPropuesto,
|
||||
D.CveTipoDocumento,
|
||||
B.TipoDocumento AS NombreActual,
|
||||
CASE
|
||||
WHEN D.RevisionPendiente IS NOT NULL THEN 'PENDIENTE: revisar equivalencia'
|
||||
WHEN D.Coincidencias > 1 THEN 'PENDIENTE: nombre duplicado'
|
||||
WHEN D.Coincidencias = 0 THEN 'Nuevo'
|
||||
ELSE 'Existente: conservar'
|
||||
END AS Estado,
|
||||
B.Descripcion AS DescripcionActual,
|
||||
D.Descripcion AS DescripcionPropuesta,
|
||||
B.ExtensionesPermitidas AS ExtensionesActuales,
|
||||
D.Extensiones AS ExtensionesPropuestas,
|
||||
B.TamanoMaximoMb AS TamanoActual,
|
||||
D.TamanoMaximoMb AS TamanoPropuesto,
|
||||
B.EsActivo AS EsActivoActual,
|
||||
D.RevisionPendiente,
|
||||
CONVERT(bit, CASE WHEN D.CveTipoDocumento IS NOT NULL AND EXISTS
|
||||
(
|
||||
SELECT D.Descripcion, D.Extensiones, D.TamanoMaximoMb
|
||||
EXCEPT
|
||||
SELECT B.Descripcion, B.ExtensionesPermitidas, B.TamanoMaximoMb
|
||||
) THEN 1 ELSE 0 END) AS DiferenciasMetadatosNoActualizar
|
||||
FROM @Documentos AS D
|
||||
LEFT JOIN dbo.Tra_TiposDocumento AS B ON B.CveTipoDocumento = D.CveTipoDocumento
|
||||
ORDER BY D.Nombre;
|
||||
|
||||
DECLARE @Plan TABLE
|
||||
(
|
||||
CveVerificada int NOT NULL,
|
||||
Documento nvarchar(200) COLLATE Modern_Spanish_CI_AS NOT NULL,
|
||||
MotivoPendiente nvarchar(2000) NULL,
|
||||
ExisteRelacion bit NOT NULL,
|
||||
OrdenPropuesto int NULL,
|
||||
PRIMARY KEY (CveVerificada, Documento)
|
||||
);
|
||||
|
||||
INSERT INTO @Plan
|
||||
(CveVerificada, Documento, MotivoPendiente, ExisteRelacion, OrdenPropuesto)
|
||||
SELECT
|
||||
R.CveVerificada,
|
||||
R.Documento,
|
||||
NULLIF(CONCAT(
|
||||
CASE WHEN T.CveTipoTramite IS NULL THEN N'Trámite no verificado. ' ELSE N'' END,
|
||||
CASE WHEN D.Coincidencias > 1 THEN N'Documento duplicado por nombre. ' ELSE N'' END,
|
||||
CASE WHEN D.EsActivoActual = 0 THEN N'Documento existente inactivo: no reactivar automáticamente. ' ELSE N'' END,
|
||||
CASE WHEN D.RevisionPendiente IS NOT NULL THEN D.RevisionPendiente + N' ' ELSE N'' END,
|
||||
CASE WHEN R.EsCliente IS NULL THEN N'Falta confirmar EsCliente. ' ELSE N'' END
|
||||
), N''),
|
||||
CONVERT(bit, CASE WHEN B.CveTipoDocumento IS NULL THEN 0 ELSE 1 END),
|
||||
B.Orden
|
||||
FROM @Relaciones AS R
|
||||
INNER JOIN @Tramites AS T ON T.CveVerificada = R.CveVerificada
|
||||
INNER JOIN @Documentos AS D ON D.Nombre = R.Documento
|
||||
LEFT JOIN dbo.Tra_TiposTramiteDocumento AS B ON B.CveTipoTramite = T.CveTipoTramite
|
||||
AND B.CveTipoDocumento = D.CveTipoDocumento;
|
||||
|
||||
;WITH Nuevas AS
|
||||
(
|
||||
SELECT
|
||||
P.CveVerificada,
|
||||
P.Documento,
|
||||
ISNULL(M.OrdenMaximo, 0) +
|
||||
ROW_NUMBER() OVER
|
||||
(
|
||||
PARTITION BY P.CveVerificada
|
||||
ORDER BY R.OrdenEspecificacion, P.Documento
|
||||
) AS OrdenNuevo
|
||||
FROM @Plan AS P
|
||||
INNER JOIN @Relaciones AS R ON R.CveVerificada = P.CveVerificada
|
||||
AND R.Documento = P.Documento
|
||||
INNER JOIN @Tramites AS T ON T.CveVerificada = P.CveVerificada
|
||||
OUTER APPLY
|
||||
(
|
||||
SELECT MAX(B.Orden) AS OrdenMaximo
|
||||
FROM dbo.Tra_TiposTramiteDocumento AS B
|
||||
WHERE B.CveTipoTramite = T.CveTipoTramite
|
||||
) AS M
|
||||
WHERE P.MotivoPendiente IS NULL
|
||||
AND P.ExisteRelacion = 0
|
||||
)
|
||||
UPDATE P
|
||||
SET OrdenPropuesto = N.OrdenNuevo
|
||||
FROM @Plan AS P
|
||||
INNER JOIN Nuevas AS N ON N.CveVerificada = P.CveVerificada
|
||||
AND N.Documento = P.Documento;
|
||||
|
||||
-- Diagnóstico 4: cada relación, su orden y diferencias; nunca se sobrescriben.
|
||||
SELECT
|
||||
R.CveVerificada AS CveTipoTramite,
|
||||
T.NombreVerificado AS TipoTramite,
|
||||
D.CveTipoDocumento,
|
||||
R.Documento AS TipoDocumento,
|
||||
R.EsRequerido,
|
||||
R.EsCliente,
|
||||
R.TieneVigencia,
|
||||
R.OrdenEspecificacion,
|
||||
P.OrdenPropuesto,
|
||||
1 AS EsActivoPropuesto,
|
||||
P.ExisteRelacion,
|
||||
P.MotivoPendiente,
|
||||
B.EsRequerido AS EsRequeridoActual,
|
||||
B.EsCliente AS EsClienteActual,
|
||||
B.TieneVigencia AS TieneVigenciaActual,
|
||||
B.Orden AS OrdenActual,
|
||||
B.EsActivo AS EsActivoActual,
|
||||
CONVERT(bit, CASE WHEN P.ExisteRelacion = 1 AND EXISTS
|
||||
(
|
||||
SELECT R.EsRequerido, R.EsCliente, R.TieneVigencia, R.OrdenEspecificacion, CONVERT(bit, 1)
|
||||
EXCEPT
|
||||
SELECT B.EsRequerido, B.EsCliente, B.TieneVigencia, B.Orden, B.EsActivo
|
||||
) THEN 1 ELSE 0 END) AS DiferenciaConEspecificacionNoActualizar,
|
||||
R.Nota
|
||||
FROM @Relaciones AS R
|
||||
INNER JOIN @Plan AS P ON P.CveVerificada = R.CveVerificada AND P.Documento = R.Documento
|
||||
INNER JOIN @Tramites AS T ON T.CveVerificada = R.CveVerificada
|
||||
INNER JOIN @Documentos AS D ON D.Nombre = R.Documento
|
||||
LEFT JOIN dbo.Tra_TiposTramiteDocumento AS B ON B.CveTipoTramite = T.CveTipoTramite
|
||||
AND B.CveTipoDocumento = D.CveTipoDocumento
|
||||
ORDER BY R.CveVerificada, R.OrdenEspecificacion;
|
||||
|
||||
-- Diagnóstico 5: relaciones anteriores, incluidas las ajenas a esta propuesta.
|
||||
SELECT
|
||||
R.CveTipoTramite,
|
||||
T.TipoTramite,
|
||||
R.CveTipoDocumento,
|
||||
D.TipoDocumento,
|
||||
R.EsRequerido,
|
||||
R.EsCliente,
|
||||
R.TieneVigencia,
|
||||
R.Orden,
|
||||
R.EsActivo
|
||||
FROM dbo.Tra_TiposTramiteDocumento AS R
|
||||
INNER JOIN dbo.Tra_TiposTramite AS T ON T.CveTipoTramite = R.CveTipoTramite
|
||||
INNER JOIN dbo.Tra_TiposDocumento AS D ON D.CveTipoDocumento = R.CveTipoDocumento
|
||||
ORDER BY R.CveTipoTramite, R.Orden, R.CveTipoDocumento;
|
||||
|
||||
IF @Aplicar = 0
|
||||
BEGIN
|
||||
COMMIT TRANSACTION;
|
||||
SELECT
|
||||
'SOLO DIAGNÓSTICO: no se insertaron ni actualizaron datos de negocio.' AS Resultado,
|
||||
(SELECT COUNT(*) FROM @Documentos WHERE Coincidencias = 0 AND RevisionPendiente IS NULL) AS DocumentosNuevosListos,
|
||||
(SELECT COUNT(*) FROM @Plan WHERE MotivoPendiente IS NULL AND ExisteRelacion = 0) AS RelacionesNuevasListas,
|
||||
(SELECT COUNT(*) FROM @Plan WHERE MotivoPendiente IS NOT NULL) AS RelacionesPendientes;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
IF @CveUsuario IS NULL OR NOT EXISTS
|
||||
(
|
||||
SELECT 1 FROM dbo.Sis_Usuarios
|
||||
WHERE CveUsuario = @CveUsuario AND Activo = 1
|
||||
)
|
||||
THROW 51000, 'Configure @CveUsuario con una clave real y activa antes de aplicar.', 1;
|
||||
|
||||
IF @PermitirPendientes = 0
|
||||
AND
|
||||
(
|
||||
EXISTS (SELECT 1 FROM @Plan WHERE MotivoPendiente IS NOT NULL)
|
||||
OR EXISTS (SELECT 1 FROM @Documentos WHERE RevisionPendiente IS NOT NULL)
|
||||
)
|
||||
THROW 51000, 'Hay decisiones pendientes. Resolverlas antes de aplicar o autorizar explícitamente una carga parcial.', 1;
|
||||
|
||||
IF EXISTS (SELECT 1 FROM @Documentos WHERE Coincidencias > 1)
|
||||
THROW 51000, 'Existen coincidencias documentales ambiguas. No se insertará ningún dato.', 1;
|
||||
|
||||
INSERT INTO dbo.Tra_TiposDocumento
|
||||
(TipoDocumento, Descripcion, ExtensionesPermitidas, TamanoMaximoMb, EsActivo, CveUsuario)
|
||||
SELECT D.Nombre, D.Descripcion, D.Extensiones, D.TamanoMaximoMb, 1, @CveUsuario
|
||||
FROM @Documentos AS D
|
||||
WHERE D.RevisionPendiente IS NULL
|
||||
AND NOT EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM dbo.Tra_TiposDocumento AS B
|
||||
WHERE LTRIM(RTRIM(B.TipoDocumento)) COLLATE Modern_Spanish_CI_AS = D.Nombre
|
||||
);
|
||||
|
||||
UPDATE D
|
||||
SET CveTipoDocumento = B.CveTipoDocumento
|
||||
FROM @Documentos AS D
|
||||
INNER JOIN dbo.Tra_TiposDocumento AS B ON
|
||||
LTRIM(RTRIM(B.TipoDocumento)) COLLATE Modern_Spanish_CI_AS = D.Nombre
|
||||
WHERE D.RevisionPendiente IS NULL;
|
||||
|
||||
-- Recalcular exclusivamente órdenes nuevos bajo bloqueo.
|
||||
;WITH Nuevas AS
|
||||
(
|
||||
SELECT
|
||||
P.CveVerificada,
|
||||
P.Documento,
|
||||
ISNULL(M.OrdenMaximo, 0) +
|
||||
ROW_NUMBER() OVER
|
||||
(
|
||||
PARTITION BY P.CveVerificada
|
||||
ORDER BY R.OrdenEspecificacion, P.Documento
|
||||
) AS OrdenNuevo
|
||||
FROM @Plan AS P
|
||||
INNER JOIN @Relaciones AS R ON R.CveVerificada = P.CveVerificada AND R.Documento = P.Documento
|
||||
INNER JOIN @Tramites AS T ON T.CveVerificada = P.CveVerificada
|
||||
INNER JOIN @Documentos AS D ON D.Nombre = P.Documento
|
||||
OUTER APPLY
|
||||
(
|
||||
SELECT MAX(B.Orden) AS OrdenMaximo
|
||||
FROM dbo.Tra_TiposTramiteDocumento AS B
|
||||
WHERE B.CveTipoTramite = T.CveTipoTramite
|
||||
) AS M
|
||||
WHERE P.MotivoPendiente IS NULL
|
||||
AND NOT EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM dbo.Tra_TiposTramiteDocumento AS B
|
||||
WHERE B.CveTipoTramite = T.CveTipoTramite
|
||||
AND B.CveTipoDocumento = D.CveTipoDocumento
|
||||
)
|
||||
)
|
||||
UPDATE P
|
||||
SET OrdenPropuesto = N.OrdenNuevo
|
||||
FROM @Plan AS P
|
||||
INNER JOIN Nuevas AS N ON N.CveVerificada = P.CveVerificada AND N.Documento = P.Documento;
|
||||
|
||||
INSERT INTO dbo.Tra_TiposTramiteDocumento
|
||||
(CveTipoTramite, CveTipoDocumento, EsRequerido, EsCliente, TieneVigencia, Orden, EsActivo)
|
||||
SELECT
|
||||
T.CveTipoTramite,
|
||||
D.CveTipoDocumento,
|
||||
R.EsRequerido,
|
||||
R.EsCliente,
|
||||
R.TieneVigencia,
|
||||
P.OrdenPropuesto,
|
||||
1
|
||||
FROM @Relaciones AS R
|
||||
INNER JOIN @Tramites AS T ON T.CveVerificada = R.CveVerificada
|
||||
INNER JOIN @Documentos AS D ON D.Nombre = R.Documento
|
||||
INNER JOIN @Plan AS P ON P.CveVerificada = R.CveVerificada AND P.Documento = R.Documento
|
||||
WHERE P.MotivoPendiente IS NULL
|
||||
AND D.CveTipoDocumento IS NOT NULL
|
||||
AND NOT EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM dbo.Tra_TiposTramiteDocumento AS B
|
||||
WHERE B.CveTipoTramite = T.CveTipoTramite
|
||||
AND B.CveTipoDocumento = D.CveTipoDocumento
|
||||
);
|
||||
|
||||
COMMIT TRANSACTION;
|
||||
|
||||
-- Comprobación final: estructura solicitada, sin alterar los registros previos.
|
||||
SELECT
|
||||
R.CveTipoTramite,
|
||||
T.TipoTramite,
|
||||
R.CveTipoDocumento,
|
||||
D.TipoDocumento,
|
||||
R.EsRequerido,
|
||||
R.EsCliente,
|
||||
R.TieneVigencia,
|
||||
R.Orden,
|
||||
R.EsActivo
|
||||
FROM dbo.Tra_TiposTramiteDocumento AS R
|
||||
INNER JOIN dbo.Tra_TiposTramite AS T ON T.CveTipoTramite = R.CveTipoTramite
|
||||
INNER JOIN dbo.Tra_TiposDocumento AS D ON D.CveTipoDocumento = R.CveTipoDocumento
|
||||
WHERE EXISTS (SELECT 1 FROM @Tramites AS P WHERE P.CveTipoTramite = R.CveTipoTramite)
|
||||
ORDER BY R.CveTipoTramite, R.Orden, R.CveTipoDocumento;
|
||||
END TRY
|
||||
BEGIN CATCH
|
||||
IF @@TRANCOUNT > 0
|
||||
ROLLBACK TRANSACTION;
|
||||
THROW;
|
||||
END CATCH;
|
||||
File diff suppressed because it is too large
Load Diff
246
Entregables/Gis/PruebasFlujoGis.js.txt
Normal file
246
Entregables/Gis/PruebasFlujoGis.js.txt
Normal file
@@ -0,0 +1,246 @@
|
||||
// Ejecutar desde la raíz del proyecto:
|
||||
// node Entregables/Gis/PruebasFlujoGis.js.txt
|
||||
// Controles y transporte simulados: no abre navegador ni modifica la BD.
|
||||
const archivos = require('node:fs');
|
||||
const entornoVirtual = require('node:vm');
|
||||
const comprobar = require('node:assert/strict');
|
||||
const controles = new Map();
|
||||
const solicitudes = [];
|
||||
const alertas = [];
|
||||
|
||||
function crearControl() {
|
||||
return {
|
||||
length: 1,
|
||||
atributos: {},
|
||||
eventos: {},
|
||||
texto: '',
|
||||
prop() {
|
||||
return this;
|
||||
},
|
||||
toggle() {
|
||||
return this;
|
||||
},
|
||||
trigger() {
|
||||
return this;
|
||||
},
|
||||
hide() {
|
||||
return this;
|
||||
},
|
||||
show() {
|
||||
return this;
|
||||
},
|
||||
removeClass() {
|
||||
return this;
|
||||
},
|
||||
addClass() {
|
||||
return this;
|
||||
},
|
||||
text(valor) {
|
||||
this.texto = valor;
|
||||
return this;
|
||||
},
|
||||
attr(nombre, valor) {
|
||||
if (valor === undefined) {
|
||||
return this.atributos[nombre];
|
||||
}
|
||||
|
||||
this.atributos[nombre] = valor;
|
||||
return this;
|
||||
},
|
||||
filter(selector) {
|
||||
const bandera = selector.match(/\[([^=]+)=/)[1];
|
||||
const control = this;
|
||||
return {
|
||||
each(ejecutar) {
|
||||
if (control.atributos[bandera] !== '1') {
|
||||
ejecutar.call(control);
|
||||
}
|
||||
return this;
|
||||
}
|
||||
};
|
||||
},
|
||||
on(evento, selector, ejecutar) {
|
||||
const accion = typeof selector === 'function' ? selector : ejecutar;
|
||||
this.eventos[evento] = this.eventos[evento] || [];
|
||||
this.eventos[evento].push(accion);
|
||||
return this;
|
||||
},
|
||||
off() {
|
||||
throw new Error('La inicialización no debe desmontar eventos existentes.');
|
||||
},
|
||||
click() {
|
||||
throw new Error('El guardado no debe cerrar el modal ni perder el borrador.');
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
function consultar(selector) {
|
||||
if (typeof selector === 'function') {
|
||||
return;
|
||||
}
|
||||
|
||||
if (selector && selector.atributos) {
|
||||
return selector;
|
||||
}
|
||||
|
||||
if (!controles.has(selector)) {
|
||||
controles.set(selector, crearControl());
|
||||
}
|
||||
|
||||
return controles.get(selector);
|
||||
}
|
||||
|
||||
consultar.extend = Object.assign;
|
||||
consultar.each = function (coleccion, ejecutar) {
|
||||
Object.keys(coleccion).forEach(clave => ejecutar(clave, coleccion[clave]));
|
||||
};
|
||||
consultar.ajax = function (solicitud) {
|
||||
solicitudes.push(solicitud.data.valores);
|
||||
return {
|
||||
done(ejecutar) {
|
||||
ejecutar({
|
||||
success: true,
|
||||
message: 'Guardado'
|
||||
});
|
||||
return this;
|
||||
},
|
||||
fail() {
|
||||
return this;
|
||||
},
|
||||
always(ejecutar) {
|
||||
ejecutar();
|
||||
return this;
|
||||
}
|
||||
};
|
||||
};
|
||||
|
||||
class FormularioPrueba {
|
||||
constructor() {
|
||||
this.valores = {};
|
||||
}
|
||||
|
||||
append(clave, valor) {
|
||||
this.valores[clave] = valor;
|
||||
}
|
||||
}
|
||||
|
||||
const entorno = {
|
||||
window: {
|
||||
jQuery: consultar,
|
||||
SIGAlerts: {
|
||||
enqueue(alerta) {
|
||||
alertas.push(alerta);
|
||||
}
|
||||
}
|
||||
},
|
||||
document: {},
|
||||
FormData: FormularioPrueba
|
||||
};
|
||||
let codigo = archivos.readFileSync('SIG.Web/Scripts/fraccionamiento-gis.js', 'utf8');
|
||||
codigo = codigo.replace(' function registrarEventos() {', `
|
||||
interfaz.pruebas = {
|
||||
crear: crearEstado,
|
||||
seleccionar: function (estado) {
|
||||
actual = estado;
|
||||
},
|
||||
guardar: function (estado, soloArchivo) {
|
||||
actual = estado;
|
||||
guardar(estado, soloArchivo);
|
||||
},
|
||||
configurarArchivo: configurarArchivo,
|
||||
configurarGuardado: configurarGuardado,
|
||||
configurarEliminacion: configurarEliminacion,
|
||||
registrarEventos: registrarEventos,
|
||||
mostrarErrorServidor: mostrarErrorServidor
|
||||
};
|
||||
function registrarEventos() {`);
|
||||
entornoVirtual.runInNewContext(codigo, entorno);
|
||||
const pruebas = entorno.window.GisFraccionamiento.pruebas;
|
||||
const estado = pruebas.crear(1);
|
||||
estado.geoJson = { type: 'FeatureCollection' };
|
||||
estado.clavesPoligono = ['id:1', 'id:2', 'id:3'];
|
||||
estado.archivo = { name: 'prueba.gis' };
|
||||
|
||||
pruebas.guardar(estado, true);
|
||||
comprobar.equal(solicitudes.length, 1);
|
||||
comprobar.equal(solicitudes[0].metodo, 'GuardarArchivo');
|
||||
comprobar.equal('vinculos' in solicitudes[0], false);
|
||||
comprobar.equal(estado.tieneArchivoServidor, true);
|
||||
comprobar.equal(alertas[0].type, 5);
|
||||
comprobar.equal(consultar('#LblEtapaGisMensaje').texto, '');
|
||||
|
||||
estado.vinculosPorClavePoligono = { 'id:1': 10 };
|
||||
estado.poligonoPorCveLote = { 10: 'id:1' };
|
||||
estado.tieneCambios = true;
|
||||
pruebas.guardar(estado, false);
|
||||
comprobar.equal(JSON.parse(solicitudes[1].vinculos).length, 1);
|
||||
comprobar.equal('file' in solicitudes[1], false);
|
||||
|
||||
estado.archivo = { name: 'reemplazo.gis' };
|
||||
estado.vinculosPorClavePoligono['id:previo'] = 20;
|
||||
estado.tieneCambios = true;
|
||||
pruebas.guardar(estado, true);
|
||||
comprobar.equal(estado.vinculosPorClavePoligono['id:previo'], 20);
|
||||
comprobar.equal(estado.tieneCambios, true);
|
||||
comprobar.equal('vinculos' in solicitudes[2], false);
|
||||
pruebas.guardar(estado, false);
|
||||
comprobar.equal(JSON.parse(solicitudes[3].vinculos).length, 2);
|
||||
|
||||
estado.vinculosPorClavePoligono = {};
|
||||
estado.tieneCambios = true;
|
||||
pruebas.guardar(estado, false);
|
||||
comprobar.equal(solicitudes[4].vinculos, '[]');
|
||||
|
||||
estado.archivo = { name: 'pendiente.gis' };
|
||||
estado.tieneCambios = true;
|
||||
pruebas.guardar(estado, false);
|
||||
comprobar.equal(solicitudes.length, 5);
|
||||
comprobar.match(consultar('#LblEtapaGisMensaje').texto, /Guarde primero el archivo/);
|
||||
comprobar.equal(estado.requiereActualizarDetalle, true);
|
||||
|
||||
pruebas.mostrarErrorServidor({
|
||||
message: 'Fallo simulado',
|
||||
codigo: 'PRUEBA'
|
||||
});
|
||||
comprobar.equal(alertas[alertas.length - 1].type, 1);
|
||||
comprobar.match(alertas[alertas.length - 1].message, /PRUEBA/);
|
||||
|
||||
for (let repeticion = 0; repeticion < 3; repeticion++) {
|
||||
pruebas.configurarArchivo(estado);
|
||||
pruebas.configurarGuardado(estado);
|
||||
pruebas.configurarEliminacion(estado);
|
||||
pruebas.registrarEventos();
|
||||
}
|
||||
comprobar.equal(consultar('#TxtGisLocal').eventos['adsdropzone:fileadded.sigGis'].length, 1);
|
||||
comprobar.equal(consultar('#BtnGuardarEtapaGis').eventos['click.sigGis'].length, 1);
|
||||
comprobar.equal(consultar('#BtnGuardarVinculosEtapaGis').eventos['click.sigGis'].length, 1);
|
||||
comprobar.equal(consultar('#BtnEliminarEtapaGis').eventos['click.sigGis'].length, 1);
|
||||
comprobar.equal(consultar(entorno.document).eventos['shown.bs.modal.sigGisMain'].length, 1);
|
||||
|
||||
const otraEtapa = pruebas.crear(2);
|
||||
otraEtapa.geoJson = { type: 'FeatureCollection' };
|
||||
otraEtapa.clavesPoligono = ['id:otro'];
|
||||
otraEtapa.archivo = { name: 'otra-etapa.gis' };
|
||||
pruebas.seleccionar(otraEtapa);
|
||||
consultar('#BtnGuardarEtapaGis').eventos['click.sigGis'][0]({
|
||||
preventDefault() {}
|
||||
});
|
||||
comprobar.equal(solicitudes[5].CveFraccionamientoEtapa, 2);
|
||||
|
||||
// Simular que UpdatePanel reemplaza un botón por un nuevo elemento.
|
||||
controles.delete('#BtnGuardarVinculosEtapaGis');
|
||||
pruebas.configurarGuardado(otraEtapa);
|
||||
pruebas.configurarGuardado(otraEtapa);
|
||||
comprobar.equal(consultar('#BtnGuardarVinculosEtapaGis').eventos['click.sigGis'].length, 1);
|
||||
|
||||
// La confirmación debe usar la misma cola y no ejecutar la eliminación al abrirla.
|
||||
consultar('#BtnEliminarEtapaGis').eventos['click.sigGis'][0]({
|
||||
preventDefault() {}
|
||||
});
|
||||
comprobar.equal(alertas[alertas.length - 1].type, 3);
|
||||
comprobar.equal(typeof alertas[alertas.length - 1].acceptCallback, 'function');
|
||||
comprobar.equal(solicitudes.length, 6);
|
||||
|
||||
console.log(
|
||||
'OK: guardados separados y parciales; alertas centrales; inicialización repetida, ' +
|
||||
'reapertura en otra etapa y reemplazo de controles sin duplicar eventos.');
|
||||
287
Entregables/Gis/PruebasServicioGis.cs
Normal file
287
Entregables/Gis/PruebasServicioGis.cs
Normal file
@@ -0,0 +1,287 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Runtime.Remoting.Messaging;
|
||||
using System.Runtime.Remoting.Proxies;
|
||||
using SIG.Web.AppCode.Contracts.Bitacora;
|
||||
using SIG.Web.AppCode.Contracts.Documentos;
|
||||
using SIG.Web.AppCode.Contracts.Fraccionamientos;
|
||||
using SIG.Web.AppCode.Models.Bitacora;
|
||||
using SIG.Web.AppCode.Models.Common;
|
||||
using SIG.Web.AppCode.Models.Documentos;
|
||||
using SIG.Web.AppCode.Models.Fraccionamientos;
|
||||
using SIG.Web.AppCode.Services.Fraccionamientos;
|
||||
|
||||
// Usa el servicio compilado real con dependencias simuladas; no conecta a la BD.
|
||||
public sealed class SustitutoGis<T> : RealProxy
|
||||
{
|
||||
private readonly Func<IMethodCallMessage, object> _ejecutar;
|
||||
|
||||
public SustitutoGis(Func<IMethodCallMessage, object> ejecutar)
|
||||
: base(typeof(T))
|
||||
{
|
||||
_ejecutar = ejecutar;
|
||||
}
|
||||
|
||||
public override IMessage Invoke(IMessage mensaje)
|
||||
{
|
||||
var llamada = (IMethodCallMessage)mensaje;
|
||||
try
|
||||
{
|
||||
return new ReturnMessage(
|
||||
_ejecutar(llamada),
|
||||
null,
|
||||
0,
|
||||
llamada.LogicalCallContext,
|
||||
llamada);
|
||||
}
|
||||
catch (Exception excepcion)
|
||||
{
|
||||
return new ReturnMessage(excepcion, llamada);
|
||||
}
|
||||
}
|
||||
|
||||
public T Crear()
|
||||
{
|
||||
return (T)GetTransparentProxy();
|
||||
}
|
||||
}
|
||||
|
||||
public static class PruebasServicioGis
|
||||
{
|
||||
private static byte[] _archivo;
|
||||
private static List<VinculoLoteGisFraccionamiento> _vinculos =
|
||||
new List<VinculoLoteGisFraccionamiento>();
|
||||
private static int _guardadosVinculos;
|
||||
private static int _limpiezas;
|
||||
private static int _escriturasArchivo;
|
||||
private static bool _fallarDocumento;
|
||||
|
||||
private static void Comprobar(bool resultado, string mensaje)
|
||||
{
|
||||
if (!resultado)
|
||||
{
|
||||
throw new Exception(mensaje);
|
||||
}
|
||||
}
|
||||
|
||||
private static VinculoLoteGisFraccionamiento Vinculo(int lote, string clave)
|
||||
{
|
||||
return new VinculoLoteGisFraccionamiento
|
||||
{
|
||||
CveFraccionamientoLote = lote,
|
||||
GISPoligonoClave = clave
|
||||
};
|
||||
}
|
||||
|
||||
public static void Main()
|
||||
{
|
||||
var contexto = new ContextoGisFraccionamiento
|
||||
{
|
||||
CveCliente = 1,
|
||||
CveFraccionamiento = 1,
|
||||
CveFraccionamientoEtapa = 1,
|
||||
Etapa = "Prueba sin BD"
|
||||
};
|
||||
var repositorio = new SustitutoGis<IRepositorioGisFraccionamiento>(llamada =>
|
||||
{
|
||||
switch (llamada.MethodName)
|
||||
{
|
||||
case "ObtenerContexto":
|
||||
return DbResult<ContextoGisFraccionamiento>.Ok(contexto);
|
||||
case "ListarVinculos":
|
||||
return DbResult<List<VinculoLoteGisFraccionamiento>>.Ok(
|
||||
_vinculos
|
||||
.Select(vinculo => Vinculo(
|
||||
vinculo.CveFraccionamientoLote,
|
||||
vinculo.GISPoligonoClave))
|
||||
.ToList());
|
||||
case "GuardarVinculos":
|
||||
_guardadosVinculos++;
|
||||
_vinculos = ((IList<VinculoLoteGisFraccionamiento>)llamada.Args[1]).ToList();
|
||||
return DbResult<bool>.Ok(true);
|
||||
case "LimpiarVinculos":
|
||||
_limpiezas++;
|
||||
_vinculos.Clear();
|
||||
return DbResult<bool>.Ok(true);
|
||||
default:
|
||||
throw new Exception(llamada.MethodName);
|
||||
}
|
||||
}).Crear();
|
||||
var almacen = new SustitutoGis<IAlmacenArchivosGisFraccionamiento>(llamada =>
|
||||
{
|
||||
switch (llamada.MethodName)
|
||||
{
|
||||
case "Existe":
|
||||
return _archivo != null;
|
||||
case "ObtenerRutaFisica":
|
||||
return @"C:\PruebaEnMemoria\gis-1-1.gis";
|
||||
case "Guardar":
|
||||
_escriturasArchivo++;
|
||||
using (var copia = new MemoryStream())
|
||||
{
|
||||
((Stream)llamada.Args[1]).CopyTo(copia);
|
||||
_archivo = copia.ToArray();
|
||||
}
|
||||
return null;
|
||||
case "AbrirLectura":
|
||||
return new MemoryStream(_archivo);
|
||||
case "Eliminar":
|
||||
_archivo = null;
|
||||
return null;
|
||||
default:
|
||||
throw new Exception(llamada.MethodName);
|
||||
}
|
||||
}).Crear();
|
||||
var bitacora = new SustitutoGis<IBitacoraService>(llamada =>
|
||||
{
|
||||
Comprobar(
|
||||
llamada.MethodName == "Registrar",
|
||||
"Llamada inesperada a bitácora.");
|
||||
return DbResult<long>.Ok(1);
|
||||
}).Crear();
|
||||
var documentos = new SustitutoGis<ITramiteDocumentoService>(llamada =>
|
||||
{
|
||||
Comprobar(
|
||||
llamada.MethodName == "RegisterExternalStageFile",
|
||||
"Registro documental inesperado.");
|
||||
return _fallarDocumento
|
||||
? DbResult<TramiteDocumentoSaveResultModel>.Fail("Fallo simulado", "", null)
|
||||
: DbResult<TramiteDocumentoSaveResultModel>.Ok(new TramiteDocumentoSaveResultModel());
|
||||
}).Crear();
|
||||
var servicio = new ServicioGisFraccionamiento(
|
||||
repositorio,
|
||||
almacen,
|
||||
bitacora,
|
||||
documentos);
|
||||
|
||||
var resultado = servicio.Guardar(
|
||||
1,
|
||||
"prueba.gis",
|
||||
new MemoryStream(new byte[] { 1 }),
|
||||
1,
|
||||
null,
|
||||
2,
|
||||
"");
|
||||
Comprobar(
|
||||
resultado.Success && resultado.Data.VinculosGuardados == 0,
|
||||
"Debe guardar sin vínculos.");
|
||||
Comprobar(
|
||||
_guardadosVinculos == 0 && _limpiezas == 0,
|
||||
"Guardar archivo no debe tocar lotes.");
|
||||
|
||||
resultado = servicio.Guardar(
|
||||
1,
|
||||
"",
|
||||
null,
|
||||
0,
|
||||
new List<VinculoLoteGisFraccionamiento>
|
||||
{
|
||||
Vinculo(10, "id:1")
|
||||
},
|
||||
2,
|
||||
"");
|
||||
Comprobar(
|
||||
resultado.Success && _guardadosVinculos == 1,
|
||||
"Debe permitir un vínculo parcial.");
|
||||
Comprobar(
|
||||
_escriturasArchivo == 1,
|
||||
"Vincular no debe escribir el archivo.");
|
||||
|
||||
resultado = servicio.Guardar(
|
||||
1,
|
||||
"otro.gis",
|
||||
new MemoryStream(new byte[] { 2 }),
|
||||
1,
|
||||
null,
|
||||
2,
|
||||
"");
|
||||
Comprobar(
|
||||
resultado.Success && resultado.Data.VinculosGuardados == 1,
|
||||
"Reemplazar conserva vínculos.");
|
||||
Comprobar(
|
||||
_guardadosVinculos == 1 && _limpiezas == 0,
|
||||
"Reemplazar no debe tocar lotes.");
|
||||
|
||||
resultado = servicio.Guardar(
|
||||
1,
|
||||
"",
|
||||
null,
|
||||
0,
|
||||
new List<VinculoLoteGisFraccionamiento>
|
||||
{
|
||||
Vinculo(10, "id:1"),
|
||||
Vinculo(20, "id:2")
|
||||
},
|
||||
2,
|
||||
"");
|
||||
Comprobar(
|
||||
resultado.Success && _vinculos.Count == 2,
|
||||
"Debe permitir continuar vinculando.");
|
||||
resultado = servicio.Guardar(
|
||||
1,
|
||||
"",
|
||||
null,
|
||||
0,
|
||||
new List<VinculoLoteGisFraccionamiento>
|
||||
{
|
||||
Vinculo(10, "id:1"),
|
||||
Vinculo(20, "id:1")
|
||||
},
|
||||
2,
|
||||
"");
|
||||
Comprobar(
|
||||
!resultado.Success && _vinculos.Count == 2,
|
||||
"Debe rechazar polígonos duplicados.");
|
||||
|
||||
_fallarDocumento = true;
|
||||
resultado = servicio.Guardar(
|
||||
1,
|
||||
"fallo.gis",
|
||||
new MemoryStream(new byte[] { 9 }),
|
||||
1,
|
||||
null,
|
||||
2,
|
||||
"");
|
||||
Comprobar(
|
||||
!resultado.Success && _archivo[0] == 2,
|
||||
"Debe restaurar el archivo si falla el registro.");
|
||||
Comprobar(
|
||||
_vinculos.Count == 2,
|
||||
"Un fallo de archivo no debe alterar los vínculos.");
|
||||
|
||||
resultado = servicio.Guardar(
|
||||
1,
|
||||
"",
|
||||
null,
|
||||
0,
|
||||
new List<VinculoLoteGisFraccionamiento>(),
|
||||
2,
|
||||
"");
|
||||
Comprobar(
|
||||
resultado.Success && _limpiezas == 1 && _vinculos.Count == 0,
|
||||
"Debe guardar la desvinculación explícita.");
|
||||
Comprobar(
|
||||
_archivo[0] == 2,
|
||||
"Desvincular conserva el archivo.");
|
||||
_archivo = null;
|
||||
resultado = servicio.Guardar(
|
||||
1,
|
||||
"",
|
||||
null,
|
||||
0,
|
||||
new List<VinculoLoteGisFraccionamiento>
|
||||
{
|
||||
Vinculo(10, "id:1")
|
||||
},
|
||||
2,
|
||||
"");
|
||||
Comprobar(
|
||||
!resultado.Success,
|
||||
"No debe vincular sin archivo guardado.");
|
||||
Console.WriteLine(
|
||||
"OK: archivo sin lotes, vínculos parciales sucesivos, conservación, " +
|
||||
"duplicados, restauración y desvinculación.");
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
[07/29/26 11:01:05] info ================= cer started =================
|
||||
[07/29/26 11:01:05] info C:\Program Files\Autodesk\AutoCAD 2027\cer.dll, 7.2.4+20251128.8f05bb68.927
|
||||
[07/29/26 11:01:05] info Setting key SP/SDK_VERSION, value 7.2.4+20251128.8f05bb68.927 (maxCount 1)
|
||||
[07/29/26 11:01:05] info Setting key SP/PRODUCT_NAME_HASH, value f4bac121a1625586cb5b9106c8e839a7990f2b6c (maxCount 1)
|
||||
[07/29/26 11:01:05] info Setting key SP/RUNTIME_ARCH, value 1 (maxCount 1)
|
||||
[07/29/26 11:01:05] info Set senddmp exe path to C:\Program Files\Autodesk\AutoCAD 2027\CER\senddmp.exe
|
||||
[07/29/26 11:01:05] info The cer_service exe C:\Program Files\Autodesk\AutoCAD 2027\CER\service\cer_service.exe is not in folder C:\Program Files\Autodesk\AutoCAD 2027\CER\, it's not a sandbox
|
||||
[07/29/26 11:01:05] info Set upi exe path to C:\Program Files\Autodesk\AutoCAD 2027\CER\upi.exe
|
||||
[07/29/26 11:01:05] info launching C:\Program Files\Autodesk\AutoCAD 2027\CER\upi.exe --cmd=get-device-id C:\Users\caudi\AppData\Local\Temp\15FCE767F24F74D1\Temp\upi_deviceid2
|
||||
[07/29/26 11:01:06] info Set deviceID2 to 92CA75B8D4EB0A0E74EDB1E61E362886DC67039BD12745B7CEF6A36A94EA9884&1D8D189A9AE197CDA5D2D77E640375435D8D952FEBE5E1B888B8567C4BECED88&0A3B0E00D8EB341B2395D85AAC2E422CF0C9599C67A5867798DFE9D60B41E70E
|
||||
[07/29/26 11:01:06] info Setting key SP/DEVICEID2, value 92CA75B8D4EB0A0E74EDB1E61E362886DC67039BD12745B7CEF6A36A94EA9884&1D8D189A9AE197CDA5D2D77E640375435D8D952FEBE5E1B888B8567C4BECED88&0A3B0E00D8EB341B2395D85AAC2E422CF0C9599C67A5867798DFE9D60B41E70E (maxCount 1)
|
||||
[07/29/26 11:01:06] info Setting key SP/UUID, value f4bac121a1625586cb5b9106c8e839a7990f2b6c92CA75B8D4EB0A0E74EDB1E61E362886DC67039BD12745B7CEF6A36A94EA9884&1D8D189A9AE197CDA5D2D77E640375435D8D952FEBE5E1B888B8567C4BECED88&0A3B0E00D8EB341B2395D85AAC2E422CF0C9599C67A5867798DFE9D60B41E70E (maxCount 1)
|
||||
[07/29/26 11:01:06] info Set senddmp exe path to C:\Program Files\Autodesk\AutoCAD 2027\CER\senddmp.exe
|
||||
[07/29/26 11:01:06] info The cer_service exe C:\Program Files\Autodesk\AutoCAD 2027\CER\service\cer_service.exe is not in folder C:\Program Files\Autodesk\AutoCAD 2027\CER\, it's not a sandbox
|
||||
[07/29/26 11:01:06] info launching C:\Program Files\Autodesk\AutoCAD 2027\CER\upi.exe "C:\Program Files\Autodesk\AutoCAD 2027\es-ES\UPI\upiconfig.xml" C:\Users\caudi\AppData\Local\Temp\15FCE767F24F74D1\Temp\upi_info.xml
|
||||
[07/29/26 11:01:07] info Setting key SP/UPI_PRODUCT, value ACD (maxCount 1)
|
||||
[07/29/26 11:01:07] info Setting key SP/UPI_RELEASE, value 2027 (maxCount 1)
|
||||
[07/29/26 11:01:07] info Setting key SP/UPI_MASTER, value {28B89EEF-A101-040A-2102-CF3F3A09B77D} (maxCount 1)
|
||||
[07/29/26 11:01:07] info Setting key SP/UPI_BUILD, value 26.0.60.0.0 (maxCount 1)
|
||||
[07/29/26 11:01:07] info Setting key SP/UPI_FULL_XML, value <?xml version="1.0"?><upipackage><upivalue version="1.0" type="product" requestingapp="true"><level name="productline" id="ACD"><level name="release" id="2027"><level name="master" id="{28B89EEF-A101-040A-2102-CF3F3A09B77D}"><level name="build" id="26.0.60.0.0"/></level></level></level></upivalue>
|
||||
<upivalue version="1.0" type="product"><level name="productline" id="ACD"><level name="release" id="2027"><level name="master" id="{28B89EEF-A101-040A-1102-CF3F3A09B77D}"><level name="build" id="26.0.60.0.0"/></level></level></level></upivalue>
|
||||
<upivalue version="1.0" type="product"><level name="productline" id="ARCHDESK"><level name="release" id="2027"><level name="master" id="{28B89EEE-A104-0000-5102-CF3F3A09B77D}"><level name="build" id="8.9.46.0"/></level></level></level></upivalue>
|
||||
<upivalue version="1.0" type="product"><level name="productline" id="ACD"><level name="release" id="2027"><level name="master" id="{28B89EEF-A101-0000-0102-CF3F3A09B77D}"><level name="build" id="26.0.60.0.0"/></level></level></level></upivalue>
|
||||
</upipackage> (maxCount 1)
|
||||
[07/29/26 11:01:07] info set legacy options: /APPICON "C:\Program Files\Autodesk\AutoCAD 2027\AcBrandRes.dll" /APPICONID 1
|
||||
[07/29/26 11:01:07] info Setting key RP/AppIcon, value C:\Program Files\Autodesk\AutoCAD 2027\AcBrandRes.dll (maxCount 1)
|
||||
[07/29/26 11:01:07] info Setting key RP/AppIconId, value 1 (maxCount 1)
|
||||
[07/29/26 11:01:07] info Setting key RP/CadSettingsRegPath, value Software\Autodesk\AutoCAD\R26.0\ACAD-A101:40A\CadManagerControl\CustomerErrorReport (maxCount 1)
|
||||
[07/29/26 11:01:07] info Setting key RP/AppLocaleId, value 1034 (maxCount 1)
|
||||
[07/29/26 11:01:07] info Setting key RP/AppXML, value <ProductInformation name ="AutoCAD" build_version="X.60.0.0(x64)" registry_version="26.0" install_id_string="15FCE767F24F74D1" registry_localeID="1034" git_commit_id="90c984aa66a571142ee0757584bac517eec2175a" /> (maxCount 100)
|
||||
[07/29/26 11:01:07] info Setting key SP/THEME_TYPE, value Blue (maxCount 1)
|
||||
[07/29/26 11:01:07] info Setting key SP/EXCEPTION_INFO_POINTER, value 140710146442520 (maxCount 1)
|
||||
[07/29/26 11:01:07] info Setting key SP/THREAD_ID, value 4294967295 (maxCount 1)
|
||||
[07/29/26 11:01:07] info Get key SP/THREAD_ID, index 0: "4294967295"
|
||||
[07/29/26 11:01:07] info Setting key SP/WER, value 0 (maxCount 1)
|
||||
[07/29/26 11:01:07] info Get key SP/WER, index 0: "0"
|
||||
[07/29/26 11:01:07] info Registered C:\Program Files\Autodesk\AutoCAD 2027\cer.dll as WER runtime exception module
|
||||
[07/29/26 11:01:07] info Current ErrorMode is 32769
|
||||
[07/29/26 11:01:07] debug Receiver ping: pong
|
||||
[07/29/26 11:01:17] debug Receiver ping: pong
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -119,7 +119,6 @@ CREATE OR ALTER PROCEDURE [dbo].[Sis_ConfigurarLimpieza]
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON;
|
||||
SET XACT_ABORT ON;
|
||||
|
||||
IF @DiasRetencion NOT BETWEEN 30 AND 3650
|
||||
THROW 51000, N'Los días de retención deben estar entre 30 y 3650.', 1;
|
||||
@@ -180,7 +179,6 @@ CREATE OR ALTER PROCEDURE [dbo].[Sis_LimpiarRegistrosBorrados]
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON;
|
||||
SET XACT_ABORT ON;
|
||||
|
||||
IF @MaximoLotesPorTabla NOT BETWEEN 1 AND 10000
|
||||
THROW 51010, N'El máximo de lotes debe estar entre 1 y 10000.', 1;
|
||||
|
||||
@@ -31,10 +31,10 @@ GO
|
||||
CREATE TABLE [dbo].[Fraccionamientos] (
|
||||
[CveFraccionamiento] int IDENTITY(1,1) NOT NULL,
|
||||
[CveCliente] int NOT NULL,
|
||||
[Fraccionamiento] varchar(200) COLLATE Modern_Spanish_CS_AI NOT NULL,
|
||||
[Fraccionamiento] varchar(200) COLLATE Modern_Spanish_CS_AS NOT NULL,
|
||||
[Hectareas] decimal(18,4) NULL,
|
||||
[Ubicacion] varchar(500) COLLATE Modern_Spanish_CS_AI NULL,
|
||||
[Estatus] varchar(50) COLLATE Modern_Spanish_CS_AI NULL,
|
||||
[Ubicacion] varchar(500) COLLATE Modern_Spanish_CS_AS NULL,
|
||||
[Estatus] varchar(50) COLLATE Modern_Spanish_CS_AS NULL,
|
||||
[EsActivo] bit CONSTRAINT [DF_Fraccionamientos_EsActivo] DEFAULT ((1)) NOT NULL,
|
||||
[FechaAlta] datetime CONSTRAINT [DF_Fraccionamientos_FechaAlta] DEFAULT (GETDATE()) NOT NULL,
|
||||
[FechaModificacion] datetime NULL,
|
||||
@@ -49,7 +49,7 @@ GO
|
||||
CREATE TABLE [dbo].[FraccionamientosEtapas] (
|
||||
[CveFraccionamientoEtapa] int IDENTITY(1,1) NOT NULL,
|
||||
[CveFraccionamiento] int NOT NULL,
|
||||
[Etapa] varchar(150) COLLATE Modern_Spanish_CS_AI NOT NULL,
|
||||
[Etapa] varchar(150) COLLATE Modern_Spanish_CS_AS NOT NULL,
|
||||
[Hectareas] decimal(18,4) NULL,
|
||||
[Orden] int CONSTRAINT [DF_FraccionamientosEtapas_Orden] DEFAULT ((0)) NOT NULL,
|
||||
[EsActivo] bit CONSTRAINT [DF_FraccionamientosEtapas_EsActivo] DEFAULT ((1)) NOT NULL,
|
||||
@@ -66,12 +66,12 @@ GO
|
||||
CREATE TABLE [dbo].[FraccionamientosLotes] (
|
||||
[CveFraccionamientoLote] int IDENTITY(1,1) NOT NULL,
|
||||
[CveFraccionamientoEtapa] int NOT NULL,
|
||||
[Tipo] varchar(100) COLLATE Modern_Spanish_CS_AI NULL,
|
||||
[Calle] varchar(200) COLLATE Modern_Spanish_CS_AI NULL,
|
||||
[Catastro] varchar(100) COLLATE Modern_Spanish_CS_AI NULL,
|
||||
[Tipo] varchar(100) COLLATE Modern_Spanish_CS_AS NULL,
|
||||
[Calle] varchar(200) COLLATE Modern_Spanish_CS_AS NULL,
|
||||
[Catastro] varchar(100) COLLATE Modern_Spanish_CS_AS NULL,
|
||||
[MetrosCuadrados] decimal(18,4) NULL,
|
||||
[Numero] varchar(50) COLLATE Modern_Spanish_CS_AI NULL,
|
||||
[Duplicador] varchar(50) COLLATE Modern_Spanish_CS_AI NULL,
|
||||
[Numero] varchar(50) COLLATE Modern_Spanish_CS_AS NULL,
|
||||
[Duplicador] varchar(50) COLLATE Modern_Spanish_CS_AS NULL,
|
||||
[EsActivo] bit CONSTRAINT [DF_FraccionamientosLotes_EsActivo] DEFAULT ((1)) NOT NULL,
|
||||
[FechaAlta] datetime CONSTRAINT [DF_FraccionamientosLotes_FechaAlta] DEFAULT (GETDATE()) NOT NULL,
|
||||
[FechaModificacion] datetime NULL,
|
||||
@@ -85,9 +85,9 @@ GO
|
||||
|
||||
CREATE TABLE [dbo].[Tra_TiposTramite] (
|
||||
[CveTipoTramite] int IDENTITY(1,1) NOT NULL,
|
||||
[Codigo] varchar(50) COLLATE Modern_Spanish_CS_AI NOT NULL,
|
||||
[TipoTramite] varchar(200) COLLATE Modern_Spanish_CS_AI NOT NULL,
|
||||
[Descripcion] varchar(500) COLLATE Modern_Spanish_CS_AI NULL,
|
||||
[Codigo] varchar(50) COLLATE Modern_Spanish_CI_AS NOT NULL,
|
||||
[TipoTramite] varchar(200) COLLATE Modern_Spanish_CS_AS NOT NULL,
|
||||
[Descripcion] varchar(500) COLLATE Modern_Spanish_CS_AS NULL,
|
||||
[Orden] int CONSTRAINT [DF_Tra_TiposTramite_Orden] DEFAULT ((0)) NOT NULL,
|
||||
[EsActivo] bit CONSTRAINT [DF_Tra_TiposTramite_EsActivo] DEFAULT ((1)) NOT NULL,
|
||||
[FechaAlta] datetime CONSTRAINT [DF_Tra_TiposTramite_FechaAlta] DEFAULT (GETDATE()) NOT NULL,
|
||||
@@ -100,8 +100,8 @@ GO
|
||||
|
||||
CREATE TABLE [dbo].[Tra_EstatusSolicitud] (
|
||||
[CveEstatusSolicitud] int IDENTITY(1,1) NOT NULL,
|
||||
[Codigo] varchar(50) COLLATE Modern_Spanish_CS_AI NOT NULL,
|
||||
[EstatusSolicitud] varchar(100) COLLATE Modern_Spanish_CS_AI NOT NULL,
|
||||
[Codigo] varchar(50) COLLATE Modern_Spanish_CI_AS NOT NULL,
|
||||
[EstatusSolicitud] varchar(100) COLLATE Modern_Spanish_CS_AS NOT NULL,
|
||||
[Orden] int CONSTRAINT [DF_Tra_EstatusSolicitud_Orden] DEFAULT ((0)) NOT NULL,
|
||||
[EsFinal] bit CONSTRAINT [DF_Tra_EstatusSolicitud_EsFinal] DEFAULT ((0)) NOT NULL,
|
||||
[EsActivo] bit CONSTRAINT [DF_Tra_EstatusSolicitud_EsActivo] DEFAULT ((1)) NOT NULL,
|
||||
@@ -112,9 +112,9 @@ GO
|
||||
|
||||
CREATE TABLE [dbo].[Tra_TiposDocumento] (
|
||||
[CveTipoDocumento] int IDENTITY(1,1) NOT NULL,
|
||||
[TipoDocumento] varchar(200) COLLATE Modern_Spanish_CS_AI NOT NULL,
|
||||
[Descripcion] varchar(500) COLLATE Modern_Spanish_CS_AI NULL,
|
||||
[ExtensionesPermitidas] varchar(200) COLLATE Modern_Spanish_CS_AI NULL,
|
||||
[TipoDocumento] varchar(200) COLLATE Modern_Spanish_CS_AS NOT NULL,
|
||||
[Descripcion] varchar(500) COLLATE Modern_Spanish_CS_AS NULL,
|
||||
[ExtensionesPermitidas] varchar(200) COLLATE Modern_Spanish_CS_AS NULL,
|
||||
[TamanoMaximoMb] int NULL,
|
||||
[EsActivo] bit CONSTRAINT [DF_Tra_TiposDocumento_EsActivo] DEFAULT ((1)) NOT NULL,
|
||||
[FechaAlta] datetime CONSTRAINT [DF_Tra_TiposDocumento_FechaAlta] DEFAULT (GETDATE()) NOT NULL,
|
||||
@@ -128,8 +128,8 @@ GO
|
||||
|
||||
CREATE TABLE [dbo].[Tra_TiposPregunta] (
|
||||
[CveTipoPregunta] int IDENTITY(1,1) NOT NULL,
|
||||
[Codigo] varchar(50) COLLATE Modern_Spanish_CS_AI NOT NULL,
|
||||
[TipoPregunta] varchar(100) COLLATE Modern_Spanish_CS_AI NOT NULL,
|
||||
[Codigo] varchar(50) COLLATE Modern_Spanish_CI_AS NOT NULL,
|
||||
[TipoPregunta] varchar(100) COLLATE Modern_Spanish_CS_AS NOT NULL,
|
||||
[EsActivo] bit CONSTRAINT [DF_Tra_TiposPregunta_EsActivo] DEFAULT ((1)) NOT NULL,
|
||||
CONSTRAINT [PK_Tra_TiposPregunta] PRIMARY KEY CLUSTERED ([CveTipoPregunta]),
|
||||
CONSTRAINT [UQ_Tra_TiposPregunta_Codigo] UNIQUE NONCLUSTERED ([Codigo])
|
||||
@@ -139,8 +139,8 @@ GO
|
||||
CREATE TABLE [dbo].[Tra_Preguntas] (
|
||||
[CvePregunta] int IDENTITY(1,1) NOT NULL,
|
||||
[CveTipoPregunta] int NOT NULL,
|
||||
[Pregunta] varchar(500) COLLATE Modern_Spanish_CS_AI NOT NULL,
|
||||
[Descripcion] varchar(1000) COLLATE Modern_Spanish_CS_AI NULL,
|
||||
[Pregunta] varchar(500) COLLATE Modern_Spanish_CS_AS NOT NULL,
|
||||
[Descripcion] varchar(1000) COLLATE Modern_Spanish_CS_AS NULL,
|
||||
[EsRequerida] bit CONSTRAINT [DF_Tra_Preguntas_EsRequerida] DEFAULT ((0)) NOT NULL,
|
||||
[Orden] int CONSTRAINT [DF_Tra_Preguntas_Orden] DEFAULT ((0)) NOT NULL,
|
||||
[EsActivo] bit CONSTRAINT [DF_Tra_Preguntas_EsActivo] DEFAULT ((1)) NOT NULL,
|
||||
@@ -154,8 +154,8 @@ GO
|
||||
CREATE TABLE [dbo].[Tra_OpcionesPregunta] (
|
||||
[CveOpcionPregunta] int IDENTITY(1,1) NOT NULL,
|
||||
[CvePregunta] int NOT NULL,
|
||||
[TextoOpcion] varchar(300) COLLATE Modern_Spanish_CS_AI NOT NULL,
|
||||
[ValorOpcion] varchar(300) COLLATE Modern_Spanish_CS_AI NULL,
|
||||
[TextoOpcion] varchar(300) COLLATE Modern_Spanish_CS_AS NOT NULL,
|
||||
[ValorOpcion] varchar(300) COLLATE Modern_Spanish_CS_AS NULL,
|
||||
[Orden] int CONSTRAINT [DF_Tra_OpcionesPregunta_Orden] DEFAULT ((0)) NOT NULL,
|
||||
[EsActivo] bit CONSTRAINT [DF_Tra_OpcionesPregunta_EsActivo] DEFAULT ((1)) NOT NULL,
|
||||
CONSTRAINT [PK_Tra_OpcionesPregunta] PRIMARY KEY CLUSTERED ([CveOpcionPregunta]),
|
||||
@@ -167,7 +167,7 @@ GO
|
||||
|
||||
CREATE TABLE [dbo].[Tra_Solicitudes] (
|
||||
[CveSolicitud] int IDENTITY(1,1) NOT NULL,
|
||||
[Folio] varchar(50) COLLATE Modern_Spanish_CS_AI NOT NULL,
|
||||
[Folio] varchar(50) COLLATE Modern_Spanish_CS_AS NOT NULL,
|
||||
[CveCliente] int NOT NULL,
|
||||
[CveFraccionamiento] int NOT NULL,
|
||||
[CveFraccionamientoEtapa] int NOT NULL,
|
||||
@@ -178,8 +178,8 @@ CREATE TABLE [dbo].[Tra_Solicitudes] (
|
||||
[FechaEnvio] datetime NULL,
|
||||
[FechaAutorizacion] datetime NULL,
|
||||
[FechaRechazo] datetime NULL,
|
||||
[ComentariosCliente] varchar(max) COLLATE Modern_Spanish_CS_AI NULL,
|
||||
[ComentariosAdministrativos] varchar(max) COLLATE Modern_Spanish_CS_AI NULL,
|
||||
[ComentariosCliente] varchar(max) COLLATE Modern_Spanish_CS_AS NULL,
|
||||
[ComentariosAdministrativos] varchar(max) COLLATE Modern_Spanish_CS_AS NULL,
|
||||
[FechaAlta] datetime CONSTRAINT [DF_Tra_Solicitudes_FechaAlta] DEFAULT (GETDATE()) NOT NULL,
|
||||
[FechaModificacion] datetime NULL,
|
||||
CONSTRAINT [PK_Tra_Solicitudes] PRIMARY KEY CLUSTERED ([CveSolicitud]),
|
||||
@@ -193,7 +193,7 @@ CREATE TABLE [dbo].[Tra_SolicitudesDependencias] (
|
||||
[CveSolicitud] int NOT NULL,
|
||||
[CveSolicitudRequerida] int NOT NULL,
|
||||
[EsObligatoria] bit CONSTRAINT [DF_Tra_SolicitudesDependencias_EsObligatoria] DEFAULT ((1)) NOT NULL,
|
||||
[Condicion] varchar(500) COLLATE Modern_Spanish_CS_AI NULL,
|
||||
[Condicion] varchar(500) COLLATE Modern_Spanish_CS_AS NULL,
|
||||
[FechaAlta] datetime CONSTRAINT [DF_Tra_SolicitudesDependencias_FechaAlta] DEFAULT (GETDATE()) NOT NULL,
|
||||
[CveUsuario] int NOT NULL,
|
||||
CONSTRAINT [PK_Tra_SolicitudesDependencias] PRIMARY KEY CLUSTERED ([CveSolicitudDependencia]),
|
||||
@@ -207,7 +207,7 @@ CREATE TABLE [dbo].[Tra_HistorialEstatusSolicitud] (
|
||||
[CveSolicitud] int NOT NULL,
|
||||
[CveEstatusSolicitud] int NOT NULL,
|
||||
[CveUsuario] int NULL,
|
||||
[Comentarios] varchar(1000) COLLATE Modern_Spanish_CS_AI NULL,
|
||||
[Comentarios] varchar(1000) COLLATE Modern_Spanish_CS_AS NULL,
|
||||
[FechaAlta] datetime CONSTRAINT [DF_Tra_HistorialEstatusSolicitud_FechaAlta] DEFAULT (GETDATE()) NOT NULL,
|
||||
CONSTRAINT [PK_Tra_HistorialEstatusSolicitud] PRIMARY KEY CLUSTERED ([CveHistorialEstatusSolicitud])
|
||||
);
|
||||
@@ -229,13 +229,13 @@ CREATE TABLE [dbo].[Tra_DocumentosSolicitud] (
|
||||
[CveDocumentoSolicitud] int IDENTITY(1,1) NOT NULL,
|
||||
[CveSolicitud] int NOT NULL,
|
||||
[CveTipoDocumento] int NOT NULL,
|
||||
[NombreArchivo] varchar(255) COLLATE Modern_Spanish_CS_AI NOT NULL,
|
||||
[NombreArchivoFisico] varchar(255) COLLATE Modern_Spanish_CS_AI NOT NULL,
|
||||
[RutaArchivo] varchar(1000) COLLATE Modern_Spanish_CS_AI NOT NULL,
|
||||
[ContentType] varchar(100) COLLATE Modern_Spanish_CS_AI NULL,
|
||||
[NombreArchivo] varchar(255) COLLATE Modern_Spanish_CS_AS NOT NULL,
|
||||
[NombreArchivoFisico] varchar(255) COLLATE Modern_Spanish_CS_AS NOT NULL,
|
||||
[RutaArchivo] varchar(1000) COLLATE Modern_Spanish_CS_AS NOT NULL,
|
||||
[ContentType] varchar(100) COLLATE Modern_Spanish_CS_AS NULL,
|
||||
[TamanoBytes] bigint NULL,
|
||||
[ComentarioCliente] varchar(1000) COLLATE Modern_Spanish_CS_AI NULL,
|
||||
[ComentarioAdministrativo] varchar(1000) COLLATE Modern_Spanish_CS_AI NULL,
|
||||
[ComentarioCliente] varchar(1000) COLLATE Modern_Spanish_CS_AS NULL,
|
||||
[ComentarioAdministrativo] varchar(1000) COLLATE Modern_Spanish_CS_AS NULL,
|
||||
[EsAprobado] bit NULL,
|
||||
[CveUsuarioCarga] int NULL,
|
||||
[CveUsuarioRevisa] int NULL,
|
||||
@@ -263,7 +263,7 @@ CREATE TABLE [dbo].[Tra_RespuestasSolicitud] (
|
||||
[CveSolicitud] int NOT NULL,
|
||||
[CvePregunta] int NOT NULL,
|
||||
[CveOpcionPregunta] int NULL,
|
||||
[Valor] varchar(max) COLLATE Modern_Spanish_CS_AI NULL,
|
||||
[Valor] varchar(max) COLLATE Modern_Spanish_CS_AS NULL,
|
||||
[FechaAlta] datetime CONSTRAINT [DF_Tra_RespuestasSolicitud_FechaAlta] DEFAULT (GETDATE()) NOT NULL,
|
||||
[FechaModificacion] datetime NULL,
|
||||
[CveUsuario] int NULL,
|
||||
@@ -277,7 +277,7 @@ CREATE TABLE [dbo].[Tra_CostosTramite] (
|
||||
[CveTipoTramite] int NOT NULL,
|
||||
[CvePS] int NOT NULL,
|
||||
[CveMoneda] int NOT NULL,
|
||||
[Descripcion] varchar(300) COLLATE Modern_Spanish_CS_AI NOT NULL,
|
||||
[Descripcion] varchar(300) COLLATE Modern_Spanish_CS_AS NOT NULL,
|
||||
[Importe] decimal(18,2) CONSTRAINT [DF_Tra_CostosTramite_Importe] DEFAULT ((0)) NOT NULL,
|
||||
[FechaInicioVigencia] date NULL,
|
||||
[FechaFinVigencia] date NULL,
|
||||
@@ -296,8 +296,8 @@ CREATE TABLE [dbo].[Tra_NotasSolicitud] (
|
||||
[CveNotaSolicitud] int IDENTITY(1,1) NOT NULL,
|
||||
[CveSolicitud] int NOT NULL,
|
||||
[CveUsuario] int NULL,
|
||||
[TipoNota] varchar(50) COLLATE Modern_Spanish_CS_AI CONSTRAINT [DF_Tra_NotasSolicitud_TipoNota] DEFAULT ('General') NOT NULL,
|
||||
[Comentario] varchar(max) COLLATE Modern_Spanish_CS_AI NOT NULL,
|
||||
[TipoNota] varchar(50) COLLATE Modern_Spanish_CS_AS CONSTRAINT [DF_Tra_NotasSolicitud_TipoNota] DEFAULT ('General') NOT NULL,
|
||||
[Comentario] varchar(max) COLLATE Modern_Spanish_CS_AS NOT NULL,
|
||||
[EsVisibleParaCliente] bit CONSTRAINT [DF_Tra_NotasSolicitud_Visible] DEFAULT ((1)) NOT NULL,
|
||||
[FechaAlta] datetime CONSTRAINT [DF_Tra_NotasSolicitud_FechaAlta] DEFAULT (GETDATE()) NOT NULL,
|
||||
CONSTRAINT [PK_Tra_NotasSolicitud] PRIMARY KEY CLUSTERED ([CveNotaSolicitud])
|
||||
@@ -336,7 +336,7 @@ CREATE TABLE [dbo].[Vta_Pagos] (
|
||||
[CvePrePoliza] int NULL,
|
||||
[FechaPago] datetime NOT NULL,
|
||||
[Importe] decimal(18,2) NOT NULL,
|
||||
[Referencia] varchar(200) COLLATE Modern_Spanish_CS_AI NULL,
|
||||
[Referencia] varchar(200) COLLATE Modern_Spanish_CS_AS NULL,
|
||||
[EsSaldoFavor] bit CONSTRAINT [DF_Vta_Pagos_EsSaldoFavor] DEFAULT ((0)) NOT NULL,
|
||||
[EsActivo] bit CONSTRAINT [DF_Vta_Pagos_EsActivo] DEFAULT ((1)) NOT NULL,
|
||||
[FechaAlta] datetime CONSTRAINT [DF_Vta_Pagos_FechaAlta] DEFAULT (GETDATE()) NOT NULL,
|
||||
|
||||
1449
Facturacion_Cfdi_Timbrado.sql
Normal file
1449
Facturacion_Cfdi_Timbrado.sql
Normal file
File diff suppressed because it is too large
Load Diff
590
Facturacion_Timbrado_Venta_20260828.sql
Normal file
590
Facturacion_Timbrado_Venta_20260828.sql
Normal file
@@ -0,0 +1,590 @@
|
||||
CREATE OR ALTER PROCEDURE dbo.PA_Fac_EmisorFiscalGet
|
||||
@CveEmpresa int,
|
||||
@CveUsuarioEjecuta int,
|
||||
@ErrorMostrar varchar(max) OUTPUT,
|
||||
@ErrorTipo int OUTPUT,
|
||||
@Return bit OUTPUT
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON;
|
||||
SELECT @ErrorMostrar = NULL, @ErrorTipo = 0, @Return = 0;
|
||||
|
||||
BEGIN TRY
|
||||
IF NOT EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM dbo.Fac_EmisoresFiscales
|
||||
WHERE CveEmpresa = @CveEmpresa
|
||||
AND EsActivo = 1
|
||||
)
|
||||
BEGIN
|
||||
SELECT
|
||||
@ErrorMostrar = 'La empresa no tiene configurado un emisor fiscal activo.',
|
||||
@ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
SELECT
|
||||
CveEmisorFiscal,
|
||||
CveEmpresa,
|
||||
Rfc,
|
||||
NombreFiscal,
|
||||
RegimenFiscal,
|
||||
CodigoPostal,
|
||||
ProveedorPac,
|
||||
AmbienteProduccion,
|
||||
ReferenciaCredencialPac,
|
||||
ReferenciaContratoPac,
|
||||
ReferenciaCertificadoCsd,
|
||||
ReferenciaLlavePrivadaCsd,
|
||||
NumeroCertificado,
|
||||
VigenciaCertificadoDesde,
|
||||
VigenciaCertificadoHasta,
|
||||
HuellaCertificado,
|
||||
EsActivo
|
||||
FROM dbo.Fac_EmisoresFiscales
|
||||
WHERE CveEmpresa = @CveEmpresa
|
||||
AND EsActivo = 1;
|
||||
|
||||
SET @Return = 1;
|
||||
END TRY
|
||||
BEGIN CATCH
|
||||
SELECT
|
||||
@ErrorMostrar = 'Ocurrió un error al consultar el emisor fiscal; favor de contactar a Sistemas.',
|
||||
@ErrorTipo = 1,
|
||||
@Return = 0;
|
||||
|
||||
DECLARE @ErrorTecnico nvarchar(2048) =
|
||||
CONCAT(
|
||||
'Número: ', ERROR_NUMBER(),
|
||||
'; Procedimiento: ', COALESCE(ERROR_PROCEDURE(), 'PA_Fac_EmisorFiscalGet'),
|
||||
'; Línea: ', ERROR_LINE(),
|
||||
'; Detalle: ', ERROR_MESSAGE());
|
||||
|
||||
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
|
||||
END CATCH;
|
||||
END;
|
||||
GO
|
||||
|
||||
CREATE OR ALTER PROCEDURE dbo.PA_Vta_TramiteVentaDatosCfdiGet
|
||||
@CveSolicitud int,
|
||||
@CveTramitePago int,
|
||||
@CveUsuarioEjecuta int,
|
||||
@ErrorMostrar varchar(max) OUTPUT,
|
||||
@ErrorTipo int OUTPUT,
|
||||
@Return bit OUTPUT
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON;
|
||||
SELECT @ErrorMostrar = NULL, @ErrorTipo = 0, @Return = 0;
|
||||
|
||||
BEGIN TRY
|
||||
DECLARE @CveVenta int;
|
||||
|
||||
SELECT @CveVenta = V.CveVenta
|
||||
FROM dbo.Tra_SolicitudesPagos AS SP
|
||||
INNER JOIN dbo.Ventas AS V
|
||||
ON V.CveVenta = SP.CveVenta
|
||||
WHERE SP.CveSolicitud = @CveSolicitud
|
||||
AND SP.CveTramitePago = @CveTramitePago;
|
||||
|
||||
IF @CveVenta IS NULL
|
||||
BEGIN
|
||||
SELECT
|
||||
@ErrorMostrar = 'Primero debe generar la venta del trámite.',
|
||||
@ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
IF EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM dbo.Ventas AS V
|
||||
WHERE V.CveVenta = @CveVenta
|
||||
AND
|
||||
(
|
||||
V.SeTimbro = 1
|
||||
OR EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM dbo.Fac_CfdiDocumentos AS D
|
||||
WHERE D.TipoOrigen = 'VENTA'
|
||||
AND D.CveOrigen = V.CveVenta
|
||||
AND D.Estado = 'TIMBRADO'
|
||||
AND D.CveCfdiTimbradoVigente IS NOT NULL
|
||||
)
|
||||
)
|
||||
)
|
||||
BEGIN
|
||||
SELECT
|
||||
@ErrorMostrar = 'La venta ya se encuentra timbrada.',
|
||||
@ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
IF EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM dbo.Fac_CfdiDocumentos
|
||||
WHERE TipoOrigen = 'VENTA'
|
||||
AND CveOrigen = @CveVenta
|
||||
AND Estado = 'REVISAR'
|
||||
)
|
||||
BEGIN
|
||||
SELECT
|
||||
@ErrorMostrar = 'Existe un intento de timbrado con resultado indeterminado; debe revisarse antes de volver a timbrar.',
|
||||
@ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
SELECT
|
||||
V.CveVenta,
|
||||
Borrador.CveCfdiDocumento,
|
||||
V.CveCliente,
|
||||
V.Serie,
|
||||
V.Folio,
|
||||
V.Fecha,
|
||||
FP.ClaveFormaPagoSAT AS FormaPago,
|
||||
MP.ClaveMetodoPagoSAT AS MetodoPago,
|
||||
M.AbreviaturaSAT AS Moneda,
|
||||
CONVERT(decimal(19, 6), V.TipoCambio) AS TipoCambio
|
||||
FROM dbo.Ventas AS V
|
||||
LEFT JOIN dbo.Vta_FormaPago AS FP
|
||||
ON FP.CveFormaPago = V.FormaPago
|
||||
LEFT JOIN dbo.Vta_MetodoPago AS MP
|
||||
ON MP.CveMetodoPago = V.CveMetodoPago
|
||||
INNER JOIN dbo.Gral_Monedas AS M
|
||||
ON M.CveMoneda = V.CveMoneda
|
||||
OUTER APPLY
|
||||
(
|
||||
SELECT TOP (1) D.CveCfdiDocumento
|
||||
FROM dbo.Fac_CfdiDocumentos AS D
|
||||
WHERE D.TipoOrigen = 'VENTA'
|
||||
AND D.CveOrigen = V.CveVenta
|
||||
AND D.CveCfdiTimbradoVigente IS NULL
|
||||
AND D.Estado IN ('BORRADOR', 'LISTO', 'ERROR')
|
||||
ORDER BY D.CveCfdiDocumento DESC
|
||||
) AS Borrador
|
||||
WHERE V.CveVenta = @CveVenta;
|
||||
|
||||
SELECT
|
||||
SATPS.SATClavePS AS ClaveProductoServicio,
|
||||
PS.Codigo AS NumeroIdentificacion,
|
||||
VD.Cantidad,
|
||||
SATUM.SATClaveUnidadMedida AS ClaveUnidad,
|
||||
UM.UnidadMedida AS Unidad,
|
||||
PS.PS AS Descripcion,
|
||||
VD.PrecioUnitario AS ValorUnitario,
|
||||
VD.PrecioUnitario AS PU,
|
||||
VD.Importe AS Total,
|
||||
VD.Descuento,
|
||||
OI.CodigoObjetoImpuesto AS ObjetoImpuesto,
|
||||
CONVERT(
|
||||
decimal(19, 6),
|
||||
VD.Importe - VD.Descuento
|
||||
) AS BaseIVA,
|
||||
CONVERT(decimal(19, 6), 0.16) AS TasaIVA,
|
||||
CONVERT(decimal(19, 6), VD.IVA) AS ImporteIVA,
|
||||
CONVERT(decimal(19, 6), 0.16) AS PorcentajeIVA
|
||||
FROM dbo.VentasDetalle AS VD
|
||||
INNER JOIN dbo.ProductosServicios AS PS
|
||||
ON PS.CvePS = VD.CvePS
|
||||
INNER JOIN dbo.UnidadesMedida AS UM
|
||||
ON UM.CveUnidadMedida = PS.CveUnidadMedida
|
||||
LEFT JOIN dbo.Gral_SAT_ProductosServicios AS SATPS
|
||||
ON SATPS.CveSATPS = PS.CveSATPS
|
||||
LEFT JOIN dbo.Gral_SAT_UnidadesMedida AS SATUM
|
||||
ON SATUM.CveSATUnidadMedida = UM.CveSATUnidadMedida
|
||||
LEFT JOIN dbo.Gral_SAT_ObjetoImpuesto AS OI
|
||||
ON OI.CveObjetoImpuesto = PS.CveObjetoImpuesto
|
||||
WHERE VD.CveVenta = @CveVenta
|
||||
ORDER BY VD.CveVentaDetalle;
|
||||
|
||||
SET @Return = 1;
|
||||
END TRY
|
||||
BEGIN CATCH
|
||||
SELECT
|
||||
@ErrorMostrar = 'Ocurrió un error al preparar los datos fiscales de la venta; favor de contactar a Sistemas.',
|
||||
@ErrorTipo = 1,
|
||||
@Return = 0;
|
||||
|
||||
DECLARE @ErrorTecnico nvarchar(2048) =
|
||||
CONCAT(
|
||||
'Número: ', ERROR_NUMBER(),
|
||||
'; Procedimiento: ', COALESCE(ERROR_PROCEDURE(), 'PA_Vta_TramiteVentaDatosCfdiGet'),
|
||||
'; Línea: ', ERROR_LINE(),
|
||||
'; Detalle: ', ERROR_MESSAGE());
|
||||
|
||||
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
|
||||
END CATCH;
|
||||
END;
|
||||
GO
|
||||
|
||||
CREATE OR ALTER PROCEDURE dbo.PA_Fac_EmisorFiscalSave
|
||||
@CveEmisorFiscal int = NULL,
|
||||
@CveEmpresa int,
|
||||
@Rfc varchar(13),
|
||||
@NombreFiscal varchar(300),
|
||||
@RegimenFiscal varchar(3),
|
||||
@CodigoPostal varchar(5),
|
||||
@ProveedorPac varchar(50),
|
||||
@AmbienteProduccion bit,
|
||||
@ReferenciaCredencialPac varchar(100),
|
||||
@ReferenciaContratoPac varchar(100) = NULL,
|
||||
@ReferenciaCertificadoCsd varchar(500) = NULL,
|
||||
@ReferenciaLlavePrivadaCsd varchar(500) = NULL,
|
||||
@NumeroCertificado varchar(20) = NULL,
|
||||
@VigenciaCertificadoDesde datetime2(0) = NULL,
|
||||
@VigenciaCertificadoHasta datetime2(0) = NULL,
|
||||
@HuellaCertificado varchar(128) = NULL,
|
||||
@EsActivo bit,
|
||||
@CveUsuarioEjecuta int,
|
||||
@ErrorMostrar varchar(max) OUTPUT,
|
||||
@ErrorTipo int OUTPUT,
|
||||
@Return bit OUTPUT
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON;
|
||||
SELECT @ErrorMostrar = NULL, @ErrorTipo = 0, @Return = 0;
|
||||
|
||||
BEGIN TRY
|
||||
SELECT
|
||||
@Rfc = UPPER(REPLACE(LTRIM(RTRIM(@Rfc)), ' ', '')),
|
||||
@NombreFiscal = LTRIM(RTRIM(@NombreFiscal)),
|
||||
@RegimenFiscal = LTRIM(RTRIM(@RegimenFiscal)),
|
||||
@CodigoPostal = LTRIM(RTRIM(@CodigoPostal)),
|
||||
@ProveedorPac = UPPER(LTRIM(RTRIM(@ProveedorPac))),
|
||||
@ReferenciaCredencialPac = LTRIM(RTRIM(@ReferenciaCredencialPac)),
|
||||
@ReferenciaContratoPac = NULLIF(LTRIM(RTRIM(@ReferenciaContratoPac)), ''),
|
||||
@ReferenciaCertificadoCsd = NULLIF(LTRIM(RTRIM(@ReferenciaCertificadoCsd)), ''),
|
||||
@ReferenciaLlavePrivadaCsd = NULLIF(LTRIM(RTRIM(@ReferenciaLlavePrivadaCsd)), ''),
|
||||
@NumeroCertificado = NULLIF(LTRIM(RTRIM(@NumeroCertificado)), ''),
|
||||
@HuellaCertificado = NULLIF(LTRIM(RTRIM(@HuellaCertificado)), '');
|
||||
|
||||
IF LEN(@Rfc) NOT IN (12, 13)
|
||||
OR NULLIF(@NombreFiscal, '') IS NULL
|
||||
OR LEN(@RegimenFiscal) <> 3
|
||||
OR LEN(@CodigoPostal) <> 5
|
||||
OR NULLIF(@ProveedorPac, '') IS NULL
|
||||
OR NULLIF(@ReferenciaCredencialPac, '') IS NULL
|
||||
BEGIN
|
||||
SELECT
|
||||
@ErrorMostrar = 'Capture RFC, nombre fiscal, régimen, código postal, PAC y referencia de credencial válidos.',
|
||||
@ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
IF @CveEmisorFiscal IS NULL
|
||||
BEGIN
|
||||
IF EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM dbo.Fac_EmisoresFiscales
|
||||
WHERE CveEmpresa = @CveEmpresa
|
||||
)
|
||||
BEGIN
|
||||
SELECT
|
||||
@ErrorMostrar = 'La empresa ya cuenta con una configuración fiscal.',
|
||||
@ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
INSERT dbo.Fac_EmisoresFiscales
|
||||
(
|
||||
CveEmpresa,
|
||||
Rfc,
|
||||
NombreFiscal,
|
||||
RegimenFiscal,
|
||||
CodigoPostal,
|
||||
ProveedorPac,
|
||||
AmbienteProduccion,
|
||||
ReferenciaCredencialPac,
|
||||
ReferenciaContratoPac,
|
||||
ReferenciaCertificadoCsd,
|
||||
ReferenciaLlavePrivadaCsd,
|
||||
NumeroCertificado,
|
||||
VigenciaCertificadoDesde,
|
||||
VigenciaCertificadoHasta,
|
||||
HuellaCertificado,
|
||||
EsActivo,
|
||||
CveUsuario
|
||||
)
|
||||
VALUES
|
||||
(
|
||||
@CveEmpresa,
|
||||
@Rfc,
|
||||
@NombreFiscal,
|
||||
@RegimenFiscal,
|
||||
@CodigoPostal,
|
||||
@ProveedorPac,
|
||||
@AmbienteProduccion,
|
||||
@ReferenciaCredencialPac,
|
||||
@ReferenciaContratoPac,
|
||||
@ReferenciaCertificadoCsd,
|
||||
@ReferenciaLlavePrivadaCsd,
|
||||
@NumeroCertificado,
|
||||
@VigenciaCertificadoDesde,
|
||||
@VigenciaCertificadoHasta,
|
||||
@HuellaCertificado,
|
||||
@EsActivo,
|
||||
@CveUsuarioEjecuta
|
||||
);
|
||||
|
||||
SET @CveEmisorFiscal = CONVERT(int, SCOPE_IDENTITY());
|
||||
END
|
||||
ELSE
|
||||
BEGIN
|
||||
IF NOT EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM dbo.Fac_EmisoresFiscales
|
||||
WHERE CveEmisorFiscal = @CveEmisorFiscal
|
||||
AND CveEmpresa = @CveEmpresa
|
||||
)
|
||||
BEGIN
|
||||
SELECT
|
||||
@ErrorMostrar = 'No se encontró la configuración fiscal seleccionada.',
|
||||
@ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
UPDATE dbo.Fac_EmisoresFiscales
|
||||
SET Rfc = @Rfc,
|
||||
NombreFiscal = @NombreFiscal,
|
||||
RegimenFiscal = @RegimenFiscal,
|
||||
CodigoPostal = @CodigoPostal,
|
||||
ProveedorPac = @ProveedorPac,
|
||||
AmbienteProduccion = @AmbienteProduccion,
|
||||
ReferenciaCredencialPac = @ReferenciaCredencialPac,
|
||||
ReferenciaContratoPac = @ReferenciaContratoPac,
|
||||
ReferenciaCertificadoCsd = @ReferenciaCertificadoCsd,
|
||||
ReferenciaLlavePrivadaCsd = @ReferenciaLlavePrivadaCsd,
|
||||
NumeroCertificado = @NumeroCertificado,
|
||||
VigenciaCertificadoDesde = @VigenciaCertificadoDesde,
|
||||
VigenciaCertificadoHasta = @VigenciaCertificadoHasta,
|
||||
HuellaCertificado = @HuellaCertificado,
|
||||
EsActivo = @EsActivo,
|
||||
FechaModificacion = SYSDATETIME(),
|
||||
CveUsuario = @CveUsuarioEjecuta
|
||||
WHERE CveEmisorFiscal = @CveEmisorFiscal;
|
||||
END;
|
||||
|
||||
SELECT @CveEmisorFiscal AS CveEmisorFiscal;
|
||||
SET @Return = 1;
|
||||
END TRY
|
||||
BEGIN CATCH
|
||||
SELECT
|
||||
@ErrorMostrar = 'Ocurrió un error al guardar el emisor fiscal; favor de contactar a Sistemas.',
|
||||
@ErrorTipo = 1,
|
||||
@Return = 0;
|
||||
|
||||
DECLARE @ErrorTecnico nvarchar(2048) =
|
||||
CONCAT(
|
||||
'Número: ', ERROR_NUMBER(),
|
||||
'; Procedimiento: ', COALESCE(ERROR_PROCEDURE(), 'PA_Fac_EmisorFiscalSave'),
|
||||
'; Línea: ', ERROR_LINE(),
|
||||
'; Detalle: ', ERROR_MESSAGE());
|
||||
|
||||
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
|
||||
END CATCH;
|
||||
END;
|
||||
GO
|
||||
|
||||
CREATE OR ALTER PROCEDURE dbo.PA_Vta_TramiteContextoGet
|
||||
@CveSolicitud int,
|
||||
@CveTramitePago int,
|
||||
@CveUsuarioEjecuta int,
|
||||
@ErrorMostrar varchar(max) OUTPUT,
|
||||
@ErrorTipo int OUTPUT,
|
||||
@Return bit OUTPUT
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON;
|
||||
SELECT @ErrorMostrar = NULL, @ErrorTipo = 0, @Return = 0;
|
||||
|
||||
BEGIN TRY
|
||||
DECLARE @CveSubProyecto int =
|
||||
(
|
||||
SELECT TOP (1) CveSubProyecto
|
||||
FROM dbo.SubProyectos
|
||||
WHERE Estatus = 1
|
||||
ORDER BY
|
||||
CASE WHEN Serie = 'TRA' THEN 0 ELSE 1 END,
|
||||
CveSubProyecto
|
||||
);
|
||||
|
||||
IF NOT EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM dbo.Tra_Solicitudes AS S
|
||||
INNER JOIN dbo.Tra_Pagos AS P
|
||||
ON P.CveTramitePago = @CveTramitePago
|
||||
AND P.CveTipoTramite = S.CveTipoTramite
|
||||
AND P.EsActivo = 1
|
||||
INNER JOIN dbo.Tra_PagosDetalle AS D
|
||||
ON D.CveTramitePago = P.CveTramitePago
|
||||
WHERE S.CveSolicitud = @CveSolicitud
|
||||
)
|
||||
BEGIN
|
||||
SELECT
|
||||
@ErrorMostrar = 'El pago seleccionado no corresponde al trámite o no tiene conceptos activos.',
|
||||
@ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
SELECT
|
||||
S.CveSolicitud,
|
||||
P.CveTramitePago,
|
||||
SP.CveVenta,
|
||||
VP.CvePago,
|
||||
CONVERT(
|
||||
bit,
|
||||
CASE
|
||||
WHEN SP.CveSolicitudPago IS NOT NULL
|
||||
AND V.CveVenta IS NOT NULL
|
||||
THEN 1
|
||||
ELSE 0
|
||||
END
|
||||
) AS VentaGenerada,
|
||||
CONVERT(
|
||||
bit,
|
||||
CASE WHEN VP.Autorizado = 1 THEN 1 ELSE 0 END
|
||||
) AS VentaPagada,
|
||||
CONVERT(
|
||||
bit,
|
||||
CASE
|
||||
WHEN VP.CvePago IS NOT NULL
|
||||
AND VP.Autorizado = 0
|
||||
THEN 1
|
||||
ELSE 0
|
||||
END
|
||||
) AS PagoPendienteAutorizacion,
|
||||
VP.Referencia AS ReferenciaPago,
|
||||
Documento.CveCfdiDocumento,
|
||||
CONVERT(
|
||||
bit,
|
||||
CASE
|
||||
WHEN V.SeTimbro = 1
|
||||
OR Documento.Estado = 'TIMBRADO'
|
||||
THEN 1
|
||||
ELSE 0
|
||||
END
|
||||
) AS VentaTimbrada,
|
||||
CONVERT(
|
||||
bit,
|
||||
CASE WHEN Documento.Estado = 'CANCELADO' THEN 1 ELSE 0 END
|
||||
) AS TimbreCancelado,
|
||||
Documento.Uuid AS UuidTimbre,
|
||||
S.CveFraccionamiento,
|
||||
F.Fraccionamiento,
|
||||
F.CveCliente,
|
||||
C.Nombre AS Cliente,
|
||||
C.RFC,
|
||||
CONCAT(
|
||||
C.Direccion,
|
||||
CASE
|
||||
WHEN NULLIF(LTRIM(RTRIM(C.NoExt)), '') IS NULL
|
||||
THEN ''
|
||||
ELSE CONCAT(' ', C.NoExt)
|
||||
END,
|
||||
CASE
|
||||
WHEN NULLIF(LTRIM(RTRIM(C.NoInt)), '') IS NULL
|
||||
THEN ''
|
||||
ELSE CONCAT(' Int. ', C.NoInt)
|
||||
END
|
||||
) AS Direccion,
|
||||
C.Colonia,
|
||||
CONCAT(C.Ciudad, ', ', C.Estado) AS CiudadEstado,
|
||||
C.CP,
|
||||
C.Telefono,
|
||||
C.Mail,
|
||||
S.Folio AS FolioSolicitud,
|
||||
E.Etapa,
|
||||
TT.TipoTramite,
|
||||
P.Nombre AS NombrePago,
|
||||
N'Remisión' AS TipoDocumento,
|
||||
ISNULL(V.Serie, 'TRA') AS Serie,
|
||||
ISNULL(
|
||||
V.Folio,
|
||||
ISNULL(
|
||||
(
|
||||
SELECT MAX(Venta.Folio) + 1
|
||||
FROM dbo.Ventas AS Venta
|
||||
WHERE Venta.TipoDocto = 'Rem'
|
||||
AND Venta.Serie = 'TRA'
|
||||
AND Venta.CveSubProyecto = @CveSubProyecto
|
||||
),
|
||||
1
|
||||
)
|
||||
) AS Folio,
|
||||
ISNULL(V.Fecha, GETDATE()) AS Fecha,
|
||||
ISNULL(V.CveMetodoPago33, ISNULL(V.CveMetodoPago, 2))
|
||||
AS CveMetodoPago,
|
||||
ISNULL(V.CveFormaPago33, ISNULL(V.FormaPago, 99))
|
||||
AS CveFormaPago,
|
||||
V.FechaVencimiento2 AS FechaVencimiento
|
||||
FROM dbo.Tra_Solicitudes AS S
|
||||
INNER JOIN dbo.Fraccionamientos AS F
|
||||
ON F.CveFraccionamiento = S.CveFraccionamiento
|
||||
INNER JOIN dbo.FraccionamientosEtapas AS E
|
||||
ON E.CveFraccionamientoEtapa = S.CveFraccionamientoEtapa
|
||||
INNER JOIN dbo.Tra_TiposTramite AS TT
|
||||
ON TT.CveTipoTramite = S.CveTipoTramite
|
||||
INNER JOIN dbo.Tra_Pagos AS P
|
||||
ON P.CveTramitePago = @CveTramitePago
|
||||
AND P.CveTipoTramite = S.CveTipoTramite
|
||||
INNER JOIN dbo.Clientes AS C
|
||||
ON C.CveCliente = F.CveCliente
|
||||
LEFT JOIN dbo.Tra_SolicitudesPagos AS SP
|
||||
ON SP.CveSolicitud = S.CveSolicitud
|
||||
AND SP.CveTramitePago = P.CveTramitePago
|
||||
LEFT JOIN dbo.Ventas AS V
|
||||
ON V.CveVenta = SP.CveVenta
|
||||
OUTER APPLY
|
||||
(
|
||||
SELECT TOP (1)
|
||||
Pago.CvePago,
|
||||
Pago.Autorizado,
|
||||
Pago.Referencia
|
||||
FROM dbo.Vta_Pagos AS Pago
|
||||
WHERE Pago.CveVenta = V.CveVenta
|
||||
AND Pago.CveSolicitud = S.CveSolicitud
|
||||
AND Pago.CveTramitePago = P.CveTramitePago
|
||||
AND Pago.EsActivo = 1
|
||||
ORDER BY Pago.CvePago DESC
|
||||
) AS VP
|
||||
OUTER APPLY
|
||||
(
|
||||
SELECT TOP (1)
|
||||
D.CveCfdiDocumento,
|
||||
D.Estado,
|
||||
T.Uuid
|
||||
FROM dbo.Fac_CfdiDocumentos AS D
|
||||
LEFT JOIN dbo.Fac_CfdiTimbrados AS T
|
||||
ON T.CveCfdiTimbrado = D.CveCfdiTimbradoVigente
|
||||
WHERE D.TipoOrigen = 'VENTA'
|
||||
AND D.CveOrigen = V.CveVenta
|
||||
AND D.Estado IN ('TIMBRADO', 'CANCELADO')
|
||||
ORDER BY D.CveCfdiDocumento DESC
|
||||
) AS Documento
|
||||
WHERE S.CveSolicitud = @CveSolicitud;
|
||||
|
||||
SET @Return = 1;
|
||||
END TRY
|
||||
BEGIN CATCH
|
||||
SELECT
|
||||
@ErrorMostrar = 'Ocurrió un error al consultar la venta del trámite; favor de contactar a Sistemas.',
|
||||
@ErrorTipo = 1,
|
||||
@Return = 0;
|
||||
|
||||
DECLARE @ErrorTecnico nvarchar(2048) =
|
||||
CONCAT(
|
||||
'Número: ', ERROR_NUMBER(),
|
||||
'; Procedimiento: ', COALESCE(ERROR_PROCEDURE(), 'PA_Vta_TramiteContextoGet'),
|
||||
'; Línea: ', ERROR_LINE(),
|
||||
'; Detalle: ', ERROR_MESSAGE());
|
||||
|
||||
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
|
||||
END CATCH;
|
||||
END;
|
||||
GO
|
||||
159
Fraccionamientos_AltaConEtapas.sql
Normal file
159
Fraccionamientos_AltaConEtapas.sql
Normal file
@@ -0,0 +1,159 @@
|
||||
-- Ejecutar en la base de datos de la plataforma.
|
||||
-- Respeta el fideicomiso capturado; hereda la última etapa sólo cuando se omite.
|
||||
-- Actualiza únicamente el procedimiento, sin modificar datos existentes.
|
||||
|
||||
CREATE OR ALTER PROCEDURE [dbo].[PA_Fraccionamientos_EtapaSave]
|
||||
@CveFraccionamientoEtapa int = NULL,
|
||||
@CveFraccionamiento int,
|
||||
@Etapa varchar(150),
|
||||
@Hectareas decimal(18,4) = NULL,
|
||||
@Orden int = 0,
|
||||
@EsActivo bit = 1,
|
||||
@CveUsuarioEjecuta int,
|
||||
@ErrorMostrar varchar(max) OUTPUT,
|
||||
@ErrorTipo int OUTPUT,
|
||||
@Return bit OUTPUT,
|
||||
@Fideicomiso bit = NULL
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON;
|
||||
SELECT @ErrorMostrar = NULL, @ErrorTipo = 0, @Return = 0;
|
||||
|
||||
BEGIN TRY
|
||||
DECLARE @EsSuperUsuario bit = 0;
|
||||
|
||||
SELECT @EsSuperUsuario = CASE
|
||||
WHEN R.NombreRol = 'SuperUsuario' THEN 1
|
||||
ELSE 0
|
||||
END
|
||||
FROM dbo.Sis_Usuarios AS U
|
||||
INNER JOIN dbo.Sis_Roles AS R
|
||||
ON R.CveRol = U.CveRol
|
||||
WHERE U.CveUsuario = @CveUsuarioEjecuta
|
||||
AND U.Activo = 1;
|
||||
|
||||
IF NULLIF(LTRIM(RTRIM(@Etapa)), '') IS NULL
|
||||
BEGIN
|
||||
SET @ErrorMostrar = 'Capture el nombre de la etapa.';
|
||||
SET @ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
IF @Hectareas IS NOT NULL AND @Hectareas < 0
|
||||
BEGIN
|
||||
SET @ErrorMostrar = 'Las hectáreas de la etapa no pueden ser negativas.';
|
||||
SET @ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
IF NOT EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM dbo.Fraccionamientos AS F
|
||||
WHERE F.CveFraccionamiento = @CveFraccionamiento
|
||||
AND
|
||||
(
|
||||
@EsSuperUsuario = 1
|
||||
OR EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM dbo.Sis_UsuariosClientes AS UC
|
||||
WHERE UC.CveUsuario = @CveUsuarioEjecuta
|
||||
AND UC.CveCliente = F.CveCliente
|
||||
AND UC.Activo = 1
|
||||
)
|
||||
)
|
||||
)
|
||||
BEGIN
|
||||
SET @ErrorMostrar = 'El fraccionamiento no existe o no está asignado al usuario.';
|
||||
SET @ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
IF @CveFraccionamientoEtapa IS NOT NULL
|
||||
AND NOT EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM dbo.FraccionamientosEtapas
|
||||
WHERE CveFraccionamientoEtapa = @CveFraccionamientoEtapa
|
||||
AND CveFraccionamiento = @CveFraccionamiento
|
||||
)
|
||||
BEGIN
|
||||
SET @ErrorMostrar = 'La etapa no existe o no pertenece al fraccionamiento.';
|
||||
SET @ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
IF EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM dbo.FraccionamientosEtapas
|
||||
WHERE CveFraccionamiento = @CveFraccionamiento
|
||||
AND Etapa = LTRIM(RTRIM(@Etapa))
|
||||
AND
|
||||
(
|
||||
@CveFraccionamientoEtapa IS NULL
|
||||
OR CveFraccionamientoEtapa <> @CveFraccionamientoEtapa
|
||||
)
|
||||
)
|
||||
BEGIN
|
||||
SET @ErrorMostrar = 'Ya existe una etapa con ese nombre en el fraccionamiento.';
|
||||
SET @ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
IF @CveFraccionamientoEtapa IS NULL
|
||||
BEGIN
|
||||
DECLARE @OrdenNuevo int;
|
||||
|
||||
SELECT @OrdenNuevo = ISNULL(MAX(Orden), 0) + 1
|
||||
FROM dbo.FraccionamientosEtapas WITH (UPDLOCK, HOLDLOCK)
|
||||
WHERE CveFraccionamiento = @CveFraccionamiento;
|
||||
|
||||
IF @Fideicomiso IS NULL
|
||||
BEGIN
|
||||
SET @Fideicomiso = 0;
|
||||
SELECT TOP (1) @Fideicomiso = Fideicomiso
|
||||
FROM dbo.FraccionamientosEtapas WITH (UPDLOCK, HOLDLOCK)
|
||||
WHERE CveFraccionamiento = @CveFraccionamiento
|
||||
ORDER BY CveFraccionamientoEtapa DESC;
|
||||
END;
|
||||
|
||||
INSERT INTO dbo.FraccionamientosEtapas
|
||||
(CveFraccionamiento, Etapa, Hectareas, Orden, EsActivo, CveUsuario, Fideicomiso)
|
||||
VALUES
|
||||
(@CveFraccionamiento, LTRIM(RTRIM(@Etapa)), @Hectareas, @OrdenNuevo, @EsActivo, @CveUsuarioEjecuta, ISNULL(@Fideicomiso, 0));
|
||||
|
||||
SET @CveFraccionamientoEtapa = CONVERT(int, SCOPE_IDENTITY());
|
||||
END
|
||||
ELSE
|
||||
BEGIN
|
||||
UPDATE dbo.FraccionamientosEtapas
|
||||
SET Etapa = LTRIM(RTRIM(@Etapa)),
|
||||
Hectareas = @Hectareas,
|
||||
EsActivo = @EsActivo,
|
||||
Fideicomiso = ISNULL(@Fideicomiso, Fideicomiso),
|
||||
FechaModificacion = GETDATE(),
|
||||
CveUsuario = @CveUsuarioEjecuta
|
||||
WHERE CveFraccionamientoEtapa = @CveFraccionamientoEtapa;
|
||||
END;
|
||||
|
||||
SELECT @CveFraccionamientoEtapa AS CveFraccionamientoEtapa;
|
||||
SET @Return = 1;
|
||||
END TRY
|
||||
BEGIN CATCH
|
||||
SET @ErrorMostrar = 'Ocurrió un error al guardar la etapa; favor de contactar a Sistemas.';
|
||||
SET @ErrorTipo = 1;
|
||||
SET @Return = 0;
|
||||
|
||||
DECLARE @ErrorTecnico nvarchar(2048) = CONCAT(
|
||||
'Número: ', ERROR_NUMBER(),
|
||||
'; Procedimiento: ', COALESCE(ERROR_PROCEDURE(), 'PA_Fraccionamientos_EtapaSave'),
|
||||
'; Línea: ', ERROR_LINE(),
|
||||
'; Detalle: ', ERROR_MESSAGE()
|
||||
);
|
||||
|
||||
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
|
||||
END CATCH;
|
||||
END;
|
||||
GO
|
||||
1328
Fraccionamientos_Catalogo.sql
Normal file
1328
Fraccionamientos_Catalogo.sql
Normal file
File diff suppressed because it is too large
Load Diff
50
Fraccionamientos_Detalle_Avisos_20260902.sql
Normal file
50
Fraccionamientos_Detalle_Avisos_20260902.sql
Normal file
@@ -0,0 +1,50 @@
|
||||
SET NOCOUNT ON;
|
||||
GO
|
||||
|
||||
CREATE OR ALTER PROCEDURE dbo.PA_Fraccionamientos_DetalleAvisosGet
|
||||
@CveFraccionamiento int,
|
||||
@CveUsuarioEjecuta int,
|
||||
@ErrorMostrar varchar(max) OUTPUT,
|
||||
@ErrorTipo int OUTPUT,
|
||||
@Return bit OUTPUT
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON;
|
||||
|
||||
SELECT
|
||||
@ErrorMostrar = NULL,
|
||||
@ErrorTipo = 0,
|
||||
@Return = 0;
|
||||
|
||||
BEGIN TRY
|
||||
DECLARE @Avisos TABLE
|
||||
(
|
||||
TipoAviso varchar(50),
|
||||
Aviso varchar(max)
|
||||
);
|
||||
|
||||
SELECT
|
||||
TipoAviso,
|
||||
Aviso
|
||||
FROM @Avisos;
|
||||
|
||||
SET @Return = 1;
|
||||
END TRY
|
||||
BEGIN CATCH
|
||||
SET @ErrorMostrar = 'Ocurrió un error al consultar los avisos del fraccionamiento; favor de contactar a Sistemas.';
|
||||
SET @ErrorTipo = 1;
|
||||
SET @Return = 0;
|
||||
|
||||
DECLARE @ErrorTecnico nvarchar(2048) = CONCAT(
|
||||
'Número: ', ERROR_NUMBER(),
|
||||
'; Procedimiento: ', COALESCE(
|
||||
ERROR_PROCEDURE(),
|
||||
'PA_Fraccionamientos_DetalleAvisosGet'),
|
||||
'; Línea: ', ERROR_LINE(),
|
||||
'; Detalle: ', ERROR_MESSAGE()
|
||||
);
|
||||
|
||||
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
|
||||
END CATCH;
|
||||
END;
|
||||
GO
|
||||
815
Fraccionamientos_Etapas_TiposVivienda.sql
Normal file
815
Fraccionamientos_Etapas_TiposVivienda.sql
Normal file
@@ -0,0 +1,815 @@
|
||||
-- Migración preparada para revisión. Ejecutar sólo con autorización de instalación.
|
||||
-- La aplicación coordina las transacciones y registra la bitácora.
|
||||
IF COL_LENGTH('dbo.FraccionamientosEtapas', 'Fideicomiso') IS NULL
|
||||
BEGIN
|
||||
ALTER TABLE dbo.FraccionamientosEtapas
|
||||
ADD Fideicomiso bit NOT NULL CONSTRAINT DF_Etapas_Fideicomiso DEFAULT (0);
|
||||
END;
|
||||
GO
|
||||
|
||||
IF OBJECT_ID('dbo.FraccionamientosTiposVivienda', 'U') IS NULL
|
||||
BEGIN
|
||||
CREATE TABLE dbo.FraccionamientosTiposVivienda
|
||||
(
|
||||
CveTipoVivienda int IDENTITY(1,1) NOT NULL CONSTRAINT PK_FraccionamientosTiposVivienda PRIMARY KEY,
|
||||
TipoVivienda varchar(100) COLLATE Modern_Spanish_CS_AS NOT NULL,
|
||||
CONSTRAINT UQ_FraccionamientosTiposVivienda UNIQUE (TipoVivienda)
|
||||
);
|
||||
END;
|
||||
GO
|
||||
|
||||
INSERT INTO dbo.FraccionamientosTiposVivienda (TipoVivienda)
|
||||
SELECT T.TipoVivienda
|
||||
FROM (VALUES ('Económica'), ('Interés social'), ('Medio Económica'), ('Residencial')) AS T(TipoVivienda)
|
||||
WHERE NOT EXISTS
|
||||
(
|
||||
SELECT 1 FROM dbo.FraccionamientosTiposVivienda AS V
|
||||
WHERE V.TipoVivienda = T.TipoVivienda COLLATE Modern_Spanish_CS_AS
|
||||
);
|
||||
GO
|
||||
|
||||
IF OBJECT_ID('dbo.FraccionamientosEtapasTiposVivienda', 'U') IS NULL
|
||||
BEGIN
|
||||
CREATE TABLE dbo.FraccionamientosEtapasTiposVivienda
|
||||
(
|
||||
CveEtapaTipoVivienda int IDENTITY(1,1) NOT NULL CONSTRAINT PK_EtapasTiposVivienda PRIMARY KEY,
|
||||
CveFraccionamientoEtapa int NOT NULL,
|
||||
CveTipoVivienda int NOT NULL,
|
||||
Cantidad int NOT NULL,
|
||||
CONSTRAINT CK_EtapasTiposVivienda_Cantidad CHECK (Cantidad > 0),
|
||||
CONSTRAINT UQ_EtapasTiposVivienda UNIQUE (CveFraccionamientoEtapa, CveTipoVivienda),
|
||||
CONSTRAINT FK_EtapasTiposVivienda_Etapa FOREIGN KEY (CveFraccionamientoEtapa)
|
||||
REFERENCES dbo.FraccionamientosEtapas (CveFraccionamientoEtapa),
|
||||
CONSTRAINT FK_EtapasTiposVivienda_Tipo FOREIGN KEY (CveTipoVivienda)
|
||||
REFERENCES dbo.FraccionamientosTiposVivienda (CveTipoVivienda)
|
||||
);
|
||||
END;
|
||||
GO
|
||||
|
||||
IF OBJECT_ID('dbo.FraccionamientosEtapasTiposViviendaLotes', 'U') IS NULL
|
||||
BEGIN
|
||||
CREATE TABLE dbo.FraccionamientosEtapasTiposViviendaLotes
|
||||
(
|
||||
CveEtapaTipoViviendaLote int IDENTITY(1,1) NOT NULL CONSTRAINT PK_EtapasTiposViviendaLotes PRIMARY KEY,
|
||||
CveEtapaTipoVivienda int NOT NULL,
|
||||
CveFraccionamientoLote int NOT NULL,
|
||||
CONSTRAINT UQ_EtapasTiposViviendaLotes UNIQUE (CveFraccionamientoLote),
|
||||
CONSTRAINT FK_EtapasTiposViviendaLotes_Tipo FOREIGN KEY (CveEtapaTipoVivienda)
|
||||
REFERENCES dbo.FraccionamientosEtapasTiposVivienda (CveEtapaTipoVivienda),
|
||||
CONSTRAINT FK_EtapasTiposViviendaLotes_Lote FOREIGN KEY (CveFraccionamientoLote)
|
||||
REFERENCES dbo.FraccionamientosLotes (CveFraccionamientoLote)
|
||||
);
|
||||
END;
|
||||
GO
|
||||
|
||||
CREATE OR ALTER PROCEDURE [dbo].[PA_Fraccionamientos_EtapaGet]
|
||||
@CveFraccionamientoEtapa int,
|
||||
@CveUsuarioEjecuta int,
|
||||
@ErrorMostrar varchar(max) OUTPUT,
|
||||
@ErrorTipo int OUTPUT,
|
||||
@Return bit OUTPUT
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON;
|
||||
|
||||
SELECT
|
||||
@ErrorMostrar = NULL,
|
||||
@ErrorTipo = 0,
|
||||
@Return = 0;
|
||||
|
||||
BEGIN TRY
|
||||
DECLARE @EsSuperUsuario bit = 0;
|
||||
|
||||
SELECT @EsSuperUsuario = CASE
|
||||
WHEN R.NombreRol = 'SuperUsuario' THEN 1
|
||||
ELSE 0
|
||||
END
|
||||
FROM dbo.Sis_Usuarios AS U
|
||||
INNER JOIN dbo.Sis_Roles AS R
|
||||
ON R.CveRol = U.CveRol
|
||||
WHERE U.CveUsuario = @CveUsuarioEjecuta
|
||||
AND U.Activo = 1;
|
||||
|
||||
SELECT
|
||||
E.CveFraccionamientoEtapa,
|
||||
E.CveFraccionamiento,
|
||||
F.CveCliente,
|
||||
E.Etapa,
|
||||
E.Hectareas,
|
||||
E.Orden,
|
||||
E.Avance,
|
||||
E.Fideicomiso,
|
||||
E.EsActivo
|
||||
FROM dbo.FraccionamientosEtapas AS E
|
||||
INNER JOIN dbo.Fraccionamientos AS F
|
||||
ON F.CveFraccionamiento = E.CveFraccionamiento
|
||||
WHERE E.CveFraccionamientoEtapa = @CveFraccionamientoEtapa
|
||||
AND
|
||||
(
|
||||
@EsSuperUsuario = 1
|
||||
OR EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM dbo.Sis_UsuariosClientes AS UC
|
||||
WHERE UC.CveUsuario = @CveUsuarioEjecuta
|
||||
AND UC.CveCliente = F.CveCliente
|
||||
AND UC.Activo = 1
|
||||
)
|
||||
);
|
||||
|
||||
IF @@ROWCOUNT = 0
|
||||
BEGIN
|
||||
SET @ErrorMostrar = 'La etapa no existe o no está asignada al usuario.';
|
||||
SET @ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
SET @Return = 1;
|
||||
END TRY
|
||||
BEGIN CATCH
|
||||
SET @ErrorMostrar = 'Ocurrió un error al consultar la etapa; favor de contactar a Sistemas.';
|
||||
SET @ErrorTipo = 1;
|
||||
SET @Return = 0;
|
||||
|
||||
DECLARE @ErrorTecnico nvarchar(2048) = CONCAT(
|
||||
'Número: ', ERROR_NUMBER(),
|
||||
'; Procedimiento: ', COALESCE(
|
||||
ERROR_PROCEDURE(),
|
||||
'PA_Fraccionamientos_EtapaGet'),
|
||||
'; Línea: ', ERROR_LINE(),
|
||||
'; Detalle: ', ERROR_MESSAGE()
|
||||
);
|
||||
|
||||
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
|
||||
END CATCH;
|
||||
END;
|
||||
GO
|
||||
CREATE OR ALTER PROCEDURE [dbo].[PA_Fraccionamientos_EtapaList]
|
||||
@CveFraccionamiento int,
|
||||
@CveUsuarioEjecuta int,
|
||||
@ErrorMostrar varchar(max) OUTPUT,
|
||||
@ErrorTipo int OUTPUT,
|
||||
@Return bit OUTPUT
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON;
|
||||
SELECT @ErrorMostrar = NULL, @ErrorTipo = 0, @Return = 0;
|
||||
|
||||
BEGIN TRY
|
||||
DECLARE @EsSuperUsuario bit = 0;
|
||||
|
||||
SELECT @EsSuperUsuario = CASE
|
||||
WHEN R.NombreRol = 'SuperUsuario' THEN 1
|
||||
ELSE 0
|
||||
END
|
||||
FROM dbo.Sis_Usuarios AS U
|
||||
INNER JOIN dbo.Sis_Roles AS R
|
||||
ON R.CveRol = U.CveRol
|
||||
WHERE U.CveUsuario = @CveUsuarioEjecuta
|
||||
AND U.Activo = 1;
|
||||
|
||||
IF NOT EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM dbo.Fraccionamientos AS F
|
||||
WHERE F.CveFraccionamiento = @CveFraccionamiento
|
||||
AND
|
||||
(
|
||||
@EsSuperUsuario = 1
|
||||
OR EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM dbo.Sis_UsuariosClientes AS UC
|
||||
WHERE UC.CveUsuario = @CveUsuarioEjecuta
|
||||
AND UC.CveCliente = F.CveCliente
|
||||
AND UC.Activo = 1
|
||||
)
|
||||
)
|
||||
)
|
||||
BEGIN
|
||||
SET @ErrorMostrar = 'El fraccionamiento no existe o no está asignado al usuario.';
|
||||
SET @ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
SELECT
|
||||
E.CveFraccionamientoEtapa,
|
||||
E.CveFraccionamiento,
|
||||
E.Etapa,
|
||||
E.Hectareas,
|
||||
E.Orden,
|
||||
E.Avance,
|
||||
E.Fideicomiso,
|
||||
E.EsActivo
|
||||
FROM dbo.FraccionamientosEtapas AS E
|
||||
WHERE E.CveFraccionamiento = @CveFraccionamiento
|
||||
ORDER BY E.Orden, E.Etapa;
|
||||
|
||||
SET @Return = 1;
|
||||
END TRY
|
||||
BEGIN CATCH
|
||||
SET @ErrorMostrar = 'Ocurrió un error al consultar las etapas; favor de contactar a Sistemas.';
|
||||
SET @ErrorTipo = 1;
|
||||
SET @Return = 0;
|
||||
|
||||
DECLARE @ErrorTecnico nvarchar(2048) = CONCAT(
|
||||
'Número: ', ERROR_NUMBER(),
|
||||
'; Procedimiento: ', COALESCE(
|
||||
ERROR_PROCEDURE(),
|
||||
'PA_Fraccionamientos_EtapaList'),
|
||||
'; Línea: ', ERROR_LINE(),
|
||||
'; Detalle: ', ERROR_MESSAGE()
|
||||
);
|
||||
|
||||
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
|
||||
END CATCH;
|
||||
END;
|
||||
GO
|
||||
CREATE OR ALTER PROCEDURE [dbo].[PA_Fraccionamientos_EtapaSave]
|
||||
@CveFraccionamientoEtapa int = NULL,
|
||||
@CveFraccionamiento int,
|
||||
@Etapa varchar(150),
|
||||
@Hectareas decimal(18,4) = NULL,
|
||||
@Orden int = 0,
|
||||
@EsActivo bit = 1,
|
||||
@CveUsuarioEjecuta int,
|
||||
@ErrorMostrar varchar(max) OUTPUT,
|
||||
@ErrorTipo int OUTPUT,
|
||||
@Return bit OUTPUT,
|
||||
@Fideicomiso bit = NULL
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON;
|
||||
SELECT @ErrorMostrar = NULL, @ErrorTipo = 0, @Return = 0;
|
||||
|
||||
BEGIN TRY
|
||||
DECLARE @EsSuperUsuario bit = 0;
|
||||
|
||||
SELECT @EsSuperUsuario = CASE
|
||||
WHEN R.NombreRol = 'SuperUsuario' THEN 1
|
||||
ELSE 0
|
||||
END
|
||||
FROM dbo.Sis_Usuarios AS U
|
||||
INNER JOIN dbo.Sis_Roles AS R
|
||||
ON R.CveRol = U.CveRol
|
||||
WHERE U.CveUsuario = @CveUsuarioEjecuta
|
||||
AND U.Activo = 1;
|
||||
|
||||
IF NULLIF(LTRIM(RTRIM(@Etapa)), '') IS NULL
|
||||
BEGIN
|
||||
SET @ErrorMostrar = 'Capture el nombre de la etapa.';
|
||||
SET @ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
IF @Hectareas IS NOT NULL AND @Hectareas < 0
|
||||
BEGIN
|
||||
SET @ErrorMostrar = 'Las hectáreas de la etapa no pueden ser negativas.';
|
||||
SET @ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
IF NOT EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM dbo.Fraccionamientos AS F
|
||||
WHERE F.CveFraccionamiento = @CveFraccionamiento
|
||||
AND
|
||||
(
|
||||
@EsSuperUsuario = 1
|
||||
OR EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM dbo.Sis_UsuariosClientes AS UC
|
||||
WHERE UC.CveUsuario = @CveUsuarioEjecuta
|
||||
AND UC.CveCliente = F.CveCliente
|
||||
AND UC.Activo = 1
|
||||
)
|
||||
)
|
||||
)
|
||||
BEGIN
|
||||
SET @ErrorMostrar = 'El fraccionamiento no existe o no está asignado al usuario.';
|
||||
SET @ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
IF @CveFraccionamientoEtapa IS NOT NULL
|
||||
AND NOT EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM dbo.FraccionamientosEtapas
|
||||
WHERE CveFraccionamientoEtapa = @CveFraccionamientoEtapa
|
||||
AND CveFraccionamiento = @CveFraccionamiento
|
||||
)
|
||||
BEGIN
|
||||
SET @ErrorMostrar = 'La etapa no existe o no pertenece al fraccionamiento.';
|
||||
SET @ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
IF EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM dbo.FraccionamientosEtapas
|
||||
WHERE CveFraccionamiento = @CveFraccionamiento
|
||||
AND Etapa = LTRIM(RTRIM(@Etapa))
|
||||
AND
|
||||
(
|
||||
@CveFraccionamientoEtapa IS NULL
|
||||
OR CveFraccionamientoEtapa <> @CveFraccionamientoEtapa
|
||||
)
|
||||
)
|
||||
BEGIN
|
||||
SET @ErrorMostrar = 'Ya existe una etapa con ese nombre en el fraccionamiento.';
|
||||
SET @ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
IF @CveFraccionamientoEtapa IS NULL
|
||||
BEGIN
|
||||
DECLARE @OrdenNuevo int;
|
||||
|
||||
SELECT @OrdenNuevo = ISNULL(MAX(Orden), 0) + 1
|
||||
FROM dbo.FraccionamientosEtapas WITH (UPDLOCK, HOLDLOCK)
|
||||
WHERE CveFraccionamiento = @CveFraccionamiento;
|
||||
|
||||
IF @Fideicomiso IS NULL
|
||||
BEGIN
|
||||
SET @Fideicomiso = 0;
|
||||
SELECT TOP (1) @Fideicomiso = Fideicomiso
|
||||
FROM dbo.FraccionamientosEtapas WITH (UPDLOCK, HOLDLOCK)
|
||||
WHERE CveFraccionamiento = @CveFraccionamiento
|
||||
ORDER BY CveFraccionamientoEtapa DESC;
|
||||
END;
|
||||
|
||||
INSERT INTO dbo.FraccionamientosEtapas
|
||||
(CveFraccionamiento, Etapa, Hectareas, Orden, EsActivo, CveUsuario, Fideicomiso)
|
||||
VALUES
|
||||
(@CveFraccionamiento, LTRIM(RTRIM(@Etapa)), @Hectareas, @OrdenNuevo, @EsActivo, @CveUsuarioEjecuta, ISNULL(@Fideicomiso, 0));
|
||||
|
||||
SET @CveFraccionamientoEtapa = CONVERT(int, SCOPE_IDENTITY());
|
||||
END
|
||||
ELSE
|
||||
BEGIN
|
||||
UPDATE dbo.FraccionamientosEtapas
|
||||
SET Etapa = LTRIM(RTRIM(@Etapa)),
|
||||
Hectareas = @Hectareas,
|
||||
EsActivo = @EsActivo,
|
||||
Fideicomiso = ISNULL(@Fideicomiso, Fideicomiso),
|
||||
FechaModificacion = GETDATE(),
|
||||
CveUsuario = @CveUsuarioEjecuta
|
||||
WHERE CveFraccionamientoEtapa = @CveFraccionamientoEtapa;
|
||||
END;
|
||||
|
||||
SELECT @CveFraccionamientoEtapa AS CveFraccionamientoEtapa;
|
||||
SET @Return = 1;
|
||||
END TRY
|
||||
BEGIN CATCH
|
||||
SET @ErrorMostrar = 'Ocurrió un error al guardar la etapa; favor de contactar a Sistemas.';
|
||||
SET @ErrorTipo = 1;
|
||||
SET @Return = 0;
|
||||
|
||||
DECLARE @ErrorTecnico nvarchar(2048) = CONCAT(
|
||||
'Número: ', ERROR_NUMBER(),
|
||||
'; Procedimiento: ', COALESCE(ERROR_PROCEDURE(), 'PA_Fraccionamientos_EtapaSave'),
|
||||
'; Línea: ', ERROR_LINE(),
|
||||
'; Detalle: ', ERROR_MESSAGE()
|
||||
);
|
||||
|
||||
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
|
||||
END CATCH;
|
||||
END;
|
||||
GO
|
||||
|
||||
CREATE OR ALTER PROCEDURE dbo.PA_Fraccionamientos_TipoViviendaList
|
||||
@CveUsuarioEjecuta int,
|
||||
@ErrorMostrar varchar(max) OUTPUT,
|
||||
@ErrorTipo int OUTPUT,
|
||||
@Return bit OUTPUT
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON;
|
||||
SELECT
|
||||
@ErrorMostrar = NULL,
|
||||
@ErrorTipo = 0,
|
||||
@Return = 0;
|
||||
|
||||
BEGIN TRY
|
||||
SELECT CveTipoVivienda, TipoVivienda
|
||||
FROM dbo.FraccionamientosTiposVivienda
|
||||
ORDER BY CveTipoVivienda;
|
||||
SET @Return = 1;
|
||||
END TRY
|
||||
BEGIN CATCH
|
||||
SET @ErrorMostrar = 'No fue posible procesar los tipos de vivienda; contacte a Sistemas.';
|
||||
SET @ErrorTipo = 1;
|
||||
SET @Return = 0;
|
||||
DECLARE @ErrorTecnico nvarchar(2048) = CONCAT(
|
||||
'Número: ', ERROR_NUMBER(),
|
||||
'; Procedimiento: ', ERROR_PROCEDURE(),
|
||||
'; Línea: ', ERROR_LINE(),
|
||||
'; Detalle: ', ERROR_MESSAGE());
|
||||
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
|
||||
END CATCH;
|
||||
END;
|
||||
GO
|
||||
|
||||
CREATE OR ALTER PROCEDURE dbo.PA_Fraccionamientos_EtapaTipoViviendaList
|
||||
@CveFraccionamientoEtapa int,
|
||||
@CveUsuarioEjecuta int,
|
||||
@ErrorMostrar varchar(max) OUTPUT,
|
||||
@ErrorTipo int OUTPUT,
|
||||
@Return bit OUTPUT
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON;
|
||||
SELECT
|
||||
@ErrorMostrar = NULL,
|
||||
@ErrorTipo = 0,
|
||||
@Return = 0;
|
||||
|
||||
BEGIN TRY
|
||||
SELECT
|
||||
T.CveEtapaTipoVivienda,
|
||||
T.CveFraccionamientoEtapa,
|
||||
T.CveTipoVivienda,
|
||||
V.TipoVivienda,
|
||||
T.Cantidad,
|
||||
(SELECT COUNT(*) FROM dbo.FraccionamientosEtapasTiposViviendaLotes AS L
|
||||
WHERE L.CveEtapaTipoVivienda = T.CveEtapaTipoVivienda) AS LotesVinculados
|
||||
FROM dbo.FraccionamientosEtapasTiposVivienda AS T
|
||||
INNER JOIN dbo.FraccionamientosTiposVivienda AS V ON V.CveTipoVivienda = T.CveTipoVivienda
|
||||
WHERE T.CveFraccionamientoEtapa = @CveFraccionamientoEtapa
|
||||
ORDER BY V.CveTipoVivienda;
|
||||
SET @Return = 1;
|
||||
END TRY
|
||||
BEGIN CATCH
|
||||
SET @ErrorMostrar = 'No fue posible procesar los tipos de vivienda; contacte a Sistemas.';
|
||||
SET @ErrorTipo = 1;
|
||||
SET @Return = 0;
|
||||
DECLARE @ErrorTecnico nvarchar(2048) = CONCAT(
|
||||
'Número: ', ERROR_NUMBER(),
|
||||
'; Procedimiento: ', ERROR_PROCEDURE(),
|
||||
'; Línea: ', ERROR_LINE(),
|
||||
'; Detalle: ', ERROR_MESSAGE());
|
||||
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
|
||||
END CATCH;
|
||||
END;
|
||||
GO
|
||||
|
||||
CREATE OR ALTER PROCEDURE dbo.PA_Fraccionamientos_EtapaTipoViviendaSave
|
||||
@CveFraccionamientoEtapa int,
|
||||
@CveTipoVivienda int,
|
||||
@Cantidad int,
|
||||
@CveUsuarioEjecuta int,
|
||||
@ErrorMostrar varchar(max) OUTPUT,
|
||||
@ErrorTipo int OUTPUT,
|
||||
@Return bit OUTPUT
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON;
|
||||
SELECT
|
||||
@ErrorMostrar = NULL,
|
||||
@ErrorTipo = 0,
|
||||
@Return = 0;
|
||||
|
||||
BEGIN TRY
|
||||
IF @Cantidad <= 0
|
||||
BEGIN
|
||||
SET @ErrorMostrar = 'Capture una cantidad mayor que cero.';
|
||||
SET @ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
DECLARE @CveEtapaTipoVivienda int;
|
||||
SELECT @CveEtapaTipoVivienda = CveEtapaTipoVivienda
|
||||
FROM dbo.FraccionamientosEtapasTiposVivienda WITH (UPDLOCK, HOLDLOCK)
|
||||
WHERE CveFraccionamientoEtapa = @CveFraccionamientoEtapa
|
||||
AND CveTipoVivienda = @CveTipoVivienda;
|
||||
|
||||
IF @Cantidad < (SELECT COUNT(*) FROM dbo.FraccionamientosEtapasTiposViviendaLotes
|
||||
WHERE CveEtapaTipoVivienda = @CveEtapaTipoVivienda)
|
||||
BEGIN
|
||||
SET @ErrorMostrar = 'La cantidad no puede ser menor que los lotes vinculados.';
|
||||
SET @ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
IF @CveEtapaTipoVivienda IS NULL
|
||||
BEGIN
|
||||
INSERT INTO dbo.FraccionamientosEtapasTiposVivienda
|
||||
(CveFraccionamientoEtapa, CveTipoVivienda, Cantidad)
|
||||
VALUES
|
||||
(@CveFraccionamientoEtapa, @CveTipoVivienda, @Cantidad);
|
||||
SET @CveEtapaTipoVivienda = CONVERT(int, SCOPE_IDENTITY());
|
||||
END
|
||||
ELSE
|
||||
BEGIN
|
||||
UPDATE dbo.FraccionamientosEtapasTiposVivienda
|
||||
SET Cantidad = @Cantidad
|
||||
WHERE CveEtapaTipoVivienda = @CveEtapaTipoVivienda;
|
||||
END;
|
||||
|
||||
SELECT @CveEtapaTipoVivienda AS CveEtapaTipoVivienda;
|
||||
SET @Return = 1;
|
||||
END TRY
|
||||
BEGIN CATCH
|
||||
SET @ErrorMostrar = 'No fue posible procesar los tipos de vivienda; contacte a Sistemas.';
|
||||
SET @ErrorTipo = 1;
|
||||
SET @Return = 0;
|
||||
DECLARE @ErrorTecnico nvarchar(2048) = CONCAT(
|
||||
'Número: ', ERROR_NUMBER(),
|
||||
'; Procedimiento: ', ERROR_PROCEDURE(),
|
||||
'; Línea: ', ERROR_LINE(),
|
||||
'; Detalle: ', ERROR_MESSAGE());
|
||||
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
|
||||
END CATCH;
|
||||
END;
|
||||
GO
|
||||
|
||||
CREATE OR ALTER PROCEDURE dbo.PA_Fraccionamientos_EtapaTipoViviendaDelete
|
||||
@CveFraccionamientoEtapa int,
|
||||
@CveEtapaTipoVivienda int,
|
||||
@CveUsuarioEjecuta int,
|
||||
@ErrorMostrar varchar(max) OUTPUT,
|
||||
@ErrorTipo int OUTPUT,
|
||||
@Return bit OUTPUT
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON;
|
||||
SELECT
|
||||
@ErrorMostrar = NULL,
|
||||
@ErrorTipo = 0,
|
||||
@Return = 0;
|
||||
|
||||
BEGIN TRY
|
||||
IF EXISTS
|
||||
(
|
||||
SELECT 1 FROM dbo.FraccionamientosEtapasTiposViviendaLotes
|
||||
WHERE CveEtapaTipoVivienda = @CveEtapaTipoVivienda
|
||||
)
|
||||
BEGIN
|
||||
SET @ErrorMostrar = 'Retire los vínculos con lotes antes de eliminar este registro.';
|
||||
SET @ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
DELETE FROM dbo.FraccionamientosEtapasTiposVivienda
|
||||
WHERE CveEtapaTipoVivienda = @CveEtapaTipoVivienda
|
||||
AND CveFraccionamientoEtapa = @CveFraccionamientoEtapa;
|
||||
SET @Return = 1;
|
||||
END TRY
|
||||
BEGIN CATCH
|
||||
SET @ErrorMostrar = 'No fue posible procesar los tipos de vivienda; contacte a Sistemas.';
|
||||
SET @ErrorTipo = 1;
|
||||
SET @Return = 0;
|
||||
DECLARE @ErrorTecnico nvarchar(2048) = CONCAT(
|
||||
'Número: ', ERROR_NUMBER(),
|
||||
'; Procedimiento: ', ERROR_PROCEDURE(),
|
||||
'; Línea: ', ERROR_LINE(),
|
||||
'; Detalle: ', ERROR_MESSAGE());
|
||||
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
|
||||
END CATCH;
|
||||
END;
|
||||
GO
|
||||
|
||||
CREATE OR ALTER PROCEDURE dbo.PA_Fraccionamientos_EtapaTipoViviendaLoteList
|
||||
@CveFraccionamientoEtapa int,
|
||||
@CveUsuarioEjecuta int,
|
||||
@ErrorMostrar varchar(max) OUTPUT,
|
||||
@ErrorTipo int OUTPUT,
|
||||
@Return bit OUTPUT
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON;
|
||||
SELECT
|
||||
@ErrorMostrar = NULL,
|
||||
@ErrorTipo = 0,
|
||||
@Return = 0;
|
||||
|
||||
BEGIN TRY
|
||||
SELECT
|
||||
V.CveEtapaTipoViviendaLote,
|
||||
V.CveEtapaTipoVivienda,
|
||||
T.CveFraccionamientoEtapa,
|
||||
V.CveFraccionamientoLote,
|
||||
L.Numero AS Lote,
|
||||
C.TipoVivienda
|
||||
FROM dbo.FraccionamientosEtapasTiposViviendaLotes AS V
|
||||
INNER JOIN dbo.FraccionamientosEtapasTiposVivienda AS T ON T.CveEtapaTipoVivienda = V.CveEtapaTipoVivienda
|
||||
INNER JOIN dbo.FraccionamientosTiposVivienda AS C ON C.CveTipoVivienda = T.CveTipoVivienda
|
||||
INNER JOIN dbo.FraccionamientosLotes AS L ON L.CveFraccionamientoLote = V.CveFraccionamientoLote
|
||||
WHERE T.CveFraccionamientoEtapa = @CveFraccionamientoEtapa
|
||||
ORDER BY C.CveTipoVivienda, L.Numero;
|
||||
SET @Return = 1;
|
||||
END TRY
|
||||
BEGIN CATCH
|
||||
SET @ErrorMostrar = 'No fue posible procesar los tipos de vivienda; contacte a Sistemas.';
|
||||
SET @ErrorTipo = 1;
|
||||
SET @Return = 0;
|
||||
DECLARE @ErrorTecnico nvarchar(2048) = CONCAT(
|
||||
'Número: ', ERROR_NUMBER(),
|
||||
'; Procedimiento: ', ERROR_PROCEDURE(),
|
||||
'; Línea: ', ERROR_LINE(),
|
||||
'; Detalle: ', ERROR_MESSAGE());
|
||||
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
|
||||
END CATCH;
|
||||
END;
|
||||
GO
|
||||
|
||||
CREATE OR ALTER PROCEDURE dbo.PA_Fraccionamientos_EtapaTipoViviendaLoteSave
|
||||
@CveFraccionamientoEtapa int,
|
||||
@CveEtapaTipoVivienda int,
|
||||
@CveFraccionamientoLote int,
|
||||
@CveUsuarioEjecuta int,
|
||||
@ErrorMostrar varchar(max) OUTPUT,
|
||||
@ErrorTipo int OUTPUT,
|
||||
@Return bit OUTPUT
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON;
|
||||
SELECT
|
||||
@ErrorMostrar = NULL,
|
||||
@ErrorTipo = 0,
|
||||
@Return = 0;
|
||||
|
||||
BEGIN TRY
|
||||
DECLARE @Cantidad int;
|
||||
SELECT @Cantidad = Cantidad
|
||||
FROM dbo.FraccionamientosEtapasTiposVivienda WITH (UPDLOCK, HOLDLOCK)
|
||||
WHERE CveEtapaTipoVivienda = @CveEtapaTipoVivienda
|
||||
AND CveFraccionamientoEtapa = @CveFraccionamientoEtapa;
|
||||
|
||||
IF @Cantidad IS NULL OR NOT EXISTS
|
||||
(
|
||||
SELECT 1 FROM dbo.FraccionamientosLotes
|
||||
WHERE CveFraccionamientoLote = @CveFraccionamientoLote
|
||||
AND CveFraccionamientoEtapa = @CveFraccionamientoEtapa
|
||||
AND EsActivo = 1
|
||||
)
|
||||
BEGIN
|
||||
SET @ErrorMostrar = 'Seleccione un tipo registrado y un lote activo de la misma etapa.';
|
||||
SET @ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
IF EXISTS
|
||||
(
|
||||
SELECT 1 FROM dbo.FraccionamientosEtapasTiposViviendaLotes WITH (UPDLOCK, HOLDLOCK)
|
||||
WHERE CveFraccionamientoLote = @CveFraccionamientoLote
|
||||
)
|
||||
BEGIN
|
||||
SET @ErrorMostrar = 'El lote ya tiene una clasificación vinculada.';
|
||||
SET @ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
IF @Cantidad <= (SELECT COUNT(*) FROM dbo.FraccionamientosEtapasTiposViviendaLotes
|
||||
WHERE CveEtapaTipoVivienda = @CveEtapaTipoVivienda)
|
||||
BEGIN
|
||||
SET @ErrorMostrar = 'Ya se vinculó la cantidad capturada para este tipo.';
|
||||
SET @ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
INSERT INTO dbo.FraccionamientosEtapasTiposViviendaLotes
|
||||
(CveEtapaTipoVivienda, CveFraccionamientoLote)
|
||||
VALUES
|
||||
(@CveEtapaTipoVivienda, @CveFraccionamientoLote);
|
||||
SELECT CONVERT(int, SCOPE_IDENTITY()) AS CveEtapaTipoViviendaLote;
|
||||
SET @Return = 1;
|
||||
END TRY
|
||||
BEGIN CATCH
|
||||
SET @ErrorMostrar = 'No fue posible procesar los tipos de vivienda; contacte a Sistemas.';
|
||||
SET @ErrorTipo = 1;
|
||||
SET @Return = 0;
|
||||
DECLARE @ErrorTecnico nvarchar(2048) = CONCAT(
|
||||
'Número: ', ERROR_NUMBER(),
|
||||
'; Procedimiento: ', ERROR_PROCEDURE(),
|
||||
'; Línea: ', ERROR_LINE(),
|
||||
'; Detalle: ', ERROR_MESSAGE());
|
||||
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
|
||||
END CATCH;
|
||||
END;
|
||||
GO
|
||||
|
||||
CREATE OR ALTER PROCEDURE dbo.PA_Fraccionamientos_EtapaTipoViviendaLoteDelete
|
||||
@CveFraccionamientoEtapa int,
|
||||
@CveEtapaTipoViviendaLote int,
|
||||
@CveUsuarioEjecuta int,
|
||||
@ErrorMostrar varchar(max) OUTPUT,
|
||||
@ErrorTipo int OUTPUT,
|
||||
@Return bit OUTPUT
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON;
|
||||
SELECT
|
||||
@ErrorMostrar = NULL,
|
||||
@ErrorTipo = 0,
|
||||
@Return = 0;
|
||||
|
||||
BEGIN TRY
|
||||
DELETE V
|
||||
FROM dbo.FraccionamientosEtapasTiposViviendaLotes AS V
|
||||
INNER JOIN dbo.FraccionamientosEtapasTiposVivienda AS T ON T.CveEtapaTipoVivienda = V.CveEtapaTipoVivienda
|
||||
WHERE V.CveEtapaTipoViviendaLote = @CveEtapaTipoViviendaLote
|
||||
AND T.CveFraccionamientoEtapa = @CveFraccionamientoEtapa;
|
||||
SET @Return = 1;
|
||||
END TRY
|
||||
BEGIN CATCH
|
||||
SET @ErrorMostrar = 'No fue posible procesar los tipos de vivienda; contacte a Sistemas.';
|
||||
SET @ErrorTipo = 1;
|
||||
SET @Return = 0;
|
||||
DECLARE @ErrorTecnico nvarchar(2048) = CONCAT(
|
||||
'Número: ', ERROR_NUMBER(),
|
||||
'; Procedimiento: ', ERROR_PROCEDURE(),
|
||||
'; Línea: ', ERROR_LINE(),
|
||||
'; Detalle: ', ERROR_MESSAGE());
|
||||
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
|
||||
END CATCH;
|
||||
END;
|
||||
GO
|
||||
|
||||
-- Catálogo de campos auditables para registros y vínculos nuevos.
|
||||
DECLARE @Tablas TABLE
|
||||
(
|
||||
Nombre varchar(128) COLLATE Modern_Spanish_CS_AS,
|
||||
Llave varchar(128) COLLATE Modern_Spanish_CS_AS
|
||||
);
|
||||
INSERT INTO @Tablas (Nombre, Llave)
|
||||
VALUES
|
||||
('FraccionamientosEtapasTiposVivienda', 'CveEtapaTipoVivienda'),
|
||||
('FraccionamientosEtapasTiposViviendaLotes', 'CveEtapaTipoViviendaLote');
|
||||
|
||||
INSERT INTO dbo.Bit_Tablas
|
||||
(NombreTablaSQL, NombreMostrar, NombreCampoLlaveSQL, Activo, FechaAlta)
|
||||
SELECT T.Nombre, T.Nombre, T.Llave, 1, GETDATE()
|
||||
FROM @Tablas AS T
|
||||
WHERE NOT EXISTS (SELECT 1 FROM dbo.Bit_Tablas AS B WHERE B.NombreTablaSQL = T.Nombre);
|
||||
|
||||
INSERT INTO dbo.Bit_Campos
|
||||
(CveTabla, NombreCampoSQL, NombreMostrar, TipoDatoSQL, MostrarEnBitacora, Activo, FechaAlta)
|
||||
SELECT B.CveTabla, C.name, C.name, TYPE_NAME(C.user_type_id), 1, 1, GETDATE()
|
||||
FROM dbo.Bit_Tablas AS B
|
||||
INNER JOIN sys.columns AS C ON C.object_id = OBJECT_ID('dbo.' + B.NombreTablaSQL)
|
||||
WHERE
|
||||
(B.NombreTablaSQL IN ('FraccionamientosEtapasTiposVivienda', 'FraccionamientosEtapasTiposViviendaLotes')
|
||||
OR (B.NombreTablaSQL = 'FraccionamientosEtapas' AND C.name = 'Fideicomiso'))
|
||||
AND NOT EXISTS
|
||||
(
|
||||
SELECT 1 FROM dbo.Bit_Campos AS E
|
||||
WHERE E.CveTabla = B.CveTabla AND E.NombreCampoSQL = C.name
|
||||
);
|
||||
|
||||
DECLARE @Acciones TABLE (Codigo varchar(150) COLLATE Modern_Spanish_CI_AS);
|
||||
INSERT INTO @Acciones (Codigo)
|
||||
VALUES
|
||||
('GuardarTipoViviendaEtapa'),
|
||||
('EliminarTipoViviendaEtapa'),
|
||||
('VincularLoteTipoViviendaEtapa'),
|
||||
('DesvincularLoteTipoViviendaEtapa');
|
||||
|
||||
INSERT INTO dbo.Bit_DefinicionesAccion
|
||||
(CodigoAccion, NombreAccion, DescripcionAccion, CveTabla, CveTipoMovimiento, Activo)
|
||||
SELECT Codigo, Codigo, Codigo, NULL, NULL, 1
|
||||
FROM @Acciones AS A
|
||||
WHERE NOT EXISTS (SELECT 1 FROM dbo.Bit_DefinicionesAccion AS D WHERE D.CodigoAccion = A.Codigo);
|
||||
GO
|
||||
|
||||
-- Detalle de etapa: hereda los permisos del detalle de desarrollador.
|
||||
DECLARE @CvePadre int;
|
||||
DECLARE @CvePlataforma int;
|
||||
SELECT @CvePadre = CveModulo, @CvePlataforma = CvePlataforma
|
||||
FROM dbo.Sis_Modulos
|
||||
WHERE Url = '~/Pages/Desarrolladores/DesarrolladorDetalle.aspx';
|
||||
|
||||
IF @CvePadre IS NULL
|
||||
BEGIN
|
||||
THROW 51001, 'No existe el módulo Detalle de desarrollador.', 1;
|
||||
END;
|
||||
|
||||
IF NOT EXISTS (SELECT 1 FROM dbo.Sis_Modulos WHERE Url = '~/Pages/Fraccionamientos/EtapaDetalle.aspx')
|
||||
BEGIN
|
||||
INSERT INTO dbo.Sis_Modulos
|
||||
(CveModuloPadre, CvePlataforma, NombreModulo, Url,
|
||||
ClaseCssIcono, OrdenVisualizacion, Visible, Activo, FechaCreacion)
|
||||
VALUES
|
||||
(@CvePadre, @CvePlataforma, 'Detalle de etapa', '~/Pages/Fraccionamientos/EtapaDetalle.aspx',
|
||||
'fa fa-building', 1, 0, 1, GETDATE());
|
||||
END;
|
||||
|
||||
INSERT INTO dbo.Sis_RolesModulos
|
||||
(CveRol, CveModulo, PuedeVer, PuedeCrear, PuedeModificar,
|
||||
PuedeEliminar, PuedeImprimir, PuedeExportar, FechaCreacion)
|
||||
SELECT
|
||||
R.CveRol, D.CveModulo, R.PuedeVer, R.PuedeCrear, R.PuedeModificar,
|
||||
R.PuedeEliminar, R.PuedeImprimir, R.PuedeExportar, GETDATE()
|
||||
FROM dbo.Sis_RolesModulos AS R
|
||||
INNER JOIN dbo.Sis_Modulos AS D ON D.Url = '~/Pages/Fraccionamientos/EtapaDetalle.aspx'
|
||||
WHERE R.CveModulo = @CvePadre
|
||||
AND NOT EXISTS
|
||||
(
|
||||
SELECT 1 FROM dbo.Sis_RolesModulos AS E
|
||||
WHERE E.CveRol = R.CveRol AND E.CveModulo = D.CveModulo
|
||||
);
|
||||
GO
|
||||
136
Fraccionamientos_ListadoAgrupado.sql
Normal file
136
Fraccionamientos_ListadoAgrupado.sql
Normal file
@@ -0,0 +1,136 @@
|
||||
-- Listado conjunto de fraccionamientos activos y todas sus etapas por desarrollador.
|
||||
-- Conserva el alcance por usuario del listado de fraccionamientos existente.
|
||||
CREATE OR ALTER PROCEDURE dbo.PA_Fraccionamientos_DesarrolladorEtapasList
|
||||
@CveCliente int,
|
||||
@CveUsuarioEjecuta int,
|
||||
@ErrorMostrar varchar(max) OUTPUT,
|
||||
@ErrorTipo int OUTPUT,
|
||||
@Return bit OUTPUT
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON;
|
||||
SELECT
|
||||
@ErrorMostrar = NULL,
|
||||
@ErrorTipo = 0,
|
||||
@Return = 0;
|
||||
|
||||
BEGIN TRY
|
||||
DECLARE @EsSuperUsuario bit = 0;
|
||||
|
||||
SELECT @EsSuperUsuario = CASE
|
||||
WHEN R.NombreRol = 'SuperUsuario' THEN 1
|
||||
ELSE 0
|
||||
END
|
||||
FROM dbo.Sis_Usuarios AS U
|
||||
INNER JOIN dbo.Sis_Roles AS R ON R.CveRol = U.CveRol
|
||||
WHERE U.CveUsuario = @CveUsuarioEjecuta
|
||||
AND U.Activo = 1;
|
||||
|
||||
;WITH FraccionamientosCliente AS
|
||||
(
|
||||
SELECT
|
||||
F.CveFraccionamiento,
|
||||
F.Fraccionamiento,
|
||||
F.Ubicacion,
|
||||
F.Hectareas AS HectareasFraccionamiento,
|
||||
COALESCE(FE.Estatus, 'Estatus no disponible') AS Estatus
|
||||
FROM dbo.Fraccionamientos AS F
|
||||
LEFT JOIN dbo.Fraccionamientos_Estatus AS FE ON FE.CveEstatus = F.CveEstatus
|
||||
WHERE F.CveCliente = @CveCliente
|
||||
AND F.EsActivo = 1
|
||||
AND
|
||||
(
|
||||
@EsSuperUsuario = 1
|
||||
OR EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM dbo.Sis_UsuariosClientes AS UC
|
||||
WHERE UC.CveUsuario = @CveUsuarioEjecuta
|
||||
AND UC.CveCliente = F.CveCliente
|
||||
AND UC.Activo = 1
|
||||
)
|
||||
)
|
||||
),
|
||||
Filas AS
|
||||
(
|
||||
SELECT
|
||||
F.CveFraccionamiento,
|
||||
CAST(NULL AS int) AS CveFraccionamientoEtapa,
|
||||
F.Fraccionamiento,
|
||||
F.Ubicacion,
|
||||
F.HectareasFraccionamiento,
|
||||
F.Estatus,
|
||||
COUNT(E.CveFraccionamientoEtapa) AS NumeroEtapas,
|
||||
CAST(1 AS bit) AS EsFraccionamiento,
|
||||
CAST(NULL AS varchar(150)) AS Etapa,
|
||||
CAST(NULL AS decimal(18,4)) AS Hectareas,
|
||||
CAST(0 AS bit) AS Fideicomiso,
|
||||
CAST(1 AS bit) AS EsActivo,
|
||||
0 AS OrdenEtapa
|
||||
FROM FraccionamientosCliente AS F
|
||||
LEFT JOIN dbo.FraccionamientosEtapas AS E ON E.CveFraccionamiento = F.CveFraccionamiento
|
||||
GROUP BY
|
||||
F.CveFraccionamiento,
|
||||
F.Fraccionamiento,
|
||||
F.Ubicacion,
|
||||
F.HectareasFraccionamiento,
|
||||
F.Estatus
|
||||
|
||||
UNION ALL
|
||||
|
||||
SELECT
|
||||
F.CveFraccionamiento,
|
||||
E.CveFraccionamientoEtapa,
|
||||
F.Fraccionamiento,
|
||||
F.Ubicacion,
|
||||
F.HectareasFraccionamiento,
|
||||
F.Estatus,
|
||||
0 AS NumeroEtapas,
|
||||
CAST(0 AS bit) AS EsFraccionamiento,
|
||||
E.Etapa,
|
||||
E.Hectareas,
|
||||
E.Fideicomiso,
|
||||
E.EsActivo,
|
||||
E.Orden AS OrdenEtapa
|
||||
FROM FraccionamientosCliente AS F
|
||||
INNER JOIN dbo.FraccionamientosEtapas AS E ON E.CveFraccionamiento = F.CveFraccionamiento
|
||||
)
|
||||
SELECT
|
||||
CveFraccionamiento,
|
||||
CveFraccionamientoEtapa,
|
||||
Fraccionamiento,
|
||||
Ubicacion,
|
||||
HectareasFraccionamiento,
|
||||
Estatus,
|
||||
NumeroEtapas,
|
||||
EsFraccionamiento,
|
||||
Etapa,
|
||||
Hectareas,
|
||||
Fideicomiso,
|
||||
EsActivo
|
||||
FROM Filas
|
||||
ORDER BY
|
||||
Fraccionamiento,
|
||||
CveFraccionamiento,
|
||||
EsFraccionamiento DESC,
|
||||
OrdenEtapa,
|
||||
CveFraccionamientoEtapa;
|
||||
|
||||
SET @Return = 1;
|
||||
END TRY
|
||||
BEGIN CATCH
|
||||
SET @ErrorMostrar = 'Ocurrió un error al consultar los desarrollos; favor de contactar a Sistemas.';
|
||||
SET @ErrorTipo = 1;
|
||||
SET @Return = 0;
|
||||
|
||||
DECLARE @ErrorTecnico nvarchar(2048) = CONCAT(
|
||||
'Número: ', ERROR_NUMBER(),
|
||||
'; Procedimiento: ', COALESCE(ERROR_PROCEDURE(), 'PA_Fraccionamientos_DesarrolladorEtapasList'),
|
||||
'; Línea: ', ERROR_LINE(),
|
||||
'; Detalle: ', ERROR_MESSAGE()
|
||||
);
|
||||
|
||||
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
|
||||
END CATCH;
|
||||
END;
|
||||
GO
|
||||
652
Fraccionamientos_Lotes.sql
Normal file
652
Fraccionamientos_Lotes.sql
Normal file
@@ -0,0 +1,652 @@
|
||||
/* Catálogo de lotes con borrado físico. Las definiciones se sincronizaron desde la base local. */
|
||||
|
||||
IF NOT EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM sys.indexes
|
||||
WHERE [object_id] = OBJECT_ID(N'dbo.FraccionamientosLotes')
|
||||
AND [name] = N'IX_FraccionamientosLotes_Etapa'
|
||||
)
|
||||
BEGIN
|
||||
CREATE NONCLUSTERED INDEX [IX_FraccionamientosLotes_Etapa]
|
||||
ON [dbo].[FraccionamientosLotes] ([CveFraccionamientoEtapa])
|
||||
INCLUDE
|
||||
(
|
||||
[Numero],
|
||||
[Tipo],
|
||||
[Calle],
|
||||
[Catastro],
|
||||
[MetrosCuadrados],
|
||||
[Duplicador],
|
||||
[EsActivo]
|
||||
);
|
||||
END;
|
||||
GO
|
||||
|
||||
CREATE OR ALTER PROCEDURE [dbo].[PA_Fraccionamientos_LoteList]
|
||||
@CveFraccionamiento int,
|
||||
@CveFraccionamientoEtapa int = NULL,
|
||||
@CveUsuarioEjecuta int,
|
||||
@ErrorMostrar varchar(max) OUTPUT,
|
||||
@ErrorTipo int OUTPUT,
|
||||
@Return bit OUTPUT
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON;
|
||||
|
||||
SELECT
|
||||
@ErrorMostrar = NULL,
|
||||
@ErrorTipo = 0,
|
||||
@Return = 0;
|
||||
|
||||
BEGIN TRY
|
||||
IF NOT EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM [dbo].[Fraccionamientos]
|
||||
WHERE [CveFraccionamiento] = @CveFraccionamiento
|
||||
|
||||
)
|
||||
BEGIN
|
||||
SET @ErrorMostrar = 'El fraccionamiento seleccionado no existe.';
|
||||
SET @ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
IF @CveFraccionamientoEtapa IS NOT NULL
|
||||
AND NOT EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM [dbo].[FraccionamientosEtapas]
|
||||
WHERE [CveFraccionamientoEtapa] = @CveFraccionamientoEtapa
|
||||
AND [CveFraccionamiento] = @CveFraccionamiento
|
||||
|
||||
)
|
||||
BEGIN
|
||||
SET @ErrorMostrar = 'La etapa seleccionada no pertenece al fraccionamiento.';
|
||||
SET @ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
SELECT
|
||||
L.[CveFraccionamientoLote] AS [CveFraccionamientoLote],
|
||||
E.[CveFraccionamientoEtapa] AS [CveFraccionamientoEtapa],
|
||||
E.[Etapa] AS [Etapa],
|
||||
L.[Numero] AS [Nombre],
|
||||
L.[Tipo] AS [Tipo],
|
||||
L.[Calle] AS [Calle],
|
||||
L.[Catastro] AS [Catastro],
|
||||
L.[MetrosCuadrados] AS [MetrosCuadrados],
|
||||
L.[Duplicador] AS [Duplicador],
|
||||
L.[EsActivo] AS [EsActivo]
|
||||
FROM [dbo].[FraccionamientosLotes] AS L
|
||||
INNER JOIN [dbo].[FraccionamientosEtapas] AS E
|
||||
ON E.[CveFraccionamientoEtapa] = L.[CveFraccionamientoEtapa]
|
||||
WHERE E.[CveFraccionamiento] = @CveFraccionamiento
|
||||
AND (@CveFraccionamientoEtapa IS NULL
|
||||
OR E.[CveFraccionamientoEtapa] = @CveFraccionamientoEtapa)
|
||||
|
||||
|
||||
ORDER BY
|
||||
E.[Orden],
|
||||
E.[Etapa],
|
||||
L.[Numero],
|
||||
L.[CveFraccionamientoLote];
|
||||
|
||||
SET @Return = 1;
|
||||
END TRY
|
||||
BEGIN CATCH
|
||||
SET @ErrorMostrar = 'Ocurrió un error al consultar los lotes; favor de contactar a Sistemas.';
|
||||
SET @ErrorTipo = 1;
|
||||
SET @Return = 0;
|
||||
|
||||
DECLARE @ErrorTecnico nvarchar(2048) = CONCAT(
|
||||
'Número: ', ERROR_NUMBER(),
|
||||
'; Procedimiento: ', COALESCE(ERROR_PROCEDURE(), 'PA_Fraccionamientos_LoteList'),
|
||||
'; Línea: ', ERROR_LINE(),
|
||||
'; Detalle: ', ERROR_MESSAGE()
|
||||
);
|
||||
|
||||
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
|
||||
END CATCH;
|
||||
END;
|
||||
|
||||
GO
|
||||
|
||||
CREATE OR ALTER PROCEDURE [dbo].[PA_Fraccionamientos_LoteBatchSave]
|
||||
@CveFraccionamiento int,
|
||||
@CveFraccionamientoEtapa int,
|
||||
@LotesXml xml,
|
||||
@CveUsuarioEjecuta int,
|
||||
@ErrorMostrar varchar(max) OUTPUT,
|
||||
@ErrorTipo int OUTPUT,
|
||||
@Return bit OUTPUT
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON;
|
||||
|
||||
SELECT
|
||||
@ErrorMostrar = NULL,
|
||||
@ErrorTipo = 0,
|
||||
@Return = 0;
|
||||
|
||||
BEGIN TRY
|
||||
IF NOT EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM [dbo].[FraccionamientosEtapas]
|
||||
WHERE [CveFraccionamientoEtapa] = @CveFraccionamientoEtapa
|
||||
AND [CveFraccionamiento] = @CveFraccionamiento
|
||||
|
||||
AND [EsActivo] = (1)
|
||||
)
|
||||
BEGIN
|
||||
SET @ErrorMostrar = 'La etapa seleccionada no existe, está inactiva o no pertenece al fraccionamiento.';
|
||||
SET @ErrorTipo = 1;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
DECLARE @Lotes TABLE
|
||||
(
|
||||
[Nombre] varchar(50) COLLATE Modern_Spanish_CS_AS NULL,
|
||||
[Tipo] varchar(100) COLLATE Modern_Spanish_CS_AS NULL,
|
||||
[Calle] varchar(200) COLLATE Modern_Spanish_CS_AS NULL,
|
||||
[Catastro] varchar(100) COLLATE Modern_Spanish_CS_AS NULL,
|
||||
[MetrosCuadrados] decimal(18,4) NULL,
|
||||
[Duplicador] varchar(50) COLLATE Modern_Spanish_CS_AS NULL,
|
||||
[EsActivo] bit NOT NULL
|
||||
);
|
||||
|
||||
INSERT INTO @Lotes
|
||||
(
|
||||
[Nombre],
|
||||
[Tipo],
|
||||
[Calle],
|
||||
[Catastro],
|
||||
[MetrosCuadrados],
|
||||
[Duplicador],
|
||||
[EsActivo]
|
||||
)
|
||||
SELECT
|
||||
NULLIF(LTRIM(RTRIM(N.value('@Nombre', 'varchar(50)'))), ''),
|
||||
NULLIF(LTRIM(RTRIM(N.value('@Tipo', 'varchar(100)'))), ''),
|
||||
NULLIF(LTRIM(RTRIM(N.value('@Calle', 'varchar(200)'))), ''),
|
||||
NULLIF(LTRIM(RTRIM(N.value('@Catastro', 'varchar(100)'))), ''),
|
||||
TRY_CONVERT(
|
||||
decimal(18,4),
|
||||
NULLIF(N.value('@MetrosCuadrados', 'varchar(50)'), '')
|
||||
),
|
||||
NULLIF(LTRIM(RTRIM(N.value('@Duplicador', 'varchar(50)'))), ''),
|
||||
N.value('@EsActivo', 'bit')
|
||||
FROM @LotesXml.nodes('/Lotes/Lote') AS X(N);
|
||||
|
||||
DECLARE @Cantidad int = (SELECT COUNT(1) FROM @Lotes);
|
||||
|
||||
IF @Cantidad = (0)
|
||||
BEGIN
|
||||
SET @ErrorMostrar = 'No se recibieron lotes para guardar.';
|
||||
SET @ErrorTipo = 1;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
|
||||
IF EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM @Lotes
|
||||
WHERE [Nombre] IS NULL
|
||||
)
|
||||
BEGIN
|
||||
SET @ErrorMostrar = 'Todos los lotes deben tener un nombre.';
|
||||
SET @ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
IF EXISTS
|
||||
(
|
||||
SELECT [Nombre]
|
||||
FROM @Lotes
|
||||
GROUP BY [Nombre]
|
||||
HAVING COUNT(1) > (1)
|
||||
)
|
||||
BEGIN
|
||||
SET @ErrorMostrar = 'La captura contiene nombres de lote repetidos.';
|
||||
SET @ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
IF EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM @Lotes AS N
|
||||
INNER JOIN [dbo].[FraccionamientosLotes] AS L
|
||||
ON L.[CveFraccionamientoEtapa] = @CveFraccionamientoEtapa
|
||||
AND L.[Numero] = N.[Nombre]
|
||||
|
||||
)
|
||||
BEGIN
|
||||
SET @ErrorMostrar = 'Uno o más nombres de lote ya existen en la etapa seleccionada.';
|
||||
SET @ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
|
||||
DECLARE @LotesGuardados TABLE
|
||||
(
|
||||
CveFraccionamientoLote int NOT NULL,
|
||||
CveFraccionamientoEtapa int NOT NULL,
|
||||
Nombre varchar(50) COLLATE Modern_Spanish_CS_AS NULL,
|
||||
Tipo varchar(100) COLLATE Modern_Spanish_CS_AS NULL,
|
||||
Calle varchar(200) COLLATE Modern_Spanish_CS_AS NULL,
|
||||
Catastro varchar(100) COLLATE Modern_Spanish_CS_AS NULL,
|
||||
MetrosCuadrados decimal(18,4) NULL,
|
||||
Duplicador varchar(50) COLLATE Modern_Spanish_CS_AS NULL,
|
||||
EsActivo bit NOT NULL
|
||||
);
|
||||
|
||||
INSERT INTO [dbo].[FraccionamientosLotes]
|
||||
(
|
||||
[CveFraccionamientoEtapa],
|
||||
[Tipo],
|
||||
[Calle],
|
||||
[Catastro],
|
||||
[MetrosCuadrados],
|
||||
[Numero],
|
||||
[Duplicador],
|
||||
[EsActivo],
|
||||
[CveUsuario]
|
||||
)
|
||||
OUTPUT
|
||||
INSERTED.[CveFraccionamientoLote],
|
||||
INSERTED.[CveFraccionamientoEtapa],
|
||||
INSERTED.[Numero],
|
||||
INSERTED.[Tipo],
|
||||
INSERTED.[Calle],
|
||||
INSERTED.[Catastro],
|
||||
INSERTED.[MetrosCuadrados],
|
||||
INSERTED.[Duplicador],
|
||||
INSERTED.[EsActivo]
|
||||
INTO @LotesGuardados
|
||||
SELECT
|
||||
@CveFraccionamientoEtapa,
|
||||
[Tipo],
|
||||
[Calle],
|
||||
[Catastro],
|
||||
[MetrosCuadrados],
|
||||
[Nombre],
|
||||
[Duplicador],
|
||||
[EsActivo],
|
||||
@CveUsuarioEjecuta
|
||||
FROM @Lotes;
|
||||
|
||||
SELECT
|
||||
G.CveFraccionamientoLote,
|
||||
G.CveFraccionamientoEtapa,
|
||||
@CveFraccionamiento AS CveFraccionamiento,
|
||||
F.CveCliente,
|
||||
G.Nombre,
|
||||
G.Tipo,
|
||||
G.Calle,
|
||||
G.Catastro,
|
||||
G.MetrosCuadrados,
|
||||
G.Duplicador,
|
||||
G.EsActivo
|
||||
FROM @LotesGuardados AS G
|
||||
INNER JOIN dbo.Fraccionamientos AS F
|
||||
ON F.CveFraccionamiento = @CveFraccionamiento
|
||||
ORDER BY G.CveFraccionamientoLote;
|
||||
SET @Return = 1;
|
||||
END TRY
|
||||
BEGIN CATCH
|
||||
|
||||
SET @ErrorMostrar = 'Ocurrió un error al guardar los lotes; favor de contactar a Sistemas.';
|
||||
SET @ErrorTipo = 1;
|
||||
SET @Return = 0;
|
||||
|
||||
DECLARE @ErrorTecnico nvarchar(2048) = CONCAT(
|
||||
'Número: ', ERROR_NUMBER(),
|
||||
'; Procedimiento: ', COALESCE(ERROR_PROCEDURE(), 'PA_Fraccionamientos_LoteBatchSave'),
|
||||
'; Línea: ', ERROR_LINE(),
|
||||
'; Detalle: ', ERROR_MESSAGE()
|
||||
);
|
||||
|
||||
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
|
||||
END CATCH;
|
||||
END;
|
||||
|
||||
GO
|
||||
|
||||
CREATE OR ALTER PROCEDURE [dbo].[PA_Fraccionamientos_LoteGet]
|
||||
@CveFraccionamiento int,
|
||||
@CveFraccionamientoLote int,
|
||||
@CveUsuarioEjecuta int,
|
||||
@ErrorMostrar varchar(max) OUTPUT,
|
||||
@ErrorTipo int OUTPUT,
|
||||
@Return bit OUTPUT
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON;
|
||||
|
||||
SELECT
|
||||
@ErrorMostrar = NULL,
|
||||
@ErrorTipo = 0,
|
||||
@Return = 0;
|
||||
|
||||
BEGIN TRY
|
||||
IF NOT EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM [dbo].[FraccionamientosLotes] AS L
|
||||
INNER JOIN [dbo].[FraccionamientosEtapas] AS E
|
||||
ON E.[CveFraccionamientoEtapa] = L.[CveFraccionamientoEtapa]
|
||||
WHERE L.[CveFraccionamientoLote] = @CveFraccionamientoLote
|
||||
AND E.[CveFraccionamiento] = @CveFraccionamiento
|
||||
|
||||
|
||||
)
|
||||
BEGIN
|
||||
SET @ErrorMostrar = 'El lote seleccionado no existe o no pertenece al fraccionamiento.';
|
||||
SET @ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
SELECT
|
||||
L.[CveFraccionamientoLote] AS [CveFraccionamientoLote],
|
||||
L.[CveFraccionamientoEtapa] AS [CveFraccionamientoEtapa],
|
||||
E.[CveFraccionamiento] AS [CveFraccionamiento],
|
||||
F.[CveCliente] AS [CveCliente],
|
||||
E.[Etapa] AS [Etapa],
|
||||
L.[Numero] AS [Nombre],
|
||||
L.[Tipo] AS [Tipo],
|
||||
L.[Calle] AS [Calle],
|
||||
L.[Catastro] AS [Catastro],
|
||||
L.[MetrosCuadrados] AS [MetrosCuadrados],
|
||||
L.[Duplicador] AS [Duplicador],
|
||||
L.[EsActivo] AS [EsActivo]
|
||||
FROM [dbo].[FraccionamientosLotes] AS L
|
||||
INNER JOIN [dbo].[FraccionamientosEtapas] AS E
|
||||
ON E.[CveFraccionamientoEtapa] = L.[CveFraccionamientoEtapa]
|
||||
INNER JOIN [dbo].[Fraccionamientos] AS F
|
||||
ON F.[CveFraccionamiento] = E.[CveFraccionamiento]
|
||||
WHERE L.[CveFraccionamientoLote] = @CveFraccionamientoLote
|
||||
AND E.[CveFraccionamiento] = @CveFraccionamiento
|
||||
|
||||
;
|
||||
|
||||
SET @Return = 1;
|
||||
END TRY
|
||||
BEGIN CATCH
|
||||
SET @ErrorMostrar = 'Ocurrió un error al consultar el lote; favor de contactar a Sistemas.';
|
||||
SET @ErrorTipo = 1;
|
||||
SET @Return = 0;
|
||||
|
||||
DECLARE @ErrorTecnico nvarchar(2048) = CONCAT(
|
||||
'Número: ', ERROR_NUMBER(),
|
||||
'; Procedimiento: ', COALESCE(ERROR_PROCEDURE(), 'PA_Fraccionamientos_LoteGet'),
|
||||
'; Línea: ', ERROR_LINE(),
|
||||
'; Detalle: ', ERROR_MESSAGE()
|
||||
);
|
||||
|
||||
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
|
||||
END CATCH;
|
||||
END;
|
||||
|
||||
GO
|
||||
|
||||
CREATE OR ALTER PROCEDURE [dbo].[PA_Fraccionamientos_LoteUpdate]
|
||||
@CveFraccionamiento int,
|
||||
@CveFraccionamientoLote int,
|
||||
@CveFraccionamientoEtapa int,
|
||||
@Nombre varchar(50),
|
||||
@Tipo varchar(100) = NULL,
|
||||
@Calle varchar(200) = NULL,
|
||||
@Catastro varchar(100) = NULL,
|
||||
@MetrosCuadrados decimal(18,4) = NULL,
|
||||
@Duplicador varchar(50) = NULL,
|
||||
@EsActivo bit,
|
||||
@CveUsuarioEjecuta int,
|
||||
@ErrorMostrar varchar(max) OUTPUT,
|
||||
@ErrorTipo int OUTPUT,
|
||||
@Return bit OUTPUT
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON;
|
||||
|
||||
SELECT
|
||||
@ErrorMostrar = NULL,
|
||||
@ErrorTipo = 0,
|
||||
@Return = 0;
|
||||
|
||||
BEGIN TRY
|
||||
SET @Nombre = NULLIF(LTRIM(RTRIM(@Nombre)), '');
|
||||
SET @Tipo = NULLIF(LTRIM(RTRIM(@Tipo)), '');
|
||||
SET @Calle = NULLIF(LTRIM(RTRIM(@Calle)), '');
|
||||
SET @Catastro = NULLIF(LTRIM(RTRIM(@Catastro)), '');
|
||||
SET @Duplicador = NULLIF(LTRIM(RTRIM(@Duplicador)), '');
|
||||
|
||||
IF @Nombre IS NULL
|
||||
BEGIN
|
||||
SET @ErrorMostrar = 'Capture el nombre del lote.';
|
||||
SET @ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
IF @MetrosCuadrados IS NOT NULL
|
||||
AND @MetrosCuadrados < (0)
|
||||
BEGIN
|
||||
SET @ErrorMostrar = 'Los metros cuadrados no pueden ser negativos.';
|
||||
SET @ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
IF NOT EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM [dbo].[FraccionamientosEtapas]
|
||||
WHERE [CveFraccionamientoEtapa] = @CveFraccionamientoEtapa
|
||||
AND [CveFraccionamiento] = @CveFraccionamiento
|
||||
|
||||
)
|
||||
BEGIN
|
||||
SET @ErrorMostrar = 'La etapa del lote no pertenece al fraccionamiento.';
|
||||
SET @ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
IF NOT EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM [dbo].[FraccionamientosLotes] AS L
|
||||
INNER JOIN [dbo].[FraccionamientosEtapas] AS E
|
||||
ON E.[CveFraccionamientoEtapa] = L.[CveFraccionamientoEtapa]
|
||||
WHERE L.[CveFraccionamientoLote] = @CveFraccionamientoLote
|
||||
AND E.[CveFraccionamiento] = @CveFraccionamiento
|
||||
|
||||
|
||||
)
|
||||
BEGIN
|
||||
SET @ErrorMostrar = 'El lote seleccionado no existe o no pertenece al fraccionamiento.';
|
||||
SET @ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
IF EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM [dbo].[FraccionamientosLotes] AS L
|
||||
WHERE L.[CveFraccionamientoEtapa] = @CveFraccionamientoEtapa
|
||||
AND L.[CveFraccionamientoLote] <> @CveFraccionamientoLote
|
||||
AND L.[Numero] = @Nombre COLLATE Modern_Spanish_CS_AS
|
||||
|
||||
)
|
||||
BEGIN
|
||||
SET @ErrorMostrar = 'Ya existe otro lote con ese nombre en la etapa.';
|
||||
SET @ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
|
||||
UPDATE [dbo].[FraccionamientosLotes]
|
||||
SET
|
||||
[CveFraccionamientoEtapa] = @CveFraccionamientoEtapa,
|
||||
[Numero] = @Nombre,
|
||||
[Tipo] = @Tipo,
|
||||
[Calle] = @Calle,
|
||||
[Catastro] = @Catastro,
|
||||
[MetrosCuadrados] = @MetrosCuadrados,
|
||||
[Duplicador] = @Duplicador,
|
||||
[EsActivo] = @EsActivo,
|
||||
[FechaModificacion] = SYSDATETIME(),
|
||||
[CveUsuario] = @CveUsuarioEjecuta
|
||||
WHERE [CveFraccionamientoLote] = @CveFraccionamientoLote
|
||||
;
|
||||
|
||||
|
||||
SELECT @CveFraccionamientoLote AS [CveFraccionamientoLote];
|
||||
SET @Return = 1;
|
||||
END TRY
|
||||
BEGIN CATCH
|
||||
|
||||
SET @ErrorMostrar = 'Ocurrió un error al actualizar el lote; favor de contactar a Sistemas.';
|
||||
SET @ErrorTipo = 1;
|
||||
SET @Return = 0;
|
||||
|
||||
DECLARE @ErrorTecnico nvarchar(2048) = CONCAT(
|
||||
'Número: ', ERROR_NUMBER(),
|
||||
'; Procedimiento: ', COALESCE(ERROR_PROCEDURE(), 'PA_Fraccionamientos_LoteUpdate'),
|
||||
'; Línea: ', ERROR_LINE(),
|
||||
'; Detalle: ', ERROR_MESSAGE()
|
||||
);
|
||||
|
||||
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
|
||||
END CATCH;
|
||||
END;
|
||||
|
||||
GO
|
||||
|
||||
CREATE OR ALTER PROCEDURE [dbo].[PA_Fraccionamientos_LoteDelete]
|
||||
@CveFraccionamiento int,
|
||||
@CveFraccionamientoLote int,
|
||||
@CveUsuarioEjecuta int,
|
||||
@ErrorMostrar varchar(max) OUTPUT,
|
||||
@ErrorTipo int OUTPUT,
|
||||
@Return bit OUTPUT
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON;
|
||||
|
||||
SELECT
|
||||
@ErrorMostrar = NULL,
|
||||
@ErrorTipo = 0,
|
||||
@Return = 0;
|
||||
|
||||
BEGIN TRY
|
||||
IF NOT EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM [dbo].[FraccionamientosLotes] AS L
|
||||
INNER JOIN [dbo].[FraccionamientosEtapas] AS E
|
||||
ON E.[CveFraccionamientoEtapa] = L.[CveFraccionamientoEtapa]
|
||||
WHERE L.[CveFraccionamientoLote] = @CveFraccionamientoLote
|
||||
AND E.[CveFraccionamiento] = @CveFraccionamiento
|
||||
|
||||
|
||||
)
|
||||
BEGIN
|
||||
SET @ErrorMostrar = 'El lote seleccionado no existe o no pertenece al fraccionamiento.';
|
||||
SET @ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
|
||||
DELETE FROM [dbo].[FraccionamientosLotes]
|
||||
WHERE [CveFraccionamientoLote] = @CveFraccionamientoLote;
|
||||
|
||||
|
||||
SET @Return = 1;
|
||||
END TRY
|
||||
BEGIN CATCH
|
||||
|
||||
SET @ErrorMostrar = 'Ocurrió un error al eliminar el lote; favor de contactar a Sistemas.';
|
||||
SET @ErrorTipo = 1;
|
||||
SET @Return = 0;
|
||||
|
||||
DECLARE @ErrorTecnico nvarchar(2048) = CONCAT(
|
||||
'Número: ', ERROR_NUMBER(),
|
||||
'; Procedimiento: ', COALESCE(ERROR_PROCEDURE(), 'PA_Fraccionamientos_LoteDelete'),
|
||||
'; Línea: ', ERROR_LINE(),
|
||||
'; Detalle: ', ERROR_MESSAGE()
|
||||
);
|
||||
|
||||
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
|
||||
END CATCH;
|
||||
END;
|
||||
|
||||
GO
|
||||
|
||||
CREATE OR ALTER PROCEDURE [dbo].[PA_Fraccionamientos_LoteStageClear]
|
||||
@CveFraccionamiento int,
|
||||
@CveFraccionamientoEtapa int,
|
||||
@CveUsuarioEjecuta int,
|
||||
@ErrorMostrar varchar(max) OUTPUT,
|
||||
@ErrorTipo int OUTPUT,
|
||||
@Return bit OUTPUT
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON;
|
||||
|
||||
SELECT
|
||||
@ErrorMostrar = NULL,
|
||||
@ErrorTipo = 0,
|
||||
@Return = 0;
|
||||
|
||||
BEGIN TRY
|
||||
IF NOT EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM [dbo].[FraccionamientosEtapas]
|
||||
WHERE [CveFraccionamientoEtapa] = @CveFraccionamientoEtapa
|
||||
AND [CveFraccionamiento] = @CveFraccionamiento
|
||||
|
||||
)
|
||||
BEGIN
|
||||
SET @ErrorMostrar = 'La etapa seleccionada no pertenece al fraccionamiento.';
|
||||
SET @ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
|
||||
DELETE FROM [dbo].[FraccionamientosLotes]
|
||||
WHERE [CveFraccionamientoEtapa] = @CveFraccionamientoEtapa;
|
||||
|
||||
DECLARE @Cantidad int = @@ROWCOUNT;
|
||||
|
||||
IF @Cantidad = (0)
|
||||
BEGIN
|
||||
SET @ErrorMostrar = 'La etapa seleccionada no tiene lotes para eliminar.';
|
||||
SET @ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
|
||||
SELECT @Cantidad AS [LotesEliminados];
|
||||
SET @Return = 1;
|
||||
END TRY
|
||||
BEGIN CATCH
|
||||
|
||||
SET @ErrorMostrar = 'Ocurrió un error al eliminar los lotes de la etapa; favor de contactar a Sistemas.';
|
||||
SET @ErrorTipo = 1;
|
||||
SET @Return = 0;
|
||||
|
||||
DECLARE @ErrorTecnico nvarchar(2048) = CONCAT(
|
||||
'Número: ', ERROR_NUMBER(),
|
||||
'; Procedimiento: ', COALESCE(ERROR_PROCEDURE(), 'PA_Fraccionamientos_LoteStageClear'),
|
||||
'; Línea: ', ERROR_LINE(),
|
||||
'; Detalle: ', ERROR_MESSAGE()
|
||||
);
|
||||
|
||||
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
|
||||
END CATCH;
|
||||
END;
|
||||
|
||||
GO
|
||||
1170
Fraccionamientos_Ventas_Conceptos_Timbrado_20260827.sql
Normal file
1170
Fraccionamientos_Ventas_Conceptos_Timbrado_20260827.sql
Normal file
File diff suppressed because it is too large
Load Diff
742
Fraccionamientos_Ventas_Flujo_Generar_Pagar_20260827.sql
Normal file
742
Fraccionamientos_Ventas_Flujo_Generar_Pagar_20260827.sql
Normal file
@@ -0,0 +1,742 @@
|
||||
SET ANSI_NULLS ON;
|
||||
SET QUOTED_IDENTIFIER ON;
|
||||
SET NOCOUNT ON;
|
||||
GO
|
||||
|
||||
UPDATE dbo.Vta_TipoDocumentos
|
||||
SET TipoDocumento = N'Remisión'
|
||||
WHERE CveTipoDocumento = 'Rem'
|
||||
AND TipoDocumento <> N'Remisión';
|
||||
GO
|
||||
|
||||
DECLARE @CveUsuarioSistema int =
|
||||
(
|
||||
SELECT TOP (1)
|
||||
CveUsuario
|
||||
FROM dbo.Sis_Usuarios
|
||||
WHERE Activo = 1
|
||||
ORDER BY CveUsuario
|
||||
);
|
||||
|
||||
IF NOT EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM dbo.Vta_FormaPago
|
||||
WHERE CveFormaPago = 99
|
||||
)
|
||||
BEGIN
|
||||
INSERT INTO dbo.Vta_FormaPago
|
||||
(
|
||||
CveFormaPago,
|
||||
FormaPago,
|
||||
ClaveFormaPagoSAT,
|
||||
CveUsuario,
|
||||
FechaIng
|
||||
)
|
||||
VALUES
|
||||
(
|
||||
99,
|
||||
'Por definir',
|
||||
'99',
|
||||
@CveUsuarioSistema,
|
||||
CONVERT(date, GETDATE())
|
||||
);
|
||||
END;
|
||||
|
||||
IF NOT EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM dbo.Vta_MetodoPago
|
||||
WHERE CveMetodoPago = 2
|
||||
)
|
||||
BEGIN
|
||||
INSERT INTO dbo.Vta_MetodoPago
|
||||
(
|
||||
CveMetodoPago,
|
||||
MetodoPago,
|
||||
ClaveMetodoPagoSAT,
|
||||
CveUsuario,
|
||||
FechaIng
|
||||
)
|
||||
VALUES
|
||||
(
|
||||
2,
|
||||
'Pago en parcialidades o diferido',
|
||||
'PPD',
|
||||
@CveUsuarioSistema,
|
||||
CONVERT(date, GETDATE())
|
||||
);
|
||||
END;
|
||||
GO
|
||||
|
||||
IF NOT EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM sys.indexes
|
||||
WHERE object_id = OBJECT_ID('dbo.Vta_Pagos')
|
||||
AND name = 'UX_Vta_Pagos_SolicitudTramitePagoActivo'
|
||||
)
|
||||
BEGIN
|
||||
CREATE UNIQUE NONCLUSTERED INDEX UX_Vta_Pagos_SolicitudTramitePagoActivo
|
||||
ON dbo.Vta_Pagos
|
||||
(
|
||||
CveSolicitud,
|
||||
CveTramitePago
|
||||
)
|
||||
WHERE EsActivo = 1
|
||||
AND CveSolicitud IS NOT NULL;
|
||||
END;
|
||||
GO
|
||||
|
||||
CREATE OR ALTER PROCEDURE dbo.PA_Vta_FraccionamientoPagoPendienteList
|
||||
@CveFraccionamiento int,
|
||||
@CveUsuarioEjecuta int,
|
||||
@ErrorMostrar varchar(max) OUTPUT,
|
||||
@ErrorTipo int OUTPUT,
|
||||
@Return bit OUTPUT
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON;
|
||||
|
||||
SELECT
|
||||
@ErrorMostrar = NULL,
|
||||
@ErrorTipo = 0,
|
||||
@Return = 0;
|
||||
|
||||
BEGIN TRY
|
||||
DECLARE @PorcentajeIVA decimal(9, 6) = 0.16;
|
||||
|
||||
IF NOT EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM dbo.Fraccionamientos
|
||||
WHERE CveFraccionamiento = @CveFraccionamiento
|
||||
)
|
||||
BEGIN
|
||||
SELECT
|
||||
@ErrorMostrar = 'El fraccionamiento solicitado no existe.',
|
||||
@ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
;WITH Conceptos AS
|
||||
(
|
||||
SELECT
|
||||
S.CveSolicitud,
|
||||
P.CveTramitePago,
|
||||
COUNT_BIG(*) AS NumeroConceptos,
|
||||
SUM(
|
||||
ROUND(
|
||||
CONVERT(decimal(18, 4), Costo.Importe),
|
||||
2
|
||||
)
|
||||
) AS SubTotal,
|
||||
SUM(
|
||||
ROUND(
|
||||
CONVERT(decimal(18, 4), Costo.Importe) *
|
||||
@PorcentajeIVA,
|
||||
2
|
||||
)
|
||||
) AS IVA
|
||||
FROM dbo.Tra_Solicitudes AS S
|
||||
INNER JOIN dbo.Tra_Pagos AS P
|
||||
ON P.CveTipoTramite = S.CveTipoTramite
|
||||
AND P.EsActivo = 1
|
||||
INNER JOIN dbo.Tra_PagosDetalle AS D
|
||||
ON D.CveTramitePago = P.CveTramitePago
|
||||
INNER JOIN dbo.ProductosServicios AS PS
|
||||
ON PS.CvePS = D.CvePS
|
||||
OUTER APPLY
|
||||
(
|
||||
SELECT TOP (1)
|
||||
CT.Importe
|
||||
FROM dbo.Tra_CostosTramite AS CT
|
||||
WHERE CT.CveTipoTramite = S.CveTipoTramite
|
||||
AND CT.CvePS = D.CvePS
|
||||
AND CT.EsActivo = 1
|
||||
AND
|
||||
(
|
||||
CT.FechaInicioVigencia IS NULL
|
||||
OR CT.FechaInicioVigencia <= CONVERT(date, GETDATE())
|
||||
)
|
||||
AND
|
||||
(
|
||||
CT.FechaFinVigencia IS NULL
|
||||
OR CT.FechaFinVigencia >= CONVERT(date, GETDATE())
|
||||
)
|
||||
ORDER BY
|
||||
ISNULL(
|
||||
CT.FechaInicioVigencia,
|
||||
CONVERT(date, '19000101')) DESC,
|
||||
CT.CveCostoTramite DESC
|
||||
) AS Costo
|
||||
WHERE S.CveFraccionamiento = @CveFraccionamiento
|
||||
GROUP BY
|
||||
S.CveSolicitud,
|
||||
P.CveTramitePago
|
||||
)
|
||||
SELECT
|
||||
S.CveSolicitud,
|
||||
P.CveTramitePago,
|
||||
SP.CveVenta,
|
||||
CONVERT(
|
||||
bit,
|
||||
CASE
|
||||
WHEN SP.CveSolicitudPago IS NOT NULL
|
||||
AND V.CveVenta IS NOT NULL THEN 1
|
||||
ELSE 0
|
||||
END
|
||||
) AS VentaGenerada,
|
||||
S.Folio AS FolioSolicitud,
|
||||
E.Etapa,
|
||||
TT.TipoTramite,
|
||||
P.Nombre AS NombrePago,
|
||||
CONVERT(int, C.NumeroConceptos) AS NumeroConceptos,
|
||||
CONVERT(
|
||||
decimal(18, 2),
|
||||
CASE
|
||||
WHEN V.CveVenta IS NULL THEN C.SubTotal
|
||||
ELSE V.SubTotal
|
||||
END
|
||||
) AS SubTotal,
|
||||
CONVERT(
|
||||
decimal(18, 2),
|
||||
CASE
|
||||
WHEN V.CveVenta IS NULL THEN C.IVA
|
||||
ELSE V.IVA
|
||||
END
|
||||
) AS IVA,
|
||||
CONVERT(
|
||||
decimal(18, 2),
|
||||
CASE
|
||||
WHEN V.CveVenta IS NULL THEN C.SubTotal + C.IVA
|
||||
ELSE V.Total
|
||||
END
|
||||
) AS Total
|
||||
FROM Conceptos AS C
|
||||
INNER JOIN dbo.Tra_Solicitudes AS S
|
||||
ON S.CveSolicitud = C.CveSolicitud
|
||||
INNER JOIN dbo.FraccionamientosEtapas AS E
|
||||
ON E.CveFraccionamientoEtapa = S.CveFraccionamientoEtapa
|
||||
INNER JOIN dbo.Tra_TiposTramite AS TT
|
||||
ON TT.CveTipoTramite = S.CveTipoTramite
|
||||
INNER JOIN dbo.Tra_Pagos AS P
|
||||
ON P.CveTramitePago = C.CveTramitePago
|
||||
LEFT JOIN dbo.Tra_SolicitudesPagos AS SP
|
||||
ON SP.CveSolicitud = S.CveSolicitud
|
||||
AND SP.CveTramitePago = P.CveTramitePago
|
||||
LEFT JOIN dbo.Ventas AS V
|
||||
ON V.CveVenta = SP.CveVenta
|
||||
WHERE NOT EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM dbo.Vta_Pagos AS VP
|
||||
WHERE VP.CveSolicitud = S.CveSolicitud
|
||||
AND VP.CveTramitePago = P.CveTramitePago
|
||||
AND VP.CveVenta = SP.CveVenta
|
||||
AND VP.EsActivo = 1
|
||||
)
|
||||
ORDER BY
|
||||
E.Orden,
|
||||
S.CveSolicitud,
|
||||
P.Orden,
|
||||
P.CveTramitePago;
|
||||
|
||||
SET @Return = 1;
|
||||
END TRY
|
||||
BEGIN CATCH
|
||||
SELECT
|
||||
@ErrorMostrar = 'Ocurrió un error al consultar los pagos pendientes; favor de contactar a Sistemas.',
|
||||
@ErrorTipo = 1,
|
||||
@Return = 0;
|
||||
|
||||
DECLARE @ErrorTecnico nvarchar(2048) = CONCAT(
|
||||
'Número: ', ERROR_NUMBER(),
|
||||
'; Procedimiento: ', COALESCE(
|
||||
ERROR_PROCEDURE(),
|
||||
'PA_Vta_FraccionamientoPagoPendienteList'
|
||||
),
|
||||
'; Línea: ', ERROR_LINE(),
|
||||
'; Detalle: ', ERROR_MESSAGE()
|
||||
);
|
||||
|
||||
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
|
||||
END CATCH;
|
||||
END;
|
||||
GO
|
||||
|
||||
CREATE OR ALTER PROCEDURE dbo.PA_Vta_FraccionamientoPagoRealizadoList
|
||||
@CveFraccionamiento int,
|
||||
@CveUsuarioEjecuta int,
|
||||
@ErrorMostrar varchar(max) OUTPUT,
|
||||
@ErrorTipo int OUTPUT,
|
||||
@Return bit OUTPUT
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON;
|
||||
|
||||
SELECT
|
||||
@ErrorMostrar = NULL,
|
||||
@ErrorTipo = 0,
|
||||
@Return = 0;
|
||||
|
||||
BEGIN TRY
|
||||
IF NOT EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM dbo.Fraccionamientos
|
||||
WHERE CveFraccionamiento = @CveFraccionamiento
|
||||
)
|
||||
BEGIN
|
||||
SELECT
|
||||
@ErrorMostrar = 'El fraccionamiento solicitado no existe.',
|
||||
@ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
SELECT
|
||||
SP.CveSolicitudPago,
|
||||
SP.CveSolicitud,
|
||||
SP.CveTramitePago,
|
||||
V.CveVenta,
|
||||
VP.CvePago,
|
||||
V.SerieFolio,
|
||||
V.Fecha,
|
||||
VP.FechaPago,
|
||||
VP.Referencia,
|
||||
S.Folio AS FolioSolicitud,
|
||||
E.Etapa,
|
||||
TT.TipoTramite,
|
||||
P.Nombre AS NombrePago,
|
||||
CONVERT(decimal(18, 2), V.SubTotal) AS SubTotal,
|
||||
CONVERT(decimal(18, 2), V.IVA) AS IVA,
|
||||
CONVERT(decimal(18, 2), VP.Importe) AS Total
|
||||
FROM dbo.Tra_SolicitudesPagos AS SP
|
||||
INNER JOIN dbo.Tra_Solicitudes AS S
|
||||
ON S.CveSolicitud = SP.CveSolicitud
|
||||
INNER JOIN dbo.FraccionamientosEtapas AS E
|
||||
ON E.CveFraccionamientoEtapa = S.CveFraccionamientoEtapa
|
||||
INNER JOIN dbo.Tra_TiposTramite AS TT
|
||||
ON TT.CveTipoTramite = S.CveTipoTramite
|
||||
INNER JOIN dbo.Tra_Pagos AS P
|
||||
ON P.CveTramitePago = SP.CveTramitePago
|
||||
INNER JOIN dbo.Ventas AS V
|
||||
ON V.CveVenta = SP.CveVenta
|
||||
INNER JOIN dbo.Vta_Pagos AS VP
|
||||
ON VP.CveVenta = V.CveVenta
|
||||
AND VP.CveSolicitud = SP.CveSolicitud
|
||||
AND VP.CveTramitePago = SP.CveTramitePago
|
||||
AND VP.EsActivo = 1
|
||||
WHERE S.CveFraccionamiento = @CveFraccionamiento
|
||||
ORDER BY
|
||||
VP.FechaPago DESC,
|
||||
VP.CvePago DESC;
|
||||
|
||||
SET @Return = 1;
|
||||
END TRY
|
||||
BEGIN CATCH
|
||||
SELECT
|
||||
@ErrorMostrar = 'Ocurrió un error al consultar los pagos realizados; favor de contactar a Sistemas.',
|
||||
@ErrorTipo = 1,
|
||||
@Return = 0;
|
||||
|
||||
DECLARE @ErrorTecnico nvarchar(2048) = CONCAT(
|
||||
'Número: ', ERROR_NUMBER(),
|
||||
'; Procedimiento: ', COALESCE(
|
||||
ERROR_PROCEDURE(),
|
||||
'PA_Vta_FraccionamientoPagoRealizadoList'
|
||||
),
|
||||
'; Línea: ', ERROR_LINE(),
|
||||
'; Detalle: ', ERROR_MESSAGE()
|
||||
);
|
||||
|
||||
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
|
||||
END CATCH;
|
||||
END;
|
||||
GO
|
||||
|
||||
CREATE OR ALTER PROCEDURE dbo.PA_Vta_TramiteContextoGet
|
||||
@CveSolicitud int,
|
||||
@CveTramitePago int,
|
||||
@CveUsuarioEjecuta int,
|
||||
@ErrorMostrar varchar(max) OUTPUT,
|
||||
@ErrorTipo int OUTPUT,
|
||||
@Return bit OUTPUT
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON;
|
||||
|
||||
SELECT
|
||||
@ErrorMostrar = NULL,
|
||||
@ErrorTipo = 0,
|
||||
@Return = 0;
|
||||
|
||||
BEGIN TRY
|
||||
DECLARE @CveSubProyecto int =
|
||||
(
|
||||
SELECT TOP (1)
|
||||
CveSubProyecto
|
||||
FROM dbo.SubProyectos
|
||||
WHERE Estatus = 1
|
||||
ORDER BY
|
||||
CASE WHEN Serie = 'TRA' THEN 0 ELSE 1 END,
|
||||
CveSubProyecto
|
||||
);
|
||||
|
||||
IF NOT EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM dbo.Tra_Solicitudes AS S
|
||||
INNER JOIN dbo.Tra_Pagos AS P
|
||||
ON P.CveTramitePago = @CveTramitePago
|
||||
AND P.CveTipoTramite = S.CveTipoTramite
|
||||
AND P.EsActivo = 1
|
||||
INNER JOIN dbo.Tra_PagosDetalle AS D
|
||||
ON D.CveTramitePago = P.CveTramitePago
|
||||
WHERE S.CveSolicitud = @CveSolicitud
|
||||
)
|
||||
BEGIN
|
||||
SELECT
|
||||
@ErrorMostrar = 'El pago seleccionado no corresponde al trámite o no tiene conceptos activos.',
|
||||
@ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
SELECT
|
||||
S.CveSolicitud,
|
||||
P.CveTramitePago,
|
||||
SP.CveVenta,
|
||||
VP.CvePago,
|
||||
CONVERT(
|
||||
bit,
|
||||
CASE
|
||||
WHEN SP.CveSolicitudPago IS NOT NULL
|
||||
AND V.CveVenta IS NOT NULL THEN 1
|
||||
ELSE 0
|
||||
END
|
||||
) AS VentaGenerada,
|
||||
CONVERT(
|
||||
bit,
|
||||
CASE
|
||||
WHEN VP.Autorizado = 1 THEN 1
|
||||
ELSE 0
|
||||
END
|
||||
) AS VentaPagada,
|
||||
CONVERT(
|
||||
bit,
|
||||
CASE
|
||||
WHEN VP.CvePago IS NOT NULL
|
||||
AND VP.Autorizado = 0
|
||||
THEN 1
|
||||
ELSE 0
|
||||
END
|
||||
) AS PagoPendienteAutorizacion,
|
||||
VP.Referencia AS ReferenciaPago,
|
||||
S.CveFraccionamiento,
|
||||
F.Fraccionamiento,
|
||||
F.CveCliente,
|
||||
C.Nombre AS Cliente,
|
||||
C.RFC,
|
||||
CONCAT(
|
||||
C.Direccion,
|
||||
CASE
|
||||
WHEN NULLIF(LTRIM(RTRIM(C.NoExt)), '') IS NULL THEN ''
|
||||
ELSE CONCAT(' ', C.NoExt)
|
||||
END,
|
||||
CASE
|
||||
WHEN NULLIF(LTRIM(RTRIM(C.NoInt)), '') IS NULL THEN ''
|
||||
ELSE CONCAT(' Int. ', C.NoInt)
|
||||
END
|
||||
) AS Direccion,
|
||||
C.Colonia,
|
||||
CONCAT(C.Ciudad, ', ', C.Estado) AS CiudadEstado,
|
||||
C.CP,
|
||||
C.Telefono,
|
||||
C.Mail,
|
||||
S.Folio AS FolioSolicitud,
|
||||
E.Etapa,
|
||||
TT.TipoTramite,
|
||||
P.Nombre AS NombrePago,
|
||||
N'Remisión' AS TipoDocumento,
|
||||
ISNULL(V.Serie, 'TRA') AS Serie,
|
||||
ISNULL(
|
||||
V.Folio,
|
||||
ISNULL(
|
||||
(
|
||||
SELECT MAX(Venta.Folio) + 1
|
||||
FROM dbo.Ventas AS Venta
|
||||
WHERE Venta.TipoDocto = 'Rem'
|
||||
AND Venta.Serie = 'TRA'
|
||||
AND Venta.CveSubProyecto = @CveSubProyecto
|
||||
),
|
||||
1
|
||||
)
|
||||
) AS Folio,
|
||||
ISNULL(V.Fecha, GETDATE()) AS Fecha,
|
||||
ISNULL(V.CveMetodoPago33, ISNULL(V.CveMetodoPago, 2))
|
||||
AS CveMetodoPago,
|
||||
ISNULL(V.CveFormaPago33, ISNULL(V.FormaPago, 99))
|
||||
AS CveFormaPago,
|
||||
V.FechaVencimiento2 AS FechaVencimiento
|
||||
FROM dbo.Tra_Solicitudes AS S
|
||||
INNER JOIN dbo.Fraccionamientos AS F
|
||||
ON F.CveFraccionamiento = S.CveFraccionamiento
|
||||
INNER JOIN dbo.FraccionamientosEtapas AS E
|
||||
ON E.CveFraccionamientoEtapa = S.CveFraccionamientoEtapa
|
||||
INNER JOIN dbo.Tra_TiposTramite AS TT
|
||||
ON TT.CveTipoTramite = S.CveTipoTramite
|
||||
INNER JOIN dbo.Tra_Pagos AS P
|
||||
ON P.CveTramitePago = @CveTramitePago
|
||||
AND P.CveTipoTramite = S.CveTipoTramite
|
||||
INNER JOIN dbo.Clientes AS C
|
||||
ON C.CveCliente = F.CveCliente
|
||||
LEFT JOIN dbo.Tra_SolicitudesPagos AS SP
|
||||
ON SP.CveSolicitud = S.CveSolicitud
|
||||
AND SP.CveTramitePago = P.CveTramitePago
|
||||
LEFT JOIN dbo.Ventas AS V
|
||||
ON V.CveVenta = SP.CveVenta
|
||||
OUTER APPLY
|
||||
(
|
||||
SELECT TOP (1)
|
||||
Pago.CvePago,
|
||||
Pago.Autorizado,
|
||||
Pago.Referencia
|
||||
FROM dbo.Vta_Pagos AS Pago
|
||||
WHERE Pago.CveVenta = V.CveVenta
|
||||
AND Pago.CveSolicitud = S.CveSolicitud
|
||||
AND Pago.CveTramitePago = P.CveTramitePago
|
||||
AND Pago.EsActivo = 1
|
||||
ORDER BY Pago.CvePago DESC
|
||||
) AS VP
|
||||
WHERE S.CveSolicitud = @CveSolicitud;
|
||||
|
||||
SET @Return = 1;
|
||||
END TRY
|
||||
BEGIN CATCH
|
||||
SELECT
|
||||
@ErrorMostrar = 'Ocurrió un error al consultar la venta del trámite; favor de contactar a Sistemas.',
|
||||
@ErrorTipo = 1,
|
||||
@Return = 0;
|
||||
|
||||
DECLARE @ErrorTecnico nvarchar(2048) = CONCAT(
|
||||
'Número: ', ERROR_NUMBER(),
|
||||
'; Procedimiento: ', COALESCE(
|
||||
ERROR_PROCEDURE(),
|
||||
'PA_Vta_TramiteContextoGet'
|
||||
),
|
||||
'; Línea: ', ERROR_LINE(),
|
||||
'; Detalle: ', ERROR_MESSAGE()
|
||||
);
|
||||
|
||||
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
|
||||
END CATCH;
|
||||
END;
|
||||
GO
|
||||
|
||||
CREATE OR ALTER PROCEDURE dbo.PA_Vta_TramitePagoSave
|
||||
@CveSolicitud int,
|
||||
@CveTramitePago int,
|
||||
@Referencia varchar(200) = NULL,
|
||||
@CveUsuarioEjecuta int,
|
||||
@ErrorMostrar varchar(max) OUTPUT,
|
||||
@ErrorTipo int OUTPUT,
|
||||
@Return bit OUTPUT
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON;
|
||||
|
||||
SELECT
|
||||
@ErrorMostrar = NULL,
|
||||
@ErrorTipo = 0,
|
||||
@Return = 0;
|
||||
|
||||
BEGIN TRY
|
||||
DECLARE
|
||||
@CveVenta int,
|
||||
@CveCliente int,
|
||||
@Importe decimal(18, 2),
|
||||
@CvePago int,
|
||||
@FechaPago datetime = GETDATE();
|
||||
|
||||
SELECT
|
||||
@CveVenta = V.CveVenta,
|
||||
@CveCliente = V.CveCliente,
|
||||
@Importe = CONVERT(decimal(18, 2), V.Total)
|
||||
FROM dbo.Tra_SolicitudesPagos AS SP
|
||||
INNER JOIN dbo.Ventas AS V
|
||||
ON V.CveVenta = SP.CveVenta
|
||||
WHERE SP.CveSolicitud = @CveSolicitud
|
||||
AND SP.CveTramitePago = @CveTramitePago;
|
||||
|
||||
IF @CveVenta IS NULL
|
||||
BEGIN
|
||||
SELECT
|
||||
@ErrorMostrar = 'Primero debe generar la venta del trámite.',
|
||||
@ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
IF EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM dbo.Vta_Pagos WITH (UPDLOCK, HOLDLOCK)
|
||||
WHERE CveSolicitud = @CveSolicitud
|
||||
AND CveTramitePago = @CveTramitePago
|
||||
AND CveVenta = @CveVenta
|
||||
AND EsActivo = 1
|
||||
)
|
||||
BEGIN
|
||||
SELECT
|
||||
@ErrorMostrar = 'La venta del trámite ya se encuentra pagada.',
|
||||
@ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
IF NOT EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM dbo.Vta_FormaPago
|
||||
WHERE CveFormaPago = 99
|
||||
)
|
||||
BEGIN
|
||||
SELECT
|
||||
@ErrorMostrar = 'La forma de pago por definir no está configurada; favor de contactar a Sistemas.',
|
||||
@ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
INSERT INTO dbo.Vta_Pagos
|
||||
(
|
||||
CveCliente,
|
||||
CveVenta,
|
||||
CveSolicitud,
|
||||
CveFormaPago,
|
||||
CveMoneda,
|
||||
CvePrePoliza,
|
||||
FechaPago,
|
||||
Importe,
|
||||
Referencia,
|
||||
EsSaldoFavor,
|
||||
EsActivo,
|
||||
FechaAlta,
|
||||
CveUsuario,
|
||||
CveTramitePago
|
||||
)
|
||||
VALUES
|
||||
(
|
||||
@CveCliente,
|
||||
@CveVenta,
|
||||
@CveSolicitud,
|
||||
99,
|
||||
1,
|
||||
NULL,
|
||||
@FechaPago,
|
||||
@Importe,
|
||||
NULLIF(LTRIM(RTRIM(@Referencia)), ''),
|
||||
0,
|
||||
1,
|
||||
@FechaPago,
|
||||
@CveUsuarioEjecuta,
|
||||
@CveTramitePago
|
||||
);
|
||||
|
||||
SET @CvePago = CONVERT(int, SCOPE_IDENTITY());
|
||||
|
||||
UPDATE dbo.Ventas
|
||||
SET
|
||||
CveMetodoPago = 2,
|
||||
FormaPago = 99,
|
||||
CveFormaPago33 = 99,
|
||||
CveMetodoPago33 = 2,
|
||||
FechaCobranza = @FechaPago,
|
||||
CveUsuarioCobranza = @CveUsuarioEjecuta
|
||||
WHERE CveVenta = @CveVenta;
|
||||
|
||||
SELECT @CvePago AS CvePago;
|
||||
|
||||
SET @Return = 1;
|
||||
END TRY
|
||||
BEGIN CATCH
|
||||
SELECT
|
||||
@ErrorMostrar = 'Ocurrió un error al registrar el pago de la venta; favor de contactar a Sistemas.',
|
||||
@ErrorTipo = 1,
|
||||
@Return = 0;
|
||||
|
||||
DECLARE @ErrorTecnico nvarchar(2048) = CONCAT(
|
||||
'Número: ', ERROR_NUMBER(),
|
||||
'; Procedimiento: ', COALESCE(
|
||||
ERROR_PROCEDURE(),
|
||||
'PA_Vta_TramitePagoSave'
|
||||
),
|
||||
'; Línea: ', ERROR_LINE(),
|
||||
'; Detalle: ', ERROR_MESSAGE()
|
||||
);
|
||||
|
||||
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
|
||||
END CATCH;
|
||||
END;
|
||||
GO
|
||||
|
||||
CREATE OR ALTER PROCEDURE dbo.PA_Vta_TramiteVentaGenerar
|
||||
@CveSolicitud int,
|
||||
@CveTramitePago int,
|
||||
@Observaciones varchar(2000) = NULL,
|
||||
@CveUsuarioEjecuta int,
|
||||
@ErrorMostrar varchar(max) OUTPUT,
|
||||
@ErrorTipo int OUTPUT,
|
||||
@Return bit OUTPUT
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON;
|
||||
|
||||
SELECT
|
||||
@ErrorMostrar = NULL,
|
||||
@ErrorTipo = 0,
|
||||
@Return = 0;
|
||||
|
||||
BEGIN TRY
|
||||
IF EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM dbo.Tra_SolicitudesPagos AS SP
|
||||
INNER JOIN dbo.Ventas AS V
|
||||
ON V.CveVenta = SP.CveVenta
|
||||
WHERE SP.CveSolicitud = @CveSolicitud
|
||||
AND SP.CveTramitePago = @CveTramitePago
|
||||
)
|
||||
BEGIN
|
||||
SELECT
|
||||
@ErrorMostrar = 'La venta del trámite ya fue generada.',
|
||||
@ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
EXEC dbo.PA_Vta_TramiteVentaSave
|
||||
@CveSolicitud = @CveSolicitud,
|
||||
@CveTramitePago = @CveTramitePago,
|
||||
@Observaciones = @Observaciones,
|
||||
@CveUsuarioEjecuta = @CveUsuarioEjecuta,
|
||||
@ErrorMostrar = @ErrorMostrar OUTPUT,
|
||||
@ErrorTipo = @ErrorTipo OUTPUT,
|
||||
@Return = @Return OUTPUT;
|
||||
END TRY
|
||||
BEGIN CATCH
|
||||
SELECT
|
||||
@ErrorMostrar = 'Ocurrió un error al generar la venta del trámite; favor de contactar a Sistemas.',
|
||||
@ErrorTipo = 1,
|
||||
@Return = 0;
|
||||
|
||||
DECLARE @ErrorTecnico nvarchar(2048) = CONCAT(
|
||||
'Número: ', ERROR_NUMBER(),
|
||||
'; Procedimiento: ', COALESCE(
|
||||
ERROR_PROCEDURE(),
|
||||
'PA_Vta_TramiteVentaGenerar'
|
||||
),
|
||||
'; Línea: ', ERROR_LINE(),
|
||||
'; Detalle: ', ERROR_MESSAGE()
|
||||
);
|
||||
|
||||
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
|
||||
END CATCH;
|
||||
END;
|
||||
GO
|
||||
826
Fraccionamientos_Ventas_Pago_Captura_20260828.sql
Normal file
826
Fraccionamientos_Ventas_Pago_Captura_20260828.sql
Normal file
@@ -0,0 +1,826 @@
|
||||
SET NOCOUNT ON;
|
||||
GO
|
||||
|
||||
DECLARE @CveUsuarioCatalogoPago int =
|
||||
(
|
||||
SELECT TOP (1) CveUsuario
|
||||
FROM dbo.Sis_Usuarios
|
||||
WHERE Activo = 1
|
||||
ORDER BY CveUsuario
|
||||
);
|
||||
|
||||
IF NOT EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM dbo.Vta_FormaPago
|
||||
WHERE ClaveFormaPagoSAT = '01'
|
||||
)
|
||||
BEGIN
|
||||
INSERT INTO dbo.Vta_FormaPago
|
||||
(
|
||||
CveFormaPago,
|
||||
FormaPago,
|
||||
ClaveFormaPagoSAT,
|
||||
CveUsuario,
|
||||
FechaIng
|
||||
)
|
||||
VALUES
|
||||
(
|
||||
1,
|
||||
'Efectivo',
|
||||
'01',
|
||||
@CveUsuarioCatalogoPago,
|
||||
CONVERT(date, GETDATE())
|
||||
);
|
||||
END;
|
||||
|
||||
IF NOT EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM dbo.Vta_FormaPago
|
||||
WHERE ClaveFormaPagoSAT = '03'
|
||||
)
|
||||
BEGIN
|
||||
INSERT INTO dbo.Vta_FormaPago
|
||||
(
|
||||
CveFormaPago,
|
||||
FormaPago,
|
||||
ClaveFormaPagoSAT,
|
||||
CveUsuario,
|
||||
FechaIng
|
||||
)
|
||||
VALUES
|
||||
(
|
||||
3,
|
||||
'Transferencia electrónica de fondos',
|
||||
'03',
|
||||
@CveUsuarioCatalogoPago,
|
||||
CONVERT(date, GETDATE())
|
||||
);
|
||||
END;
|
||||
|
||||
IF NOT EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM dbo.Vta_FormaPago
|
||||
WHERE ClaveFormaPagoSAT = '04'
|
||||
)
|
||||
BEGIN
|
||||
INSERT INTO dbo.Vta_FormaPago
|
||||
(
|
||||
CveFormaPago,
|
||||
FormaPago,
|
||||
ClaveFormaPagoSAT,
|
||||
CveUsuario,
|
||||
FechaIng
|
||||
)
|
||||
VALUES
|
||||
(
|
||||
4,
|
||||
'Tarjeta de crédito',
|
||||
'04',
|
||||
@CveUsuarioCatalogoPago,
|
||||
CONVERT(date, GETDATE())
|
||||
);
|
||||
END;
|
||||
GO
|
||||
|
||||
UPDATE V
|
||||
SET
|
||||
CveMetodoPago = ISNULL(V.CveMetodoPago, 2),
|
||||
CveMetodoPago33 = ISNULL(V.CveMetodoPago33, 2),
|
||||
FormaPago = ISNULL(V.FormaPago, 99),
|
||||
CveFormaPago33 = ISNULL(V.CveFormaPago33, 99),
|
||||
FechaVencimiento2 = ISNULL(
|
||||
V.FechaVencimiento2,
|
||||
CONVERT(date, V.Fecha)
|
||||
)
|
||||
FROM dbo.Ventas AS V
|
||||
INNER JOIN dbo.Tra_SolicitudesPagos AS SP
|
||||
ON SP.CveVenta = V.CveVenta
|
||||
WHERE V.CveMetodoPago IS NULL
|
||||
OR V.CveMetodoPago33 IS NULL
|
||||
OR V.FormaPago IS NULL
|
||||
OR V.CveFormaPago33 IS NULL
|
||||
OR V.FechaVencimiento2 IS NULL;
|
||||
GO
|
||||
|
||||
IF COL_LENGTH('dbo.Vta_Pagos', 'CveBancoCuenta') IS NULL
|
||||
BEGIN
|
||||
ALTER TABLE dbo.Vta_Pagos
|
||||
ADD CveBancoCuenta int NULL;
|
||||
END;
|
||||
GO
|
||||
|
||||
IF COL_LENGTH('dbo.Vta_Pagos', 'Observaciones') IS NULL
|
||||
BEGIN
|
||||
ALTER TABLE dbo.Vta_Pagos
|
||||
ADD Observaciones varchar(300) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
END;
|
||||
GO
|
||||
|
||||
IF COL_LENGTH('dbo.Vta_Pagos', 'Autorizado') IS NULL
|
||||
BEGIN
|
||||
ALTER TABLE dbo.Vta_Pagos
|
||||
ADD Autorizado bit NOT NULL
|
||||
CONSTRAINT DF_Vta_Pagos_Autorizado DEFAULT (0) WITH VALUES;
|
||||
END;
|
||||
GO
|
||||
|
||||
IF COL_LENGTH('dbo.Vta_Pagos', 'FechaAutorizacion') IS NULL
|
||||
BEGIN
|
||||
ALTER TABLE dbo.Vta_Pagos
|
||||
ADD FechaAutorizacion datetime NULL;
|
||||
END;
|
||||
GO
|
||||
|
||||
IF COL_LENGTH('dbo.Vta_Pagos', 'CveUsuarioAutoriza') IS NULL
|
||||
BEGIN
|
||||
ALTER TABLE dbo.Vta_Pagos
|
||||
ADD CveUsuarioAutoriza int NULL;
|
||||
END;
|
||||
GO
|
||||
|
||||
IF NOT EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM sys.foreign_keys
|
||||
WHERE parent_object_id = OBJECT_ID('dbo.Vta_Pagos')
|
||||
AND name = 'FK_Vta_Pagos_Banc_BancosCuentas'
|
||||
)
|
||||
BEGIN
|
||||
ALTER TABLE dbo.Vta_Pagos WITH CHECK
|
||||
ADD CONSTRAINT FK_Vta_Pagos_Banc_BancosCuentas
|
||||
FOREIGN KEY (CveBancoCuenta)
|
||||
REFERENCES dbo.Banc_BancosCuentas (CveBancoCuenta);
|
||||
|
||||
ALTER TABLE dbo.Vta_Pagos
|
||||
CHECK CONSTRAINT FK_Vta_Pagos_Banc_BancosCuentas;
|
||||
END;
|
||||
GO
|
||||
|
||||
IF NOT EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM sys.foreign_keys
|
||||
WHERE parent_object_id = OBJECT_ID('dbo.Vta_Pagos')
|
||||
AND name = 'FK_Vta_Pagos_Sis_Usuarios_Autoriza'
|
||||
)
|
||||
BEGIN
|
||||
ALTER TABLE dbo.Vta_Pagos WITH CHECK
|
||||
ADD CONSTRAINT FK_Vta_Pagos_Sis_Usuarios_Autoriza
|
||||
FOREIGN KEY (CveUsuarioAutoriza)
|
||||
REFERENCES dbo.Sis_Usuarios (CveUsuario);
|
||||
|
||||
ALTER TABLE dbo.Vta_Pagos
|
||||
CHECK CONSTRAINT FK_Vta_Pagos_Sis_Usuarios_Autoriza;
|
||||
END;
|
||||
GO
|
||||
|
||||
IF NOT EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM sys.check_constraints
|
||||
WHERE parent_object_id = OBJECT_ID('dbo.Vta_Pagos')
|
||||
AND name = 'CK_Vta_Pagos_Autorizacion'
|
||||
)
|
||||
BEGIN
|
||||
ALTER TABLE dbo.Vta_Pagos WITH CHECK
|
||||
ADD CONSTRAINT CK_Vta_Pagos_Autorizacion
|
||||
CHECK
|
||||
(
|
||||
(
|
||||
Autorizado = 0
|
||||
AND FechaAutorizacion IS NULL
|
||||
AND CveUsuarioAutoriza IS NULL
|
||||
)
|
||||
OR
|
||||
(
|
||||
Autorizado = 1
|
||||
AND FechaAutorizacion IS NOT NULL
|
||||
AND CveUsuarioAutoriza IS NOT NULL
|
||||
)
|
||||
);
|
||||
|
||||
ALTER TABLE dbo.Vta_Pagos
|
||||
CHECK CONSTRAINT CK_Vta_Pagos_Autorizacion;
|
||||
END;
|
||||
GO
|
||||
|
||||
CREATE OR ALTER PROCEDURE dbo.PA_Vta_TramitePagoOpcionesList
|
||||
@CveSolicitud int,
|
||||
@CveTramitePago int,
|
||||
@CveUsuarioEjecuta int,
|
||||
@ErrorMostrar varchar(max) OUTPUT,
|
||||
@ErrorTipo int OUTPUT,
|
||||
@Return bit OUTPUT
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON;
|
||||
|
||||
SELECT
|
||||
@ErrorMostrar = NULL,
|
||||
@ErrorTipo = 0,
|
||||
@Return = 0;
|
||||
|
||||
BEGIN TRY
|
||||
DECLARE @CveVenta int;
|
||||
|
||||
SELECT @CveVenta = V.CveVenta
|
||||
FROM dbo.Tra_SolicitudesPagos AS SP
|
||||
INNER JOIN dbo.Ventas AS V
|
||||
ON V.CveVenta = SP.CveVenta
|
||||
WHERE SP.CveSolicitud = @CveSolicitud
|
||||
AND SP.CveTramitePago = @CveTramitePago;
|
||||
|
||||
IF @CveVenta IS NULL
|
||||
BEGIN
|
||||
SELECT
|
||||
@ErrorMostrar = 'Primero debe generar la venta del trámite.',
|
||||
@ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
SELECT
|
||||
@CveVenta AS CveVenta,
|
||||
CONCAT(
|
||||
'TRA-',
|
||||
RIGHT(
|
||||
REPLICATE('0', 10) +
|
||||
CONVERT(varchar(10), @CveVenta),
|
||||
10
|
||||
)
|
||||
) AS ReferenciaPago;
|
||||
|
||||
SELECT
|
||||
FP.CveFormaPago,
|
||||
FP.ClaveFormaPagoSAT,
|
||||
CASE
|
||||
WHEN NULLIF(LTRIM(RTRIM(FP.ClaveFormaPagoSAT)), '') IS NULL
|
||||
THEN FP.FormaPago
|
||||
ELSE
|
||||
FP.ClaveFormaPagoSAT COLLATE Modern_Spanish_CS_AS
|
||||
+ ' - '
|
||||
+ FP.FormaPago COLLATE Modern_Spanish_CS_AS
|
||||
END AS FormaPago,
|
||||
CONVERT(
|
||||
bit,
|
||||
CASE
|
||||
WHEN FP.ClaveFormaPagoSAT = '04' THEN 0
|
||||
ELSE 1
|
||||
END
|
||||
) AS Disponible
|
||||
FROM dbo.Vta_FormaPago AS FP
|
||||
WHERE FP.ClaveFormaPagoSAT IN ('01', '03', '04')
|
||||
ORDER BY
|
||||
FP.ClaveFormaPagoSAT COLLATE Modern_Spanish_CS_AS,
|
||||
FP.FormaPago COLLATE Modern_Spanish_CS_AS,
|
||||
FP.CveFormaPago;
|
||||
|
||||
SELECT
|
||||
BC.CveBancoCuenta,
|
||||
B.Banco,
|
||||
BC.NumCuenta AS NumeroCuenta,
|
||||
BC.CLABE,
|
||||
B.Banco COLLATE Modern_Spanish_CS_AS
|
||||
+ ' - '
|
||||
+ BC.NumCuenta COLLATE Modern_Spanish_CS_AS
|
||||
+ CASE
|
||||
WHEN NULLIF(LTRIM(RTRIM(BC.CLABE)), '') IS NULL
|
||||
THEN ''
|
||||
ELSE
|
||||
' (CLABE '
|
||||
+ BC.CLABE COLLATE Modern_Spanish_CS_AS
|
||||
+ ')'
|
||||
END AS CuentaBancaria
|
||||
FROM dbo.Banc_BancosCuentas AS BC
|
||||
INNER JOIN dbo.Banc_Bancos AS B
|
||||
ON B.CveBanco = BC.CveBanco
|
||||
WHERE BC.Estatus = 1
|
||||
AND B.Estatus = 1
|
||||
AND NULLIF(LTRIM(RTRIM(BC.CLABE)), '') IS NOT NULL
|
||||
ORDER BY
|
||||
B.Banco COLLATE Modern_Spanish_CS_AS,
|
||||
BC.NumCuenta COLLATE Modern_Spanish_CS_AS,
|
||||
BC.CveBancoCuenta;
|
||||
|
||||
SET @Return = 1;
|
||||
END TRY
|
||||
BEGIN CATCH
|
||||
SELECT
|
||||
@ErrorMostrar = 'Ocurrió un error al consultar las opciones de pago; favor de contactar a Sistemas.',
|
||||
@ErrorTipo = 1,
|
||||
@Return = 0;
|
||||
|
||||
DECLARE @ErrorTecnico nvarchar(2048) = CONCAT(
|
||||
'Número: ', ERROR_NUMBER(),
|
||||
'; Procedimiento: ', COALESCE(
|
||||
ERROR_PROCEDURE(),
|
||||
'PA_Vta_TramitePagoOpcionesList'
|
||||
),
|
||||
'; Línea: ', ERROR_LINE(),
|
||||
'; Detalle: ', ERROR_MESSAGE()
|
||||
);
|
||||
|
||||
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
|
||||
END CATCH;
|
||||
END;
|
||||
GO
|
||||
|
||||
CREATE OR ALTER PROCEDURE dbo.PA_Vta_TramitePagoSave
|
||||
@CveSolicitud int,
|
||||
@CveTramitePago int,
|
||||
@Importe decimal(18, 2),
|
||||
@FechaPago datetime,
|
||||
@CveFormaPago tinyint,
|
||||
@CveBancoCuenta int = NULL,
|
||||
@Observaciones varchar(300) = NULL,
|
||||
@CveUsuarioEjecuta int,
|
||||
@ErrorMostrar varchar(max) OUTPUT,
|
||||
@ErrorTipo int OUTPUT,
|
||||
@Return bit OUTPUT
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON;
|
||||
|
||||
SELECT
|
||||
@ErrorMostrar = NULL,
|
||||
@ErrorTipo = 0,
|
||||
@Return = 0;
|
||||
|
||||
BEGIN TRY
|
||||
DECLARE
|
||||
@CveVenta int,
|
||||
@CveCliente int,
|
||||
@TotalVenta decimal(18, 2),
|
||||
@CvePago int,
|
||||
@ClaveFormaPagoSAT varchar(2),
|
||||
@Referencia varchar(200);
|
||||
|
||||
SELECT
|
||||
@CveVenta = V.CveVenta,
|
||||
@CveCliente = V.CveCliente,
|
||||
@TotalVenta = CONVERT(decimal(18, 2), V.Total)
|
||||
FROM dbo.Tra_SolicitudesPagos AS SP
|
||||
INNER JOIN dbo.Ventas AS V
|
||||
ON V.CveVenta = SP.CveVenta
|
||||
WHERE SP.CveSolicitud = @CveSolicitud
|
||||
AND SP.CveTramitePago = @CveTramitePago;
|
||||
|
||||
IF @CveVenta IS NULL
|
||||
BEGIN
|
||||
SELECT
|
||||
@ErrorMostrar = 'Primero debe generar la venta del trámite.',
|
||||
@ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
IF EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM dbo.Vta_Pagos WITH (UPDLOCK, HOLDLOCK)
|
||||
WHERE CveSolicitud = @CveSolicitud
|
||||
AND CveTramitePago = @CveTramitePago
|
||||
AND CveVenta = @CveVenta
|
||||
AND EsActivo = 1
|
||||
)
|
||||
BEGIN
|
||||
SELECT
|
||||
@ErrorMostrar = 'Ya existe una solicitud de pago activa para esta venta.',
|
||||
@ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
IF @Importe IS NULL OR @Importe <= 0
|
||||
BEGIN
|
||||
SELECT
|
||||
@ErrorMostrar = 'Capture un monto de pago mayor que cero.',
|
||||
@ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
IF @Importe <> @TotalVenta
|
||||
BEGIN
|
||||
SELECT
|
||||
@ErrorMostrar = CONCAT(
|
||||
'El pago debe cubrir el saldo completo de ',
|
||||
FORMAT(@TotalVenta, 'C', 'es-MX'),
|
||||
'.'
|
||||
),
|
||||
@ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
IF @FechaPago IS NULL
|
||||
BEGIN
|
||||
SELECT
|
||||
@ErrorMostrar = 'Capture la fecha del pago.',
|
||||
@ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
SELECT @ClaveFormaPagoSAT = ClaveFormaPagoSAT
|
||||
FROM dbo.Vta_FormaPago
|
||||
WHERE CveFormaPago = @CveFormaPago;
|
||||
|
||||
IF @ClaveFormaPagoSAT IS NULL
|
||||
OR @ClaveFormaPagoSAT NOT IN ('01', '03', '04')
|
||||
BEGIN
|
||||
SELECT
|
||||
@ErrorMostrar = 'Seleccione una forma de pago válida.',
|
||||
@ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
IF @ClaveFormaPagoSAT = '04'
|
||||
BEGIN
|
||||
SELECT
|
||||
@ErrorMostrar = 'El pago con tarjeta todavía no está disponible.',
|
||||
@ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
IF @ClaveFormaPagoSAT = '03'
|
||||
AND @CveBancoCuenta IS NULL
|
||||
BEGIN
|
||||
SELECT
|
||||
@ErrorMostrar = 'Seleccione la cuenta SPEI donde se recibirá la transferencia.',
|
||||
@ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
IF @ClaveFormaPagoSAT = '01'
|
||||
BEGIN
|
||||
SET @CveBancoCuenta = NULL;
|
||||
END;
|
||||
|
||||
IF @CveBancoCuenta IS NOT NULL
|
||||
AND NOT EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM dbo.Banc_BancosCuentas AS BC
|
||||
INNER JOIN dbo.Banc_Bancos AS B
|
||||
ON B.CveBanco = BC.CveBanco
|
||||
WHERE BC.CveBancoCuenta = @CveBancoCuenta
|
||||
AND BC.Estatus = 1
|
||||
AND B.Estatus = 1
|
||||
AND NULLIF(LTRIM(RTRIM(BC.CLABE)), '') IS NOT NULL
|
||||
)
|
||||
BEGIN
|
||||
SELECT
|
||||
@ErrorMostrar = 'Seleccione una cuenta bancaria activa.',
|
||||
@ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
SET @Referencia = CONCAT(
|
||||
'TRA-',
|
||||
RIGHT(
|
||||
REPLICATE('0', 10) +
|
||||
CONVERT(varchar(10), @CveVenta),
|
||||
10
|
||||
)
|
||||
);
|
||||
|
||||
INSERT INTO dbo.Vta_Pagos
|
||||
(
|
||||
CveCliente,
|
||||
CveVenta,
|
||||
CveSolicitud,
|
||||
CveFormaPago,
|
||||
CveMoneda,
|
||||
CvePrePoliza,
|
||||
FechaPago,
|
||||
Importe,
|
||||
Referencia,
|
||||
EsSaldoFavor,
|
||||
EsActivo,
|
||||
FechaAlta,
|
||||
CveUsuario,
|
||||
CveTramitePago,
|
||||
CveBancoCuenta,
|
||||
Observaciones,
|
||||
Autorizado,
|
||||
FechaAutorizacion,
|
||||
CveUsuarioAutoriza
|
||||
)
|
||||
VALUES
|
||||
(
|
||||
@CveCliente,
|
||||
@CveVenta,
|
||||
@CveSolicitud,
|
||||
@CveFormaPago,
|
||||
1,
|
||||
NULL,
|
||||
@FechaPago,
|
||||
@Importe,
|
||||
@Referencia,
|
||||
0,
|
||||
1,
|
||||
GETDATE(),
|
||||
@CveUsuarioEjecuta,
|
||||
@CveTramitePago,
|
||||
@CveBancoCuenta,
|
||||
NULLIF(LTRIM(RTRIM(@Observaciones)), ''),
|
||||
0,
|
||||
NULL,
|
||||
NULL
|
||||
);
|
||||
|
||||
SET @CvePago = CONVERT(int, SCOPE_IDENTITY());
|
||||
|
||||
SELECT
|
||||
@CvePago AS CvePago,
|
||||
@Referencia AS Referencia,
|
||||
CONVERT(bit, 0) AS Autorizado;
|
||||
|
||||
SET @Return = 1;
|
||||
END TRY
|
||||
BEGIN CATCH
|
||||
SELECT
|
||||
@ErrorMostrar = 'Ocurrió un error al registrar el pago de la venta; favor de contactar a Sistemas.',
|
||||
@ErrorTipo = 1,
|
||||
@Return = 0;
|
||||
|
||||
DECLARE @ErrorTecnico nvarchar(2048) = CONCAT(
|
||||
'Número: ', ERROR_NUMBER(),
|
||||
'; Procedimiento: ', COALESCE(
|
||||
ERROR_PROCEDURE(),
|
||||
'PA_Vta_TramitePagoSave'
|
||||
),
|
||||
'; Línea: ', ERROR_LINE(),
|
||||
'; Detalle: ', ERROR_MESSAGE()
|
||||
);
|
||||
|
||||
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
|
||||
END CATCH;
|
||||
END;
|
||||
GO
|
||||
|
||||
CREATE OR ALTER PROCEDURE dbo.PA_Vta_TramiteCondicionesPagoOpcionesList
|
||||
@CveUsuarioEjecuta int,
|
||||
@ErrorMostrar varchar(max) OUTPUT,
|
||||
@ErrorTipo int OUTPUT,
|
||||
@Return bit OUTPUT
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON;
|
||||
|
||||
SELECT
|
||||
@ErrorMostrar = NULL,
|
||||
@ErrorTipo = 0,
|
||||
@Return = 0;
|
||||
|
||||
BEGIN TRY
|
||||
SELECT
|
||||
MP.CveMetodoPago,
|
||||
MP.MetodoPago,
|
||||
MP.ClaveMetodoPagoSAT,
|
||||
MP.ClaveMetodoPagoSAT COLLATE Modern_Spanish_CS_AS
|
||||
+ ' - '
|
||||
+ MP.MetodoPago COLLATE Modern_Spanish_CS_AS AS Descripcion
|
||||
FROM dbo.Vta_MetodoPago AS MP
|
||||
ORDER BY MP.ClaveMetodoPagoSAT, MP.CveMetodoPago;
|
||||
|
||||
SELECT
|
||||
FP.CveFormaPago,
|
||||
FP.ClaveFormaPagoSAT,
|
||||
FP.ClaveFormaPagoSAT COLLATE Modern_Spanish_CS_AS
|
||||
+ ' - '
|
||||
+ FP.FormaPago COLLATE Modern_Spanish_CS_AS AS FormaPago,
|
||||
CONVERT(bit, 1) AS Disponible
|
||||
FROM dbo.Vta_FormaPago AS FP
|
||||
ORDER BY FP.ClaveFormaPagoSAT, FP.CveFormaPago;
|
||||
|
||||
SET @Return = 1;
|
||||
END TRY
|
||||
BEGIN CATCH
|
||||
SELECT
|
||||
@ErrorMostrar = 'Ocurrió un error al consultar las condiciones de pago; favor de contactar a Sistemas.',
|
||||
@ErrorTipo = 1,
|
||||
@Return = 0;
|
||||
|
||||
DECLARE @ErrorTecnico nvarchar(2048) = CONCAT(
|
||||
'Número: ', ERROR_NUMBER(),
|
||||
'; Procedimiento: ', COALESCE(
|
||||
ERROR_PROCEDURE(),
|
||||
'PA_Vta_TramiteCondicionesPagoOpcionesList'
|
||||
),
|
||||
'; Línea: ', ERROR_LINE(),
|
||||
'; Detalle: ', ERROR_MESSAGE()
|
||||
);
|
||||
|
||||
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
|
||||
END CATCH;
|
||||
END;
|
||||
GO
|
||||
|
||||
CREATE OR ALTER PROCEDURE dbo.PA_Vta_TramiteCondicionesPagoSave
|
||||
@CveSolicitud int,
|
||||
@CveTramitePago int,
|
||||
@CveMetodoPago int,
|
||||
@CveFormaPago tinyint,
|
||||
@FechaVencimiento date,
|
||||
@CveUsuarioEjecuta int,
|
||||
@ErrorMostrar varchar(max) OUTPUT,
|
||||
@ErrorTipo int OUTPUT,
|
||||
@Return bit OUTPUT
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON;
|
||||
|
||||
SELECT
|
||||
@ErrorMostrar = NULL,
|
||||
@ErrorTipo = 0,
|
||||
@Return = 0;
|
||||
|
||||
BEGIN TRY
|
||||
DECLARE @CveVenta int;
|
||||
|
||||
SELECT @CveVenta = V.CveVenta
|
||||
FROM dbo.Tra_SolicitudesPagos AS SP
|
||||
INNER JOIN dbo.Ventas AS V
|
||||
ON V.CveVenta = SP.CveVenta
|
||||
WHERE SP.CveSolicitud = @CveSolicitud
|
||||
AND SP.CveTramitePago = @CveTramitePago;
|
||||
|
||||
IF @CveVenta IS NULL
|
||||
BEGIN
|
||||
SELECT
|
||||
@ErrorMostrar = 'Primero debe generar la venta del trámite.',
|
||||
@ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
IF EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM dbo.Ventas
|
||||
WHERE CveVenta = @CveVenta
|
||||
AND SeTimbro = 1
|
||||
)
|
||||
BEGIN
|
||||
SELECT
|
||||
@ErrorMostrar = 'Las condiciones de una venta timbrada no se pueden modificar.',
|
||||
@ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
IF NOT EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM dbo.Vta_MetodoPago
|
||||
WHERE CveMetodoPago = @CveMetodoPago
|
||||
)
|
||||
BEGIN
|
||||
SELECT
|
||||
@ErrorMostrar = 'Seleccione un método de pago válido.',
|
||||
@ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
IF NOT EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM dbo.Vta_FormaPago
|
||||
WHERE CveFormaPago = @CveFormaPago
|
||||
)
|
||||
BEGIN
|
||||
SELECT
|
||||
@ErrorMostrar = 'Seleccione una forma de pago válida.',
|
||||
@ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
IF @FechaVencimiento IS NULL
|
||||
BEGIN
|
||||
SELECT
|
||||
@ErrorMostrar = 'Capture una fecha de vencimiento válida.',
|
||||
@ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
UPDATE dbo.Ventas
|
||||
SET
|
||||
CveMetodoPago = @CveMetodoPago,
|
||||
CveMetodoPago33 = @CveMetodoPago,
|
||||
FormaPago = @CveFormaPago,
|
||||
CveFormaPago33 = @CveFormaPago,
|
||||
FechaVencimiento2 = @FechaVencimiento,
|
||||
CveUsuarioModifico = @CveUsuarioEjecuta
|
||||
WHERE CveVenta = @CveVenta;
|
||||
|
||||
SET @Return = 1;
|
||||
END TRY
|
||||
BEGIN CATCH
|
||||
SELECT
|
||||
@ErrorMostrar = 'Ocurrió un error al actualizar las condiciones de pago; favor de contactar a Sistemas.',
|
||||
@ErrorTipo = 1,
|
||||
@Return = 0;
|
||||
|
||||
DECLARE @ErrorTecnico nvarchar(2048) = CONCAT(
|
||||
'Número: ', ERROR_NUMBER(),
|
||||
'; Procedimiento: ', COALESCE(
|
||||
ERROR_PROCEDURE(),
|
||||
'PA_Vta_TramiteCondicionesPagoSave'
|
||||
),
|
||||
'; Línea: ', ERROR_LINE(),
|
||||
'; Detalle: ', ERROR_MESSAGE()
|
||||
);
|
||||
|
||||
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
|
||||
END CATCH;
|
||||
END;
|
||||
GO
|
||||
|
||||
CREATE OR ALTER PROCEDURE dbo.PA_Vta_FraccionamientoPagoRealizadoList
|
||||
@CveFraccionamiento int,
|
||||
@CveUsuarioEjecuta int,
|
||||
@ErrorMostrar varchar(max) OUTPUT,
|
||||
@ErrorTipo int OUTPUT,
|
||||
@Return bit OUTPUT
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON;
|
||||
|
||||
SELECT
|
||||
@ErrorMostrar = NULL,
|
||||
@ErrorTipo = 0,
|
||||
@Return = 0;
|
||||
|
||||
BEGIN TRY
|
||||
IF NOT EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM dbo.Fraccionamientos
|
||||
WHERE CveFraccionamiento = @CveFraccionamiento
|
||||
)
|
||||
BEGIN
|
||||
SELECT
|
||||
@ErrorMostrar = 'El fraccionamiento solicitado no existe.',
|
||||
@ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
SELECT
|
||||
SP.CveSolicitudPago,
|
||||
SP.CveSolicitud,
|
||||
SP.CveTramitePago,
|
||||
V.CveVenta,
|
||||
VP.CvePago,
|
||||
V.SerieFolio,
|
||||
V.Fecha,
|
||||
VP.FechaPago,
|
||||
VP.Referencia,
|
||||
VP.Autorizado,
|
||||
VP.FechaAutorizacion,
|
||||
S.Folio AS FolioSolicitud,
|
||||
E.Etapa,
|
||||
TT.TipoTramite,
|
||||
P.Nombre AS NombrePago,
|
||||
CONVERT(decimal(18, 2), V.SubTotal) AS SubTotal,
|
||||
CONVERT(decimal(18, 2), V.IVA) AS IVA,
|
||||
CONVERT(decimal(18, 2), VP.Importe) AS Total
|
||||
FROM dbo.Tra_SolicitudesPagos AS SP
|
||||
INNER JOIN dbo.Tra_Solicitudes AS S
|
||||
ON S.CveSolicitud = SP.CveSolicitud
|
||||
INNER JOIN dbo.FraccionamientosEtapas AS E
|
||||
ON E.CveFraccionamientoEtapa = S.CveFraccionamientoEtapa
|
||||
INNER JOIN dbo.Tra_TiposTramite AS TT
|
||||
ON TT.CveTipoTramite = S.CveTipoTramite
|
||||
INNER JOIN dbo.Tra_Pagos AS P
|
||||
ON P.CveTramitePago = SP.CveTramitePago
|
||||
INNER JOIN dbo.Ventas AS V
|
||||
ON V.CveVenta = SP.CveVenta
|
||||
INNER JOIN dbo.Vta_Pagos AS VP
|
||||
ON VP.CveVenta = V.CveVenta
|
||||
AND VP.CveSolicitud = SP.CveSolicitud
|
||||
AND VP.CveTramitePago = SP.CveTramitePago
|
||||
AND VP.EsActivo = 1
|
||||
WHERE S.CveFraccionamiento = @CveFraccionamiento
|
||||
ORDER BY
|
||||
VP.FechaPago DESC,
|
||||
VP.CvePago DESC;
|
||||
|
||||
SET @Return = 1;
|
||||
END TRY
|
||||
BEGIN CATCH
|
||||
SELECT
|
||||
@ErrorMostrar = 'Ocurrió un error al consultar los pagos realizados; favor de contactar a Sistemas.',
|
||||
@ErrorTipo = 1,
|
||||
@Return = 0;
|
||||
|
||||
DECLARE @ErrorTecnico nvarchar(2048) = CONCAT(
|
||||
'Número: ', ERROR_NUMBER(),
|
||||
'; Procedimiento: ', COALESCE(
|
||||
ERROR_PROCEDURE(),
|
||||
'PA_Vta_FraccionamientoPagoRealizadoList'
|
||||
),
|
||||
'; Línea: ', ERROR_LINE(),
|
||||
'; Detalle: ', ERROR_MESSAGE()
|
||||
);
|
||||
|
||||
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
|
||||
END CATCH;
|
||||
END;
|
||||
GO
|
||||
1147
Fraccionamientos_Ventas_Tramites_20260827.sql
Normal file
1147
Fraccionamientos_Ventas_Tramites_20260827.sql
Normal file
File diff suppressed because it is too large
Load Diff
110
GIS_Capas_Configuracion_20261002.sql
Normal file
110
GIS_Capas_Configuracion_20261002.sql
Normal file
@@ -0,0 +1,110 @@
|
||||
-- Preparado para revisión. La instalación requiere autorización independiente.
|
||||
-- La configuración se conserva por etapa y nombre de capa del archivo original.
|
||||
IF OBJECT_ID(N'dbo.FraccionamientosEtapasGISCapas', N'U') IS NULL
|
||||
BEGIN
|
||||
CREATE TABLE dbo.FraccionamientosEtapasGISCapas
|
||||
(
|
||||
CveFraccionamientoEtapa int NOT NULL,
|
||||
NombreCapa nvarchar(250) COLLATE Modern_Spanish_CS_AS NOT NULL,
|
||||
TipoCapa nvarchar(20) COLLATE Modern_Spanish_CS_AS NOT NULL,
|
||||
Color nvarchar(7) COLLATE Modern_Spanish_CS_AS NOT NULL,
|
||||
EsVisible bit NOT NULL,
|
||||
CveUsuarioModifica int NOT NULL,
|
||||
FechaModificacion datetime2 NOT NULL,
|
||||
CONSTRAINT PK_FraccionamientosEtapasGISCapas
|
||||
PRIMARY KEY (CveFraccionamientoEtapa, NombreCapa),
|
||||
CONSTRAINT FK_FraccionamientosEtapasGISCapas_Etapa
|
||||
FOREIGN KEY (CveFraccionamientoEtapa)
|
||||
REFERENCES dbo.FraccionamientosEtapas (CveFraccionamientoEtapa),
|
||||
CONSTRAINT CK_FraccionamientosEtapasGISCapas_Tipo
|
||||
CHECK (TipoCapa IN (N'Agua', N'Drenaje', N'Lotificacion', N'Pozos', N'Otros')),
|
||||
CONSTRAINT CK_FraccionamientosEtapasGISCapas_Color
|
||||
CHECK (LEN(Color) = 7 AND Color COLLATE Latin1_General_BIN2
|
||||
LIKE N'#[0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f]')
|
||||
);
|
||||
END;
|
||||
GO
|
||||
|
||||
CREATE OR ALTER PROCEDURE dbo.PA_Fraccionamientos_EtapaGISCapasList
|
||||
@CveFraccionamientoEtapa int,
|
||||
@CveUsuarioEjecuta int,
|
||||
@ErrorMostrar varchar(max) OUTPUT,
|
||||
@ErrorTipo int OUTPUT,
|
||||
@Return bit OUTPUT
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON;
|
||||
SELECT @ErrorMostrar = NULL, @ErrorTipo = 0, @Return = 0;
|
||||
BEGIN TRY
|
||||
SELECT NombreCapa, TipoCapa, Color, EsVisible
|
||||
FROM dbo.FraccionamientosEtapasGISCapas
|
||||
WHERE CveFraccionamientoEtapa = @CveFraccionamientoEtapa;
|
||||
|
||||
SET @Return = 1;
|
||||
END TRY
|
||||
BEGIN CATCH
|
||||
SELECT
|
||||
@ErrorMostrar = 'No fue posible consultar la configuración de capas GIS.',
|
||||
@ErrorTipo = 1,
|
||||
@Return = 0;
|
||||
DECLARE @ErrorTecnico nvarchar(2048) = CONCAT(
|
||||
'Número: ', ERROR_NUMBER(), '; Procedimiento: ', ERROR_PROCEDURE(),
|
||||
'; Línea: ', ERROR_LINE(), '; Detalle: ', ERROR_MESSAGE());
|
||||
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
|
||||
END CATCH;
|
||||
END;
|
||||
GO
|
||||
|
||||
CREATE OR ALTER PROCEDURE dbo.PA_Fraccionamientos_EtapaGISCapasSave
|
||||
@CveFraccionamientoEtapa int,
|
||||
@NombreCapa nvarchar(250),
|
||||
@TipoCapa nvarchar(20),
|
||||
@Color nvarchar(7),
|
||||
@EsVisible bit,
|
||||
@CveUsuarioEjecuta int,
|
||||
@ErrorMostrar varchar(max) OUTPUT,
|
||||
@ErrorTipo int OUTPUT,
|
||||
@Return bit OUTPUT
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON;
|
||||
SELECT @ErrorMostrar = NULL, @ErrorTipo = 0, @Return = 0;
|
||||
BEGIN TRY
|
||||
-- El servicio mantiene la transacción ambiental para proteger este upsert.
|
||||
UPDATE dbo.FraccionamientosEtapasGISCapas WITH (UPDLOCK, HOLDLOCK)
|
||||
SET TipoCapa = @TipoCapa,
|
||||
Color = @Color,
|
||||
EsVisible = @EsVisible,
|
||||
CveUsuarioModifica = @CveUsuarioEjecuta,
|
||||
FechaModificacion = SYSDATETIME()
|
||||
WHERE CveFraccionamientoEtapa = @CveFraccionamientoEtapa
|
||||
AND NombreCapa = @NombreCapa;
|
||||
|
||||
IF @@ROWCOUNT = 0
|
||||
BEGIN
|
||||
INSERT INTO dbo.FraccionamientosEtapasGISCapas
|
||||
(
|
||||
CveFraccionamientoEtapa, NombreCapa, TipoCapa, Color,
|
||||
EsVisible, CveUsuarioModifica, FechaModificacion
|
||||
)
|
||||
VALUES
|
||||
(
|
||||
@CveFraccionamientoEtapa, @NombreCapa, @TipoCapa, @Color,
|
||||
@EsVisible, @CveUsuarioEjecuta, SYSDATETIME()
|
||||
);
|
||||
END;
|
||||
|
||||
SET @Return = 1;
|
||||
END TRY
|
||||
BEGIN CATCH
|
||||
SELECT
|
||||
@ErrorMostrar = 'No fue posible guardar la configuración de la capa GIS.',
|
||||
@ErrorTipo = 1,
|
||||
@Return = 0;
|
||||
DECLARE @ErrorTecnico nvarchar(2048) = CONCAT(
|
||||
'Número: ', ERROR_NUMBER(), '; Procedimiento: ', ERROR_PROCEDURE(),
|
||||
'; Línea: ', ERROR_LINE(), '; Detalle: ', ERROR_MESSAGE());
|
||||
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
|
||||
END CATCH;
|
||||
END;
|
||||
GO
|
||||
2824
Impuestos_Costos_Ventas_Tramites_20260901.sql
Normal file
2824
Impuestos_Costos_Ventas_Tramites_20260901.sql
Normal file
File diff suppressed because it is too large
Load Diff
BIN
Ley de Ingresos 2024.pdf
Normal file
BIN
Ley de Ingresos 2024.pdf
Normal file
Binary file not shown.
BIN
Ley de Ingresos plataforma.docx
Normal file
BIN
Ley de Ingresos plataforma.docx
Normal file
Binary file not shown.
310
Menu_Catalogos_Productos.sql
Normal file
310
Menu_Catalogos_Productos.sql
Normal file
@@ -0,0 +1,310 @@
|
||||
SET NOCOUNT ON;
|
||||
SET XACT_ABORT ON;
|
||||
|
||||
BEGIN TRY
|
||||
BEGIN TRANSACTION;
|
||||
|
||||
DECLARE @CvePlataforma int;
|
||||
DECLARE @CveCatalogos int;
|
||||
DECLARE @CveProductosGrupo int;
|
||||
DECLARE @CveProductos int;
|
||||
DECLARE @CveUnidadesMedida int;
|
||||
DECLARE @CveClasificacion int;
|
||||
|
||||
SELECT TOP (1)
|
||||
@CvePlataforma = CvePlataforma
|
||||
FROM dbo.Sis_Plataformas
|
||||
WHERE NombrePlataforma = 'Plataforma de Desarrolladores'
|
||||
ORDER BY CvePlataforma;
|
||||
|
||||
SELECT TOP (1)
|
||||
@CveCatalogos = CveModulo
|
||||
FROM dbo.Sis_Modulos
|
||||
WHERE CvePlataforma = @CvePlataforma
|
||||
AND CveModuloPadre IS NULL
|
||||
AND NombreModulo = 'Catálogos'
|
||||
AND Activo = 1
|
||||
ORDER BY CveModulo;
|
||||
|
||||
IF @CveCatalogos IS NULL
|
||||
BEGIN
|
||||
THROW 50001, 'No se encontró el módulo Catálogos.', 1;
|
||||
END;
|
||||
|
||||
SELECT TOP (1)
|
||||
@CveProductos = CveModulo
|
||||
FROM dbo.Sis_Modulos
|
||||
WHERE CvePlataforma = @CvePlataforma
|
||||
AND LOWER(ISNULL(Url, '')) =
|
||||
LOWER('~/Pages/Catalogos/ProductosServicios.aspx')
|
||||
COLLATE Modern_Spanish_CS_AS
|
||||
ORDER BY CveModulo;
|
||||
|
||||
SELECT TOP (1)
|
||||
@CveProductosGrupo = CveModulo
|
||||
FROM dbo.Sis_Modulos
|
||||
WHERE CvePlataforma = @CvePlataforma
|
||||
AND CveModuloPadre = @CveCatalogos
|
||||
AND Url IS NULL
|
||||
AND NombreModulo = 'Productos'
|
||||
ORDER BY CveModulo;
|
||||
|
||||
IF @CveProductosGrupo IS NULL
|
||||
BEGIN
|
||||
INSERT dbo.Sis_Modulos
|
||||
(
|
||||
CveModuloPadre,
|
||||
CvePlataforma,
|
||||
NombreModulo,
|
||||
Descripcion,
|
||||
Url,
|
||||
ClaseCssIcono,
|
||||
ClaseCssEstilo,
|
||||
OrdenVisualizacion,
|
||||
Visible,
|
||||
Activo,
|
||||
FechaCreacion
|
||||
)
|
||||
VALUES
|
||||
(
|
||||
@CveCatalogos,
|
||||
@CvePlataforma,
|
||||
'Productos',
|
||||
'Catálogos de productos',
|
||||
NULL,
|
||||
'fa fa-cubes',
|
||||
NULL,
|
||||
50,
|
||||
1,
|
||||
1,
|
||||
GETDATE()
|
||||
);
|
||||
|
||||
SET @CveProductosGrupo = CONVERT(int, SCOPE_IDENTITY());
|
||||
END
|
||||
ELSE
|
||||
BEGIN
|
||||
UPDATE dbo.Sis_Modulos
|
||||
SET Descripcion = 'Catálogos de productos',
|
||||
ClaseCssIcono = 'fa fa-cubes',
|
||||
OrdenVisualizacion = 50,
|
||||
Visible = 1,
|
||||
Activo = 1,
|
||||
FechaActualizacion = GETDATE()
|
||||
WHERE CveModulo = @CveProductosGrupo;
|
||||
END;
|
||||
|
||||
IF @CveProductos IS NULL
|
||||
BEGIN
|
||||
INSERT dbo.Sis_Modulos
|
||||
(
|
||||
CveModuloPadre,
|
||||
CvePlataforma,
|
||||
NombreModulo,
|
||||
Descripcion,
|
||||
Url,
|
||||
ClaseCssIcono,
|
||||
ClaseCssEstilo,
|
||||
OrdenVisualizacion,
|
||||
Visible,
|
||||
Activo,
|
||||
FechaCreacion
|
||||
)
|
||||
VALUES
|
||||
(
|
||||
@CveProductosGrupo,
|
||||
@CvePlataforma,
|
||||
'Productos',
|
||||
'Productos y servicios',
|
||||
'~/Pages/Catalogos/ProductosServicios.aspx',
|
||||
'fa fa-cube',
|
||||
NULL,
|
||||
10,
|
||||
1,
|
||||
1,
|
||||
GETDATE()
|
||||
);
|
||||
|
||||
SET @CveProductos = CONVERT(int, SCOPE_IDENTITY());
|
||||
END
|
||||
ELSE
|
||||
BEGIN
|
||||
UPDATE dbo.Sis_Modulos
|
||||
SET CveModuloPadre = @CveProductosGrupo,
|
||||
NombreModulo = 'Productos',
|
||||
Descripcion = 'Productos y servicios',
|
||||
ClaseCssIcono = 'fa fa-cube',
|
||||
OrdenVisualizacion = 10,
|
||||
Visible = 1,
|
||||
Activo = 1,
|
||||
FechaActualizacion = GETDATE()
|
||||
WHERE CveModulo = @CveProductos;
|
||||
END;
|
||||
|
||||
SELECT TOP (1)
|
||||
@CveUnidadesMedida = CveModulo
|
||||
FROM dbo.Sis_Modulos
|
||||
WHERE CvePlataforma = @CvePlataforma
|
||||
AND LOWER(ISNULL(Url, '')) =
|
||||
LOWER('~/Pages/Catalogos/UnidadesMedida.aspx')
|
||||
COLLATE Modern_Spanish_CS_AS
|
||||
ORDER BY CveModulo;
|
||||
|
||||
IF @CveUnidadesMedida IS NULL
|
||||
BEGIN
|
||||
INSERT dbo.Sis_Modulos
|
||||
(
|
||||
CveModuloPadre,
|
||||
CvePlataforma,
|
||||
NombreModulo,
|
||||
Descripcion,
|
||||
Url,
|
||||
ClaseCssIcono,
|
||||
ClaseCssEstilo,
|
||||
OrdenVisualizacion,
|
||||
Visible,
|
||||
Activo,
|
||||
FechaCreacion
|
||||
)
|
||||
VALUES
|
||||
(
|
||||
@CveProductosGrupo,
|
||||
@CvePlataforma,
|
||||
'Unidades de medida',
|
||||
'Catálogo de unidades de medida',
|
||||
'~/Pages/Catalogos/UnidadesMedida.aspx',
|
||||
'fa fa-balance-scale',
|
||||
NULL,
|
||||
20,
|
||||
1,
|
||||
1,
|
||||
GETDATE()
|
||||
);
|
||||
|
||||
SET @CveUnidadesMedida = CONVERT(int, SCOPE_IDENTITY());
|
||||
END
|
||||
ELSE
|
||||
BEGIN
|
||||
UPDATE dbo.Sis_Modulos
|
||||
SET CveModuloPadre = @CveProductosGrupo,
|
||||
NombreModulo = 'Unidades de medida',
|
||||
Descripcion = 'Catálogo de unidades de medida',
|
||||
ClaseCssIcono = 'fa fa-balance-scale',
|
||||
OrdenVisualizacion = 20,
|
||||
Visible = 1,
|
||||
Activo = 1,
|
||||
FechaActualizacion = GETDATE()
|
||||
WHERE CveModulo = @CveUnidadesMedida;
|
||||
END;
|
||||
|
||||
SELECT TOP (1)
|
||||
@CveClasificacion = CveModulo
|
||||
FROM dbo.Sis_Modulos
|
||||
WHERE CvePlataforma = @CvePlataforma
|
||||
AND LOWER(ISNULL(Url, '')) =
|
||||
LOWER('~/Pages/Catalogos/Clasificaciones.aspx')
|
||||
COLLATE Modern_Spanish_CS_AS
|
||||
ORDER BY CveModulo;
|
||||
|
||||
IF @CveClasificacion IS NULL
|
||||
BEGIN
|
||||
INSERT dbo.Sis_Modulos
|
||||
(
|
||||
CveModuloPadre,
|
||||
CvePlataforma,
|
||||
NombreModulo,
|
||||
Descripcion,
|
||||
Url,
|
||||
ClaseCssIcono,
|
||||
ClaseCssEstilo,
|
||||
OrdenVisualizacion,
|
||||
Visible,
|
||||
Activo,
|
||||
FechaCreacion
|
||||
)
|
||||
VALUES
|
||||
(
|
||||
@CveProductosGrupo,
|
||||
@CvePlataforma,
|
||||
'Clasificación',
|
||||
'Catálogo de clasificaciones',
|
||||
'~/Pages/Catalogos/Clasificaciones.aspx',
|
||||
'fa fa-tags',
|
||||
NULL,
|
||||
30,
|
||||
1,
|
||||
1,
|
||||
GETDATE()
|
||||
);
|
||||
|
||||
SET @CveClasificacion = CONVERT(int, SCOPE_IDENTITY());
|
||||
END
|
||||
ELSE
|
||||
BEGIN
|
||||
UPDATE dbo.Sis_Modulos
|
||||
SET CveModuloPadre = @CveProductosGrupo,
|
||||
NombreModulo = 'Clasificación',
|
||||
Descripcion = 'Catálogo de clasificaciones',
|
||||
ClaseCssIcono = 'fa fa-tags',
|
||||
OrdenVisualizacion = 30,
|
||||
Visible = 1,
|
||||
Activo = 1,
|
||||
FechaActualizacion = GETDATE()
|
||||
WHERE CveModulo = @CveClasificacion;
|
||||
END;
|
||||
|
||||
DECLARE @ModulosNuevos TABLE
|
||||
(
|
||||
CveModulo int NOT NULL PRIMARY KEY
|
||||
);
|
||||
|
||||
INSERT INTO @ModulosNuevos (CveModulo)
|
||||
VALUES
|
||||
(@CveProductosGrupo),
|
||||
(@CveUnidadesMedida),
|
||||
(@CveClasificacion);
|
||||
|
||||
INSERT dbo.Sis_RolesModulos
|
||||
(
|
||||
CveRol,
|
||||
CveModulo,
|
||||
PuedeVer,
|
||||
PuedeCrear,
|
||||
PuedeModificar,
|
||||
PuedeEliminar,
|
||||
PuedeImprimir,
|
||||
PuedeExportar,
|
||||
FechaCreacion
|
||||
)
|
||||
SELECT
|
||||
RM.CveRol,
|
||||
M.CveModulo,
|
||||
RM.PuedeVer,
|
||||
RM.PuedeCrear,
|
||||
RM.PuedeModificar,
|
||||
RM.PuedeEliminar,
|
||||
RM.PuedeImprimir,
|
||||
RM.PuedeExportar,
|
||||
GETDATE()
|
||||
FROM dbo.Sis_RolesModulos AS RM
|
||||
CROSS JOIN @ModulosNuevos AS M
|
||||
WHERE RM.CveModulo = @CveProductos
|
||||
AND NOT EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM dbo.Sis_RolesModulos AS ExistingPermission
|
||||
WHERE ExistingPermission.CveRol = RM.CveRol
|
||||
AND ExistingPermission.CveModulo = M.CveModulo
|
||||
);
|
||||
|
||||
COMMIT TRANSACTION;
|
||||
END TRY
|
||||
BEGIN CATCH
|
||||
IF XACT_STATE() <> 0
|
||||
BEGIN
|
||||
ROLLBACK TRANSACTION;
|
||||
END;
|
||||
|
||||
THROW;
|
||||
END CATCH;
|
||||
GO
|
||||
249
Menu_Catalogos_Tramites_Internos.sql
Normal file
249
Menu_Catalogos_Tramites_Internos.sql
Normal file
@@ -0,0 +1,249 @@
|
||||
SET NOCOUNT ON;
|
||||
SET XACT_ABORT ON;
|
||||
|
||||
BEGIN TRY
|
||||
BEGIN TRANSACTION;
|
||||
|
||||
DECLARE @CvePlataforma int;
|
||||
|
||||
SELECT TOP (1)
|
||||
@CvePlataforma = CvePlataforma
|
||||
FROM dbo.Sis_Plataformas
|
||||
WHERE NombrePlataforma = 'Plataforma de Desarrolladores'
|
||||
ORDER BY CvePlataforma;
|
||||
|
||||
IF @CvePlataforma IS NULL
|
||||
BEGIN
|
||||
THROW 50001, 'No se encontró la plataforma de desarrolladores.', 1;
|
||||
END;
|
||||
|
||||
DECLARE @Menu TABLE
|
||||
(
|
||||
Clave varchar(50) NOT NULL PRIMARY KEY,
|
||||
ClavePadre varchar(50) NULL,
|
||||
NombreModulo varchar(150) NOT NULL,
|
||||
Url varchar(500) NULL,
|
||||
Icono varchar(150) NULL,
|
||||
Orden int NOT NULL,
|
||||
Visible bit NOT NULL,
|
||||
Nivel int NOT NULL
|
||||
);
|
||||
|
||||
INSERT INTO @Menu
|
||||
(Clave, ClavePadre, NombreModulo, Url, Icono, Orden, Visible, Nivel)
|
||||
VALUES
|
||||
('Catalogos', NULL, 'Catálogos', NULL, 'fa fa-list-alt', 30, 1, 0),
|
||||
('EstatusSolicitud', 'Catalogos', 'Estatus de solicitud', '~/Pages/Catalogos/EstatusSolicitud.aspx', 'fa fa-check-circle', 10, 1, 1),
|
||||
('TiposTramite', 'Catalogos', 'Tipos de trámite', '~/Pages/Catalogos/TiposTramite.aspx', 'fa fa-file-text-o', 20, 1, 1),
|
||||
('TipoTramiteDetalle', 'TiposTramite', 'Detalle de tipo de trámite', '~/Pages/Catalogos/TipoTramiteDetalle.aspx', 'fa fa-question-circle', 10, 0, 2),
|
||||
('TiposDocumento', 'Catalogos', 'Tipos de documento', '~/Pages/Catalogos/TiposDocumento.aspx', 'fa fa-file-o', 30, 1, 1),
|
||||
('DocumentosRequeridos', 'Catalogos', 'Documentos requeridos', '~/Pages/Catalogos/DocumentosRequeridos.aspx', 'fa fa-paperclip', 40, 1, 1),
|
||||
('ProductosGrupo', 'Catalogos', 'Productos', NULL, 'fa fa-cubes', 50, 1, 1),
|
||||
('ProductosServicios', 'ProductosGrupo', 'Productos', '~/Pages/Catalogos/ProductosServicios.aspx', 'fa fa-cube', 10, 1, 2),
|
||||
('UnidadesMedida', 'ProductosGrupo', 'Unidades de medida', '~/Pages/Catalogos/UnidadesMedida.aspx', 'fa fa-balance-scale', 20, 1, 2),
|
||||
('Clasificaciones', 'ProductosGrupo', 'Clasificación', '~/Pages/Catalogos/Clasificaciones.aspx', 'fa fa-tags', 30, 1, 2);
|
||||
|
||||
DECLARE @Ids TABLE
|
||||
(
|
||||
Clave varchar(50) NOT NULL PRIMARY KEY,
|
||||
CveModulo int NOT NULL
|
||||
);
|
||||
|
||||
DECLARE
|
||||
@Clave varchar(50),
|
||||
@ClavePadre varchar(50),
|
||||
@NombreModulo varchar(150),
|
||||
@Url varchar(500),
|
||||
@Icono varchar(150),
|
||||
@Orden int,
|
||||
@Visible bit,
|
||||
@Nivel int,
|
||||
@CveModuloPadre int,
|
||||
@CveModulo int;
|
||||
|
||||
DECLARE CatalogoCursor CURSOR LOCAL FAST_FORWARD FOR
|
||||
SELECT
|
||||
Clave,
|
||||
ClavePadre,
|
||||
NombreModulo,
|
||||
Url,
|
||||
Icono,
|
||||
Orden,
|
||||
Visible,
|
||||
Nivel
|
||||
FROM @Menu
|
||||
ORDER BY Nivel, Orden, Clave;
|
||||
|
||||
OPEN CatalogoCursor;
|
||||
FETCH NEXT FROM CatalogoCursor
|
||||
INTO @Clave, @ClavePadre, @NombreModulo, @Url, @Icono, @Orden,
|
||||
@Visible, @Nivel;
|
||||
|
||||
WHILE @@FETCH_STATUS = 0
|
||||
BEGIN
|
||||
SELECT @CveModuloPadre = NULL, @CveModulo = NULL;
|
||||
|
||||
IF @ClavePadre IS NOT NULL
|
||||
BEGIN
|
||||
SELECT @CveModuloPadre = CveModulo
|
||||
FROM @Ids
|
||||
WHERE Clave = @ClavePadre;
|
||||
END;
|
||||
|
||||
SELECT TOP (1)
|
||||
@CveModulo = CveModulo
|
||||
FROM dbo.Sis_Modulos
|
||||
WHERE CvePlataforma = @CvePlataforma
|
||||
AND
|
||||
(
|
||||
(@Url IS NOT NULL AND LOWER(ISNULL(Url, '')) = LOWER(@Url) COLLATE Modern_Spanish_CS_AS)
|
||||
OR
|
||||
(@Url IS NULL AND Url IS NULL AND NombreModulo = @NombreModulo COLLATE Modern_Spanish_CS_AS)
|
||||
)
|
||||
ORDER BY CveModulo;
|
||||
|
||||
IF @CveModulo IS NULL
|
||||
BEGIN
|
||||
INSERT dbo.Sis_Modulos
|
||||
(CveModuloPadre, CvePlataforma, NombreModulo, Descripcion, Url,
|
||||
ClaseCssIcono, ClaseCssEstilo, OrdenVisualizacion, Visible,
|
||||
Activo, FechaCreacion)
|
||||
VALUES
|
||||
(@CveModuloPadre, @CvePlataforma, @NombreModulo, @NombreModulo,
|
||||
@Url, @Icono, NULL, @Orden, @Visible, 1, GETDATE());
|
||||
|
||||
SET @CveModulo = CONVERT(int, SCOPE_IDENTITY());
|
||||
END
|
||||
ELSE
|
||||
BEGIN
|
||||
UPDATE dbo.Sis_Modulos
|
||||
SET CveModuloPadre = @CveModuloPadre,
|
||||
NombreModulo = @NombreModulo COLLATE Modern_Spanish_CS_AS,
|
||||
Descripcion = @NombreModulo,
|
||||
Url = @Url,
|
||||
ClaseCssIcono = @Icono,
|
||||
OrdenVisualizacion = @Orden,
|
||||
Visible = @Visible,
|
||||
Activo = 1,
|
||||
FechaActualizacion = GETDATE()
|
||||
WHERE CveModulo = @CveModulo;
|
||||
END;
|
||||
|
||||
INSERT INTO @Ids (Clave, CveModulo)
|
||||
VALUES (@Clave, @CveModulo);
|
||||
|
||||
FETCH NEXT FROM CatalogoCursor
|
||||
INTO @Clave, @ClavePadre, @NombreModulo, @Url, @Icono, @Orden,
|
||||
@Visible, @Nivel;
|
||||
END;
|
||||
|
||||
CLOSE CatalogoCursor;
|
||||
DEALLOCATE CatalogoCursor;
|
||||
|
||||
UPDATE RM
|
||||
SET PuedeVer = CASE WHEN RM.CveRol IN (1, 2) THEN 1 ELSE 0 END,
|
||||
PuedeCrear = CASE WHEN RM.CveRol IN (1, 2) THEN 1 ELSE 0 END,
|
||||
PuedeModificar = CASE WHEN RM.CveRol IN (1, 2) THEN 1 ELSE 0 END,
|
||||
PuedeEliminar = CASE WHEN RM.CveRol IN (1, 2) THEN 1 ELSE 0 END
|
||||
FROM dbo.Sis_RolesModulos AS RM
|
||||
INNER JOIN @Ids AS I ON I.CveModulo = RM.CveModulo;
|
||||
|
||||
INSERT dbo.Sis_RolesModulos
|
||||
(CveRol, CveModulo, PuedeVer, PuedeCrear, PuedeModificar,
|
||||
PuedeEliminar, PuedeImprimir, PuedeExportar, FechaCreacion)
|
||||
SELECT
|
||||
R.CveRol,
|
||||
I.CveModulo,
|
||||
1,
|
||||
1,
|
||||
1,
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
GETDATE()
|
||||
FROM dbo.Sis_Roles AS R
|
||||
CROSS JOIN @Ids AS I
|
||||
WHERE R.CveRol IN (1, 2)
|
||||
AND NOT EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM dbo.Sis_RolesModulos AS RM
|
||||
WHERE RM.CveRol = R.CveRol
|
||||
AND RM.CveModulo = I.CveModulo
|
||||
);
|
||||
|
||||
DECLARE @Tablas TABLE
|
||||
(
|
||||
NombreTablaSQL varchar(128) NOT NULL,
|
||||
NombreMostrar varchar(150) NOT NULL,
|
||||
CampoLlave varchar(128) NOT NULL
|
||||
);
|
||||
|
||||
INSERT INTO @Tablas
|
||||
(NombreTablaSQL, NombreMostrar, CampoLlave)
|
||||
VALUES
|
||||
('Tra_EstatusSolicitud', 'Estatus de solicitud', 'CveEstatusSolicitud'),
|
||||
('Tra_TiposTramite', 'Tipos de trámite', 'CveTipoTramite'),
|
||||
('Tra_TiposDocumento', 'Tipos de documento', 'CveTipoDocumento'),
|
||||
('Tra_DocumentosRequeridos', 'Documentos requeridos', 'CveDocumentoRequerido'),
|
||||
('Tra_Preguntas', 'Preguntas de trámite', 'CvePregunta'),
|
||||
('Tra_OpcionesPregunta', 'Opciones de respuesta', 'CveOpcionPregunta');
|
||||
|
||||
UPDATE T
|
||||
SET NombreMostrar = S.NombreMostrar,
|
||||
NombreCampoLlaveSQL = S.CampoLlave,
|
||||
Activo = 1,
|
||||
FechaMod = GETDATE()
|
||||
FROM dbo.Bit_Tablas AS T
|
||||
INNER JOIN @Tablas AS S ON S.NombreTablaSQL COLLATE Modern_Spanish_CS_AS = T.NombreTablaSQL;
|
||||
|
||||
INSERT dbo.Bit_Tablas
|
||||
(NombreTablaSQL, NombreMostrar, Descripcion, NombreCampoLlaveSQL, Activo)
|
||||
SELECT
|
||||
S.NombreTablaSQL,
|
||||
S.NombreMostrar,
|
||||
'Catálogo interno de trámites.',
|
||||
S.CampoLlave,
|
||||
1
|
||||
FROM @Tablas AS S
|
||||
WHERE NOT EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM dbo.Bit_Tablas AS T
|
||||
WHERE T.NombreTablaSQL = S.NombreTablaSQL COLLATE Modern_Spanish_CS_AS
|
||||
);
|
||||
|
||||
INSERT dbo.Bit_Campos
|
||||
(CveTabla, NombreCampoSQL, NombreMostrar, MostrarEnBitacora, TipoDatoSQL, Activo)
|
||||
SELECT
|
||||
BT.CveTabla,
|
||||
C.name,
|
||||
C.name,
|
||||
CASE WHEN C.name = S.CampoLlave THEN 0 ELSE 1 END,
|
||||
TY.name,
|
||||
1
|
||||
FROM @Tablas AS S
|
||||
INNER JOIN sys.tables AS T ON T.name = S.NombreTablaSQL COLLATE Modern_Spanish_CS_AS
|
||||
INNER JOIN sys.schemas AS SC ON SC.schema_id = T.schema_id AND SC.name = 'dbo'
|
||||
INNER JOIN sys.columns AS C ON C.object_id = T.object_id
|
||||
INNER JOIN sys.types AS TY ON TY.user_type_id = C.user_type_id
|
||||
INNER JOIN dbo.Bit_Tablas AS BT ON BT.NombreTablaSQL = S.NombreTablaSQL COLLATE Modern_Spanish_CS_AS
|
||||
WHERE NOT EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM dbo.Bit_Campos AS BC
|
||||
WHERE BC.CveTabla = BT.CveTabla
|
||||
AND BC.NombreCampoSQL = C.name COLLATE Modern_Spanish_CS_AS
|
||||
);
|
||||
|
||||
COMMIT TRANSACTION;
|
||||
END TRY
|
||||
BEGIN CATCH
|
||||
IF XACT_STATE() <> 0
|
||||
BEGIN
|
||||
ROLLBACK TRANSACTION;
|
||||
END;
|
||||
|
||||
THROW;
|
||||
END CATCH;
|
||||
GO
|
||||
188
Menu_Desarrolladores.sql
Normal file
188
Menu_Desarrolladores.sql
Normal file
@@ -0,0 +1,188 @@
|
||||
SET NOCOUNT ON;
|
||||
SET XACT_ABORT ON;
|
||||
|
||||
BEGIN TRY
|
||||
BEGIN TRANSACTION;
|
||||
|
||||
DECLARE @CvePlataforma int;
|
||||
|
||||
SELECT TOP (1)
|
||||
@CvePlataforma = CvePlataforma
|
||||
FROM dbo.Sis_Plataformas
|
||||
WHERE NombrePlataforma = 'Plataforma de Desarrolladores'
|
||||
AND Borrado = 0
|
||||
ORDER BY CvePlataforma;
|
||||
|
||||
IF @CvePlataforma IS NULL
|
||||
BEGIN
|
||||
INSERT INTO dbo.Sis_Plataformas
|
||||
(NombrePlataforma, Descripcion, Activo, FechaCreacion)
|
||||
VALUES
|
||||
('Plataforma de Desarrolladores', 'Portal WebForms para desarrolladores', 1, GETDATE());
|
||||
|
||||
SET @CvePlataforma = CONVERT(int, SCOPE_IDENTITY());
|
||||
END
|
||||
ELSE
|
||||
BEGIN
|
||||
UPDATE dbo.Sis_Plataformas
|
||||
SET Activo = 1,
|
||||
FechaActualizacion = GETDATE()
|
||||
WHERE CvePlataforma = @CvePlataforma;
|
||||
END;
|
||||
|
||||
DECLARE @Menu TABLE
|
||||
(
|
||||
Clave varchar(50) NOT NULL PRIMARY KEY,
|
||||
ClavePadre varchar(50) NULL,
|
||||
NombreModulo varchar(150) NOT NULL,
|
||||
Url varchar(500) NULL,
|
||||
ClaseCssIcono varchar(150) NULL,
|
||||
OrdenVisualizacion int NOT NULL
|
||||
);
|
||||
|
||||
INSERT INTO @Menu
|
||||
(Clave, ClavePadre, NombreModulo, Url, ClaseCssIcono, OrdenVisualizacion)
|
||||
VALUES
|
||||
('Inicio', NULL, 'Inicio', '~/Inicio.aspx', 'icon-home', 0),
|
||||
('Desarrolladores', NULL, 'Desarrolladores', NULL, 'fa fa-address-card', 10),
|
||||
('Tramites', 'Desarrolladores', 'Trámites', '~/Pages/Desarrolladores/Tramites.aspx', 'fa fa-dollar-sign', 10),
|
||||
('ConsultaTramites', 'Desarrolladores', 'Consulta Trámites', '~/Pages/Desarrolladores/ConsultaTramites.aspx', 'fa fa-search', 20),
|
||||
('Predios', 'Desarrolladores', 'Predios', '~/Pages/Desarrolladores/Predios.aspx', 'fa fa-house', 30),
|
||||
('Fraccionamientos', 'Desarrolladores', 'Fraccionamientos', '~/Pages/Fraccionamientos/Fraccionamientos.aspx', 'fa fa-building', 35),
|
||||
('FraccionamientoDetalle', 'Fraccionamientos', 'Detalle de fraccionamiento', '~/Pages/Fraccionamientos/FraccionamientoDetalle.aspx', 'fa fa-building-o', 10),
|
||||
('Facturas', 'Desarrolladores', 'Facturas', '~/Pages/Desarrolladores/Facturas.aspx', 'fa fa-print', 40),
|
||||
('HistorialFacturas', 'Desarrolladores', 'Historial Facturas', '~/Pages/Desarrolladores/HistorialFacturas.aspx', 'fa fa-print', 50),
|
||||
('FacturasComerciales', 'Desarrolladores', 'Fact. Comerciales', '~/Pages/Desarrolladores/FacturasComerciales.aspx', 'fa fa-dollar-sign', 60),
|
||||
('FacturasComercialesListado', 'Desarrolladores', 'Fact. Com. Listado', '~/Pages/Desarrolladores/FacturasComercialesListado.aspx', 'fa fa-print', 70),
|
||||
('FacturasCfdi', NULL, 'Facturas (CFDI)', '~/Pages/Desarrolladores/FacturasCfdi.aspx', 'fa fa-address-card', 20);
|
||||
|
||||
DECLARE @Ids TABLE
|
||||
(
|
||||
Clave varchar(50) NOT NULL PRIMARY KEY,
|
||||
CveModulo int NOT NULL
|
||||
);
|
||||
|
||||
DECLARE
|
||||
@Clave varchar(50),
|
||||
@ClavePadre varchar(50),
|
||||
@NombreModulo varchar(150),
|
||||
@Url varchar(500),
|
||||
@ClaseCssIcono varchar(150),
|
||||
@OrdenVisualizacion int,
|
||||
@CveModuloPadre int,
|
||||
@CveModulo int;
|
||||
|
||||
DECLARE MenuCursor CURSOR LOCAL FAST_FORWARD FOR
|
||||
SELECT Clave, ClavePadre, NombreModulo, Url, ClaseCssIcono, OrdenVisualizacion
|
||||
FROM @Menu
|
||||
ORDER BY CASE WHEN ClavePadre IS NULL THEN 0 ELSE 1 END, OrdenVisualizacion, Clave;
|
||||
|
||||
OPEN MenuCursor;
|
||||
FETCH NEXT FROM MenuCursor
|
||||
INTO @Clave, @ClavePadre, @NombreModulo, @Url, @ClaseCssIcono, @OrdenVisualizacion;
|
||||
|
||||
WHILE @@FETCH_STATUS = 0
|
||||
BEGIN
|
||||
SET @CveModuloPadre = NULL;
|
||||
SET @CveModulo = NULL;
|
||||
|
||||
IF @ClavePadre IS NOT NULL
|
||||
BEGIN
|
||||
SELECT @CveModuloPadre = CveModulo
|
||||
FROM @Ids
|
||||
WHERE Clave = @ClavePadre;
|
||||
END;
|
||||
|
||||
SELECT TOP (1)
|
||||
@CveModulo = CveModulo
|
||||
FROM dbo.Sis_Modulos
|
||||
WHERE CvePlataforma = @CvePlataforma
|
||||
AND
|
||||
(
|
||||
(@Url IS NOT NULL AND LOWER(ISNULL(Url, '')) = LOWER(@Url))
|
||||
OR (@Url IS NULL AND Url IS NULL AND NombreModulo = @NombreModulo)
|
||||
)
|
||||
ORDER BY CveModulo;
|
||||
|
||||
IF @CveModulo IS NULL
|
||||
BEGIN
|
||||
INSERT INTO dbo.Sis_Modulos
|
||||
(CveModuloPadre, CvePlataforma, NombreModulo, Descripcion, Url,
|
||||
ClaseCssIcono, ClaseCssEstilo, OrdenVisualizacion, Visible, Activo, FechaCreacion)
|
||||
VALUES
|
||||
(@CveModuloPadre, @CvePlataforma, @NombreModulo, @NombreModulo, @Url,
|
||||
@ClaseCssIcono, NULL, @OrdenVisualizacion, 1, 1, GETDATE());
|
||||
|
||||
SET @CveModulo = CONVERT(int, SCOPE_IDENTITY());
|
||||
END
|
||||
ELSE
|
||||
BEGIN
|
||||
UPDATE dbo.Sis_Modulos
|
||||
SET CveModuloPadre = @CveModuloPadre,
|
||||
NombreModulo = @NombreModulo,
|
||||
Url = @Url,
|
||||
ClaseCssIcono = @ClaseCssIcono,
|
||||
OrdenVisualizacion = @OrdenVisualizacion,
|
||||
Visible = 1,
|
||||
Activo = 1,
|
||||
Borrado = 0,
|
||||
FechaBorrado = NULL,
|
||||
FechaActualizacion = GETDATE()
|
||||
WHERE CveModulo = @CveModulo;
|
||||
END;
|
||||
|
||||
INSERT INTO @Ids (Clave, CveModulo)
|
||||
VALUES (@Clave, @CveModulo);
|
||||
|
||||
FETCH NEXT FROM MenuCursor
|
||||
INTO @Clave, @ClavePadre, @NombreModulo, @Url, @ClaseCssIcono, @OrdenVisualizacion;
|
||||
END;
|
||||
|
||||
CLOSE MenuCursor;
|
||||
DEALLOCATE MenuCursor;
|
||||
|
||||
UPDATE M SET M.Visible = 0
|
||||
FROM dbo.Sis_Modulos AS M
|
||||
INNER JOIN @Ids AS I ON I.CveModulo = M.CveModulo
|
||||
WHERE I.Clave = 'FraccionamientoDetalle';
|
||||
|
||||
UPDATE RM
|
||||
SET RM.PuedeVer = 1,
|
||||
RM.Borrado = 0,
|
||||
RM.FechaBorrado = NULL
|
||||
FROM dbo.Sis_RolesModulos AS RM
|
||||
INNER JOIN @Ids AS M ON M.CveModulo = RM.CveModulo
|
||||
INNER JOIN dbo.Sis_Roles AS R ON R.CveRol = RM.CveRol
|
||||
WHERE R.Activo = 1
|
||||
AND R.Borrado = 0;
|
||||
|
||||
INSERT INTO dbo.Sis_RolesModulos
|
||||
(CveRol, CveModulo, PuedeVer, PuedeCrear, PuedeModificar,
|
||||
PuedeEliminar, PuedeImprimir, PuedeExportar, FechaCreacion)
|
||||
SELECT
|
||||
R.CveRol, M.CveModulo, 1, 0, 0, 0, 0, 0, GETDATE()
|
||||
FROM dbo.Sis_Roles AS R
|
||||
CROSS JOIN @Ids AS M
|
||||
WHERE R.Activo = 1
|
||||
AND R.Borrado = 0
|
||||
AND NOT EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM dbo.Sis_RolesModulos AS RM
|
||||
WHERE RM.CveRol = R.CveRol
|
||||
AND RM.CveModulo = M.CveModulo
|
||||
);
|
||||
|
||||
COMMIT TRANSACTION;
|
||||
|
||||
SELECT M.CveModulo, M.CveModuloPadre, M.NombreModulo, M.Url, M.OrdenVisualizacion
|
||||
FROM dbo.Sis_Modulos AS M
|
||||
INNER JOIN @Ids AS I ON I.CveModulo = M.CveModulo
|
||||
ORDER BY M.CveModuloPadre, M.OrdenVisualizacion, M.NombreModulo;
|
||||
END TRY
|
||||
BEGIN CATCH
|
||||
IF XACT_STATE() <> 0
|
||||
ROLLBACK TRANSACTION;
|
||||
|
||||
THROW;
|
||||
END CATCH;
|
||||
1154
Migracion_Bitacora_ConsultaGenerica_20260814.sql
Normal file
1154
Migracion_Bitacora_ConsultaGenerica_20260814.sql
Normal file
File diff suppressed because it is too large
Load Diff
377
Migracion_Bitacora_ConsultaRelaciones_20260722.sql
Normal file
377
Migracion_Bitacora_ConsultaRelaciones_20260722.sql
Normal file
@@ -0,0 +1,377 @@
|
||||
CREATE OR ALTER PROCEDURE dbo.PA_Bit_BitacoraListByRelations
|
||||
@RelacionesXml xml = NULL,
|
||||
@RegistrosOmitidos int,
|
||||
@RegistrosPorPagina int,
|
||||
@CveUsuarioEjecuta int,
|
||||
@ErrorMostrar varchar(max) OUTPUT,
|
||||
@ErrorTipo int OUTPUT,
|
||||
@Return bit OUTPUT
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON;
|
||||
|
||||
SELECT
|
||||
@ErrorMostrar = NULL,
|
||||
@ErrorTipo = 0,
|
||||
@Return = 0;
|
||||
|
||||
BEGIN TRY
|
||||
IF @RegistrosOmitidos < 0 OR @RegistrosPorPagina <= 0
|
||||
BEGIN
|
||||
SET @ErrorMostrar = 'Los datos de paginación no son válidos.';
|
||||
SET @ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
DECLARE @EsAdministrador bit = 0;
|
||||
DECLARE @EsDesarrollador bit = 0;
|
||||
|
||||
SELECT
|
||||
@EsAdministrador = CASE
|
||||
WHEN R.NombreRol IN ('SuperUsuario', 'Administrador') THEN 1
|
||||
ELSE 0
|
||||
END,
|
||||
@EsDesarrollador = CASE
|
||||
WHEN R.NombreRol = 'Empresa' THEN 1
|
||||
ELSE 0
|
||||
END
|
||||
FROM dbo.Sis_Usuarios AS U
|
||||
INNER JOIN dbo.Sis_Roles AS R
|
||||
ON R.CveRol = U.CveRol
|
||||
WHERE U.CveUsuario = @CveUsuarioEjecuta
|
||||
AND U.Activo = 1
|
||||
AND R.Activo = 1;
|
||||
|
||||
DECLARE @Filtros TABLE
|
||||
(
|
||||
Orden int NOT NULL PRIMARY KEY,
|
||||
NombreTablaSQL varchar(128)
|
||||
COLLATE Modern_Spanish_CS_AS NOT NULL,
|
||||
NombreCampoSQL varchar(128)
|
||||
COLLATE Modern_Spanish_CS_AS NOT NULL,
|
||||
Valor nvarchar(250)
|
||||
COLLATE Modern_Spanish_CS_AS NOT NULL
|
||||
);
|
||||
|
||||
IF @RelacionesXml IS NOT NULL
|
||||
BEGIN
|
||||
INSERT INTO @Filtros
|
||||
(
|
||||
Orden,
|
||||
NombreTablaSQL,
|
||||
NombreCampoSQL,
|
||||
Valor
|
||||
)
|
||||
SELECT
|
||||
R.value('@Orden', 'int'),
|
||||
R.value('@Tabla', 'varchar(128)'),
|
||||
R.value('@Campo', 'varchar(128)'),
|
||||
R.value('@Valor', 'nvarchar(250)')
|
||||
FROM @RelacionesXml.nodes('/Relaciones/Relacion') AS X(R);
|
||||
END;
|
||||
|
||||
DECLARE @FiltrosResueltos TABLE
|
||||
(
|
||||
Orden int NOT NULL PRIMARY KEY,
|
||||
CveTabla int NOT NULL,
|
||||
CveCampo int NOT NULL,
|
||||
TipoDatoSQL varchar(128)
|
||||
COLLATE Modern_Spanish_CS_AS NOT NULL,
|
||||
Valor nvarchar(250)
|
||||
COLLATE Modern_Spanish_CS_AS NOT NULL,
|
||||
EsEntero bit NOT NULL
|
||||
);
|
||||
|
||||
INSERT INTO @FiltrosResueltos
|
||||
(
|
||||
Orden,
|
||||
CveTabla,
|
||||
CveCampo,
|
||||
TipoDatoSQL,
|
||||
Valor,
|
||||
EsEntero
|
||||
)
|
||||
SELECT
|
||||
F.Orden,
|
||||
T.CveTabla,
|
||||
C.CveCampo,
|
||||
C.TipoDatoSQL,
|
||||
F.Valor,
|
||||
CASE
|
||||
WHEN C.TipoDatoSQL IN
|
||||
(
|
||||
'tinyint',
|
||||
'smallint',
|
||||
'int',
|
||||
'bigint'
|
||||
) THEN 1
|
||||
ELSE 0
|
||||
END
|
||||
FROM @Filtros AS F
|
||||
INNER JOIN dbo.Bit_Tablas AS T
|
||||
ON T.NombreTablaSQL = F.NombreTablaSQL
|
||||
AND T.Activo = 1
|
||||
INNER JOIN dbo.Bit_Campos AS C
|
||||
ON C.CveTabla = T.CveTabla
|
||||
AND C.NombreCampoSQL = F.NombreCampoSQL
|
||||
AND C.Activo = 1
|
||||
WHERE C.TipoDatoSQL IS NOT NULL;
|
||||
|
||||
IF (SELECT COUNT(1) FROM @Filtros) <>
|
||||
(SELECT COUNT(1) FROM @FiltrosResueltos)
|
||||
BEGIN
|
||||
SET @ErrorMostrar = 'Una relación utiliza una tabla o campo que no está configurado en la bitácora.';
|
||||
SET @ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
IF EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM @FiltrosResueltos
|
||||
WHERE EsEntero = 1
|
||||
AND TRY_CONVERT(bigint, Valor) IS NULL
|
||||
)
|
||||
BEGIN
|
||||
SET @ErrorMostrar = 'El valor de una relación numérica no es válido.';
|
||||
SET @ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
CREATE TABLE #BitacorasCoincidentes
|
||||
(
|
||||
CveBitacora bigint NOT NULL PRIMARY KEY,
|
||||
FechaMovimiento datetime NOT NULL
|
||||
);
|
||||
|
||||
INSERT INTO #BitacorasCoincidentes
|
||||
(
|
||||
CveBitacora,
|
||||
FechaMovimiento
|
||||
)
|
||||
SELECT
|
||||
B.CveBitacora,
|
||||
B.FechaMovimiento
|
||||
FROM dbo.Bit_Bitacora AS B
|
||||
WHERE
|
||||
(
|
||||
@EsAdministrador = 1
|
||||
OR
|
||||
(
|
||||
@EsDesarrollador = 1
|
||||
AND EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM dbo.Bit_BitacoraRelaciones AS BRCliente
|
||||
INNER JOIN dbo.Bit_Tablas AS TCliente
|
||||
ON TCliente.CveTabla =
|
||||
BRCliente.CveTablaRelacionada
|
||||
INNER JOIN dbo.Bit_Campos AS CCliente
|
||||
ON CCliente.CveCampo =
|
||||
BRCliente.CveCampoRelacion
|
||||
AND CCliente.CveTabla = TCliente.CveTabla
|
||||
INNER JOIN dbo.Sis_UsuariosClientes AS UC
|
||||
ON UC.CveCliente =
|
||||
BRCliente.ValorRelacionNumero
|
||||
AND UC.CveUsuario = @CveUsuarioEjecuta
|
||||
AND UC.Activo = 1
|
||||
WHERE BRCliente.CveBitacora = B.CveBitacora
|
||||
AND BRCliente.VisibleDesarrollador = 1
|
||||
AND TCliente.NombreTablaSQL = 'Clientes'
|
||||
AND CCliente.NombreCampoSQL = 'CveCliente'
|
||||
)
|
||||
)
|
||||
)
|
||||
AND
|
||||
(
|
||||
@EsDesarrollador = 0
|
||||
OR NOT EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM @FiltrosResueltos AS FCliente
|
||||
INNER JOIN dbo.Bit_Tablas AS TClienteFiltro
|
||||
ON TClienteFiltro.CveTabla = FCliente.CveTabla
|
||||
INNER JOIN dbo.Bit_Campos AS CClienteFiltro
|
||||
ON CClienteFiltro.CveCampo = FCliente.CveCampo
|
||||
AND CClienteFiltro.CveTabla =
|
||||
TClienteFiltro.CveTabla
|
||||
WHERE TClienteFiltro.NombreTablaSQL = 'Clientes'
|
||||
AND CClienteFiltro.NombreCampoSQL = 'CveCliente'
|
||||
AND NOT EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM dbo.Sis_UsuariosClientes AS UCClienteFiltro
|
||||
WHERE UCClienteFiltro.CveUsuario =
|
||||
@CveUsuarioEjecuta
|
||||
AND UCClienteFiltro.CveCliente =
|
||||
TRY_CONVERT(bigint, FCliente.Valor)
|
||||
AND UCClienteFiltro.Activo = 1
|
||||
)
|
||||
)
|
||||
)
|
||||
AND NOT EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM @FiltrosResueltos AS F
|
||||
WHERE NOT EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM dbo.Bit_BitacoraRelaciones AS BR
|
||||
WHERE BR.CveBitacora = B.CveBitacora
|
||||
AND BR.CveTablaRelacionada = F.CveTabla
|
||||
AND BR.CveCampoRelacion = F.CveCampo
|
||||
AND
|
||||
(
|
||||
@EsAdministrador = 1
|
||||
OR BR.VisibleDesarrollador = 1
|
||||
)
|
||||
AND
|
||||
(
|
||||
(
|
||||
F.EsEntero = 1
|
||||
AND BR.ValorRelacionNumero =
|
||||
TRY_CONVERT(bigint, F.Valor)
|
||||
)
|
||||
OR
|
||||
(
|
||||
F.EsEntero = 0
|
||||
AND BR.ValorRelacionTexto =
|
||||
F.Valor COLLATE Modern_Spanish_CS_AS
|
||||
)
|
||||
)
|
||||
)
|
||||
);
|
||||
|
||||
DECLARE @TotalRegistros int;
|
||||
|
||||
SELECT @TotalRegistros = COUNT(DISTINCT CveBitacora)
|
||||
FROM #BitacorasCoincidentes;
|
||||
|
||||
CREATE TABLE #BitacorasPagina
|
||||
(
|
||||
CveBitacora bigint NOT NULL PRIMARY KEY,
|
||||
Orden int NOT NULL
|
||||
);
|
||||
|
||||
INSERT INTO #BitacorasPagina
|
||||
(
|
||||
CveBitacora,
|
||||
Orden
|
||||
)
|
||||
SELECT
|
||||
C.CveBitacora,
|
||||
ROW_NUMBER() OVER
|
||||
(
|
||||
ORDER BY
|
||||
C.FechaMovimiento DESC,
|
||||
C.CveBitacora DESC
|
||||
)
|
||||
FROM #BitacorasCoincidentes AS C
|
||||
ORDER BY
|
||||
C.FechaMovimiento DESC,
|
||||
C.CveBitacora DESC
|
||||
OFFSET @RegistrosOmitidos ROWS
|
||||
FETCH NEXT @RegistrosPorPagina ROWS ONLY;
|
||||
|
||||
SELECT @TotalRegistros AS TotalRegistros;
|
||||
|
||||
SELECT
|
||||
B.CveBitacora,
|
||||
B.CveTabla,
|
||||
T.NombreTablaSQL,
|
||||
T.NombreMostrar AS NombreTabla,
|
||||
B.CveTipoMovimiento,
|
||||
M.Nombre AS TipoMovimiento,
|
||||
B.CveDefinicionAccion,
|
||||
A.NombreAccion,
|
||||
A.DescripcionAccion,
|
||||
B.CveUsuarioEjecuta,
|
||||
B.CveUsuarioAutoriza,
|
||||
B.FechaAutorizacion,
|
||||
B.LlaveRegistro,
|
||||
B.DescripcionMovimiento,
|
||||
B.FechaMovimiento,
|
||||
B.DireccionIP,
|
||||
B.NombreEquipo,
|
||||
B.Modulo
|
||||
FROM #BitacorasPagina AS P
|
||||
INNER JOIN dbo.Bit_Bitacora AS B
|
||||
ON B.CveBitacora = P.CveBitacora
|
||||
INNER JOIN dbo.Bit_Tablas AS T
|
||||
ON T.CveTabla = B.CveTabla
|
||||
INNER JOIN dbo.Bit_TiposMovimiento AS M
|
||||
ON M.CveTipoMovimiento = B.CveTipoMovimiento
|
||||
LEFT JOIN dbo.Bit_DefinicionesAccion AS A
|
||||
ON A.CveDefinicionAccion = B.CveDefinicionAccion
|
||||
ORDER BY P.Orden;
|
||||
|
||||
SELECT
|
||||
BC.CveBitacoraCampo,
|
||||
BC.CveBitacora,
|
||||
BC.CveCampo,
|
||||
C.NombreCampoSQL,
|
||||
C.NombreMostrar,
|
||||
BC.ValorAnterior,
|
||||
BC.ValorNuevo
|
||||
FROM #BitacorasPagina AS P
|
||||
INNER JOIN dbo.Bit_BitacoraCampos AS BC
|
||||
ON BC.CveBitacora = P.CveBitacora
|
||||
INNER JOIN dbo.Bit_Campos AS C
|
||||
ON C.CveCampo = BC.CveCampo
|
||||
WHERE @EsAdministrador = 1
|
||||
OR C.MostrarEnBitacora = 1
|
||||
ORDER BY
|
||||
P.Orden,
|
||||
BC.CveBitacoraCampo;
|
||||
|
||||
SELECT
|
||||
BR.CveBitacoraRelacion,
|
||||
BR.CveBitacora,
|
||||
BR.CveTipoRelacion,
|
||||
TR.Nombre AS TipoRelacion,
|
||||
BR.CveTablaRelacionada,
|
||||
T.NombreTablaSQL,
|
||||
BR.CveCampoRelacion,
|
||||
C.NombreCampoSQL,
|
||||
BR.LlaveRegistroRelacionada,
|
||||
BR.ValorRelacionNumero,
|
||||
BR.ValorRelacionTexto,
|
||||
BR.VisibleDesarrollador,
|
||||
BR.DescripcionRelacion
|
||||
FROM #BitacorasPagina AS P
|
||||
INNER JOIN dbo.Bit_BitacoraRelaciones AS BR
|
||||
ON BR.CveBitacora = P.CveBitacora
|
||||
INNER JOIN dbo.Bit_TiposRelacion AS TR
|
||||
ON TR.CveTipoRelacion = BR.CveTipoRelacion
|
||||
INNER JOIN dbo.Bit_Tablas AS T
|
||||
ON T.CveTabla = BR.CveTablaRelacionada
|
||||
LEFT JOIN dbo.Bit_Campos AS C
|
||||
ON C.CveCampo = BR.CveCampoRelacion
|
||||
AND C.CveTabla = T.CveTabla
|
||||
WHERE @EsAdministrador = 1
|
||||
OR BR.VisibleDesarrollador = 1
|
||||
ORDER BY
|
||||
P.Orden,
|
||||
BR.CveBitacoraRelacion;
|
||||
|
||||
SET @Return = 1;
|
||||
END TRY
|
||||
BEGIN CATCH
|
||||
SET @ErrorMostrar = 'Ocurrió un error al consultar la bitácora; favor de contactar a Sistemas.';
|
||||
SET @ErrorTipo = 1;
|
||||
SET @Return = 0;
|
||||
|
||||
DECLARE @ErrorTecnico nvarchar(2048) = CONCAT(
|
||||
'Número: ', ERROR_NUMBER(),
|
||||
'; Procedimiento: ', COALESCE(
|
||||
ERROR_PROCEDURE(),
|
||||
'PA_Bit_BitacoraListByRelations'
|
||||
),
|
||||
'; Línea: ', ERROR_LINE(),
|
||||
'; Detalle: ', ERROR_MESSAGE()
|
||||
);
|
||||
|
||||
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
|
||||
END CATCH;
|
||||
END;
|
||||
GO
|
||||
353
Migracion_Bitacora_Eventos_20260920.sql
Normal file
353
Migracion_Bitacora_Eventos_20260920.sql
Normal file
@@ -0,0 +1,353 @@
|
||||
/*
|
||||
Rediseño aprobado: evento -> registros -> campos/relaciones.
|
||||
Instalado el 20/09/2026 en SIG_PlataformaDesarolladores con autorización del usuario.
|
||||
Instalación: aplicación detenida, respaldo verificado y UNA transacción del
|
||||
instalador en UNA conexión para este archivo y Procedimientos_Bitacora_Eventos_20260920.sql.
|
||||
El instalador debe detenerse ante cualquier error, revertir y no continuar lotes.
|
||||
Ningún PA administra transacciones. No agrupar historia por fecha/usuario.
|
||||
*/
|
||||
SET NOCOUNT ON;
|
||||
IF @@TRANCOUNT = 0
|
||||
THROW 51000, 'La migración requiere una transacción externa del instalador.', 1;
|
||||
IF OBJECT_ID(N'dbo.Bit_Bitacora', N'U') IS NULL
|
||||
OR OBJECT_ID(N'dbo.Bit_DefinicionesAccion', N'U') IS NULL
|
||||
OR OBJECT_ID(N'dbo.Bit_BitacoraCampos', N'U') IS NULL
|
||||
OR OBJECT_ID(N'dbo.Bit_BitacoraRelaciones', N'U') IS NULL
|
||||
THROW 51000, 'No se encontró la estructura de bitácora revisada.', 1;
|
||||
|
||||
-- Impedir escrituras concurrentes durante la migración.
|
||||
DECLARE @Registros bigint;
|
||||
SELECT @Registros = COUNT_BIG(*) FROM dbo.Bit_Bitacora WITH (TABLOCKX, HOLDLOCK);
|
||||
CREATE TABLE #ControlMigracionBitacora
|
||||
(
|
||||
Registros bigint NOT NULL,
|
||||
Campos bigint NOT NULL,
|
||||
Relaciones bigint NOT NULL
|
||||
);
|
||||
INSERT INTO #ControlMigracionBitacora
|
||||
SELECT @Registros,
|
||||
(SELECT COUNT_BIG(*) FROM dbo.Bit_BitacoraCampos),
|
||||
(SELECT COUNT_BIG(*) FROM dbo.Bit_BitacoraRelaciones);
|
||||
GO
|
||||
|
||||
IF @@TRANCOUNT = 0
|
||||
THROW 51000, 'La migración requiere una transacción externa.', 1;
|
||||
IF OBJECT_ID(N'dbo.Bit_BitacoraEventos', N'U') IS NULL
|
||||
BEGIN
|
||||
CREATE TABLE dbo.Bit_BitacoraEventos
|
||||
(
|
||||
CveBitacoraEvento bigint IDENTITY(1, 1) NOT NULL
|
||||
CONSTRAINT PK_Bit_BitacoraEventos PRIMARY KEY,
|
||||
CveDefinicionAccion int NULL,
|
||||
CveUsuarioEjecuta int NOT NULL,
|
||||
CveUsuarioAutoriza int NULL,
|
||||
FechaAutorizacion datetime NULL,
|
||||
DescripcionMovimiento nvarchar(1000) COLLATE Modern_Spanish_CS_AS NOT NULL,
|
||||
FechaMovimiento datetime NOT NULL
|
||||
CONSTRAINT DF_Bit_BitacoraEventos_Fecha DEFAULT SYSDATETIME(),
|
||||
DireccionIP varchar(50) COLLATE Modern_Spanish_CS_AS NULL,
|
||||
NombreEquipo varchar(150) COLLATE Modern_Spanish_CS_AS NULL,
|
||||
Modulo varchar(150) COLLATE Modern_Spanish_CS_AS NULL,
|
||||
EsHistorico bit NOT NULL CONSTRAINT DF_Bit_BitacoraEventos_Historico DEFAULT (0),
|
||||
CONSTRAINT FK_Bit_BitacoraEventos_Accion FOREIGN KEY (CveDefinicionAccion)
|
||||
REFERENCES dbo.Bit_DefinicionesAccion(CveDefinicionAccion),
|
||||
CONSTRAINT FK_Bit_BitacoraEventos_Usuario FOREIGN KEY (CveUsuarioEjecuta)
|
||||
REFERENCES dbo.Sis_Usuarios(CveUsuario),
|
||||
CONSTRAINT FK_Bit_BitacoraEventos_Autoriza FOREIGN KEY (CveUsuarioAutoriza)
|
||||
REFERENCES dbo.Sis_Usuarios(CveUsuario),
|
||||
CONSTRAINT CK_Bit_BitacoraEventos_Autorizacion
|
||||
CHECK (CveUsuarioAutoriza IS NOT NULL OR FechaAutorizacion IS NULL)
|
||||
);
|
||||
END;
|
||||
IF COL_LENGTH('dbo.Bit_Bitacora', 'CveBitacoraEvento') IS NULL
|
||||
ALTER TABLE dbo.Bit_Bitacora ADD CveBitacoraEvento bigint NULL;
|
||||
IF COL_LENGTH('dbo.Bit_Bitacora', 'LlaveRegistroTexto') IS NULL
|
||||
ALTER TABLE dbo.Bit_Bitacora ADD LlaveRegistroTexto nvarchar(250) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
IF COL_LENGTH('dbo.Bit_BitacoraCampos', 'ValorAnteriorMostrar') IS NULL
|
||||
ALTER TABLE dbo.Bit_BitacoraCampos ADD ValorAnteriorMostrar nvarchar(max) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
IF COL_LENGTH('dbo.Bit_BitacoraCampos', 'ValorNuevoMostrar') IS NULL
|
||||
ALTER TABLE dbo.Bit_BitacoraCampos ADD ValorNuevoMostrar nvarchar(max) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
IF COL_LENGTH('dbo.Bit_DefinicionesAccion', 'CodigoAccion') IS NULL
|
||||
ALTER TABLE dbo.Bit_DefinicionesAccion ADD CodigoAccion varchar(150) COLLATE Modern_Spanish_CI_AS NULL;
|
||||
GO
|
||||
IF @@TRANCOUNT = 0
|
||||
THROW 51000, 'La migración requiere una transacción externa.', 1;
|
||||
IF COL_LENGTH('dbo.Bit_Bitacora', 'DescripcionMovimiento') IS NOT NULL
|
||||
BEGIN
|
||||
EXEC sys.sp_executesql N' CREATE TABLE #CorrespondenciaEventos
|
||||
(
|
||||
CveBitacora bigint NOT NULL PRIMARY KEY,
|
||||
CveBitacoraEvento bigint NOT NULL UNIQUE
|
||||
);
|
||||
|
||||
-- OUTPUT conserva la correspondencia real de las identidades; nunca se igualan claves.
|
||||
MERGE dbo.Bit_BitacoraEventos AS Destino
|
||||
USING
|
||||
(
|
||||
SELECT *
|
||||
FROM dbo.Bit_Bitacora
|
||||
WHERE CveBitacoraEvento IS NULL
|
||||
) AS Origen
|
||||
ON 1 = 0
|
||||
WHEN NOT MATCHED THEN
|
||||
INSERT (CveDefinicionAccion, CveUsuarioEjecuta, CveUsuarioAutoriza, FechaAutorizacion, DescripcionMovimiento, FechaMovimiento, DireccionIP, NombreEquipo, Modulo, EsHistorico)
|
||||
VALUES (Origen.CveDefinicionAccion, Origen.CveUsuarioEjecuta, Origen.CveUsuarioAutoriza, Origen.FechaAutorizacion, Origen.DescripcionMovimiento, Origen.FechaMovimiento, Origen.DireccionIP, Origen.NombreEquipo, Origen.Modulo, 1)
|
||||
OUTPUT Origen.CveBitacora, inserted.CveBitacoraEvento
|
||||
INTO #CorrespondenciaEventos(CveBitacora, CveBitacoraEvento);
|
||||
|
||||
UPDATE B
|
||||
SET B.CveBitacoraEvento = C.CveBitacoraEvento
|
||||
FROM dbo.Bit_Bitacora AS B
|
||||
INNER JOIN #CorrespondenciaEventos AS C ON C.CveBitacora = B.CveBitacora;
|
||||
|
||||
UPDATE dbo.Bit_Bitacora
|
||||
SET LlaveRegistroTexto = LlaveRegistro
|
||||
WHERE LlaveRegistroTexto IS NULL;
|
||||
|
||||
IF EXISTS
|
||||
(
|
||||
SELECT B.CveBitacora, B.CveDefinicionAccion, B.CveUsuarioEjecuta, B.CveUsuarioAutoriza, B.FechaAutorizacion, B.DescripcionMovimiento, B.FechaMovimiento, B.DireccionIP, B.NombreEquipo, B.Modulo
|
||||
FROM dbo.Bit_Bitacora AS B
|
||||
EXCEPT
|
||||
SELECT B.CveBitacora, E.CveDefinicionAccion, E.CveUsuarioEjecuta, E.CveUsuarioAutoriza, E.FechaAutorizacion, E.DescripcionMovimiento, E.FechaMovimiento, E.DireccionIP, E.NombreEquipo, E.Modulo
|
||||
FROM dbo.Bit_Bitacora AS B
|
||||
INNER JOIN dbo.Bit_BitacoraEventos AS E ON E.CveBitacoraEvento = B.CveBitacoraEvento
|
||||
)
|
||||
THROW 51000, ''La copia de los encabezados no coincide; se cancela la migración.'', 1;
|
||||
|
||||
IF EXISTS (SELECT 1 FROM dbo.Bit_Bitacora WHERE CveBitacoraEvento IS NULL OR LlaveRegistroTexto IS NULL)
|
||||
THROW 51000, ''Hay registros sin evento o sin clave histórica.'', 1;
|
||||
IF EXISTS
|
||||
(
|
||||
SELECT CveBitacoraEvento
|
||||
FROM dbo.Bit_Bitacora
|
||||
GROUP BY CveBitacoraEvento
|
||||
HAVING COUNT_BIG(*) <> 1
|
||||
)
|
||||
THROW 51000, ''La correspondencia histórica no es de uno a uno.'', 1;
|
||||
-- Las dependencias de las columnas trasladadas se quitan después de verificar la copia.
|
||||
DECLARE @Retirar nvarchar(max) = N'''';
|
||||
SELECT @Retirar += N''ALTER TABLE dbo.Bit_Bitacora DROP CONSTRAINT '' + QUOTENAME(F.name) + N'';'' + CHAR(10)
|
||||
FROM sys.foreign_keys AS F
|
||||
WHERE F.parent_object_id = OBJECT_ID(N''dbo.Bit_Bitacora'')
|
||||
AND EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM sys.foreign_key_columns AS FC
|
||||
INNER JOIN sys.columns AS C ON C.object_id = FC.parent_object_id AND C.column_id = FC.parent_column_id
|
||||
WHERE FC.constraint_object_id = F.object_id
|
||||
AND C.name IN (''CveDefinicionAccion'', ''CveUsuarioEjecuta'', ''CveUsuarioAutoriza'', ''FechaAutorizacion'', ''DescripcionMovimiento'', ''FechaMovimiento'', ''DireccionIP'', ''NombreEquipo'', ''Modulo'')
|
||||
);
|
||||
SELECT @Retirar += N''ALTER TABLE dbo.Bit_Bitacora DROP CONSTRAINT '' + QUOTENAME(D.name) + N'';'' + CHAR(10)
|
||||
FROM sys.default_constraints AS D
|
||||
INNER JOIN sys.columns AS C ON C.object_id = D.parent_object_id AND C.column_id = D.parent_column_id
|
||||
WHERE D.parent_object_id = OBJECT_ID(N''dbo.Bit_Bitacora'')
|
||||
AND C.name IN (''CveDefinicionAccion'', ''CveUsuarioEjecuta'', ''CveUsuarioAutoriza'', ''FechaAutorizacion'', ''DescripcionMovimiento'', ''FechaMovimiento'', ''DireccionIP'', ''NombreEquipo'', ''Modulo'');
|
||||
IF OBJECT_ID(N''dbo.CK_Bit_Bitacora_Autorizacion'', N''C'') IS NOT NULL
|
||||
SET @Retirar += N''ALTER TABLE dbo.Bit_Bitacora DROP CONSTRAINT CK_Bit_Bitacora_Autorizacion;'';
|
||||
EXEC sys.sp_executesql @Retirar;
|
||||
|
||||
IF EXISTS (SELECT 1 FROM sys.indexes WHERE object_id = OBJECT_ID(N''dbo.Bit_Bitacora'') AND name = N''IX_Bit_Bitacora_Tabla_Llave_Fecha'')
|
||||
DROP INDEX IX_Bit_Bitacora_Tabla_Llave_Fecha ON dbo.Bit_Bitacora;
|
||||
|
||||
-- Sus columnas pasan al evento; los índices equivalentes se crean en el padre.
|
||||
IF EXISTS (SELECT 1 FROM sys.indexes WHERE object_id = OBJECT_ID(N''dbo.Bit_Bitacora'') AND name = N''IX_Bit_Bitacora_FechaMovimiento'')
|
||||
DROP INDEX IX_Bit_Bitacora_FechaMovimiento ON dbo.Bit_Bitacora;
|
||||
IF EXISTS (SELECT 1 FROM sys.indexes WHERE object_id = OBJECT_ID(N''dbo.Bit_Bitacora'') AND name = N''IX_Bit_Bitacora_CveUsuarioEjecuta'')
|
||||
DROP INDEX IX_Bit_Bitacora_CveUsuarioEjecuta ON dbo.Bit_Bitacora;
|
||||
IF EXISTS (SELECT 1 FROM sys.indexes WHERE object_id = OBJECT_ID(N''dbo.Bit_Bitacora'') AND name = N''IX_Bit_Bitacora_CveUsuarioAutoriza'')
|
||||
DROP INDEX IX_Bit_Bitacora_CveUsuarioAutoriza ON dbo.Bit_Bitacora;
|
||||
|
||||
-- Si hay otras dependencias no revisadas, ALTER falla y el instalador revierte.
|
||||
ALTER TABLE dbo.Bit_Bitacora ALTER COLUMN LlaveRegistro nvarchar(250) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
UPDATE dbo.Bit_Bitacora SET LlaveRegistro = NULL
|
||||
WHERE TRY_CONVERT(bigint, LlaveRegistro) IS NULL;
|
||||
ALTER TABLE dbo.Bit_Bitacora ALTER COLUMN LlaveRegistro bigint NULL;
|
||||
ALTER TABLE dbo.Bit_Bitacora DROP COLUMN
|
||||
CveDefinicionAccion,
|
||||
CveUsuarioEjecuta,
|
||||
CveUsuarioAutoriza,
|
||||
FechaAutorizacion,
|
||||
DescripcionMovimiento,
|
||||
FechaMovimiento,
|
||||
DireccionIP,
|
||||
NombreEquipo,
|
||||
Modulo;
|
||||
';
|
||||
END;
|
||||
GO
|
||||
|
||||
IF @@TRANCOUNT = 0
|
||||
THROW 51000, 'La migración requiere una transacción externa.', 1;
|
||||
IF EXISTS (SELECT 1 FROM dbo.Bit_Bitacora WHERE CveBitacoraEvento IS NULL)
|
||||
THROW 51000, 'Hay registros sin evento.', 1;
|
||||
ALTER TABLE dbo.Bit_Bitacora ALTER COLUMN CveBitacoraEvento bigint NOT NULL;
|
||||
IF OBJECT_ID(N'dbo.FK_Bit_Bitacora_Evento', N'F') IS NULL
|
||||
ALTER TABLE dbo.Bit_Bitacora WITH CHECK ADD CONSTRAINT FK_Bit_Bitacora_Evento
|
||||
FOREIGN KEY (CveBitacoraEvento) REFERENCES dbo.Bit_BitacoraEventos(CveBitacoraEvento);
|
||||
IF OBJECT_ID(N'dbo.CK_Bit_Bitacora_Llave', N'C') IS NULL
|
||||
ALTER TABLE dbo.Bit_Bitacora WITH CHECK ADD CONSTRAINT CK_Bit_Bitacora_Llave
|
||||
CHECK (LlaveRegistro IS NOT NULL OR NULLIF(LlaveRegistroTexto, N'') IS NOT NULL);
|
||||
|
||||
IF OBJECT_ID(N'dbo.UQ_Bit_DefinicionesAccion', N'UQ') IS NOT NULL
|
||||
ALTER TABLE dbo.Bit_DefinicionesAccion DROP CONSTRAINT UQ_Bit_DefinicionesAccion;
|
||||
ALTER TABLE dbo.Bit_DefinicionesAccion ALTER COLUMN CveTabla int NULL;
|
||||
ALTER TABLE dbo.Bit_DefinicionesAccion ALTER COLUMN CveTipoMovimiento tinyint NULL;
|
||||
UPDATE dbo.Bit_DefinicionesAccion
|
||||
SET CodigoAccion = CONCAT('Historica_', CveDefinicionAccion)
|
||||
WHERE CodigoAccion IS NULL;
|
||||
ALTER TABLE dbo.Bit_DefinicionesAccion ALTER COLUMN CodigoAccion varchar(150) COLLATE Modern_Spanish_CI_AS NOT NULL;
|
||||
IF OBJECT_ID(N'dbo.UQ_Bit_DefinicionesAccion_Codigo', N'UQ') IS NULL
|
||||
ALTER TABLE dbo.Bit_DefinicionesAccion ADD CONSTRAINT UQ_Bit_DefinicionesAccion_Codigo UNIQUE (CodigoAccion);
|
||||
|
||||
IF NOT EXISTS (SELECT 1 FROM sys.indexes WHERE object_id = OBJECT_ID(N'dbo.Bit_BitacoraEventos') AND name = N'IX_Bit_BitacoraEventos_Fecha')
|
||||
CREATE INDEX IX_Bit_BitacoraEventos_Fecha ON dbo.Bit_BitacoraEventos (FechaMovimiento DESC, CveBitacoraEvento DESC);
|
||||
|
||||
IF NOT EXISTS (SELECT 1 FROM sys.indexes WHERE object_id = OBJECT_ID(N'dbo.Bit_BitacoraEventos') AND name = N'IX_Bit_BitacoraEventos_Usuario_Fecha')
|
||||
CREATE INDEX IX_Bit_BitacoraEventos_Usuario_Fecha ON dbo.Bit_BitacoraEventos (CveUsuarioEjecuta, FechaMovimiento DESC);
|
||||
|
||||
IF NOT EXISTS (SELECT 1 FROM sys.indexes WHERE object_id = OBJECT_ID(N'dbo.Bit_BitacoraEventos') AND name = N'IX_Bit_BitacoraEventos_Autoriza_Fecha')
|
||||
CREATE INDEX IX_Bit_BitacoraEventos_Autoriza_Fecha ON dbo.Bit_BitacoraEventos (CveUsuarioAutoriza, FechaAutorizacion);
|
||||
|
||||
IF NOT EXISTS (SELECT 1 FROM sys.indexes WHERE object_id = OBJECT_ID(N'dbo.Bit_BitacoraEventos') AND name = N'IX_Bit_BitacoraEventos_Accion_Fecha')
|
||||
CREATE INDEX IX_Bit_BitacoraEventos_Accion_Fecha ON dbo.Bit_BitacoraEventos (CveDefinicionAccion, FechaMovimiento DESC);
|
||||
|
||||
IF NOT EXISTS (SELECT 1 FROM sys.indexes WHERE object_id = OBJECT_ID(N'dbo.Bit_Bitacora') AND name = N'IX_Bit_Bitacora_Evento')
|
||||
CREATE INDEX IX_Bit_Bitacora_Evento ON dbo.Bit_Bitacora (CveBitacoraEvento, CveBitacora);
|
||||
|
||||
IF NOT EXISTS (SELECT 1 FROM sys.indexes WHERE object_id = OBJECT_ID(N'dbo.Bit_Bitacora') AND name = N'IX_Bit_Bitacora_Tabla_LlaveNumero')
|
||||
CREATE INDEX IX_Bit_Bitacora_Tabla_LlaveNumero ON dbo.Bit_Bitacora (CveTabla, LlaveRegistro, CveBitacoraEvento) WHERE LlaveRegistro IS NOT NULL;
|
||||
|
||||
IF NOT EXISTS (SELECT 1 FROM sys.indexes WHERE object_id = OBJECT_ID(N'dbo.Bit_Bitacora') AND name = N'IX_Bit_Bitacora_Tabla_LlaveTexto')
|
||||
CREATE INDEX IX_Bit_Bitacora_Tabla_LlaveTexto ON dbo.Bit_Bitacora (CveTabla, LlaveRegistroTexto, CveBitacoraEvento) WHERE LlaveRegistroTexto IS NOT NULL;
|
||||
|
||||
-- Conservar índices equivalentes de campos y todas las relaciones existentes.
|
||||
IF NOT EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM sys.index_columns AS IC
|
||||
INNER JOIN sys.indexes AS I ON I.object_id = IC.object_id AND I.index_id = IC.index_id
|
||||
INNER JOIN sys.columns AS C ON C.object_id = IC.object_id AND C.column_id = IC.column_id
|
||||
WHERE IC.object_id = OBJECT_ID(N'dbo.Bit_BitacoraCampos')
|
||||
AND IC.key_ordinal = 1 AND C.name = N'CveBitacora'
|
||||
AND I.is_disabled = 0 AND I.has_filter = 0
|
||||
)
|
||||
CREATE INDEX IX_Bit_BitacoraCampos_Registro ON dbo.Bit_BitacoraCampos(CveBitacora);
|
||||
|
||||
-- Códigos de operaciones reales de los servicios; las claves las asigna IDENTITY.
|
||||
DECLARE @Acciones TABLE
|
||||
(
|
||||
CodigoAccion varchar(150) COLLATE Modern_Spanish_CI_AS NOT NULL PRIMARY KEY,
|
||||
NombreAccion varchar(150) COLLATE Modern_Spanish_CS_AS NOT NULL
|
||||
);
|
||||
INSERT INTO @Acciones(CodigoAccion, NombreAccion)
|
||||
VALUES
|
||||
('ActualizarAvanceEtapa', 'Actualizar avance etapa'),
|
||||
('ActualizarProductoServicioPrecioTramite', 'Actualizar producto servicio precio tramite'),
|
||||
('AgregarSolicitudEtapa', 'Agregar solicitud etapa'),
|
||||
('AgregarTipoTramitePadreTramite', 'Agregar tipo tramite padre tramite'),
|
||||
('CambiarEstatusSolicitud', 'Cambiar estatus de solicitud'),
|
||||
('CancelarCita', 'Cancelar cita'),
|
||||
('CargarDocumentoSolicitud', 'Cargar documento solicitud'),
|
||||
('CargarDocumentoVisita', 'Cargar documento visita'),
|
||||
('EliminarArchivoEtapa', 'Eliminar archivo etapa'),
|
||||
('EliminarClasificacion', 'Eliminar clasificacion'),
|
||||
('EliminarComentarioVisita', 'Eliminar comentario visita'),
|
||||
('EliminarConfiguracionSolicitud', 'Eliminar configuracion solicitud'),
|
||||
('EliminarCuestionarioVisita', 'Eliminar cuestionario visita'),
|
||||
('EliminarDiaFestivo', 'Eliminar dia festivo'),
|
||||
('EliminarDocumentoRequeridoTramite', 'Eliminar documento requerido tramite'),
|
||||
('EliminarDocumentoSolicitud', 'Eliminar documento solicitud'),
|
||||
('EliminarDocumentoVisita', 'Eliminar documento visita'),
|
||||
('EliminarEstatusTramite', 'Eliminar estatus tramite'),
|
||||
('EliminarEtapa', 'Eliminar etapa'),
|
||||
('EliminarFraccionamiento', 'Eliminar fraccionamiento'),
|
||||
('EliminarGisEtapa', 'Eliminar gis etapa'),
|
||||
('EliminarLote', 'Eliminar lote'),
|
||||
('EliminarOpcionTramite', 'Eliminar opcion tramite'),
|
||||
('EliminarOpcionVisita', 'Eliminar opcion visita'),
|
||||
('EliminarPagoDetalleTramite', 'Eliminar pago detalle tramite'),
|
||||
('EliminarPagoTramite', 'Eliminar pago tramite'),
|
||||
('EliminarPlantillaVisita', 'Eliminar plantilla visita'),
|
||||
('EliminarPreguntaTramite', 'Eliminar pregunta tramite'),
|
||||
('EliminarPreguntaVisita', 'Eliminar pregunta visita'),
|
||||
('EliminarProductoServicio', 'Eliminar producto servicio'),
|
||||
('EliminarTipoDocumentoTramite', 'Eliminar tipo documento tramite'),
|
||||
('EliminarTipoTramite', 'Eliminar tipo tramite'),
|
||||
('EliminarTipoTramitePadreTramite', 'Eliminar tipo tramite padre tramite'),
|
||||
('EliminarTurno', 'Eliminar turno'),
|
||||
('EliminarUnidadMedida', 'Eliminar unidad medida'),
|
||||
('EliminarUsuario', 'Eliminar usuario'),
|
||||
('GuardarCita', 'Guardar cita'),
|
||||
('GuardarClasificacion', 'Guardar clasificacion'),
|
||||
('GuardarClienteUsuario', 'Guardar cliente usuario'),
|
||||
('GuardarComentarioVisita', 'Guardar comentario visita'),
|
||||
('GuardarCondicionesEtapa', 'Guardar condiciones etapa'),
|
||||
('GuardarConfiguracionSolicitud', 'Guardar configuracion solicitud'),
|
||||
('GuardarConfiguracionVisitas', 'Guardar configuracion visitas'),
|
||||
('GuardarCuestionarioVisita', 'Guardar cuestionario visita'),
|
||||
('GuardarDiaFestivo', 'Guardar dia festivo'),
|
||||
('GuardarDocumentoRequeridoTramite', 'Guardar documento requerido tramite'),
|
||||
('GuardarEstatusTramite', 'Guardar estatus tramite'),
|
||||
('GuardarEtapa', 'Guardar etapa'),
|
||||
('GuardarFraccionamiento', 'Guardar fraccionamiento'),
|
||||
('GuardarGisEtapa', 'Guardar gis etapa'),
|
||||
('GuardarLote', 'Guardar lote'),
|
||||
('GuardarLotes', 'Guardar lotes'),
|
||||
('GuardarOpcionTramite', 'Guardar opcion tramite'),
|
||||
('GuardarOpcionVisita', 'Guardar opcion visita'),
|
||||
('GuardarPagoDetalleTramite', 'Guardar pago detalle tramite'),
|
||||
('GuardarPagoTramite', 'Guardar pago tramite'),
|
||||
('GuardarPlantillaVisita', 'Guardar plantilla visita'),
|
||||
('GuardarPreguntaTramite', 'Guardar pregunta tramite'),
|
||||
('GuardarPreguntaVisita', 'Guardar pregunta visita'),
|
||||
('GuardarProductoServicio', 'Guardar producto servicio'),
|
||||
('GuardarTipoDocumentoTramite', 'Guardar tipo documento tramite'),
|
||||
('GuardarTipoTramite', 'Guardar tipo tramite'),
|
||||
('GuardarTurno', 'Guardar turno'),
|
||||
('GuardarUnidadMedida', 'Guardar unidad medida'),
|
||||
('GuardarUsuario', 'Guardar usuario'),
|
||||
('GuardarVisita', 'Guardar visita'),
|
||||
('LimpiarLotesEtapa', 'Limpiar lotes etapa'),
|
||||
('MoverOrdenEtapa', 'Mover orden etapa'),
|
||||
('RegistrarArchivoEtapa', 'Registrar archivo etapa'),
|
||||
('ReiniciarContrasenaUsuario', 'Reiniciar contraseña de usuario'),
|
||||
('ReordenarCatalogoTramite', 'Reordenar catalogo tramite'),
|
||||
('ReordenarPlantillaVisita', 'Reordenar plantilla visita'),
|
||||
('RevisarDocumentoSolicitud', 'Revisar documento solicitud');
|
||||
|
||||
INSERT INTO dbo.Bit_DefinicionesAccion
|
||||
(CodigoAccion, NombreAccion, DescripcionAccion, CveTabla, CveTipoMovimiento, Activo)
|
||||
SELECT A.CodigoAccion, A.NombreAccion, A.NombreAccion, NULL, NULL, 1
|
||||
FROM @Acciones AS A
|
||||
WHERE NOT EXISTS
|
||||
(
|
||||
SELECT 1 FROM dbo.Bit_DefinicionesAccion AS D WHERE D.CodigoAccion = A.CodigoAccion
|
||||
);
|
||||
|
||||
-- Resolver el turno con metadatos existentes, sin claves de catálogo inventadas.
|
||||
UPDATE C
|
||||
SET C.CveTablaReferencia = T.CveTabla,
|
||||
C.CveCampoMostrarReferencia = M.CveCampo
|
||||
FROM dbo.Bit_Campos AS C
|
||||
INNER JOIN dbo.Bit_Tablas AS H ON H.CveTabla = C.CveTabla
|
||||
INNER JOIN dbo.Bit_Tablas AS T ON T.NombreTablaSQL = 'Sis_Turnos'
|
||||
INNER JOIN dbo.Bit_Campos AS M ON M.CveTabla = T.CveTabla AND M.NombreCampoSQL = 'Turno'
|
||||
WHERE H.NombreTablaSQL = 'Sis_TurnosHorarios' AND C.NombreCampoSQL = 'CveTurno';
|
||||
|
||||
IF EXISTS
|
||||
(
|
||||
SELECT 1 FROM #ControlMigracionBitacora
|
||||
WHERE Registros <> (SELECT COUNT_BIG(*) FROM dbo.Bit_Bitacora)
|
||||
OR Campos <> (SELECT COUNT_BIG(*) FROM dbo.Bit_BitacoraCampos)
|
||||
OR Relaciones <> (SELECT COUNT_BIG(*) FROM dbo.Bit_BitacoraRelaciones)
|
||||
)
|
||||
THROW 51000, 'Cambió la cantidad de registros, campos o relaciones durante la migración.', 1;
|
||||
|
||||
SELECT
|
||||
(SELECT COUNT_BIG(*) FROM dbo.Bit_BitacoraEventos WHERE EsHistorico = 1) AS EventosHistoricos,
|
||||
(SELECT COUNT_BIG(*) FROM dbo.Bit_Bitacora) AS Registros,
|
||||
(SELECT COUNT_BIG(*) FROM dbo.Bit_BitacoraCampos) AS Campos,
|
||||
(SELECT COUNT_BIG(*) FROM dbo.Bit_BitacoraRelaciones) AS Relaciones;
|
||||
DROP TABLE #ControlMigracionBitacora;
|
||||
GO
|
||||
1098
Migracion_Bitacora_Relaciones_Campos_20260722.sql
Normal file
1098
Migracion_Bitacora_Relaciones_Campos_20260722.sql
Normal file
File diff suppressed because it is too large
Load Diff
2603
Migracion_Borrado_Fisico_20260722.sql
Normal file
2603
Migracion_Borrado_Fisico_20260722.sql
Normal file
File diff suppressed because it is too large
Load Diff
703
Migracion_Collation_CS_AS_20260723.sql
Normal file
703
Migracion_Collation_CS_AS_20260723.sql
Normal file
@@ -0,0 +1,703 @@
|
||||
SET NOCOUNT ON;
|
||||
SET XACT_ABORT ON;
|
||||
SET ANSI_NULLS ON;
|
||||
SET QUOTED_IDENTIFIER ON;
|
||||
|
||||
/* Texto general: CS_AS. Codigo* e identificadores reales de usuario: CI_AS. */
|
||||
IF EXISTS (SELECT 1 FROM [dbo].[Clasificaciones] GROUP BY [Clasificacion] COLLATE Modern_Spanish_CS_AS, [Codigo] COLLATE Modern_Spanish_CI_AS HAVING COUNT_BIG(*) > 1) THROW 51000, N'La conversión genera duplicados en dbo.Clasificaciones, índice UN_Clasificacion.', 1;
|
||||
IF EXISTS (SELECT 1 FROM [dbo].[Sis_Permisos] GROUP BY [CodigoPermiso] COLLATE Modern_Spanish_CI_AS HAVING COUNT_BIG(*) > 1) THROW 51000, N'La conversión genera duplicados en dbo.Sis_Permisos, índice UQ_Sis_Permisos_CodigoPermiso.', 1;
|
||||
IF EXISTS (SELECT 1 FROM [dbo].[Sis_Usuarios] GROUP BY [NombreUsuario] COLLATE Modern_Spanish_CI_AS HAVING COUNT_BIG(*) > 1) THROW 51000, N'La conversión genera duplicados en dbo.Sis_Usuarios, índice UQ_Sis_Usuarios_NombreUsuario.', 1;
|
||||
IF EXISTS (SELECT 1 FROM [dbo].[Tra_EstatusSolicitud] GROUP BY [Codigo] COLLATE Modern_Spanish_CI_AS HAVING COUNT_BIG(*) > 1) THROW 51000, N'La conversión genera duplicados en dbo.Tra_EstatusSolicitud, índice UQ_Tra_EstatusSolicitud_Codigo.', 1;
|
||||
IF EXISTS (SELECT 1 FROM [dbo].[Tra_Preguntas] WHERE ([Codigo] IS NOT NULL) GROUP BY [Codigo] COLLATE Modern_Spanish_CI_AS HAVING COUNT_BIG(*) > 1) THROW 51000, N'La conversión genera duplicados en dbo.Tra_Preguntas, índice UX_Tra_Preguntas_Codigo.', 1;
|
||||
IF EXISTS (SELECT 1 FROM [dbo].[Tra_TiposTramite] GROUP BY [Codigo] COLLATE Modern_Spanish_CI_AS HAVING COUNT_BIG(*) > 1) THROW 51000, N'La conversión genera duplicados en dbo.Tra_TiposTramite, índice UQ_Tra_TiposTramite_Codigo.', 1;
|
||||
|
||||
BEGIN TRY
|
||||
BEGIN TRANSACTION;
|
||||
|
||||
/* Eliminar llaves foráneas */
|
||||
ALTER TABLE [dbo].[EstatusFactura] DROP CONSTRAINT [FK_EstatusFactura_Vta_TipoDocumentos];
|
||||
ALTER TABLE [dbo].[Ventas] DROP CONSTRAINT [FK_Ventas_Vta_TipoDocumentos];
|
||||
|
||||
/* Eliminar CHECK */
|
||||
ALTER TABLE [dbo].[Bit_Bitacora] DROP CONSTRAINT [CK_Bit_Bitacora_Autorizacion];
|
||||
ALTER TABLE [dbo].[Bit_BitacoraRelaciones] DROP CONSTRAINT [CK_Bit_BitacoraRelaciones_ValorRelacion];
|
||||
ALTER TABLE [dbo].[Clientes] DROP CONSTRAINT [CK_Clientes_RFC_Requerido];
|
||||
ALTER TABLE [dbo].[Conta_Cuentas] DROP CONSTRAINT [CK_Conta_Cuentas_Padre];
|
||||
ALTER TABLE [dbo].[Conta_Cuentas] DROP CONSTRAINT [CK_Conta_Cuentas_Padre_Requerido];
|
||||
ALTER TABLE [dbo].[Conta_PrePolizas] DROP CONSTRAINT [CK_Conta_PrePolizas_Concepto];
|
||||
ALTER TABLE [dbo].[Conta_PrePolizas] DROP CONSTRAINT [CK_Conta_PrePolizas_Fecha_2000_2050];
|
||||
ALTER TABLE [dbo].[Conta_PrePolizas] DROP CONSTRAINT [CK_Conta_PrePolizas_FolioPoliza];
|
||||
ALTER TABLE [dbo].[Fraccionamientos] DROP CONSTRAINT [CK_Fraccionamientos_Hectareas];
|
||||
ALTER TABLE [dbo].[FraccionamientosEtapas] DROP CONSTRAINT [CK_FraccionamientosEtapas_Hectareas];
|
||||
ALTER TABLE [dbo].[FraccionamientosLotes] DROP CONSTRAINT [CK_FraccionamientosLotes_MetrosCuadrados];
|
||||
ALTER TABLE [dbo].[ProductosServicios] DROP CONSTRAINT [CK_AsientoContableCompras];
|
||||
ALTER TABLE [dbo].[ProductosServicios] DROP CONSTRAINT [CK_AsientoContableVentas];
|
||||
ALTER TABLE [dbo].[ProductosServicios] DROP CONSTRAINT [CK_ProductosServicios_IVA];
|
||||
ALTER TABLE [dbo].[Sis_Notificaciones] DROP CONSTRAINT [CK_Sis_Notificaciones_Estado];
|
||||
ALTER TABLE [dbo].[Sis_Notificaciones] DROP CONSTRAINT [CK_Sis_Notificaciones_Tipo];
|
||||
ALTER TABLE [dbo].[Sis_NotificacionesEnvios] DROP CONSTRAINT [CK_Sis_NotificacionesEnvios_Canal];
|
||||
ALTER TABLE [dbo].[Sis_NotificacionesEnvios] DROP CONSTRAINT [CK_Sis_NotificacionesEnvios_Estado];
|
||||
ALTER TABLE [dbo].[Sis_PoliticasLimpieza] DROP CONSTRAINT [CK_Sis_PoliticasLimpieza_DiasRetencion];
|
||||
ALTER TABLE [dbo].[Sis_PoliticasLimpieza] DROP CONSTRAINT [CK_Sis_PoliticasLimpieza_TamanoLote];
|
||||
ALTER TABLE [dbo].[Sis_UsuariosAutorizaciones] DROP CONSTRAINT [CK_Sis_UsuariosAutorizaciones_Estado];
|
||||
ALTER TABLE [dbo].[Tra_CostosTramite] DROP CONSTRAINT [CK_Tra_CostosTramite_Importe];
|
||||
ALTER TABLE [dbo].[Tra_CostosTramite] DROP CONSTRAINT [CK_Tra_CostosTramite_Vigencia];
|
||||
ALTER TABLE [dbo].[Tra_DocumentosSolicitud] DROP CONSTRAINT [CK_Tra_DocumentosSolicitud_Tamano];
|
||||
ALTER TABLE [dbo].[Tra_RespuestasSolicitud] DROP CONSTRAINT [CK_Tra_RespuestasSolicitud_Valor];
|
||||
ALTER TABLE [dbo].[Tra_SolicitudesDependencias] DROP CONSTRAINT [CK_Tra_SolicitudesDependencias_Diferentes];
|
||||
ALTER TABLE [dbo].[Tra_TiposDocumento] DROP CONSTRAINT [CK_Tra_TiposDocumento_Tamano];
|
||||
ALTER TABLE [dbo].[Ventas] DROP CONSTRAINT [CHK_VentasMail];
|
||||
ALTER TABLE [dbo].[Ventas] DROP CONSTRAINT [CK_Ventas];
|
||||
ALTER TABLE [dbo].[Ventas] DROP CONSTRAINT [CK_Ventas_1];
|
||||
ALTER TABLE [dbo].[Ventas] DROP CONSTRAINT [CK_Ventas_Dev_CveVentaPadre];
|
||||
ALTER TABLE [dbo].[Ventas] DROP CONSTRAINT [CK_Ventas_FechaEjecucion_MinMax];
|
||||
ALTER TABLE [dbo].[Ventas] DROP CONSTRAINT [CK_Ventas_Moneda_TipoCambio];
|
||||
ALTER TABLE [dbo].[Ventas] DROP CONSTRAINT [CK_Ventas_TMp_AlmacenInactivo];
|
||||
ALTER TABLE [dbo].[Ventas] DROP CONSTRAINT [CK_Ventas_Total];
|
||||
ALTER TABLE [dbo].[Vta_Pagos] DROP CONSTRAINT [CK_Vta_Pagos_Importe];
|
||||
ALTER TABLE [dbo].[Vta_Pagos] DROP CONSTRAINT [CK_Vta_Pagos_SaldoFavor];
|
||||
|
||||
/* Eliminar índices */
|
||||
ALTER TABLE [dbo].[Banc_Bancos] DROP CONSTRAINT [UN_Bancos];
|
||||
ALTER TABLE [dbo].[Banc_BancosCuentas] DROP CONSTRAINT [UN_Banc_BancosCuentas];
|
||||
ALTER TABLE [dbo].[Banc_TiposCuenta] DROP CONSTRAINT [UN_BancTipoCuenta];
|
||||
DROP INDEX [IX_Bit_Bitacora_Tabla_Llave_Fecha] ON [dbo].[Bit_Bitacora];
|
||||
DROP INDEX [IX_Bit_BitacoraRelaciones_Tabla_Llave] ON [dbo].[Bit_BitacoraRelaciones];
|
||||
DROP INDEX [IX_Bit_BitacoraRelaciones_Filtro] ON [dbo].[Bit_BitacoraRelaciones];
|
||||
DROP INDEX [IX_Bit_BitacoraRelaciones_FiltroTexto] ON [dbo].[Bit_BitacoraRelaciones];
|
||||
ALTER TABLE [dbo].[Bit_Campos] DROP CONSTRAINT [UQ_Bit_Campos_Tabla_Campo];
|
||||
ALTER TABLE [dbo].[Bit_DefinicionesAccion] DROP CONSTRAINT [UQ_Bit_DefinicionesAccion];
|
||||
ALTER TABLE [dbo].[Bit_Tablas] DROP CONSTRAINT [UQ_Bit_Tablas_NombreTablaSQL];
|
||||
ALTER TABLE [dbo].[Bit_TiposMovimiento] DROP CONSTRAINT [UQ_Bit_TiposMovimiento_Nombre];
|
||||
ALTER TABLE [dbo].[Bit_TiposRelacion] DROP CONSTRAINT [UQ_Bit_TiposRelacion_Nombre];
|
||||
ALTER TABLE [dbo].[Clasificaciones] DROP CONSTRAINT [UN_Clasificacion];
|
||||
ALTER TABLE [dbo].[Conta_ConceptosContables] DROP CONSTRAINT [UN_Conta_ConceptosContables];
|
||||
ALTER TABLE [dbo].[Conta_TiposPoliza] DROP CONSTRAINT [UN_ContaTipoPoliza];
|
||||
ALTER TABLE [dbo].[Fraccionamientos] DROP CONSTRAINT [UQ_Fraccionamientos_Cliente_Nombre];
|
||||
ALTER TABLE [dbo].[FraccionamientosEtapas] DROP CONSTRAINT [UQ_FraccionamientosEtapas_Fraccionamiento_Etapa];
|
||||
DROP INDEX [IX_FraccionamientosLotes_Etapa] ON [dbo].[FraccionamientosLotes];
|
||||
ALTER TABLE [dbo].[Gral_Categorias] DROP CONSTRAINT [UK_Gral_Categorias];
|
||||
ALTER TABLE [dbo].[Gral_Monedas] DROP CONSTRAINT [UN_Moneda];
|
||||
DROP INDEX [IND_Gral_SAT_Colonia_CP] ON [dbo].[Gral_SAT_Colonia];
|
||||
DROP INDEX [IX_Gral_SAT_Colonia_CP_Vigente] ON [dbo].[Gral_SAT_Colonia];
|
||||
DROP INDEX [IND_Gral_SAT_CP_ClaveSATEstado] ON [dbo].[Gral_SAT_CP];
|
||||
ALTER TABLE [dbo].[Gral_SAT_CP] DROP CONSTRAINT [UQ_Gral_SAT_CP_CP];
|
||||
DROP INDEX [IX_Gral_SAT_CP_BusquedaRegistro] ON [dbo].[Gral_SAT_CP];
|
||||
DROP INDEX [IX_Gral_SAT_Localidad_Claves_Vigente] ON [dbo].[Gral_SAT_Localidad];
|
||||
DROP INDEX [IX_Gral_SAT_Municipio_Claves_Vigente] ON [dbo].[Gral_SAT_Municipio];
|
||||
ALTER TABLE [dbo].[Gral_SAT_UnidadesMedida] DROP CONSTRAINT [UK_Gral_SAT_UnidadesMedida];
|
||||
ALTER TABLE [dbo].[Inv_Almacenes] DROP CONSTRAINT [UN_INV_Almacenes];
|
||||
ALTER TABLE [dbo].[Inv_TiposAlmacenes] DROP CONSTRAINT [UN_INV_TiposAlmacenes];
|
||||
ALTER TABLE [dbo].[Proyectos] DROP CONSTRAINT [UN_Proyectos];
|
||||
ALTER TABLE [dbo].[Sat_Bancos] DROP CONSTRAINT [UQ_Sat_Bancos_CveBanco];
|
||||
DROP INDEX [IX_Sis_IntentosInicioSesion_NombreUsuario_FechaCreacion] ON [dbo].[Sis_IntentosInicioSesion];
|
||||
ALTER TABLE [dbo].[Sis_Permisos] DROP CONSTRAINT [UQ_Sis_Permisos_CodigoPermiso];
|
||||
ALTER TABLE [dbo].[Sis_Plataformas] DROP CONSTRAINT [UQ_Sis_Plataformas_NombrePlataforma];
|
||||
ALTER TABLE [dbo].[Sis_PoliticasLimpieza] DROP CONSTRAINT [PK_Sis_PoliticasLimpieza];
|
||||
ALTER TABLE [dbo].[Sis_Roles] DROP CONSTRAINT [UQ_Sis_Roles_NombreRol];
|
||||
ALTER TABLE [dbo].[Sis_Usuarios] DROP CONSTRAINT [UQ_Sis_Usuarios_NombreUsuario];
|
||||
DROP INDEX [UQ_Sis_Usuarios_CorreoElectronico] ON [dbo].[Sis_Usuarios];
|
||||
ALTER TABLE [dbo].[Sis_UsuariosSesiones] DROP CONSTRAINT [UQ_Sis_UsuariosSesiones_TokenSesion];
|
||||
ALTER TABLE [dbo].[Sis_UsuariosVerificacionesCorreo] DROP CONSTRAINT [UQ_Sis_UsuariosVerificacionesCorreo_HashToken];
|
||||
ALTER TABLE [dbo].[SubProyectos] DROP CONSTRAINT [UN_SubProyectos];
|
||||
ALTER TABLE [dbo].[Tra_EstatusSolicitud] DROP CONSTRAINT [UQ_Tra_EstatusSolicitud_Codigo];
|
||||
ALTER TABLE [dbo].[Tra_OpcionesPregunta] DROP CONSTRAINT [UQ_Tra_OpcionesPregunta_Pregunta_Texto];
|
||||
DROP INDEX [UX_Tra_Preguntas_Codigo] ON [dbo].[Tra_Preguntas];
|
||||
ALTER TABLE [dbo].[Tra_Solicitudes] DROP CONSTRAINT [UQ_Tra_Solicitudes_Folio];
|
||||
ALTER TABLE [dbo].[Tra_TiposDocumento] DROP CONSTRAINT [UQ_Tra_TiposDocumento_Nombre];
|
||||
ALTER TABLE [dbo].[Tra_TiposTramite] DROP CONSTRAINT [UQ_Tra_TiposTramite_Codigo];
|
||||
ALTER TABLE [dbo].[UnidadesMedida] DROP CONSTRAINT [UN_UnidadesMedida];
|
||||
ALTER TABLE [dbo].[Ventas] DROP CONSTRAINT [UK_Ventas_TipoDocto_Serie_Folio_CveSubProyecto];
|
||||
ALTER TABLE [dbo].[Vta_ClientesSucursales] DROP CONSTRAINT [UN_Vta_ClientesSucursales];
|
||||
ALTER TABLE [dbo].[Vta_TipoDocumentos] DROP CONSTRAINT [PK_Vta_TipoDocumentos];
|
||||
|
||||
/* Eliminar estadísticas */
|
||||
DROP STATISTICS [dbo].[Bit_Bitacora].[_WA_Sys_00000008_1590259A];
|
||||
DROP STATISTICS [dbo].[Bit_Bitacora].[_WA_Sys_0000000D_1590259A];
|
||||
DROP STATISTICS [dbo].[Bit_Campos].[_WA_Sys_00000003_0559BDD1];
|
||||
DROP STATISTICS [dbo].[Bit_Campos].[_WA_Sys_00000009_0559BDD1];
|
||||
DROP STATISTICS [dbo].[Clientes].[_WA_Sys_00000013_3D2915A8];
|
||||
DROP STATISTICS [dbo].[Fraccionamientos].[_WA_Sys_00000003_3BCADD1B];
|
||||
DROP STATISTICS [dbo].[Fraccionamientos].[_WA_Sys_00000005_3BCADD1B];
|
||||
DROP STATISTICS [dbo].[Fraccionamientos_Estatus].[_WA_Sys_00000002_50E5F592];
|
||||
DROP STATISTICS [dbo].[Gral_SAT_CP].[_WA_Sys_00000003_2CA8951C];
|
||||
DROP STATISTICS [dbo].[Gral_SAT_CP].[_WA_Sys_00000004_2CA8951C];
|
||||
DROP STATISTICS [dbo].[Gral_SAT_Estado].[_WA_Sys_00000002_6225902D];
|
||||
DROP STATISTICS [dbo].[Gral_SAT_Estado].[_WA_Sys_00000003_6225902D];
|
||||
DROP STATISTICS [dbo].[Gral_SAT_Localidad].[_WA_Sys_00000002_603D47BB];
|
||||
DROP STATISTICS [dbo].[Gral_SAT_Localidad].[_WA_Sys_00000003_603D47BB];
|
||||
DROP STATISTICS [dbo].[Gral_SAT_Municipio].[_WA_Sys_00000002_2D9CB955];
|
||||
DROP STATISTICS [dbo].[Gral_SAT_Municipio].[_WA_Sys_00000003_2D9CB955];
|
||||
DROP STATISTICS [dbo].[Gral_SAT_Pais].[_WA_Sys_00000002_32616E72];
|
||||
DROP STATISTICS [dbo].[Sis_Modulos].[_WA_Sys_00000004_4BAC3F29];
|
||||
DROP STATISTICS [dbo].[Sis_Modulos].[_WA_Sys_00000006_4BAC3F29];
|
||||
DROP STATISTICS [dbo].[Sis_Usuarios].[_WA_Sys_00000004_440B1D61];
|
||||
|
||||
/* Eliminar columnas calculadas */
|
||||
ALTER TABLE [dbo].[Conta_PrePolizas] DROP COLUMN [AnioMes];
|
||||
ALTER TABLE [dbo].[ProductosServicios] DROP COLUMN [CodigoPS];
|
||||
ALTER TABLE [dbo].[Ventas] DROP COLUMN [SerieFolio];
|
||||
|
||||
/* Alterar columnas */
|
||||
ALTER TABLE [dbo].[Banc_Bancos] ALTER COLUMN [Banco] [varchar](50) COLLATE Modern_Spanish_CS_AS NOT NULL;
|
||||
ALTER TABLE [dbo].[Banc_Bancos] ALTER COLUMN [Ejecutivo] [varchar](50) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Banc_Bancos] ALTER COLUMN [Telefono] [varchar](10) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Banc_BancosCuentas] ALTER COLUMN [NumCuenta] [varchar](50) COLLATE Modern_Spanish_CS_AS NOT NULL;
|
||||
ALTER TABLE [dbo].[Banc_BancosCuentas] ALTER COLUMN [CLABE] [varchar](18) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Banc_BancosCuentas] ALTER COLUMN [FormatoCheque] [varchar](50) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Banc_BancosCuentas] ALTER COLUMN [ConvenioPagoElectronico] [varchar](10) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Banc_BancosCuentas] ALTER COLUMN [PrefijoConta] [varchar](2) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Banc_BancosCuentas] ALTER COLUMN [ConvenioPagoElectronicoGrupos] [varchar](10) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Banc_BancosCuentas] ALTER COLUMN [NumeroSucursal] [varchar](10) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Banc_BancosCuentas] ALTER COLUMN [ConvenioPagoElectronicoNomina] [varchar](10) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Banc_TiposCuenta] ALTER COLUMN [TipoCuenta] [varchar](50) COLLATE Modern_Spanish_CS_AS NOT NULL;
|
||||
ALTER TABLE [dbo].[Bit_Bitacora] ALTER COLUMN [LlaveRegistro] [nvarchar](250) COLLATE Modern_Spanish_CS_AS NOT NULL;
|
||||
ALTER TABLE [dbo].[Bit_Bitacora] ALTER COLUMN [DescripcionMovimiento] [nvarchar](1000) COLLATE Modern_Spanish_CS_AS NOT NULL;
|
||||
ALTER TABLE [dbo].[Bit_Bitacora] ALTER COLUMN [DireccionIP] [varchar](50) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Bit_Bitacora] ALTER COLUMN [NombreEquipo] [varchar](150) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Bit_Bitacora] ALTER COLUMN [Modulo] [varchar](150) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Bit_BitacoraCampos] ALTER COLUMN [ValorAnterior] [nvarchar](MAX) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Bit_BitacoraCampos] ALTER COLUMN [ValorNuevo] [nvarchar](MAX) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Bit_BitacoraRelaciones] ALTER COLUMN [LlaveRegistroRelacionada] [nvarchar](250) COLLATE Modern_Spanish_CS_AS NOT NULL;
|
||||
ALTER TABLE [dbo].[Bit_BitacoraRelaciones] ALTER COLUMN [ValorRelacionTexto] [nvarchar](250) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Bit_BitacoraRelaciones] ALTER COLUMN [DescripcionRelacion] [nvarchar](500) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Bit_Campos] ALTER COLUMN [NombreCampoSQL] [varchar](128) COLLATE Modern_Spanish_CS_AS NOT NULL;
|
||||
ALTER TABLE [dbo].[Bit_Campos] ALTER COLUMN [NombreMostrar] [varchar](150) COLLATE Modern_Spanish_CS_AS NOT NULL;
|
||||
ALTER TABLE [dbo].[Bit_Campos] ALTER COLUMN [TipoDatoSQL] [varchar](128) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Bit_DefinicionesAccion] ALTER COLUMN [NombreAccion] [varchar](150) COLLATE Modern_Spanish_CS_AS NOT NULL;
|
||||
ALTER TABLE [dbo].[Bit_DefinicionesAccion] ALTER COLUMN [DescripcionAccion] [varchar](500) COLLATE Modern_Spanish_CS_AS NOT NULL;
|
||||
ALTER TABLE [dbo].[Bit_Tablas] ALTER COLUMN [NombreTablaSQL] [varchar](128) COLLATE Modern_Spanish_CS_AS NOT NULL;
|
||||
ALTER TABLE [dbo].[Bit_Tablas] ALTER COLUMN [NombreMostrar] [varchar](150) COLLATE Modern_Spanish_CS_AS NOT NULL;
|
||||
ALTER TABLE [dbo].[Bit_Tablas] ALTER COLUMN [Descripcion] [varchar](500) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Bit_Tablas] ALTER COLUMN [NombreCampoLlaveSQL] [varchar](128) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Bit_TiposMovimiento] ALTER COLUMN [Nombre] [varchar](50) COLLATE Modern_Spanish_CS_AS NOT NULL;
|
||||
ALTER TABLE [dbo].[Bit_TiposMovimiento] ALTER COLUMN [Descripcion] [varchar](250) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Bit_TiposRelacion] ALTER COLUMN [Nombre] [varchar](100) COLLATE Modern_Spanish_CS_AS NOT NULL;
|
||||
ALTER TABLE [dbo].[Bit_TiposRelacion] ALTER COLUMN [Descripcion] [varchar](300) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Clasificaciones] ALTER COLUMN [Codigo] [varchar](20) COLLATE Modern_Spanish_CI_AS NULL;
|
||||
ALTER TABLE [dbo].[Clasificaciones] ALTER COLUMN [Clasificacion] [varchar](200) COLLATE Modern_Spanish_CS_AS NOT NULL;
|
||||
ALTER TABLE [dbo].[Clientes] ALTER COLUMN [Nombre] [varchar](200) COLLATE Modern_Spanish_CS_AS NOT NULL;
|
||||
ALTER TABLE [dbo].[Clientes] ALTER COLUMN [Codigo] [varchar](50) COLLATE Modern_Spanish_CI_AS NULL;
|
||||
ALTER TABLE [dbo].[Clientes] ALTER COLUMN [NombreCorto] [varchar](30) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Clientes] ALTER COLUMN [NombreComercial] [varchar](200) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Clientes] ALTER COLUMN [ApellidoPaterno] [varchar](50) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Clientes] ALTER COLUMN [ApellidoMaterno] [varchar](50) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Clientes] ALTER COLUMN [Nombres] [varchar](50) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Clientes] ALTER COLUMN [Sucursal] [varchar](20) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Clientes] ALTER COLUMN [Direccion] [varchar](90) COLLATE Modern_Spanish_CS_AS NOT NULL;
|
||||
ALTER TABLE [dbo].[Clientes] ALTER COLUMN [NoExt] [varchar](20) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Clientes] ALTER COLUMN [NoInt] [varchar](50) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Clientes] ALTER COLUMN [Colonia] [varchar](50) COLLATE Modern_Spanish_CS_AS NOT NULL;
|
||||
ALTER TABLE [dbo].[Clientes] ALTER COLUMN [Localidad] [varchar](50) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Clientes] ALTER COLUMN [Ciudad] [varchar](50) COLLATE Modern_Spanish_CS_AS NOT NULL;
|
||||
ALTER TABLE [dbo].[Clientes] ALTER COLUMN [Estado] [varchar](35) COLLATE Modern_Spanish_CS_AS NOT NULL;
|
||||
ALTER TABLE [dbo].[Clientes] ALTER COLUMN [Pais] [varchar](50) COLLATE Modern_Spanish_CS_AS NOT NULL;
|
||||
ALTER TABLE [dbo].[Clientes] ALTER COLUMN [RFC] [varchar](15) COLLATE Modern_Spanish_CS_AS NOT NULL;
|
||||
ALTER TABLE [dbo].[Clientes] ALTER COLUMN [CP] [varchar](10) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Clientes] ALTER COLUMN [Telefono] [varchar](25) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Clientes] ALTER COLUMN [TelefonoExtension] [varchar](10) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Clientes] ALTER COLUMN [TelefonoOtros] [varchar](50) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Clientes] ALTER COLUMN [Contacto] [varchar](255) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Clientes] ALTER COLUMN [Mail] [varchar](500) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Clientes] ALTER COLUMN [Pagina] [varchar](50) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Clientes] ALTER COLUMN [Giro] [varchar](50) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Clientes] ALTER COLUMN [NotificarA] [varchar](500) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Clientes] ALTER COLUMN [ConvenioCIE] [varchar](50) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Clientes] ALTER COLUMN [RecepcionPagos] [varchar](15) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Clientes] ALTER COLUMN [TipoPago] [varchar](50) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Clientes] ALTER COLUMN [Vendedor] [varchar](20) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Clientes] ALTER COLUMN [Tipo] [varchar](3) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Clientes] ALTER COLUMN [FormaFacturacion] [varchar](13) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Clientes] ALTER COLUMN [NumCtaPago] [varchar](30) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Clientes] ALTER COLUMN [FEMSA_NumSociedad] [varchar](4) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Clientes] ALTER COLUMN [FEMSA_NumProveedor] [varchar](10) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Clientes] ALTER COLUMN [FEMSA_Mail] [varchar](50) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Clientes] ALTER COLUMN [Detallista_GLNComprador] [varchar](18) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Clientes] ALTER COLUMN [Detallista_Departamento] [varchar](50) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Clientes] ALTER COLUMN [Detallista_GLNVendedor] [varchar](18) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Clientes] ALTER COLUMN [Detallista_NumProveedor] [varchar](10) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Clientes] ALTER COLUMN [SevenEleven_NumProveedor] [varchar](20) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Clientes] ALTER COLUMN [Ford_GSDB] [varchar](5) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Clientes] ALTER COLUMN [MailCotizacion] [varchar](300) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Clientes] ALTER COLUMN [CobranzaContacto] [varchar](255) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Clientes] ALTER COLUMN [CobranzaTelefono] [varchar](10) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Clientes] ALTER COLUMN [CobranzaExt] [varchar](10) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Clientes] ALTER COLUMN [CobranzaCorreo] [varchar](2000) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Clientes] ALTER COLUMN [Horario] [varchar](50) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Clientes] ALTER COLUMN [Documentacion] [varchar](255) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Clientes] ALTER COLUMN [PortalFacturacion] [varchar](255) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Clientes] ALTER COLUMN [DiasPago] [varchar](50) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Clientes] ALTER COLUMN [UsuarioPortal] [varchar](50) COLLATE Modern_Spanish_CI_AS NULL;
|
||||
ALTER TABLE [dbo].[Clientes] ALTER COLUMN [PasswordPortal] [varchar](50) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Clientes] ALTER COLUMN [DiasRevision] [varchar](50) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Clientes] ALTER COLUMN [ObservacionRevision] [varchar](255) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Clientes] ALTER COLUMN [ReferenciaFiscal] [varchar](100) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Clientes] ALTER COLUMN [Celular] [varchar](15) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Clientes] ALTER COLUMN [ExtOtros] [varchar](15) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Clientes] ALTER COLUMN [NumRegIdTrib] [varchar](50) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Clientes] ALTER COLUMN [ComExtEstado] [varchar](50) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Clientes] ALTER COLUMN [ComExtMunicipio] [varchar](50) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Clientes] ALTER COLUMN [ComExtColonia] [varchar](50) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Clientes] ALTER COLUMN [CorreoEntregaCompras] [varchar](50) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Clientes] ALTER COLUMN [CorreoEntregaAlmacen] [varchar](50) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Clientes] ALTER COLUMN [Punto] [varchar](100) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Clientes] ALTER COLUMN [CorreoCumplimiento] [varchar](200) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Clientes] ALTER COLUMN [RegimenSociedad] [varchar](50) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Clientes] ALTER COLUMN [RepresentanteLegal] [varchar](100) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Clientes] ALTER COLUMN [ComExtCalle] [varchar](50) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Clientes] ALTER COLUMN [ComExtNumExt] [varchar](50) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Clientes] ALTER COLUMN [ComExtCP] [varchar](10) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Clientes] ALTER COLUMN [CreditoRegistroFirmas] [varchar](250) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Clientes] ALTER COLUMN [VentasComplementos] [varchar](MAX) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Conta_CodigosAgrupadoresSAT] ALTER COLUMN [Codigo] [nvarchar](20) COLLATE Modern_Spanish_CI_AS NOT NULL;
|
||||
ALTER TABLE [dbo].[Conta_CodigosAgrupadoresSAT] ALTER COLUMN [Nombre] [nvarchar](200) COLLATE Modern_Spanish_CS_AS NOT NULL;
|
||||
ALTER TABLE [dbo].[Conta_CodigosAgrupadoresSAT] ALTER COLUMN [Tipo] [nvarchar](1) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Conta_ConceptosContables] ALTER COLUMN [Tipo] [varchar](5) COLLATE Modern_Spanish_CS_AS NOT NULL;
|
||||
ALTER TABLE [dbo].[Conta_ConceptosContables] ALTER COLUMN [ConceptoContable] [varchar](50) COLLATE Modern_Spanish_CS_AS NOT NULL;
|
||||
ALTER TABLE [dbo].[Conta_Cuentas] ALTER COLUMN [Codigo] [varchar](50) COLLATE Modern_Spanish_CI_AS NOT NULL;
|
||||
ALTER TABLE [dbo].[Conta_Cuentas] ALTER COLUMN [Nombre] [varchar](200) COLLATE Modern_Spanish_CS_AS NOT NULL;
|
||||
ALTER TABLE [dbo].[Conta_Cuentas] ALTER COLUMN [NomIdioma] [varchar](250) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Conta_Cuentas] ALTER COLUMN [CodigoVinculacion] [varchar](50) COLLATE Modern_Spanish_CI_AS NULL;
|
||||
ALTER TABLE [dbo].[Conta_Cuentas] ALTER COLUMN [CodigoAgrupacion] [varchar](100) COLLATE Modern_Spanish_CI_AS NULL;
|
||||
ALTER TABLE [dbo].[Conta_PlantillasPolizas] ALTER COLUMN [PlantillaPoliza] [varchar](50) COLLATE Modern_Spanish_CS_AS NOT NULL;
|
||||
ALTER TABLE [dbo].[Conta_PrePolizas] ALTER COLUMN [Modulo] [varchar](50) COLLATE Modern_Spanish_CS_AS NOT NULL;
|
||||
ALTER TABLE [dbo].[Conta_PrePolizas] ALTER COLUMN [Concepto] [varchar](200) COLLATE Modern_Spanish_CS_AS NOT NULL;
|
||||
ALTER TABLE [dbo].[Conta_PrePolizas] ALTER COLUMN [NumeroPoliza] [varchar](50) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Conta_PrePolizas] ALTER COLUMN [CodigoNumeroPoliza] [varchar](5) COLLATE Modern_Spanish_CI_AS NULL;
|
||||
ALTER TABLE [dbo].[Conta_PrePolizasDetalle] ALTER COLUMN [Referencia] [varchar](200) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Conta_PrePolizasDetalle] ALTER COLUMN [Concepto] [varchar](200) COLLATE Modern_Spanish_CS_AS NOT NULL;
|
||||
ALTER TABLE [dbo].[Conta_TiposPoliza] ALTER COLUMN [TipoPoliza] [varchar](50) COLLATE Modern_Spanish_CS_AS NOT NULL;
|
||||
ALTER TABLE [dbo].[EstatusFactura] ALTER COLUMN [EstatusFactura] [varchar](30) COLLATE Modern_Spanish_CS_AS NOT NULL;
|
||||
ALTER TABLE [dbo].[EstatusFactura] ALTER COLUMN [TipoDocto] [varchar](3) COLLATE Modern_Spanish_CS_AS NOT NULL;
|
||||
ALTER TABLE [dbo].[Fraccionamientos] ALTER COLUMN [Fraccionamiento] [varchar](200) COLLATE Modern_Spanish_CS_AS NOT NULL;
|
||||
ALTER TABLE [dbo].[Fraccionamientos] ALTER COLUMN [Ubicacion] [varchar](500) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Fraccionamientos_Estatus] ALTER COLUMN [Estatus] [varchar](200) COLLATE Modern_Spanish_CS_AS NOT NULL;
|
||||
ALTER TABLE [dbo].[FraccionamientosEtapas] ALTER COLUMN [Etapa] [varchar](150) COLLATE Modern_Spanish_CS_AS NOT NULL;
|
||||
ALTER TABLE [dbo].[FraccionamientosLotes] ALTER COLUMN [Tipo] [varchar](100) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[FraccionamientosLotes] ALTER COLUMN [Calle] [varchar](200) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[FraccionamientosLotes] ALTER COLUMN [Catastro] [varchar](100) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[FraccionamientosLotes] ALTER COLUMN [Numero] [varchar](50) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[FraccionamientosLotes] ALTER COLUMN [Duplicador] [varchar](50) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Gral_Categorias] ALTER COLUMN [Categoria] [varchar](50) COLLATE Modern_Spanish_CS_AS NOT NULL;
|
||||
ALTER TABLE [dbo].[Gral_Monedas] ALTER COLUMN [Moneda] [varchar](50) COLLATE Modern_Spanish_CS_AS NOT NULL;
|
||||
ALTER TABLE [dbo].[Gral_Monedas] ALTER COLUMN [Abreviatura] [varchar](3) COLLATE Modern_Spanish_CS_AS NOT NULL;
|
||||
ALTER TABLE [dbo].[Gral_Monedas] ALTER COLUMN [AbreviaturaSAT] [varchar](5) COLLATE Modern_Spanish_CS_AS NOT NULL;
|
||||
ALTER TABLE [dbo].[Gral_Monedas] ALTER COLUMN [LayoutBBVA] [varchar](3) COLLATE Modern_Spanish_CS_AS NOT NULL;
|
||||
ALTER TABLE [dbo].[Gral_Monedas] ALTER COLUMN [Alias1] [varchar](20) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Gral_Monedas] ALTER COLUMN [Alias2] [varchar](20) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Gral_Monedas] ALTER COLUMN [Alias3] [varchar](30) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Gral_RegimenesFiscales] ALTER COLUMN [RegimenFiscal] [varchar](100) COLLATE Modern_Spanish_CS_AS NOT NULL;
|
||||
ALTER TABLE [dbo].[Gral_RegimenesFiscales] ALTER COLUMN [CodigoRegimenFiscal] [varchar](3) COLLATE Modern_Spanish_CI_AS NOT NULL;
|
||||
ALTER TABLE [dbo].[Gral_SAT_Colonia] ALTER COLUMN [ClaveSATColonia] [varchar](10) COLLATE Modern_Spanish_CS_AS NOT NULL;
|
||||
ALTER TABLE [dbo].[Gral_SAT_Colonia] ALTER COLUMN [CP] [varchar](50) COLLATE Modern_Spanish_CS_AS NOT NULL;
|
||||
ALTER TABLE [dbo].[Gral_SAT_Colonia] ALTER COLUMN [NombreAsentamiento] [varchar](100) COLLATE Modern_Spanish_CS_AS NOT NULL;
|
||||
ALTER TABLE [dbo].[Gral_SAT_CP] ALTER COLUMN [CP] [varchar](5) COLLATE Modern_Spanish_CS_AS NOT NULL;
|
||||
ALTER TABLE [dbo].[Gral_SAT_CP] ALTER COLUMN [ClaveSATEstado] [varchar](5) COLLATE Modern_Spanish_CS_AS NOT NULL;
|
||||
ALTER TABLE [dbo].[Gral_SAT_CP] ALTER COLUMN [ClaveSATMunicipio] [varchar](5) COLLATE Modern_Spanish_CS_AS NOT NULL;
|
||||
ALTER TABLE [dbo].[Gral_SAT_CP] ALTER COLUMN [ClaveSATLocalidad] [varchar](5) COLLATE Modern_Spanish_CS_AS NOT NULL;
|
||||
ALTER TABLE [dbo].[Gral_SAT_CP_MaterialPeligroso] ALTER COLUMN [ClaveMaterialPeligroso] [varchar](10) COLLATE Modern_Spanish_CS_AS NOT NULL;
|
||||
ALTER TABLE [dbo].[Gral_SAT_CP_MaterialPeligroso] ALTER COLUMN [MaterialPeligroso] [varchar](390) COLLATE Modern_Spanish_CS_AS NOT NULL;
|
||||
ALTER TABLE [dbo].[Gral_SAT_CP_MaterialPeligroso] ALTER COLUMN [ClaseoDiv] [varchar](8) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Gral_SAT_CP_MaterialPeligroso] ALTER COLUMN [PeligroSecundario] [varchar](10) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Gral_SAT_CP_MaterialPeligroso] ALTER COLUMN [NombreTecnico] [varchar](400) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Gral_SAT_CP_MaterialPeligroso] ALTER COLUMN [Version] [varchar](5) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Gral_SAT_Estado] ALTER COLUMN [ClaveSATEstado] [varchar](5) COLLATE Modern_Spanish_CS_AS NOT NULL;
|
||||
ALTER TABLE [dbo].[Gral_SAT_Estado] ALTER COLUMN [ClaveSATPais] [varchar](3) COLLATE Modern_Spanish_CS_AS NOT NULL;
|
||||
ALTER TABLE [dbo].[Gral_SAT_Estado] ALTER COLUMN [NombreEstado] [varchar](50) COLLATE Modern_Spanish_CS_AS NOT NULL;
|
||||
ALTER TABLE [dbo].[Gral_SAT_Estado] ALTER COLUMN [ClaveImpuestoEstado] [varchar](2) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Gral_SAT_Localidad] ALTER COLUMN [ClaveSATLocalidad] [varchar](50) COLLATE Modern_Spanish_CS_AS NOT NULL;
|
||||
ALTER TABLE [dbo].[Gral_SAT_Localidad] ALTER COLUMN [ClaveSATEstado] [varchar](50) COLLATE Modern_Spanish_CS_AS NOT NULL;
|
||||
ALTER TABLE [dbo].[Gral_SAT_Localidad] ALTER COLUMN [NombreLocalidad] [varchar](100) COLLATE Modern_Spanish_CS_AS NOT NULL;
|
||||
ALTER TABLE [dbo].[Gral_SAT_Municipio] ALTER COLUMN [ClaveSATMunicipio] [varchar](5) COLLATE Modern_Spanish_CS_AS NOT NULL;
|
||||
ALTER TABLE [dbo].[Gral_SAT_Municipio] ALTER COLUMN [ClaveSATEstado] [varchar](5) COLLATE Modern_Spanish_CS_AS NOT NULL;
|
||||
ALTER TABLE [dbo].[Gral_SAT_Municipio] ALTER COLUMN [Descripcion] [varchar](100) COLLATE Modern_Spanish_CS_AS NOT NULL;
|
||||
ALTER TABLE [dbo].[Gral_SAT_ObjetoImpuesto] ALTER COLUMN [ObjetoImpuesto] [varchar](50) COLLATE Modern_Spanish_CS_AS NOT NULL;
|
||||
ALTER TABLE [dbo].[Gral_SAT_ObjetoImpuesto] ALTER COLUMN [CodigoObjetoImpuesto] [varchar](2) COLLATE Modern_Spanish_CI_AS NOT NULL;
|
||||
ALTER TABLE [dbo].[Gral_SAT_Pais] ALTER COLUMN [ClaveSATPais] [varchar](5) COLLATE Modern_Spanish_CS_AS NOT NULL;
|
||||
ALTER TABLE [dbo].[Gral_SAT_Pais] ALTER COLUMN [Descripcion] [varchar](100) COLLATE Modern_Spanish_CS_AS NOT NULL;
|
||||
ALTER TABLE [dbo].[Gral_SAT_Pais] ALTER COLUMN [FormatoCP] [varchar](100) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Gral_SAT_Pais] ALTER COLUMN [FormatoIT] [varchar](100) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Gral_SAT_Pais] ALTER COLUMN [ValidacionIT] [varchar](100) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Gral_SAT_Pais] ALTER COLUMN [Agrupaciones] [varchar](50) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Gral_SAT_Pais] ALTER COLUMN [DIOTPais] [varchar](5) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Gral_SAT_ProductosServicios] ALTER COLUMN [SATClavePS] [nvarchar](20) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Gral_SAT_ProductosServicios] ALTER COLUMN [Descripcion] [nvarchar](600) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Gral_SAT_ProductosServicios] ALTER COLUMN [IncluirIVAtrasladado] [nvarchar](255) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Gral_SAT_ProductosServicios] ALTER COLUMN [IncluirIEPStrasladado] [nvarchar](255) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Gral_SAT_ProductosServicios] ALTER COLUMN [ComplementoIncluir] [nvarchar](255) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Gral_SAT_ProductosServicios] ALTER COLUMN [PalabrasSimilares] [varchar](600) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Gral_SAT_ProductosServicios] ALTER COLUMN [MaterialPeligroso] [varchar](3) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Gral_SAT_UnidadesMedida] ALTER COLUMN [SATClaveUnidadMedida] [nvarchar](255) COLLATE Modern_Spanish_CS_AS NOT NULL;
|
||||
ALTER TABLE [dbo].[Gral_SAT_UnidadesMedida] ALTER COLUMN [Nombre] [nvarchar](255) COLLATE Modern_Spanish_CS_AS NOT NULL;
|
||||
ALTER TABLE [dbo].[Gral_SAT_UnidadesMedida] ALTER COLUMN [Descripcion] [nvarchar](255) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Gral_SAT_UnidadesMedida] ALTER COLUMN [Simbolo] [nvarchar](255) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Gral_SAT_UsosCFDI] ALTER COLUMN [UsoCFDI] [varchar](5) COLLATE Modern_Spanish_CS_AS NOT NULL;
|
||||
ALTER TABLE [dbo].[Gral_SAT_UsosCFDI] ALTER COLUMN [Descripcion] [varchar](100) COLLATE Modern_Spanish_CS_AS NOT NULL;
|
||||
ALTER TABLE [dbo].[Gral_SAT_UsosCFDI] ALTER COLUMN [RegimenFiscalReceptor] [varchar](200) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Inv_Almacenes] ALTER COLUMN [Almacen] [varchar](50) COLLATE Modern_Spanish_CS_AS NOT NULL;
|
||||
ALTER TABLE [dbo].[Inv_Almacenes] ALTER COLUMN [AlmacenAbreviatura] [varchar](50) COLLATE Modern_Spanish_CS_AS NOT NULL;
|
||||
ALTER TABLE [dbo].[Inv_TiposAlmacenes] ALTER COLUMN [TipoAlmacen] [varchar](50) COLLATE Modern_Spanish_CS_AS NOT NULL;
|
||||
ALTER TABLE [dbo].[ProductosServicios] ALTER COLUMN [Codigo] [varchar](50) COLLATE Modern_Spanish_CI_AS NULL;
|
||||
ALTER TABLE [dbo].[ProductosServicios] ALTER COLUMN [NumeroParte] [varchar](50) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[ProductosServicios] ALTER COLUMN [CodigoBarras] [varchar](50) COLLATE Modern_Spanish_CI_AS NULL;
|
||||
ALTER TABLE [dbo].[ProductosServicios] ALTER COLUMN [PS] [varchar](846) COLLATE Modern_Spanish_CS_AS NOT NULL;
|
||||
ALTER TABLE [dbo].[ProductosServicios] ALTER COLUMN [PSExtranjero] [varchar](846) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[ProductosServicios] ALTER COLUMN [Borrame] [varchar](50) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[ProductosServicios] ALTER COLUMN [AlmacenSeccion] [varchar](10) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[ProductosServicios] ALTER COLUMN [Imagen] [varchar](100) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[ProductosServicios] ALTER COLUMN [ClaveImpuestoEmpaque] [varchar](3) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[ProductosServicios] ALTER COLUMN [ClaveImpuestoUM] [varchar](3) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[ProductosServicios] ALTER COLUMN [ClaveCategoriaToxicidad] [varchar](3) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[ProductosServicios] ALTER COLUMN [ClaveImpuestoTipoProducto] [varchar](3) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[ProductosServicios] ALTER COLUMN [Code17] [varchar](10) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[ProductosServicios] ALTER COLUMN [Dimensiones] [varchar](25) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[ProductosServicios] ALTER COLUMN [RegistroRSCO] [varchar](50) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[ProductosServicios] ALTER COLUMN [NombreComercial] [varchar](100) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[ProductosServicios] ALTER COLUMN [NotasAdicionales] [varchar](500) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[ProductosServicios] ALTER COLUMN [EcommerceEtiquetas] [varchar](200) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[ProductosServicios] ALTER COLUMN [CodigoAlterno] [varchar](50) COLLATE Modern_Spanish_CI_AS NULL;
|
||||
ALTER TABLE [dbo].[ProductosServicios] ALTER COLUMN [PSAlterno] [varchar](846) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Proyectos] ALTER COLUMN [Proyecto] [varchar](50) COLLATE Modern_Spanish_CS_AS NOT NULL;
|
||||
ALTER TABLE [dbo].[Sat_Bancos] ALTER COLUMN [CveBanco] [varchar](50) COLLATE Modern_Spanish_CS_AS NOT NULL;
|
||||
ALTER TABLE [dbo].[Sat_Bancos] ALTER COLUMN [Banco] [varchar](150) COLLATE Modern_Spanish_CS_AS NOT NULL;
|
||||
ALTER TABLE [dbo].[Sat_Bancos] ALTER COLUMN [RazonSocial] [varchar](300) COLLATE Modern_Spanish_CS_AS NOT NULL;
|
||||
ALTER TABLE [dbo].[Sis_Auditorias] ALTER COLUMN [TipoEvento] [varchar](100) COLLATE Modern_Spanish_CS_AS NOT NULL;
|
||||
ALTER TABLE [dbo].[Sis_Auditorias] ALTER COLUMN [NombreEntidad] [varchar](150) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Sis_Auditorias] ALTER COLUMN [LlaveEntidad] [varchar](100) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Sis_Auditorias] ALTER COLUMN [Descripcion] [varchar](500) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Sis_Auditorias] ALTER COLUMN [DireccionIP] [varchar](50) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Sis_Auditorias] ALTER COLUMN [AgenteUsuario] [varchar](1000) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Sis_Auditorias] ALTER COLUMN [NombreDominio] [varchar](255) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Sis_AuditoriasDetalles] ALTER COLUMN [NombreCampo] [varchar](150) COLLATE Modern_Spanish_CS_AS NOT NULL;
|
||||
ALTER TABLE [dbo].[Sis_AuditoriasDetalles] ALTER COLUMN [ValorAnterior] [varchar](MAX) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Sis_AuditoriasDetalles] ALTER COLUMN [ValorNuevo] [varchar](MAX) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Sis_IntentosInicioSesion] ALTER COLUMN [NombreUsuario] [varchar](100) COLLATE Modern_Spanish_CI_AS NOT NULL;
|
||||
ALTER TABLE [dbo].[Sis_IntentosInicioSesion] ALTER COLUMN [MotivoFallo] [varchar](200) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Sis_IntentosInicioSesion] ALTER COLUMN [DireccionIP] [varchar](50) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Sis_IntentosInicioSesion] ALTER COLUMN [AgenteUsuario] [varchar](1000) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Sis_IntentosInicioSesion] ALTER COLUMN [NombreDominio] [varchar](255) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Sis_Modulos] ALTER COLUMN [NombreModulo] [varchar](150) COLLATE Modern_Spanish_CS_AS NOT NULL;
|
||||
ALTER TABLE [dbo].[Sis_Modulos] ALTER COLUMN [Descripcion] [varchar](255) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Sis_Modulos] ALTER COLUMN [Url] [varchar](500) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Sis_Modulos] ALTER COLUMN [ClaseCssIcono] [varchar](150) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Sis_Modulos] ALTER COLUMN [ClaseCssEstilo] [varchar](150) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Sis_Notificaciones] ALTER COLUMN [TipoNotificacion] [varchar](50) COLLATE Modern_Spanish_CS_AS NOT NULL;
|
||||
ALTER TABLE [dbo].[Sis_Notificaciones] ALTER COLUMN [EstadoNotificacion] [varchar](30) COLLATE Modern_Spanish_CS_AS NOT NULL;
|
||||
ALTER TABLE [dbo].[Sis_Notificaciones] ALTER COLUMN [Titulo] [varchar](200) COLLATE Modern_Spanish_CS_AS NOT NULL;
|
||||
ALTER TABLE [dbo].[Sis_Notificaciones] ALTER COLUMN [Mensaje] [varchar](MAX) COLLATE Modern_Spanish_CS_AS NOT NULL;
|
||||
ALTER TABLE [dbo].[Sis_Notificaciones] ALTER COLUMN [Url] [varchar](500) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Sis_NotificacionesEnvios] ALTER COLUMN [CanalEnvio] [varchar](50) COLLATE Modern_Spanish_CS_AS NOT NULL;
|
||||
ALTER TABLE [dbo].[Sis_NotificacionesEnvios] ALTER COLUMN [EstadoEnvio] [varchar](30) COLLATE Modern_Spanish_CS_AS NOT NULL;
|
||||
ALTER TABLE [dbo].[Sis_NotificacionesEnvios] ALTER COLUMN [RespuestaProveedor] [varchar](MAX) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Sis_NotificacionesEnvios] ALTER COLUMN [MensajeError] [varchar](MAX) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Sis_PAC] ALTER COLUMN [PAC] [varchar](50) COLLATE Modern_Spanish_CS_AS NOT NULL;
|
||||
ALTER TABLE [dbo].[Sis_Permisos] ALTER COLUMN [CodigoPermiso] [varchar](100) COLLATE Modern_Spanish_CI_AS NOT NULL;
|
||||
ALTER TABLE [dbo].[Sis_Permisos] ALTER COLUMN [NombrePermiso] [varchar](150) COLLATE Modern_Spanish_CS_AS NOT NULL;
|
||||
ALTER TABLE [dbo].[Sis_Permisos] ALTER COLUMN [Descripcion] [varchar](255) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Sis_Plataformas] ALTER COLUMN [NombrePlataforma] [varchar](100) COLLATE Modern_Spanish_CS_AS NOT NULL;
|
||||
ALTER TABLE [dbo].[Sis_Plataformas] ALTER COLUMN [Descripcion] [varchar](255) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Sis_PoliticasLimpieza] ALTER COLUMN [Esquema] sysname COLLATE Modern_Spanish_CS_AS NOT NULL;
|
||||
ALTER TABLE [dbo].[Sis_PoliticasLimpieza] ALTER COLUMN [Tabla] sysname COLLATE Modern_Spanish_CS_AS NOT NULL;
|
||||
ALTER TABLE [dbo].[Sis_Roles] ALTER COLUMN [NombreRol] [varchar](100) COLLATE Modern_Spanish_CS_AS NOT NULL;
|
||||
ALTER TABLE [dbo].[Sis_Roles] ALTER COLUMN [Descripcion] [varchar](255) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Sis_Usuarios] ALTER COLUMN [NombreUsuario] [varchar](100) COLLATE Modern_Spanish_CI_AS NOT NULL;
|
||||
ALTER TABLE [dbo].[Sis_Usuarios] ALTER COLUMN [HashContrasena] [varchar](500) COLLATE Modern_Spanish_CS_AS NOT NULL;
|
||||
ALTER TABLE [dbo].[Sis_Usuarios] ALTER COLUMN [CorreoElectronico] [varchar](255) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Sis_UsuariosAutorizaciones] ALTER COLUMN [EstadoAutorizacion] [varchar](30) COLLATE Modern_Spanish_CS_AS NOT NULL;
|
||||
ALTER TABLE [dbo].[Sis_UsuariosAutorizaciones] ALTER COLUMN [ComentarioSolicitud] [varchar](500) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Sis_UsuariosAutorizaciones] ALTER COLUMN [ComentarioAutorizacion] [varchar](500) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Sis_UsuariosSesiones] ALTER COLUMN [TokenSesion] [varchar](200) COLLATE Modern_Spanish_CS_AS NOT NULL;
|
||||
ALTER TABLE [dbo].[Sis_UsuariosSesiones] ALTER COLUMN [DireccionIP] [varchar](50) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Sis_UsuariosSesiones] ALTER COLUMN [AgenteUsuario] [varchar](1000) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Sis_UsuariosSesiones] ALTER COLUMN [NombreDominio] [varchar](255) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Sis_UsuariosSuscripcionesPush] ALTER COLUMN [Endpoint] [varchar](1000) COLLATE Modern_Spanish_CS_AS NOT NULL;
|
||||
ALTER TABLE [dbo].[Sis_UsuariosSuscripcionesPush] ALTER COLUMN [P256DH] [varchar](500) COLLATE Modern_Spanish_CS_AS NOT NULL;
|
||||
ALTER TABLE [dbo].[Sis_UsuariosSuscripcionesPush] ALTER COLUMN [ClaveAutenticacion] [varchar](500) COLLATE Modern_Spanish_CS_AS NOT NULL;
|
||||
ALTER TABLE [dbo].[Sis_UsuariosSuscripcionesPush] ALTER COLUMN [AgenteUsuario] [varchar](1000) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Sis_UsuariosSuscripcionesPush] ALTER COLUMN [Plataforma] [varchar](100) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Sis_UsuariosSuscripcionesPush] ALTER COLUMN [Navegador] [varchar](100) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Sis_UsuariosSuscripcionesPush] ALTER COLUMN [NombreDominio] [varchar](255) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Sis_UsuariosVerificacionesCorreo] ALTER COLUMN [HashToken] [char](64) COLLATE Modern_Spanish_CS_AS NOT NULL;
|
||||
ALTER TABLE [dbo].[SubProyectos] ALTER COLUMN [ClaveSubProyecto] [varchar](5) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[SubProyectos] ALTER COLUMN [SubProyecto] [varchar](50) COLLATE Modern_Spanish_CS_AS NOT NULL;
|
||||
ALTER TABLE [dbo].[SubProyectos] ALTER COLUMN [CuentaGasto] [varchar](50) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[SubProyectos] ALTER COLUMN [Serie] [varchar](15) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[SubProyectos] ALTER COLUMN [Calle] [varchar](50) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[SubProyectos] ALTER COLUMN [NoExt] [varchar](10) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[SubProyectos] ALTER COLUMN [NoInt] [varchar](10) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[SubProyectos] ALTER COLUMN [Colonia] [varchar](50) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[SubProyectos] ALTER COLUMN [Localidad] [varchar](50) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[SubProyectos] ALTER COLUMN [Municipio] [varchar](50) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[SubProyectos] ALTER COLUMN [Pais] [varchar](50) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[SubProyectos] ALTER COLUMN [CP] [varchar](5) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[SubProyectos] ALTER COLUMN [Estado] [varchar](20) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[SubProyectos] ALTER COLUMN [FormatoFactura] [varchar](25) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[SubProyectos] ALTER COLUMN [TipoFormato] [varchar](5) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[SubProyectos] ALTER COLUMN [Telefono] [varchar](10) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[SubProyectos] ALTER COLUMN [Correo] [varchar](50) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[SubProyectos] ALTER COLUMN [CodigoSucursal] [varchar](20) COLLATE Modern_Spanish_CI_AS NULL;
|
||||
ALTER TABLE [dbo].[SubProyectos] ALTER COLUMN [Acum_CentroServicio] [varchar](10) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[SubProyectos] ALTER COLUMN [Acum_PortalUsuario] [varchar](50) COLLATE Modern_Spanish_CI_AS NULL;
|
||||
ALTER TABLE [dbo].[SubProyectos] ALTER COLUMN [Acum_PortalContrasena] [varchar](50) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Tra_CostosTramite] ALTER COLUMN [Descripcion] [varchar](300) COLLATE Modern_Spanish_CS_AS NOT NULL;
|
||||
ALTER TABLE [dbo].[Tra_DocumentosSolicitud] ALTER COLUMN [NombreArchivo] [varchar](255) COLLATE Modern_Spanish_CS_AS NOT NULL;
|
||||
ALTER TABLE [dbo].[Tra_DocumentosSolicitud] ALTER COLUMN [NombreArchivoFisico] [varchar](255) COLLATE Modern_Spanish_CS_AS NOT NULL;
|
||||
ALTER TABLE [dbo].[Tra_DocumentosSolicitud] ALTER COLUMN [RutaArchivo] [varchar](1000) COLLATE Modern_Spanish_CS_AS NOT NULL;
|
||||
ALTER TABLE [dbo].[Tra_DocumentosSolicitud] ALTER COLUMN [ContentType] [varchar](100) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Tra_DocumentosSolicitud] ALTER COLUMN [ComentarioCliente] [varchar](1000) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Tra_DocumentosSolicitud] ALTER COLUMN [ComentarioAdministrativo] [varchar](1000) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Tra_EstatusSolicitud] ALTER COLUMN [Codigo] [varchar](50) COLLATE Modern_Spanish_CI_AS NOT NULL;
|
||||
ALTER TABLE [dbo].[Tra_EstatusSolicitud] ALTER COLUMN [EstatusSolicitud] [varchar](100) COLLATE Modern_Spanish_CS_AS NOT NULL;
|
||||
ALTER TABLE [dbo].[Tra_HistorialEstatusSolicitud] ALTER COLUMN [Comentarios] [varchar](1000) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Tra_NotasSolicitud] ALTER COLUMN [TipoNota] [varchar](50) COLLATE Modern_Spanish_CS_AS NOT NULL;
|
||||
ALTER TABLE [dbo].[Tra_NotasSolicitud] ALTER COLUMN [Comentario] [varchar](MAX) COLLATE Modern_Spanish_CS_AS NOT NULL;
|
||||
ALTER TABLE [dbo].[Tra_OpcionesPregunta] ALTER COLUMN [TextoOpcion] [varchar](300) COLLATE Modern_Spanish_CS_AS NOT NULL;
|
||||
ALTER TABLE [dbo].[Tra_OpcionesPregunta] ALTER COLUMN [ValorOpcion] [varchar](300) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Tra_Preguntas] ALTER COLUMN [Pregunta] [varchar](500) COLLATE Modern_Spanish_CS_AS NOT NULL;
|
||||
ALTER TABLE [dbo].[Tra_Preguntas] ALTER COLUMN [Descripcion] [varchar](1000) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Tra_Preguntas] ALTER COLUMN [Codigo] [varchar](20) COLLATE Modern_Spanish_CI_AS NULL;
|
||||
ALTER TABLE [dbo].[Tra_RespuestasSolicitud] ALTER COLUMN [Valor] [varchar](MAX) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Tra_Solicitudes] ALTER COLUMN [Folio] [varchar](50) COLLATE Modern_Spanish_CS_AS NOT NULL;
|
||||
ALTER TABLE [dbo].[Tra_Solicitudes] ALTER COLUMN [ComentariosCliente] [varchar](MAX) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Tra_Solicitudes] ALTER COLUMN [ComentariosAdministrativos] [varchar](MAX) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Tra_SolicitudesDependencias] ALTER COLUMN [Condicion] [varchar](500) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Tra_TiposDocumento] ALTER COLUMN [TipoDocumento] [varchar](200) COLLATE Modern_Spanish_CS_AS NOT NULL;
|
||||
ALTER TABLE [dbo].[Tra_TiposDocumento] ALTER COLUMN [Descripcion] [varchar](500) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Tra_TiposDocumento] ALTER COLUMN [ExtensionesPermitidas] [varchar](200) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Tra_TiposPregunta] ALTER COLUMN [TipoPregunta] [varchar](100) COLLATE Modern_Spanish_CS_AS NOT NULL;
|
||||
ALTER TABLE [dbo].[Tra_TiposTramite] ALTER COLUMN [Codigo] [varchar](50) COLLATE Modern_Spanish_CI_AS NOT NULL;
|
||||
ALTER TABLE [dbo].[Tra_TiposTramite] ALTER COLUMN [TipoTramite] [varchar](200) COLLATE Modern_Spanish_CS_AS NOT NULL;
|
||||
ALTER TABLE [dbo].[Tra_TiposTramite] ALTER COLUMN [Descripcion] [varchar](500) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[UnidadesMedida] ALTER COLUMN [UnidadMedida] [varchar](50) COLLATE Modern_Spanish_CS_AS NOT NULL;
|
||||
ALTER TABLE [dbo].[UnidadesMedida] ALTER COLUMN [Abreviatura] [varchar](15) COLLATE Modern_Spanish_CS_AS NOT NULL;
|
||||
ALTER TABLE [dbo].[UnidadesMedida] ALTER COLUMN [Alias1] [varchar](20) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[UnidadesMedida] ALTER COLUMN [Alias2] [varchar](20) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[UnidadesMedida] ALTER COLUMN [Alias3] [varchar](20) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[UnidadesMedida] ALTER COLUMN [Alias4] [varchar](20) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[UnidadesMedida] ALTER COLUMN [CveImpEmpaque] [varchar](3) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[UnidadesMedida] ALTER COLUMN [CveImpUM] [varchar](3) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Ventas] ALTER COLUMN [FolioFiscal] [varchar](50) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Ventas] ALTER COLUMN [TipoDocto] [varchar](3) COLLATE Modern_Spanish_CS_AS NOT NULL;
|
||||
ALTER TABLE [dbo].[Ventas] ALTER COLUMN [Serie] [varchar](10) COLLATE Modern_Spanish_CS_AS NOT NULL;
|
||||
ALTER TABLE [dbo].[Ventas] ALTER COLUMN [MotivoDescuento] [varchar](500) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Ventas] ALTER COLUMN [Observaciones] [varchar](2000) COLLATE Modern_Spanish_CS_AS NOT NULL;
|
||||
ALTER TABLE [dbo].[Ventas] ALTER COLUMN [MotivoCancelacion] [varchar](500) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Ventas] ALTER COLUMN [Alfa1] [varchar](500) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Ventas] ALTER COLUMN [Alfa2] [varchar](100) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Ventas] ALTER COLUMN [Alfa3] [varchar](100) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Ventas] ALTER COLUMN [SelloCancelacion] [varchar](800) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Ventas] ALTER COLUMN [AtencionA] [varchar](100) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Ventas] ALTER COLUMN [Det_OrdenCompra] [varchar](20) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Ventas] ALTER COLUMN [Det_FechaOrdenCompra] [varchar](15) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Ventas] ALTER COLUMN [Ref] [varchar](50) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Ventas] ALTER COLUMN [NumeroCuenta] [varchar](5) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Ventas] ALTER COLUMN [Entrega] [varchar](50) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Ventas] ALTER COLUMN [TiempoEntrega] [varchar](50) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Ventas] ALTER COLUMN [TelefonoGenerico] [varchar](50) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Ventas] ALTER COLUMN [PedidoContrato] [varchar](50) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Ventas] ALTER COLUMN [ObservacionesAlmacen] [varchar](300) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Ventas] ALTER COLUMN [CobranzaObservacion] [varchar](255) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Ventas] ALTER COLUMN [TipoProceso] [varchar](255) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Ventas] ALTER COLUMN [TipoComite] [varchar](255) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Ventas] ALTER COLUMN [IdContabilidad] [varchar](50) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Ventas] ALTER COLUMN [OrdenCompra] [varchar](50) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Ventas] ALTER COLUMN [CorreoNotificacion] [varchar](100) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Ventas] ALTER COLUMN [RFCReceptor] [varchar](50) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Ventas] ALTER COLUMN [Adjunto] [varchar](150) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Ventas] ALTER COLUMN [EstadoCancelacion] [varchar](100) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Ventas] ALTER COLUMN [SelloSolicitudCancelacion] [varchar](800) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Ventas] ALTER COLUMN [CFDIVersion] [varchar](5) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Ventas] ALTER COLUMN [LineaAdicionalComprobante] [varchar](250) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Ventas] ALTER COLUMN [DescripcionVenta] [varchar](300) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Ventas] ALTER COLUMN [Paciente] [varchar](50) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Ventas] ALTER COLUMN [Episodio] [varchar](20) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Ventas] ALTER COLUMN [Addenda] [varchar](2000) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Ventas] ALTER COLUMN [ComplementoSAT] [varchar](2000) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Vta_ClientesSucursales] ALTER COLUMN [SucursalCliente] [varchar](100) COLLATE Modern_Spanish_CS_AS NOT NULL;
|
||||
ALTER TABLE [dbo].[Vta_ClientesSucursales] ALTER COLUMN [Ciudad] [varchar](50) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Vta_ClientesSucursales] ALTER COLUMN [Colonia] [varchar](50) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Vta_ClientesSucursales] ALTER COLUMN [CP] [varchar](5) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Vta_ClientesSucursales] ALTER COLUMN [Direccion] [varchar](90) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Vta_ClientesSucursales] ALTER COLUMN [Estado] [varchar](35) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Vta_ClientesSucursales] ALTER COLUMN [Localidad] [varchar](50) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Vta_ClientesSucursales] ALTER COLUMN [Pais] [varchar](50) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Vta_ClientesSucursales] ALTER COLUMN [NoExt] [varchar](20) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Vta_ClientesSucursales] ALTER COLUMN [NoInt] [varchar](20) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Vta_ClientesSucursales] ALTER COLUMN [Telefono] [varchar](25) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Vta_ClientesSucursales] ALTER COLUMN [Correo] [varchar](300) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Vta_ClientesSucursales] ALTER COLUMN [Contacto] [varchar](300) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Vta_ClientesSucursales] ALTER COLUMN [CorreoCotizacion] [varchar](300) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Vta_ClientesSucursales] ALTER COLUMN [NumCtaPago] [varchar](50) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Vta_ClientesSucursales] ALTER COLUMN [Punto] [varchar](100) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Vta_ClientesSucursales] ALTER COLUMN [RFC] [varchar](15) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Vta_FormaPago] ALTER COLUMN [FormaPago] [varchar](50) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Vta_FormaPago] ALTER COLUMN [ClaveFormaPagoSAT] [varchar](2) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Vta_MetodoPago] ALTER COLUMN [MetodoPago] [varchar](50) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Vta_MetodoPago] ALTER COLUMN [ClaveMetodoPagoSAT] [varchar](5) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Vta_Pagos] ALTER COLUMN [Referencia] [varchar](200) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Vta_Procedimientos] ALTER COLUMN [Procedimiento] [varchar](150) COLLATE Modern_Spanish_CS_AS NOT NULL;
|
||||
ALTER TABLE [dbo].[Vta_TipoDocumentos] ALTER COLUMN [CveTipoDocumento] [varchar](3) COLLATE Modern_Spanish_CS_AS NOT NULL;
|
||||
ALTER TABLE [dbo].[Vta_TipoDocumentos] ALTER COLUMN [TipoDocumento] [varchar](50) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Vta_Vendedores] ALTER COLUMN [Codigo] [varchar](10) COLLATE Modern_Spanish_CI_AS NULL;
|
||||
ALTER TABLE [dbo].[Vta_Vendedores] ALTER COLUMN [Vendedor] [varchar](50) COLLATE Modern_Spanish_CS_AS NOT NULL;
|
||||
ALTER TABLE [dbo].[Vta_Vendedores] ALTER COLUMN [Correo] [varchar](50) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Vta_Vendedores] ALTER COLUMN [Telefono] [varchar](50) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Vta_Vendedores] ALTER COLUMN [Celular] [varchar](50) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Vta_Vendedores] ALTER COLUMN [TituloDocumentos] [varchar](150) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[Vta_Vendedores] ALTER COLUMN [CorreoAdicionalNotificaciones] [varchar](200) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[ZonasHorarias] ALTER COLUMN [Abreviacion] [varchar](7) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[ZonasHorarias] ALTER COLUMN [ZonaHoraria] [varchar](100) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE [dbo].[ZonasHorarias] ALTER COLUMN [UTC] [varchar](20) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
|
||||
/* Recrear columnas calculadas */
|
||||
ALTER TABLE [dbo].[Conta_PrePolizas] ADD [AnioMes] AS ((CONVERT([varchar](6),[Fecha],(112))) COLLATE Modern_Spanish_CS_AS) PERSISTED;
|
||||
ALTER TABLE [dbo].[ProductosServicios] ADD [CodigoPS] AS ((case when len([Codigo])>(0) then concat([Codigo] COLLATE Modern_Spanish_CI_AS,' - ',[PS] COLLATE Modern_Spanish_CI_AS) else [PS] COLLATE Modern_Spanish_CI_AS end) COLLATE Modern_Spanish_CI_AS);
|
||||
ALTER TABLE [dbo].[Ventas] ADD [SerieFolio] AS ((concat(case when [Serie]<>'' then [Serie]+'-' else '' end,[Folio])) COLLATE Modern_Spanish_CS_AS);
|
||||
|
||||
/* Recrear CHECK */
|
||||
ALTER TABLE [dbo].[Bit_Bitacora] WITH CHECK ADD CONSTRAINT [CK_Bit_Bitacora_Autorizacion] CHECK ([CveUsuarioAutoriza] IS NOT NULL OR [FechaAutorizacion] IS NULL);
|
||||
ALTER TABLE [dbo].[Bit_Bitacora] CHECK CONSTRAINT [CK_Bit_Bitacora_Autorizacion];
|
||||
ALTER TABLE [dbo].[Bit_BitacoraRelaciones] WITH CHECK ADD CONSTRAINT [CK_Bit_BitacoraRelaciones_ValorRelacion] CHECK (NOT ([ValorRelacionNumero] IS NOT NULL AND [ValorRelacionTexto] IS NOT NULL));
|
||||
ALTER TABLE [dbo].[Bit_BitacoraRelaciones] CHECK CONSTRAINT [CK_Bit_BitacoraRelaciones_ValorRelacion];
|
||||
ALTER TABLE [dbo].[Clientes] WITH CHECK ADD CONSTRAINT [CK_Clientes_RFC_Requerido] CHECK ([RFC]<>'');
|
||||
ALTER TABLE [dbo].[Clientes] CHECK CONSTRAINT [CK_Clientes_RFC_Requerido];
|
||||
ALTER TABLE [dbo].[Conta_Cuentas] WITH CHECK ADD CONSTRAINT [CK_Conta_Cuentas_Padre] CHECK ([CveCuentaPadre]<>[CveCuenta]);
|
||||
ALTER TABLE [dbo].[Conta_Cuentas] CHECK CONSTRAINT [CK_Conta_Cuentas_Padre];
|
||||
ALTER TABLE [dbo].[Conta_Cuentas] WITH CHECK ADD CONSTRAINT [CK_Conta_Cuentas_Padre_Requerido] CHECK ([CveCuentaPadre] IS NOT NULL OR ([Codigo]='_ORDEN' OR [Codigo]='_ESTADISTICAS' OR [Codigo]='_GLOBAL'));
|
||||
ALTER TABLE [dbo].[Conta_Cuentas] CHECK CONSTRAINT [CK_Conta_Cuentas_Padre_Requerido];
|
||||
ALTER TABLE [dbo].[Conta_PrePolizas] WITH CHECK ADD CONSTRAINT [CK_Conta_PrePolizas_Concepto] CHECK (rtrim([Concepto])<>'');
|
||||
ALTER TABLE [dbo].[Conta_PrePolizas] CHECK CONSTRAINT [CK_Conta_PrePolizas_Concepto];
|
||||
ALTER TABLE [dbo].[Conta_PrePolizas] WITH CHECK ADD CONSTRAINT [CK_Conta_PrePolizas_Fecha_2000_2050] CHECK ([Fecha]>='2000-01-01' AND [Fecha]<='2050/12/31');
|
||||
ALTER TABLE [dbo].[Conta_PrePolizas] CHECK CONSTRAINT [CK_Conta_PrePolizas_Fecha_2000_2050];
|
||||
ALTER TABLE [dbo].[Conta_PrePolizas] WITH CHECK ADD CONSTRAINT [CK_Conta_PrePolizas_FolioPoliza] CHECK ([IdPoliza]>(0) AND isnull([FolioPoliza],(0))>(0) OR ([IdPoliza] IS NULL OR [IdPoliza]=(0)));
|
||||
ALTER TABLE [dbo].[Conta_PrePolizas] CHECK CONSTRAINT [CK_Conta_PrePolizas_FolioPoliza];
|
||||
ALTER TABLE [dbo].[Fraccionamientos] WITH CHECK ADD CONSTRAINT [CK_Fraccionamientos_Hectareas] CHECK ([Hectareas] IS NULL OR [Hectareas]>=(0));
|
||||
ALTER TABLE [dbo].[Fraccionamientos] CHECK CONSTRAINT [CK_Fraccionamientos_Hectareas];
|
||||
ALTER TABLE [dbo].[FraccionamientosEtapas] WITH CHECK ADD CONSTRAINT [CK_FraccionamientosEtapas_Hectareas] CHECK ([Hectareas] IS NULL OR [Hectareas]>=(0));
|
||||
ALTER TABLE [dbo].[FraccionamientosEtapas] CHECK CONSTRAINT [CK_FraccionamientosEtapas_Hectareas];
|
||||
ALTER TABLE [dbo].[FraccionamientosLotes] WITH CHECK ADD CONSTRAINT [CK_FraccionamientosLotes_MetrosCuadrados] CHECK ([MetrosCuadrados] IS NULL OR [MetrosCuadrados]>=(0));
|
||||
ALTER TABLE [dbo].[FraccionamientosLotes] CHECK CONSTRAINT [CK_FraccionamientosLotes_MetrosCuadrados];
|
||||
ALTER TABLE [dbo].[ProductosServicios] WITH CHECK ADD CONSTRAINT [CK_AsientoContableCompras] CHECK ([AsientoContableCompras]=(3) OR [AsientoContableCompras]=(2) OR [AsientoContableCompras]=(1));
|
||||
ALTER TABLE [dbo].[ProductosServicios] CHECK CONSTRAINT [CK_AsientoContableCompras];
|
||||
ALTER TABLE [dbo].[ProductosServicios] WITH CHECK ADD CONSTRAINT [CK_AsientoContableVentas] CHECK ([AsientoContableVentas]=(2) OR [AsientoContableVentas]=(1));
|
||||
ALTER TABLE [dbo].[ProductosServicios] CHECK CONSTRAINT [CK_AsientoContableVentas];
|
||||
ALTER TABLE [dbo].[ProductosServicios] WITH CHECK ADD CONSTRAINT [CK_ProductosServicios_IVA] CHECK ([IVA]=(-1) OR [IVA]=(0) OR [IVA] IS NULL);
|
||||
ALTER TABLE [dbo].[ProductosServicios] CHECK CONSTRAINT [CK_ProductosServicios_IVA];
|
||||
ALTER TABLE [dbo].[Sis_Notificaciones] WITH CHECK ADD CONSTRAINT [CK_Sis_Notificaciones_Estado] CHECK ([EstadoNotificacion]='Cancelada' OR [EstadoNotificacion]='Fallida' OR [EstadoNotificacion]='Enviada' OR [EstadoNotificacion]='Pendiente');
|
||||
ALTER TABLE [dbo].[Sis_Notificaciones] CHECK CONSTRAINT [CK_Sis_Notificaciones_Estado];
|
||||
ALTER TABLE [dbo].[Sis_Notificaciones] WITH CHECK ADD CONSTRAINT [CK_Sis_Notificaciones_Tipo] CHECK ([TipoNotificacion]='Campana' OR [TipoNotificacion]='Push' OR [TipoNotificacion]='Correo' OR [TipoNotificacion]='SignalR' OR [TipoNotificacion]='WhatsApp' OR [TipoNotificacion]='Local');
|
||||
ALTER TABLE [dbo].[Sis_Notificaciones] CHECK CONSTRAINT [CK_Sis_Notificaciones_Tipo];
|
||||
ALTER TABLE [dbo].[Sis_NotificacionesEnvios] WITH CHECK ADD CONSTRAINT [CK_Sis_NotificacionesEnvios_Canal] CHECK ([CanalEnvio]='Campana' OR [CanalEnvio]='Push' OR [CanalEnvio]='Correo' OR [CanalEnvio]='SignalR' OR [CanalEnvio]='WhatsApp' OR [CanalEnvio]='Local');
|
||||
ALTER TABLE [dbo].[Sis_NotificacionesEnvios] CHECK CONSTRAINT [CK_Sis_NotificacionesEnvios_Canal];
|
||||
ALTER TABLE [dbo].[Sis_NotificacionesEnvios] WITH CHECK ADD CONSTRAINT [CK_Sis_NotificacionesEnvios_Estado] CHECK ([EstadoEnvio]='Cancelado' OR [EstadoEnvio]='Fallido' OR [EstadoEnvio]='Enviado' OR [EstadoEnvio]='Pendiente');
|
||||
ALTER TABLE [dbo].[Sis_NotificacionesEnvios] CHECK CONSTRAINT [CK_Sis_NotificacionesEnvios_Estado];
|
||||
ALTER TABLE [dbo].[Sis_PoliticasLimpieza] WITH CHECK ADD CONSTRAINT [CK_Sis_PoliticasLimpieza_DiasRetencion] CHECK ([DiasRetencion]>=(30) AND [DiasRetencion]<=(3650));
|
||||
ALTER TABLE [dbo].[Sis_PoliticasLimpieza] CHECK CONSTRAINT [CK_Sis_PoliticasLimpieza_DiasRetencion];
|
||||
ALTER TABLE [dbo].[Sis_PoliticasLimpieza] WITH CHECK ADD CONSTRAINT [CK_Sis_PoliticasLimpieza_TamanoLote] CHECK ([TamanoLote]>=(1) AND [TamanoLote]<=(10000));
|
||||
ALTER TABLE [dbo].[Sis_PoliticasLimpieza] CHECK CONSTRAINT [CK_Sis_PoliticasLimpieza_TamanoLote];
|
||||
ALTER TABLE [dbo].[Sis_UsuariosAutorizaciones] WITH CHECK ADD CONSTRAINT [CK_Sis_UsuariosAutorizaciones_Estado] CHECK ([EstadoAutorizacion]='Cancelada' OR [EstadoAutorizacion]='Rechazada' OR [EstadoAutorizacion]='Aprobada' OR [EstadoAutorizacion]='Pendiente');
|
||||
ALTER TABLE [dbo].[Sis_UsuariosAutorizaciones] CHECK CONSTRAINT [CK_Sis_UsuariosAutorizaciones_Estado];
|
||||
ALTER TABLE [dbo].[Tra_CostosTramite] WITH CHECK ADD CONSTRAINT [CK_Tra_CostosTramite_Importe] CHECK ([Importe]>=(0));
|
||||
ALTER TABLE [dbo].[Tra_CostosTramite] CHECK CONSTRAINT [CK_Tra_CostosTramite_Importe];
|
||||
ALTER TABLE [dbo].[Tra_CostosTramite] WITH CHECK ADD CONSTRAINT [CK_Tra_CostosTramite_Vigencia] CHECK ([FechaFinVigencia] IS NULL OR [FechaInicioVigencia] IS NULL OR [FechaFinVigencia]>=[FechaInicioVigencia]);
|
||||
ALTER TABLE [dbo].[Tra_CostosTramite] CHECK CONSTRAINT [CK_Tra_CostosTramite_Vigencia];
|
||||
ALTER TABLE [dbo].[Tra_DocumentosSolicitud] WITH CHECK ADD CONSTRAINT [CK_Tra_DocumentosSolicitud_Tamano] CHECK ([TamanoBytes] IS NULL OR [TamanoBytes]>=(0));
|
||||
ALTER TABLE [dbo].[Tra_DocumentosSolicitud] CHECK CONSTRAINT [CK_Tra_DocumentosSolicitud_Tamano];
|
||||
ALTER TABLE [dbo].[Tra_RespuestasSolicitud] WITH CHECK ADD CONSTRAINT [CK_Tra_RespuestasSolicitud_Valor] CHECK ([CveOpcionPregunta] IS NOT NULL OR [Valor] IS NOT NULL);
|
||||
ALTER TABLE [dbo].[Tra_RespuestasSolicitud] CHECK CONSTRAINT [CK_Tra_RespuestasSolicitud_Valor];
|
||||
ALTER TABLE [dbo].[Tra_SolicitudesDependencias] WITH CHECK ADD CONSTRAINT [CK_Tra_SolicitudesDependencias_Diferentes] CHECK ([CveSolicitud]<>[CveSolicitudRequerida]);
|
||||
ALTER TABLE [dbo].[Tra_SolicitudesDependencias] CHECK CONSTRAINT [CK_Tra_SolicitudesDependencias_Diferentes];
|
||||
ALTER TABLE [dbo].[Tra_TiposDocumento] WITH CHECK ADD CONSTRAINT [CK_Tra_TiposDocumento_Tamano] CHECK ([TamanoMaximoMb] IS NULL OR [TamanoMaximoMb]>(0));
|
||||
ALTER TABLE [dbo].[Tra_TiposDocumento] CHECK CONSTRAINT [CK_Tra_TiposDocumento_Tamano];
|
||||
ALTER TABLE [dbo].[Ventas] WITH CHECK ADD CONSTRAINT [CHK_VentasMail] CHECK ([EnvioMail]=(3) OR [EnvioMail]=(2) OR [EnvioMail]=(1) OR [EnvioMail]=(0));
|
||||
ALTER TABLE [dbo].[Ventas] CHECK CONSTRAINT [CHK_VentasMail];
|
||||
ALTER TABLE [dbo].[Ventas] WITH CHECK ADD CONSTRAINT [CK_Ventas] CHECK ([TipoDocto]='Egs' OR [TipoDocto]='Dev' OR [TipoDocto]='Ing' OR [TipoDocto]='Cot' OR [TipoDocto]='Rem' OR [TipoDocto]='Ped' OR [TipoDocto]='DPe' OR [TipoDocto]='Com' OR [TipoDocto]='OP' OR [TipoDocto]='Nom' OR [TipoDocto]='Ant' OR [TipoDocto]='PeC' OR [TipoDocto]='Pd2' OR [TipoDocto]='PA' OR [TipoDocto]='RNC' OR [TipoDocto]='Rmm');
|
||||
ALTER TABLE [dbo].[Ventas] CHECK CONSTRAINT [CK_Ventas];
|
||||
ALTER TABLE [dbo].[Ventas] WITH CHECK ADD CONSTRAINT [CK_Ventas_1] CHECK ([CveCliente]>(0));
|
||||
ALTER TABLE [dbo].[Ventas] CHECK CONSTRAINT [CK_Ventas_1];
|
||||
ALTER TABLE [dbo].[Ventas] WITH CHECK ADD CONSTRAINT [CK_Ventas_Dev_CveVentaPadre] CHECK ([TipoDocto]='Dev' AND [CveVentaPadre]>(0) OR [TipoDocto]<>'Dev');
|
||||
ALTER TABLE [dbo].[Ventas] CHECK CONSTRAINT [CK_Ventas_Dev_CveVentaPadre];
|
||||
ALTER TABLE [dbo].[Ventas] WITH CHECK ADD CONSTRAINT [CK_Ventas_FechaEjecucion_MinMax] CHECK ([FechaEjecucion]>'1900-01-01' AND [FechaEjecucion]<'2900-12-31');
|
||||
ALTER TABLE [dbo].[Ventas] CHECK CONSTRAINT [CK_Ventas_FechaEjecucion_MinMax];
|
||||
ALTER TABLE [dbo].[Ventas] WITH CHECK ADD CONSTRAINT [CK_Ventas_Moneda_TipoCambio] CHECK ([CveMoneda]>=(2) AND [TipoCambio]>=(10) OR [CveMoneda]=(1) AND [TipoCambio]=(1));
|
||||
ALTER TABLE [dbo].[Ventas] CHECK CONSTRAINT [CK_Ventas_Moneda_TipoCambio];
|
||||
ALTER TABLE [dbo].[Ventas] WITH CHECK ADD CONSTRAINT [CK_Ventas_TMp_AlmacenInactivo] CHECK ([CveAlmacenTraspasoDestino]<>(172) AND [CveVenta]>(1012251) OR [CveVenta]<=(1012251));
|
||||
ALTER TABLE [dbo].[Ventas] CHECK CONSTRAINT [CK_Ventas_TMp_AlmacenInactivo];
|
||||
ALTER TABLE [dbo].[Ventas] WITH CHECK ADD CONSTRAINT [CK_Ventas_Total] CHECK (datepart(year,[Fecha])>=(2018) AND abs(round([Total],(2))-round(((((((isnull([SubTotal],(0))+isnull([IVA],(0)))+isnull([IEPS],(0)))-isnull([Amortizacion],(0)))-isnull([RetIVA],(0)))-isnull([RetISR],(0)))-isnull([Descuento],(0)))-isnull([ImpuestoLocal],(0)),(2)))<(200.02) OR datepart(year,[Fecha])<(2018));
|
||||
ALTER TABLE [dbo].[Ventas] CHECK CONSTRAINT [CK_Ventas_Total];
|
||||
ALTER TABLE [dbo].[Vta_Pagos] WITH CHECK ADD CONSTRAINT [CK_Vta_Pagos_Importe] CHECK ([Importe]>(0));
|
||||
ALTER TABLE [dbo].[Vta_Pagos] CHECK CONSTRAINT [CK_Vta_Pagos_Importe];
|
||||
ALTER TABLE [dbo].[Vta_Pagos] WITH CHECK ADD CONSTRAINT [CK_Vta_Pagos_SaldoFavor] CHECK ([EsSaldoFavor]=(0) OR [CveSolicitud] IS NULL);
|
||||
ALTER TABLE [dbo].[Vta_Pagos] CHECK CONSTRAINT [CK_Vta_Pagos_SaldoFavor];
|
||||
|
||||
/* Recrear índices */
|
||||
ALTER TABLE [dbo].[Banc_Bancos] ADD CONSTRAINT [UN_Bancos] UNIQUE NONCLUSTERED ([Banco] ASC) WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY];
|
||||
ALTER TABLE [dbo].[Banc_BancosCuentas] ADD CONSTRAINT [UN_Banc_BancosCuentas] UNIQUE NONCLUSTERED ([CveBanco] ASC, [NumCuenta] ASC) WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY];
|
||||
ALTER TABLE [dbo].[Banc_TiposCuenta] ADD CONSTRAINT [UN_BancTipoCuenta] UNIQUE NONCLUSTERED ([TipoCuenta] ASC) WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY];
|
||||
CREATE NONCLUSTERED INDEX [IX_Bit_Bitacora_Tabla_Llave_Fecha] ON [dbo].[Bit_Bitacora] ([CveTabla] ASC, [LlaveRegistro] ASC, [FechaMovimiento] ASC) WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY];
|
||||
CREATE NONCLUSTERED INDEX [IX_Bit_BitacoraRelaciones_Tabla_Llave] ON [dbo].[Bit_BitacoraRelaciones] ([CveTablaRelacionada] ASC, [LlaveRegistroRelacionada] ASC) WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY];
|
||||
CREATE NONCLUSTERED INDEX [IX_Bit_BitacoraRelaciones_Filtro] ON [dbo].[Bit_BitacoraRelaciones] ([CveTablaRelacionada] ASC, [CveCampoRelacion] ASC, [ValorRelacionNumero] ASC, [VisibleDesarrollador] ASC, [CveBitacora] ASC) INCLUDE ([ValorRelacionTexto], [LlaveRegistroRelacionada]) WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY];
|
||||
CREATE NONCLUSTERED INDEX [IX_Bit_BitacoraRelaciones_FiltroTexto] ON [dbo].[Bit_BitacoraRelaciones] ([CveTablaRelacionada] ASC, [CveCampoRelacion] ASC, [ValorRelacionTexto] ASC, [VisibleDesarrollador] ASC, [CveBitacora] ASC) INCLUDE ([ValorRelacionNumero], [LlaveRegistroRelacionada]) WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY];
|
||||
ALTER TABLE [dbo].[Bit_Campos] ADD CONSTRAINT [UQ_Bit_Campos_Tabla_Campo] UNIQUE NONCLUSTERED ([CveTabla] ASC, [NombreCampoSQL] ASC) WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY];
|
||||
ALTER TABLE [dbo].[Bit_DefinicionesAccion] ADD CONSTRAINT [UQ_Bit_DefinicionesAccion] UNIQUE NONCLUSTERED ([CveTabla] ASC, [CveTipoMovimiento] ASC, [NombreAccion] ASC) WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY];
|
||||
ALTER TABLE [dbo].[Bit_Tablas] ADD CONSTRAINT [UQ_Bit_Tablas_NombreTablaSQL] UNIQUE NONCLUSTERED ([NombreTablaSQL] ASC) WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY];
|
||||
ALTER TABLE [dbo].[Bit_TiposMovimiento] ADD CONSTRAINT [UQ_Bit_TiposMovimiento_Nombre] UNIQUE NONCLUSTERED ([Nombre] ASC) WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY];
|
||||
ALTER TABLE [dbo].[Bit_TiposRelacion] ADD CONSTRAINT [UQ_Bit_TiposRelacion_Nombre] UNIQUE NONCLUSTERED ([Nombre] ASC) WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY];
|
||||
ALTER TABLE [dbo].[Clasificaciones] ADD CONSTRAINT [UN_Clasificacion] UNIQUE NONCLUSTERED ([Clasificacion] ASC, [Codigo] ASC) WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY];
|
||||
ALTER TABLE [dbo].[Conta_ConceptosContables] ADD CONSTRAINT [UN_Conta_ConceptosContables] UNIQUE NONCLUSTERED ([ConceptoContable] ASC, [Tipo] ASC) WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY];
|
||||
ALTER TABLE [dbo].[Conta_TiposPoliza] ADD CONSTRAINT [UN_ContaTipoPoliza] UNIQUE NONCLUSTERED ([TipoPoliza] ASC) WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY];
|
||||
ALTER TABLE [dbo].[Fraccionamientos] ADD CONSTRAINT [UQ_Fraccionamientos_Cliente_Nombre] UNIQUE NONCLUSTERED ([CveCliente] ASC, [Fraccionamiento] ASC) WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY];
|
||||
ALTER TABLE [dbo].[FraccionamientosEtapas] ADD CONSTRAINT [UQ_FraccionamientosEtapas_Fraccionamiento_Etapa] UNIQUE NONCLUSTERED ([CveFraccionamiento] ASC, [Etapa] ASC) WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY];
|
||||
CREATE NONCLUSTERED INDEX [IX_FraccionamientosLotes_Etapa] ON [dbo].[FraccionamientosLotes] ([CveFraccionamientoEtapa] ASC) INCLUDE ([Numero], [Tipo], [Calle], [Catastro], [MetrosCuadrados], [Duplicador], [EsActivo]) WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY];
|
||||
ALTER TABLE [dbo].[Gral_Categorias] ADD CONSTRAINT [UK_Gral_Categorias] UNIQUE NONCLUSTERED ([Categoria] ASC) WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY];
|
||||
ALTER TABLE [dbo].[Gral_Monedas] ADD CONSTRAINT [UN_Moneda] UNIQUE NONCLUSTERED ([Moneda] ASC) WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY];
|
||||
CREATE NONCLUSTERED INDEX [IND_Gral_SAT_Colonia_CP] ON [dbo].[Gral_SAT_Colonia] ([CP] ASC) INCLUDE ([CveColonia], [ClaveSATColonia], [NombreAsentamiento]) WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY];
|
||||
CREATE NONCLUSTERED INDEX [IX_Gral_SAT_Colonia_CP_Vigente] ON [dbo].[Gral_SAT_Colonia] ([CP] ASC) INCLUDE ([CveColonia], [ClaveSATColonia], [NombreAsentamiento]) WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY];
|
||||
CREATE NONCLUSTERED INDEX [IND_Gral_SAT_CP_ClaveSATEstado] ON [dbo].[Gral_SAT_CP] ([CP] ASC) INCLUDE ([ClaveSATEstado]) WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY];
|
||||
ALTER TABLE [dbo].[Gral_SAT_CP] ADD CONSTRAINT [UQ_Gral_SAT_CP_CP] UNIQUE NONCLUSTERED ([CP] ASC) WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY];
|
||||
CREATE NONCLUSTERED INDEX [IX_Gral_SAT_CP_BusquedaRegistro] ON [dbo].[Gral_SAT_CP] ([CP] ASC) INCLUDE ([CveCP], [ClaveSATEstado], [ClaveSATMunicipio], [ClaveSATLocalidad]) WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY];
|
||||
CREATE NONCLUSTERED INDEX [IX_Gral_SAT_Localidad_Claves_Vigente] ON [dbo].[Gral_SAT_Localidad] ([ClaveSATEstado] ASC, [ClaveSATLocalidad] ASC) INCLUDE ([CveLocalidad], [NombreLocalidad]) WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY];
|
||||
CREATE NONCLUSTERED INDEX [IX_Gral_SAT_Municipio_Claves_Vigente] ON [dbo].[Gral_SAT_Municipio] ([ClaveSATEstado] ASC, [ClaveSATMunicipio] ASC) INCLUDE ([CveMunicipio], [Descripcion]) WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY];
|
||||
ALTER TABLE [dbo].[Gral_SAT_UnidadesMedida] ADD CONSTRAINT [UK_Gral_SAT_UnidadesMedida] UNIQUE NONCLUSTERED ([SATClaveUnidadMedida] ASC) WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY];
|
||||
ALTER TABLE [dbo].[Inv_Almacenes] ADD CONSTRAINT [UN_INV_Almacenes] UNIQUE NONCLUSTERED ([Almacen] ASC) WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY];
|
||||
ALTER TABLE [dbo].[Inv_TiposAlmacenes] ADD CONSTRAINT [UN_INV_TiposAlmacenes] UNIQUE NONCLUSTERED ([TipoAlmacen] ASC) WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY];
|
||||
ALTER TABLE [dbo].[Proyectos] ADD CONSTRAINT [UN_Proyectos] UNIQUE NONCLUSTERED ([Proyecto] ASC) WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY];
|
||||
ALTER TABLE [dbo].[Sat_Bancos] ADD CONSTRAINT [UQ_Sat_Bancos_CveBanco] UNIQUE NONCLUSTERED ([CveBanco] ASC) WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY];
|
||||
CREATE NONCLUSTERED INDEX [IX_Sis_IntentosInicioSesion_NombreUsuario_FechaCreacion] ON [dbo].[Sis_IntentosInicioSesion] ([NombreUsuario] ASC, [FechaCreacion] DESC) WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY];
|
||||
ALTER TABLE [dbo].[Sis_Permisos] ADD CONSTRAINT [UQ_Sis_Permisos_CodigoPermiso] UNIQUE NONCLUSTERED ([CodigoPermiso] ASC) WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY];
|
||||
ALTER TABLE [dbo].[Sis_Plataformas] ADD CONSTRAINT [UQ_Sis_Plataformas_NombrePlataforma] UNIQUE NONCLUSTERED ([NombrePlataforma] ASC) WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY];
|
||||
ALTER TABLE [dbo].[Sis_PoliticasLimpieza] ADD CONSTRAINT [PK_Sis_PoliticasLimpieza] PRIMARY KEY CLUSTERED ([Esquema] ASC, [Tabla] ASC) WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY];
|
||||
ALTER TABLE [dbo].[Sis_Roles] ADD CONSTRAINT [UQ_Sis_Roles_NombreRol] UNIQUE NONCLUSTERED ([NombreRol] ASC) WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY];
|
||||
ALTER TABLE [dbo].[Sis_Usuarios] ADD CONSTRAINT [UQ_Sis_Usuarios_NombreUsuario] UNIQUE NONCLUSTERED ([NombreUsuario] ASC) WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY];
|
||||
CREATE UNIQUE NONCLUSTERED INDEX [UQ_Sis_Usuarios_CorreoElectronico] ON [dbo].[Sis_Usuarios] ([CorreoElectronico] ASC) WHERE ([CorreoElectronico] IS NOT NULL) WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY];
|
||||
ALTER TABLE [dbo].[Sis_UsuariosSesiones] ADD CONSTRAINT [UQ_Sis_UsuariosSesiones_TokenSesion] UNIQUE NONCLUSTERED ([TokenSesion] ASC) WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY];
|
||||
ALTER TABLE [dbo].[Sis_UsuariosVerificacionesCorreo] ADD CONSTRAINT [UQ_Sis_UsuariosVerificacionesCorreo_HashToken] UNIQUE NONCLUSTERED ([HashToken] ASC) WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY];
|
||||
ALTER TABLE [dbo].[SubProyectos] ADD CONSTRAINT [UN_SubProyectos] UNIQUE NONCLUSTERED ([CveProyecto] ASC, [SubProyecto] ASC) WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY];
|
||||
ALTER TABLE [dbo].[Tra_EstatusSolicitud] ADD CONSTRAINT [UQ_Tra_EstatusSolicitud_Codigo] UNIQUE NONCLUSTERED ([Codigo] ASC) WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY];
|
||||
ALTER TABLE [dbo].[Tra_OpcionesPregunta] ADD CONSTRAINT [UQ_Tra_OpcionesPregunta_Pregunta_Texto] UNIQUE NONCLUSTERED ([CvePregunta] ASC, [TextoOpcion] ASC) WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY];
|
||||
CREATE UNIQUE NONCLUSTERED INDEX [UX_Tra_Preguntas_Codigo] ON [dbo].[Tra_Preguntas] ([Codigo] ASC) WHERE ([Codigo] IS NOT NULL) WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY];
|
||||
ALTER TABLE [dbo].[Tra_Solicitudes] ADD CONSTRAINT [UQ_Tra_Solicitudes_Folio] UNIQUE NONCLUSTERED ([Folio] ASC) WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY];
|
||||
ALTER TABLE [dbo].[Tra_TiposDocumento] ADD CONSTRAINT [UQ_Tra_TiposDocumento_Nombre] UNIQUE NONCLUSTERED ([TipoDocumento] ASC) WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY];
|
||||
ALTER TABLE [dbo].[Tra_TiposTramite] ADD CONSTRAINT [UQ_Tra_TiposTramite_Codigo] UNIQUE NONCLUSTERED ([Codigo] ASC) WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY];
|
||||
ALTER TABLE [dbo].[UnidadesMedida] ADD CONSTRAINT [UN_UnidadesMedida] UNIQUE NONCLUSTERED ([Abreviatura] ASC) WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY];
|
||||
ALTER TABLE [dbo].[Ventas] ADD CONSTRAINT [UK_Ventas_TipoDocto_Serie_Folio_CveSubProyecto] UNIQUE NONCLUSTERED ([CveSubProyecto] ASC, [TipoDocto] ASC, [Serie] ASC, [Folio] ASC) WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY];
|
||||
ALTER TABLE [dbo].[Vta_ClientesSucursales] ADD CONSTRAINT [UN_Vta_ClientesSucursales] UNIQUE NONCLUSTERED ([CveCliente] ASC, [SucursalCliente] ASC) WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY];
|
||||
ALTER TABLE [dbo].[Vta_TipoDocumentos] ADD CONSTRAINT [PK_Vta_TipoDocumentos] PRIMARY KEY CLUSTERED ([CveTipoDocumento] ASC) WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY];
|
||||
|
||||
/* Recrear estadísticas */
|
||||
|
||||
/* Recrear llaves foráneas */
|
||||
ALTER TABLE [dbo].[EstatusFactura] WITH CHECK ADD CONSTRAINT [FK_EstatusFactura_Vta_TipoDocumentos] FOREIGN KEY ([TipoDocto]) REFERENCES [dbo].[Vta_TipoDocumentos] ([CveTipoDocumento]);
|
||||
ALTER TABLE [dbo].[EstatusFactura] CHECK CONSTRAINT [FK_EstatusFactura_Vta_TipoDocumentos];
|
||||
ALTER TABLE [dbo].[Ventas] WITH CHECK ADD CONSTRAINT [FK_Ventas_Vta_TipoDocumentos] FOREIGN KEY ([TipoDocto]) REFERENCES [dbo].[Vta_TipoDocumentos] ([CveTipoDocumento]);
|
||||
ALTER TABLE [dbo].[Ventas] CHECK CONSTRAINT [FK_Ventas_Vta_TipoDocumentos];
|
||||
|
||||
COMMIT TRANSACTION;
|
||||
END TRY
|
||||
BEGIN CATCH
|
||||
IF XACT_STATE() <> 0 ROLLBACK TRANSACTION;
|
||||
THROW;
|
||||
END CATCH;
|
||||
GO
|
||||
|
||||
/* Después ejecute Migracion_Collation_Default_CS_AS_Dependencias_20260723.sql. */
|
||||
177
Migracion_Collation_Default_CS_AS_Dependencias_20260723.sql
Normal file
177
Migracion_Collation_Default_CS_AS_Dependencias_20260723.sql
Normal file
@@ -0,0 +1,177 @@
|
||||
SET NOCOUNT ON;
|
||||
SET XACT_ABORT ON;
|
||||
USE [master];
|
||||
ALTER DATABASE [SIG_PlataformaDesarolladores] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
|
||||
BEGIN TRY
|
||||
USE [SIG_PlataformaDesarolladores];
|
||||
/* Retirar dependencias del COLLATE predeterminado. */
|
||||
IF EXISTS(SELECT 1 FROM sys.indexes WHERE object_id=OBJECT_ID(N'dbo.Sis_UsuariosClientes') AND name=N'UX_Sis_UsuariosClientes_Usuario_Orden') DROP INDEX [UX_Sis_UsuariosClientes_Usuario_Orden] ON [dbo].[Sis_UsuariosClientes];
|
||||
IF EXISTS(SELECT 1 FROM sys.indexes WHERE object_id=OBJECT_ID(N'dbo.Sis_Usuarios') AND name=N'UQ_Sis_Usuarios_CorreoElectronico') DROP INDEX [UQ_Sis_Usuarios_CorreoElectronico] ON [dbo].[Sis_Usuarios];
|
||||
IF EXISTS(SELECT 1 FROM sys.indexes WHERE object_id=OBJECT_ID(N'dbo.Tra_Preguntas') AND name=N'UX_Tra_Preguntas_Codigo') DROP INDEX [UX_Tra_Preguntas_Codigo] ON [dbo].[Tra_Preguntas];
|
||||
IF OBJECT_ID(N'dbo.CK_Tra_DocumentosSolicitud_Tamano', N'C') IS NOT NULL ALTER TABLE [dbo].[Tra_DocumentosSolicitud] DROP CONSTRAINT [CK_Tra_DocumentosSolicitud_Tamano];
|
||||
IF OBJECT_ID(N'dbo.CK_Sis_NotificacionesEnvios_Canal', N'C') IS NOT NULL ALTER TABLE [dbo].[Sis_NotificacionesEnvios] DROP CONSTRAINT [CK_Sis_NotificacionesEnvios_Canal];
|
||||
IF OBJECT_ID(N'dbo.CK_Sis_NotificacionesEnvios_Estado', N'C') IS NOT NULL ALTER TABLE [dbo].[Sis_NotificacionesEnvios] DROP CONSTRAINT [CK_Sis_NotificacionesEnvios_Estado];
|
||||
IF OBJECT_ID(N'dbo.CK_Tra_RespuestasSolicitud_Valor', N'C') IS NOT NULL ALTER TABLE [dbo].[Tra_RespuestasSolicitud] DROP CONSTRAINT [CK_Tra_RespuestasSolicitud_Valor];
|
||||
IF OBJECT_ID(N'dbo.CK_Sis_UsuariosClientes_Orden', N'C') IS NOT NULL ALTER TABLE [dbo].[Sis_UsuariosClientes] DROP CONSTRAINT [CK_Sis_UsuariosClientes_Orden];
|
||||
IF OBJECT_ID(N'dbo.CK_Tra_CostosTramite_Importe', N'C') IS NOT NULL ALTER TABLE [dbo].[Tra_CostosTramite] DROP CONSTRAINT [CK_Tra_CostosTramite_Importe];
|
||||
IF OBJECT_ID(N'dbo.CK_Tra_CostosTramite_Vigencia', N'C') IS NOT NULL ALTER TABLE [dbo].[Tra_CostosTramite] DROP CONSTRAINT [CK_Tra_CostosTramite_Vigencia];
|
||||
IF OBJECT_ID(N'dbo.CK_Bit_Bitacora_Autorizacion', N'C') IS NOT NULL ALTER TABLE [dbo].[Bit_Bitacora] DROP CONSTRAINT [CK_Bit_Bitacora_Autorizacion];
|
||||
IF OBJECT_ID(N'dbo.CK_VentasDetalle_FondoInicial', N'C') IS NOT NULL ALTER TABLE [dbo].[VentasDetalle] DROP CONSTRAINT [CK_VentasDetalle_FondoInicial];
|
||||
IF OBJECT_ID(N'dbo.CK_VentasDetalle_Importes', N'C') IS NOT NULL ALTER TABLE [dbo].[VentasDetalle] DROP CONSTRAINT [CK_VentasDetalle_Importes];
|
||||
IF OBJECT_ID(N'dbo.CK_Vta_Pagos_Importe', N'C') IS NOT NULL ALTER TABLE [dbo].[Vta_Pagos] DROP CONSTRAINT [CK_Vta_Pagos_Importe];
|
||||
IF OBJECT_ID(N'dbo.CK_Vta_Pagos_SaldoFavor', N'C') IS NOT NULL ALTER TABLE [dbo].[Vta_Pagos] DROP CONSTRAINT [CK_Vta_Pagos_SaldoFavor];
|
||||
IF OBJECT_ID(N'dbo.CK_Bit_BitacoraRelaciones_ValorRelacion', N'C') IS NOT NULL ALTER TABLE [dbo].[Bit_BitacoraRelaciones] DROP CONSTRAINT [CK_Bit_BitacoraRelaciones_ValorRelacion];
|
||||
IF OBJECT_ID(N'dbo.CK_Vta_AplicacionesSaldoFavor_Importe', N'C') IS NOT NULL ALTER TABLE [dbo].[Vta_AplicacionesSaldoFavor] DROP CONSTRAINT [CK_Vta_AplicacionesSaldoFavor_Importe];
|
||||
IF OBJECT_ID(N'dbo.CHK_VentasMail', N'C') IS NOT NULL ALTER TABLE [dbo].[Ventas] DROP CONSTRAINT [CHK_VentasMail];
|
||||
IF OBJECT_ID(N'dbo.CK_Ventas', N'C') IS NOT NULL ALTER TABLE [dbo].[Ventas] DROP CONSTRAINT [CK_Ventas];
|
||||
IF OBJECT_ID(N'dbo.CK_Ventas_1', N'C') IS NOT NULL ALTER TABLE [dbo].[Ventas] DROP CONSTRAINT [CK_Ventas_1];
|
||||
IF OBJECT_ID(N'dbo.CK_Ventas_Dev_CveVentaPadre', N'C') IS NOT NULL ALTER TABLE [dbo].[Ventas] DROP CONSTRAINT [CK_Ventas_Dev_CveVentaPadre];
|
||||
IF OBJECT_ID(N'dbo.CK_Ventas_FechaEjecucion_MinMax', N'C') IS NOT NULL ALTER TABLE [dbo].[Ventas] DROP CONSTRAINT [CK_Ventas_FechaEjecucion_MinMax];
|
||||
IF OBJECT_ID(N'dbo.CK_Ventas_Moneda_TipoCambio', N'C') IS NOT NULL ALTER TABLE [dbo].[Ventas] DROP CONSTRAINT [CK_Ventas_Moneda_TipoCambio];
|
||||
IF OBJECT_ID(N'dbo.CK_Ventas_TMp_AlmacenInactivo', N'C') IS NOT NULL ALTER TABLE [dbo].[Ventas] DROP CONSTRAINT [CK_Ventas_TMp_AlmacenInactivo];
|
||||
IF OBJECT_ID(N'dbo.CK_Ventas_Total', N'C') IS NOT NULL ALTER TABLE [dbo].[Ventas] DROP CONSTRAINT [CK_Ventas_Total];
|
||||
IF OBJECT_ID(N'dbo.CK_Conta_Cuentas_Padre', N'C') IS NOT NULL ALTER TABLE [dbo].[Conta_Cuentas] DROP CONSTRAINT [CK_Conta_Cuentas_Padre];
|
||||
IF OBJECT_ID(N'dbo.CK_Conta_Cuentas_Padre_Requerido', N'C') IS NOT NULL ALTER TABLE [dbo].[Conta_Cuentas] DROP CONSTRAINT [CK_Conta_Cuentas_Padre_Requerido];
|
||||
IF OBJECT_ID(N'dbo.CK_Fraccionamientos_Hectareas', N'C') IS NOT NULL ALTER TABLE [dbo].[Fraccionamientos] DROP CONSTRAINT [CK_Fraccionamientos_Hectareas];
|
||||
IF OBJECT_ID(N'dbo.CK_Clientes_RFC_Requerido', N'C') IS NOT NULL ALTER TABLE [dbo].[Clientes] DROP CONSTRAINT [CK_Clientes_RFC_Requerido];
|
||||
IF OBJECT_ID(N'dbo.CK_FraccionamientosEtapas_Hectareas', N'C') IS NOT NULL ALTER TABLE [dbo].[FraccionamientosEtapas] DROP CONSTRAINT [CK_FraccionamientosEtapas_Hectareas];
|
||||
IF OBJECT_ID(N'dbo.CK_FraccionamientosLotes_MetrosCuadrados', N'C') IS NOT NULL ALTER TABLE [dbo].[FraccionamientosLotes] DROP CONSTRAINT [CK_FraccionamientosLotes_MetrosCuadrados];
|
||||
IF OBJECT_ID(N'dbo.CK_Tra_TiposDocumento_Tamano', N'C') IS NOT NULL ALTER TABLE [dbo].[Tra_TiposDocumento] DROP CONSTRAINT [CK_Tra_TiposDocumento_Tamano];
|
||||
IF OBJECT_ID(N'dbo.CK_Conta_PrePolizas_Concepto', N'C') IS NOT NULL ALTER TABLE [dbo].[Conta_PrePolizas] DROP CONSTRAINT [CK_Conta_PrePolizas_Concepto];
|
||||
IF OBJECT_ID(N'dbo.CK_Conta_PrePolizas_Fecha_2000_2050', N'C') IS NOT NULL ALTER TABLE [dbo].[Conta_PrePolizas] DROP CONSTRAINT [CK_Conta_PrePolizas_Fecha_2000_2050];
|
||||
IF OBJECT_ID(N'dbo.CK_Conta_PrePolizas_FolioPoliza', N'C') IS NOT NULL ALTER TABLE [dbo].[Conta_PrePolizas] DROP CONSTRAINT [CK_Conta_PrePolizas_FolioPoliza];
|
||||
IF OBJECT_ID(N'dbo.CK_Sis_PoliticasLimpieza_DiasRetencion', N'C') IS NOT NULL ALTER TABLE [dbo].[Sis_PoliticasLimpieza] DROP CONSTRAINT [CK_Sis_PoliticasLimpieza_DiasRetencion];
|
||||
IF OBJECT_ID(N'dbo.CK_Sis_PoliticasLimpieza_TamanoLote', N'C') IS NOT NULL ALTER TABLE [dbo].[Sis_PoliticasLimpieza] DROP CONSTRAINT [CK_Sis_PoliticasLimpieza_TamanoLote];
|
||||
IF OBJECT_ID(N'dbo.CK_Sis_UsuariosAutorizaciones_Estado', N'C') IS NOT NULL ALTER TABLE [dbo].[Sis_UsuariosAutorizaciones] DROP CONSTRAINT [CK_Sis_UsuariosAutorizaciones_Estado];
|
||||
IF OBJECT_ID(N'dbo.CK_Tra_SolicitudesDependencias_Diferentes', N'C') IS NOT NULL ALTER TABLE [dbo].[Tra_SolicitudesDependencias] DROP CONSTRAINT [CK_Tra_SolicitudesDependencias_Diferentes];
|
||||
IF OBJECT_ID(N'dbo.CK_AsientoContableCompras', N'C') IS NOT NULL ALTER TABLE [dbo].[ProductosServicios] DROP CONSTRAINT [CK_AsientoContableCompras];
|
||||
IF OBJECT_ID(N'dbo.CK_AsientoContableVentas', N'C') IS NOT NULL ALTER TABLE [dbo].[ProductosServicios] DROP CONSTRAINT [CK_AsientoContableVentas];
|
||||
IF OBJECT_ID(N'dbo.CK_ProductosServicios_IVA', N'C') IS NOT NULL ALTER TABLE [dbo].[ProductosServicios] DROP CONSTRAINT [CK_ProductosServicios_IVA];
|
||||
IF OBJECT_ID(N'dbo.CK_Sis_Notificaciones_Estado', N'C') IS NOT NULL ALTER TABLE [dbo].[Sis_Notificaciones] DROP CONSTRAINT [CK_Sis_Notificaciones_Estado];
|
||||
IF OBJECT_ID(N'dbo.CK_Sis_Notificaciones_Tipo', N'C') IS NOT NULL ALTER TABLE [dbo].[Sis_Notificaciones] DROP CONSTRAINT [CK_Sis_Notificaciones_Tipo];
|
||||
IF COL_LENGTH(N'dbo.Banc_CreditosDetalle', N'IVA') IS NOT NULL ALTER TABLE [dbo].[Banc_CreditosDetalle] DROP COLUMN [IVA];
|
||||
IF COL_LENGTH(N'dbo.Banc_CreditosDetalle', N'Total') IS NOT NULL ALTER TABLE [dbo].[Banc_CreditosDetalle] DROP COLUMN [Total];
|
||||
IF COL_LENGTH(N'dbo.Ventas', N'DiasVencimiento') IS NOT NULL ALTER TABLE [dbo].[Ventas] DROP COLUMN [DiasVencimiento];
|
||||
IF COL_LENGTH(N'dbo.Ventas', N'SerieFolio') IS NOT NULL ALTER TABLE [dbo].[Ventas] DROP COLUMN [SerieFolio];
|
||||
IF COL_LENGTH(N'dbo.Conta_PrePolizas', N'AnioMes') IS NOT NULL ALTER TABLE [dbo].[Conta_PrePolizas] DROP COLUMN [AnioMes];
|
||||
IF COL_LENGTH(N'dbo.ProductosServicios', N'CodigoPS') IS NOT NULL ALTER TABLE [dbo].[ProductosServicios] DROP COLUMN [CodigoPS];
|
||||
USE [master];
|
||||
ALTER DATABASE [SIG_PlataformaDesarolladores] COLLATE Modern_Spanish_CS_AS;
|
||||
USE [SIG_PlataformaDesarolladores];
|
||||
/* Reconstruir dependencias. */
|
||||
IF OBJECT_ID(N'dbo.CK_Tra_DocumentosSolicitud_Tamano', N'C') IS NULL BEGIN ALTER TABLE [dbo].[Tra_DocumentosSolicitud] WITH CHECK ADD CONSTRAINT [CK_Tra_DocumentosSolicitud_Tamano] CHECK ([TamanoBytes] IS NULL OR [TamanoBytes]>=(0)); ALTER TABLE [dbo].[Tra_DocumentosSolicitud] CHECK CONSTRAINT [CK_Tra_DocumentosSolicitud_Tamano]; END;
|
||||
IF OBJECT_ID(N'dbo.CK_Sis_NotificacionesEnvios_Canal', N'C') IS NULL BEGIN ALTER TABLE [dbo].[Sis_NotificacionesEnvios] WITH CHECK ADD CONSTRAINT [CK_Sis_NotificacionesEnvios_Canal] CHECK ([CanalEnvio]='Campana' OR [CanalEnvio]='Push' OR [CanalEnvio]='Correo' OR [CanalEnvio]='SignalR' OR [CanalEnvio]='WhatsApp' OR [CanalEnvio]='Local'); ALTER TABLE [dbo].[Sis_NotificacionesEnvios] CHECK CONSTRAINT [CK_Sis_NotificacionesEnvios_Canal]; END;
|
||||
IF OBJECT_ID(N'dbo.CK_Sis_NotificacionesEnvios_Estado', N'C') IS NULL BEGIN ALTER TABLE [dbo].[Sis_NotificacionesEnvios] WITH CHECK ADD CONSTRAINT [CK_Sis_NotificacionesEnvios_Estado] CHECK ([EstadoEnvio]='Cancelado' OR [EstadoEnvio]='Fallido' OR [EstadoEnvio]='Enviado' OR [EstadoEnvio]='Pendiente'); ALTER TABLE [dbo].[Sis_NotificacionesEnvios] CHECK CONSTRAINT [CK_Sis_NotificacionesEnvios_Estado]; END;
|
||||
IF OBJECT_ID(N'dbo.CK_Tra_RespuestasSolicitud_Valor', N'C') IS NULL BEGIN ALTER TABLE [dbo].[Tra_RespuestasSolicitud] WITH CHECK ADD CONSTRAINT [CK_Tra_RespuestasSolicitud_Valor] CHECK ([CveOpcionPregunta] IS NOT NULL OR [Valor] IS NOT NULL); ALTER TABLE [dbo].[Tra_RespuestasSolicitud] CHECK CONSTRAINT [CK_Tra_RespuestasSolicitud_Valor]; END;
|
||||
IF OBJECT_ID(N'dbo.CK_Sis_UsuariosClientes_Orden', N'C') IS NULL BEGIN ALTER TABLE [dbo].[Sis_UsuariosClientes] WITH CHECK ADD CONSTRAINT [CK_Sis_UsuariosClientes_Orden] CHECK ([Orden]>(0)); ALTER TABLE [dbo].[Sis_UsuariosClientes] CHECK CONSTRAINT [CK_Sis_UsuariosClientes_Orden]; END;
|
||||
IF OBJECT_ID(N'dbo.CK_Tra_CostosTramite_Importe', N'C') IS NULL BEGIN ALTER TABLE [dbo].[Tra_CostosTramite] WITH CHECK ADD CONSTRAINT [CK_Tra_CostosTramite_Importe] CHECK ([Importe]>=(0)); ALTER TABLE [dbo].[Tra_CostosTramite] CHECK CONSTRAINT [CK_Tra_CostosTramite_Importe]; END;
|
||||
IF OBJECT_ID(N'dbo.CK_Tra_CostosTramite_Vigencia', N'C') IS NULL BEGIN ALTER TABLE [dbo].[Tra_CostosTramite] WITH CHECK ADD CONSTRAINT [CK_Tra_CostosTramite_Vigencia] CHECK ([FechaFinVigencia] IS NULL OR [FechaInicioVigencia] IS NULL OR [FechaFinVigencia]>=[FechaInicioVigencia]); ALTER TABLE [dbo].[Tra_CostosTramite] CHECK CONSTRAINT [CK_Tra_CostosTramite_Vigencia]; END;
|
||||
IF OBJECT_ID(N'dbo.CK_Bit_Bitacora_Autorizacion', N'C') IS NULL BEGIN ALTER TABLE [dbo].[Bit_Bitacora] WITH CHECK ADD CONSTRAINT [CK_Bit_Bitacora_Autorizacion] CHECK ([CveUsuarioAutoriza] IS NOT NULL OR [FechaAutorizacion] IS NULL); ALTER TABLE [dbo].[Bit_Bitacora] CHECK CONSTRAINT [CK_Bit_Bitacora_Autorizacion]; END;
|
||||
IF OBJECT_ID(N'dbo.CK_VentasDetalle_FondoInicial', N'C') IS NULL BEGIN ALTER TABLE [dbo].[VentasDetalle] WITH CHECK ADD CONSTRAINT [CK_VentasDetalle_FondoInicial] CHECK ([EsFondoInicial]=(0) OR [CveSolicitud] IS NULL AND [CveCostoTramite] IS NULL); ALTER TABLE [dbo].[VentasDetalle] CHECK CONSTRAINT [CK_VentasDetalle_FondoInicial]; END;
|
||||
IF OBJECT_ID(N'dbo.CK_VentasDetalle_Importes', N'C') IS NULL BEGIN ALTER TABLE [dbo].[VentasDetalle] WITH CHECK ADD CONSTRAINT [CK_VentasDetalle_Importes] CHECK ([Cantidad]>(0) AND [PrecioUnitario]>=(0) AND [Descuento]>=(0) AND [IVA]>=(0) AND [Importe]>=(0)); ALTER TABLE [dbo].[VentasDetalle] CHECK CONSTRAINT [CK_VentasDetalle_Importes]; END;
|
||||
IF OBJECT_ID(N'dbo.CK_Vta_Pagos_Importe', N'C') IS NULL BEGIN ALTER TABLE [dbo].[Vta_Pagos] WITH CHECK ADD CONSTRAINT [CK_Vta_Pagos_Importe] CHECK ([Importe]>(0)); ALTER TABLE [dbo].[Vta_Pagos] CHECK CONSTRAINT [CK_Vta_Pagos_Importe]; END;
|
||||
IF OBJECT_ID(N'dbo.CK_Vta_Pagos_SaldoFavor', N'C') IS NULL BEGIN ALTER TABLE [dbo].[Vta_Pagos] WITH CHECK ADD CONSTRAINT [CK_Vta_Pagos_SaldoFavor] CHECK ([EsSaldoFavor]=(0) OR [CveSolicitud] IS NULL); ALTER TABLE [dbo].[Vta_Pagos] CHECK CONSTRAINT [CK_Vta_Pagos_SaldoFavor]; END;
|
||||
IF OBJECT_ID(N'dbo.CK_Bit_BitacoraRelaciones_ValorRelacion', N'C') IS NULL BEGIN ALTER TABLE [dbo].[Bit_BitacoraRelaciones] WITH CHECK ADD CONSTRAINT [CK_Bit_BitacoraRelaciones_ValorRelacion] CHECK (NOT ([ValorRelacionNumero] IS NOT NULL AND [ValorRelacionTexto] IS NOT NULL)); ALTER TABLE [dbo].[Bit_BitacoraRelaciones] CHECK CONSTRAINT [CK_Bit_BitacoraRelaciones_ValorRelacion]; END;
|
||||
IF OBJECT_ID(N'dbo.CK_Vta_AplicacionesSaldoFavor_Importe', N'C') IS NULL BEGIN ALTER TABLE [dbo].[Vta_AplicacionesSaldoFavor] WITH CHECK ADD CONSTRAINT [CK_Vta_AplicacionesSaldoFavor_Importe] CHECK ([Importe]>(0)); ALTER TABLE [dbo].[Vta_AplicacionesSaldoFavor] CHECK CONSTRAINT [CK_Vta_AplicacionesSaldoFavor_Importe]; END;
|
||||
IF OBJECT_ID(N'dbo.CHK_VentasMail', N'C') IS NULL BEGIN ALTER TABLE [dbo].[Ventas] WITH CHECK ADD CONSTRAINT [CHK_VentasMail] CHECK ([EnvioMail]=(3) OR [EnvioMail]=(2) OR [EnvioMail]=(1) OR [EnvioMail]=(0)); ALTER TABLE [dbo].[Ventas] CHECK CONSTRAINT [CHK_VentasMail]; END;
|
||||
IF OBJECT_ID(N'dbo.CK_Ventas', N'C') IS NULL BEGIN ALTER TABLE [dbo].[Ventas] WITH CHECK ADD CONSTRAINT [CK_Ventas] CHECK ([TipoDocto]='Egs' OR [TipoDocto]='Dev' OR [TipoDocto]='Ing' OR [TipoDocto]='Cot' OR [TipoDocto]='Rem' OR [TipoDocto]='Ped' OR [TipoDocto]='DPe' OR [TipoDocto]='Com' OR [TipoDocto]='OP' OR [TipoDocto]='Nom' OR [TipoDocto]='Ant' OR [TipoDocto]='PeC' OR [TipoDocto]='Pd2' OR [TipoDocto]='PA' OR [TipoDocto]='RNC' OR [TipoDocto]='Rmm'); ALTER TABLE [dbo].[Ventas] CHECK CONSTRAINT [CK_Ventas]; END;
|
||||
IF OBJECT_ID(N'dbo.CK_Ventas_1', N'C') IS NULL BEGIN ALTER TABLE [dbo].[Ventas] WITH CHECK ADD CONSTRAINT [CK_Ventas_1] CHECK ([CveCliente]>(0)); ALTER TABLE [dbo].[Ventas] CHECK CONSTRAINT [CK_Ventas_1]; END;
|
||||
IF OBJECT_ID(N'dbo.CK_Ventas_Dev_CveVentaPadre', N'C') IS NULL BEGIN ALTER TABLE [dbo].[Ventas] WITH CHECK ADD CONSTRAINT [CK_Ventas_Dev_CveVentaPadre] CHECK ([TipoDocto]='Dev' AND [CveVentaPadre]>(0) OR [TipoDocto]<>'Dev'); ALTER TABLE [dbo].[Ventas] CHECK CONSTRAINT [CK_Ventas_Dev_CveVentaPadre]; END;
|
||||
IF OBJECT_ID(N'dbo.CK_Ventas_FechaEjecucion_MinMax', N'C') IS NULL BEGIN ALTER TABLE [dbo].[Ventas] WITH CHECK ADD CONSTRAINT [CK_Ventas_FechaEjecucion_MinMax] CHECK ([FechaEjecucion]>'1900-01-01' AND [FechaEjecucion]<'2900-12-31'); ALTER TABLE [dbo].[Ventas] CHECK CONSTRAINT [CK_Ventas_FechaEjecucion_MinMax]; END;
|
||||
IF OBJECT_ID(N'dbo.CK_Ventas_Moneda_TipoCambio', N'C') IS NULL BEGIN ALTER TABLE [dbo].[Ventas] WITH CHECK ADD CONSTRAINT [CK_Ventas_Moneda_TipoCambio] CHECK ([CveMoneda]>=(2) AND [TipoCambio]>=(10) OR [CveMoneda]=(1) AND [TipoCambio]=(1)); ALTER TABLE [dbo].[Ventas] CHECK CONSTRAINT [CK_Ventas_Moneda_TipoCambio]; END;
|
||||
IF OBJECT_ID(N'dbo.CK_Ventas_TMp_AlmacenInactivo', N'C') IS NULL BEGIN ALTER TABLE [dbo].[Ventas] WITH CHECK ADD CONSTRAINT [CK_Ventas_TMp_AlmacenInactivo] CHECK ([CveAlmacenTraspasoDestino]<>(172) AND [CveVenta]>(1012251) OR [CveVenta]<=(1012251)); ALTER TABLE [dbo].[Ventas] CHECK CONSTRAINT [CK_Ventas_TMp_AlmacenInactivo]; END;
|
||||
IF OBJECT_ID(N'dbo.CK_Ventas_Total', N'C') IS NULL BEGIN ALTER TABLE [dbo].[Ventas] WITH CHECK ADD CONSTRAINT [CK_Ventas_Total] CHECK (datepart(year,[Fecha])>=(2018) AND abs(round([Total],(2))-round(((((((isnull([SubTotal],(0))+isnull([IVA],(0)))+isnull([IEPS],(0)))-isnull([Amortizacion],(0)))-isnull([RetIVA],(0)))-isnull([RetISR],(0)))-isnull([Descuento],(0)))-isnull([ImpuestoLocal],(0)),(2)))<(200.02) OR datepart(year,[Fecha])<(2018)); ALTER TABLE [dbo].[Ventas] CHECK CONSTRAINT [CK_Ventas_Total]; END;
|
||||
IF OBJECT_ID(N'dbo.CK_Conta_Cuentas_Padre', N'C') IS NULL BEGIN ALTER TABLE [dbo].[Conta_Cuentas] WITH CHECK ADD CONSTRAINT [CK_Conta_Cuentas_Padre] CHECK ([CveCuentaPadre]<>[CveCuenta]); ALTER TABLE [dbo].[Conta_Cuentas] CHECK CONSTRAINT [CK_Conta_Cuentas_Padre]; END;
|
||||
IF OBJECT_ID(N'dbo.CK_Conta_Cuentas_Padre_Requerido', N'C') IS NULL BEGIN ALTER TABLE [dbo].[Conta_Cuentas] WITH CHECK ADD CONSTRAINT [CK_Conta_Cuentas_Padre_Requerido] CHECK ([CveCuentaPadre] IS NOT NULL OR ([Codigo]='_ORDEN' OR [Codigo]='_ESTADISTICAS' OR [Codigo]='_GLOBAL')); ALTER TABLE [dbo].[Conta_Cuentas] CHECK CONSTRAINT [CK_Conta_Cuentas_Padre_Requerido]; END;
|
||||
IF OBJECT_ID(N'dbo.CK_Fraccionamientos_Hectareas', N'C') IS NULL BEGIN ALTER TABLE [dbo].[Fraccionamientos] WITH CHECK ADD CONSTRAINT [CK_Fraccionamientos_Hectareas] CHECK ([Hectareas] IS NULL OR [Hectareas]>=(0)); ALTER TABLE [dbo].[Fraccionamientos] CHECK CONSTRAINT [CK_Fraccionamientos_Hectareas]; END;
|
||||
IF OBJECT_ID(N'dbo.CK_Clientes_RFC_Requerido', N'C') IS NULL BEGIN ALTER TABLE [dbo].[Clientes] WITH CHECK ADD CONSTRAINT [CK_Clientes_RFC_Requerido] CHECK ([RFC]<>''); ALTER TABLE [dbo].[Clientes] CHECK CONSTRAINT [CK_Clientes_RFC_Requerido]; END;
|
||||
IF OBJECT_ID(N'dbo.CK_FraccionamientosEtapas_Hectareas', N'C') IS NULL BEGIN ALTER TABLE [dbo].[FraccionamientosEtapas] WITH CHECK ADD CONSTRAINT [CK_FraccionamientosEtapas_Hectareas] CHECK ([Hectareas] IS NULL OR [Hectareas]>=(0)); ALTER TABLE [dbo].[FraccionamientosEtapas] CHECK CONSTRAINT [CK_FraccionamientosEtapas_Hectareas]; END;
|
||||
IF OBJECT_ID(N'dbo.CK_FraccionamientosLotes_MetrosCuadrados', N'C') IS NULL BEGIN ALTER TABLE [dbo].[FraccionamientosLotes] WITH CHECK ADD CONSTRAINT [CK_FraccionamientosLotes_MetrosCuadrados] CHECK ([MetrosCuadrados] IS NULL OR [MetrosCuadrados]>=(0)); ALTER TABLE [dbo].[FraccionamientosLotes] CHECK CONSTRAINT [CK_FraccionamientosLotes_MetrosCuadrados]; END;
|
||||
IF OBJECT_ID(N'dbo.CK_Tra_TiposDocumento_Tamano', N'C') IS NULL BEGIN ALTER TABLE [dbo].[Tra_TiposDocumento] WITH CHECK ADD CONSTRAINT [CK_Tra_TiposDocumento_Tamano] CHECK ([TamanoMaximoMb] IS NULL OR [TamanoMaximoMb]>(0)); ALTER TABLE [dbo].[Tra_TiposDocumento] CHECK CONSTRAINT [CK_Tra_TiposDocumento_Tamano]; END;
|
||||
IF OBJECT_ID(N'dbo.CK_Conta_PrePolizas_Concepto', N'C') IS NULL BEGIN ALTER TABLE [dbo].[Conta_PrePolizas] WITH CHECK ADD CONSTRAINT [CK_Conta_PrePolizas_Concepto] CHECK (rtrim([Concepto])<>''); ALTER TABLE [dbo].[Conta_PrePolizas] CHECK CONSTRAINT [CK_Conta_PrePolizas_Concepto]; END;
|
||||
IF OBJECT_ID(N'dbo.CK_Conta_PrePolizas_Fecha_2000_2050', N'C') IS NULL BEGIN ALTER TABLE [dbo].[Conta_PrePolizas] WITH CHECK ADD CONSTRAINT [CK_Conta_PrePolizas_Fecha_2000_2050] CHECK ([Fecha]>='2000-01-01' AND [Fecha]<='2050/12/31'); ALTER TABLE [dbo].[Conta_PrePolizas] CHECK CONSTRAINT [CK_Conta_PrePolizas_Fecha_2000_2050]; END;
|
||||
IF OBJECT_ID(N'dbo.CK_Conta_PrePolizas_FolioPoliza', N'C') IS NULL BEGIN ALTER TABLE [dbo].[Conta_PrePolizas] WITH CHECK ADD CONSTRAINT [CK_Conta_PrePolizas_FolioPoliza] CHECK ([IdPoliza]>(0) AND isnull([FolioPoliza],(0))>(0) OR ([IdPoliza] IS NULL OR [IdPoliza]=(0))); ALTER TABLE [dbo].[Conta_PrePolizas] CHECK CONSTRAINT [CK_Conta_PrePolizas_FolioPoliza]; END;
|
||||
IF OBJECT_ID(N'dbo.CK_Sis_PoliticasLimpieza_DiasRetencion', N'C') IS NULL BEGIN ALTER TABLE [dbo].[Sis_PoliticasLimpieza] WITH CHECK ADD CONSTRAINT [CK_Sis_PoliticasLimpieza_DiasRetencion] CHECK ([DiasRetencion]>=(30) AND [DiasRetencion]<=(3650)); ALTER TABLE [dbo].[Sis_PoliticasLimpieza] CHECK CONSTRAINT [CK_Sis_PoliticasLimpieza_DiasRetencion]; END;
|
||||
IF OBJECT_ID(N'dbo.CK_Sis_PoliticasLimpieza_TamanoLote', N'C') IS NULL BEGIN ALTER TABLE [dbo].[Sis_PoliticasLimpieza] WITH CHECK ADD CONSTRAINT [CK_Sis_PoliticasLimpieza_TamanoLote] CHECK ([TamanoLote]>=(1) AND [TamanoLote]<=(10000)); ALTER TABLE [dbo].[Sis_PoliticasLimpieza] CHECK CONSTRAINT [CK_Sis_PoliticasLimpieza_TamanoLote]; END;
|
||||
IF OBJECT_ID(N'dbo.CK_Sis_UsuariosAutorizaciones_Estado', N'C') IS NULL BEGIN ALTER TABLE [dbo].[Sis_UsuariosAutorizaciones] WITH CHECK ADD CONSTRAINT [CK_Sis_UsuariosAutorizaciones_Estado] CHECK ([EstadoAutorizacion]='Cancelada' OR [EstadoAutorizacion]='Rechazada' OR [EstadoAutorizacion]='Aprobada' OR [EstadoAutorizacion]='Pendiente'); ALTER TABLE [dbo].[Sis_UsuariosAutorizaciones] CHECK CONSTRAINT [CK_Sis_UsuariosAutorizaciones_Estado]; END;
|
||||
IF OBJECT_ID(N'dbo.CK_Tra_SolicitudesDependencias_Diferentes', N'C') IS NULL BEGIN ALTER TABLE [dbo].[Tra_SolicitudesDependencias] WITH CHECK ADD CONSTRAINT [CK_Tra_SolicitudesDependencias_Diferentes] CHECK ([CveSolicitud]<>[CveSolicitudRequerida]); ALTER TABLE [dbo].[Tra_SolicitudesDependencias] CHECK CONSTRAINT [CK_Tra_SolicitudesDependencias_Diferentes]; END;
|
||||
IF OBJECT_ID(N'dbo.CK_AsientoContableCompras', N'C') IS NULL BEGIN ALTER TABLE [dbo].[ProductosServicios] WITH CHECK ADD CONSTRAINT [CK_AsientoContableCompras] CHECK ([AsientoContableCompras]=(3) OR [AsientoContableCompras]=(2) OR [AsientoContableCompras]=(1)); ALTER TABLE [dbo].[ProductosServicios] CHECK CONSTRAINT [CK_AsientoContableCompras]; END;
|
||||
IF OBJECT_ID(N'dbo.CK_AsientoContableVentas', N'C') IS NULL BEGIN ALTER TABLE [dbo].[ProductosServicios] WITH CHECK ADD CONSTRAINT [CK_AsientoContableVentas] CHECK ([AsientoContableVentas]=(2) OR [AsientoContableVentas]=(1)); ALTER TABLE [dbo].[ProductosServicios] CHECK CONSTRAINT [CK_AsientoContableVentas]; END;
|
||||
IF OBJECT_ID(N'dbo.CK_ProductosServicios_IVA', N'C') IS NULL BEGIN ALTER TABLE [dbo].[ProductosServicios] WITH CHECK ADD CONSTRAINT [CK_ProductosServicios_IVA] CHECK ([IVA]=(-1) OR [IVA]=(0) OR [IVA] IS NULL); ALTER TABLE [dbo].[ProductosServicios] CHECK CONSTRAINT [CK_ProductosServicios_IVA]; END;
|
||||
IF OBJECT_ID(N'dbo.CK_Sis_Notificaciones_Estado', N'C') IS NULL BEGIN ALTER TABLE [dbo].[Sis_Notificaciones] WITH CHECK ADD CONSTRAINT [CK_Sis_Notificaciones_Estado] CHECK ([EstadoNotificacion]='Cancelada' OR [EstadoNotificacion]='Fallida' OR [EstadoNotificacion]='Enviada' OR [EstadoNotificacion]='Pendiente'); ALTER TABLE [dbo].[Sis_Notificaciones] CHECK CONSTRAINT [CK_Sis_Notificaciones_Estado]; END;
|
||||
IF OBJECT_ID(N'dbo.CK_Sis_Notificaciones_Tipo', N'C') IS NULL BEGIN ALTER TABLE [dbo].[Sis_Notificaciones] WITH CHECK ADD CONSTRAINT [CK_Sis_Notificaciones_Tipo] CHECK ([TipoNotificacion]='Campana' OR [TipoNotificacion]='Push' OR [TipoNotificacion]='Correo' OR [TipoNotificacion]='SignalR' OR [TipoNotificacion]='WhatsApp' OR [TipoNotificacion]='Local'); ALTER TABLE [dbo].[Sis_Notificaciones] CHECK CONSTRAINT [CK_Sis_Notificaciones_Tipo]; END;
|
||||
IF COL_LENGTH(N'dbo.Banc_CreditosDetalle', N'IVA') IS NULL ALTER TABLE [dbo].[Banc_CreditosDetalle] ADD [IVA] AS (([IVACapital]+[IVAIntereses])+[IVASeguro]);
|
||||
IF COL_LENGTH(N'dbo.Banc_CreditosDetalle', N'Total') IS NULL ALTER TABLE [dbo].[Banc_CreditosDetalle] ADD [Total] AS ((((([Capital]+[Intereses])+[Seguro])+[IVACapital])+[IVAIntereses])+[IVASeguro]);
|
||||
IF COL_LENGTH(N'dbo.Ventas', N'DiasVencimiento') IS NULL ALTER TABLE [dbo].[Ventas] ADD [DiasVencimiento] AS (datediff(day,[FechaVencimiento2],getdate()));
|
||||
IF COL_LENGTH(N'dbo.Ventas', N'SerieFolio') IS NULL ALTER TABLE [dbo].[Ventas] ADD [SerieFolio] AS ((concat(case when [Serie]<>'' then [Serie]+'-' else '' end,[Folio])) collate Modern_Spanish_CS_AS);
|
||||
IF COL_LENGTH(N'dbo.Conta_PrePolizas', N'AnioMes') IS NULL ALTER TABLE [dbo].[Conta_PrePolizas] ADD [AnioMes] AS ((CONVERT([varchar](6),[Fecha],(112))) collate Modern_Spanish_CS_AS) PERSISTED;
|
||||
IF COL_LENGTH(N'dbo.ProductosServicios', N'CodigoPS') IS NULL ALTER TABLE [dbo].[ProductosServicios] ADD [CodigoPS] AS ((case when len([Codigo])>(0) then concat(([Codigo]) collate Modern_Spanish_CI_AS,' - ',([PS]) collate Modern_Spanish_CI_AS) else ([PS]) collate Modern_Spanish_CI_AS end) collate Modern_Spanish_CI_AS);
|
||||
IF NOT EXISTS(SELECT 1 FROM sys.indexes WHERE object_id=OBJECT_ID(N'dbo.Sis_UsuariosClientes') AND name=N'UX_Sis_UsuariosClientes_Usuario_Orden') CREATE UNIQUE NONCLUSTERED INDEX [UX_Sis_UsuariosClientes_Usuario_Orden] ON [dbo].[Sis_UsuariosClientes] ([CveUsuario] ASC,[Orden] ASC) WHERE ([Activo]=(1)) WITH (PAD_INDEX=OFF,IGNORE_DUP_KEY=OFF,ALLOW_ROW_LOCKS=ON,ALLOW_PAGE_LOCKS=ON) ON [PRIMARY];
|
||||
IF NOT EXISTS(SELECT 1 FROM sys.indexes WHERE object_id=OBJECT_ID(N'dbo.Sis_Usuarios') AND name=N'UQ_Sis_Usuarios_CorreoElectronico') CREATE UNIQUE NONCLUSTERED INDEX [UQ_Sis_Usuarios_CorreoElectronico] ON [dbo].[Sis_Usuarios] ([CorreoElectronico] ASC) WHERE ([CorreoElectronico] IS NOT NULL) WITH (PAD_INDEX=OFF,IGNORE_DUP_KEY=OFF,ALLOW_ROW_LOCKS=ON,ALLOW_PAGE_LOCKS=ON) ON [PRIMARY];
|
||||
IF NOT EXISTS(SELECT 1 FROM sys.indexes WHERE object_id=OBJECT_ID(N'dbo.Tra_Preguntas') AND name=N'UX_Tra_Preguntas_Codigo') CREATE UNIQUE NONCLUSTERED INDEX [UX_Tra_Preguntas_Codigo] ON [dbo].[Tra_Preguntas] ([Codigo] ASC) WHERE ([Codigo] IS NOT NULL) WITH (PAD_INDEX=OFF,IGNORE_DUP_KEY=OFF,ALLOW_ROW_LOCKS=ON,ALLOW_PAGE_LOCKS=ON) ON [PRIMARY];
|
||||
USE [master];
|
||||
ALTER DATABASE [SIG_PlataformaDesarolladores] SET MULTI_USER;
|
||||
END TRY
|
||||
BEGIN CATCH
|
||||
DECLARE @Mensaje nvarchar(2048) = ERROR_MESSAGE();
|
||||
BEGIN TRY
|
||||
USE [SIG_PlataformaDesarolladores];
|
||||
/* Reconstruir dependencias. */
|
||||
IF OBJECT_ID(N'dbo.CK_Tra_DocumentosSolicitud_Tamano', N'C') IS NULL BEGIN ALTER TABLE [dbo].[Tra_DocumentosSolicitud] WITH CHECK ADD CONSTRAINT [CK_Tra_DocumentosSolicitud_Tamano] CHECK ([TamanoBytes] IS NULL OR [TamanoBytes]>=(0)); ALTER TABLE [dbo].[Tra_DocumentosSolicitud] CHECK CONSTRAINT [CK_Tra_DocumentosSolicitud_Tamano]; END;
|
||||
IF OBJECT_ID(N'dbo.CK_Sis_NotificacionesEnvios_Canal', N'C') IS NULL BEGIN ALTER TABLE [dbo].[Sis_NotificacionesEnvios] WITH CHECK ADD CONSTRAINT [CK_Sis_NotificacionesEnvios_Canal] CHECK ([CanalEnvio]='Campana' OR [CanalEnvio]='Push' OR [CanalEnvio]='Correo' OR [CanalEnvio]='SignalR' OR [CanalEnvio]='WhatsApp' OR [CanalEnvio]='Local'); ALTER TABLE [dbo].[Sis_NotificacionesEnvios] CHECK CONSTRAINT [CK_Sis_NotificacionesEnvios_Canal]; END;
|
||||
IF OBJECT_ID(N'dbo.CK_Sis_NotificacionesEnvios_Estado', N'C') IS NULL BEGIN ALTER TABLE [dbo].[Sis_NotificacionesEnvios] WITH CHECK ADD CONSTRAINT [CK_Sis_NotificacionesEnvios_Estado] CHECK ([EstadoEnvio]='Cancelado' OR [EstadoEnvio]='Fallido' OR [EstadoEnvio]='Enviado' OR [EstadoEnvio]='Pendiente'); ALTER TABLE [dbo].[Sis_NotificacionesEnvios] CHECK CONSTRAINT [CK_Sis_NotificacionesEnvios_Estado]; END;
|
||||
IF OBJECT_ID(N'dbo.CK_Tra_RespuestasSolicitud_Valor', N'C') IS NULL BEGIN ALTER TABLE [dbo].[Tra_RespuestasSolicitud] WITH CHECK ADD CONSTRAINT [CK_Tra_RespuestasSolicitud_Valor] CHECK ([CveOpcionPregunta] IS NOT NULL OR [Valor] IS NOT NULL); ALTER TABLE [dbo].[Tra_RespuestasSolicitud] CHECK CONSTRAINT [CK_Tra_RespuestasSolicitud_Valor]; END;
|
||||
IF OBJECT_ID(N'dbo.CK_Sis_UsuariosClientes_Orden', N'C') IS NULL BEGIN ALTER TABLE [dbo].[Sis_UsuariosClientes] WITH CHECK ADD CONSTRAINT [CK_Sis_UsuariosClientes_Orden] CHECK ([Orden]>(0)); ALTER TABLE [dbo].[Sis_UsuariosClientes] CHECK CONSTRAINT [CK_Sis_UsuariosClientes_Orden]; END;
|
||||
IF OBJECT_ID(N'dbo.CK_Tra_CostosTramite_Importe', N'C') IS NULL BEGIN ALTER TABLE [dbo].[Tra_CostosTramite] WITH CHECK ADD CONSTRAINT [CK_Tra_CostosTramite_Importe] CHECK ([Importe]>=(0)); ALTER TABLE [dbo].[Tra_CostosTramite] CHECK CONSTRAINT [CK_Tra_CostosTramite_Importe]; END;
|
||||
IF OBJECT_ID(N'dbo.CK_Tra_CostosTramite_Vigencia', N'C') IS NULL BEGIN ALTER TABLE [dbo].[Tra_CostosTramite] WITH CHECK ADD CONSTRAINT [CK_Tra_CostosTramite_Vigencia] CHECK ([FechaFinVigencia] IS NULL OR [FechaInicioVigencia] IS NULL OR [FechaFinVigencia]>=[FechaInicioVigencia]); ALTER TABLE [dbo].[Tra_CostosTramite] CHECK CONSTRAINT [CK_Tra_CostosTramite_Vigencia]; END;
|
||||
IF OBJECT_ID(N'dbo.CK_Bit_Bitacora_Autorizacion', N'C') IS NULL BEGIN ALTER TABLE [dbo].[Bit_Bitacora] WITH CHECK ADD CONSTRAINT [CK_Bit_Bitacora_Autorizacion] CHECK ([CveUsuarioAutoriza] IS NOT NULL OR [FechaAutorizacion] IS NULL); ALTER TABLE [dbo].[Bit_Bitacora] CHECK CONSTRAINT [CK_Bit_Bitacora_Autorizacion]; END;
|
||||
IF OBJECT_ID(N'dbo.CK_VentasDetalle_FondoInicial', N'C') IS NULL BEGIN ALTER TABLE [dbo].[VentasDetalle] WITH CHECK ADD CONSTRAINT [CK_VentasDetalle_FondoInicial] CHECK ([EsFondoInicial]=(0) OR [CveSolicitud] IS NULL AND [CveCostoTramite] IS NULL); ALTER TABLE [dbo].[VentasDetalle] CHECK CONSTRAINT [CK_VentasDetalle_FondoInicial]; END;
|
||||
IF OBJECT_ID(N'dbo.CK_VentasDetalle_Importes', N'C') IS NULL BEGIN ALTER TABLE [dbo].[VentasDetalle] WITH CHECK ADD CONSTRAINT [CK_VentasDetalle_Importes] CHECK ([Cantidad]>(0) AND [PrecioUnitario]>=(0) AND [Descuento]>=(0) AND [IVA]>=(0) AND [Importe]>=(0)); ALTER TABLE [dbo].[VentasDetalle] CHECK CONSTRAINT [CK_VentasDetalle_Importes]; END;
|
||||
IF OBJECT_ID(N'dbo.CK_Vta_Pagos_Importe', N'C') IS NULL BEGIN ALTER TABLE [dbo].[Vta_Pagos] WITH CHECK ADD CONSTRAINT [CK_Vta_Pagos_Importe] CHECK ([Importe]>(0)); ALTER TABLE [dbo].[Vta_Pagos] CHECK CONSTRAINT [CK_Vta_Pagos_Importe]; END;
|
||||
IF OBJECT_ID(N'dbo.CK_Vta_Pagos_SaldoFavor', N'C') IS NULL BEGIN ALTER TABLE [dbo].[Vta_Pagos] WITH CHECK ADD CONSTRAINT [CK_Vta_Pagos_SaldoFavor] CHECK ([EsSaldoFavor]=(0) OR [CveSolicitud] IS NULL); ALTER TABLE [dbo].[Vta_Pagos] CHECK CONSTRAINT [CK_Vta_Pagos_SaldoFavor]; END;
|
||||
IF OBJECT_ID(N'dbo.CK_Bit_BitacoraRelaciones_ValorRelacion', N'C') IS NULL BEGIN ALTER TABLE [dbo].[Bit_BitacoraRelaciones] WITH CHECK ADD CONSTRAINT [CK_Bit_BitacoraRelaciones_ValorRelacion] CHECK (NOT ([ValorRelacionNumero] IS NOT NULL AND [ValorRelacionTexto] IS NOT NULL)); ALTER TABLE [dbo].[Bit_BitacoraRelaciones] CHECK CONSTRAINT [CK_Bit_BitacoraRelaciones_ValorRelacion]; END;
|
||||
IF OBJECT_ID(N'dbo.CK_Vta_AplicacionesSaldoFavor_Importe', N'C') IS NULL BEGIN ALTER TABLE [dbo].[Vta_AplicacionesSaldoFavor] WITH CHECK ADD CONSTRAINT [CK_Vta_AplicacionesSaldoFavor_Importe] CHECK ([Importe]>(0)); ALTER TABLE [dbo].[Vta_AplicacionesSaldoFavor] CHECK CONSTRAINT [CK_Vta_AplicacionesSaldoFavor_Importe]; END;
|
||||
IF OBJECT_ID(N'dbo.CHK_VentasMail', N'C') IS NULL BEGIN ALTER TABLE [dbo].[Ventas] WITH CHECK ADD CONSTRAINT [CHK_VentasMail] CHECK ([EnvioMail]=(3) OR [EnvioMail]=(2) OR [EnvioMail]=(1) OR [EnvioMail]=(0)); ALTER TABLE [dbo].[Ventas] CHECK CONSTRAINT [CHK_VentasMail]; END;
|
||||
IF OBJECT_ID(N'dbo.CK_Ventas', N'C') IS NULL BEGIN ALTER TABLE [dbo].[Ventas] WITH CHECK ADD CONSTRAINT [CK_Ventas] CHECK ([TipoDocto]='Egs' OR [TipoDocto]='Dev' OR [TipoDocto]='Ing' OR [TipoDocto]='Cot' OR [TipoDocto]='Rem' OR [TipoDocto]='Ped' OR [TipoDocto]='DPe' OR [TipoDocto]='Com' OR [TipoDocto]='OP' OR [TipoDocto]='Nom' OR [TipoDocto]='Ant' OR [TipoDocto]='PeC' OR [TipoDocto]='Pd2' OR [TipoDocto]='PA' OR [TipoDocto]='RNC' OR [TipoDocto]='Rmm'); ALTER TABLE [dbo].[Ventas] CHECK CONSTRAINT [CK_Ventas]; END;
|
||||
IF OBJECT_ID(N'dbo.CK_Ventas_1', N'C') IS NULL BEGIN ALTER TABLE [dbo].[Ventas] WITH CHECK ADD CONSTRAINT [CK_Ventas_1] CHECK ([CveCliente]>(0)); ALTER TABLE [dbo].[Ventas] CHECK CONSTRAINT [CK_Ventas_1]; END;
|
||||
IF OBJECT_ID(N'dbo.CK_Ventas_Dev_CveVentaPadre', N'C') IS NULL BEGIN ALTER TABLE [dbo].[Ventas] WITH CHECK ADD CONSTRAINT [CK_Ventas_Dev_CveVentaPadre] CHECK ([TipoDocto]='Dev' AND [CveVentaPadre]>(0) OR [TipoDocto]<>'Dev'); ALTER TABLE [dbo].[Ventas] CHECK CONSTRAINT [CK_Ventas_Dev_CveVentaPadre]; END;
|
||||
IF OBJECT_ID(N'dbo.CK_Ventas_FechaEjecucion_MinMax', N'C') IS NULL BEGIN ALTER TABLE [dbo].[Ventas] WITH CHECK ADD CONSTRAINT [CK_Ventas_FechaEjecucion_MinMax] CHECK ([FechaEjecucion]>'1900-01-01' AND [FechaEjecucion]<'2900-12-31'); ALTER TABLE [dbo].[Ventas] CHECK CONSTRAINT [CK_Ventas_FechaEjecucion_MinMax]; END;
|
||||
IF OBJECT_ID(N'dbo.CK_Ventas_Moneda_TipoCambio', N'C') IS NULL BEGIN ALTER TABLE [dbo].[Ventas] WITH CHECK ADD CONSTRAINT [CK_Ventas_Moneda_TipoCambio] CHECK ([CveMoneda]>=(2) AND [TipoCambio]>=(10) OR [CveMoneda]=(1) AND [TipoCambio]=(1)); ALTER TABLE [dbo].[Ventas] CHECK CONSTRAINT [CK_Ventas_Moneda_TipoCambio]; END;
|
||||
IF OBJECT_ID(N'dbo.CK_Ventas_TMp_AlmacenInactivo', N'C') IS NULL BEGIN ALTER TABLE [dbo].[Ventas] WITH CHECK ADD CONSTRAINT [CK_Ventas_TMp_AlmacenInactivo] CHECK ([CveAlmacenTraspasoDestino]<>(172) AND [CveVenta]>(1012251) OR [CveVenta]<=(1012251)); ALTER TABLE [dbo].[Ventas] CHECK CONSTRAINT [CK_Ventas_TMp_AlmacenInactivo]; END;
|
||||
IF OBJECT_ID(N'dbo.CK_Ventas_Total', N'C') IS NULL BEGIN ALTER TABLE [dbo].[Ventas] WITH CHECK ADD CONSTRAINT [CK_Ventas_Total] CHECK (datepart(year,[Fecha])>=(2018) AND abs(round([Total],(2))-round(((((((isnull([SubTotal],(0))+isnull([IVA],(0)))+isnull([IEPS],(0)))-isnull([Amortizacion],(0)))-isnull([RetIVA],(0)))-isnull([RetISR],(0)))-isnull([Descuento],(0)))-isnull([ImpuestoLocal],(0)),(2)))<(200.02) OR datepart(year,[Fecha])<(2018)); ALTER TABLE [dbo].[Ventas] CHECK CONSTRAINT [CK_Ventas_Total]; END;
|
||||
IF OBJECT_ID(N'dbo.CK_Conta_Cuentas_Padre', N'C') IS NULL BEGIN ALTER TABLE [dbo].[Conta_Cuentas] WITH CHECK ADD CONSTRAINT [CK_Conta_Cuentas_Padre] CHECK ([CveCuentaPadre]<>[CveCuenta]); ALTER TABLE [dbo].[Conta_Cuentas] CHECK CONSTRAINT [CK_Conta_Cuentas_Padre]; END;
|
||||
IF OBJECT_ID(N'dbo.CK_Conta_Cuentas_Padre_Requerido', N'C') IS NULL BEGIN ALTER TABLE [dbo].[Conta_Cuentas] WITH CHECK ADD CONSTRAINT [CK_Conta_Cuentas_Padre_Requerido] CHECK ([CveCuentaPadre] IS NOT NULL OR ([Codigo]='_ORDEN' OR [Codigo]='_ESTADISTICAS' OR [Codigo]='_GLOBAL')); ALTER TABLE [dbo].[Conta_Cuentas] CHECK CONSTRAINT [CK_Conta_Cuentas_Padre_Requerido]; END;
|
||||
IF OBJECT_ID(N'dbo.CK_Fraccionamientos_Hectareas', N'C') IS NULL BEGIN ALTER TABLE [dbo].[Fraccionamientos] WITH CHECK ADD CONSTRAINT [CK_Fraccionamientos_Hectareas] CHECK ([Hectareas] IS NULL OR [Hectareas]>=(0)); ALTER TABLE [dbo].[Fraccionamientos] CHECK CONSTRAINT [CK_Fraccionamientos_Hectareas]; END;
|
||||
IF OBJECT_ID(N'dbo.CK_Clientes_RFC_Requerido', N'C') IS NULL BEGIN ALTER TABLE [dbo].[Clientes] WITH CHECK ADD CONSTRAINT [CK_Clientes_RFC_Requerido] CHECK ([RFC]<>''); ALTER TABLE [dbo].[Clientes] CHECK CONSTRAINT [CK_Clientes_RFC_Requerido]; END;
|
||||
IF OBJECT_ID(N'dbo.CK_FraccionamientosEtapas_Hectareas', N'C') IS NULL BEGIN ALTER TABLE [dbo].[FraccionamientosEtapas] WITH CHECK ADD CONSTRAINT [CK_FraccionamientosEtapas_Hectareas] CHECK ([Hectareas] IS NULL OR [Hectareas]>=(0)); ALTER TABLE [dbo].[FraccionamientosEtapas] CHECK CONSTRAINT [CK_FraccionamientosEtapas_Hectareas]; END;
|
||||
IF OBJECT_ID(N'dbo.CK_FraccionamientosLotes_MetrosCuadrados', N'C') IS NULL BEGIN ALTER TABLE [dbo].[FraccionamientosLotes] WITH CHECK ADD CONSTRAINT [CK_FraccionamientosLotes_MetrosCuadrados] CHECK ([MetrosCuadrados] IS NULL OR [MetrosCuadrados]>=(0)); ALTER TABLE [dbo].[FraccionamientosLotes] CHECK CONSTRAINT [CK_FraccionamientosLotes_MetrosCuadrados]; END;
|
||||
IF OBJECT_ID(N'dbo.CK_Tra_TiposDocumento_Tamano', N'C') IS NULL BEGIN ALTER TABLE [dbo].[Tra_TiposDocumento] WITH CHECK ADD CONSTRAINT [CK_Tra_TiposDocumento_Tamano] CHECK ([TamanoMaximoMb] IS NULL OR [TamanoMaximoMb]>(0)); ALTER TABLE [dbo].[Tra_TiposDocumento] CHECK CONSTRAINT [CK_Tra_TiposDocumento_Tamano]; END;
|
||||
IF OBJECT_ID(N'dbo.CK_Conta_PrePolizas_Concepto', N'C') IS NULL BEGIN ALTER TABLE [dbo].[Conta_PrePolizas] WITH CHECK ADD CONSTRAINT [CK_Conta_PrePolizas_Concepto] CHECK (rtrim([Concepto])<>''); ALTER TABLE [dbo].[Conta_PrePolizas] CHECK CONSTRAINT [CK_Conta_PrePolizas_Concepto]; END;
|
||||
IF OBJECT_ID(N'dbo.CK_Conta_PrePolizas_Fecha_2000_2050', N'C') IS NULL BEGIN ALTER TABLE [dbo].[Conta_PrePolizas] WITH CHECK ADD CONSTRAINT [CK_Conta_PrePolizas_Fecha_2000_2050] CHECK ([Fecha]>='2000-01-01' AND [Fecha]<='2050/12/31'); ALTER TABLE [dbo].[Conta_PrePolizas] CHECK CONSTRAINT [CK_Conta_PrePolizas_Fecha_2000_2050]; END;
|
||||
IF OBJECT_ID(N'dbo.CK_Conta_PrePolizas_FolioPoliza', N'C') IS NULL BEGIN ALTER TABLE [dbo].[Conta_PrePolizas] WITH CHECK ADD CONSTRAINT [CK_Conta_PrePolizas_FolioPoliza] CHECK ([IdPoliza]>(0) AND isnull([FolioPoliza],(0))>(0) OR ([IdPoliza] IS NULL OR [IdPoliza]=(0))); ALTER TABLE [dbo].[Conta_PrePolizas] CHECK CONSTRAINT [CK_Conta_PrePolizas_FolioPoliza]; END;
|
||||
IF OBJECT_ID(N'dbo.CK_Sis_PoliticasLimpieza_DiasRetencion', N'C') IS NULL BEGIN ALTER TABLE [dbo].[Sis_PoliticasLimpieza] WITH CHECK ADD CONSTRAINT [CK_Sis_PoliticasLimpieza_DiasRetencion] CHECK ([DiasRetencion]>=(30) AND [DiasRetencion]<=(3650)); ALTER TABLE [dbo].[Sis_PoliticasLimpieza] CHECK CONSTRAINT [CK_Sis_PoliticasLimpieza_DiasRetencion]; END;
|
||||
IF OBJECT_ID(N'dbo.CK_Sis_PoliticasLimpieza_TamanoLote', N'C') IS NULL BEGIN ALTER TABLE [dbo].[Sis_PoliticasLimpieza] WITH CHECK ADD CONSTRAINT [CK_Sis_PoliticasLimpieza_TamanoLote] CHECK ([TamanoLote]>=(1) AND [TamanoLote]<=(10000)); ALTER TABLE [dbo].[Sis_PoliticasLimpieza] CHECK CONSTRAINT [CK_Sis_PoliticasLimpieza_TamanoLote]; END;
|
||||
IF OBJECT_ID(N'dbo.CK_Sis_UsuariosAutorizaciones_Estado', N'C') IS NULL BEGIN ALTER TABLE [dbo].[Sis_UsuariosAutorizaciones] WITH CHECK ADD CONSTRAINT [CK_Sis_UsuariosAutorizaciones_Estado] CHECK ([EstadoAutorizacion]='Cancelada' OR [EstadoAutorizacion]='Rechazada' OR [EstadoAutorizacion]='Aprobada' OR [EstadoAutorizacion]='Pendiente'); ALTER TABLE [dbo].[Sis_UsuariosAutorizaciones] CHECK CONSTRAINT [CK_Sis_UsuariosAutorizaciones_Estado]; END;
|
||||
IF OBJECT_ID(N'dbo.CK_Tra_SolicitudesDependencias_Diferentes', N'C') IS NULL BEGIN ALTER TABLE [dbo].[Tra_SolicitudesDependencias] WITH CHECK ADD CONSTRAINT [CK_Tra_SolicitudesDependencias_Diferentes] CHECK ([CveSolicitud]<>[CveSolicitudRequerida]); ALTER TABLE [dbo].[Tra_SolicitudesDependencias] CHECK CONSTRAINT [CK_Tra_SolicitudesDependencias_Diferentes]; END;
|
||||
IF OBJECT_ID(N'dbo.CK_AsientoContableCompras', N'C') IS NULL BEGIN ALTER TABLE [dbo].[ProductosServicios] WITH CHECK ADD CONSTRAINT [CK_AsientoContableCompras] CHECK ([AsientoContableCompras]=(3) OR [AsientoContableCompras]=(2) OR [AsientoContableCompras]=(1)); ALTER TABLE [dbo].[ProductosServicios] CHECK CONSTRAINT [CK_AsientoContableCompras]; END;
|
||||
IF OBJECT_ID(N'dbo.CK_AsientoContableVentas', N'C') IS NULL BEGIN ALTER TABLE [dbo].[ProductosServicios] WITH CHECK ADD CONSTRAINT [CK_AsientoContableVentas] CHECK ([AsientoContableVentas]=(2) OR [AsientoContableVentas]=(1)); ALTER TABLE [dbo].[ProductosServicios] CHECK CONSTRAINT [CK_AsientoContableVentas]; END;
|
||||
IF OBJECT_ID(N'dbo.CK_ProductosServicios_IVA', N'C') IS NULL BEGIN ALTER TABLE [dbo].[ProductosServicios] WITH CHECK ADD CONSTRAINT [CK_ProductosServicios_IVA] CHECK ([IVA]=(-1) OR [IVA]=(0) OR [IVA] IS NULL); ALTER TABLE [dbo].[ProductosServicios] CHECK CONSTRAINT [CK_ProductosServicios_IVA]; END;
|
||||
IF OBJECT_ID(N'dbo.CK_Sis_Notificaciones_Estado', N'C') IS NULL BEGIN ALTER TABLE [dbo].[Sis_Notificaciones] WITH CHECK ADD CONSTRAINT [CK_Sis_Notificaciones_Estado] CHECK ([EstadoNotificacion]='Cancelada' OR [EstadoNotificacion]='Fallida' OR [EstadoNotificacion]='Enviada' OR [EstadoNotificacion]='Pendiente'); ALTER TABLE [dbo].[Sis_Notificaciones] CHECK CONSTRAINT [CK_Sis_Notificaciones_Estado]; END;
|
||||
IF OBJECT_ID(N'dbo.CK_Sis_Notificaciones_Tipo', N'C') IS NULL BEGIN ALTER TABLE [dbo].[Sis_Notificaciones] WITH CHECK ADD CONSTRAINT [CK_Sis_Notificaciones_Tipo] CHECK ([TipoNotificacion]='Campana' OR [TipoNotificacion]='Push' OR [TipoNotificacion]='Correo' OR [TipoNotificacion]='SignalR' OR [TipoNotificacion]='WhatsApp' OR [TipoNotificacion]='Local'); ALTER TABLE [dbo].[Sis_Notificaciones] CHECK CONSTRAINT [CK_Sis_Notificaciones_Tipo]; END;
|
||||
IF COL_LENGTH(N'dbo.Banc_CreditosDetalle', N'IVA') IS NULL ALTER TABLE [dbo].[Banc_CreditosDetalle] ADD [IVA] AS (([IVACapital]+[IVAIntereses])+[IVASeguro]);
|
||||
IF COL_LENGTH(N'dbo.Banc_CreditosDetalle', N'Total') IS NULL ALTER TABLE [dbo].[Banc_CreditosDetalle] ADD [Total] AS ((((([Capital]+[Intereses])+[Seguro])+[IVACapital])+[IVAIntereses])+[IVASeguro]);
|
||||
IF COL_LENGTH(N'dbo.Ventas', N'DiasVencimiento') IS NULL ALTER TABLE [dbo].[Ventas] ADD [DiasVencimiento] AS (datediff(day,[FechaVencimiento2],getdate()));
|
||||
IF COL_LENGTH(N'dbo.Ventas', N'SerieFolio') IS NULL ALTER TABLE [dbo].[Ventas] ADD [SerieFolio] AS ((concat(case when [Serie]<>'' then [Serie]+'-' else '' end,[Folio])) collate Modern_Spanish_CS_AS);
|
||||
IF COL_LENGTH(N'dbo.Conta_PrePolizas', N'AnioMes') IS NULL ALTER TABLE [dbo].[Conta_PrePolizas] ADD [AnioMes] AS ((CONVERT([varchar](6),[Fecha],(112))) collate Modern_Spanish_CS_AS) PERSISTED;
|
||||
IF COL_LENGTH(N'dbo.ProductosServicios', N'CodigoPS') IS NULL ALTER TABLE [dbo].[ProductosServicios] ADD [CodigoPS] AS ((case when len([Codigo])>(0) then concat(([Codigo]) collate Modern_Spanish_CI_AS,' - ',([PS]) collate Modern_Spanish_CI_AS) else ([PS]) collate Modern_Spanish_CI_AS end) collate Modern_Spanish_CI_AS);
|
||||
IF NOT EXISTS(SELECT 1 FROM sys.indexes WHERE object_id=OBJECT_ID(N'dbo.Sis_UsuariosClientes') AND name=N'UX_Sis_UsuariosClientes_Usuario_Orden') CREATE UNIQUE NONCLUSTERED INDEX [UX_Sis_UsuariosClientes_Usuario_Orden] ON [dbo].[Sis_UsuariosClientes] ([CveUsuario] ASC,[Orden] ASC) WHERE ([Activo]=(1)) WITH (PAD_INDEX=OFF,IGNORE_DUP_KEY=OFF,ALLOW_ROW_LOCKS=ON,ALLOW_PAGE_LOCKS=ON) ON [PRIMARY];
|
||||
IF NOT EXISTS(SELECT 1 FROM sys.indexes WHERE object_id=OBJECT_ID(N'dbo.Sis_Usuarios') AND name=N'UQ_Sis_Usuarios_CorreoElectronico') CREATE UNIQUE NONCLUSTERED INDEX [UQ_Sis_Usuarios_CorreoElectronico] ON [dbo].[Sis_Usuarios] ([CorreoElectronico] ASC) WHERE ([CorreoElectronico] IS NOT NULL) WITH (PAD_INDEX=OFF,IGNORE_DUP_KEY=OFF,ALLOW_ROW_LOCKS=ON,ALLOW_PAGE_LOCKS=ON) ON [PRIMARY];
|
||||
IF NOT EXISTS(SELECT 1 FROM sys.indexes WHERE object_id=OBJECT_ID(N'dbo.Tra_Preguntas') AND name=N'UX_Tra_Preguntas_Codigo') CREATE UNIQUE NONCLUSTERED INDEX [UX_Tra_Preguntas_Codigo] ON [dbo].[Tra_Preguntas] ([Codigo] ASC) WHERE ([Codigo] IS NOT NULL) WITH (PAD_INDEX=OFF,IGNORE_DUP_KEY=OFF,ALLOW_ROW_LOCKS=ON,ALLOW_PAGE_LOCKS=ON) ON [PRIMARY];
|
||||
END TRY
|
||||
BEGIN CATCH
|
||||
SET @Mensaje = CONCAT(@Mensaje, N' Error al restaurar dependencias: ', ERROR_MESSAGE());
|
||||
END CATCH;
|
||||
USE [master];
|
||||
ALTER DATABASE [SIG_PlataformaDesarolladores] SET MULTI_USER;
|
||||
THROW 51001, @Mensaje, 1;
|
||||
END CATCH;
|
||||
420
Migracion_DocumentosTramites_20260914.sql
Normal file
420
Migracion_DocumentosTramites_20260914.sql
Normal file
@@ -0,0 +1,420 @@
|
||||
/*
|
||||
Migración a la estructura solicitada.
|
||||
La relación final es dbo.Tra_TiposTramiteDocumento con exactamente:
|
||||
CveTipoTramite, CveTipoDocumento, EsRequerido, EsCliente,
|
||||
TieneVigencia, Orden, EsActivo.
|
||||
PK: (CveTipoTramite, CveTipoDocumento). EsRequerido DEFAULT (0).
|
||||
|
||||
Orden: Exportar -> Preparar -> ALTER de PAs revisados -> Finalizar.
|
||||
Ejecutar en una sola transacción de instalación, sin escrituras concurrentes.
|
||||
Exportar y guardar el XML completo, los PAs originales y un respaldo de la BD.
|
||||
El XML conserva también las claves antiguas y SeValida; no se inventa una
|
||||
columna equivalente en la relación nueva.
|
||||
Review, StageContextGet y DownloadGet existentes no necesitan cambios.
|
||||
|
||||
Los contratos, los trece PAs y la bitácora se adaptan a la clave compuesta.
|
||||
Establecer @ReferenciasAdaptadas = 1 únicamente con esa versión de aplicación.
|
||||
*/
|
||||
SET NOCOUNT ON;
|
||||
SET XACT_ABORT ON;
|
||||
|
||||
DECLARE @Fase varchar(20) = 'Exportar';
|
||||
DECLARE @Respaldo xml = NULL;
|
||||
DECLARE @ReferenciasAdaptadas bit = 0;
|
||||
|
||||
IF @Fase NOT IN ('Exportar', 'Preparar', 'Finalizar')
|
||||
THROW 51000, 'Fase desconocida.', 1;
|
||||
|
||||
IF @Fase = 'Exportar'
|
||||
BEGIN
|
||||
IF OBJECT_ID('dbo.Tra_DocumentosRequeridos', 'U') IS NULL
|
||||
THROW 51000, 'La relación anterior ya no existe. Utilice el respaldo original.', 1;
|
||||
|
||||
EXEC sys.sp_executesql N'
|
||||
SELECT
|
||||
DB_NAME() AS [@Base],
|
||||
(
|
||||
SELECT CveTipoDocumento AS [@Clave], EsCliente AS [@EsCliente]
|
||||
FROM dbo.Tra_TiposDocumento
|
||||
ORDER BY CveTipoDocumento
|
||||
FOR XML PATH(''TipoDocumento''), TYPE
|
||||
),
|
||||
(
|
||||
SELECT
|
||||
CveDocumentoRequerido AS [@ClaveAnterior],
|
||||
CveTipoTramite AS [@Tramite],
|
||||
CveTipoDocumento AS [@Documento],
|
||||
EsRequerido AS [@Requerido],
|
||||
Orden AS [@Orden],
|
||||
EsActivo AS [@Activo],
|
||||
SeValida AS [@SeValida]
|
||||
FROM dbo.Tra_DocumentosRequeridos
|
||||
ORDER BY CveDocumentoRequerido
|
||||
FOR XML PATH(''Relacion''), TYPE
|
||||
)
|
||||
FOR XML PATH(''Respaldo''), TYPE;';
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
IF @ReferenciasAdaptadas <> 1
|
||||
THROW 51000, 'Falta completar la adaptación de contratos, borrado, ordenamiento y bitácora. No instalar todavía.', 1;
|
||||
|
||||
IF @Respaldo IS NULL
|
||||
OR @Respaldo.exist('/Respaldo/@Base') <> 1
|
||||
OR @Respaldo.value('(/Respaldo/@Base)[1]', 'nvarchar(128)') <> DB_NAME()
|
||||
THROW 51000, 'Se requiere el XML completo exportado desde esta base antes de migrar.', 1;
|
||||
|
||||
BEGIN TRY
|
||||
BEGIN TRANSACTION;
|
||||
|
||||
IF @Fase = 'Preparar'
|
||||
BEGIN
|
||||
IF OBJECT_ID('dbo.Tra_DocumentosRequeridos', 'U') IS NULL
|
||||
OR OBJECT_ID('dbo.Tra_TiposTramiteDocumento') IS NOT NULL
|
||||
THROW 51000, 'La relación de origen debe existir y el nombre de destino debe estar libre.', 1;
|
||||
|
||||
EXEC sys.sp_executesql N'
|
||||
DECLARE @Cantidad bigint;
|
||||
SELECT @Cantidad = COUNT_BIG(*) FROM dbo.Tra_TiposDocumento WITH (TABLOCKX, HOLDLOCK);
|
||||
SELECT @Cantidad = COUNT_BIG(*) FROM dbo.Tra_DocumentosRequeridos WITH (TABLOCKX, HOLDLOCK);
|
||||
SELECT @Cantidad = COUNT_BIG(*) FROM dbo.Tra_Solicitudes WITH (TABLOCKX, HOLDLOCK);
|
||||
SELECT @Cantidad = COUNT_BIG(*) FROM dbo.Tra_DocumentosSolicitud WITH (TABLOCKX, HOLDLOCK);
|
||||
|
||||
DECLARE @Tipos TABLE (Clave int PRIMARY KEY, EsCliente bit NOT NULL);
|
||||
INSERT INTO @Tipos (Clave, EsCliente)
|
||||
SELECT N.value(''@Clave'', ''int''), N.value(''@EsCliente'', ''bit'')
|
||||
FROM @Xml.nodes(''/Respaldo/TipoDocumento'') AS T(N);
|
||||
|
||||
DECLARE @Relaciones TABLE
|
||||
(
|
||||
ClaveAnterior int PRIMARY KEY,
|
||||
Tramite int NOT NULL,
|
||||
Documento int NOT NULL,
|
||||
Requerido bit NOT NULL,
|
||||
Orden int NOT NULL,
|
||||
Activo bit NOT NULL,
|
||||
SeValida bit NOT NULL
|
||||
);
|
||||
INSERT INTO @Relaciones
|
||||
SELECT
|
||||
N.value(''@ClaveAnterior'', ''int''),
|
||||
N.value(''@Tramite'', ''int''),
|
||||
N.value(''@Documento'', ''int''),
|
||||
N.value(''@Requerido'', ''bit''),
|
||||
N.value(''@Orden'', ''int''),
|
||||
N.value(''@Activo'', ''bit''),
|
||||
N.value(''@SeValida'', ''bit'')
|
||||
FROM @Xml.nodes(''/Respaldo/Relacion'') AS T(N);
|
||||
|
||||
IF EXISTS
|
||||
(
|
||||
SELECT CveTipoDocumento, EsCliente FROM dbo.Tra_TiposDocumento
|
||||
EXCEPT SELECT Clave, EsCliente FROM @Tipos
|
||||
)
|
||||
OR EXISTS
|
||||
(
|
||||
SELECT Clave, EsCliente FROM @Tipos
|
||||
EXCEPT SELECT CveTipoDocumento, EsCliente FROM dbo.Tra_TiposDocumento
|
||||
)
|
||||
OR EXISTS
|
||||
(
|
||||
SELECT CveDocumentoRequerido, CveTipoTramite, CveTipoDocumento,
|
||||
EsRequerido, Orden, EsActivo, SeValida
|
||||
FROM dbo.Tra_DocumentosRequeridos
|
||||
EXCEPT SELECT ClaveAnterior, Tramite, Documento, Requerido, Orden, Activo, SeValida
|
||||
FROM @Relaciones
|
||||
)
|
||||
OR EXISTS
|
||||
(
|
||||
SELECT ClaveAnterior, Tramite, Documento, Requerido, Orden, Activo, SeValida
|
||||
FROM @Relaciones
|
||||
EXCEPT SELECT CveDocumentoRequerido, CveTipoTramite, CveTipoDocumento,
|
||||
EsRequerido, Orden, EsActivo, SeValida
|
||||
FROM dbo.Tra_DocumentosRequeridos
|
||||
)
|
||||
THROW 51000, ''El respaldo está incompleto o los datos cambiaron. No se retirarán columnas.'', 1;
|
||||
|
||||
IF EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM sys.foreign_keys
|
||||
WHERE referenced_object_id = OBJECT_ID(''dbo.Tra_DocumentosRequeridos'')
|
||||
)
|
||||
THROW 51000, ''Existen referencias a la clave antigua que deben migrarse primero.'', 1;
|
||||
|
||||
IF EXISTS
|
||||
(
|
||||
SELECT CveTipoTramite, CveTipoDocumento
|
||||
FROM dbo.Tra_DocumentosRequeridos
|
||||
GROUP BY CveTipoTramite, CveTipoDocumento
|
||||
HAVING COUNT_BIG(*) > 1
|
||||
)
|
||||
THROW 51000, ''Hay relaciones duplicadas. No se eliminarán automáticamente.'', 1;
|
||||
|
||||
IF EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM dbo.Tra_DocumentosSolicitud AS D
|
||||
LEFT JOIN dbo.Tra_Solicitudes AS S ON S.CveSolicitud = D.CveSolicitud
|
||||
LEFT JOIN dbo.Tra_DocumentosRequeridos AS R ON R.CveTipoTramite = S.CveTipoTramite
|
||||
AND R.CveTipoDocumento = D.CveTipoDocumento
|
||||
WHERE S.CveSolicitud IS NULL OR R.CveTipoDocumento IS NULL
|
||||
)
|
||||
THROW 51000, ''Hay documentos sin solicitud o sin configuración por trámite. Revisar antes de migrar.'', 1;
|
||||
|
||||
ALTER TABLE dbo.Tra_DocumentosRequeridos WITH CHECK CHECK CONSTRAINT ALL;
|
||||
ALTER TABLE dbo.Tra_DocumentosSolicitud WITH CHECK CHECK CONSTRAINT ALL;
|
||||
ALTER TABLE dbo.Tra_TiposDocumento WITH CHECK CHECK CONSTRAINT ALL;',
|
||||
N'@Xml xml', @Xml = @Respaldo;
|
||||
|
||||
ALTER TABLE dbo.Tra_DocumentosRequeridos ADD EsCliente bit NULL;
|
||||
ALTER TABLE dbo.Tra_DocumentosRequeridos
|
||||
ADD TieneVigencia bit NOT NULL
|
||||
CONSTRAINT DF_Tra_TiposTramiteDocumento_TieneVigencia DEFAULT (0) WITH VALUES;
|
||||
|
||||
EXEC sys.sp_executesql N'
|
||||
UPDATE R
|
||||
SET EsCliente = D.EsCliente
|
||||
FROM dbo.Tra_DocumentosRequeridos AS R
|
||||
INNER JOIN dbo.Tra_TiposDocumento AS D ON D.CveTipoDocumento = R.CveTipoDocumento;
|
||||
|
||||
ALTER TABLE dbo.Tra_DocumentosRequeridos ALTER COLUMN EsCliente bit NOT NULL;
|
||||
ALTER TABLE dbo.Tra_DocumentosRequeridos
|
||||
ADD CONSTRAINT DF_Tra_TiposTramiteDocumento_EsCliente DEFAULT (1) FOR EsCliente;';
|
||||
|
||||
EXEC sys.sp_rename
|
||||
@objname = N'dbo.Tra_DocumentosRequeridos',
|
||||
@newname = N'Tra_TiposTramiteDocumento',
|
||||
@objtype = N'OBJECT';
|
||||
|
||||
EXEC sys.sp_executesql N'
|
||||
ALTER TABLE dbo.Tra_TiposTramiteDocumento DROP CONSTRAINT PK_Tra_DocumentosRequeridos;
|
||||
ALTER TABLE dbo.Tra_TiposTramiteDocumento DROP CONSTRAINT UQ_Tra_DocumentosRequeridos;
|
||||
ALTER TABLE dbo.Tra_TiposTramiteDocumento DROP COLUMN CveDocumentoRequerido, SeValida;
|
||||
|
||||
ALTER TABLE dbo.Tra_TiposTramiteDocumento
|
||||
ADD CONSTRAINT PK_Tra_TiposTramiteDocumento
|
||||
PRIMARY KEY CLUSTERED (CveTipoTramite, CveTipoDocumento);
|
||||
|
||||
DECLARE @Restriccion sysname;
|
||||
SELECT @Restriccion = name
|
||||
FROM sys.default_constraints
|
||||
WHERE parent_object_id = OBJECT_ID(''dbo.Tra_TiposTramiteDocumento'')
|
||||
AND parent_column_id = COLUMNPROPERTY(parent_object_id, ''EsRequerido'', ''ColumnId'');
|
||||
|
||||
IF @Restriccion IS NOT NULL
|
||||
BEGIN
|
||||
DECLARE @Sql nvarchar(max) =
|
||||
N''ALTER TABLE dbo.Tra_TiposTramiteDocumento DROP CONSTRAINT '' + QUOTENAME(@Restriccion);
|
||||
EXEC sys.sp_executesql @Sql;
|
||||
END;
|
||||
|
||||
ALTER TABLE dbo.Tra_TiposTramiteDocumento
|
||||
ADD CONSTRAINT DF_Tra_TiposTramiteDocumento_EsRequerido DEFAULT (0) FOR EsRequerido;';
|
||||
|
||||
EXEC sys.sp_rename
|
||||
@objname = N'dbo.FK_Tra_DocumentosRequeridos_TiposTramite',
|
||||
@newname = N'FK_Tra_TiposTramiteDocumento_TipoTramite',
|
||||
@objtype = N'OBJECT';
|
||||
EXEC sys.sp_rename
|
||||
@objname = N'dbo.FK_Tra_DocumentosRequeridos_TiposDocumento',
|
||||
@newname = N'FK_Tra_TiposTramiteDocumento_TipoDocumento',
|
||||
@objtype = N'OBJECT';
|
||||
|
||||
IF COL_LENGTH('dbo.Tra_DocumentosSolicitud', 'FechaDocumento') IS NULL
|
||||
ALTER TABLE dbo.Tra_DocumentosSolicitud ADD FechaDocumento date NULL;
|
||||
IF COL_LENGTH('dbo.Tra_DocumentosSolicitud', 'FechaVencimiento') IS NULL
|
||||
ALTER TABLE dbo.Tra_DocumentosSolicitud ADD FechaVencimiento date NULL;
|
||||
IF COL_LENGTH('dbo.Tra_DocumentosSolicitud', 'EsActivo') IS NULL
|
||||
ALTER TABLE dbo.Tra_DocumentosSolicitud
|
||||
ADD EsActivo bit NOT NULL
|
||||
CONSTRAINT DF_Tra_DocumentosSolicitud_EsActivo DEFAULT (1) WITH VALUES;
|
||||
IF COL_LENGTH('dbo.Tra_DocumentosSolicitud', 'CveFraccionamientoEtapa') IS NULL
|
||||
ALTER TABLE dbo.Tra_DocumentosSolicitud ADD CveFraccionamientoEtapa int NULL;
|
||||
|
||||
EXEC sys.sp_executesql N'
|
||||
UPDATE D
|
||||
SET CveFraccionamientoEtapa = S.CveFraccionamientoEtapa
|
||||
FROM dbo.Tra_DocumentosSolicitud AS D
|
||||
INNER JOIN dbo.Tra_Solicitudes AS S ON S.CveSolicitud = D.CveSolicitud
|
||||
WHERE D.CveFraccionamientoEtapa IS NULL;
|
||||
|
||||
ALTER TABLE dbo.Tra_DocumentosSolicitud ALTER COLUMN CveFraccionamientoEtapa int NOT NULL;
|
||||
IF NOT EXISTS
|
||||
(
|
||||
SELECT 1 FROM sys.indexes
|
||||
WHERE object_id = OBJECT_ID(''dbo.Tra_Solicitudes'')
|
||||
AND name = ''UQ_Tra_Solicitudes_SolicitudEtapa''
|
||||
)
|
||||
ALTER TABLE dbo.Tra_Solicitudes
|
||||
ADD CONSTRAINT UQ_Tra_Solicitudes_SolicitudEtapa UNIQUE (CveSolicitud, CveFraccionamientoEtapa);
|
||||
|
||||
IF OBJECT_ID(''dbo.FK_Tra_DocumentosSolicitud_SolicitudEtapa'', ''F'') IS NULL
|
||||
ALTER TABLE dbo.Tra_DocumentosSolicitud WITH CHECK
|
||||
ADD CONSTRAINT FK_Tra_DocumentosSolicitud_SolicitudEtapa
|
||||
FOREIGN KEY (CveSolicitud, CveFraccionamientoEtapa)
|
||||
REFERENCES dbo.Tra_Solicitudes (CveSolicitud, CveFraccionamientoEtapa);
|
||||
|
||||
IF OBJECT_ID(''dbo.FK_Tra_DocumentosSolicitud_Etapa'', ''F'') IS NULL
|
||||
ALTER TABLE dbo.Tra_DocumentosSolicitud WITH CHECK
|
||||
ADD CONSTRAINT FK_Tra_DocumentosSolicitud_Etapa
|
||||
FOREIGN KEY (CveFraccionamientoEtapa)
|
||||
REFERENCES dbo.FraccionamientosEtapas (CveFraccionamientoEtapa);';
|
||||
END;
|
||||
|
||||
IF @Fase = 'Finalizar'
|
||||
BEGIN
|
||||
-- Se conserva intacto el catálogo de bitácora anterior y todo su historial.
|
||||
DECLARE @TablasBitacora TABLE
|
||||
(
|
||||
NombreTablaSQL varchar(128),
|
||||
NombreMostrar varchar(150),
|
||||
NombreCampoLlaveSQL varchar(128)
|
||||
);
|
||||
INSERT INTO @TablasBitacora
|
||||
(NombreTablaSQL, NombreMostrar, NombreCampoLlaveSQL)
|
||||
VALUES
|
||||
('Tra_TiposTramiteDocumento', 'Documentos por tipo de trámite', NULL),
|
||||
('Tra_DocumentosSolicitud', 'Documentos cargados de solicitudes', 'CveDocumentoSolicitud');
|
||||
|
||||
INSERT INTO dbo.Bit_Tablas
|
||||
(NombreTablaSQL, NombreMostrar, Descripcion, NombreCampoLlaveSQL, Activo)
|
||||
SELECT
|
||||
T.NombreTablaSQL,
|
||||
T.NombreMostrar,
|
||||
T.NombreMostrar,
|
||||
T.NombreCampoLlaveSQL,
|
||||
1
|
||||
FROM @TablasBitacora AS T
|
||||
WHERE NOT EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM dbo.Bit_Tablas AS B
|
||||
WHERE B.NombreTablaSQL = T.NombreTablaSQL
|
||||
);
|
||||
|
||||
DECLARE @CamposBitacora TABLE
|
||||
(
|
||||
NombreTablaSQL varchar(128),
|
||||
NombreCampoSQL varchar(128),
|
||||
NombreMostrar varchar(150),
|
||||
TipoDatoSQL varchar(50)
|
||||
);
|
||||
INSERT INTO @CamposBitacora
|
||||
(NombreTablaSQL, NombreCampoSQL, NombreMostrar, TipoDatoSQL)
|
||||
VALUES
|
||||
('Tra_TiposTramiteDocumento', 'CveTipoTramite', 'Tipo de trámite', 'int'),
|
||||
('Tra_TiposTramiteDocumento', 'CveTipoDocumento', 'Tipo de documento', 'int'),
|
||||
('Tra_TiposTramiteDocumento', 'EsRequerido', 'Requerido', 'bit'),
|
||||
('Tra_TiposTramiteDocumento', 'EsCliente', 'Lo proporciona el desarrollador', 'bit'),
|
||||
('Tra_TiposTramiteDocumento', 'TieneVigencia', 'Tiene vigencia', 'bit'),
|
||||
('Tra_TiposTramiteDocumento', 'Orden', 'Orden', 'int'),
|
||||
('Tra_TiposTramiteDocumento', 'EsActivo', 'Activo', 'bit'),
|
||||
('Tra_DocumentosSolicitud', 'CveDocumentoSolicitud', 'Documento', 'int'),
|
||||
('Tra_DocumentosSolicitud', 'CveSolicitud', 'Solicitud', 'int'),
|
||||
('Tra_DocumentosSolicitud', 'CveTipoDocumento', 'Tipo de documento', 'int'),
|
||||
('Tra_DocumentosSolicitud', 'NombreArchivo', 'Nombre del archivo', 'varchar'),
|
||||
('Tra_DocumentosSolicitud', 'NombreArchivoFisico', 'Nombre físico', 'varchar'),
|
||||
('Tra_DocumentosSolicitud', 'RutaArchivo', 'Ruta del archivo', 'varchar'),
|
||||
('Tra_DocumentosSolicitud', 'ContentType', 'Tipo de contenido', 'varchar'),
|
||||
('Tra_DocumentosSolicitud', 'TamanoBytes', 'Tamaño en bytes', 'bigint'),
|
||||
('Tra_DocumentosSolicitud', 'ComentarioCliente', 'Comentario del cliente', 'varchar'),
|
||||
('Tra_DocumentosSolicitud', 'ComentarioAdministrativo', 'Observaciones de revisión', 'varchar'),
|
||||
('Tra_DocumentosSolicitud', 'EsAprobado', 'Aprobado', 'bit'),
|
||||
('Tra_DocumentosSolicitud', 'CveUsuarioRevisa', 'Usuario que revisa', 'int'),
|
||||
('Tra_DocumentosSolicitud', 'FechaRevision', 'Fecha de revisión', 'datetime'),
|
||||
('Tra_DocumentosSolicitud', 'FechaDocumento', 'Fecha del documento', 'date'),
|
||||
('Tra_DocumentosSolicitud', 'FechaVencimiento', 'Fecha de vencimiento', 'date');
|
||||
|
||||
INSERT INTO dbo.Bit_Campos
|
||||
(CveTabla, NombreCampoSQL, NombreMostrar, MostrarEnBitacora, TipoDatoSQL, Activo)
|
||||
SELECT
|
||||
B.CveTabla,
|
||||
C.NombreCampoSQL,
|
||||
C.NombreMostrar,
|
||||
1,
|
||||
C.TipoDatoSQL,
|
||||
1
|
||||
FROM @CamposBitacora AS C
|
||||
INNER JOIN dbo.Bit_Tablas AS B ON B.NombreTablaSQL = C.NombreTablaSQL
|
||||
WHERE NOT EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM dbo.Bit_Campos AS E
|
||||
WHERE E.CveTabla = B.CveTabla
|
||||
AND E.NombreCampoSQL = C.NombreCampoSQL
|
||||
);
|
||||
|
||||
IF EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM @CamposBitacora AS C
|
||||
INNER JOIN dbo.Bit_Tablas AS B ON B.NombreTablaSQL = C.NombreTablaSQL
|
||||
INNER JOIN dbo.Bit_Campos AS E ON E.CveTabla = B.CveTabla
|
||||
AND E.NombreCampoSQL = C.NombreCampoSQL
|
||||
WHERE B.Activo <> 1 OR E.Activo <> 1
|
||||
)
|
||||
THROW 51000, 'La configuración necesaria de bitácora está inactiva.', 1;
|
||||
|
||||
IF (SELECT COUNT(*) FROM sys.columns WHERE object_id = OBJECT_ID('dbo.Tra_TiposTramiteDocumento')) <> 7
|
||||
THROW 51000, 'La relación no tiene exactamente las siete columnas solicitadas.', 1;
|
||||
|
||||
IF EXISTS
|
||||
(
|
||||
SELECT 1 FROM sys.sql_modules
|
||||
WHERE definition LIKE '%Tra_DocumentosRequeridos%'
|
||||
)
|
||||
THROW 51000, 'Todavía hay módulos que utilizan la relación anterior.', 1;
|
||||
|
||||
DECLARE @Modulos TABLE (Nombre nvarchar(517) PRIMARY KEY);
|
||||
INSERT INTO @Modulos
|
||||
SELECT QUOTENAME(OBJECT_SCHEMA_NAME(object_id)) + N'.' + QUOTENAME(OBJECT_NAME(object_id))
|
||||
FROM sys.sql_modules
|
||||
WHERE definition LIKE '%Tra_TiposDocumento%';
|
||||
|
||||
DECLARE @Modulo nvarchar(517);
|
||||
WHILE EXISTS (SELECT 1 FROM @Modulos)
|
||||
BEGIN
|
||||
SELECT TOP (1) @Modulo = Nombre FROM @Modulos ORDER BY Nombre;
|
||||
IF EXISTS
|
||||
(
|
||||
SELECT 1 FROM sys.dm_sql_referenced_entities(@Modulo, 'OBJECT')
|
||||
WHERE referenced_id = OBJECT_ID('dbo.Tra_TiposDocumento')
|
||||
AND (referenced_minor_name = 'EsCliente' OR is_select_all = 1)
|
||||
)
|
||||
THROW 51000, 'Todavía hay una dependencia de EsCliente en el catálogo.', 1;
|
||||
DELETE FROM @Modulos WHERE Nombre = @Modulo;
|
||||
END;
|
||||
|
||||
EXEC sys.sp_executesql N'
|
||||
IF EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM dbo.Tra_TiposTramiteDocumento AS R
|
||||
INNER JOIN dbo.Tra_TiposDocumento AS D ON D.CveTipoDocumento = R.CveTipoDocumento
|
||||
WHERE R.EsCliente <> D.EsCliente
|
||||
)
|
||||
THROW 51000, ''Los responsables no coinciden con el origen durante la migración.'', 1;
|
||||
|
||||
DECLARE @Restriccion sysname;
|
||||
SELECT @Restriccion = name
|
||||
FROM sys.default_constraints
|
||||
WHERE parent_object_id = OBJECT_ID(''dbo.Tra_TiposDocumento'')
|
||||
AND parent_column_id = COLUMNPROPERTY(parent_object_id, ''EsCliente'', ''ColumnId'');
|
||||
IF @Restriccion IS NOT NULL
|
||||
BEGIN
|
||||
DECLARE @Sql nvarchar(max) =
|
||||
N''ALTER TABLE dbo.Tra_TiposDocumento DROP CONSTRAINT '' + QUOTENAME(@Restriccion);
|
||||
EXEC sys.sp_executesql @Sql;
|
||||
END;
|
||||
ALTER TABLE dbo.Tra_TiposDocumento DROP COLUMN EsCliente;';
|
||||
END;
|
||||
|
||||
COMMIT TRANSACTION;
|
||||
SELECT @Fase AS FaseCompletada;
|
||||
END TRY
|
||||
BEGIN CATCH
|
||||
IF XACT_STATE() <> 0
|
||||
ROLLBACK TRANSACTION;
|
||||
THROW;
|
||||
END CATCH;
|
||||
1282
Migracion_Fraccionamientos_EtapasAvanceGIS_20260814.sql
Normal file
1282
Migracion_Fraccionamientos_EtapasAvanceGIS_20260814.sql
Normal file
File diff suppressed because it is too large
Load Diff
142
Migracion_NombresDocumentos_20261003.csv
Normal file
142
Migracion_NombresDocumentos_20261003.csv
Normal file
@@ -0,0 +1,142 @@
|
||||
"CveDocumentoSolicitud","CveFraccionamientoEtapa","CveTipoDocumento","EsActivo","NombreArchivo","NombreAnterior","RutaAnterior","NombreNuevo","RutaNueva","TamanoBytes","SHA256"
|
||||
"3","1022","1040","True","VL103M user manual 20230921.pdf","doc-1022-1040-b6e404e6e7dc4597860185076b3289dd.bin","Clientes/1006/Etapas/1022/doc-1022-1040-b6e404e6e7dc4597860185076b3289dd.bin","doc-1022-1040-b6e404e6e7dc4597860185076b3289dd-VL103M user manual 20230921.pdf","Clientes/1006/Etapas/1022/doc-1022-1040-b6e404e6e7dc4597860185076b3289dd-VL103M user manual 20230921.pdf","1146632","3C097C53A81FE7E60ECFB07A9FBD2163E8DB5DE7444050E0EC20ADAFCB7FBA3F"
|
||||
"4","1022","1045","True","BORRADOR EDISA.docx","doc-1022-1045-b8d0648d970b4cababc65f30c58b1ccb.bin","Clientes/1006/Etapas/1022/doc-1022-1045-b8d0648d970b4cababc65f30c58b1ccb.bin","doc-1022-1045-b8d0648d970b4cababc65f30c58b1ccb-BORRADOR EDISA.docx","Clientes/1006/Etapas/1022/doc-1022-1045-b8d0648d970b4cababc65f30c58b1ccb-BORRADOR EDISA.docx","16889","3074B0379B55A18B47EB06A4BAE47985B155CAC0583DE78B651988C7599A3C77"
|
||||
"5","1022","1046","True","ACTIVIDADES LETYYYY.docx","doc-1022-1046-c3b1e27e553449a7b5a4545222b63b0b.bin","Clientes/1006/Etapas/1022/doc-1022-1046-c3b1e27e553449a7b5a4545222b63b0b.bin","doc-1022-1046-c3b1e27e553449a7b5a4545222b63b0b-ACTIVIDADES LETYYYY.docx","Clientes/1006/Etapas/1022/doc-1022-1046-c3b1e27e553449a7b5a4545222b63b0b-ACTIVIDADES LETYYYY.docx","19908","8A139074FE52426D3FE0DCE395CCEDB031A03FB33462E2C989F695F14481C11D"
|
||||
"6","1022","1051","True","Recibo-Ago (1).pdf","doc-1022-1051-b0ea49a4b15241e5a6010a8b890b9791.bin","Clientes/1006/Etapas/1022/doc-1022-1051-b0ea49a4b15241e5a6010a8b890b9791.bin","doc-1022-1051-b0ea49a4b15241e5a6010a8b890b9791-Recibo-Ago (1).pdf","Clientes/1006/Etapas/1022/doc-1022-1051-b0ea49a4b15241e5a6010a8b890b9791-Recibo-Ago (1).pdf","814619","86017314865C2064DDBA15CBC1318643BC2F2E0C254A3D274CEE3C17B81E9094"
|
||||
"7","1022","1057","True","65007.jpeg","doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422.bin","Clientes/1006/Etapas/1022/doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422.bin","doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422-65007.jpeg","Clientes/1006/Etapas/1022/doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422-65007.jpeg","128129","0F80A31813107978A32D13201884611FB35347E738BFDC4538D1ECE97FAD2081"
|
||||
"8","1022","1053","True","Etapa1_10_lotes.gis","doc-1022-1053-53864978166e40c2b3c7e06dd7c6333c.bin","Clientes/1006/Etapas/1022/doc-1022-1053-53864978166e40c2b3c7e06dd7c6333c.bin","doc-1022-1053-53864978166e40c2b3c7e06dd7c6333c-Etapa1_10_lotes.gis","Clientes/1006/Etapas/1022/doc-1022-1053-53864978166e40c2b3c7e06dd7c6333c-Etapa1_10_lotes.gis","8256","5271A9F0C57CF648101CFCDC4CB6635CB28FA2C637DECD4C60195751E8959EEF"
|
||||
"9","1024","1034","False","09_Acta_Constitutiva_empresa.pdf","doc-1024-1034-3212891ee8f847aba1e83b01fc27ef42.bin","Clientes/4/Etapas/1024/doc-1024-1034-3212891ee8f847aba1e83b01fc27ef42.bin","doc-1024-1034-3212891ee8f847aba1e83b01fc27ef42-09_Acta_Constitutiva_empresa.pdf","Clientes/4/Etapas/1024/doc-1024-1034-3212891ee8f847aba1e83b01fc27ef42-09_Acta_Constitutiva_empresa.pdf","44281","4461F94E3DCBE9BCF0FB45C099E3F87B969AC59BAB62E6CD7EA97133A5CD33A3"
|
||||
"10","1024","1053","False","02_Copia_escrituras.pdf","doc-1024-1053-4026eac60fde4d57aca2ed30325c7aa7.bin","Clientes/4/Etapas/1024/doc-1024-1053-4026eac60fde4d57aca2ed30325c7aa7.bin","doc-1024-1053-4026eac60fde4d57aca2ed30325c7aa7-02_Copia_escrituras.pdf","Clientes/4/Etapas/1024/doc-1024-1053-4026eac60fde4d57aca2ed30325c7aa7-02_Copia_escrituras.pdf","44497","DE63A4F755D5199D1EB98A024C03627B1AB698403481CE8C6BC5D92E7E8746CC"
|
||||
"11","1024","1046","False","04_Dictamen_uso_suelo.pdf","doc-1024-1046-168182c76cb843cbb3a2aff986bff057.bin","Clientes/4/Etapas/1024/doc-1024-1046-168182c76cb843cbb3a2aff986bff057.bin","doc-1024-1046-168182c76cb843cbb3a2aff986bff057-04_Dictamen_uso_suelo.pdf","Clientes/4/Etapas/1024/doc-1024-1046-168182c76cb843cbb3a2aff986bff057-04_Dictamen_uso_suelo.pdf","44359","AE0069AEC8DDBE09071581126BEA3272BC37A4D758A764BF8A05D58755F4BC28"
|
||||
"12","1024","1069","False","05_Carta_poder_representante_legal.pdf","doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8.bin","Clientes/4/Etapas/1024/doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8.bin","doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8-05_Carta_poder_representante_legal.pdf","Clientes/4/Etapas/1024/doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8-05_Carta_poder_representante_legal.pdf","44650","A40E9C9A5FBA9E40B133993051C39288D8A498CC71EBCFB354C2C9D73FA064F1"
|
||||
"13","1024","1040","False","06_Constancia_no_adeudo_tesoreria.pdf","doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971.bin","Clientes/4/Etapas/1024/doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971.bin","doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971-06_Constancia_no_adeudo_tesoreria.pdf","Clientes/4/Etapas/1024/doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971-06_Constancia_no_adeudo_tesoreria.pdf","44515","4E2ADB80E976362F5A48D6D75FB421F193E2FB30AEE76F46132DB26BAD5CBF0F"
|
||||
"14","1024","1079","False","08_Constancia_no_adeudo_Agua_Hermosillo.pdf","doc-1024-1079-b838d1c6a81948a0ad275d93dca3b0f5.bin","Clientes/4/Etapas/1024/doc-1024-1079-b838d1c6a81948a0ad275d93dca3b0f5.bin","doc-1024-1079-b838d1c6a81948a0ad275d93dca3b0f5-08_Constancia_no_adeudo_Agua_Hermosillo.pdf","Clientes/4/Etapas/1024/doc-1024-1079-b838d1c6a81948a0ad275d93dca3b0f5-08_Constancia_no_adeudo_Agua_Hermosillo.pdf","44351","04CD6B0F2739837F7BD711819D031FB73BACD7675B752906EFE283F46A7C3006"
|
||||
"15","1024","1034","False","09_Acta_Constitutiva_empresa.pdf","doc-1024-1034-703001ed04cd4768805ea52d87c496ba.bin","Clientes/4/Etapas/1024/doc-1024-1034-703001ed04cd4768805ea52d87c496ba.bin","doc-1024-1034-703001ed04cd4768805ea52d87c496ba-09_Acta_Constitutiva_empresa.pdf","Clientes/4/Etapas/1024/doc-1024-1034-703001ed04cd4768805ea52d87c496ba-09_Acta_Constitutiva_empresa.pdf","44281","4461F94E3DCBE9BCF0FB45C099E3F87B969AC59BAB62E6CD7EA97133A5CD33A3"
|
||||
"16","1024","1037","False","10_Comprobante_domicilio.pdf","doc-1024-1037-251daa4398b44a56bb95dcd11326c096.bin","Clientes/4/Etapas/1024/doc-1024-1037-251daa4398b44a56bb95dcd11326c096.bin","doc-1024-1037-251daa4398b44a56bb95dcd11326c096-10_Comprobante_domicilio.pdf","Clientes/4/Etapas/1024/doc-1024-1037-251daa4398b44a56bb95dcd11326c096-10_Comprobante_domicilio.pdf","44184","0222D8B303F2C0DA21863CA16BC160F2564963C14238009847C52C10526917D0"
|
||||
"17","1024","1053","True","02_Copia_escrituras.pdf","doc-1024-1053-393eb44b58d24c128d4b5cc5090cc117.bin","Clientes/4/Etapas/1024/doc-1024-1053-393eb44b58d24c128d4b5cc5090cc117.bin","doc-1024-1053-393eb44b58d24c128d4b5cc5090cc117-02_Copia_escrituras.pdf","Clientes/4/Etapas/1024/doc-1024-1053-393eb44b58d24c128d4b5cc5090cc117-02_Copia_escrituras.pdf","44497","DE63A4F755D5199D1EB98A024C03627B1AB698403481CE8C6BC5D92E7E8746CC"
|
||||
"18","1024","1046","True","04_Dictamen_uso_suelo.pdf","doc-1024-1046-746dbd30e6f343338537a9e5e0b3ee59.bin","Clientes/4/Etapas/1024/doc-1024-1046-746dbd30e6f343338537a9e5e0b3ee59.bin","doc-1024-1046-746dbd30e6f343338537a9e5e0b3ee59-04_Dictamen_uso_suelo.pdf","Clientes/4/Etapas/1024/doc-1024-1046-746dbd30e6f343338537a9e5e0b3ee59-04_Dictamen_uso_suelo.pdf","44359","AE0069AEC8DDBE09071581126BEA3272BC37A4D758A764BF8A05D58755F4BC28"
|
||||
"19","1024","1069","True","05_Carta_poder_representante_legal.pdf","doc-1024-1069-a126b490c1e24edbab7b044bf0549e77.bin","Clientes/4/Etapas/1024/doc-1024-1069-a126b490c1e24edbab7b044bf0549e77.bin","doc-1024-1069-a126b490c1e24edbab7b044bf0549e77-05_Carta_poder_representante_legal.pdf","Clientes/4/Etapas/1024/doc-1024-1069-a126b490c1e24edbab7b044bf0549e77-05_Carta_poder_representante_legal.pdf","44650","A40E9C9A5FBA9E40B133993051C39288D8A498CC71EBCFB354C2C9D73FA064F1"
|
||||
"20","1024","1040","True","06_Constancia_no_adeudo_tesoreria.pdf","doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d.bin","Clientes/4/Etapas/1024/doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d.bin","doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d-06_Constancia_no_adeudo_tesoreria.pdf","Clientes/4/Etapas/1024/doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d-06_Constancia_no_adeudo_tesoreria.pdf","44515","4E2ADB80E976362F5A48D6D75FB421F193E2FB30AEE76F46132DB26BAD5CBF0F"
|
||||
"21","1024","1079","True","08_Constancia_no_adeudo_Agua_Hermosillo.pdf","doc-1024-1079-b25d1e7c30b0443cb66423c56c45c46c.bin","Clientes/4/Etapas/1024/doc-1024-1079-b25d1e7c30b0443cb66423c56c45c46c.bin","doc-1024-1079-b25d1e7c30b0443cb66423c56c45c46c-08_Constancia_no_adeudo_Agua_Hermosillo.pdf","Clientes/4/Etapas/1024/doc-1024-1079-b25d1e7c30b0443cb66423c56c45c46c-08_Constancia_no_adeudo_Agua_Hermosillo.pdf","44351","04CD6B0F2739837F7BD711819D031FB73BACD7675B752906EFE283F46A7C3006"
|
||||
"22","1024","1034","True","09_Acta_Constitutiva_empresa.pdf","doc-1024-1034-1f93d872f1c549988ab7b6f3f9b574f5.bin","Clientes/4/Etapas/1024/doc-1024-1034-1f93d872f1c549988ab7b6f3f9b574f5.bin","doc-1024-1034-1f93d872f1c549988ab7b6f3f9b574f5-09_Acta_Constitutiva_empresa.pdf","Clientes/4/Etapas/1024/doc-1024-1034-1f93d872f1c549988ab7b6f3f9b574f5-09_Acta_Constitutiva_empresa.pdf","44281","4461F94E3DCBE9BCF0FB45C099E3F87B969AC59BAB62E6CD7EA97133A5CD33A3"
|
||||
"23","1024","1037","True","10_Comprobante_domicilio.pdf","doc-1024-1037-8ab956638dc442e49632d23459f4cb2f.bin","Clientes/4/Etapas/1024/doc-1024-1037-8ab956638dc442e49632d23459f4cb2f.bin","doc-1024-1037-8ab956638dc442e49632d23459f4cb2f-10_Comprobante_domicilio.pdf","Clientes/4/Etapas/1024/doc-1024-1037-8ab956638dc442e49632d23459f4cb2f-10_Comprobante_domicilio.pdf","44184","0222D8B303F2C0DA21863CA16BC160F2564963C14238009847C52C10526917D0"
|
||||
"24","1024","1082","False","11_Cedula_RFC.pdf","doc-1024-1082-02f16c7d84fb4781ae5f7e5280422788.bin","Clientes/4/Etapas/1024/doc-1024-1082-02f16c7d84fb4781ae5f7e5280422788.bin","doc-1024-1082-02f16c7d84fb4781ae5f7e5280422788-11_Cedula_RFC.pdf","Clientes/4/Etapas/1024/doc-1024-1082-02f16c7d84fb4781ae5f7e5280422788-11_Cedula_RFC.pdf","44347","75D97258546FDD49567B605CA676CD5DF97F539A7134F9A977BE14D9FA48F912"
|
||||
"25","1024","1080","False","12_Autorizaciones_CIDUE.pdf","doc-1024-1080-2337d1e8ab91435891a9332b5fd58262.bin","Clientes/4/Etapas/1024/doc-1024-1080-2337d1e8ab91435891a9332b5fd58262.bin","doc-1024-1080-2337d1e8ab91435891a9332b5fd58262-12_Autorizaciones_CIDUE.pdf","Clientes/4/Etapas/1024/doc-1024-1080-2337d1e8ab91435891a9332b5fd58262-12_Autorizaciones_CIDUE.pdf","44232","B68667D2A258EC28F3445017A42014A1CDEC4AD6686AE5FB4AD15B275B1D4E7E"
|
||||
"26","1024","1045","False","Croquis.png","doc-1024-1045-d447e83e74d14977957ca05ed2465c28.bin","Clientes/4/Etapas/1024/doc-1024-1045-d447e83e74d14977957ca05ed2465c28.bin","doc-1024-1045-d447e83e74d14977957ca05ed2465c28-Croquis.png","Clientes/4/Etapas/1024/doc-1024-1045-d447e83e74d14977957ca05ed2465c28-Croquis.png","984403","3A507595006CDBB8A59830E0B9634D11DCB85A4CBED1F2A5F35023043947E632"
|
||||
"27","1024","1057","False","Identificación Oficial.jpg","doc-1024-1057-a00c7eb989a64e47baec43163755e90e.bin","Clientes/4/Etapas/1024/doc-1024-1057-a00c7eb989a64e47baec43163755e90e.bin","doc-1024-1057-a00c7eb989a64e47baec43163755e90e-Identificación Oficial.jpg","Clientes/4/Etapas/1024/doc-1024-1057-a00c7eb989a64e47baec43163755e90e-Identificación Oficial.jpg","55724","A5915340A4600EE8988CEDF4080E6828ED42FCD2DE432788102A328977A83076"
|
||||
"28","1024","1082","True","11_Cedula_RFC.pdf","doc-1024-1082-d9c8ba3f888249ae918d7dffbbf6764c.bin","Clientes/4/Etapas/1024/doc-1024-1082-d9c8ba3f888249ae918d7dffbbf6764c.bin","doc-1024-1082-d9c8ba3f888249ae918d7dffbbf6764c-11_Cedula_RFC.pdf","Clientes/4/Etapas/1024/doc-1024-1082-d9c8ba3f888249ae918d7dffbbf6764c-11_Cedula_RFC.pdf","44347","75D97258546FDD49567B605CA676CD5DF97F539A7134F9A977BE14D9FA48F912"
|
||||
"29","1024","1080","True","12_Autorizaciones_CIDUE.pdf","doc-1024-1080-f691bac55afb4c6084d21a7d2ab8f3a2.bin","Clientes/4/Etapas/1024/doc-1024-1080-f691bac55afb4c6084d21a7d2ab8f3a2.bin","doc-1024-1080-f691bac55afb4c6084d21a7d2ab8f3a2-12_Autorizaciones_CIDUE.pdf","Clientes/4/Etapas/1024/doc-1024-1080-f691bac55afb4c6084d21a7d2ab8f3a2-12_Autorizaciones_CIDUE.pdf","44232","B68667D2A258EC28F3445017A42014A1CDEC4AD6686AE5FB4AD15B275B1D4E7E"
|
||||
"30","1024","1045","True","Croquis.png","doc-1024-1045-61379c693d6241898e7cf30cffd8658a.bin","Clientes/4/Etapas/1024/doc-1024-1045-61379c693d6241898e7cf30cffd8658a.bin","doc-1024-1045-61379c693d6241898e7cf30cffd8658a-Croquis.png","Clientes/4/Etapas/1024/doc-1024-1045-61379c693d6241898e7cf30cffd8658a-Croquis.png","984403","3A507595006CDBB8A59830E0B9634D11DCB85A4CBED1F2A5F35023043947E632"
|
||||
"31","1024","1057","True","Identificación Oficial.jpg","doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3.bin","Clientes/4/Etapas/1024/doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3.bin","doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3-Identificación Oficial.jpg","Clientes/4/Etapas/1024/doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3-Identificación Oficial.jpg","55724","A5915340A4600EE8988CEDF4080E6828ED42FCD2DE432788102A328977A83076"
|
||||
"32","1024","1051","True","01_Oficio_solicitud_obras_necesarias.pdf","doc-1024-1051-4037762f536045d59be5d818e2de6481.bin","Clientes/4/Etapas/1024/doc-1024-1051-4037762f536045d59be5d818e2de6481.bin","doc-1024-1051-4037762f536045d59be5d818e2de6481-01_Oficio_solicitud_obras_necesarias.pdf","Clientes/4/Etapas/1024/doc-1024-1051-4037762f536045d59be5d818e2de6481-01_Oficio_solicitud_obras_necesarias.pdf","44555","DDBDF6829D3A8F8587E42A768C32EF08AEE89848001C4E9B19EEE24480B75AB8"
|
||||
"33","1028","1053","True","02_Copia_escrituras.pdf","doc-1028-1053-c2b0275d99924d3784d7aec44c0b8beb.bin","Clientes/4/Etapas/1028/doc-1028-1053-c2b0275d99924d3784d7aec44c0b8beb.bin","doc-1028-1053-c2b0275d99924d3784d7aec44c0b8beb-02_Copia_escrituras.pdf","Clientes/4/Etapas/1028/doc-1028-1053-c2b0275d99924d3784d7aec44c0b8beb-02_Copia_escrituras.pdf","44497","DE63A4F755D5199D1EB98A024C03627B1AB698403481CE8C6BC5D92E7E8746CC"
|
||||
"34","1028","1046","True","04_Dictamen_uso_suelo.pdf","doc-1028-1046-c98e40e90f3b41cdb810222241f3fc9a.bin","Clientes/4/Etapas/1028/doc-1028-1046-c98e40e90f3b41cdb810222241f3fc9a.bin","doc-1028-1046-c98e40e90f3b41cdb810222241f3fc9a-04_Dictamen_uso_suelo.pdf","Clientes/4/Etapas/1028/doc-1028-1046-c98e40e90f3b41cdb810222241f3fc9a-04_Dictamen_uso_suelo.pdf","44359","AE0069AEC8DDBE09071581126BEA3272BC37A4D758A764BF8A05D58755F4BC28"
|
||||
"35","1028","1069","True","05_Carta_poder_representante_legal.pdf","doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713.bin","Clientes/4/Etapas/1028/doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713.bin","doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713-05_Carta_poder_representante_legal.pdf","Clientes/4/Etapas/1028/doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713-05_Carta_poder_representante_legal.pdf","44650","A40E9C9A5FBA9E40B133993051C39288D8A498CC71EBCFB354C2C9D73FA064F1"
|
||||
"36","1028","1040","True","06_Constancia_no_adeudo_tesoreria.pdf","doc-1028-1040-9bc673275f414c8d8d320e9bbf698072.bin","Clientes/4/Etapas/1028/doc-1028-1040-9bc673275f414c8d8d320e9bbf698072.bin","doc-1028-1040-9bc673275f414c8d8d320e9bbf698072-06_Constancia_no_adeudo_tesoreria.pdf","Clientes/4/Etapas/1028/doc-1028-1040-9bc673275f414c8d8d320e9bbf698072-06_Constancia_no_adeudo_tesoreria.pdf","44515","4E2ADB80E976362F5A48D6D75FB421F193E2FB30AEE76F46132DB26BAD5CBF0F"
|
||||
"37","1028","1079","True","08_Constancia_no_adeudo_Agua_Hermosillo.pdf","doc-1028-1079-9be2156047bc4828b3e43b67fe3f6733.bin","Clientes/4/Etapas/1028/doc-1028-1079-9be2156047bc4828b3e43b67fe3f6733.bin","doc-1028-1079-9be2156047bc4828b3e43b67fe3f6733-08_Constancia_no_adeudo_Agua_Hermosillo.pdf","Clientes/4/Etapas/1028/doc-1028-1079-9be2156047bc4828b3e43b67fe3f6733-08_Constancia_no_adeudo_Agua_Hermosillo.pdf","44351","04CD6B0F2739837F7BD711819D031FB73BACD7675B752906EFE283F46A7C3006"
|
||||
"38","1028","1034","True","09_Acta_Constitutiva_empresa.pdf","doc-1028-1034-583b7009cab246ed8287200ce7082495.bin","Clientes/4/Etapas/1028/doc-1028-1034-583b7009cab246ed8287200ce7082495.bin","doc-1028-1034-583b7009cab246ed8287200ce7082495-09_Acta_Constitutiva_empresa.pdf","Clientes/4/Etapas/1028/doc-1028-1034-583b7009cab246ed8287200ce7082495-09_Acta_Constitutiva_empresa.pdf","44281","4461F94E3DCBE9BCF0FB45C099E3F87B969AC59BAB62E6CD7EA97133A5CD33A3"
|
||||
"39","1028","1037","True","10_Comprobante_domicilio.pdf","doc-1028-1037-06adb9de68924cebafe0052e68b83915.bin","Clientes/4/Etapas/1028/doc-1028-1037-06adb9de68924cebafe0052e68b83915.bin","doc-1028-1037-06adb9de68924cebafe0052e68b83915-10_Comprobante_domicilio.pdf","Clientes/4/Etapas/1028/doc-1028-1037-06adb9de68924cebafe0052e68b83915-10_Comprobante_domicilio.pdf","44184","0222D8B303F2C0DA21863CA16BC160F2564963C14238009847C52C10526917D0"
|
||||
"40","1028","1082","True","11_Cedula_RFC.pdf","doc-1028-1082-a21ee3513b5a4fe3b1f5f8f237ddc338.bin","Clientes/4/Etapas/1028/doc-1028-1082-a21ee3513b5a4fe3b1f5f8f237ddc338.bin","doc-1028-1082-a21ee3513b5a4fe3b1f5f8f237ddc338-11_Cedula_RFC.pdf","Clientes/4/Etapas/1028/doc-1028-1082-a21ee3513b5a4fe3b1f5f8f237ddc338-11_Cedula_RFC.pdf","44347","75D97258546FDD49567B605CA676CD5DF97F539A7134F9A977BE14D9FA48F912"
|
||||
"41","1028","1080","True","12_Autorizaciones_CIDUE.pdf","doc-1028-1080-2fb84cc84de24223a9fcdeaf1fcd2470.bin","Clientes/4/Etapas/1028/doc-1028-1080-2fb84cc84de24223a9fcdeaf1fcd2470.bin","doc-1028-1080-2fb84cc84de24223a9fcdeaf1fcd2470-12_Autorizaciones_CIDUE.pdf","Clientes/4/Etapas/1028/doc-1028-1080-2fb84cc84de24223a9fcdeaf1fcd2470-12_Autorizaciones_CIDUE.pdf","44232","B68667D2A258EC28F3445017A42014A1CDEC4AD6686AE5FB4AD15B275B1D4E7E"
|
||||
"42","1028","1045","True","Croquis.png","doc-1028-1045-7f4784759eaf43f09e2a6433309008df.bin","Clientes/4/Etapas/1028/doc-1028-1045-7f4784759eaf43f09e2a6433309008df.bin","doc-1028-1045-7f4784759eaf43f09e2a6433309008df-Croquis.png","Clientes/4/Etapas/1028/doc-1028-1045-7f4784759eaf43f09e2a6433309008df-Croquis.png","984403","3A507595006CDBB8A59830E0B9634D11DCB85A4CBED1F2A5F35023043947E632"
|
||||
"43","1028","1057","True","Identificación Oficial.jpg","doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c.bin","Clientes/4/Etapas/1028/doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c.bin","doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c-Identificación Oficial.jpg","Clientes/4/Etapas/1028/doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c-Identificación Oficial.jpg","55724","A5915340A4600EE8988CEDF4080E6828ED42FCD2DE432788102A328977A83076"
|
||||
"44","1028","1051","True","01_Oficio_solicitud_obras_necesarias.pdf","doc-1028-1051-90d0c12832f9428abb0ac645be0c7156.bin","Clientes/4/Etapas/1028/doc-1028-1051-90d0c12832f9428abb0ac645be0c7156.bin","doc-1028-1051-90d0c12832f9428abb0ac645be0c7156-01_Oficio_solicitud_obras_necesarias.pdf","Clientes/4/Etapas/1028/doc-1028-1051-90d0c12832f9428abb0ac645be0c7156-01_Oficio_solicitud_obras_necesarias.pdf","44555","DDBDF6829D3A8F8587E42A768C32EF08AEE89848001C4E9B19EEE24480B75AB8"
|
||||
"45","1022","1040","False","VL103M user manual 20230921.pdf","doc-1022-1040-b6e404e6e7dc4597860185076b3289dd.bin","Clientes/1006/Etapas/1022/doc-1022-1040-b6e404e6e7dc4597860185076b3289dd.bin","doc-1022-1040-b6e404e6e7dc4597860185076b3289dd-VL103M user manual 20230921.pdf","Clientes/1006/Etapas/1022/doc-1022-1040-b6e404e6e7dc4597860185076b3289dd-VL103M user manual 20230921.pdf","1146632","3C097C53A81FE7E60ECFB07A9FBD2163E8DB5DE7444050E0EC20ADAFCB7FBA3F"
|
||||
"46","1022","1040","False","VL103M user manual 20230921.pdf","doc-1022-1040-b6e404e6e7dc4597860185076b3289dd.bin","Clientes/1006/Etapas/1022/doc-1022-1040-b6e404e6e7dc4597860185076b3289dd.bin","doc-1022-1040-b6e404e6e7dc4597860185076b3289dd-VL103M user manual 20230921.pdf","Clientes/1006/Etapas/1022/doc-1022-1040-b6e404e6e7dc4597860185076b3289dd-VL103M user manual 20230921.pdf","1146632","3C097C53A81FE7E60ECFB07A9FBD2163E8DB5DE7444050E0EC20ADAFCB7FBA3F"
|
||||
"47","1022","1040","False","VL103M user manual 20230921.pdf","doc-1022-1040-b6e404e6e7dc4597860185076b3289dd.bin","Clientes/1006/Etapas/1022/doc-1022-1040-b6e404e6e7dc4597860185076b3289dd.bin","doc-1022-1040-b6e404e6e7dc4597860185076b3289dd-VL103M user manual 20230921.pdf","Clientes/1006/Etapas/1022/doc-1022-1040-b6e404e6e7dc4597860185076b3289dd-VL103M user manual 20230921.pdf","1146632","3C097C53A81FE7E60ECFB07A9FBD2163E8DB5DE7444050E0EC20ADAFCB7FBA3F"
|
||||
"48","1022","1040","False","VL103M user manual 20230921.pdf","doc-1022-1040-b6e404e6e7dc4597860185076b3289dd.bin","Clientes/1006/Etapas/1022/doc-1022-1040-b6e404e6e7dc4597860185076b3289dd.bin","doc-1022-1040-b6e404e6e7dc4597860185076b3289dd-VL103M user manual 20230921.pdf","Clientes/1006/Etapas/1022/doc-1022-1040-b6e404e6e7dc4597860185076b3289dd-VL103M user manual 20230921.pdf","1146632","3C097C53A81FE7E60ECFB07A9FBD2163E8DB5DE7444050E0EC20ADAFCB7FBA3F"
|
||||
"49","1022","1040","False","VL103M user manual 20230921.pdf","doc-1022-1040-b6e404e6e7dc4597860185076b3289dd.bin","Clientes/1006/Etapas/1022/doc-1022-1040-b6e404e6e7dc4597860185076b3289dd.bin","doc-1022-1040-b6e404e6e7dc4597860185076b3289dd-VL103M user manual 20230921.pdf","Clientes/1006/Etapas/1022/doc-1022-1040-b6e404e6e7dc4597860185076b3289dd-VL103M user manual 20230921.pdf","1146632","3C097C53A81FE7E60ECFB07A9FBD2163E8DB5DE7444050E0EC20ADAFCB7FBA3F"
|
||||
"50","1022","1040","False","VL103M user manual 20230921.pdf","doc-1022-1040-b6e404e6e7dc4597860185076b3289dd.bin","Clientes/1006/Etapas/1022/doc-1022-1040-b6e404e6e7dc4597860185076b3289dd.bin","doc-1022-1040-b6e404e6e7dc4597860185076b3289dd-VL103M user manual 20230921.pdf","Clientes/1006/Etapas/1022/doc-1022-1040-b6e404e6e7dc4597860185076b3289dd-VL103M user manual 20230921.pdf","1146632","3C097C53A81FE7E60ECFB07A9FBD2163E8DB5DE7444050E0EC20ADAFCB7FBA3F"
|
||||
"51","1022","1045","False","BORRADOR EDISA.docx","doc-1022-1045-b8d0648d970b4cababc65f30c58b1ccb.bin","Clientes/1006/Etapas/1022/doc-1022-1045-b8d0648d970b4cababc65f30c58b1ccb.bin","doc-1022-1045-b8d0648d970b4cababc65f30c58b1ccb-BORRADOR EDISA.docx","Clientes/1006/Etapas/1022/doc-1022-1045-b8d0648d970b4cababc65f30c58b1ccb-BORRADOR EDISA.docx","16889","3074B0379B55A18B47EB06A4BAE47985B155CAC0583DE78B651988C7599A3C77"
|
||||
"52","1022","1057","False","65007.jpeg","doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422.bin","Clientes/1006/Etapas/1022/doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422.bin","doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422-65007.jpeg","Clientes/1006/Etapas/1022/doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422-65007.jpeg","128129","0F80A31813107978A32D13201884611FB35347E738BFDC4538D1ECE97FAD2081"
|
||||
"53","1022","1057","False","65007.jpeg","doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422.bin","Clientes/1006/Etapas/1022/doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422.bin","doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422-65007.jpeg","Clientes/1006/Etapas/1022/doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422-65007.jpeg","128129","0F80A31813107978A32D13201884611FB35347E738BFDC4538D1ECE97FAD2081"
|
||||
"54","1022","1057","False","65007.jpeg","doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422.bin","Clientes/1006/Etapas/1022/doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422.bin","doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422-65007.jpeg","Clientes/1006/Etapas/1022/doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422-65007.jpeg","128129","0F80A31813107978A32D13201884611FB35347E738BFDC4538D1ECE97FAD2081"
|
||||
"55","1022","1057","False","65007.jpeg","doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422.bin","Clientes/1006/Etapas/1022/doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422.bin","doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422-65007.jpeg","Clientes/1006/Etapas/1022/doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422-65007.jpeg","128129","0F80A31813107978A32D13201884611FB35347E738BFDC4538D1ECE97FAD2081"
|
||||
"56","1022","1057","False","65007.jpeg","doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422.bin","Clientes/1006/Etapas/1022/doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422.bin","doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422-65007.jpeg","Clientes/1006/Etapas/1022/doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422-65007.jpeg","128129","0F80A31813107978A32D13201884611FB35347E738BFDC4538D1ECE97FAD2081"
|
||||
"57","1022","1057","False","65007.jpeg","doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422.bin","Clientes/1006/Etapas/1022/doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422.bin","doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422-65007.jpeg","Clientes/1006/Etapas/1022/doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422-65007.jpeg","128129","0F80A31813107978A32D13201884611FB35347E738BFDC4538D1ECE97FAD2081"
|
||||
"58","1022","1057","False","65007.jpeg","doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422.bin","Clientes/1006/Etapas/1022/doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422.bin","doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422-65007.jpeg","Clientes/1006/Etapas/1022/doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422-65007.jpeg","128129","0F80A31813107978A32D13201884611FB35347E738BFDC4538D1ECE97FAD2081"
|
||||
"59","1024","1034","False","09_Acta_Constitutiva_empresa.pdf","doc-1024-1034-3212891ee8f847aba1e83b01fc27ef42.bin","Clientes/4/Etapas/1024/doc-1024-1034-3212891ee8f847aba1e83b01fc27ef42.bin","doc-1024-1034-3212891ee8f847aba1e83b01fc27ef42-09_Acta_Constitutiva_empresa.pdf","Clientes/4/Etapas/1024/doc-1024-1034-3212891ee8f847aba1e83b01fc27ef42-09_Acta_Constitutiva_empresa.pdf","44281","4461F94E3DCBE9BCF0FB45C099E3F87B969AC59BAB62E6CD7EA97133A5CD33A3"
|
||||
"60","1024","1034","False","09_Acta_Constitutiva_empresa.pdf","doc-1024-1034-3212891ee8f847aba1e83b01fc27ef42.bin","Clientes/4/Etapas/1024/doc-1024-1034-3212891ee8f847aba1e83b01fc27ef42.bin","doc-1024-1034-3212891ee8f847aba1e83b01fc27ef42-09_Acta_Constitutiva_empresa.pdf","Clientes/4/Etapas/1024/doc-1024-1034-3212891ee8f847aba1e83b01fc27ef42-09_Acta_Constitutiva_empresa.pdf","44281","4461F94E3DCBE9BCF0FB45C099E3F87B969AC59BAB62E6CD7EA97133A5CD33A3"
|
||||
"61","1024","1034","False","09_Acta_Constitutiva_empresa.pdf","doc-1024-1034-3212891ee8f847aba1e83b01fc27ef42.bin","Clientes/4/Etapas/1024/doc-1024-1034-3212891ee8f847aba1e83b01fc27ef42.bin","doc-1024-1034-3212891ee8f847aba1e83b01fc27ef42-09_Acta_Constitutiva_empresa.pdf","Clientes/4/Etapas/1024/doc-1024-1034-3212891ee8f847aba1e83b01fc27ef42-09_Acta_Constitutiva_empresa.pdf","44281","4461F94E3DCBE9BCF0FB45C099E3F87B969AC59BAB62E6CD7EA97133A5CD33A3"
|
||||
"62","1024","1034","False","09_Acta_Constitutiva_empresa.pdf","doc-1024-1034-3212891ee8f847aba1e83b01fc27ef42.bin","Clientes/4/Etapas/1024/doc-1024-1034-3212891ee8f847aba1e83b01fc27ef42.bin","doc-1024-1034-3212891ee8f847aba1e83b01fc27ef42-09_Acta_Constitutiva_empresa.pdf","Clientes/4/Etapas/1024/doc-1024-1034-3212891ee8f847aba1e83b01fc27ef42-09_Acta_Constitutiva_empresa.pdf","44281","4461F94E3DCBE9BCF0FB45C099E3F87B969AC59BAB62E6CD7EA97133A5CD33A3"
|
||||
"63","1024","1069","False","05_Carta_poder_representante_legal.pdf","doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8.bin","Clientes/4/Etapas/1024/doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8.bin","doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8-05_Carta_poder_representante_legal.pdf","Clientes/4/Etapas/1024/doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8-05_Carta_poder_representante_legal.pdf","44650","A40E9C9A5FBA9E40B133993051C39288D8A498CC71EBCFB354C2C9D73FA064F1"
|
||||
"64","1024","1069","False","05_Carta_poder_representante_legal.pdf","doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8.bin","Clientes/4/Etapas/1024/doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8.bin","doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8-05_Carta_poder_representante_legal.pdf","Clientes/4/Etapas/1024/doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8-05_Carta_poder_representante_legal.pdf","44650","A40E9C9A5FBA9E40B133993051C39288D8A498CC71EBCFB354C2C9D73FA064F1"
|
||||
"65","1024","1069","False","05_Carta_poder_representante_legal.pdf","doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8.bin","Clientes/4/Etapas/1024/doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8.bin","doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8-05_Carta_poder_representante_legal.pdf","Clientes/4/Etapas/1024/doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8-05_Carta_poder_representante_legal.pdf","44650","A40E9C9A5FBA9E40B133993051C39288D8A498CC71EBCFB354C2C9D73FA064F1"
|
||||
"66","1024","1069","False","05_Carta_poder_representante_legal.pdf","doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8.bin","Clientes/4/Etapas/1024/doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8.bin","doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8-05_Carta_poder_representante_legal.pdf","Clientes/4/Etapas/1024/doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8-05_Carta_poder_representante_legal.pdf","44650","A40E9C9A5FBA9E40B133993051C39288D8A498CC71EBCFB354C2C9D73FA064F1"
|
||||
"67","1024","1069","False","05_Carta_poder_representante_legal.pdf","doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8.bin","Clientes/4/Etapas/1024/doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8.bin","doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8-05_Carta_poder_representante_legal.pdf","Clientes/4/Etapas/1024/doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8-05_Carta_poder_representante_legal.pdf","44650","A40E9C9A5FBA9E40B133993051C39288D8A498CC71EBCFB354C2C9D73FA064F1"
|
||||
"68","1024","1040","False","06_Constancia_no_adeudo_tesoreria.pdf","doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971.bin","Clientes/4/Etapas/1024/doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971.bin","doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971-06_Constancia_no_adeudo_tesoreria.pdf","Clientes/4/Etapas/1024/doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971-06_Constancia_no_adeudo_tesoreria.pdf","44515","4E2ADB80E976362F5A48D6D75FB421F193E2FB30AEE76F46132DB26BAD5CBF0F"
|
||||
"69","1024","1040","False","06_Constancia_no_adeudo_tesoreria.pdf","doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971.bin","Clientes/4/Etapas/1024/doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971.bin","doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971-06_Constancia_no_adeudo_tesoreria.pdf","Clientes/4/Etapas/1024/doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971-06_Constancia_no_adeudo_tesoreria.pdf","44515","4E2ADB80E976362F5A48D6D75FB421F193E2FB30AEE76F46132DB26BAD5CBF0F"
|
||||
"70","1024","1040","False","06_Constancia_no_adeudo_tesoreria.pdf","doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971.bin","Clientes/4/Etapas/1024/doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971.bin","doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971-06_Constancia_no_adeudo_tesoreria.pdf","Clientes/4/Etapas/1024/doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971-06_Constancia_no_adeudo_tesoreria.pdf","44515","4E2ADB80E976362F5A48D6D75FB421F193E2FB30AEE76F46132DB26BAD5CBF0F"
|
||||
"71","1024","1040","False","06_Constancia_no_adeudo_tesoreria.pdf","doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971.bin","Clientes/4/Etapas/1024/doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971.bin","doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971-06_Constancia_no_adeudo_tesoreria.pdf","Clientes/4/Etapas/1024/doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971-06_Constancia_no_adeudo_tesoreria.pdf","44515","4E2ADB80E976362F5A48D6D75FB421F193E2FB30AEE76F46132DB26BAD5CBF0F"
|
||||
"72","1024","1040","False","06_Constancia_no_adeudo_tesoreria.pdf","doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971.bin","Clientes/4/Etapas/1024/doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971.bin","doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971-06_Constancia_no_adeudo_tesoreria.pdf","Clientes/4/Etapas/1024/doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971-06_Constancia_no_adeudo_tesoreria.pdf","44515","4E2ADB80E976362F5A48D6D75FB421F193E2FB30AEE76F46132DB26BAD5CBF0F"
|
||||
"73","1024","1040","False","06_Constancia_no_adeudo_tesoreria.pdf","doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971.bin","Clientes/4/Etapas/1024/doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971.bin","doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971-06_Constancia_no_adeudo_tesoreria.pdf","Clientes/4/Etapas/1024/doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971-06_Constancia_no_adeudo_tesoreria.pdf","44515","4E2ADB80E976362F5A48D6D75FB421F193E2FB30AEE76F46132DB26BAD5CBF0F"
|
||||
"74","1024","1034","False","09_Acta_Constitutiva_empresa.pdf","doc-1024-1034-703001ed04cd4768805ea52d87c496ba.bin","Clientes/4/Etapas/1024/doc-1024-1034-703001ed04cd4768805ea52d87c496ba.bin","doc-1024-1034-703001ed04cd4768805ea52d87c496ba-09_Acta_Constitutiva_empresa.pdf","Clientes/4/Etapas/1024/doc-1024-1034-703001ed04cd4768805ea52d87c496ba-09_Acta_Constitutiva_empresa.pdf","44281","4461F94E3DCBE9BCF0FB45C099E3F87B969AC59BAB62E6CD7EA97133A5CD33A3"
|
||||
"75","1024","1034","False","09_Acta_Constitutiva_empresa.pdf","doc-1024-1034-703001ed04cd4768805ea52d87c496ba.bin","Clientes/4/Etapas/1024/doc-1024-1034-703001ed04cd4768805ea52d87c496ba.bin","doc-1024-1034-703001ed04cd4768805ea52d87c496ba-09_Acta_Constitutiva_empresa.pdf","Clientes/4/Etapas/1024/doc-1024-1034-703001ed04cd4768805ea52d87c496ba-09_Acta_Constitutiva_empresa.pdf","44281","4461F94E3DCBE9BCF0FB45C099E3F87B969AC59BAB62E6CD7EA97133A5CD33A3"
|
||||
"76","1024","1034","False","09_Acta_Constitutiva_empresa.pdf","doc-1024-1034-703001ed04cd4768805ea52d87c496ba.bin","Clientes/4/Etapas/1024/doc-1024-1034-703001ed04cd4768805ea52d87c496ba.bin","doc-1024-1034-703001ed04cd4768805ea52d87c496ba-09_Acta_Constitutiva_empresa.pdf","Clientes/4/Etapas/1024/doc-1024-1034-703001ed04cd4768805ea52d87c496ba-09_Acta_Constitutiva_empresa.pdf","44281","4461F94E3DCBE9BCF0FB45C099E3F87B969AC59BAB62E6CD7EA97133A5CD33A3"
|
||||
"77","1024","1034","False","09_Acta_Constitutiva_empresa.pdf","doc-1024-1034-703001ed04cd4768805ea52d87c496ba.bin","Clientes/4/Etapas/1024/doc-1024-1034-703001ed04cd4768805ea52d87c496ba.bin","doc-1024-1034-703001ed04cd4768805ea52d87c496ba-09_Acta_Constitutiva_empresa.pdf","Clientes/4/Etapas/1024/doc-1024-1034-703001ed04cd4768805ea52d87c496ba-09_Acta_Constitutiva_empresa.pdf","44281","4461F94E3DCBE9BCF0FB45C099E3F87B969AC59BAB62E6CD7EA97133A5CD33A3"
|
||||
"78","1024","1037","False","10_Comprobante_domicilio.pdf","doc-1024-1037-251daa4398b44a56bb95dcd11326c096.bin","Clientes/4/Etapas/1024/doc-1024-1037-251daa4398b44a56bb95dcd11326c096.bin","doc-1024-1037-251daa4398b44a56bb95dcd11326c096-10_Comprobante_domicilio.pdf","Clientes/4/Etapas/1024/doc-1024-1037-251daa4398b44a56bb95dcd11326c096-10_Comprobante_domicilio.pdf","44184","0222D8B303F2C0DA21863CA16BC160F2564963C14238009847C52C10526917D0"
|
||||
"79","1024","1037","False","10_Comprobante_domicilio.pdf","doc-1024-1037-251daa4398b44a56bb95dcd11326c096.bin","Clientes/4/Etapas/1024/doc-1024-1037-251daa4398b44a56bb95dcd11326c096.bin","doc-1024-1037-251daa4398b44a56bb95dcd11326c096-10_Comprobante_domicilio.pdf","Clientes/4/Etapas/1024/doc-1024-1037-251daa4398b44a56bb95dcd11326c096-10_Comprobante_domicilio.pdf","44184","0222D8B303F2C0DA21863CA16BC160F2564963C14238009847C52C10526917D0"
|
||||
"80","1024","1037","False","10_Comprobante_domicilio.pdf","doc-1024-1037-251daa4398b44a56bb95dcd11326c096.bin","Clientes/4/Etapas/1024/doc-1024-1037-251daa4398b44a56bb95dcd11326c096.bin","doc-1024-1037-251daa4398b44a56bb95dcd11326c096-10_Comprobante_domicilio.pdf","Clientes/4/Etapas/1024/doc-1024-1037-251daa4398b44a56bb95dcd11326c096-10_Comprobante_domicilio.pdf","44184","0222D8B303F2C0DA21863CA16BC160F2564963C14238009847C52C10526917D0"
|
||||
"81","1024","1037","False","10_Comprobante_domicilio.pdf","doc-1024-1037-251daa4398b44a56bb95dcd11326c096.bin","Clientes/4/Etapas/1024/doc-1024-1037-251daa4398b44a56bb95dcd11326c096.bin","doc-1024-1037-251daa4398b44a56bb95dcd11326c096-10_Comprobante_domicilio.pdf","Clientes/4/Etapas/1024/doc-1024-1037-251daa4398b44a56bb95dcd11326c096-10_Comprobante_domicilio.pdf","44184","0222D8B303F2C0DA21863CA16BC160F2564963C14238009847C52C10526917D0"
|
||||
"82","1024","1069","False","05_Carta_poder_representante_legal.pdf","doc-1024-1069-a126b490c1e24edbab7b044bf0549e77.bin","Clientes/4/Etapas/1024/doc-1024-1069-a126b490c1e24edbab7b044bf0549e77.bin","doc-1024-1069-a126b490c1e24edbab7b044bf0549e77-05_Carta_poder_representante_legal.pdf","Clientes/4/Etapas/1024/doc-1024-1069-a126b490c1e24edbab7b044bf0549e77-05_Carta_poder_representante_legal.pdf","44650","A40E9C9A5FBA9E40B133993051C39288D8A498CC71EBCFB354C2C9D73FA064F1"
|
||||
"83","1024","1069","False","05_Carta_poder_representante_legal.pdf","doc-1024-1069-a126b490c1e24edbab7b044bf0549e77.bin","Clientes/4/Etapas/1024/doc-1024-1069-a126b490c1e24edbab7b044bf0549e77.bin","doc-1024-1069-a126b490c1e24edbab7b044bf0549e77-05_Carta_poder_representante_legal.pdf","Clientes/4/Etapas/1024/doc-1024-1069-a126b490c1e24edbab7b044bf0549e77-05_Carta_poder_representante_legal.pdf","44650","A40E9C9A5FBA9E40B133993051C39288D8A498CC71EBCFB354C2C9D73FA064F1"
|
||||
"84","1024","1069","False","05_Carta_poder_representante_legal.pdf","doc-1024-1069-a126b490c1e24edbab7b044bf0549e77.bin","Clientes/4/Etapas/1024/doc-1024-1069-a126b490c1e24edbab7b044bf0549e77.bin","doc-1024-1069-a126b490c1e24edbab7b044bf0549e77-05_Carta_poder_representante_legal.pdf","Clientes/4/Etapas/1024/doc-1024-1069-a126b490c1e24edbab7b044bf0549e77-05_Carta_poder_representante_legal.pdf","44650","A40E9C9A5FBA9E40B133993051C39288D8A498CC71EBCFB354C2C9D73FA064F1"
|
||||
"85","1024","1069","False","05_Carta_poder_representante_legal.pdf","doc-1024-1069-a126b490c1e24edbab7b044bf0549e77.bin","Clientes/4/Etapas/1024/doc-1024-1069-a126b490c1e24edbab7b044bf0549e77.bin","doc-1024-1069-a126b490c1e24edbab7b044bf0549e77-05_Carta_poder_representante_legal.pdf","Clientes/4/Etapas/1024/doc-1024-1069-a126b490c1e24edbab7b044bf0549e77-05_Carta_poder_representante_legal.pdf","44650","A40E9C9A5FBA9E40B133993051C39288D8A498CC71EBCFB354C2C9D73FA064F1"
|
||||
"86","1024","1069","False","05_Carta_poder_representante_legal.pdf","doc-1024-1069-a126b490c1e24edbab7b044bf0549e77.bin","Clientes/4/Etapas/1024/doc-1024-1069-a126b490c1e24edbab7b044bf0549e77.bin","doc-1024-1069-a126b490c1e24edbab7b044bf0549e77-05_Carta_poder_representante_legal.pdf","Clientes/4/Etapas/1024/doc-1024-1069-a126b490c1e24edbab7b044bf0549e77-05_Carta_poder_representante_legal.pdf","44650","A40E9C9A5FBA9E40B133993051C39288D8A498CC71EBCFB354C2C9D73FA064F1"
|
||||
"87","1024","1040","False","06_Constancia_no_adeudo_tesoreria.pdf","doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d.bin","Clientes/4/Etapas/1024/doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d.bin","doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d-06_Constancia_no_adeudo_tesoreria.pdf","Clientes/4/Etapas/1024/doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d-06_Constancia_no_adeudo_tesoreria.pdf","44515","4E2ADB80E976362F5A48D6D75FB421F193E2FB30AEE76F46132DB26BAD5CBF0F"
|
||||
"88","1024","1040","False","06_Constancia_no_adeudo_tesoreria.pdf","doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d.bin","Clientes/4/Etapas/1024/doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d.bin","doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d-06_Constancia_no_adeudo_tesoreria.pdf","Clientes/4/Etapas/1024/doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d-06_Constancia_no_adeudo_tesoreria.pdf","44515","4E2ADB80E976362F5A48D6D75FB421F193E2FB30AEE76F46132DB26BAD5CBF0F"
|
||||
"89","1024","1040","False","06_Constancia_no_adeudo_tesoreria.pdf","doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d.bin","Clientes/4/Etapas/1024/doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d.bin","doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d-06_Constancia_no_adeudo_tesoreria.pdf","Clientes/4/Etapas/1024/doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d-06_Constancia_no_adeudo_tesoreria.pdf","44515","4E2ADB80E976362F5A48D6D75FB421F193E2FB30AEE76F46132DB26BAD5CBF0F"
|
||||
"90","1024","1040","False","06_Constancia_no_adeudo_tesoreria.pdf","doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d.bin","Clientes/4/Etapas/1024/doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d.bin","doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d-06_Constancia_no_adeudo_tesoreria.pdf","Clientes/4/Etapas/1024/doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d-06_Constancia_no_adeudo_tesoreria.pdf","44515","4E2ADB80E976362F5A48D6D75FB421F193E2FB30AEE76F46132DB26BAD5CBF0F"
|
||||
"91","1024","1040","False","06_Constancia_no_adeudo_tesoreria.pdf","doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d.bin","Clientes/4/Etapas/1024/doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d.bin","doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d-06_Constancia_no_adeudo_tesoreria.pdf","Clientes/4/Etapas/1024/doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d-06_Constancia_no_adeudo_tesoreria.pdf","44515","4E2ADB80E976362F5A48D6D75FB421F193E2FB30AEE76F46132DB26BAD5CBF0F"
|
||||
"92","1024","1040","False","06_Constancia_no_adeudo_tesoreria.pdf","doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d.bin","Clientes/4/Etapas/1024/doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d.bin","doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d-06_Constancia_no_adeudo_tesoreria.pdf","Clientes/4/Etapas/1024/doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d-06_Constancia_no_adeudo_tesoreria.pdf","44515","4E2ADB80E976362F5A48D6D75FB421F193E2FB30AEE76F46132DB26BAD5CBF0F"
|
||||
"93","1024","1034","False","09_Acta_Constitutiva_empresa.pdf","doc-1024-1034-1f93d872f1c549988ab7b6f3f9b574f5.bin","Clientes/4/Etapas/1024/doc-1024-1034-1f93d872f1c549988ab7b6f3f9b574f5.bin","doc-1024-1034-1f93d872f1c549988ab7b6f3f9b574f5-09_Acta_Constitutiva_empresa.pdf","Clientes/4/Etapas/1024/doc-1024-1034-1f93d872f1c549988ab7b6f3f9b574f5-09_Acta_Constitutiva_empresa.pdf","44281","4461F94E3DCBE9BCF0FB45C099E3F87B969AC59BAB62E6CD7EA97133A5CD33A3"
|
||||
"94","1024","1034","False","09_Acta_Constitutiva_empresa.pdf","doc-1024-1034-1f93d872f1c549988ab7b6f3f9b574f5.bin","Clientes/4/Etapas/1024/doc-1024-1034-1f93d872f1c549988ab7b6f3f9b574f5.bin","doc-1024-1034-1f93d872f1c549988ab7b6f3f9b574f5-09_Acta_Constitutiva_empresa.pdf","Clientes/4/Etapas/1024/doc-1024-1034-1f93d872f1c549988ab7b6f3f9b574f5-09_Acta_Constitutiva_empresa.pdf","44281","4461F94E3DCBE9BCF0FB45C099E3F87B969AC59BAB62E6CD7EA97133A5CD33A3"
|
||||
"95","1024","1034","False","09_Acta_Constitutiva_empresa.pdf","doc-1024-1034-1f93d872f1c549988ab7b6f3f9b574f5.bin","Clientes/4/Etapas/1024/doc-1024-1034-1f93d872f1c549988ab7b6f3f9b574f5.bin","doc-1024-1034-1f93d872f1c549988ab7b6f3f9b574f5-09_Acta_Constitutiva_empresa.pdf","Clientes/4/Etapas/1024/doc-1024-1034-1f93d872f1c549988ab7b6f3f9b574f5-09_Acta_Constitutiva_empresa.pdf","44281","4461F94E3DCBE9BCF0FB45C099E3F87B969AC59BAB62E6CD7EA97133A5CD33A3"
|
||||
"96","1024","1034","False","09_Acta_Constitutiva_empresa.pdf","doc-1024-1034-1f93d872f1c549988ab7b6f3f9b574f5.bin","Clientes/4/Etapas/1024/doc-1024-1034-1f93d872f1c549988ab7b6f3f9b574f5.bin","doc-1024-1034-1f93d872f1c549988ab7b6f3f9b574f5-09_Acta_Constitutiva_empresa.pdf","Clientes/4/Etapas/1024/doc-1024-1034-1f93d872f1c549988ab7b6f3f9b574f5-09_Acta_Constitutiva_empresa.pdf","44281","4461F94E3DCBE9BCF0FB45C099E3F87B969AC59BAB62E6CD7EA97133A5CD33A3"
|
||||
"97","1024","1037","False","10_Comprobante_domicilio.pdf","doc-1024-1037-8ab956638dc442e49632d23459f4cb2f.bin","Clientes/4/Etapas/1024/doc-1024-1037-8ab956638dc442e49632d23459f4cb2f.bin","doc-1024-1037-8ab956638dc442e49632d23459f4cb2f-10_Comprobante_domicilio.pdf","Clientes/4/Etapas/1024/doc-1024-1037-8ab956638dc442e49632d23459f4cb2f-10_Comprobante_domicilio.pdf","44184","0222D8B303F2C0DA21863CA16BC160F2564963C14238009847C52C10526917D0"
|
||||
"98","1024","1037","False","10_Comprobante_domicilio.pdf","doc-1024-1037-8ab956638dc442e49632d23459f4cb2f.bin","Clientes/4/Etapas/1024/doc-1024-1037-8ab956638dc442e49632d23459f4cb2f.bin","doc-1024-1037-8ab956638dc442e49632d23459f4cb2f-10_Comprobante_domicilio.pdf","Clientes/4/Etapas/1024/doc-1024-1037-8ab956638dc442e49632d23459f4cb2f-10_Comprobante_domicilio.pdf","44184","0222D8B303F2C0DA21863CA16BC160F2564963C14238009847C52C10526917D0"
|
||||
"99","1024","1037","False","10_Comprobante_domicilio.pdf","doc-1024-1037-8ab956638dc442e49632d23459f4cb2f.bin","Clientes/4/Etapas/1024/doc-1024-1037-8ab956638dc442e49632d23459f4cb2f.bin","doc-1024-1037-8ab956638dc442e49632d23459f4cb2f-10_Comprobante_domicilio.pdf","Clientes/4/Etapas/1024/doc-1024-1037-8ab956638dc442e49632d23459f4cb2f-10_Comprobante_domicilio.pdf","44184","0222D8B303F2C0DA21863CA16BC160F2564963C14238009847C52C10526917D0"
|
||||
"100","1024","1037","False","10_Comprobante_domicilio.pdf","doc-1024-1037-8ab956638dc442e49632d23459f4cb2f.bin","Clientes/4/Etapas/1024/doc-1024-1037-8ab956638dc442e49632d23459f4cb2f.bin","doc-1024-1037-8ab956638dc442e49632d23459f4cb2f-10_Comprobante_domicilio.pdf","Clientes/4/Etapas/1024/doc-1024-1037-8ab956638dc442e49632d23459f4cb2f-10_Comprobante_domicilio.pdf","44184","0222D8B303F2C0DA21863CA16BC160F2564963C14238009847C52C10526917D0"
|
||||
"101","1024","1045","False","Croquis.png","doc-1024-1045-d447e83e74d14977957ca05ed2465c28.bin","Clientes/4/Etapas/1024/doc-1024-1045-d447e83e74d14977957ca05ed2465c28.bin","doc-1024-1045-d447e83e74d14977957ca05ed2465c28-Croquis.png","Clientes/4/Etapas/1024/doc-1024-1045-d447e83e74d14977957ca05ed2465c28-Croquis.png","984403","3A507595006CDBB8A59830E0B9634D11DCB85A4CBED1F2A5F35023043947E632"
|
||||
"102","1024","1057","False","Identificación Oficial.jpg","doc-1024-1057-a00c7eb989a64e47baec43163755e90e.bin","Clientes/4/Etapas/1024/doc-1024-1057-a00c7eb989a64e47baec43163755e90e.bin","doc-1024-1057-a00c7eb989a64e47baec43163755e90e-Identificación Oficial.jpg","Clientes/4/Etapas/1024/doc-1024-1057-a00c7eb989a64e47baec43163755e90e-Identificación Oficial.jpg","55724","A5915340A4600EE8988CEDF4080E6828ED42FCD2DE432788102A328977A83076"
|
||||
"103","1024","1057","False","Identificación Oficial.jpg","doc-1024-1057-a00c7eb989a64e47baec43163755e90e.bin","Clientes/4/Etapas/1024/doc-1024-1057-a00c7eb989a64e47baec43163755e90e.bin","doc-1024-1057-a00c7eb989a64e47baec43163755e90e-Identificación Oficial.jpg","Clientes/4/Etapas/1024/doc-1024-1057-a00c7eb989a64e47baec43163755e90e-Identificación Oficial.jpg","55724","A5915340A4600EE8988CEDF4080E6828ED42FCD2DE432788102A328977A83076"
|
||||
"104","1024","1057","False","Identificación Oficial.jpg","doc-1024-1057-a00c7eb989a64e47baec43163755e90e.bin","Clientes/4/Etapas/1024/doc-1024-1057-a00c7eb989a64e47baec43163755e90e.bin","doc-1024-1057-a00c7eb989a64e47baec43163755e90e-Identificación Oficial.jpg","Clientes/4/Etapas/1024/doc-1024-1057-a00c7eb989a64e47baec43163755e90e-Identificación Oficial.jpg","55724","A5915340A4600EE8988CEDF4080E6828ED42FCD2DE432788102A328977A83076"
|
||||
"105","1024","1057","False","Identificación Oficial.jpg","doc-1024-1057-a00c7eb989a64e47baec43163755e90e.bin","Clientes/4/Etapas/1024/doc-1024-1057-a00c7eb989a64e47baec43163755e90e.bin","doc-1024-1057-a00c7eb989a64e47baec43163755e90e-Identificación Oficial.jpg","Clientes/4/Etapas/1024/doc-1024-1057-a00c7eb989a64e47baec43163755e90e-Identificación Oficial.jpg","55724","A5915340A4600EE8988CEDF4080E6828ED42FCD2DE432788102A328977A83076"
|
||||
"106","1024","1057","False","Identificación Oficial.jpg","doc-1024-1057-a00c7eb989a64e47baec43163755e90e.bin","Clientes/4/Etapas/1024/doc-1024-1057-a00c7eb989a64e47baec43163755e90e.bin","doc-1024-1057-a00c7eb989a64e47baec43163755e90e-Identificación Oficial.jpg","Clientes/4/Etapas/1024/doc-1024-1057-a00c7eb989a64e47baec43163755e90e-Identificación Oficial.jpg","55724","A5915340A4600EE8988CEDF4080E6828ED42FCD2DE432788102A328977A83076"
|
||||
"107","1024","1057","False","Identificación Oficial.jpg","doc-1024-1057-a00c7eb989a64e47baec43163755e90e.bin","Clientes/4/Etapas/1024/doc-1024-1057-a00c7eb989a64e47baec43163755e90e.bin","doc-1024-1057-a00c7eb989a64e47baec43163755e90e-Identificación Oficial.jpg","Clientes/4/Etapas/1024/doc-1024-1057-a00c7eb989a64e47baec43163755e90e-Identificación Oficial.jpg","55724","A5915340A4600EE8988CEDF4080E6828ED42FCD2DE432788102A328977A83076"
|
||||
"108","1024","1057","False","Identificación Oficial.jpg","doc-1024-1057-a00c7eb989a64e47baec43163755e90e.bin","Clientes/4/Etapas/1024/doc-1024-1057-a00c7eb989a64e47baec43163755e90e.bin","doc-1024-1057-a00c7eb989a64e47baec43163755e90e-Identificación Oficial.jpg","Clientes/4/Etapas/1024/doc-1024-1057-a00c7eb989a64e47baec43163755e90e-Identificación Oficial.jpg","55724","A5915340A4600EE8988CEDF4080E6828ED42FCD2DE432788102A328977A83076"
|
||||
"109","1024","1045","False","Croquis.png","doc-1024-1045-61379c693d6241898e7cf30cffd8658a.bin","Clientes/4/Etapas/1024/doc-1024-1045-61379c693d6241898e7cf30cffd8658a.bin","doc-1024-1045-61379c693d6241898e7cf30cffd8658a-Croquis.png","Clientes/4/Etapas/1024/doc-1024-1045-61379c693d6241898e7cf30cffd8658a-Croquis.png","984403","3A507595006CDBB8A59830E0B9634D11DCB85A4CBED1F2A5F35023043947E632"
|
||||
"110","1024","1057","False","Identificación Oficial.jpg","doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3.bin","Clientes/4/Etapas/1024/doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3.bin","doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3-Identificación Oficial.jpg","Clientes/4/Etapas/1024/doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3-Identificación Oficial.jpg","55724","A5915340A4600EE8988CEDF4080E6828ED42FCD2DE432788102A328977A83076"
|
||||
"111","1024","1057","False","Identificación Oficial.jpg","doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3.bin","Clientes/4/Etapas/1024/doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3.bin","doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3-Identificación Oficial.jpg","Clientes/4/Etapas/1024/doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3-Identificación Oficial.jpg","55724","A5915340A4600EE8988CEDF4080E6828ED42FCD2DE432788102A328977A83076"
|
||||
"112","1024","1057","False","Identificación Oficial.jpg","doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3.bin","Clientes/4/Etapas/1024/doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3.bin","doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3-Identificación Oficial.jpg","Clientes/4/Etapas/1024/doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3-Identificación Oficial.jpg","55724","A5915340A4600EE8988CEDF4080E6828ED42FCD2DE432788102A328977A83076"
|
||||
"113","1024","1057","False","Identificación Oficial.jpg","doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3.bin","Clientes/4/Etapas/1024/doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3.bin","doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3-Identificación Oficial.jpg","Clientes/4/Etapas/1024/doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3-Identificación Oficial.jpg","55724","A5915340A4600EE8988CEDF4080E6828ED42FCD2DE432788102A328977A83076"
|
||||
"114","1024","1057","False","Identificación Oficial.jpg","doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3.bin","Clientes/4/Etapas/1024/doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3.bin","doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3-Identificación Oficial.jpg","Clientes/4/Etapas/1024/doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3-Identificación Oficial.jpg","55724","A5915340A4600EE8988CEDF4080E6828ED42FCD2DE432788102A328977A83076"
|
||||
"115","1024","1057","False","Identificación Oficial.jpg","doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3.bin","Clientes/4/Etapas/1024/doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3.bin","doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3-Identificación Oficial.jpg","Clientes/4/Etapas/1024/doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3-Identificación Oficial.jpg","55724","A5915340A4600EE8988CEDF4080E6828ED42FCD2DE432788102A328977A83076"
|
||||
"116","1024","1057","False","Identificación Oficial.jpg","doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3.bin","Clientes/4/Etapas/1024/doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3.bin","doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3-Identificación Oficial.jpg","Clientes/4/Etapas/1024/doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3-Identificación Oficial.jpg","55724","A5915340A4600EE8988CEDF4080E6828ED42FCD2DE432788102A328977A83076"
|
||||
"117","1028","1069","False","05_Carta_poder_representante_legal.pdf","doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713.bin","Clientes/4/Etapas/1028/doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713.bin","doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713-05_Carta_poder_representante_legal.pdf","Clientes/4/Etapas/1028/doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713-05_Carta_poder_representante_legal.pdf","44650","A40E9C9A5FBA9E40B133993051C39288D8A498CC71EBCFB354C2C9D73FA064F1"
|
||||
"118","1028","1069","False","05_Carta_poder_representante_legal.pdf","doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713.bin","Clientes/4/Etapas/1028/doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713.bin","doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713-05_Carta_poder_representante_legal.pdf","Clientes/4/Etapas/1028/doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713-05_Carta_poder_representante_legal.pdf","44650","A40E9C9A5FBA9E40B133993051C39288D8A498CC71EBCFB354C2C9D73FA064F1"
|
||||
"119","1028","1069","False","05_Carta_poder_representante_legal.pdf","doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713.bin","Clientes/4/Etapas/1028/doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713.bin","doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713-05_Carta_poder_representante_legal.pdf","Clientes/4/Etapas/1028/doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713-05_Carta_poder_representante_legal.pdf","44650","A40E9C9A5FBA9E40B133993051C39288D8A498CC71EBCFB354C2C9D73FA064F1"
|
||||
"120","1028","1069","False","05_Carta_poder_representante_legal.pdf","doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713.bin","Clientes/4/Etapas/1028/doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713.bin","doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713-05_Carta_poder_representante_legal.pdf","Clientes/4/Etapas/1028/doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713-05_Carta_poder_representante_legal.pdf","44650","A40E9C9A5FBA9E40B133993051C39288D8A498CC71EBCFB354C2C9D73FA064F1"
|
||||
"121","1028","1069","False","05_Carta_poder_representante_legal.pdf","doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713.bin","Clientes/4/Etapas/1028/doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713.bin","doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713-05_Carta_poder_representante_legal.pdf","Clientes/4/Etapas/1028/doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713-05_Carta_poder_representante_legal.pdf","44650","A40E9C9A5FBA9E40B133993051C39288D8A498CC71EBCFB354C2C9D73FA064F1"
|
||||
"122","1028","1040","False","06_Constancia_no_adeudo_tesoreria.pdf","doc-1028-1040-9bc673275f414c8d8d320e9bbf698072.bin","Clientes/4/Etapas/1028/doc-1028-1040-9bc673275f414c8d8d320e9bbf698072.bin","doc-1028-1040-9bc673275f414c8d8d320e9bbf698072-06_Constancia_no_adeudo_tesoreria.pdf","Clientes/4/Etapas/1028/doc-1028-1040-9bc673275f414c8d8d320e9bbf698072-06_Constancia_no_adeudo_tesoreria.pdf","44515","4E2ADB80E976362F5A48D6D75FB421F193E2FB30AEE76F46132DB26BAD5CBF0F"
|
||||
"123","1028","1040","False","06_Constancia_no_adeudo_tesoreria.pdf","doc-1028-1040-9bc673275f414c8d8d320e9bbf698072.bin","Clientes/4/Etapas/1028/doc-1028-1040-9bc673275f414c8d8d320e9bbf698072.bin","doc-1028-1040-9bc673275f414c8d8d320e9bbf698072-06_Constancia_no_adeudo_tesoreria.pdf","Clientes/4/Etapas/1028/doc-1028-1040-9bc673275f414c8d8d320e9bbf698072-06_Constancia_no_adeudo_tesoreria.pdf","44515","4E2ADB80E976362F5A48D6D75FB421F193E2FB30AEE76F46132DB26BAD5CBF0F"
|
||||
"124","1028","1040","False","06_Constancia_no_adeudo_tesoreria.pdf","doc-1028-1040-9bc673275f414c8d8d320e9bbf698072.bin","Clientes/4/Etapas/1028/doc-1028-1040-9bc673275f414c8d8d320e9bbf698072.bin","doc-1028-1040-9bc673275f414c8d8d320e9bbf698072-06_Constancia_no_adeudo_tesoreria.pdf","Clientes/4/Etapas/1028/doc-1028-1040-9bc673275f414c8d8d320e9bbf698072-06_Constancia_no_adeudo_tesoreria.pdf","44515","4E2ADB80E976362F5A48D6D75FB421F193E2FB30AEE76F46132DB26BAD5CBF0F"
|
||||
"125","1028","1040","False","06_Constancia_no_adeudo_tesoreria.pdf","doc-1028-1040-9bc673275f414c8d8d320e9bbf698072.bin","Clientes/4/Etapas/1028/doc-1028-1040-9bc673275f414c8d8d320e9bbf698072.bin","doc-1028-1040-9bc673275f414c8d8d320e9bbf698072-06_Constancia_no_adeudo_tesoreria.pdf","Clientes/4/Etapas/1028/doc-1028-1040-9bc673275f414c8d8d320e9bbf698072-06_Constancia_no_adeudo_tesoreria.pdf","44515","4E2ADB80E976362F5A48D6D75FB421F193E2FB30AEE76F46132DB26BAD5CBF0F"
|
||||
"126","1028","1040","False","06_Constancia_no_adeudo_tesoreria.pdf","doc-1028-1040-9bc673275f414c8d8d320e9bbf698072.bin","Clientes/4/Etapas/1028/doc-1028-1040-9bc673275f414c8d8d320e9bbf698072.bin","doc-1028-1040-9bc673275f414c8d8d320e9bbf698072-06_Constancia_no_adeudo_tesoreria.pdf","Clientes/4/Etapas/1028/doc-1028-1040-9bc673275f414c8d8d320e9bbf698072-06_Constancia_no_adeudo_tesoreria.pdf","44515","4E2ADB80E976362F5A48D6D75FB421F193E2FB30AEE76F46132DB26BAD5CBF0F"
|
||||
"127","1028","1040","False","06_Constancia_no_adeudo_tesoreria.pdf","doc-1028-1040-9bc673275f414c8d8d320e9bbf698072.bin","Clientes/4/Etapas/1028/doc-1028-1040-9bc673275f414c8d8d320e9bbf698072.bin","doc-1028-1040-9bc673275f414c8d8d320e9bbf698072-06_Constancia_no_adeudo_tesoreria.pdf","Clientes/4/Etapas/1028/doc-1028-1040-9bc673275f414c8d8d320e9bbf698072-06_Constancia_no_adeudo_tesoreria.pdf","44515","4E2ADB80E976362F5A48D6D75FB421F193E2FB30AEE76F46132DB26BAD5CBF0F"
|
||||
"128","1028","1034","False","09_Acta_Constitutiva_empresa.pdf","doc-1028-1034-583b7009cab246ed8287200ce7082495.bin","Clientes/4/Etapas/1028/doc-1028-1034-583b7009cab246ed8287200ce7082495.bin","doc-1028-1034-583b7009cab246ed8287200ce7082495-09_Acta_Constitutiva_empresa.pdf","Clientes/4/Etapas/1028/doc-1028-1034-583b7009cab246ed8287200ce7082495-09_Acta_Constitutiva_empresa.pdf","44281","4461F94E3DCBE9BCF0FB45C099E3F87B969AC59BAB62E6CD7EA97133A5CD33A3"
|
||||
"129","1028","1034","False","09_Acta_Constitutiva_empresa.pdf","doc-1028-1034-583b7009cab246ed8287200ce7082495.bin","Clientes/4/Etapas/1028/doc-1028-1034-583b7009cab246ed8287200ce7082495.bin","doc-1028-1034-583b7009cab246ed8287200ce7082495-09_Acta_Constitutiva_empresa.pdf","Clientes/4/Etapas/1028/doc-1028-1034-583b7009cab246ed8287200ce7082495-09_Acta_Constitutiva_empresa.pdf","44281","4461F94E3DCBE9BCF0FB45C099E3F87B969AC59BAB62E6CD7EA97133A5CD33A3"
|
||||
"130","1028","1034","False","09_Acta_Constitutiva_empresa.pdf","doc-1028-1034-583b7009cab246ed8287200ce7082495.bin","Clientes/4/Etapas/1028/doc-1028-1034-583b7009cab246ed8287200ce7082495.bin","doc-1028-1034-583b7009cab246ed8287200ce7082495-09_Acta_Constitutiva_empresa.pdf","Clientes/4/Etapas/1028/doc-1028-1034-583b7009cab246ed8287200ce7082495-09_Acta_Constitutiva_empresa.pdf","44281","4461F94E3DCBE9BCF0FB45C099E3F87B969AC59BAB62E6CD7EA97133A5CD33A3"
|
||||
"131","1028","1034","False","09_Acta_Constitutiva_empresa.pdf","doc-1028-1034-583b7009cab246ed8287200ce7082495.bin","Clientes/4/Etapas/1028/doc-1028-1034-583b7009cab246ed8287200ce7082495.bin","doc-1028-1034-583b7009cab246ed8287200ce7082495-09_Acta_Constitutiva_empresa.pdf","Clientes/4/Etapas/1028/doc-1028-1034-583b7009cab246ed8287200ce7082495-09_Acta_Constitutiva_empresa.pdf","44281","4461F94E3DCBE9BCF0FB45C099E3F87B969AC59BAB62E6CD7EA97133A5CD33A3"
|
||||
"132","1028","1037","False","10_Comprobante_domicilio.pdf","doc-1028-1037-06adb9de68924cebafe0052e68b83915.bin","Clientes/4/Etapas/1028/doc-1028-1037-06adb9de68924cebafe0052e68b83915.bin","doc-1028-1037-06adb9de68924cebafe0052e68b83915-10_Comprobante_domicilio.pdf","Clientes/4/Etapas/1028/doc-1028-1037-06adb9de68924cebafe0052e68b83915-10_Comprobante_domicilio.pdf","44184","0222D8B303F2C0DA21863CA16BC160F2564963C14238009847C52C10526917D0"
|
||||
"133","1028","1037","False","10_Comprobante_domicilio.pdf","doc-1028-1037-06adb9de68924cebafe0052e68b83915.bin","Clientes/4/Etapas/1028/doc-1028-1037-06adb9de68924cebafe0052e68b83915.bin","doc-1028-1037-06adb9de68924cebafe0052e68b83915-10_Comprobante_domicilio.pdf","Clientes/4/Etapas/1028/doc-1028-1037-06adb9de68924cebafe0052e68b83915-10_Comprobante_domicilio.pdf","44184","0222D8B303F2C0DA21863CA16BC160F2564963C14238009847C52C10526917D0"
|
||||
"134","1028","1037","False","10_Comprobante_domicilio.pdf","doc-1028-1037-06adb9de68924cebafe0052e68b83915.bin","Clientes/4/Etapas/1028/doc-1028-1037-06adb9de68924cebafe0052e68b83915.bin","doc-1028-1037-06adb9de68924cebafe0052e68b83915-10_Comprobante_domicilio.pdf","Clientes/4/Etapas/1028/doc-1028-1037-06adb9de68924cebafe0052e68b83915-10_Comprobante_domicilio.pdf","44184","0222D8B303F2C0DA21863CA16BC160F2564963C14238009847C52C10526917D0"
|
||||
"135","1028","1037","False","10_Comprobante_domicilio.pdf","doc-1028-1037-06adb9de68924cebafe0052e68b83915.bin","Clientes/4/Etapas/1028/doc-1028-1037-06adb9de68924cebafe0052e68b83915.bin","doc-1028-1037-06adb9de68924cebafe0052e68b83915-10_Comprobante_domicilio.pdf","Clientes/4/Etapas/1028/doc-1028-1037-06adb9de68924cebafe0052e68b83915-10_Comprobante_domicilio.pdf","44184","0222D8B303F2C0DA21863CA16BC160F2564963C14238009847C52C10526917D0"
|
||||
"136","1028","1045","False","Croquis.png","doc-1028-1045-7f4784759eaf43f09e2a6433309008df.bin","Clientes/4/Etapas/1028/doc-1028-1045-7f4784759eaf43f09e2a6433309008df.bin","doc-1028-1045-7f4784759eaf43f09e2a6433309008df-Croquis.png","Clientes/4/Etapas/1028/doc-1028-1045-7f4784759eaf43f09e2a6433309008df-Croquis.png","984403","3A507595006CDBB8A59830E0B9634D11DCB85A4CBED1F2A5F35023043947E632"
|
||||
"137","1028","1057","False","Identificación Oficial.jpg","doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c.bin","Clientes/4/Etapas/1028/doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c.bin","doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c-Identificación Oficial.jpg","Clientes/4/Etapas/1028/doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c-Identificación Oficial.jpg","55724","A5915340A4600EE8988CEDF4080E6828ED42FCD2DE432788102A328977A83076"
|
||||
"138","1028","1057","False","Identificación Oficial.jpg","doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c.bin","Clientes/4/Etapas/1028/doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c.bin","doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c-Identificación Oficial.jpg","Clientes/4/Etapas/1028/doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c-Identificación Oficial.jpg","55724","A5915340A4600EE8988CEDF4080E6828ED42FCD2DE432788102A328977A83076"
|
||||
"139","1028","1057","False","Identificación Oficial.jpg","doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c.bin","Clientes/4/Etapas/1028/doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c.bin","doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c-Identificación Oficial.jpg","Clientes/4/Etapas/1028/doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c-Identificación Oficial.jpg","55724","A5915340A4600EE8988CEDF4080E6828ED42FCD2DE432788102A328977A83076"
|
||||
"140","1028","1057","False","Identificación Oficial.jpg","doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c.bin","Clientes/4/Etapas/1028/doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c.bin","doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c-Identificación Oficial.jpg","Clientes/4/Etapas/1028/doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c-Identificación Oficial.jpg","55724","A5915340A4600EE8988CEDF4080E6828ED42FCD2DE432788102A328977A83076"
|
||||
"141","1028","1057","False","Identificación Oficial.jpg","doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c.bin","Clientes/4/Etapas/1028/doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c.bin","doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c-Identificación Oficial.jpg","Clientes/4/Etapas/1028/doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c-Identificación Oficial.jpg","55724","A5915340A4600EE8988CEDF4080E6828ED42FCD2DE432788102A328977A83076"
|
||||
"142","1028","1057","False","Identificación Oficial.jpg","doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c.bin","Clientes/4/Etapas/1028/doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c.bin","doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c-Identificación Oficial.jpg","Clientes/4/Etapas/1028/doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c-Identificación Oficial.jpg","55724","A5915340A4600EE8988CEDF4080E6828ED42FCD2DE432788102A328977A83076"
|
||||
"143","1028","1057","False","Identificación Oficial.jpg","doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c.bin","Clientes/4/Etapas/1028/doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c.bin","doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c-Identificación Oficial.jpg","Clientes/4/Etapas/1028/doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c-Identificación Oficial.jpg","55724","A5915340A4600EE8988CEDF4080E6828ED42FCD2DE432788102A328977A83076"
|
||||
|
243
Migracion_NombresDocumentos_20261003.sql
Normal file
243
Migracion_NombresDocumentos_20261003.sql
Normal file
@@ -0,0 +1,243 @@
|
||||
-- Migración de nombres físicos autorizada el 2026-10-03.
|
||||
-- Requiere copias verificadas con el inventario CSV antes de ejecutarse.
|
||||
-- Respaldo: Respaldo_NombresDocumentos_20261003.
|
||||
SET NOCOUNT ON;
|
||||
SET XACT_ABORT ON;
|
||||
|
||||
DECLARE @Mapeo TABLE
|
||||
(
|
||||
CveDocumentoSolicitud int PRIMARY KEY,
|
||||
NombreAnterior varchar(255) COLLATE Modern_Spanish_CS_AS NOT NULL,
|
||||
RutaAnterior varchar(1000) COLLATE Modern_Spanish_CS_AS NOT NULL,
|
||||
NombreNuevo varchar(255) COLLATE Modern_Spanish_CS_AS NOT NULL,
|
||||
RutaNueva varchar(1000) COLLATE Modern_Spanish_CS_AS NOT NULL
|
||||
);
|
||||
|
||||
INSERT INTO @Mapeo
|
||||
(CveDocumentoSolicitud, NombreAnterior, RutaAnterior, NombreNuevo, RutaNueva)
|
||||
VALUES
|
||||
(3, N'doc-1022-1040-b6e404e6e7dc4597860185076b3289dd.bin', N'Clientes/1006/Etapas/1022/doc-1022-1040-b6e404e6e7dc4597860185076b3289dd.bin', N'doc-1022-1040-b6e404e6e7dc4597860185076b3289dd-VL103M user manual 20230921.pdf', N'Clientes/1006/Etapas/1022/doc-1022-1040-b6e404e6e7dc4597860185076b3289dd-VL103M user manual 20230921.pdf'),
|
||||
(4, N'doc-1022-1045-b8d0648d970b4cababc65f30c58b1ccb.bin', N'Clientes/1006/Etapas/1022/doc-1022-1045-b8d0648d970b4cababc65f30c58b1ccb.bin', N'doc-1022-1045-b8d0648d970b4cababc65f30c58b1ccb-BORRADOR EDISA.docx', N'Clientes/1006/Etapas/1022/doc-1022-1045-b8d0648d970b4cababc65f30c58b1ccb-BORRADOR EDISA.docx'),
|
||||
(5, N'doc-1022-1046-c3b1e27e553449a7b5a4545222b63b0b.bin', N'Clientes/1006/Etapas/1022/doc-1022-1046-c3b1e27e553449a7b5a4545222b63b0b.bin', N'doc-1022-1046-c3b1e27e553449a7b5a4545222b63b0b-ACTIVIDADES LETYYYY.docx', N'Clientes/1006/Etapas/1022/doc-1022-1046-c3b1e27e553449a7b5a4545222b63b0b-ACTIVIDADES LETYYYY.docx'),
|
||||
(6, N'doc-1022-1051-b0ea49a4b15241e5a6010a8b890b9791.bin', N'Clientes/1006/Etapas/1022/doc-1022-1051-b0ea49a4b15241e5a6010a8b890b9791.bin', N'doc-1022-1051-b0ea49a4b15241e5a6010a8b890b9791-Recibo-Ago (1).pdf', N'Clientes/1006/Etapas/1022/doc-1022-1051-b0ea49a4b15241e5a6010a8b890b9791-Recibo-Ago (1).pdf'),
|
||||
(7, N'doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422.bin', N'Clientes/1006/Etapas/1022/doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422.bin', N'doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422-65007.jpeg', N'Clientes/1006/Etapas/1022/doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422-65007.jpeg'),
|
||||
(8, N'doc-1022-1053-53864978166e40c2b3c7e06dd7c6333c.bin', N'Clientes/1006/Etapas/1022/doc-1022-1053-53864978166e40c2b3c7e06dd7c6333c.bin', N'doc-1022-1053-53864978166e40c2b3c7e06dd7c6333c-Etapa1_10_lotes.gis', N'Clientes/1006/Etapas/1022/doc-1022-1053-53864978166e40c2b3c7e06dd7c6333c-Etapa1_10_lotes.gis'),
|
||||
(9, N'doc-1024-1034-3212891ee8f847aba1e83b01fc27ef42.bin', N'Clientes/4/Etapas/1024/doc-1024-1034-3212891ee8f847aba1e83b01fc27ef42.bin', N'doc-1024-1034-3212891ee8f847aba1e83b01fc27ef42-09_Acta_Constitutiva_empresa.pdf', N'Clientes/4/Etapas/1024/doc-1024-1034-3212891ee8f847aba1e83b01fc27ef42-09_Acta_Constitutiva_empresa.pdf'),
|
||||
(10, N'doc-1024-1053-4026eac60fde4d57aca2ed30325c7aa7.bin', N'Clientes/4/Etapas/1024/doc-1024-1053-4026eac60fde4d57aca2ed30325c7aa7.bin', N'doc-1024-1053-4026eac60fde4d57aca2ed30325c7aa7-02_Copia_escrituras.pdf', N'Clientes/4/Etapas/1024/doc-1024-1053-4026eac60fde4d57aca2ed30325c7aa7-02_Copia_escrituras.pdf'),
|
||||
(11, N'doc-1024-1046-168182c76cb843cbb3a2aff986bff057.bin', N'Clientes/4/Etapas/1024/doc-1024-1046-168182c76cb843cbb3a2aff986bff057.bin', N'doc-1024-1046-168182c76cb843cbb3a2aff986bff057-04_Dictamen_uso_suelo.pdf', N'Clientes/4/Etapas/1024/doc-1024-1046-168182c76cb843cbb3a2aff986bff057-04_Dictamen_uso_suelo.pdf'),
|
||||
(12, N'doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8.bin', N'Clientes/4/Etapas/1024/doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8.bin', N'doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8-05_Carta_poder_representante_legal.pdf', N'Clientes/4/Etapas/1024/doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8-05_Carta_poder_representante_legal.pdf'),
|
||||
(13, N'doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971.bin', N'Clientes/4/Etapas/1024/doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971.bin', N'doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971-06_Constancia_no_adeudo_tesoreria.pdf', N'Clientes/4/Etapas/1024/doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971-06_Constancia_no_adeudo_tesoreria.pdf'),
|
||||
(14, N'doc-1024-1079-b838d1c6a81948a0ad275d93dca3b0f5.bin', N'Clientes/4/Etapas/1024/doc-1024-1079-b838d1c6a81948a0ad275d93dca3b0f5.bin', N'doc-1024-1079-b838d1c6a81948a0ad275d93dca3b0f5-08_Constancia_no_adeudo_Agua_Hermosillo.pdf', N'Clientes/4/Etapas/1024/doc-1024-1079-b838d1c6a81948a0ad275d93dca3b0f5-08_Constancia_no_adeudo_Agua_Hermosillo.pdf'),
|
||||
(15, N'doc-1024-1034-703001ed04cd4768805ea52d87c496ba.bin', N'Clientes/4/Etapas/1024/doc-1024-1034-703001ed04cd4768805ea52d87c496ba.bin', N'doc-1024-1034-703001ed04cd4768805ea52d87c496ba-09_Acta_Constitutiva_empresa.pdf', N'Clientes/4/Etapas/1024/doc-1024-1034-703001ed04cd4768805ea52d87c496ba-09_Acta_Constitutiva_empresa.pdf'),
|
||||
(16, N'doc-1024-1037-251daa4398b44a56bb95dcd11326c096.bin', N'Clientes/4/Etapas/1024/doc-1024-1037-251daa4398b44a56bb95dcd11326c096.bin', N'doc-1024-1037-251daa4398b44a56bb95dcd11326c096-10_Comprobante_domicilio.pdf', N'Clientes/4/Etapas/1024/doc-1024-1037-251daa4398b44a56bb95dcd11326c096-10_Comprobante_domicilio.pdf'),
|
||||
(17, N'doc-1024-1053-393eb44b58d24c128d4b5cc5090cc117.bin', N'Clientes/4/Etapas/1024/doc-1024-1053-393eb44b58d24c128d4b5cc5090cc117.bin', N'doc-1024-1053-393eb44b58d24c128d4b5cc5090cc117-02_Copia_escrituras.pdf', N'Clientes/4/Etapas/1024/doc-1024-1053-393eb44b58d24c128d4b5cc5090cc117-02_Copia_escrituras.pdf'),
|
||||
(18, N'doc-1024-1046-746dbd30e6f343338537a9e5e0b3ee59.bin', N'Clientes/4/Etapas/1024/doc-1024-1046-746dbd30e6f343338537a9e5e0b3ee59.bin', N'doc-1024-1046-746dbd30e6f343338537a9e5e0b3ee59-04_Dictamen_uso_suelo.pdf', N'Clientes/4/Etapas/1024/doc-1024-1046-746dbd30e6f343338537a9e5e0b3ee59-04_Dictamen_uso_suelo.pdf'),
|
||||
(19, N'doc-1024-1069-a126b490c1e24edbab7b044bf0549e77.bin', N'Clientes/4/Etapas/1024/doc-1024-1069-a126b490c1e24edbab7b044bf0549e77.bin', N'doc-1024-1069-a126b490c1e24edbab7b044bf0549e77-05_Carta_poder_representante_legal.pdf', N'Clientes/4/Etapas/1024/doc-1024-1069-a126b490c1e24edbab7b044bf0549e77-05_Carta_poder_representante_legal.pdf'),
|
||||
(20, N'doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d.bin', N'Clientes/4/Etapas/1024/doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d.bin', N'doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d-06_Constancia_no_adeudo_tesoreria.pdf', N'Clientes/4/Etapas/1024/doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d-06_Constancia_no_adeudo_tesoreria.pdf'),
|
||||
(21, N'doc-1024-1079-b25d1e7c30b0443cb66423c56c45c46c.bin', N'Clientes/4/Etapas/1024/doc-1024-1079-b25d1e7c30b0443cb66423c56c45c46c.bin', N'doc-1024-1079-b25d1e7c30b0443cb66423c56c45c46c-08_Constancia_no_adeudo_Agua_Hermosillo.pdf', N'Clientes/4/Etapas/1024/doc-1024-1079-b25d1e7c30b0443cb66423c56c45c46c-08_Constancia_no_adeudo_Agua_Hermosillo.pdf'),
|
||||
(22, N'doc-1024-1034-1f93d872f1c549988ab7b6f3f9b574f5.bin', N'Clientes/4/Etapas/1024/doc-1024-1034-1f93d872f1c549988ab7b6f3f9b574f5.bin', N'doc-1024-1034-1f93d872f1c549988ab7b6f3f9b574f5-09_Acta_Constitutiva_empresa.pdf', N'Clientes/4/Etapas/1024/doc-1024-1034-1f93d872f1c549988ab7b6f3f9b574f5-09_Acta_Constitutiva_empresa.pdf'),
|
||||
(23, N'doc-1024-1037-8ab956638dc442e49632d23459f4cb2f.bin', N'Clientes/4/Etapas/1024/doc-1024-1037-8ab956638dc442e49632d23459f4cb2f.bin', N'doc-1024-1037-8ab956638dc442e49632d23459f4cb2f-10_Comprobante_domicilio.pdf', N'Clientes/4/Etapas/1024/doc-1024-1037-8ab956638dc442e49632d23459f4cb2f-10_Comprobante_domicilio.pdf'),
|
||||
(24, N'doc-1024-1082-02f16c7d84fb4781ae5f7e5280422788.bin', N'Clientes/4/Etapas/1024/doc-1024-1082-02f16c7d84fb4781ae5f7e5280422788.bin', N'doc-1024-1082-02f16c7d84fb4781ae5f7e5280422788-11_Cedula_RFC.pdf', N'Clientes/4/Etapas/1024/doc-1024-1082-02f16c7d84fb4781ae5f7e5280422788-11_Cedula_RFC.pdf'),
|
||||
(25, N'doc-1024-1080-2337d1e8ab91435891a9332b5fd58262.bin', N'Clientes/4/Etapas/1024/doc-1024-1080-2337d1e8ab91435891a9332b5fd58262.bin', N'doc-1024-1080-2337d1e8ab91435891a9332b5fd58262-12_Autorizaciones_CIDUE.pdf', N'Clientes/4/Etapas/1024/doc-1024-1080-2337d1e8ab91435891a9332b5fd58262-12_Autorizaciones_CIDUE.pdf'),
|
||||
(26, N'doc-1024-1045-d447e83e74d14977957ca05ed2465c28.bin', N'Clientes/4/Etapas/1024/doc-1024-1045-d447e83e74d14977957ca05ed2465c28.bin', N'doc-1024-1045-d447e83e74d14977957ca05ed2465c28-Croquis.png', N'Clientes/4/Etapas/1024/doc-1024-1045-d447e83e74d14977957ca05ed2465c28-Croquis.png'),
|
||||
(27, N'doc-1024-1057-a00c7eb989a64e47baec43163755e90e.bin', N'Clientes/4/Etapas/1024/doc-1024-1057-a00c7eb989a64e47baec43163755e90e.bin', N'doc-1024-1057-a00c7eb989a64e47baec43163755e90e-Identificación Oficial.jpg', N'Clientes/4/Etapas/1024/doc-1024-1057-a00c7eb989a64e47baec43163755e90e-Identificación Oficial.jpg'),
|
||||
(28, N'doc-1024-1082-d9c8ba3f888249ae918d7dffbbf6764c.bin', N'Clientes/4/Etapas/1024/doc-1024-1082-d9c8ba3f888249ae918d7dffbbf6764c.bin', N'doc-1024-1082-d9c8ba3f888249ae918d7dffbbf6764c-11_Cedula_RFC.pdf', N'Clientes/4/Etapas/1024/doc-1024-1082-d9c8ba3f888249ae918d7dffbbf6764c-11_Cedula_RFC.pdf'),
|
||||
(29, N'doc-1024-1080-f691bac55afb4c6084d21a7d2ab8f3a2.bin', N'Clientes/4/Etapas/1024/doc-1024-1080-f691bac55afb4c6084d21a7d2ab8f3a2.bin', N'doc-1024-1080-f691bac55afb4c6084d21a7d2ab8f3a2-12_Autorizaciones_CIDUE.pdf', N'Clientes/4/Etapas/1024/doc-1024-1080-f691bac55afb4c6084d21a7d2ab8f3a2-12_Autorizaciones_CIDUE.pdf'),
|
||||
(30, N'doc-1024-1045-61379c693d6241898e7cf30cffd8658a.bin', N'Clientes/4/Etapas/1024/doc-1024-1045-61379c693d6241898e7cf30cffd8658a.bin', N'doc-1024-1045-61379c693d6241898e7cf30cffd8658a-Croquis.png', N'Clientes/4/Etapas/1024/doc-1024-1045-61379c693d6241898e7cf30cffd8658a-Croquis.png'),
|
||||
(31, N'doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3.bin', N'Clientes/4/Etapas/1024/doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3.bin', N'doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3-Identificación Oficial.jpg', N'Clientes/4/Etapas/1024/doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3-Identificación Oficial.jpg'),
|
||||
(32, N'doc-1024-1051-4037762f536045d59be5d818e2de6481.bin', N'Clientes/4/Etapas/1024/doc-1024-1051-4037762f536045d59be5d818e2de6481.bin', N'doc-1024-1051-4037762f536045d59be5d818e2de6481-01_Oficio_solicitud_obras_necesarias.pdf', N'Clientes/4/Etapas/1024/doc-1024-1051-4037762f536045d59be5d818e2de6481-01_Oficio_solicitud_obras_necesarias.pdf'),
|
||||
(33, N'doc-1028-1053-c2b0275d99924d3784d7aec44c0b8beb.bin', N'Clientes/4/Etapas/1028/doc-1028-1053-c2b0275d99924d3784d7aec44c0b8beb.bin', N'doc-1028-1053-c2b0275d99924d3784d7aec44c0b8beb-02_Copia_escrituras.pdf', N'Clientes/4/Etapas/1028/doc-1028-1053-c2b0275d99924d3784d7aec44c0b8beb-02_Copia_escrituras.pdf'),
|
||||
(34, N'doc-1028-1046-c98e40e90f3b41cdb810222241f3fc9a.bin', N'Clientes/4/Etapas/1028/doc-1028-1046-c98e40e90f3b41cdb810222241f3fc9a.bin', N'doc-1028-1046-c98e40e90f3b41cdb810222241f3fc9a-04_Dictamen_uso_suelo.pdf', N'Clientes/4/Etapas/1028/doc-1028-1046-c98e40e90f3b41cdb810222241f3fc9a-04_Dictamen_uso_suelo.pdf'),
|
||||
(35, N'doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713.bin', N'Clientes/4/Etapas/1028/doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713.bin', N'doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713-05_Carta_poder_representante_legal.pdf', N'Clientes/4/Etapas/1028/doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713-05_Carta_poder_representante_legal.pdf'),
|
||||
(36, N'doc-1028-1040-9bc673275f414c8d8d320e9bbf698072.bin', N'Clientes/4/Etapas/1028/doc-1028-1040-9bc673275f414c8d8d320e9bbf698072.bin', N'doc-1028-1040-9bc673275f414c8d8d320e9bbf698072-06_Constancia_no_adeudo_tesoreria.pdf', N'Clientes/4/Etapas/1028/doc-1028-1040-9bc673275f414c8d8d320e9bbf698072-06_Constancia_no_adeudo_tesoreria.pdf'),
|
||||
(37, N'doc-1028-1079-9be2156047bc4828b3e43b67fe3f6733.bin', N'Clientes/4/Etapas/1028/doc-1028-1079-9be2156047bc4828b3e43b67fe3f6733.bin', N'doc-1028-1079-9be2156047bc4828b3e43b67fe3f6733-08_Constancia_no_adeudo_Agua_Hermosillo.pdf', N'Clientes/4/Etapas/1028/doc-1028-1079-9be2156047bc4828b3e43b67fe3f6733-08_Constancia_no_adeudo_Agua_Hermosillo.pdf'),
|
||||
(38, N'doc-1028-1034-583b7009cab246ed8287200ce7082495.bin', N'Clientes/4/Etapas/1028/doc-1028-1034-583b7009cab246ed8287200ce7082495.bin', N'doc-1028-1034-583b7009cab246ed8287200ce7082495-09_Acta_Constitutiva_empresa.pdf', N'Clientes/4/Etapas/1028/doc-1028-1034-583b7009cab246ed8287200ce7082495-09_Acta_Constitutiva_empresa.pdf'),
|
||||
(39, N'doc-1028-1037-06adb9de68924cebafe0052e68b83915.bin', N'Clientes/4/Etapas/1028/doc-1028-1037-06adb9de68924cebafe0052e68b83915.bin', N'doc-1028-1037-06adb9de68924cebafe0052e68b83915-10_Comprobante_domicilio.pdf', N'Clientes/4/Etapas/1028/doc-1028-1037-06adb9de68924cebafe0052e68b83915-10_Comprobante_domicilio.pdf'),
|
||||
(40, N'doc-1028-1082-a21ee3513b5a4fe3b1f5f8f237ddc338.bin', N'Clientes/4/Etapas/1028/doc-1028-1082-a21ee3513b5a4fe3b1f5f8f237ddc338.bin', N'doc-1028-1082-a21ee3513b5a4fe3b1f5f8f237ddc338-11_Cedula_RFC.pdf', N'Clientes/4/Etapas/1028/doc-1028-1082-a21ee3513b5a4fe3b1f5f8f237ddc338-11_Cedula_RFC.pdf'),
|
||||
(41, N'doc-1028-1080-2fb84cc84de24223a9fcdeaf1fcd2470.bin', N'Clientes/4/Etapas/1028/doc-1028-1080-2fb84cc84de24223a9fcdeaf1fcd2470.bin', N'doc-1028-1080-2fb84cc84de24223a9fcdeaf1fcd2470-12_Autorizaciones_CIDUE.pdf', N'Clientes/4/Etapas/1028/doc-1028-1080-2fb84cc84de24223a9fcdeaf1fcd2470-12_Autorizaciones_CIDUE.pdf'),
|
||||
(42, N'doc-1028-1045-7f4784759eaf43f09e2a6433309008df.bin', N'Clientes/4/Etapas/1028/doc-1028-1045-7f4784759eaf43f09e2a6433309008df.bin', N'doc-1028-1045-7f4784759eaf43f09e2a6433309008df-Croquis.png', N'Clientes/4/Etapas/1028/doc-1028-1045-7f4784759eaf43f09e2a6433309008df-Croquis.png'),
|
||||
(43, N'doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c.bin', N'Clientes/4/Etapas/1028/doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c.bin', N'doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c-Identificación Oficial.jpg', N'Clientes/4/Etapas/1028/doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c-Identificación Oficial.jpg'),
|
||||
(44, N'doc-1028-1051-90d0c12832f9428abb0ac645be0c7156.bin', N'Clientes/4/Etapas/1028/doc-1028-1051-90d0c12832f9428abb0ac645be0c7156.bin', N'doc-1028-1051-90d0c12832f9428abb0ac645be0c7156-01_Oficio_solicitud_obras_necesarias.pdf', N'Clientes/4/Etapas/1028/doc-1028-1051-90d0c12832f9428abb0ac645be0c7156-01_Oficio_solicitud_obras_necesarias.pdf'),
|
||||
(45, N'doc-1022-1040-b6e404e6e7dc4597860185076b3289dd.bin', N'Clientes/1006/Etapas/1022/doc-1022-1040-b6e404e6e7dc4597860185076b3289dd.bin', N'doc-1022-1040-b6e404e6e7dc4597860185076b3289dd-VL103M user manual 20230921.pdf', N'Clientes/1006/Etapas/1022/doc-1022-1040-b6e404e6e7dc4597860185076b3289dd-VL103M user manual 20230921.pdf'),
|
||||
(46, N'doc-1022-1040-b6e404e6e7dc4597860185076b3289dd.bin', N'Clientes/1006/Etapas/1022/doc-1022-1040-b6e404e6e7dc4597860185076b3289dd.bin', N'doc-1022-1040-b6e404e6e7dc4597860185076b3289dd-VL103M user manual 20230921.pdf', N'Clientes/1006/Etapas/1022/doc-1022-1040-b6e404e6e7dc4597860185076b3289dd-VL103M user manual 20230921.pdf'),
|
||||
(47, N'doc-1022-1040-b6e404e6e7dc4597860185076b3289dd.bin', N'Clientes/1006/Etapas/1022/doc-1022-1040-b6e404e6e7dc4597860185076b3289dd.bin', N'doc-1022-1040-b6e404e6e7dc4597860185076b3289dd-VL103M user manual 20230921.pdf', N'Clientes/1006/Etapas/1022/doc-1022-1040-b6e404e6e7dc4597860185076b3289dd-VL103M user manual 20230921.pdf'),
|
||||
(48, N'doc-1022-1040-b6e404e6e7dc4597860185076b3289dd.bin', N'Clientes/1006/Etapas/1022/doc-1022-1040-b6e404e6e7dc4597860185076b3289dd.bin', N'doc-1022-1040-b6e404e6e7dc4597860185076b3289dd-VL103M user manual 20230921.pdf', N'Clientes/1006/Etapas/1022/doc-1022-1040-b6e404e6e7dc4597860185076b3289dd-VL103M user manual 20230921.pdf'),
|
||||
(49, N'doc-1022-1040-b6e404e6e7dc4597860185076b3289dd.bin', N'Clientes/1006/Etapas/1022/doc-1022-1040-b6e404e6e7dc4597860185076b3289dd.bin', N'doc-1022-1040-b6e404e6e7dc4597860185076b3289dd-VL103M user manual 20230921.pdf', N'Clientes/1006/Etapas/1022/doc-1022-1040-b6e404e6e7dc4597860185076b3289dd-VL103M user manual 20230921.pdf'),
|
||||
(50, N'doc-1022-1040-b6e404e6e7dc4597860185076b3289dd.bin', N'Clientes/1006/Etapas/1022/doc-1022-1040-b6e404e6e7dc4597860185076b3289dd.bin', N'doc-1022-1040-b6e404e6e7dc4597860185076b3289dd-VL103M user manual 20230921.pdf', N'Clientes/1006/Etapas/1022/doc-1022-1040-b6e404e6e7dc4597860185076b3289dd-VL103M user manual 20230921.pdf'),
|
||||
(51, N'doc-1022-1045-b8d0648d970b4cababc65f30c58b1ccb.bin', N'Clientes/1006/Etapas/1022/doc-1022-1045-b8d0648d970b4cababc65f30c58b1ccb.bin', N'doc-1022-1045-b8d0648d970b4cababc65f30c58b1ccb-BORRADOR EDISA.docx', N'Clientes/1006/Etapas/1022/doc-1022-1045-b8d0648d970b4cababc65f30c58b1ccb-BORRADOR EDISA.docx'),
|
||||
(52, N'doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422.bin', N'Clientes/1006/Etapas/1022/doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422.bin', N'doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422-65007.jpeg', N'Clientes/1006/Etapas/1022/doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422-65007.jpeg'),
|
||||
(53, N'doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422.bin', N'Clientes/1006/Etapas/1022/doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422.bin', N'doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422-65007.jpeg', N'Clientes/1006/Etapas/1022/doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422-65007.jpeg'),
|
||||
(54, N'doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422.bin', N'Clientes/1006/Etapas/1022/doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422.bin', N'doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422-65007.jpeg', N'Clientes/1006/Etapas/1022/doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422-65007.jpeg'),
|
||||
(55, N'doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422.bin', N'Clientes/1006/Etapas/1022/doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422.bin', N'doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422-65007.jpeg', N'Clientes/1006/Etapas/1022/doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422-65007.jpeg'),
|
||||
(56, N'doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422.bin', N'Clientes/1006/Etapas/1022/doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422.bin', N'doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422-65007.jpeg', N'Clientes/1006/Etapas/1022/doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422-65007.jpeg'),
|
||||
(57, N'doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422.bin', N'Clientes/1006/Etapas/1022/doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422.bin', N'doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422-65007.jpeg', N'Clientes/1006/Etapas/1022/doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422-65007.jpeg'),
|
||||
(58, N'doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422.bin', N'Clientes/1006/Etapas/1022/doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422.bin', N'doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422-65007.jpeg', N'Clientes/1006/Etapas/1022/doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422-65007.jpeg'),
|
||||
(59, N'doc-1024-1034-3212891ee8f847aba1e83b01fc27ef42.bin', N'Clientes/4/Etapas/1024/doc-1024-1034-3212891ee8f847aba1e83b01fc27ef42.bin', N'doc-1024-1034-3212891ee8f847aba1e83b01fc27ef42-09_Acta_Constitutiva_empresa.pdf', N'Clientes/4/Etapas/1024/doc-1024-1034-3212891ee8f847aba1e83b01fc27ef42-09_Acta_Constitutiva_empresa.pdf'),
|
||||
(60, N'doc-1024-1034-3212891ee8f847aba1e83b01fc27ef42.bin', N'Clientes/4/Etapas/1024/doc-1024-1034-3212891ee8f847aba1e83b01fc27ef42.bin', N'doc-1024-1034-3212891ee8f847aba1e83b01fc27ef42-09_Acta_Constitutiva_empresa.pdf', N'Clientes/4/Etapas/1024/doc-1024-1034-3212891ee8f847aba1e83b01fc27ef42-09_Acta_Constitutiva_empresa.pdf'),
|
||||
(61, N'doc-1024-1034-3212891ee8f847aba1e83b01fc27ef42.bin', N'Clientes/4/Etapas/1024/doc-1024-1034-3212891ee8f847aba1e83b01fc27ef42.bin', N'doc-1024-1034-3212891ee8f847aba1e83b01fc27ef42-09_Acta_Constitutiva_empresa.pdf', N'Clientes/4/Etapas/1024/doc-1024-1034-3212891ee8f847aba1e83b01fc27ef42-09_Acta_Constitutiva_empresa.pdf'),
|
||||
(62, N'doc-1024-1034-3212891ee8f847aba1e83b01fc27ef42.bin', N'Clientes/4/Etapas/1024/doc-1024-1034-3212891ee8f847aba1e83b01fc27ef42.bin', N'doc-1024-1034-3212891ee8f847aba1e83b01fc27ef42-09_Acta_Constitutiva_empresa.pdf', N'Clientes/4/Etapas/1024/doc-1024-1034-3212891ee8f847aba1e83b01fc27ef42-09_Acta_Constitutiva_empresa.pdf'),
|
||||
(63, N'doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8.bin', N'Clientes/4/Etapas/1024/doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8.bin', N'doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8-05_Carta_poder_representante_legal.pdf', N'Clientes/4/Etapas/1024/doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8-05_Carta_poder_representante_legal.pdf'),
|
||||
(64, N'doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8.bin', N'Clientes/4/Etapas/1024/doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8.bin', N'doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8-05_Carta_poder_representante_legal.pdf', N'Clientes/4/Etapas/1024/doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8-05_Carta_poder_representante_legal.pdf'),
|
||||
(65, N'doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8.bin', N'Clientes/4/Etapas/1024/doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8.bin', N'doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8-05_Carta_poder_representante_legal.pdf', N'Clientes/4/Etapas/1024/doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8-05_Carta_poder_representante_legal.pdf'),
|
||||
(66, N'doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8.bin', N'Clientes/4/Etapas/1024/doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8.bin', N'doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8-05_Carta_poder_representante_legal.pdf', N'Clientes/4/Etapas/1024/doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8-05_Carta_poder_representante_legal.pdf'),
|
||||
(67, N'doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8.bin', N'Clientes/4/Etapas/1024/doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8.bin', N'doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8-05_Carta_poder_representante_legal.pdf', N'Clientes/4/Etapas/1024/doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8-05_Carta_poder_representante_legal.pdf'),
|
||||
(68, N'doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971.bin', N'Clientes/4/Etapas/1024/doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971.bin', N'doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971-06_Constancia_no_adeudo_tesoreria.pdf', N'Clientes/4/Etapas/1024/doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971-06_Constancia_no_adeudo_tesoreria.pdf'),
|
||||
(69, N'doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971.bin', N'Clientes/4/Etapas/1024/doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971.bin', N'doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971-06_Constancia_no_adeudo_tesoreria.pdf', N'Clientes/4/Etapas/1024/doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971-06_Constancia_no_adeudo_tesoreria.pdf'),
|
||||
(70, N'doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971.bin', N'Clientes/4/Etapas/1024/doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971.bin', N'doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971-06_Constancia_no_adeudo_tesoreria.pdf', N'Clientes/4/Etapas/1024/doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971-06_Constancia_no_adeudo_tesoreria.pdf'),
|
||||
(71, N'doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971.bin', N'Clientes/4/Etapas/1024/doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971.bin', N'doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971-06_Constancia_no_adeudo_tesoreria.pdf', N'Clientes/4/Etapas/1024/doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971-06_Constancia_no_adeudo_tesoreria.pdf'),
|
||||
(72, N'doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971.bin', N'Clientes/4/Etapas/1024/doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971.bin', N'doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971-06_Constancia_no_adeudo_tesoreria.pdf', N'Clientes/4/Etapas/1024/doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971-06_Constancia_no_adeudo_tesoreria.pdf'),
|
||||
(73, N'doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971.bin', N'Clientes/4/Etapas/1024/doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971.bin', N'doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971-06_Constancia_no_adeudo_tesoreria.pdf', N'Clientes/4/Etapas/1024/doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971-06_Constancia_no_adeudo_tesoreria.pdf'),
|
||||
(74, N'doc-1024-1034-703001ed04cd4768805ea52d87c496ba.bin', N'Clientes/4/Etapas/1024/doc-1024-1034-703001ed04cd4768805ea52d87c496ba.bin', N'doc-1024-1034-703001ed04cd4768805ea52d87c496ba-09_Acta_Constitutiva_empresa.pdf', N'Clientes/4/Etapas/1024/doc-1024-1034-703001ed04cd4768805ea52d87c496ba-09_Acta_Constitutiva_empresa.pdf'),
|
||||
(75, N'doc-1024-1034-703001ed04cd4768805ea52d87c496ba.bin', N'Clientes/4/Etapas/1024/doc-1024-1034-703001ed04cd4768805ea52d87c496ba.bin', N'doc-1024-1034-703001ed04cd4768805ea52d87c496ba-09_Acta_Constitutiva_empresa.pdf', N'Clientes/4/Etapas/1024/doc-1024-1034-703001ed04cd4768805ea52d87c496ba-09_Acta_Constitutiva_empresa.pdf'),
|
||||
(76, N'doc-1024-1034-703001ed04cd4768805ea52d87c496ba.bin', N'Clientes/4/Etapas/1024/doc-1024-1034-703001ed04cd4768805ea52d87c496ba.bin', N'doc-1024-1034-703001ed04cd4768805ea52d87c496ba-09_Acta_Constitutiva_empresa.pdf', N'Clientes/4/Etapas/1024/doc-1024-1034-703001ed04cd4768805ea52d87c496ba-09_Acta_Constitutiva_empresa.pdf'),
|
||||
(77, N'doc-1024-1034-703001ed04cd4768805ea52d87c496ba.bin', N'Clientes/4/Etapas/1024/doc-1024-1034-703001ed04cd4768805ea52d87c496ba.bin', N'doc-1024-1034-703001ed04cd4768805ea52d87c496ba-09_Acta_Constitutiva_empresa.pdf', N'Clientes/4/Etapas/1024/doc-1024-1034-703001ed04cd4768805ea52d87c496ba-09_Acta_Constitutiva_empresa.pdf'),
|
||||
(78, N'doc-1024-1037-251daa4398b44a56bb95dcd11326c096.bin', N'Clientes/4/Etapas/1024/doc-1024-1037-251daa4398b44a56bb95dcd11326c096.bin', N'doc-1024-1037-251daa4398b44a56bb95dcd11326c096-10_Comprobante_domicilio.pdf', N'Clientes/4/Etapas/1024/doc-1024-1037-251daa4398b44a56bb95dcd11326c096-10_Comprobante_domicilio.pdf'),
|
||||
(79, N'doc-1024-1037-251daa4398b44a56bb95dcd11326c096.bin', N'Clientes/4/Etapas/1024/doc-1024-1037-251daa4398b44a56bb95dcd11326c096.bin', N'doc-1024-1037-251daa4398b44a56bb95dcd11326c096-10_Comprobante_domicilio.pdf', N'Clientes/4/Etapas/1024/doc-1024-1037-251daa4398b44a56bb95dcd11326c096-10_Comprobante_domicilio.pdf'),
|
||||
(80, N'doc-1024-1037-251daa4398b44a56bb95dcd11326c096.bin', N'Clientes/4/Etapas/1024/doc-1024-1037-251daa4398b44a56bb95dcd11326c096.bin', N'doc-1024-1037-251daa4398b44a56bb95dcd11326c096-10_Comprobante_domicilio.pdf', N'Clientes/4/Etapas/1024/doc-1024-1037-251daa4398b44a56bb95dcd11326c096-10_Comprobante_domicilio.pdf'),
|
||||
(81, N'doc-1024-1037-251daa4398b44a56bb95dcd11326c096.bin', N'Clientes/4/Etapas/1024/doc-1024-1037-251daa4398b44a56bb95dcd11326c096.bin', N'doc-1024-1037-251daa4398b44a56bb95dcd11326c096-10_Comprobante_domicilio.pdf', N'Clientes/4/Etapas/1024/doc-1024-1037-251daa4398b44a56bb95dcd11326c096-10_Comprobante_domicilio.pdf'),
|
||||
(82, N'doc-1024-1069-a126b490c1e24edbab7b044bf0549e77.bin', N'Clientes/4/Etapas/1024/doc-1024-1069-a126b490c1e24edbab7b044bf0549e77.bin', N'doc-1024-1069-a126b490c1e24edbab7b044bf0549e77-05_Carta_poder_representante_legal.pdf', N'Clientes/4/Etapas/1024/doc-1024-1069-a126b490c1e24edbab7b044bf0549e77-05_Carta_poder_representante_legal.pdf'),
|
||||
(83, N'doc-1024-1069-a126b490c1e24edbab7b044bf0549e77.bin', N'Clientes/4/Etapas/1024/doc-1024-1069-a126b490c1e24edbab7b044bf0549e77.bin', N'doc-1024-1069-a126b490c1e24edbab7b044bf0549e77-05_Carta_poder_representante_legal.pdf', N'Clientes/4/Etapas/1024/doc-1024-1069-a126b490c1e24edbab7b044bf0549e77-05_Carta_poder_representante_legal.pdf'),
|
||||
(84, N'doc-1024-1069-a126b490c1e24edbab7b044bf0549e77.bin', N'Clientes/4/Etapas/1024/doc-1024-1069-a126b490c1e24edbab7b044bf0549e77.bin', N'doc-1024-1069-a126b490c1e24edbab7b044bf0549e77-05_Carta_poder_representante_legal.pdf', N'Clientes/4/Etapas/1024/doc-1024-1069-a126b490c1e24edbab7b044bf0549e77-05_Carta_poder_representante_legal.pdf'),
|
||||
(85, N'doc-1024-1069-a126b490c1e24edbab7b044bf0549e77.bin', N'Clientes/4/Etapas/1024/doc-1024-1069-a126b490c1e24edbab7b044bf0549e77.bin', N'doc-1024-1069-a126b490c1e24edbab7b044bf0549e77-05_Carta_poder_representante_legal.pdf', N'Clientes/4/Etapas/1024/doc-1024-1069-a126b490c1e24edbab7b044bf0549e77-05_Carta_poder_representante_legal.pdf'),
|
||||
(86, N'doc-1024-1069-a126b490c1e24edbab7b044bf0549e77.bin', N'Clientes/4/Etapas/1024/doc-1024-1069-a126b490c1e24edbab7b044bf0549e77.bin', N'doc-1024-1069-a126b490c1e24edbab7b044bf0549e77-05_Carta_poder_representante_legal.pdf', N'Clientes/4/Etapas/1024/doc-1024-1069-a126b490c1e24edbab7b044bf0549e77-05_Carta_poder_representante_legal.pdf'),
|
||||
(87, N'doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d.bin', N'Clientes/4/Etapas/1024/doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d.bin', N'doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d-06_Constancia_no_adeudo_tesoreria.pdf', N'Clientes/4/Etapas/1024/doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d-06_Constancia_no_adeudo_tesoreria.pdf'),
|
||||
(88, N'doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d.bin', N'Clientes/4/Etapas/1024/doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d.bin', N'doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d-06_Constancia_no_adeudo_tesoreria.pdf', N'Clientes/4/Etapas/1024/doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d-06_Constancia_no_adeudo_tesoreria.pdf'),
|
||||
(89, N'doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d.bin', N'Clientes/4/Etapas/1024/doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d.bin', N'doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d-06_Constancia_no_adeudo_tesoreria.pdf', N'Clientes/4/Etapas/1024/doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d-06_Constancia_no_adeudo_tesoreria.pdf'),
|
||||
(90, N'doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d.bin', N'Clientes/4/Etapas/1024/doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d.bin', N'doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d-06_Constancia_no_adeudo_tesoreria.pdf', N'Clientes/4/Etapas/1024/doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d-06_Constancia_no_adeudo_tesoreria.pdf'),
|
||||
(91, N'doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d.bin', N'Clientes/4/Etapas/1024/doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d.bin', N'doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d-06_Constancia_no_adeudo_tesoreria.pdf', N'Clientes/4/Etapas/1024/doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d-06_Constancia_no_adeudo_tesoreria.pdf'),
|
||||
(92, N'doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d.bin', N'Clientes/4/Etapas/1024/doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d.bin', N'doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d-06_Constancia_no_adeudo_tesoreria.pdf', N'Clientes/4/Etapas/1024/doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d-06_Constancia_no_adeudo_tesoreria.pdf'),
|
||||
(93, N'doc-1024-1034-1f93d872f1c549988ab7b6f3f9b574f5.bin', N'Clientes/4/Etapas/1024/doc-1024-1034-1f93d872f1c549988ab7b6f3f9b574f5.bin', N'doc-1024-1034-1f93d872f1c549988ab7b6f3f9b574f5-09_Acta_Constitutiva_empresa.pdf', N'Clientes/4/Etapas/1024/doc-1024-1034-1f93d872f1c549988ab7b6f3f9b574f5-09_Acta_Constitutiva_empresa.pdf'),
|
||||
(94, N'doc-1024-1034-1f93d872f1c549988ab7b6f3f9b574f5.bin', N'Clientes/4/Etapas/1024/doc-1024-1034-1f93d872f1c549988ab7b6f3f9b574f5.bin', N'doc-1024-1034-1f93d872f1c549988ab7b6f3f9b574f5-09_Acta_Constitutiva_empresa.pdf', N'Clientes/4/Etapas/1024/doc-1024-1034-1f93d872f1c549988ab7b6f3f9b574f5-09_Acta_Constitutiva_empresa.pdf'),
|
||||
(95, N'doc-1024-1034-1f93d872f1c549988ab7b6f3f9b574f5.bin', N'Clientes/4/Etapas/1024/doc-1024-1034-1f93d872f1c549988ab7b6f3f9b574f5.bin', N'doc-1024-1034-1f93d872f1c549988ab7b6f3f9b574f5-09_Acta_Constitutiva_empresa.pdf', N'Clientes/4/Etapas/1024/doc-1024-1034-1f93d872f1c549988ab7b6f3f9b574f5-09_Acta_Constitutiva_empresa.pdf'),
|
||||
(96, N'doc-1024-1034-1f93d872f1c549988ab7b6f3f9b574f5.bin', N'Clientes/4/Etapas/1024/doc-1024-1034-1f93d872f1c549988ab7b6f3f9b574f5.bin', N'doc-1024-1034-1f93d872f1c549988ab7b6f3f9b574f5-09_Acta_Constitutiva_empresa.pdf', N'Clientes/4/Etapas/1024/doc-1024-1034-1f93d872f1c549988ab7b6f3f9b574f5-09_Acta_Constitutiva_empresa.pdf'),
|
||||
(97, N'doc-1024-1037-8ab956638dc442e49632d23459f4cb2f.bin', N'Clientes/4/Etapas/1024/doc-1024-1037-8ab956638dc442e49632d23459f4cb2f.bin', N'doc-1024-1037-8ab956638dc442e49632d23459f4cb2f-10_Comprobante_domicilio.pdf', N'Clientes/4/Etapas/1024/doc-1024-1037-8ab956638dc442e49632d23459f4cb2f-10_Comprobante_domicilio.pdf'),
|
||||
(98, N'doc-1024-1037-8ab956638dc442e49632d23459f4cb2f.bin', N'Clientes/4/Etapas/1024/doc-1024-1037-8ab956638dc442e49632d23459f4cb2f.bin', N'doc-1024-1037-8ab956638dc442e49632d23459f4cb2f-10_Comprobante_domicilio.pdf', N'Clientes/4/Etapas/1024/doc-1024-1037-8ab956638dc442e49632d23459f4cb2f-10_Comprobante_domicilio.pdf'),
|
||||
(99, N'doc-1024-1037-8ab956638dc442e49632d23459f4cb2f.bin', N'Clientes/4/Etapas/1024/doc-1024-1037-8ab956638dc442e49632d23459f4cb2f.bin', N'doc-1024-1037-8ab956638dc442e49632d23459f4cb2f-10_Comprobante_domicilio.pdf', N'Clientes/4/Etapas/1024/doc-1024-1037-8ab956638dc442e49632d23459f4cb2f-10_Comprobante_domicilio.pdf'),
|
||||
(100, N'doc-1024-1037-8ab956638dc442e49632d23459f4cb2f.bin', N'Clientes/4/Etapas/1024/doc-1024-1037-8ab956638dc442e49632d23459f4cb2f.bin', N'doc-1024-1037-8ab956638dc442e49632d23459f4cb2f-10_Comprobante_domicilio.pdf', N'Clientes/4/Etapas/1024/doc-1024-1037-8ab956638dc442e49632d23459f4cb2f-10_Comprobante_domicilio.pdf'),
|
||||
(101, N'doc-1024-1045-d447e83e74d14977957ca05ed2465c28.bin', N'Clientes/4/Etapas/1024/doc-1024-1045-d447e83e74d14977957ca05ed2465c28.bin', N'doc-1024-1045-d447e83e74d14977957ca05ed2465c28-Croquis.png', N'Clientes/4/Etapas/1024/doc-1024-1045-d447e83e74d14977957ca05ed2465c28-Croquis.png'),
|
||||
(102, N'doc-1024-1057-a00c7eb989a64e47baec43163755e90e.bin', N'Clientes/4/Etapas/1024/doc-1024-1057-a00c7eb989a64e47baec43163755e90e.bin', N'doc-1024-1057-a00c7eb989a64e47baec43163755e90e-Identificación Oficial.jpg', N'Clientes/4/Etapas/1024/doc-1024-1057-a00c7eb989a64e47baec43163755e90e-Identificación Oficial.jpg'),
|
||||
(103, N'doc-1024-1057-a00c7eb989a64e47baec43163755e90e.bin', N'Clientes/4/Etapas/1024/doc-1024-1057-a00c7eb989a64e47baec43163755e90e.bin', N'doc-1024-1057-a00c7eb989a64e47baec43163755e90e-Identificación Oficial.jpg', N'Clientes/4/Etapas/1024/doc-1024-1057-a00c7eb989a64e47baec43163755e90e-Identificación Oficial.jpg'),
|
||||
(104, N'doc-1024-1057-a00c7eb989a64e47baec43163755e90e.bin', N'Clientes/4/Etapas/1024/doc-1024-1057-a00c7eb989a64e47baec43163755e90e.bin', N'doc-1024-1057-a00c7eb989a64e47baec43163755e90e-Identificación Oficial.jpg', N'Clientes/4/Etapas/1024/doc-1024-1057-a00c7eb989a64e47baec43163755e90e-Identificación Oficial.jpg'),
|
||||
(105, N'doc-1024-1057-a00c7eb989a64e47baec43163755e90e.bin', N'Clientes/4/Etapas/1024/doc-1024-1057-a00c7eb989a64e47baec43163755e90e.bin', N'doc-1024-1057-a00c7eb989a64e47baec43163755e90e-Identificación Oficial.jpg', N'Clientes/4/Etapas/1024/doc-1024-1057-a00c7eb989a64e47baec43163755e90e-Identificación Oficial.jpg'),
|
||||
(106, N'doc-1024-1057-a00c7eb989a64e47baec43163755e90e.bin', N'Clientes/4/Etapas/1024/doc-1024-1057-a00c7eb989a64e47baec43163755e90e.bin', N'doc-1024-1057-a00c7eb989a64e47baec43163755e90e-Identificación Oficial.jpg', N'Clientes/4/Etapas/1024/doc-1024-1057-a00c7eb989a64e47baec43163755e90e-Identificación Oficial.jpg'),
|
||||
(107, N'doc-1024-1057-a00c7eb989a64e47baec43163755e90e.bin', N'Clientes/4/Etapas/1024/doc-1024-1057-a00c7eb989a64e47baec43163755e90e.bin', N'doc-1024-1057-a00c7eb989a64e47baec43163755e90e-Identificación Oficial.jpg', N'Clientes/4/Etapas/1024/doc-1024-1057-a00c7eb989a64e47baec43163755e90e-Identificación Oficial.jpg'),
|
||||
(108, N'doc-1024-1057-a00c7eb989a64e47baec43163755e90e.bin', N'Clientes/4/Etapas/1024/doc-1024-1057-a00c7eb989a64e47baec43163755e90e.bin', N'doc-1024-1057-a00c7eb989a64e47baec43163755e90e-Identificación Oficial.jpg', N'Clientes/4/Etapas/1024/doc-1024-1057-a00c7eb989a64e47baec43163755e90e-Identificación Oficial.jpg'),
|
||||
(109, N'doc-1024-1045-61379c693d6241898e7cf30cffd8658a.bin', N'Clientes/4/Etapas/1024/doc-1024-1045-61379c693d6241898e7cf30cffd8658a.bin', N'doc-1024-1045-61379c693d6241898e7cf30cffd8658a-Croquis.png', N'Clientes/4/Etapas/1024/doc-1024-1045-61379c693d6241898e7cf30cffd8658a-Croquis.png'),
|
||||
(110, N'doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3.bin', N'Clientes/4/Etapas/1024/doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3.bin', N'doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3-Identificación Oficial.jpg', N'Clientes/4/Etapas/1024/doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3-Identificación Oficial.jpg'),
|
||||
(111, N'doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3.bin', N'Clientes/4/Etapas/1024/doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3.bin', N'doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3-Identificación Oficial.jpg', N'Clientes/4/Etapas/1024/doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3-Identificación Oficial.jpg'),
|
||||
(112, N'doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3.bin', N'Clientes/4/Etapas/1024/doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3.bin', N'doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3-Identificación Oficial.jpg', N'Clientes/4/Etapas/1024/doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3-Identificación Oficial.jpg'),
|
||||
(113, N'doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3.bin', N'Clientes/4/Etapas/1024/doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3.bin', N'doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3-Identificación Oficial.jpg', N'Clientes/4/Etapas/1024/doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3-Identificación Oficial.jpg'),
|
||||
(114, N'doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3.bin', N'Clientes/4/Etapas/1024/doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3.bin', N'doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3-Identificación Oficial.jpg', N'Clientes/4/Etapas/1024/doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3-Identificación Oficial.jpg'),
|
||||
(115, N'doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3.bin', N'Clientes/4/Etapas/1024/doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3.bin', N'doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3-Identificación Oficial.jpg', N'Clientes/4/Etapas/1024/doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3-Identificación Oficial.jpg'),
|
||||
(116, N'doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3.bin', N'Clientes/4/Etapas/1024/doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3.bin', N'doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3-Identificación Oficial.jpg', N'Clientes/4/Etapas/1024/doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3-Identificación Oficial.jpg'),
|
||||
(117, N'doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713.bin', N'Clientes/4/Etapas/1028/doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713.bin', N'doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713-05_Carta_poder_representante_legal.pdf', N'Clientes/4/Etapas/1028/doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713-05_Carta_poder_representante_legal.pdf'),
|
||||
(118, N'doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713.bin', N'Clientes/4/Etapas/1028/doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713.bin', N'doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713-05_Carta_poder_representante_legal.pdf', N'Clientes/4/Etapas/1028/doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713-05_Carta_poder_representante_legal.pdf'),
|
||||
(119, N'doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713.bin', N'Clientes/4/Etapas/1028/doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713.bin', N'doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713-05_Carta_poder_representante_legal.pdf', N'Clientes/4/Etapas/1028/doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713-05_Carta_poder_representante_legal.pdf'),
|
||||
(120, N'doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713.bin', N'Clientes/4/Etapas/1028/doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713.bin', N'doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713-05_Carta_poder_representante_legal.pdf', N'Clientes/4/Etapas/1028/doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713-05_Carta_poder_representante_legal.pdf'),
|
||||
(121, N'doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713.bin', N'Clientes/4/Etapas/1028/doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713.bin', N'doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713-05_Carta_poder_representante_legal.pdf', N'Clientes/4/Etapas/1028/doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713-05_Carta_poder_representante_legal.pdf'),
|
||||
(122, N'doc-1028-1040-9bc673275f414c8d8d320e9bbf698072.bin', N'Clientes/4/Etapas/1028/doc-1028-1040-9bc673275f414c8d8d320e9bbf698072.bin', N'doc-1028-1040-9bc673275f414c8d8d320e9bbf698072-06_Constancia_no_adeudo_tesoreria.pdf', N'Clientes/4/Etapas/1028/doc-1028-1040-9bc673275f414c8d8d320e9bbf698072-06_Constancia_no_adeudo_tesoreria.pdf'),
|
||||
(123, N'doc-1028-1040-9bc673275f414c8d8d320e9bbf698072.bin', N'Clientes/4/Etapas/1028/doc-1028-1040-9bc673275f414c8d8d320e9bbf698072.bin', N'doc-1028-1040-9bc673275f414c8d8d320e9bbf698072-06_Constancia_no_adeudo_tesoreria.pdf', N'Clientes/4/Etapas/1028/doc-1028-1040-9bc673275f414c8d8d320e9bbf698072-06_Constancia_no_adeudo_tesoreria.pdf'),
|
||||
(124, N'doc-1028-1040-9bc673275f414c8d8d320e9bbf698072.bin', N'Clientes/4/Etapas/1028/doc-1028-1040-9bc673275f414c8d8d320e9bbf698072.bin', N'doc-1028-1040-9bc673275f414c8d8d320e9bbf698072-06_Constancia_no_adeudo_tesoreria.pdf', N'Clientes/4/Etapas/1028/doc-1028-1040-9bc673275f414c8d8d320e9bbf698072-06_Constancia_no_adeudo_tesoreria.pdf'),
|
||||
(125, N'doc-1028-1040-9bc673275f414c8d8d320e9bbf698072.bin', N'Clientes/4/Etapas/1028/doc-1028-1040-9bc673275f414c8d8d320e9bbf698072.bin', N'doc-1028-1040-9bc673275f414c8d8d320e9bbf698072-06_Constancia_no_adeudo_tesoreria.pdf', N'Clientes/4/Etapas/1028/doc-1028-1040-9bc673275f414c8d8d320e9bbf698072-06_Constancia_no_adeudo_tesoreria.pdf'),
|
||||
(126, N'doc-1028-1040-9bc673275f414c8d8d320e9bbf698072.bin', N'Clientes/4/Etapas/1028/doc-1028-1040-9bc673275f414c8d8d320e9bbf698072.bin', N'doc-1028-1040-9bc673275f414c8d8d320e9bbf698072-06_Constancia_no_adeudo_tesoreria.pdf', N'Clientes/4/Etapas/1028/doc-1028-1040-9bc673275f414c8d8d320e9bbf698072-06_Constancia_no_adeudo_tesoreria.pdf'),
|
||||
(127, N'doc-1028-1040-9bc673275f414c8d8d320e9bbf698072.bin', N'Clientes/4/Etapas/1028/doc-1028-1040-9bc673275f414c8d8d320e9bbf698072.bin', N'doc-1028-1040-9bc673275f414c8d8d320e9bbf698072-06_Constancia_no_adeudo_tesoreria.pdf', N'Clientes/4/Etapas/1028/doc-1028-1040-9bc673275f414c8d8d320e9bbf698072-06_Constancia_no_adeudo_tesoreria.pdf'),
|
||||
(128, N'doc-1028-1034-583b7009cab246ed8287200ce7082495.bin', N'Clientes/4/Etapas/1028/doc-1028-1034-583b7009cab246ed8287200ce7082495.bin', N'doc-1028-1034-583b7009cab246ed8287200ce7082495-09_Acta_Constitutiva_empresa.pdf', N'Clientes/4/Etapas/1028/doc-1028-1034-583b7009cab246ed8287200ce7082495-09_Acta_Constitutiva_empresa.pdf'),
|
||||
(129, N'doc-1028-1034-583b7009cab246ed8287200ce7082495.bin', N'Clientes/4/Etapas/1028/doc-1028-1034-583b7009cab246ed8287200ce7082495.bin', N'doc-1028-1034-583b7009cab246ed8287200ce7082495-09_Acta_Constitutiva_empresa.pdf', N'Clientes/4/Etapas/1028/doc-1028-1034-583b7009cab246ed8287200ce7082495-09_Acta_Constitutiva_empresa.pdf'),
|
||||
(130, N'doc-1028-1034-583b7009cab246ed8287200ce7082495.bin', N'Clientes/4/Etapas/1028/doc-1028-1034-583b7009cab246ed8287200ce7082495.bin', N'doc-1028-1034-583b7009cab246ed8287200ce7082495-09_Acta_Constitutiva_empresa.pdf', N'Clientes/4/Etapas/1028/doc-1028-1034-583b7009cab246ed8287200ce7082495-09_Acta_Constitutiva_empresa.pdf'),
|
||||
(131, N'doc-1028-1034-583b7009cab246ed8287200ce7082495.bin', N'Clientes/4/Etapas/1028/doc-1028-1034-583b7009cab246ed8287200ce7082495.bin', N'doc-1028-1034-583b7009cab246ed8287200ce7082495-09_Acta_Constitutiva_empresa.pdf', N'Clientes/4/Etapas/1028/doc-1028-1034-583b7009cab246ed8287200ce7082495-09_Acta_Constitutiva_empresa.pdf'),
|
||||
(132, N'doc-1028-1037-06adb9de68924cebafe0052e68b83915.bin', N'Clientes/4/Etapas/1028/doc-1028-1037-06adb9de68924cebafe0052e68b83915.bin', N'doc-1028-1037-06adb9de68924cebafe0052e68b83915-10_Comprobante_domicilio.pdf', N'Clientes/4/Etapas/1028/doc-1028-1037-06adb9de68924cebafe0052e68b83915-10_Comprobante_domicilio.pdf'),
|
||||
(133, N'doc-1028-1037-06adb9de68924cebafe0052e68b83915.bin', N'Clientes/4/Etapas/1028/doc-1028-1037-06adb9de68924cebafe0052e68b83915.bin', N'doc-1028-1037-06adb9de68924cebafe0052e68b83915-10_Comprobante_domicilio.pdf', N'Clientes/4/Etapas/1028/doc-1028-1037-06adb9de68924cebafe0052e68b83915-10_Comprobante_domicilio.pdf'),
|
||||
(134, N'doc-1028-1037-06adb9de68924cebafe0052e68b83915.bin', N'Clientes/4/Etapas/1028/doc-1028-1037-06adb9de68924cebafe0052e68b83915.bin', N'doc-1028-1037-06adb9de68924cebafe0052e68b83915-10_Comprobante_domicilio.pdf', N'Clientes/4/Etapas/1028/doc-1028-1037-06adb9de68924cebafe0052e68b83915-10_Comprobante_domicilio.pdf'),
|
||||
(135, N'doc-1028-1037-06adb9de68924cebafe0052e68b83915.bin', N'Clientes/4/Etapas/1028/doc-1028-1037-06adb9de68924cebafe0052e68b83915.bin', N'doc-1028-1037-06adb9de68924cebafe0052e68b83915-10_Comprobante_domicilio.pdf', N'Clientes/4/Etapas/1028/doc-1028-1037-06adb9de68924cebafe0052e68b83915-10_Comprobante_domicilio.pdf'),
|
||||
(136, N'doc-1028-1045-7f4784759eaf43f09e2a6433309008df.bin', N'Clientes/4/Etapas/1028/doc-1028-1045-7f4784759eaf43f09e2a6433309008df.bin', N'doc-1028-1045-7f4784759eaf43f09e2a6433309008df-Croquis.png', N'Clientes/4/Etapas/1028/doc-1028-1045-7f4784759eaf43f09e2a6433309008df-Croquis.png'),
|
||||
(137, N'doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c.bin', N'Clientes/4/Etapas/1028/doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c.bin', N'doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c-Identificación Oficial.jpg', N'Clientes/4/Etapas/1028/doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c-Identificación Oficial.jpg'),
|
||||
(138, N'doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c.bin', N'Clientes/4/Etapas/1028/doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c.bin', N'doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c-Identificación Oficial.jpg', N'Clientes/4/Etapas/1028/doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c-Identificación Oficial.jpg'),
|
||||
(139, N'doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c.bin', N'Clientes/4/Etapas/1028/doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c.bin', N'doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c-Identificación Oficial.jpg', N'Clientes/4/Etapas/1028/doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c-Identificación Oficial.jpg'),
|
||||
(140, N'doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c.bin', N'Clientes/4/Etapas/1028/doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c.bin', N'doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c-Identificación Oficial.jpg', N'Clientes/4/Etapas/1028/doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c-Identificación Oficial.jpg'),
|
||||
(141, N'doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c.bin', N'Clientes/4/Etapas/1028/doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c.bin', N'doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c-Identificación Oficial.jpg', N'Clientes/4/Etapas/1028/doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c-Identificación Oficial.jpg'),
|
||||
(142, N'doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c.bin', N'Clientes/4/Etapas/1028/doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c.bin', N'doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c-Identificación Oficial.jpg', N'Clientes/4/Etapas/1028/doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c-Identificación Oficial.jpg'),
|
||||
(143, N'doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c.bin', N'Clientes/4/Etapas/1028/doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c.bin', N'doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c-Identificación Oficial.jpg', N'Clientes/4/Etapas/1028/doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c-Identificación Oficial.jpg');
|
||||
|
||||
BEGIN TRY
|
||||
BEGIN TRANSACTION;
|
||||
|
||||
SELECT documento.*
|
||||
INTO #Antes
|
||||
FROM dbo.Tra_DocumentosSolicitud AS documento WITH (TABLOCKX, HOLDLOCK);
|
||||
|
||||
IF EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM @Mapeo AS mapeo
|
||||
LEFT JOIN #Antes AS documento ON documento.CveDocumentoSolicitud = mapeo.CveDocumentoSolicitud
|
||||
WHERE documento.CveDocumentoSolicitud IS NULL
|
||||
OR documento.NombreArchivoFisico IS NULL
|
||||
OR documento.RutaArchivo IS NULL
|
||||
OR NOT
|
||||
(
|
||||
(documento.NombreArchivoFisico = mapeo.NombreAnterior AND documento.RutaArchivo = mapeo.RutaAnterior)
|
||||
OR (documento.NombreArchivoFisico = mapeo.NombreNuevo AND documento.RutaArchivo = mapeo.RutaNueva)
|
||||
)
|
||||
)
|
||||
THROW 51000, 'El inventario cambió. Revisar antes de migrar.', 1;
|
||||
|
||||
IF EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM #Antes AS documento
|
||||
INNER JOIN @Mapeo AS mapeo ON documento.RutaArchivo = mapeo.RutaAnterior
|
||||
WHERE NOT EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM @Mapeo AS conocido
|
||||
WHERE conocido.CveDocumentoSolicitud = documento.CveDocumentoSolicitud
|
||||
)
|
||||
)
|
||||
THROW 51001, 'Existen nuevas referencias a los archivos anteriores.', 1;
|
||||
|
||||
UPDATE documento
|
||||
SET NombreArchivoFisico = mapeo.NombreNuevo,
|
||||
RutaArchivo = mapeo.RutaNueva
|
||||
FROM dbo.Tra_DocumentosSolicitud AS documento
|
||||
INNER JOIN @Mapeo AS mapeo ON documento.CveDocumentoSolicitud = mapeo.CveDocumentoSolicitud
|
||||
WHERE documento.NombreArchivoFisico = mapeo.NombreAnterior
|
||||
AND documento.RutaArchivo = mapeo.RutaAnterior;
|
||||
|
||||
DECLARE @Actualizados int = @@ROWCOUNT;
|
||||
|
||||
IF EXISTS
|
||||
(
|
||||
SELECT [CveDocumentoSolicitud], [CveSolicitud], [CveTipoDocumento], [NombreArchivo], [ContentType], [TamanoBytes], [ComentarioCliente], [ComentarioAdministrativo], [EsAprobado], [CveUsuarioCarga], [CveUsuarioRevisa], [FechaRevision], [FechaAlta], [UltimaNota], [FechaDocumento], [FechaVencimiento], [EsActivo], [CveFraccionamientoEtapa], [Vencido], [CveTipoTramite]
|
||||
FROM #Antes
|
||||
EXCEPT
|
||||
SELECT [CveDocumentoSolicitud], [CveSolicitud], [CveTipoDocumento], [NombreArchivo], [ContentType], [TamanoBytes], [ComentarioCliente], [ComentarioAdministrativo], [EsAprobado], [CveUsuarioCarga], [CveUsuarioRevisa], [FechaRevision], [FechaAlta], [UltimaNota], [FechaDocumento], [FechaVencimiento], [EsActivo], [CveFraccionamientoEtapa], [Vencido], [CveTipoTramite]
|
||||
FROM dbo.Tra_DocumentosSolicitud
|
||||
)
|
||||
OR EXISTS
|
||||
(
|
||||
SELECT [CveDocumentoSolicitud], [CveSolicitud], [CveTipoDocumento], [NombreArchivo], [ContentType], [TamanoBytes], [ComentarioCliente], [ComentarioAdministrativo], [EsAprobado], [CveUsuarioCarga], [CveUsuarioRevisa], [FechaRevision], [FechaAlta], [UltimaNota], [FechaDocumento], [FechaVencimiento], [EsActivo], [CveFraccionamientoEtapa], [Vencido], [CveTipoTramite]
|
||||
FROM dbo.Tra_DocumentosSolicitud
|
||||
EXCEPT
|
||||
SELECT [CveDocumentoSolicitud], [CveSolicitud], [CveTipoDocumento], [NombreArchivo], [ContentType], [TamanoBytes], [ComentarioCliente], [ComentarioAdministrativo], [EsAprobado], [CveUsuarioCarga], [CveUsuarioRevisa], [FechaRevision], [FechaAlta], [UltimaNota], [FechaDocumento], [FechaVencimiento], [EsActivo], [CveFraccionamientoEtapa], [Vencido], [CveTipoTramite]
|
||||
FROM #Antes
|
||||
)
|
||||
THROW 51002, 'Se detectó un cambio ajeno a las rutas.', 1;
|
||||
|
||||
IF EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM @Mapeo AS mapeo
|
||||
INNER JOIN dbo.Tra_DocumentosSolicitud AS documento ON documento.CveDocumentoSolicitud = mapeo.CveDocumentoSolicitud
|
||||
WHERE documento.NombreArchivoFisico <> mapeo.NombreNuevo
|
||||
OR documento.RutaArchivo <> mapeo.RutaNueva
|
||||
)
|
||||
THROW 51003, 'No se actualizaron todas las referencias.', 1;
|
||||
|
||||
COMMIT TRANSACTION;
|
||||
SELECT @Actualizados AS ReferenciasActualizadas;
|
||||
END TRY
|
||||
BEGIN CATCH
|
||||
IF XACT_STATE() <> 0
|
||||
ROLLBACK TRANSACTION;
|
||||
THROW;
|
||||
END CATCH;
|
||||
1440
Migracion_Transacciones_Aplicacion_20260722.sql
Normal file
1440
Migracion_Transacciones_Aplicacion_20260722.sql
Normal file
File diff suppressed because it is too large
Load Diff
164
Migracion_Validaciones_Registro_20260814.sql
Normal file
164
Migracion_Validaciones_Registro_20260814.sql
Normal file
@@ -0,0 +1,164 @@
|
||||
CREATE OR ALTER PROCEDURE [dbo].[PA_Sis_RegistroClienteUsuarioValidate]
|
||||
@NombreUsuario varchar(100),
|
||||
@CveUsuarioEjecuta int,
|
||||
@ErrorMostrar varchar(max) OUTPUT,
|
||||
@ErrorTipo int OUTPUT,
|
||||
@Return bit OUTPUT
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON;
|
||||
SELECT
|
||||
@ErrorMostrar = NULL,
|
||||
@ErrorTipo = 0,
|
||||
@Return = 0;
|
||||
|
||||
BEGIN TRY
|
||||
SET @NombreUsuario = LTRIM(RTRIM(@NombreUsuario));
|
||||
|
||||
IF NULLIF(@NombreUsuario, '') IS NULL
|
||||
BEGIN
|
||||
SET @ErrorMostrar = 'Captura el nombre de usuario para verificarlo.';
|
||||
SET @ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
IF EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM [dbo].[Sis_Usuarios]
|
||||
WHERE [NombreUsuario] = @NombreUsuario
|
||||
)
|
||||
BEGIN
|
||||
SET @ErrorMostrar = 'El nombre de usuario ya se encuentra registrado. Elige uno diferente.';
|
||||
SET @ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
SET @Return = 1;
|
||||
END TRY
|
||||
BEGIN CATCH
|
||||
SET @ErrorMostrar = 'Ocurrió un error al validar el nombre de usuario; favor de contactar a Sistemas.';
|
||||
SET @ErrorTipo = 1;
|
||||
SET @Return = 0;
|
||||
|
||||
DECLARE @ErrorTecnico nvarchar(2048) = CONCAT(
|
||||
'Número: ', ERROR_NUMBER(),
|
||||
'; Procedimiento: ', COALESCE(ERROR_PROCEDURE(), 'PA_Sis_RegistroClienteUsuarioValidate'),
|
||||
'; Línea: ', ERROR_LINE(),
|
||||
'; Detalle: ', ERROR_MESSAGE()
|
||||
);
|
||||
|
||||
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
|
||||
END CATCH;
|
||||
END;
|
||||
GO
|
||||
|
||||
CREATE OR ALTER PROCEDURE [dbo].[PA_Sis_RegistroClienteCorreoValidate]
|
||||
@CorreoElectronico varchar(255),
|
||||
@CveUsuarioEjecuta int,
|
||||
@ErrorMostrar varchar(max) OUTPUT,
|
||||
@ErrorTipo int OUTPUT,
|
||||
@Return bit OUTPUT
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON;
|
||||
SELECT
|
||||
@ErrorMostrar = NULL,
|
||||
@ErrorTipo = 0,
|
||||
@Return = 0;
|
||||
|
||||
BEGIN TRY
|
||||
SET @CorreoElectronico = LOWER(LTRIM(RTRIM(@CorreoElectronico)));
|
||||
|
||||
IF NULLIF(@CorreoElectronico, '') IS NULL
|
||||
BEGIN
|
||||
SET @ErrorMostrar = 'Captura el correo electrónico para verificarlo.';
|
||||
SET @ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
IF EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM [dbo].[Sis_Usuarios]
|
||||
WHERE LOWER([CorreoElectronico]) = @CorreoElectronico
|
||||
)
|
||||
BEGIN
|
||||
SET @ErrorMostrar = 'El correo electrónico ya se encuentra registrado. Contacta a Soporte Técnico antes de continuar.';
|
||||
SET @ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
SET @Return = 1;
|
||||
END TRY
|
||||
BEGIN CATCH
|
||||
SET @ErrorMostrar = 'Ocurrió un error al validar el correo; favor de contactar a Sistemas.';
|
||||
SET @ErrorTipo = 1;
|
||||
SET @Return = 0;
|
||||
|
||||
DECLARE @ErrorTecnico nvarchar(2048) = CONCAT(
|
||||
'Número: ', ERROR_NUMBER(),
|
||||
'; Procedimiento: ', COALESCE(ERROR_PROCEDURE(), 'PA_Sis_RegistroClienteCorreoValidate'),
|
||||
'; Línea: ', ERROR_LINE(),
|
||||
'; Detalle: ', ERROR_MESSAGE()
|
||||
);
|
||||
|
||||
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
|
||||
END CATCH;
|
||||
END;
|
||||
GO
|
||||
|
||||
CREATE OR ALTER PROCEDURE [dbo].[PA_Sis_RegistroClienteRFCValidate]
|
||||
@RFC varchar(15),
|
||||
@CveUsuarioEjecuta int,
|
||||
@ErrorMostrar varchar(max) OUTPUT,
|
||||
@ErrorTipo int OUTPUT,
|
||||
@Return bit OUTPUT
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON;
|
||||
SELECT
|
||||
@ErrorMostrar = NULL,
|
||||
@ErrorTipo = 0,
|
||||
@Return = 0;
|
||||
|
||||
BEGIN TRY
|
||||
SET @RFC = UPPER(REPLACE(LTRIM(RTRIM(@RFC)), ' ', ''));
|
||||
|
||||
IF NULLIF(@RFC, '') IS NULL
|
||||
BEGIN
|
||||
SET @ErrorMostrar = 'Captura el RFC para verificarlo.';
|
||||
SET @ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
IF EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM [dbo].[Clientes]
|
||||
WHERE UPPER(REPLACE(LTRIM(RTRIM([RFC])), ' ', '')) = @RFC
|
||||
)
|
||||
BEGIN
|
||||
SET @ErrorMostrar = 'El RFC ya se encuentra registrado. Contacta a Soporte Técnico para solicitar acceso.';
|
||||
SET @ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
SET @Return = 1;
|
||||
END TRY
|
||||
BEGIN CATCH
|
||||
SET @ErrorMostrar = 'Ocurrió un error al validar el RFC; favor de contactar a Sistemas.';
|
||||
SET @ErrorTipo = 1;
|
||||
SET @Return = 0;
|
||||
|
||||
DECLARE @ErrorTecnico nvarchar(2048) = CONCAT(
|
||||
'Número: ', ERROR_NUMBER(),
|
||||
'; Procedimiento: ', COALESCE(ERROR_PROCEDURE(), 'PA_Sis_RegistroClienteRFCValidate'),
|
||||
'; Línea: ', ERROR_LINE(),
|
||||
'; Detalle: ', ERROR_MESSAGE()
|
||||
);
|
||||
|
||||
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
|
||||
END CATCH;
|
||||
END;
|
||||
GO
|
||||
365
Optimiza_Bitacora_Listado_Detalle_20260827.sql
Normal file
365
Optimiza_Bitacora_Listado_Detalle_20260827.sql
Normal file
@@ -0,0 +1,365 @@
|
||||
SET NOCOUNT ON;
|
||||
GO
|
||||
|
||||
/*
|
||||
El resumen se genera a partir de la definición instalada para conservar
|
||||
ajustes locales del procedimiento original. Solamente se elimina el bloque
|
||||
que consulta campos y relaciones internas de cada movimiento.
|
||||
*/
|
||||
DECLARE @DefinicionResumen nvarchar(max) =
|
||||
OBJECT_DEFINITION(
|
||||
OBJECT_ID(N'dbo.PA_Bit_BitacoraListByRelations'));
|
||||
|
||||
IF @DefinicionResumen IS NULL
|
||||
BEGIN
|
||||
THROW 50000,
|
||||
'No existe dbo.PA_Bit_BitacoraListByRelations.',
|
||||
1;
|
||||
END;
|
||||
|
||||
DECLARE @InicioProcedimiento int = CHARINDEX(
|
||||
N'PROCEDURE',
|
||||
UPPER(@DefinicionResumen));
|
||||
DECLARE @InicioDetalle int = CHARINDEX(
|
||||
N'CREATE TABLE #CamposPagina',
|
||||
@DefinicionResumen);
|
||||
DECLARE @FinDetalle int = CHARINDEX(
|
||||
N'CREATE TABLE #RelacionesVisuales',
|
||||
@DefinicionResumen);
|
||||
|
||||
IF @InicioProcedimiento = 0
|
||||
OR @InicioDetalle = 0
|
||||
OR @FinDetalle <= @InicioDetalle
|
||||
BEGIN
|
||||
THROW 50001,
|
||||
'La definición instalada de la consulta de bitácora no tiene la estructura esperada.',
|
||||
1;
|
||||
END;
|
||||
|
||||
SET @DefinicionResumen = STUFF(
|
||||
@DefinicionResumen,
|
||||
@InicioDetalle,
|
||||
@FinDetalle - @InicioDetalle,
|
||||
N'');
|
||||
|
||||
SET @DefinicionResumen = STUFF(
|
||||
@DefinicionResumen,
|
||||
1,
|
||||
@InicioProcedimiento - 1,
|
||||
N'CREATE OR ALTER ');
|
||||
|
||||
SET @DefinicionResumen = REPLACE(
|
||||
@DefinicionResumen,
|
||||
N'dbo.PA_Bit_BitacoraListByRelations',
|
||||
N'dbo.PA_Bit_BitacoraResumenListByRelations');
|
||||
|
||||
EXEC sys.sp_executesql @DefinicionResumen;
|
||||
GO
|
||||
|
||||
CREATE OR ALTER PROCEDURE dbo.PA_Bit_BitacoraDetalleGet
|
||||
@CveBitacora bigint,
|
||||
@CveUsuarioEjecuta int,
|
||||
@ErrorMostrar varchar(max) OUTPUT,
|
||||
@ErrorTipo int OUTPUT,
|
||||
@Return bit OUTPUT
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON;
|
||||
|
||||
SELECT
|
||||
@ErrorMostrar = NULL,
|
||||
@ErrorTipo = 0,
|
||||
@Return = 0;
|
||||
|
||||
BEGIN TRY
|
||||
IF @CveBitacora <= 0
|
||||
BEGIN
|
||||
SET @ErrorMostrar =
|
||||
'La clave del movimiento de bitácora no es válida.';
|
||||
SET @ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
DECLARE @EsAdministrador bit = 0;
|
||||
DECLARE @EsDesarrollador bit = 0;
|
||||
|
||||
SELECT
|
||||
@EsAdministrador = CASE
|
||||
WHEN R.NombreRol IN
|
||||
(
|
||||
'SuperUsuario',
|
||||
'Administrador'
|
||||
) THEN 1
|
||||
ELSE 0
|
||||
END,
|
||||
@EsDesarrollador = CASE
|
||||
WHEN R.NombreRol = 'Empresa' THEN 1
|
||||
ELSE 0
|
||||
END
|
||||
FROM dbo.Sis_Usuarios AS U
|
||||
INNER JOIN dbo.Sis_Roles AS R
|
||||
ON R.CveRol = U.CveRol
|
||||
WHERE U.CveUsuario = @CveUsuarioEjecuta
|
||||
AND U.Activo = 1
|
||||
AND R.Activo = 1;
|
||||
|
||||
IF NOT EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM dbo.Bit_Bitacora AS B
|
||||
WHERE B.CveBitacora = @CveBitacora
|
||||
AND
|
||||
(
|
||||
@EsAdministrador = 1
|
||||
OR
|
||||
(
|
||||
@EsDesarrollador = 1
|
||||
AND EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM dbo.Bit_BitacoraRelaciones AS BRCliente
|
||||
INNER JOIN dbo.Bit_Tablas AS TCliente
|
||||
ON TCliente.CveTabla =
|
||||
BRCliente.CveTablaRelacionada
|
||||
INNER JOIN dbo.Bit_Campos AS CCliente
|
||||
ON CCliente.CveCampo =
|
||||
BRCliente.CveCampoRelacion
|
||||
AND CCliente.CveTabla = TCliente.CveTabla
|
||||
INNER JOIN dbo.Sis_UsuariosClientes AS UC
|
||||
ON UC.CveCliente =
|
||||
BRCliente.ValorRelacionNumero
|
||||
AND UC.CveUsuario = @CveUsuarioEjecuta
|
||||
AND UC.Activo = 1
|
||||
WHERE BRCliente.CveBitacora = B.CveBitacora
|
||||
AND BRCliente.VisibleDesarrollador = 1
|
||||
AND TCliente.NombreTablaSQL = 'Clientes'
|
||||
AND CCliente.NombreCampoSQL = 'CveCliente'
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
BEGIN
|
||||
SET @ErrorMostrar =
|
||||
'No se encontró el movimiento de bitácora solicitado.';
|
||||
SET @ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
SELECT
|
||||
B.CveBitacora,
|
||||
B.CveTabla,
|
||||
T.NombreTablaSQL,
|
||||
T.NombreMostrar AS NombreTabla,
|
||||
B.CveTipoMovimiento,
|
||||
M.Nombre AS TipoMovimiento,
|
||||
B.CveDefinicionAccion,
|
||||
A.NombreAccion,
|
||||
A.DescripcionAccion,
|
||||
B.CveUsuarioEjecuta,
|
||||
COALESCE(
|
||||
NULLIF(U.NombreUsuario, ''),
|
||||
CONCAT('(', B.CveUsuarioEjecuta, ') Eliminado')
|
||||
) AS NombreUsuarioEjecuta,
|
||||
B.CveUsuarioAutoriza,
|
||||
B.FechaAutorizacion,
|
||||
B.LlaveRegistro,
|
||||
B.DescripcionMovimiento,
|
||||
B.FechaMovimiento,
|
||||
B.DireccionIP,
|
||||
B.NombreEquipo,
|
||||
B.Modulo
|
||||
FROM dbo.Bit_Bitacora AS B
|
||||
INNER JOIN dbo.Bit_Tablas AS T
|
||||
ON T.CveTabla = B.CveTabla
|
||||
INNER JOIN dbo.Bit_TiposMovimiento AS M
|
||||
ON M.CveTipoMovimiento = B.CveTipoMovimiento
|
||||
LEFT JOIN dbo.Bit_DefinicionesAccion AS A
|
||||
ON A.CveDefinicionAccion = B.CveDefinicionAccion
|
||||
LEFT JOIN dbo.Sis_Usuarios AS U
|
||||
ON U.CveUsuario = B.CveUsuarioEjecuta
|
||||
WHERE B.CveBitacora = @CveBitacora;
|
||||
|
||||
CREATE TABLE #CamposDetalle
|
||||
(
|
||||
CveBitacoraCampo bigint NOT NULL PRIMARY KEY,
|
||||
CveBitacora bigint NOT NULL,
|
||||
CveCampo int NOT NULL,
|
||||
NombreCampoSQL varchar(128)
|
||||
COLLATE Modern_Spanish_CS_AS NOT NULL,
|
||||
NombreMostrar varchar(150)
|
||||
COLLATE Modern_Spanish_CS_AS NOT NULL,
|
||||
ValorAnterior nvarchar(max)
|
||||
COLLATE Modern_Spanish_CS_AS NULL,
|
||||
ValorNuevo nvarchar(max)
|
||||
COLLATE Modern_Spanish_CS_AS NULL,
|
||||
ValorAnteriorMostrar nvarchar(max)
|
||||
COLLATE Modern_Spanish_CS_AS NULL,
|
||||
ValorNuevoMostrar nvarchar(max)
|
||||
COLLATE Modern_Spanish_CS_AS NULL
|
||||
);
|
||||
|
||||
INSERT INTO #CamposDetalle
|
||||
(
|
||||
CveBitacoraCampo,
|
||||
CveBitacora,
|
||||
CveCampo,
|
||||
NombreCampoSQL,
|
||||
NombreMostrar,
|
||||
ValorAnterior,
|
||||
ValorNuevo,
|
||||
ValorAnteriorMostrar,
|
||||
ValorNuevoMostrar
|
||||
)
|
||||
SELECT
|
||||
BC.CveBitacoraCampo,
|
||||
BC.CveBitacora,
|
||||
BC.CveCampo,
|
||||
C.NombreCampoSQL,
|
||||
C.NombreMostrar,
|
||||
BC.ValorAnterior,
|
||||
BC.ValorNuevo,
|
||||
BC.ValorAnterior,
|
||||
BC.ValorNuevo
|
||||
FROM dbo.Bit_BitacoraCampos AS BC
|
||||
INNER JOIN dbo.Bit_Campos AS C
|
||||
ON C.CveCampo = BC.CveCampo
|
||||
WHERE BC.CveBitacora = @CveBitacora
|
||||
AND
|
||||
(
|
||||
@EsAdministrador = 1
|
||||
OR C.MostrarEnBitacora = 1
|
||||
);
|
||||
|
||||
DECLARE @CveCampoOrigenReferencia int;
|
||||
DECLARE @NombreTablaReferencia varchar(128);
|
||||
DECLARE @NombreCampoLlaveReferencia varchar(128);
|
||||
DECLARE @NombreCampoMostrarReferencia varchar(128);
|
||||
DECLARE @SqlCampoReferencia nvarchar(max);
|
||||
|
||||
DECLARE CursorCamposReferencia CURSOR LOCAL FAST_FORWARD FOR
|
||||
SELECT DISTINCT
|
||||
CO.CveCampo,
|
||||
TR.NombreTablaSQL,
|
||||
CL.NombreCampoSQL,
|
||||
CM.NombreCampoSQL
|
||||
FROM #CamposDetalle AS CD
|
||||
INNER JOIN dbo.Bit_Campos AS CO
|
||||
ON CO.CveCampo = CD.CveCampo
|
||||
AND CO.Activo = 1
|
||||
INNER JOIN dbo.Bit_Tablas AS TR
|
||||
ON TR.CveTabla = CO.CveTablaReferencia
|
||||
AND TR.Activo = 1
|
||||
AND TR.NombreCampoLlaveSQL IS NOT NULL
|
||||
INNER JOIN dbo.Bit_Campos AS CL
|
||||
ON CL.CveTabla = TR.CveTabla
|
||||
AND CL.NombreCampoSQL = TR.NombreCampoLlaveSQL
|
||||
AND CL.Activo = 1
|
||||
INNER JOIN dbo.Bit_Campos AS CM
|
||||
ON CM.CveCampo = CO.CveCampoMostrarReferencia
|
||||
AND CM.CveTabla = TR.CveTabla
|
||||
AND CM.MostrarEnBitacora = 1
|
||||
AND CM.Activo = 1
|
||||
INNER JOIN sys.schemas AS SC
|
||||
ON SC.name = 'dbo'
|
||||
INNER JOIN sys.tables AS ST
|
||||
ON ST.schema_id = SC.schema_id
|
||||
AND ST.name COLLATE Modern_Spanish_CS_AS = TR.NombreTablaSQL
|
||||
INNER JOIN sys.columns AS SCL
|
||||
ON SCL.object_id = ST.object_id
|
||||
AND SCL.name COLLATE Modern_Spanish_CS_AS =
|
||||
CL.NombreCampoSQL
|
||||
INNER JOIN sys.columns AS SCM
|
||||
ON SCM.object_id = ST.object_id
|
||||
AND SCM.name COLLATE Modern_Spanish_CS_AS =
|
||||
CM.NombreCampoSQL;
|
||||
|
||||
OPEN CursorCamposReferencia;
|
||||
|
||||
FETCH NEXT FROM CursorCamposReferencia INTO
|
||||
@CveCampoOrigenReferencia,
|
||||
@NombreTablaReferencia,
|
||||
@NombreCampoLlaveReferencia,
|
||||
@NombreCampoMostrarReferencia;
|
||||
|
||||
WHILE @@FETCH_STATUS = 0
|
||||
BEGIN
|
||||
SET @SqlCampoReferencia = N'
|
||||
UPDATE CD
|
||||
SET
|
||||
CD.ValorAnteriorMostrar = CASE
|
||||
WHEN CD.ValorAnterior IS NULL THEN NULL
|
||||
WHEN VA.' + QUOTENAME(@NombreCampoLlaveReferencia) + N' IS NULL
|
||||
THEN CONCAT(N''('', CD.ValorAnterior, N'') Eliminada'')
|
||||
WHEN NULLIF(CONVERT(nvarchar(max), VA.' + QUOTENAME(@NombreCampoMostrarReferencia) + N'), N'''') IS NULL
|
||||
THEN CONCAT(N''('', CD.ValorAnterior, N'')'')
|
||||
ELSE CONVERT(nvarchar(max), VA.' + QUOTENAME(@NombreCampoMostrarReferencia) + N')
|
||||
END,
|
||||
CD.ValorNuevoMostrar = CASE
|
||||
WHEN CD.ValorNuevo IS NULL THEN NULL
|
||||
WHEN VN.' + QUOTENAME(@NombreCampoLlaveReferencia) + N' IS NULL
|
||||
THEN CONCAT(N''('', CD.ValorNuevo, N'') Eliminada'')
|
||||
WHEN NULLIF(CONVERT(nvarchar(max), VN.' + QUOTENAME(@NombreCampoMostrarReferencia) + N'), N'''') IS NULL
|
||||
THEN CONCAT(N''('', CD.ValorNuevo, N'')'')
|
||||
ELSE CONVERT(nvarchar(max), VN.' + QUOTENAME(@NombreCampoMostrarReferencia) + N')
|
||||
END
|
||||
FROM #CamposDetalle AS CD
|
||||
LEFT JOIN dbo.' + QUOTENAME(@NombreTablaReferencia) + N' AS VA
|
||||
ON CONVERT(nvarchar(250), VA.' + QUOTENAME(@NombreCampoLlaveReferencia) + N')
|
||||
COLLATE Modern_Spanish_CS_AS =
|
||||
CD.ValorAnterior COLLATE Modern_Spanish_CS_AS
|
||||
LEFT JOIN dbo.' + QUOTENAME(@NombreTablaReferencia) + N' AS VN
|
||||
ON CONVERT(nvarchar(250), VN.' + QUOTENAME(@NombreCampoLlaveReferencia) + N')
|
||||
COLLATE Modern_Spanish_CS_AS =
|
||||
CD.ValorNuevo COLLATE Modern_Spanish_CS_AS
|
||||
WHERE CD.CveCampo = @CveCampoOrigen;';
|
||||
|
||||
EXEC sys.sp_executesql
|
||||
@SqlCampoReferencia,
|
||||
N'@CveCampoOrigen int',
|
||||
@CveCampoOrigen = @CveCampoOrigenReferencia;
|
||||
|
||||
FETCH NEXT FROM CursorCamposReferencia INTO
|
||||
@CveCampoOrigenReferencia,
|
||||
@NombreTablaReferencia,
|
||||
@NombreCampoLlaveReferencia,
|
||||
@NombreCampoMostrarReferencia;
|
||||
END;
|
||||
|
||||
CLOSE CursorCamposReferencia;
|
||||
DEALLOCATE CursorCamposReferencia;
|
||||
|
||||
SELECT
|
||||
CveBitacoraCampo,
|
||||
CveBitacora,
|
||||
CveCampo,
|
||||
NombreCampoSQL,
|
||||
NombreMostrar,
|
||||
ValorAnterior,
|
||||
ValorNuevo,
|
||||
ValorAnteriorMostrar,
|
||||
ValorNuevoMostrar
|
||||
FROM #CamposDetalle
|
||||
ORDER BY CveBitacoraCampo;
|
||||
|
||||
SET @Return = 1;
|
||||
END TRY
|
||||
BEGIN CATCH
|
||||
SET @ErrorMostrar =
|
||||
'Ocurrió un error al consultar el detalle de la bitácora; favor de contactar a Sistemas.';
|
||||
SET @ErrorTipo = 1;
|
||||
SET @Return = 0;
|
||||
|
||||
DECLARE @ErrorTecnico nvarchar(2048) = CONCAT(
|
||||
'Número: ', ERROR_NUMBER(),
|
||||
'; Procedimiento: ', COALESCE(
|
||||
ERROR_PROCEDURE(),
|
||||
'PA_Bit_BitacoraDetalleGet'
|
||||
),
|
||||
'; Línea: ', ERROR_LINE(),
|
||||
'; Detalle: ', ERROR_MESSAGE()
|
||||
);
|
||||
|
||||
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
|
||||
END CATCH;
|
||||
END;
|
||||
GO
|
||||
185
PA_Vta_FraccionamientoPagoPendienteList_Actualizar_20260901.sql
Normal file
185
PA_Vta_FraccionamientoPagoPendienteList_Actualizar_20260901.sql
Normal file
@@ -0,0 +1,185 @@
|
||||
CREATE OR ALTER PROCEDURE dbo.PA_Vta_FraccionamientoPagoPendienteList
|
||||
@CveFraccionamiento int,
|
||||
@CveUsuarioEjecuta int,
|
||||
@ErrorMostrar varchar(max) OUTPUT,
|
||||
@ErrorTipo int OUTPUT,
|
||||
@Return bit OUTPUT
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON;
|
||||
|
||||
SELECT
|
||||
@ErrorMostrar = NULL,
|
||||
@ErrorTipo = 0,
|
||||
@Return = 0;
|
||||
|
||||
BEGIN TRY
|
||||
IF NOT EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM dbo.Fraccionamientos
|
||||
WHERE CveFraccionamiento = @CveFraccionamiento
|
||||
)
|
||||
BEGIN
|
||||
SELECT
|
||||
@ErrorMostrar = 'El fraccionamiento solicitado no existe.',
|
||||
@ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
;WITH Conceptos AS
|
||||
(
|
||||
SELECT
|
||||
S.CveSolicitud,
|
||||
P.CveTramitePago,
|
||||
COUNT_BIG(*) AS NumeroConceptos,
|
||||
SUM(
|
||||
ROUND(
|
||||
CONVERT(decimal(18, 4), Costo.Importe),
|
||||
2
|
||||
) * D.Cantidad
|
||||
) AS SubTotal,
|
||||
SUM(
|
||||
ROUND(
|
||||
CONVERT(decimal(18, 4), Costo.Importe)
|
||||
* D.Cantidad
|
||||
* ISNULL(ImpuestoIVA.TasaOCuota, 0),
|
||||
2
|
||||
)
|
||||
) AS IVA
|
||||
FROM dbo.Tra_Solicitudes AS S
|
||||
INNER JOIN dbo.Tra_Pagos AS P
|
||||
ON P.CveTipoTramite = S.CveTipoTramite
|
||||
AND P.EsActivo = 1
|
||||
INNER JOIN dbo.Tra_PagosDetalle AS D
|
||||
ON D.CveTramitePago = P.CveTramitePago
|
||||
INNER JOIN dbo.ProductosServicios AS PS
|
||||
ON PS.CvePS = D.CvePS
|
||||
OUTER APPLY
|
||||
(
|
||||
SELECT TOP (1)
|
||||
CT.CveCostoTramite,
|
||||
CT.Importe
|
||||
FROM dbo.Tra_CostosTramite AS CT
|
||||
WHERE CT.CveTipoTramite = S.CveTipoTramite
|
||||
AND CT.CvePS = D.CvePS
|
||||
AND CT.EsActivo = 1
|
||||
AND
|
||||
(
|
||||
CT.FechaInicioVigencia IS NULL
|
||||
OR CT.FechaInicioVigencia <= CONVERT(date, GETDATE())
|
||||
)
|
||||
AND
|
||||
(
|
||||
CT.FechaFinVigencia IS NULL
|
||||
OR CT.FechaFinVigencia >= CONVERT(date, GETDATE())
|
||||
)
|
||||
ORDER BY
|
||||
ISNULL(
|
||||
CT.FechaInicioVigencia,
|
||||
CONVERT(date, '19000101')) DESC,
|
||||
CT.CveCostoTramite DESC
|
||||
) AS Costo
|
||||
OUTER APPLY
|
||||
(
|
||||
SELECT TOP (1) CTI.TasaOCuota
|
||||
FROM dbo.Tra_CostosTramiteImpuestos AS CTI
|
||||
WHERE CTI.CveCostoTramite = Costo.CveCostoTramite
|
||||
AND CTI.EsRetencion = 0
|
||||
AND CTI.Impuesto = '002'
|
||||
AND CTI.TipoFactor = 'Tasa'
|
||||
) AS ImpuestoIVA
|
||||
WHERE S.CveFraccionamiento = @CveFraccionamiento
|
||||
GROUP BY
|
||||
S.CveSolicitud,
|
||||
P.CveTramitePago
|
||||
)
|
||||
SELECT
|
||||
S.CveSolicitud,
|
||||
P.CveTramitePago,
|
||||
SP.CveVenta,
|
||||
CONVERT(
|
||||
bit,
|
||||
CASE
|
||||
WHEN SP.CveSolicitudPago IS NOT NULL
|
||||
AND V.CveVenta IS NOT NULL THEN 1
|
||||
ELSE 0
|
||||
END
|
||||
) AS VentaGenerada,
|
||||
S.Folio AS FolioSolicitud,
|
||||
E.Etapa,
|
||||
TT.TipoTramite,
|
||||
P.Nombre AS NombrePago,
|
||||
CONVERT(int, C.NumeroConceptos) AS NumeroConceptos,
|
||||
CONVERT(
|
||||
decimal(18, 2),
|
||||
CASE
|
||||
WHEN V.CveVenta IS NULL THEN C.SubTotal
|
||||
ELSE V.SubTotal
|
||||
END
|
||||
) AS SubTotal,
|
||||
CONVERT(
|
||||
decimal(18, 2),
|
||||
CASE
|
||||
WHEN V.CveVenta IS NULL THEN C.IVA
|
||||
ELSE V.IVA
|
||||
END
|
||||
) AS IVA,
|
||||
CONVERT(
|
||||
decimal(18, 2),
|
||||
CASE
|
||||
WHEN V.CveVenta IS NULL THEN C.SubTotal + C.IVA
|
||||
ELSE V.Total
|
||||
END
|
||||
) AS Total
|
||||
FROM Conceptos AS C
|
||||
INNER JOIN dbo.Tra_Solicitudes AS S
|
||||
ON S.CveSolicitud = C.CveSolicitud
|
||||
INNER JOIN dbo.FraccionamientosEtapas AS E
|
||||
ON E.CveFraccionamientoEtapa = S.CveFraccionamientoEtapa
|
||||
INNER JOIN dbo.Tra_TiposTramite AS TT
|
||||
ON TT.CveTipoTramite = S.CveTipoTramite
|
||||
INNER JOIN dbo.Tra_Pagos AS P
|
||||
ON P.CveTramitePago = C.CveTramitePago
|
||||
LEFT JOIN dbo.Tra_SolicitudesPagos AS SP
|
||||
ON SP.CveSolicitud = S.CveSolicitud
|
||||
AND SP.CveTramitePago = P.CveTramitePago
|
||||
LEFT JOIN dbo.Ventas AS V
|
||||
ON V.CveVenta = SP.CveVenta
|
||||
WHERE NOT EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM dbo.Vta_Pagos AS VP
|
||||
WHERE VP.CveSolicitud = S.CveSolicitud
|
||||
AND VP.CveTramitePago = P.CveTramitePago
|
||||
AND VP.CveVenta = SP.CveVenta
|
||||
AND VP.EsActivo = 1
|
||||
)
|
||||
ORDER BY
|
||||
E.Orden,
|
||||
S.CveSolicitud,
|
||||
P.Orden,
|
||||
P.CveTramitePago;
|
||||
|
||||
SET @Return = 1;
|
||||
END TRY
|
||||
BEGIN CATCH
|
||||
SELECT
|
||||
@ErrorMostrar = 'Ocurrió un error al consultar los pagos pendientes; favor de contactar a Sistemas.',
|
||||
@ErrorTipo = 1,
|
||||
@Return = 0;
|
||||
|
||||
DECLARE @ErrorTecnico nvarchar(2048) = CONCAT(
|
||||
'Número: ', ERROR_NUMBER(),
|
||||
'; Procedimiento: ', COALESCE(
|
||||
ERROR_PROCEDURE(),
|
||||
'PA_Vta_FraccionamientoPagoPendienteList'
|
||||
),
|
||||
'; Línea: ', ERROR_LINE(),
|
||||
'; Detalle: ', ERROR_MESSAGE()
|
||||
);
|
||||
|
||||
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
|
||||
END CATCH;
|
||||
END;
|
||||
GO
|
||||
319
Pagos_Comprobantes_Aprobacion_20260924.sql
Normal file
319
Pagos_Comprobantes_Aprobacion_20260924.sql
Normal file
@@ -0,0 +1,319 @@
|
||||
-- Preparar únicamente. Instalar requiere autorización separada.
|
||||
-- Requiere los scripts Pagos_Convenios_*_20260922.sql y la bitácora de eventos.
|
||||
-- No concede Pagos.AprobarPagos automáticamente: asignarlo desde permisos de usuario.
|
||||
IF OBJECT_ID(N'dbo.Tra_ComprobantesPago', N'U') IS NULL
|
||||
BEGIN
|
||||
CREATE TABLE dbo.Tra_ComprobantesPago
|
||||
(
|
||||
CveComprobantePago int IDENTITY(1, 1) NOT NULL PRIMARY KEY,
|
||||
CveSolicitudPago int NOT NULL REFERENCES dbo.Tra_SolicitudesPago(CveSolicitudPago),
|
||||
CveCliente int NOT NULL REFERENCES dbo.Clientes(CveCliente),
|
||||
CveUnidadCobro int NOT NULL REFERENCES dbo.Gral_UnidadesCobro(CveUnidadCobro),
|
||||
CveFormaPago tinyint NOT NULL,
|
||||
FechaPago datetime NOT NULL,
|
||||
Importe decimal(19, 6) NOT NULL CHECK (Importe > 0),
|
||||
Referencia varchar(200) COLLATE Modern_Spanish_CS_AS NOT NULL,
|
||||
NombreArchivo nvarchar(255) COLLATE Modern_Spanish_CS_AS NOT NULL,
|
||||
NombreFisico varchar(50) COLLATE Modern_Spanish_CS_AS NOT NULL,
|
||||
TipoContenido varchar(100) COLLATE Modern_Spanish_CS_AS NOT NULL,
|
||||
TamanoBytes bigint NOT NULL CHECK (TamanoBytes > 0 AND TamanoBytes <= 5242880),
|
||||
CveUsuarioEnvia int NOT NULL REFERENCES dbo.Sis_Usuarios(CveUsuario),
|
||||
FechaEnvio datetime NOT NULL,
|
||||
CveUsuarioAprueba int NULL REFERENCES dbo.Sis_Usuarios(CveUsuario),
|
||||
FechaAprobacion datetime NULL,
|
||||
CvePago int NULL REFERENCES dbo.Tra_Pagos(CvePago),
|
||||
CONSTRAINT CK_Tra_ComprobantesPago_Aprobacion CHECK
|
||||
(
|
||||
(CvePago IS NULL AND CveUsuarioAprueba IS NULL AND FechaAprobacion IS NULL)
|
||||
OR (CvePago IS NOT NULL AND CveUsuarioAprueba IS NOT NULL AND FechaAprobacion IS NOT NULL)
|
||||
)
|
||||
);
|
||||
CREATE INDEX IX_Tra_ComprobantesPago_Solicitud ON dbo.Tra_ComprobantesPago(CveSolicitudPago, CveComprobantePago);
|
||||
CREATE UNIQUE INDEX UX_Tra_ComprobantesPago_Abono ON dbo.Tra_ComprobantesPago(CvePago) WHERE CvePago IS NOT NULL;
|
||||
END;
|
||||
GO
|
||||
|
||||
CREATE OR ALTER PROCEDURE dbo.PA_Tra_ComprobantePagoListar
|
||||
@CveSolicitudPago int,
|
||||
@CveUsuarioEjecuta int,
|
||||
@ErrorMostrar varchar(max) OUTPUT,
|
||||
@ErrorTipo int OUTPUT,
|
||||
@Return bit OUTPUT
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON;
|
||||
SELECT
|
||||
@ErrorMostrar = NULL,
|
||||
@ErrorTipo = 0,
|
||||
@Return = 0;
|
||||
BEGIN TRY
|
||||
SELECT C.*
|
||||
FROM dbo.Tra_ComprobantesPago AS C
|
||||
WHERE C.CveSolicitudPago = @CveSolicitudPago
|
||||
ORDER BY C.FechaEnvio DESC, C.CveComprobantePago DESC;
|
||||
SET @Return = 1;
|
||||
END TRY
|
||||
BEGIN CATCH
|
||||
SELECT
|
||||
@ErrorMostrar = 'No fue posible completar la operación de comprobantes. Contacte a Sistemas.',
|
||||
@ErrorTipo = 1,
|
||||
@Return = 0;
|
||||
DECLARE @ErrorTecnico nvarchar(2048) = CONCAT(
|
||||
'Número: ', ERROR_NUMBER(),
|
||||
'; Procedimiento: ', ERROR_PROCEDURE(),
|
||||
'; Línea: ', ERROR_LINE(),
|
||||
'; Detalle: ', ERROR_MESSAGE()
|
||||
);
|
||||
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
|
||||
END CATCH;
|
||||
END;
|
||||
GO
|
||||
|
||||
CREATE OR ALTER PROCEDURE dbo.PA_Tra_ComprobantePagoObtener
|
||||
@CveComprobantePago int,
|
||||
@CveUsuarioEjecuta int,
|
||||
@ErrorMostrar varchar(max) OUTPUT,
|
||||
@ErrorTipo int OUTPUT,
|
||||
@Return bit OUTPUT
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON;
|
||||
SELECT
|
||||
@ErrorMostrar = NULL,
|
||||
@ErrorTipo = 0,
|
||||
@Return = 0;
|
||||
BEGIN TRY
|
||||
-- Dentro de la transacción de aprobación, evita aprobar dos veces el mismo comprobante.
|
||||
SELECT C.*
|
||||
FROM dbo.Tra_ComprobantesPago AS C WITH (UPDLOCK, HOLDLOCK)
|
||||
WHERE C.CveComprobantePago = @CveComprobantePago;
|
||||
SET @Return = 1;
|
||||
END TRY
|
||||
BEGIN CATCH
|
||||
SELECT
|
||||
@ErrorMostrar = 'No fue posible completar la operación de comprobantes. Contacte a Sistemas.',
|
||||
@ErrorTipo = 1,
|
||||
@Return = 0;
|
||||
DECLARE @ErrorTecnico nvarchar(2048) = CONCAT(
|
||||
'Número: ', ERROR_NUMBER(),
|
||||
'; Procedimiento: ', ERROR_PROCEDURE(),
|
||||
'; Línea: ', ERROR_LINE(),
|
||||
'; Detalle: ', ERROR_MESSAGE()
|
||||
);
|
||||
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
|
||||
END CATCH;
|
||||
END;
|
||||
GO
|
||||
|
||||
CREATE OR ALTER PROCEDURE dbo.PA_Tra_ComprobantePagoFormasListar
|
||||
@CveUsuarioEjecuta int,
|
||||
@ErrorMostrar varchar(max) OUTPUT,
|
||||
@ErrorTipo int OUTPUT,
|
||||
@Return bit OUTPUT
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON;
|
||||
SELECT
|
||||
@ErrorMostrar = NULL,
|
||||
@ErrorTipo = 0,
|
||||
@Return = 0;
|
||||
BEGIN TRY
|
||||
SELECT
|
||||
CveFormaPago,
|
||||
FormaPago
|
||||
FROM dbo.Vta_FormaPago
|
||||
WHERE ClaveFormaPagoSAT IN ('01', '02', '03', '04', '28')
|
||||
ORDER BY FormaPago;
|
||||
SET @Return = 1;
|
||||
END TRY
|
||||
BEGIN CATCH
|
||||
SELECT
|
||||
@ErrorMostrar = 'No fue posible completar la operación de comprobantes. Contacte a Sistemas.',
|
||||
@ErrorTipo = 1,
|
||||
@Return = 0;
|
||||
DECLARE @ErrorTecnico nvarchar(2048) = CONCAT(
|
||||
'Número: ', ERROR_NUMBER(),
|
||||
'; Procedimiento: ', ERROR_PROCEDURE(),
|
||||
'; Línea: ', ERROR_LINE(),
|
||||
'; Detalle: ', ERROR_MESSAGE()
|
||||
);
|
||||
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
|
||||
END CATCH;
|
||||
END;
|
||||
GO
|
||||
|
||||
CREATE OR ALTER PROCEDURE dbo.PA_Tra_ComprobantePagoRegistrar
|
||||
@CveSolicitudPago int,
|
||||
@CveFormaPago tinyint,
|
||||
@FechaPago datetime,
|
||||
@Importe decimal(19, 6),
|
||||
@Referencia varchar(200),
|
||||
@NombreArchivo nvarchar(255),
|
||||
@NombreFisico varchar(50),
|
||||
@TipoContenido varchar(100),
|
||||
@TamanoBytes bigint,
|
||||
@CveUsuarioEjecuta int,
|
||||
@ErrorMostrar varchar(max) OUTPUT,
|
||||
@ErrorTipo int OUTPUT,
|
||||
@Return bit OUTPUT
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON;
|
||||
SELECT
|
||||
@ErrorMostrar = NULL,
|
||||
@ErrorTipo = 0,
|
||||
@Return = 0;
|
||||
BEGIN TRY
|
||||
IF @@TRANCOUNT = 0 OR XACT_STATE() <> 1
|
||||
THROW 51500, 'La operación requiere la transacción del servicio.', 1;
|
||||
|
||||
INSERT INTO dbo.Tra_ComprobantesPago
|
||||
(
|
||||
CveSolicitudPago,
|
||||
CveCliente, CveUnidadCobro, CveFormaPago, FechaPago, Importe,
|
||||
Referencia, NombreArchivo, NombreFisico, TipoContenido, TamanoBytes,
|
||||
CveUsuarioEnvia, FechaEnvio
|
||||
)
|
||||
SELECT
|
||||
S.CveSolicitudPago,
|
||||
S.CveCliente, S.CveUnidadCobro, @CveFormaPago, @FechaPago, @Importe,
|
||||
@Referencia, @NombreArchivo, @NombreFisico, @TipoContenido, @TamanoBytes,
|
||||
@CveUsuarioEjecuta, GETDATE()
|
||||
FROM dbo.Tra_SolicitudesPago AS S
|
||||
WHERE S.CveSolicitudPago = @CveSolicitudPago;
|
||||
IF @@ROWCOUNT = 0
|
||||
BEGIN
|
||||
SELECT @ErrorMostrar = 'La obligación ya no existe.', @ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
SELECT CONVERT(int, SCOPE_IDENTITY()) AS CveComprobantePago;
|
||||
SET @Return = 1;
|
||||
END TRY
|
||||
BEGIN CATCH
|
||||
SELECT
|
||||
@ErrorMostrar = 'No fue posible completar la operación de comprobantes. Contacte a Sistemas.',
|
||||
@ErrorTipo = 1,
|
||||
@Return = 0;
|
||||
DECLARE @ErrorTecnico nvarchar(2048) = CONCAT(
|
||||
'Número: ', ERROR_NUMBER(),
|
||||
'; Procedimiento: ', ERROR_PROCEDURE(),
|
||||
'; Línea: ', ERROR_LINE(),
|
||||
'; Detalle: ', ERROR_MESSAGE()
|
||||
);
|
||||
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
|
||||
END CATCH;
|
||||
END;
|
||||
GO
|
||||
|
||||
CREATE OR ALTER PROCEDURE dbo.PA_Tra_ComprobantePagoAprobar
|
||||
@CveComprobantePago int,
|
||||
@CvePago int,
|
||||
@CveUsuarioEjecuta int,
|
||||
@ErrorMostrar varchar(max) OUTPUT,
|
||||
@ErrorTipo int OUTPUT,
|
||||
@Return bit OUTPUT
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON;
|
||||
SELECT
|
||||
@ErrorMostrar = NULL,
|
||||
@ErrorTipo = 0,
|
||||
@Return = 0;
|
||||
BEGIN TRY
|
||||
IF @@TRANCOUNT = 0 OR XACT_STATE() <> 1
|
||||
THROW 51500, 'La operación requiere la transacción del servicio.', 1;
|
||||
|
||||
UPDATE dbo.Tra_ComprobantesPago
|
||||
SET
|
||||
CvePago = @CvePago,
|
||||
CveUsuarioAprueba = @CveUsuarioEjecuta,
|
||||
FechaAprobacion = GETDATE()
|
||||
WHERE CveComprobantePago = @CveComprobantePago
|
||||
AND CvePago IS NULL;
|
||||
IF @@ROWCOUNT = 0
|
||||
BEGIN
|
||||
SELECT @ErrorMostrar = 'El comprobante ya fue aprobado o no está disponible.', @ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
SET @Return = 1;
|
||||
END TRY
|
||||
BEGIN CATCH
|
||||
SELECT
|
||||
@ErrorMostrar = 'No fue posible completar la operación de comprobantes. Contacte a Sistemas.',
|
||||
@ErrorTipo = 1,
|
||||
@Return = 0;
|
||||
DECLARE @ErrorTecnico nvarchar(2048) = CONCAT(
|
||||
'Número: ', ERROR_NUMBER(),
|
||||
'; Procedimiento: ', ERROR_PROCEDURE(),
|
||||
'; Línea: ', ERROR_LINE(),
|
||||
'; Detalle: ', ERROR_MESSAGE()
|
||||
);
|
||||
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
|
||||
END CATCH;
|
||||
END;
|
||||
GO
|
||||
|
||||
IF NOT EXISTS (SELECT 1 FROM dbo.Sis_Permisos WHERE CodigoPermiso = 'Pagos.AprobarPagos')
|
||||
BEGIN
|
||||
INSERT INTO dbo.Sis_Permisos
|
||||
(CodigoPermiso, NombrePermiso, Descripcion, Activo, FechaCreacion)
|
||||
VALUES
|
||||
('Pagos.AprobarPagos', 'Aprobar pagos', 'Aprobar comprobantes y aplicar sus abonos al saldo.', 1, GETDATE());
|
||||
END;
|
||||
|
||||
IF NOT EXISTS (SELECT 1 FROM dbo.Bit_Tablas WHERE NombreTablaSQL = 'Tra_ComprobantesPago')
|
||||
BEGIN
|
||||
INSERT INTO dbo.Bit_Tablas
|
||||
(NombreTablaSQL, NombreMostrar, Descripcion, NombreCampoLlaveSQL, Activo, FechaAlta, FechaMod)
|
||||
VALUES
|
||||
('Tra_ComprobantesPago', 'Comprobantes de pago', 'Envío y aprobación de comprobantes',
|
||||
'CveComprobantePago', 1, GETDATE(), NULL);
|
||||
END;
|
||||
|
||||
INSERT INTO dbo.Bit_Campos
|
||||
(CveTabla, NombreCampoSQL, NombreMostrar, MostrarEnBitacora, Activo, FechaAlta, FechaMod, TipoDatoSQL)
|
||||
SELECT
|
||||
B.CveTabla,
|
||||
C.name,
|
||||
C.name,
|
||||
CASE WHEN C.name LIKE 'Cve%' OR C.name = 'NombreFisico' THEN 0 ELSE 1 END,
|
||||
1,
|
||||
GETDATE(),
|
||||
NULL,
|
||||
T.name
|
||||
FROM dbo.Bit_Tablas AS B
|
||||
INNER JOIN sys.columns AS C ON C.object_id = OBJECT_ID(N'dbo.Tra_ComprobantesPago')
|
||||
INNER JOIN sys.types AS T ON T.user_type_id = C.user_type_id
|
||||
WHERE B.NombreTablaSQL = 'Tra_ComprobantesPago'
|
||||
AND NOT EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM dbo.Bit_Campos AS X
|
||||
WHERE X.CveTabla = B.CveTabla AND X.NombreCampoSQL = C.name
|
||||
);
|
||||
|
||||
INSERT INTO dbo.Bit_DefinicionesAccion
|
||||
(CveTabla, CveTipoMovimiento, NombreAccion, DescripcionAccion, Activo, Fecha, CodigoAccion)
|
||||
SELECT
|
||||
B.CveTabla,
|
||||
NULL,
|
||||
A.Nombre,
|
||||
A.Nombre,
|
||||
1,
|
||||
GETDATE(),
|
||||
A.Codigo
|
||||
FROM dbo.Bit_Tablas AS B
|
||||
CROSS JOIN
|
||||
(
|
||||
VALUES
|
||||
('EnviarComprobantePago', 'Enviar comprobante de pago'),
|
||||
('AprobarComprobantePago', 'Aprobar comprobante de pago')
|
||||
) AS A(Codigo, Nombre)
|
||||
WHERE B.NombreTablaSQL = 'Tra_ComprobantesPago'
|
||||
AND NOT EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM dbo.Bit_DefinicionesAccion AS D
|
||||
WHERE D.CodigoAccion = A.Codigo
|
||||
);
|
||||
GO
|
||||
391
Pagos_Convenios_Configuracion_20260922.sql
Normal file
391
Pagos_Convenios_Configuracion_20260922.sql
Normal file
@@ -0,0 +1,391 @@
|
||||
/*
|
||||
Pagos y Convenios: configuración de auditoría y permisos.
|
||||
NO EJECUTADO. Instalar después de estructura y procedimientos,
|
||||
en la misma transacción del instalador, sólo con autorización separada.
|
||||
Requiere la adaptación de servicios y pantallas antes de habilitar el módulo.
|
||||
Prepara menús y replica sólo el acceso de consulta del módulo de Trámites.
|
||||
No asigna permisos de operación ni crea productos, cuentas o usuarios.
|
||||
Conserva claves de Bit_Tablas/Bit_Campos y el historial de acciones.
|
||||
*/
|
||||
-- Reasignar los nombres antes de registrar el nuevo significado de Tra_Pagos.
|
||||
-- Relaciones de visualización sólo si ambos campos ya están registrados.
|
||||
SET NOCOUNT ON;
|
||||
|
||||
IF DB_NAME() <> N'SIG_PlataformaDesarolladores'
|
||||
THROW 51400, N'La base seleccionada no corresponde a la revisada.', 1;
|
||||
|
||||
IF @@TRANCOUNT = 0
|
||||
OR XACT_STATE() <> 1
|
||||
THROW 51401, N'Se requiere una transacción activa del instalador.', 1;
|
||||
|
||||
IF OBJECT_ID(N'dbo.Tra_TiposTramitePagos', N'U') IS NULL
|
||||
OR COL_LENGTH(N'dbo.Tra_Pagos', N'ValorConversion') IS NULL
|
||||
THROW 51402, N'Instale primero la estructura de Pagos y Convenios.', 1;
|
||||
|
||||
UPDATE dbo.Bit_Tablas
|
||||
SET NombreTablaSQL = 'Tra_TiposTramitePagos',
|
||||
NombreMostrar = 'Plantillas de pagos por trámite',
|
||||
FechaMod = GETDATE()
|
||||
WHERE NombreTablaSQL = 'Tra_Pagos'
|
||||
AND NombreCampoLlaveSQL = 'CveTramitePago';
|
||||
|
||||
UPDATE dbo.Bit_Tablas
|
||||
SET NombreTablaSQL = 'Tra_TiposTramitePagosDetalle',
|
||||
NombreMostrar = 'Productos de plantilla de pago',
|
||||
FechaMod = GETDATE()
|
||||
WHERE NombreTablaSQL = 'Tra_PagosDetalle';
|
||||
|
||||
UPDATE dbo.Bit_Tablas
|
||||
SET NombreTablaSQL = 'Tra_SolicitudesPago',
|
||||
NombreMostrar = 'Obligaciones de pago',
|
||||
FechaMod = GETDATE()
|
||||
WHERE NombreTablaSQL = 'Tra_SolicitudesPagos';
|
||||
|
||||
UPDATE dbo.Bit_Tablas
|
||||
SET NombreTablaSQL = 'Tra_Pagos',
|
||||
NombreMostrar = 'Abonos recibidos',
|
||||
FechaMod = GETDATE()
|
||||
WHERE NombreTablaSQL = 'Vta_Pagos';
|
||||
|
||||
DECLARE @Tablas TABLE (
|
||||
NombreTablaSQL VARCHAR (128) COLLATE Modern_Spanish_CS_AS PRIMARY KEY,
|
||||
NombreMostrar VARCHAR (150) COLLATE Modern_Spanish_CS_AS,
|
||||
NombreCampoLlaveSQL VARCHAR (128) COLLATE Modern_Spanish_CS_AS);
|
||||
|
||||
INSERT INTO @Tablas
|
||||
VALUES (N'Gral_UnidadesCobro', N'Unidades de cobro', N'CveUnidadCobro'),
|
||||
(N'Gral_UnidadesCobroValores', N'Histórico de equivalencias', N'CveUnidadCobroValor'),
|
||||
(N'Tra_TiposSolicitudPago', N'Tipos de obligación', N'CveTipoSolicitudPago'),
|
||||
(N'Tra_TiposTramitePagos', N'Plantillas de pagos por trámite', N'CveTramitePago'),
|
||||
(N'Tra_TiposTramitePagosDetalle', N'Productos de plantilla de pago', N'CveTramitePagoDetalle'),
|
||||
(N'Tra_SolicitudesPago', N'Obligaciones de pago', N'CveSolicitudPago'),
|
||||
(N'Tra_SolicitudesPagoDetalle', N'Productos de obligación', N'CveSolicitudPagoDetalle'),
|
||||
(N'Tra_SolicitudesPagoParcialidades', N'Parcialidades de obligación', N'CveSolicitudPagoParcialidad'),
|
||||
(N'Tra_Pagos', N'Abonos recibidos', N'CvePago'),
|
||||
(N'Tra_PagosAplicaciones', N'Aplicaciones de abonos', N'CvePagoAplicacion'),
|
||||
(N'Tra_SolicitudesPagoRequeridoBitacora', N'Cambios de pago requerido', N'CveSolicitudPagoRequeridoBitacora'),
|
||||
(N'Tra_SolicitudesPagoConvenio', N'Convenios', N'CveSolicitudPago'),
|
||||
(N'Tra_SolicitudesPagoConvenioOrigen', N'Adeudos de origen de convenio', N'CveConvenioOrigen'),
|
||||
(N'Tra_SolicitudesPagoConvenioOrigenDetalle', N'Distribución de saldo convenido', N'CveConvenioOrigenDetalle'),
|
||||
(N'Tra_PagosCfdi', N'Documentos fiscales de abonos', N'CvePagoCfdi'),
|
||||
(N'Fac_CfdiDocumentos', N'Documentos fiscales', N'CveCfdiDocumento'),
|
||||
(N'Sis_UsuariosPermisos', N'Permisos particulares de usuario', N'CveUsuarioPermiso');
|
||||
|
||||
IF EXISTS (SELECT 1
|
||||
FROM @Tablas AS T
|
||||
WHERE OBJECT_ID(N'dbo.' + T.NombreTablaSQL, N'U') IS NULL
|
||||
OR COL_LENGTH(N'dbo.' + T.NombreTablaSQL, T.NombreCampoLlaveSQL) IS NULL)
|
||||
THROW 51403, N'Falta una tabla o llave de la configuración de auditoría.', 1;
|
||||
|
||||
INSERT INTO dbo.Bit_Tablas (NombreTablaSQL, NombreMostrar, Descripcion, NombreCampoLlaveSQL, Activo, FechaAlta, FechaMod)
|
||||
SELECT T.NombreTablaSQL,
|
||||
T.NombreMostrar,
|
||||
T.NombreMostrar,
|
||||
T.NombreCampoLlaveSQL,
|
||||
1,
|
||||
GETDATE(),
|
||||
NULL
|
||||
FROM @Tablas AS T
|
||||
WHERE NOT EXISTS (SELECT 1
|
||||
FROM dbo.Bit_Tablas AS B
|
||||
WHERE B.NombreTablaSQL = T.NombreTablaSQL);
|
||||
|
||||
-- Completar llaves que no estaban configuradas, conservando su CveTabla.
|
||||
UPDATE B
|
||||
SET NombreCampoLlaveSQL = T.NombreCampoLlaveSQL,
|
||||
FechaMod = GETDATE()
|
||||
FROM dbo.Bit_Tablas AS B
|
||||
INNER JOIN @Tablas AS T ON T.NombreTablaSQL = B.NombreTablaSQL
|
||||
WHERE NULLIF(LTRIM(RTRIM(B.NombreCampoLlaveSQL)), '') IS NULL;
|
||||
|
||||
DECLARE @Etiquetas TABLE (
|
||||
NombreCampoSQL VARCHAR (128) COLLATE Modern_Spanish_CS_AS PRIMARY KEY,
|
||||
NombreMostrar VARCHAR (150) COLLATE Modern_Spanish_CS_AS);
|
||||
|
||||
INSERT INTO @Etiquetas
|
||||
VALUES (N'Codigo', N'Código'),
|
||||
(N'Nombre', N'Nombre'),
|
||||
(N'EsMoneda', N'Es moneda'),
|
||||
(N'RequiereConversion', N'Requiere conversión'),
|
||||
(N'Activo', N'Activo'),
|
||||
(N'FechaVigencia', N'Fecha de vigencia'),
|
||||
(N'ValorMXN', N'Equivalencia en MXN'),
|
||||
(N'Fuente', N'Fuente'),
|
||||
(N'Importe', N'Importe'),
|
||||
(N'Descripcion', N'Descripción'),
|
||||
(N'Cantidad', N'Cantidad'),
|
||||
(N'PrecioUnitario', N'Precio unitario final'),
|
||||
(N'EsRequerido', N'Requerido'),
|
||||
(N'NumeroParcialidad', N'Parcialidad'),
|
||||
(N'FechaVencimiento', N'Fecha de vencimiento'),
|
||||
(N'FechaProrroga', N'Prórroga'),
|
||||
(N'FechaGeneracion', N'Fecha de generación'),
|
||||
(N'EstadoAdministrativo', N'Estado administrativo'),
|
||||
(N'FechaPago', N'Fecha de pago'),
|
||||
(N'Referencia', N'Referencia'),
|
||||
(N'Observaciones', N'Observaciones'),
|
||||
(N'ValorConversion', N'Conversión del abono'),
|
||||
(N'ImporteMXN', N'Importe en MXN'),
|
||||
(N'ImporteAplicado', N'Importe aplicado'),
|
||||
(N'ImporteAplicadoMXN', N'Aplicación en MXN'),
|
||||
(N'ImportePagoConsumido', N'Importe consumido del abono'),
|
||||
(N'ValorConversionObligacion', N'Conversión de la obligación'),
|
||||
(N'ValorAnterior', N'Valor anterior'),
|
||||
(N'ValorNuevo', N'Valor nuevo'),
|
||||
(N'Observacion', N'Observación'),
|
||||
(N'ImporteSaldoConvenido', N'Saldo convenido'),
|
||||
(N'ImporteSaldoOriginal', N'Saldo antes del convenio'),
|
||||
(N'ImporteTomadoConvenio', N'Saldo trasladado al convenio'),
|
||||
(N'ImporteVinculadoMXN', N'Importe documentado en MXN'),
|
||||
(N'ImporteValidado', N'Importe validado'),
|
||||
(N'UuidExterno', N'UUID externo'),
|
||||
(N'FechaTimbradoExterno', N'Fecha de timbrado externo'),
|
||||
(N'OrigenRegistro', N'Origen del documento'),
|
||||
(N'Permitido', N'Permitido'),
|
||||
(N'FechaRegistro', N'Fecha de registro'),
|
||||
(N'FechaAlta', N'Fecha de alta'),
|
||||
(N'FechaModificacion', N'Fecha de modificación'),
|
||||
(N'FechaValidacion', N'Fecha de validación'),
|
||||
(N'EsActivo', N'Activo'),
|
||||
(N'Autorizado', N'Abono autorizado'),
|
||||
(N'Notas', N'Notas'),
|
||||
(N'Orden', N'Orden'),
|
||||
(N'TipoSolicitudPago', N'Tipo de obligación');
|
||||
|
||||
INSERT INTO dbo.Bit_Campos (CveTabla, NombreCampoSQL, NombreMostrar, MostrarEnBitacora, Activo, FechaAlta, FechaMod, TipoDatoSQL)
|
||||
SELECT B.CveTabla,
|
||||
C.name,
|
||||
COALESCE (E.NombreMostrar, C.name),
|
||||
CASE WHEN C.name LIKE 'Cve%'
|
||||
OR C.name LIKE 'Ruta%'
|
||||
OR C.name LIKE 'Hash%'
|
||||
OR Y.name IN ('binary', 'varbinary', 'image', 'timestamp') THEN 0 ELSE 1 END,
|
||||
1,
|
||||
GETDATE(),
|
||||
NULL,
|
||||
Y.name
|
||||
FROM @Tablas AS T
|
||||
INNER JOIN dbo.Bit_Tablas AS B ON B.NombreTablaSQL = T.NombreTablaSQL
|
||||
INNER JOIN sys.columns AS C ON C.object_id = OBJECT_ID(N'dbo.' + T.NombreTablaSQL)
|
||||
INNER JOIN sys.types AS Y ON Y.user_type_id = C.user_type_id
|
||||
LEFT OUTER JOIN @Etiquetas AS E ON E.NombreCampoSQL = C.name
|
||||
WHERE NOT EXISTS (SELECT 1
|
||||
FROM dbo.Bit_Campos AS X
|
||||
WHERE X.CveTabla = B.CveTabla
|
||||
AND X.NombreCampoSQL = C.name);
|
||||
|
||||
DECLARE @Referencias TABLE (
|
||||
Columna VARCHAR (128) COLLATE Modern_Spanish_CS_AS,
|
||||
Tabla VARCHAR (128) COLLATE Modern_Spanish_CS_AS,
|
||||
CampoMostrar VARCHAR (128) COLLATE Modern_Spanish_CS_AS);
|
||||
|
||||
INSERT INTO @Referencias
|
||||
VALUES ('CveUnidadCobro', 'Gral_UnidadesCobro', 'Nombre'),
|
||||
('CveTipoSolicitudPago', 'Tra_TiposSolicitudPago', 'TipoSolicitudPago'),
|
||||
('CveSolicitudPago', 'Tra_SolicitudesPago', 'Descripcion'),
|
||||
('CveSolicitudPagoOrigen', 'Tra_SolicitudesPago', 'Descripcion'),
|
||||
('CveSolicitudPagoConvenio', 'Tra_SolicitudesPago', 'Descripcion'),
|
||||
('CveTramitePago', 'Tra_TiposTramitePagos', 'Nombre'),
|
||||
('CveCliente', 'Clientes', 'Nombre'),
|
||||
('CvePS', 'ProductosServicios', 'PS'),
|
||||
('CveFraccionamiento', 'Fraccionamientos', 'Fraccionamiento'),
|
||||
('CveFraccionamientoEtapa', 'FraccionamientosEtapas', 'Etapa'),
|
||||
('CveUsuarioRegistro', 'Sis_Usuarios', 'NombreUsuario'),
|
||||
('CveUsuarioModificacion', 'Sis_Usuarios', 'NombreUsuario'),
|
||||
('CveUsuarioValida', 'Sis_Usuarios', 'NombreUsuario'),
|
||||
('CvePermiso', 'Sis_Permisos', 'NombrePermiso');
|
||||
|
||||
UPDATE C
|
||||
SET CveTablaReferencia = B.CveTabla,
|
||||
CveCampoMostrarReferencia = M.CveCampo,
|
||||
MostrarEnBitacora = 1,
|
||||
FechaMod = GETDATE()
|
||||
FROM dbo.Bit_Campos AS C
|
||||
INNER JOIN dbo.Bit_Tablas AS T ON T.CveTabla = C.CveTabla
|
||||
INNER JOIN @Tablas AS A ON A.NombreTablaSQL = T.NombreTablaSQL
|
||||
INNER JOIN @Referencias AS R ON R.Columna = C.NombreCampoSQL
|
||||
INNER JOIN dbo.Bit_Tablas AS B ON B.NombreTablaSQL = R.Tabla
|
||||
INNER JOIN dbo.Bit_Campos AS M ON M.CveTabla = B.CveTabla
|
||||
AND M.NombreCampoSQL = R.CampoMostrar
|
||||
WHERE C.CveTablaReferencia IS NULL;
|
||||
|
||||
DECLARE @Acciones TABLE (
|
||||
CodigoAccion VARCHAR (150) COLLATE Modern_Spanish_CI_AS,
|
||||
NombreAccion VARCHAR (150) COLLATE Modern_Spanish_CS_AS,
|
||||
NombreTablaSQL VARCHAR (128) COLLATE Modern_Spanish_CS_AS);
|
||||
|
||||
INSERT INTO @Acciones
|
||||
VALUES ('GuardarSolicitudPago', 'Guardar obligación de pago', 'Tra_SolicitudesPago'),
|
||||
('GenerarSolicitudesPago', 'Generar obligaciones del trámite', 'Tra_SolicitudesPago'),
|
||||
('CambiarRequeridoSolicitudPago', 'Cambiar pago requerido', 'Tra_SolicitudesPago'),
|
||||
('CancelarSolicitudPago', 'Cancelar obligación de pago', 'Tra_SolicitudesPago'),
|
||||
('RegistrarAbono', 'Registrar abono', 'Tra_Pagos'),
|
||||
('AplicarAbono', 'Aplicar abono a parcialidades', 'Tra_PagosAplicaciones'),
|
||||
('CancelarAbono', 'Cancelar abono', 'Tra_Pagos'),
|
||||
('GuardarConvenio', 'Guardar convenio', 'Tra_SolicitudesPagoConvenio'),
|
||||
('CancelarConvenio', 'Cancelar convenio', 'Tra_SolicitudesPagoConvenio'),
|
||||
('GuardarUnidadCobro', 'Guardar unidad de cobro', 'Gral_UnidadesCobro'),
|
||||
('AgregarEquivalenciaUnidadCobro', 'Agregar equivalencia', 'Gral_UnidadesCobroValores'),
|
||||
('GuardarCfdiExterno', 'Guardar documento fiscal externo', 'Fac_CfdiDocumentos'),
|
||||
('VincularCfdiAbono', 'Vincular documento fiscal a abono', 'Tra_PagosCfdi'),
|
||||
('GuardarPermisoUsuario', 'Modificar permiso particular', 'Sis_UsuariosPermisos');
|
||||
|
||||
INSERT INTO dbo.Bit_DefinicionesAccion (CveTabla, CveTipoMovimiento, NombreAccion, DescripcionAccion, Activo, Fecha, CodigoAccion)
|
||||
SELECT T.CveTabla,
|
||||
NULL,
|
||||
A.NombreAccion,
|
||||
A.NombreAccion,
|
||||
1,
|
||||
GETDATE(),
|
||||
A.CodigoAccion
|
||||
FROM @Acciones AS A
|
||||
INNER JOIN dbo.Bit_Tablas AS T ON T.NombreTablaSQL = A.NombreTablaSQL
|
||||
WHERE NOT EXISTS (SELECT 1
|
||||
FROM dbo.Bit_DefinicionesAccion AS D
|
||||
WHERE D.CodigoAccion = A.CodigoAccion);
|
||||
|
||||
DECLARE @Permisos TABLE (
|
||||
CodigoPermiso VARCHAR (100) COLLATE Modern_Spanish_CI_AS,
|
||||
NombrePermiso VARCHAR (150) COLLATE Modern_Spanish_CS_AS,
|
||||
Descripcion VARCHAR (255) COLLATE Modern_Spanish_CS_AS);
|
||||
|
||||
INSERT INTO @Permisos
|
||||
VALUES (N'Pagos.RegistrarAbono', N'Registrar abonos', N'Registrar y aplicar pagos recibidos.'),
|
||||
(N'Pagos.CambiarRequerido', N'Cambiar pago requerido', N'Modificar requerido de una obligación con observación.'),
|
||||
(N'Pagos.AdministrarDocumentosFiscales', N'Administrar documentos fiscales de pagos', N'Cargar y validar XML/PDF y vincularlos a abonos.'),
|
||||
(N'Convenios.Crear', N'Crear convenios', N'Crear obligaciones de tipo convenio.'),
|
||||
(N'Convenios.Modificar', N'Modificar convenios', N'Editar convenios sin alterar historia de abonos.'),
|
||||
(N'Convenios.Cancelar', N'Cancelar convenios', N'Cancelar convenios y liberar su saldo de origen cuando proceda.'),
|
||||
(N'Convenios.DisminuirImporte', N'Disminuir importe de convenio', N'Permitir un importe de convenio menor al saldo seleccionado.');
|
||||
|
||||
INSERT INTO dbo.Sis_Permisos (CodigoPermiso, NombrePermiso, Descripcion, Activo, FechaCreacion)
|
||||
SELECT P.CodigoPermiso,
|
||||
P.NombrePermiso,
|
||||
P.Descripcion,
|
||||
1,
|
||||
GETDATE()
|
||||
FROM @Permisos AS P
|
||||
WHERE NOT EXISTS (SELECT 1
|
||||
FROM dbo.Sis_Permisos AS S
|
||||
WHERE S.CodigoPermiso = P.CodigoPermiso);
|
||||
|
||||
SELECT S.CvePermiso,
|
||||
S.CodigoPermiso,
|
||||
S.NombrePermiso,
|
||||
S.Activo
|
||||
FROM dbo.Sis_Permisos AS S
|
||||
INNER JOIN @Permisos AS P ON P.CodigoPermiso = S.CodigoPermiso
|
||||
ORDER BY S.CodigoPermiso;
|
||||
GO
|
||||
|
||||
-- Accesos de consulta. Los permisos de operación siguen siendo específicos.
|
||||
-- El contenedor y los roles se resuelven desde el módulo real de Trámites.
|
||||
DECLARE @ModuloTramites INT;
|
||||
DECLARE @ModuloPadre INT;
|
||||
DECLARE @Plataforma INT;
|
||||
|
||||
IF (SELECT COUNT(*)
|
||||
FROM dbo.Sis_Modulos
|
||||
WHERE Url = '~/Pages/Desarrolladores/Tramites.aspx'
|
||||
AND Activo = 1) <> 1
|
||||
THROW 51410, N'No se encontró un módulo único y activo de Trámites.', 1;
|
||||
|
||||
SELECT @ModuloTramites = CveModulo,
|
||||
@ModuloPadre = CveModuloPadre,
|
||||
@Plataforma = CvePlataforma
|
||||
FROM dbo.Sis_Modulos
|
||||
WHERE Url = '~/Pages/Desarrolladores/Tramites.aspx'
|
||||
AND Activo = 1;
|
||||
|
||||
DECLARE @PantallasPagos TABLE
|
||||
(
|
||||
Nombre VARCHAR(150),
|
||||
Url VARCHAR(500),
|
||||
UrlPadre VARCHAR(500),
|
||||
Visible BIT,
|
||||
Icono VARCHAR(150),
|
||||
Posicion INT
|
||||
);
|
||||
|
||||
INSERT INTO @PantallasPagos
|
||||
(Nombre, Url, UrlPadre, Visible, Icono, Posicion)
|
||||
VALUES
|
||||
('Pagos', '~/Pages/Desarrolladores/Pagos.aspx', NULL, 1, 'fa fa-credit-card', 1),
|
||||
('Detalle de pago', '~/Pages/Desarrolladores/PagoDetalle.aspx',
|
||||
'~/Pages/Desarrolladores/Pagos.aspx', 0, 'fa fa-credit-card', 2),
|
||||
('Convenios', '~/Pages/Desarrolladores/Convenios.aspx', NULL, 1, 'fa fa-handshake-o', 3),
|
||||
('Detalle de convenio', '~/Pages/Desarrolladores/ConvenioDetalle.aspx',
|
||||
'~/Pages/Desarrolladores/Convenios.aspx', 0, 'fa fa-handshake-o', 4);
|
||||
|
||||
IF EXISTS
|
||||
(
|
||||
SELECT M.Url
|
||||
FROM dbo.Sis_Modulos AS M
|
||||
INNER JOIN @PantallasPagos AS P ON P.Url = M.Url
|
||||
GROUP BY M.Url
|
||||
HAVING COUNT(*) > 1
|
||||
)
|
||||
THROW 51411, N'Existen rutas duplicadas para las pantallas de pagos.', 1;
|
||||
|
||||
DECLARE @UltimoOrdenPagos INT =
|
||||
(
|
||||
SELECT ISNULL(MAX(OrdenVisualizacion), 0)
|
||||
FROM dbo.Sis_Modulos
|
||||
WHERE CveModuloPadre = @ModuloPadre
|
||||
);
|
||||
|
||||
INSERT INTO dbo.Sis_Modulos
|
||||
(CveModuloPadre, CvePlataforma, NombreModulo, Url, ClaseCssIcono,
|
||||
OrdenVisualizacion, Visible, Activo, FechaCreacion)
|
||||
SELECT @ModuloPadre,
|
||||
@Plataforma,
|
||||
P.Nombre,
|
||||
P.Url,
|
||||
P.Icono,
|
||||
@UltimoOrdenPagos + P.Posicion,
|
||||
P.Visible,
|
||||
1,
|
||||
GETDATE()
|
||||
FROM @PantallasPagos AS P
|
||||
WHERE NOT EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM dbo.Sis_Modulos AS M
|
||||
WHERE M.Url = P.Url
|
||||
);
|
||||
|
||||
UPDATE M
|
||||
SET CveModuloPadre = Padre.CveModulo
|
||||
FROM dbo.Sis_Modulos AS M
|
||||
INNER JOIN @PantallasPagos AS P ON P.Url = M.Url
|
||||
INNER JOIN dbo.Sis_Modulos AS Padre ON Padre.Url = P.UrlPadre
|
||||
WHERE P.Visible = 0
|
||||
AND ISNULL(M.CveModuloPadre, 0) <> Padre.CveModulo;
|
||||
|
||||
INSERT INTO dbo.Sis_RolesModulos
|
||||
(CveRol, CveModulo, PuedeVer, PuedeCrear, PuedeModificar,
|
||||
PuedeEliminar, PuedeImprimir, PuedeExportar, FechaCreacion)
|
||||
SELECT R.CveRol,
|
||||
M.CveModulo,
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
GETDATE()
|
||||
FROM dbo.Sis_RolesModulos AS R
|
||||
INNER JOIN dbo.Sis_Modulos AS M ON M.Activo = 1
|
||||
INNER JOIN @PantallasPagos AS P ON P.Url = M.Url
|
||||
WHERE R.CveModulo = @ModuloTramites
|
||||
AND R.PuedeVer = 1
|
||||
AND NOT EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM dbo.Sis_RolesModulos AS Existente
|
||||
WHERE Existente.CveRol = R.CveRol
|
||||
AND Existente.CveModulo = M.CveModulo
|
||||
);
|
||||
GO
|
||||
|
||||
|
||||
841
Pagos_Convenios_Estructura_20260922.sql
Normal file
841
Pagos_Convenios_Estructura_20260922.sql
Normal file
@@ -0,0 +1,841 @@
|
||||
/*
|
||||
Pagos y Convenios - estructura y migración de datos existentes.
|
||||
Preparado el 22/09/2026 para SIG_PlataformaDesarolladores.
|
||||
|
||||
NO EJECUTADO. La edición de este archivo no autoriza su instalación.
|
||||
Migración de una sola aplicación. Ejecutar completa dentro de una
|
||||
transacción del instalador, que debe detenerse ante la primera excepción
|
||||
y confirmar únicamente después de instalar y verificar PAs y aplicación.
|
||||
|
||||
NO INSTALAR DE FORMA AISLADA:
|
||||
El renombrado conserva identidades y FK, pero los PAs, la vista
|
||||
Vta_SaldosFavor, los servicios y la configuración de bitácora todavía
|
||||
deben adaptarse en una entrega posterior. Este archivo no los modifica.
|
||||
|
||||
Alcance:
|
||||
- Renombrar las cuatro tablas aprobadas conservando sus claves actuales.
|
||||
- Migrar las obligaciones existentes desde sus ventas y detalles reales.
|
||||
- Separar importe abonado, saldo trasladado a convenio y saldo pendiente.
|
||||
- Preparar unidades, parcialidades, aplicaciones y CFDI externos.
|
||||
- No crear abonos a partir de facturas: un CFDI no prueba que hubo pago.
|
||||
- No crear usuarios, permisos, cuentas, productos ni tipos de cambio.
|
||||
|
||||
Decisiones de estructura:
|
||||
- Una obligación, sus productos y sus parcialidades usan una sola unidad.
|
||||
- Importe y PrecioUnitario nuevos incluyen impuestos; las ventas anteriores
|
||||
mantienen intactos sus precios netos, impuestos y documentos fiscales.
|
||||
- EstadoAdministrativo es ACTIVO/CANCELADO/SUSTITUIDO. El estado financiero
|
||||
se deriva del saldo; no se persiste un CveEstatusPago que pueda desfasarse.
|
||||
- Saldo cobrable = importe - aplicaciones vigentes - saldo convenido vigente.
|
||||
El saldo trasladado se presenta por separado, nunca como dinero pagado.
|
||||
- Cada aplicación identifica parcialidad Y producto. ImporteAplicado está
|
||||
expresado en la unidad de la obligación; ImportePagoConsumido, en la del
|
||||
abono. Ambos factores a MXN se congelan en la aplicación/pago.
|
||||
- Convenios conservan detalle del saldo trasladado por producto y parcialidad.
|
||||
Esta primera estructura exige la misma unidad entre convenio y orígenes.
|
||||
- Las sumas entre filas, concurrencia, permisos, inmutabilidad del abono,
|
||||
distribución proporcional y redondeo pertenecen a servicios/PAs pendientes.
|
||||
La estructura por sí sola no implementa esas operaciones.
|
||||
- Al cancelar un convenio se libera el traslado sólo mediante la operación
|
||||
coordinada posterior; nunca se borran el origen ni los abonos históricos.
|
||||
- FechaProrroga, cuando exista, sustituye el vencimiento para calcular atraso.
|
||||
- Las equivalencias son históricos de sólo inserción en la futura API.
|
||||
No se cargan valores UMA, UDI ni divisas.
|
||||
- En CFDI externos los metadatos no conocidos permanecen NULL. No se fabrica
|
||||
XML sin timbrar ni un intento de PAC. Archivos protegidos bajo Documentos,
|
||||
resueltos por el servicio existente; las rutas nunca son URLs públicas.
|
||||
- Generación automática al crear trámite, importes finales y reparto
|
||||
proporcional son criterios propuestos; no se ejecutan en esta migración.
|
||||
|
||||
Estado inspeccionado: tres obligaciones/ventas, tres CFDI y cero abonos.
|
||||
La venta 1019 y su CFDI tienen importes distintos; no se corrigen aquí.
|
||||
Los precontroles detienen la migración si aparecen abonos o datos ambiguos.
|
||||
*/
|
||||
SET NOCOUNT ON;
|
||||
SET ANSI_NULLS ON;
|
||||
SET QUOTED_IDENTIFIER ON;
|
||||
SET ANSI_PADDING ON;
|
||||
SET ANSI_WARNINGS ON;
|
||||
SET ARITHABORT ON;
|
||||
SET CONCAT_NULL_YIELDS_NULL ON;
|
||||
SET NUMERIC_ROUNDABORT OFF;
|
||||
|
||||
IF DB_NAME() <> N'SIG_PlataformaDesarolladores'
|
||||
THROW 51200, N'La base seleccionada no corresponde a la revisada.', 1;
|
||||
IF @@TRANCOUNT = 0 OR XACT_STATE() <> 1
|
||||
THROW 51201, N'Se requiere una transacción activa del instalador.', 1;
|
||||
|
||||
IF OBJECT_ID(N'dbo.Tra_Pagos', N'U') IS NULL
|
||||
OR OBJECT_ID(N'dbo.Tra_PagosDetalle', N'U') IS NULL
|
||||
OR OBJECT_ID(N'dbo.Tra_SolicitudesPagos', N'U') IS NULL
|
||||
OR OBJECT_ID(N'dbo.Vta_Pagos', N'U') IS NULL
|
||||
OR COL_LENGTH(N'dbo.Tra_Pagos', N'CveTramitePago') IS NULL
|
||||
OR COL_LENGTH(N'dbo.Vta_Pagos', N'CvePago') IS NULL
|
||||
THROW 51202, N'No se encontró la estructura de origen revisada.', 1;
|
||||
|
||||
IF EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM sys.objects
|
||||
WHERE schema_id = SCHEMA_ID(N'dbo')
|
||||
AND name IN
|
||||
(
|
||||
N'Tra_TiposTramitePagos', N'Tra_TiposTramitePagosDetalle',
|
||||
N'Tra_SolicitudesPago', N'Gral_UnidadesCobro',
|
||||
N'Gral_UnidadesCobroValores', N'Tra_TiposSolicitudPago',
|
||||
N'Tra_SolicitudesPagoDetalle', N'Tra_SolicitudesPagoParcialidades',
|
||||
N'Tra_PagosAplicaciones', N'Tra_SolicitudesPagoConvenio',
|
||||
N'Tra_SolicitudesPagoConvenioOrigen',
|
||||
N'Tra_SolicitudesPagoConvenioOrigenDetalle',
|
||||
N'Tra_SolicitudesPagoRequeridoBitacora', N'Tra_PagosCfdi'
|
||||
)
|
||||
)
|
||||
THROW 51203, N'Ya existen objetos destino; revise si la migración fue aplicada.', 1;
|
||||
|
||||
DECLARE @TablaPlantillas int = OBJECT_ID(N'dbo.Tra_Pagos');
|
||||
DECLARE @TablaDetallePlantillas int = OBJECT_ID(N'dbo.Tra_PagosDetalle');
|
||||
DECLARE @TablaSolicitudes int = OBJECT_ID(N'dbo.Tra_SolicitudesPagos');
|
||||
DECLARE @TablaAbonos int = OBJECT_ID(N'dbo.Vta_Pagos');
|
||||
DECLARE @Relaciones TABLE (Clave int PRIMARY KEY, Tabla int, Referencia int);
|
||||
INSERT INTO @Relaciones (Clave, Tabla, Referencia)
|
||||
SELECT object_id, parent_object_id, referenced_object_id
|
||||
FROM sys.foreign_keys
|
||||
WHERE parent_object_id IN
|
||||
(@TablaPlantillas, @TablaDetallePlantillas, @TablaSolicitudes, @TablaAbonos)
|
||||
OR referenced_object_id IN
|
||||
(@TablaPlantillas, @TablaDetallePlantillas, @TablaSolicitudes, @TablaAbonos);
|
||||
|
||||
-- Bloquear el origen durante toda la instalación coordinada.
|
||||
DECLARE @CantidadPlantillas bigint, @CantidadDetalles bigint;
|
||||
DECLARE @CantidadSolicitudes bigint, @CantidadAbonos bigint;
|
||||
SELECT @CantidadPlantillas = COUNT_BIG(*) FROM dbo.Tra_Pagos WITH (TABLOCKX, HOLDLOCK);
|
||||
SELECT @CantidadDetalles = COUNT_BIG(*) FROM dbo.Tra_PagosDetalle WITH (TABLOCKX, HOLDLOCK);
|
||||
SELECT @CantidadSolicitudes = COUNT_BIG(*) FROM dbo.Tra_SolicitudesPagos WITH (TABLOCKX, HOLDLOCK);
|
||||
SELECT @CantidadAbonos = COUNT_BIG(*) FROM dbo.Vta_Pagos WITH (TABLOCKX, HOLDLOCK);
|
||||
IF @CantidadAbonos <> 0
|
||||
THROW 51204, N'Existen abonos que requieren conciliación de conversión y aplicaciones.', 1;
|
||||
|
||||
IF NOT EXISTS (SELECT 1 FROM dbo.Gral_Monedas WHERE Abreviatura = 'MXN')
|
||||
OR NOT EXISTS (SELECT 1 FROM dbo.Gral_Monedas WHERE Abreviatura = 'USD')
|
||||
OR EXISTS
|
||||
(
|
||||
SELECT Abreviatura FROM dbo.Gral_Monedas
|
||||
GROUP BY Abreviatura HAVING COUNT(*) > 1
|
||||
)
|
||||
THROW 51205, N'Las monedas existentes no permiten una correspondencia inequívoca.', 1;
|
||||
|
||||
SELECT
|
||||
SP.CveSolicitudPago, SP.CveSolicitud, SP.CveTramitePago, SP.CveVenta,
|
||||
S.CveCliente, S.CveFraccionamiento, S.CveFraccionamientoEtapa, S.CveTipoTramite,
|
||||
P.Nombre AS Descripcion, P.EsRequerido, V.CveMoneda,
|
||||
CONVERT(decimal(19, 6), V.Total) AS Importe,
|
||||
V.Fecha AS FechaGeneracion, V.FechaVencimiento2 AS FechaVencimiento,
|
||||
SP.FechaAlta, SP.CveUsuario
|
||||
INTO #PagosOrigenSolicitudes
|
||||
FROM dbo.Tra_SolicitudesPagos AS SP
|
||||
INNER JOIN dbo.Tra_Solicitudes AS S ON S.CveSolicitud = SP.CveSolicitud
|
||||
INNER JOIN dbo.Ventas AS V WITH (HOLDLOCK) ON V.CveVenta = SP.CveVenta
|
||||
INNER JOIN dbo.Tra_Pagos AS P ON P.CveTramitePago = SP.CveTramitePago
|
||||
WHERE V.CveCliente = S.CveCliente AND P.CveTipoTramite = S.CveTipoTramite;
|
||||
|
||||
IF (SELECT COUNT_BIG(*) FROM #PagosOrigenSolicitudes) <> @CantidadSolicitudes
|
||||
OR EXISTS
|
||||
(
|
||||
SELECT 1 FROM #PagosOrigenSolicitudes
|
||||
WHERE Importe <= 0 OR FechaVencimiento IS NULL
|
||||
)
|
||||
THROW 51206, N'Existen obligaciones con contexto, importe o vencimiento por conciliar.', 1;
|
||||
|
||||
SELECT
|
||||
O.CveSolicitudPago, D.CveVentaDetalle, D.CvePS,
|
||||
PS.PS AS Descripcion, D.Cantidad,
|
||||
CONVERT(decimal(19, 6),
|
||||
D.Importe + D.IVA + ISNULL(D.IEPS, 0)
|
||||
- ISNULL(D.ImporteRetIVA, 0) - ISNULL(D.ImporteRetISR, 0)) AS Importe
|
||||
INTO #PagosOrigenDetalle
|
||||
FROM #PagosOrigenSolicitudes AS O
|
||||
INNER JOIN dbo.VentasDetalle AS D WITH (HOLDLOCK) ON D.CveVenta = O.CveVenta
|
||||
INNER JOIN dbo.ProductosServicios AS PS ON PS.CvePS = D.CvePS;
|
||||
|
||||
IF EXISTS
|
||||
(
|
||||
SELECT 1 FROM #PagosOrigenDetalle
|
||||
WHERE Cantidad <= 0 OR Importe < 0
|
||||
)
|
||||
OR EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM #PagosOrigenSolicitudes AS O
|
||||
OUTER APPLY
|
||||
(
|
||||
SELECT SUM(D.Importe) AS Importe
|
||||
FROM #PagosOrigenDetalle AS D
|
||||
WHERE D.CveSolicitudPago = O.CveSolicitudPago
|
||||
) AS T
|
||||
WHERE T.Importe IS NULL OR T.Importe <> O.Importe
|
||||
)
|
||||
THROW 51207, N'El detalle de venta no concilia con el total de la obligación.', 1;
|
||||
|
||||
-- La plantilla actual obtiene costo vigente e IVA 16% del PA existente.
|
||||
-- No convertir esta regla de migración en una tasa fiscal para futuros cobros.
|
||||
IF OBJECT_DEFINITION(OBJECT_ID(N'dbo.PA_Vta_TramiteConceptoList'))
|
||||
NOT LIKE N'%@PorcentajeIVA decimal(9, 6) = 0.16%'
|
||||
OR OBJECT_DEFINITION(OBJECT_ID(N'dbo.PA_Vta_TramiteConceptoList')) IS NULL
|
||||
THROW 51208, N'Cambió la regla de cálculo de la plantilla; revise su migración.', 1;
|
||||
|
||||
SELECT
|
||||
D.CveTramitePagoDetalle, D.CveTramitePago, D.Cantidad, CT.CveMoneda,
|
||||
CONVERT(decimal(19, 6), CT.Importe + ROUND(CT.Importe * 0.16, 2)) AS PrecioUnitario
|
||||
INTO #PagosOrigenPlantilla
|
||||
FROM dbo.Tra_PagosDetalle AS D
|
||||
INNER JOIN dbo.Tra_Pagos AS P ON P.CveTramitePago = D.CveTramitePago
|
||||
CROSS APPLY
|
||||
(
|
||||
SELECT TOP (1) C.CveMoneda, C.Importe
|
||||
FROM dbo.Tra_CostosTramite AS C
|
||||
WHERE C.CveTipoTramite = P.CveTipoTramite AND C.CvePS = D.CvePS
|
||||
AND C.EsActivo = 1
|
||||
AND (C.FechaInicioVigencia IS NULL OR C.FechaInicioVigencia <= CONVERT(date, GETDATE()))
|
||||
AND (C.FechaFinVigencia IS NULL OR C.FechaFinVigencia >= CONVERT(date, GETDATE()))
|
||||
ORDER BY ISNULL(C.FechaInicioVigencia, CONVERT(date, '19000101')) DESC, C.CveCostoTramite DESC
|
||||
) AS CT;
|
||||
|
||||
IF (SELECT COUNT_BIG(*) FROM #PagosOrigenPlantilla) <> @CantidadDetalles
|
||||
OR EXISTS (SELECT 1 FROM #PagosOrigenPlantilla WHERE Cantidad <> 1 OR PrecioUnitario < 0)
|
||||
OR EXISTS
|
||||
(
|
||||
SELECT CveTramitePago FROM #PagosOrigenPlantilla
|
||||
GROUP BY CveTramitePago HAVING COUNT(DISTINCT CveMoneda) <> 1
|
||||
)
|
||||
OR EXISTS
|
||||
(
|
||||
SELECT 1 FROM dbo.Tra_Pagos AS P
|
||||
WHERE NOT EXISTS
|
||||
(
|
||||
SELECT 1 FROM #PagosOrigenPlantilla AS D
|
||||
WHERE D.CveTramitePago = P.CveTramitePago
|
||||
)
|
||||
)
|
||||
THROW 51209, N'La configuración de cobros requiere conciliación de costos, cantidades o monedas.', 1;
|
||||
|
||||
SELECT CveCfdiDocumento, Total, Estado, CveOrigen, TipoOrigen,
|
||||
HASHBYTES('SHA2_256', XmlSinTimbrar) AS HuellaXml
|
||||
INTO #PagosOrigenCfdi
|
||||
FROM dbo.Fac_CfdiDocumentos WITH (HOLDLOCK);
|
||||
|
||||
EXEC sys.sp_rename N'dbo.Tra_Pagos', N'Tra_TiposTramitePagos';
|
||||
EXEC sys.sp_rename N'dbo.Tra_PagosDetalle', N'Tra_TiposTramitePagosDetalle';
|
||||
EXEC sys.sp_rename N'dbo.Tra_SolicitudesPagos', N'Tra_SolicitudesPago';
|
||||
EXEC sys.sp_rename N'dbo.Vta_Pagos', N'Tra_Pagos';
|
||||
|
||||
-- Fase 1: lote separado para resolver los nuevos nombres y columnas.
|
||||
EXEC sys.sp_executesql N'CREATE TABLE dbo.Gral_UnidadesCobro
|
||||
(
|
||||
CveUnidadCobro int IDENTITY(1, 1) NOT NULL CONSTRAINT PK_Gral_UnidadesCobro PRIMARY KEY,
|
||||
Codigo varchar(10) COLLATE Modern_Spanish_CI_AS NOT NULL,
|
||||
Nombre varchar(100) COLLATE Modern_Spanish_CS_AS NOT NULL,
|
||||
EsMoneda bit NOT NULL,
|
||||
RequiereConversion bit NOT NULL,
|
||||
CveMoneda int NULL,
|
||||
Activo bit NOT NULL CONSTRAINT DF_Gral_UnidadesCobro_Activo DEFAULT (1),
|
||||
CONSTRAINT UQ_Gral_UnidadesCobro_Codigo UNIQUE (Codigo),
|
||||
CONSTRAINT FK_Gral_UnidadesCobro_Moneda FOREIGN KEY (CveMoneda)
|
||||
REFERENCES dbo.Gral_Monedas (CveMoneda),
|
||||
CONSTRAINT CK_Gral_UnidadesCobro_Moneda CHECK
|
||||
((EsMoneda = 1 AND CveMoneda IS NOT NULL) OR (EsMoneda = 0 AND CveMoneda IS NULL))
|
||||
);
|
||||
CREATE UNIQUE INDEX UX_Gral_UnidadesCobro_Moneda
|
||||
ON dbo.Gral_UnidadesCobro (CveMoneda) WHERE CveMoneda IS NOT NULL;
|
||||
|
||||
INSERT INTO dbo.Gral_UnidadesCobro
|
||||
(Codigo, Nombre, EsMoneda, RequiereConversion, CveMoneda, Activo)
|
||||
SELECT Abreviatura, Moneda, 1, CASE WHEN Abreviatura = ''MXN'' THEN 0 ELSE 1 END,
|
||||
CveMoneda, Estatus
|
||||
FROM dbo.Gral_Monedas;
|
||||
|
||||
INSERT INTO dbo.Gral_UnidadesCobro (Codigo, Nombre, EsMoneda, RequiereConversion)
|
||||
VALUES (''UMA'', ''Unidad de Medida y Actualización'', 0, 1),
|
||||
(''UDI'', ''Unidad de Inversión'', 0, 1);
|
||||
|
||||
CREATE TABLE dbo.Gral_UnidadesCobroValores
|
||||
(
|
||||
CveUnidadCobroValor int IDENTITY(1, 1) NOT NULL CONSTRAINT PK_Gral_UnidadesCobroValores PRIMARY KEY,
|
||||
CveUnidadCobro int NOT NULL,
|
||||
FechaVigencia date NOT NULL,
|
||||
ValorMXN decimal(19, 8) NOT NULL,
|
||||
Fuente varchar(500) COLLATE Modern_Spanish_CS_AS NOT NULL,
|
||||
CveUsuarioRegistro int NOT NULL,
|
||||
FechaRegistro datetime2(0) NOT NULL CONSTRAINT DF_Gral_UnidadesCobroValores_Fecha DEFAULT (SYSDATETIME()),
|
||||
CONSTRAINT FK_Gral_UnidadesCobroValores_Unidad FOREIGN KEY (CveUnidadCobro)
|
||||
REFERENCES dbo.Gral_UnidadesCobro (CveUnidadCobro),
|
||||
CONSTRAINT FK_Gral_UnidadesCobroValores_Usuario FOREIGN KEY (CveUsuarioRegistro)
|
||||
REFERENCES dbo.Sis_Usuarios (CveUsuario),
|
||||
CONSTRAINT UQ_Gral_UnidadesCobroValores_Vigencia UNIQUE (CveUnidadCobro, FechaVigencia),
|
||||
CONSTRAINT UQ_Gral_UnidadesCobroValores_Unidad UNIQUE (CveUnidadCobroValor, CveUnidadCobro),
|
||||
CONSTRAINT CK_Gral_UnidadesCobroValores_Valor CHECK (ValorMXN > 0)
|
||||
);
|
||||
|
||||
CREATE TABLE dbo.Tra_TiposSolicitudPago
|
||||
(
|
||||
CveTipoSolicitudPago int IDENTITY(1, 1) NOT NULL CONSTRAINT PK_Tra_TiposSolicitudPago PRIMARY KEY,
|
||||
Codigo varchar(30) COLLATE Modern_Spanish_CI_AS NOT NULL,
|
||||
TipoSolicitudPago varchar(100) COLLATE Modern_Spanish_CS_AS NOT NULL,
|
||||
Activo bit NOT NULL CONSTRAINT DF_Tra_TiposSolicitudPago_Activo DEFAULT (1),
|
||||
CONSTRAINT UQ_Tra_TiposSolicitudPago_Codigo UNIQUE (Codigo)
|
||||
);
|
||||
-- Claves iniciales indicadas por la especificación; identidad nueva sin datos previos.
|
||||
INSERT INTO dbo.Tra_TiposSolicitudPago (Codigo, TipoSolicitudPago)
|
||||
VALUES (''NORMAL'', ''Normal''), (''CONVENIO'', ''Convenio'');
|
||||
|
||||
ALTER TABLE dbo.Tra_TiposTramitePagos ADD
|
||||
CveUnidadCobro int NULL,
|
||||
Importe decimal(19, 6) NULL;
|
||||
ALTER TABLE dbo.Tra_TiposTramitePagosDetalle ADD
|
||||
Descripcion varchar(1000) COLLATE Modern_Spanish_CS_AS NULL,
|
||||
PrecioUnitario decimal(19, 6) NULL,
|
||||
CveUnidadCobro int NULL,
|
||||
Importe decimal(19, 6) NULL;
|
||||
|
||||
ALTER TABLE dbo.Tra_SolicitudesPago ADD
|
||||
CveTipoSolicitudPago int NULL,
|
||||
CveCliente int NULL,
|
||||
CveFraccionamiento int NULL,
|
||||
CveFraccionamientoEtapa int NULL,
|
||||
CveTipoTramite int NULL,
|
||||
Descripcion varchar(1000) COLLATE Modern_Spanish_CS_AS NULL,
|
||||
Importe decimal(19, 6) NULL,
|
||||
CveUnidadCobro int NULL,
|
||||
EsRequerido bit NULL,
|
||||
FechaGeneracion datetime2(0) NULL,
|
||||
EstadoAdministrativo varchar(20) COLLATE Modern_Spanish_CS_AS NOT NULL
|
||||
CONSTRAINT DF_Tra_SolicitudesPago_Estado DEFAULT (''ACTIVO''),
|
||||
CveUsuarioModificacion int NULL,
|
||||
FechaModificacion datetime2(0) NULL;
|
||||
';
|
||||
|
||||
-- Fase 2: lote separado para resolver los nuevos nombres y columnas.
|
||||
EXEC sys.sp_executesql N'UPDATE D
|
||||
SET Descripcion = PS.PS,
|
||||
PrecioUnitario = O.PrecioUnitario,
|
||||
CveUnidadCobro = U.CveUnidadCobro,
|
||||
Importe = ROUND(O.Cantidad * O.PrecioUnitario, 6)
|
||||
FROM dbo.Tra_TiposTramitePagosDetalle AS D
|
||||
INNER JOIN #PagosOrigenPlantilla AS O ON O.CveTramitePagoDetalle = D.CveTramitePagoDetalle
|
||||
INNER JOIN dbo.Gral_UnidadesCobro AS U ON U.CveMoneda = O.CveMoneda
|
||||
INNER JOIN dbo.ProductosServicios AS PS ON PS.CvePS = D.CvePS;
|
||||
|
||||
;WITH Totales AS
|
||||
(
|
||||
SELECT CveTramitePago, MAX(CveUnidadCobro) AS CveUnidadCobro, SUM(Importe) AS Importe
|
||||
FROM dbo.Tra_TiposTramitePagosDetalle
|
||||
GROUP BY CveTramitePago
|
||||
)
|
||||
UPDATE P
|
||||
SET CveUnidadCobro = T.CveUnidadCobro,
|
||||
Importe = T.Importe
|
||||
FROM dbo.Tra_TiposTramitePagos AS P
|
||||
INNER JOIN Totales AS T ON T.CveTramitePago = P.CveTramitePago;
|
||||
|
||||
UPDATE S
|
||||
SET CveTipoSolicitudPago = T.CveTipoSolicitudPago,
|
||||
CveCliente = O.CveCliente,
|
||||
CveFraccionamiento = O.CveFraccionamiento,
|
||||
CveFraccionamientoEtapa = O.CveFraccionamientoEtapa,
|
||||
CveTipoTramite = O.CveTipoTramite,
|
||||
Descripcion = O.Descripcion,
|
||||
Importe = O.Importe,
|
||||
CveUnidadCobro = U.CveUnidadCobro,
|
||||
EsRequerido = O.EsRequerido,
|
||||
FechaGeneracion = O.FechaGeneracion
|
||||
FROM dbo.Tra_SolicitudesPago AS S
|
||||
INNER JOIN #PagosOrigenSolicitudes AS O ON O.CveSolicitudPago = S.CveSolicitudPago
|
||||
INNER JOIN dbo.Gral_UnidadesCobro AS U ON U.CveMoneda = O.CveMoneda
|
||||
INNER JOIN dbo.Tra_TiposSolicitudPago AS T ON T.Codigo = ''NORMAL'';
|
||||
|
||||
ALTER TABLE dbo.Tra_TiposTramitePagos ALTER COLUMN CveUnidadCobro int NOT NULL;
|
||||
ALTER TABLE dbo.Tra_TiposTramitePagos ALTER COLUMN Importe decimal(19, 6) NOT NULL;
|
||||
ALTER TABLE dbo.Tra_TiposTramitePagos ADD
|
||||
CONSTRAINT FK_Tra_TiposTramitePagos_Unidad FOREIGN KEY (CveUnidadCobro)
|
||||
REFERENCES dbo.Gral_UnidadesCobro (CveUnidadCobro),
|
||||
CONSTRAINT UQ_Tra_TiposTramitePagos_Unidad UNIQUE (CveTramitePago, CveUnidadCobro),
|
||||
CONSTRAINT CK_Tra_TiposTramitePagos_Importe CHECK (Importe >= 0);
|
||||
ALTER TABLE dbo.Tra_TiposTramitePagosDetalle ALTER COLUMN Descripcion varchar(1000) COLLATE Modern_Spanish_CS_AS NOT NULL;
|
||||
ALTER TABLE dbo.Tra_TiposTramitePagosDetalle ALTER COLUMN PrecioUnitario decimal(19, 6) NOT NULL;
|
||||
ALTER TABLE dbo.Tra_TiposTramitePagosDetalle ALTER COLUMN CveUnidadCobro int NOT NULL;
|
||||
ALTER TABLE dbo.Tra_TiposTramitePagosDetalle ALTER COLUMN Importe decimal(19, 6) NOT NULL;
|
||||
ALTER TABLE dbo.Tra_TiposTramitePagosDetalle ADD
|
||||
CONSTRAINT FK_Tra_TiposTramitePagosDetalle_Unidad FOREIGN KEY (CveTramitePago, CveUnidadCobro)
|
||||
REFERENCES dbo.Tra_TiposTramitePagos (CveTramitePago, CveUnidadCobro),
|
||||
CONSTRAINT CK_Tra_TiposTramitePagosDetalle_Importe CHECK
|
||||
(PrecioUnitario >= 0 AND Importe >= 0 AND Importe = ROUND(Cantidad * PrecioUnitario, 6));
|
||||
|
||||
ALTER TABLE dbo.Tra_SolicitudesPago ALTER COLUMN CveTipoSolicitudPago int NOT NULL;
|
||||
ALTER TABLE dbo.Tra_SolicitudesPago ALTER COLUMN CveCliente int NOT NULL;
|
||||
ALTER TABLE dbo.Tra_SolicitudesPago ALTER COLUMN CveFraccionamiento int NOT NULL;
|
||||
ALTER TABLE dbo.Tra_SolicitudesPago ALTER COLUMN Descripcion varchar(1000) COLLATE Modern_Spanish_CS_AS NOT NULL;
|
||||
ALTER TABLE dbo.Tra_SolicitudesPago ALTER COLUMN Importe decimal(19, 6) NOT NULL;
|
||||
ALTER TABLE dbo.Tra_SolicitudesPago ALTER COLUMN CveUnidadCobro int NOT NULL;
|
||||
ALTER TABLE dbo.Tra_SolicitudesPago ALTER COLUMN EsRequerido bit NOT NULL;
|
||||
ALTER TABLE dbo.Tra_SolicitudesPago ALTER COLUMN FechaGeneracion datetime2(0) NOT NULL;
|
||||
-- Se conservan FechaAlta y CveUsuario como fecha/usuario de registro reales.
|
||||
-- No se inventa un autor histórico a partir del usuario que ejecuta la migración.
|
||||
ALTER TABLE dbo.Tra_SolicitudesPago DROP CONSTRAINT UQ_Tra_SolicitudesPagos_Venta;
|
||||
ALTER TABLE dbo.Tra_SolicitudesPago DROP CONSTRAINT UQ_Tra_SolicitudesPagos_SolicitudPago;
|
||||
DROP INDEX IX_Tra_SolicitudesPagos_Solicitud ON dbo.Tra_SolicitudesPago;
|
||||
ALTER TABLE dbo.Tra_SolicitudesPago ALTER COLUMN CveSolicitud int NULL;
|
||||
ALTER TABLE dbo.Tra_SolicitudesPago ALTER COLUMN CveTramitePago int NULL;
|
||||
ALTER TABLE dbo.Tra_SolicitudesPago ALTER COLUMN CveVenta int NULL;
|
||||
CREATE INDEX IX_Tra_SolicitudesPagos_Solicitud
|
||||
ON dbo.Tra_SolicitudesPago (CveSolicitud)
|
||||
INCLUDE (CveTramitePago, CveVenta, FechaAlta);
|
||||
CREATE UNIQUE INDEX UX_Tra_SolicitudesPago_Venta
|
||||
ON dbo.Tra_SolicitudesPago (CveVenta) WHERE CveVenta IS NOT NULL;
|
||||
CREATE UNIQUE INDEX UX_Tra_SolicitudesPago_PlantillaSolicitud
|
||||
ON dbo.Tra_SolicitudesPago (CveSolicitud, CveTramitePago)
|
||||
WHERE CveSolicitud IS NOT NULL AND CveTramitePago IS NOT NULL;
|
||||
ALTER TABLE dbo.Tra_SolicitudesPago ADD
|
||||
CONSTRAINT FK_Tra_SolicitudesPago_Tipo FOREIGN KEY (CveTipoSolicitudPago)
|
||||
REFERENCES dbo.Tra_TiposSolicitudPago (CveTipoSolicitudPago),
|
||||
CONSTRAINT FK_Tra_SolicitudesPago_Cliente FOREIGN KEY (CveCliente)
|
||||
REFERENCES dbo.Clientes (CveCliente),
|
||||
CONSTRAINT FK_Tra_SolicitudesPago_Fraccionamiento FOREIGN KEY (CveFraccionamiento)
|
||||
REFERENCES dbo.Fraccionamientos (CveFraccionamiento),
|
||||
CONSTRAINT FK_Tra_SolicitudesPago_Etapa FOREIGN KEY (CveFraccionamientoEtapa)
|
||||
REFERENCES dbo.FraccionamientosEtapas (CveFraccionamientoEtapa),
|
||||
CONSTRAINT FK_Tra_SolicitudesPago_TipoTramite FOREIGN KEY (CveTipoTramite)
|
||||
REFERENCES dbo.Tra_TiposTramite (CveTipoTramite),
|
||||
CONSTRAINT FK_Tra_SolicitudesPago_Unidad FOREIGN KEY (CveUnidadCobro)
|
||||
REFERENCES dbo.Gral_UnidadesCobro (CveUnidadCobro),
|
||||
CONSTRAINT FK_Tra_SolicitudesPago_UsuarioModificacion FOREIGN KEY (CveUsuarioModificacion)
|
||||
REFERENCES dbo.Sis_Usuarios (CveUsuario),
|
||||
CONSTRAINT UQ_Tra_SolicitudesPago_Unidad UNIQUE (CveSolicitudPago, CveUnidadCobro),
|
||||
CONSTRAINT CK_Tra_SolicitudesPago_Importe CHECK (Importe >= 0),
|
||||
CONSTRAINT CK_Tra_SolicitudesPago_Estado CHECK
|
||||
(EstadoAdministrativo IN (''ACTIVO'', ''CANCELADO'', ''SUSTITUIDO''));
|
||||
CREATE INDEX IX_Tra_SolicitudesPago_ClienteEstado
|
||||
ON dbo.Tra_SolicitudesPago (CveCliente, EstadoAdministrativo, FechaGeneracion)
|
||||
INCLUDE (CveFraccionamiento, CveFraccionamientoEtapa, CveSolicitud, Importe, CveUnidadCobro);
|
||||
';
|
||||
|
||||
-- Fase 3: lote separado para resolver los nuevos nombres y columnas.
|
||||
EXEC sys.sp_executesql N'CREATE TABLE dbo.Tra_SolicitudesPagoDetalle
|
||||
(
|
||||
CveSolicitudPagoDetalle int IDENTITY(1, 1) NOT NULL CONSTRAINT PK_Tra_SolicitudesPagoDetalle PRIMARY KEY,
|
||||
CveSolicitudPago int NOT NULL,
|
||||
CvePS int NOT NULL,
|
||||
Descripcion varchar(1000) COLLATE Modern_Spanish_CS_AS NOT NULL,
|
||||
Cantidad decimal(18, 4) NOT NULL,
|
||||
PrecioUnitario decimal(19, 6) NOT NULL,
|
||||
CveUnidadCobro int NOT NULL,
|
||||
Importe decimal(19, 6) NOT NULL,
|
||||
CveVentaDetalleOrigen int NULL,
|
||||
CONSTRAINT FK_Tra_SolicitudesPagoDetalle_SolicitudUnidad FOREIGN KEY (CveSolicitudPago, CveUnidadCobro)
|
||||
REFERENCES dbo.Tra_SolicitudesPago (CveSolicitudPago, CveUnidadCobro),
|
||||
CONSTRAINT FK_Tra_SolicitudesPagoDetalle_Producto FOREIGN KEY (CvePS)
|
||||
REFERENCES dbo.ProductosServicios (CvePS),
|
||||
CONSTRAINT FK_Tra_SolicitudesPagoDetalle_VentaOrigen FOREIGN KEY (CveVentaDetalleOrigen)
|
||||
REFERENCES dbo.VentasDetalle (CveVentaDetalle),
|
||||
CONSTRAINT UQ_Tra_SolicitudesPagoDetalle_Solicitud UNIQUE (CveSolicitudPagoDetalle, CveSolicitudPago),
|
||||
CONSTRAINT CK_Tra_SolicitudesPagoDetalle_Importes CHECK
|
||||
(Cantidad > 0 AND PrecioUnitario >= 0 AND Importe >= 0)
|
||||
);
|
||||
CREATE INDEX IX_Tra_SolicitudesPagoDetalle_Solicitud
|
||||
ON dbo.Tra_SolicitudesPagoDetalle (CveSolicitudPago, CvePS);
|
||||
CREATE UNIQUE INDEX UX_Tra_SolicitudesPagoDetalle_VentaOrigen
|
||||
ON dbo.Tra_SolicitudesPagoDetalle (CveVentaDetalleOrigen) WHERE CveVentaDetalleOrigen IS NOT NULL;
|
||||
|
||||
CREATE TABLE dbo.Tra_SolicitudesPagoParcialidades
|
||||
(
|
||||
CveSolicitudPagoParcialidad int IDENTITY(1, 1) NOT NULL CONSTRAINT PK_Tra_SolicitudesPagoParcialidades PRIMARY KEY,
|
||||
CveSolicitudPago int NOT NULL,
|
||||
NumeroParcialidad int NOT NULL,
|
||||
FechaVencimiento date NOT NULL,
|
||||
Importe decimal(19, 6) NOT NULL,
|
||||
CveUnidadCobro int NOT NULL,
|
||||
FechaProrroga date NULL,
|
||||
CONSTRAINT FK_Tra_SolicitudesPagoParcialidades_SolicitudUnidad FOREIGN KEY (CveSolicitudPago, CveUnidadCobro)
|
||||
REFERENCES dbo.Tra_SolicitudesPago (CveSolicitudPago, CveUnidadCobro),
|
||||
CONSTRAINT UQ_Tra_SolicitudesPagoParcialidades_Numero UNIQUE (CveSolicitudPago, NumeroParcialidad),
|
||||
CONSTRAINT UQ_Tra_SolicitudesPagoParcialidades_Solicitud UNIQUE (CveSolicitudPagoParcialidad, CveSolicitudPago),
|
||||
CONSTRAINT CK_Tra_SolicitudesPagoParcialidades_Importe CHECK (Importe >= 0 AND NumeroParcialidad > 0),
|
||||
CONSTRAINT CK_Tra_SolicitudesPagoParcialidades_Prorroga CHECK
|
||||
(FechaProrroga IS NULL OR FechaProrroga >= FechaVencimiento)
|
||||
);
|
||||
CREATE INDEX IX_Tra_SolicitudesPagoParcialidades_Vencimiento
|
||||
ON dbo.Tra_SolicitudesPagoParcialidades (FechaVencimiento, CveSolicitudPago)
|
||||
INCLUDE (FechaProrroga, Importe, CveUnidadCobro);
|
||||
|
||||
INSERT INTO dbo.Tra_SolicitudesPagoDetalle
|
||||
(CveSolicitudPago, CvePS, Descripcion, Cantidad, PrecioUnitario,
|
||||
CveUnidadCobro, Importe, CveVentaDetalleOrigen)
|
||||
SELECT D.CveSolicitudPago, D.CvePS, D.Descripcion, D.Cantidad,
|
||||
CONVERT(decimal(19, 6), D.Importe / D.Cantidad),
|
||||
S.CveUnidadCobro, D.Importe, D.CveVentaDetalle
|
||||
FROM #PagosOrigenDetalle AS D
|
||||
INNER JOIN dbo.Tra_SolicitudesPago AS S ON S.CveSolicitudPago = D.CveSolicitudPago;
|
||||
|
||||
INSERT INTO dbo.Tra_SolicitudesPagoParcialidades
|
||||
(CveSolicitudPago, NumeroParcialidad, FechaVencimiento, Importe, CveUnidadCobro)
|
||||
SELECT O.CveSolicitudPago, 1, O.FechaVencimiento, O.Importe, S.CveUnidadCobro
|
||||
FROM #PagosOrigenSolicitudes AS O
|
||||
INNER JOIN dbo.Tra_SolicitudesPago AS S ON S.CveSolicitudPago = O.CveSolicitudPago;
|
||||
|
||||
-- La restricción anterior impedía más de un abono por solicitud/plantilla.
|
||||
DROP INDEX UX_Vta_Pagos_SolicitudTramitePagoActivo ON dbo.Tra_Pagos;
|
||||
DROP INDEX IX_Vta_Pagos_Cliente_Venta ON dbo.Tra_Pagos;
|
||||
ALTER TABLE dbo.Tra_Pagos ALTER COLUMN CveVenta int NULL;
|
||||
ALTER TABLE dbo.Tra_Pagos ALTER COLUMN CveTramitePago int NULL;
|
||||
ALTER TABLE dbo.Tra_Pagos ALTER COLUMN CveMoneda int NULL;
|
||||
ALTER TABLE dbo.Tra_Pagos ALTER COLUMN Importe decimal(19, 6) NOT NULL;
|
||||
CREATE INDEX IX_Vta_Pagos_Cliente_Venta
|
||||
ON dbo.Tra_Pagos (CveCliente, CveVenta, EsActivo);
|
||||
-- Cero abonos fue comprobado con bloqueo; no se inventan factores históricos.
|
||||
ALTER TABLE dbo.Tra_Pagos ADD
|
||||
CveUnidadCobro int NOT NULL,
|
||||
CveUnidadCobroValor int NULL,
|
||||
ValorConversion decimal(19, 8) NOT NULL,
|
||||
ImporteMXN decimal(19, 6) NOT NULL;
|
||||
ALTER TABLE dbo.Tra_Pagos ADD
|
||||
CONSTRAINT FK_Tra_Pagos_Unidad FOREIGN KEY (CveUnidadCobro)
|
||||
REFERENCES dbo.Gral_UnidadesCobro (CveUnidadCobro),
|
||||
CONSTRAINT FK_Tra_Pagos_Equivalencia FOREIGN KEY (CveUnidadCobroValor, CveUnidadCobro)
|
||||
REFERENCES dbo.Gral_UnidadesCobroValores (CveUnidadCobroValor, CveUnidadCobro),
|
||||
CONSTRAINT CK_Tra_Pagos_Conversion CHECK
|
||||
(ValorConversion > 0 AND ImporteMXN > 0
|
||||
AND ImporteMXN = CONVERT(decimal(19, 6), ROUND(Importe * ValorConversion, 6)));
|
||||
CREATE INDEX IX_Tra_Pagos_ClienteFecha
|
||||
ON dbo.Tra_Pagos (CveCliente, FechaPago) INCLUDE (Importe, ImporteMXN, CveUnidadCobro, EsActivo);
|
||||
|
||||
CREATE TABLE dbo.Tra_PagosAplicaciones
|
||||
(
|
||||
CvePagoAplicacion int IDENTITY(1, 1) NOT NULL CONSTRAINT PK_Tra_PagosAplicaciones PRIMARY KEY,
|
||||
CvePago int NOT NULL,
|
||||
CveSolicitudPago int NOT NULL,
|
||||
CveSolicitudPagoParcialidad int NOT NULL,
|
||||
CveSolicitudPagoDetalle int NOT NULL,
|
||||
CveUnidadCobro int NOT NULL,
|
||||
ImporteAplicado decimal(19, 6) NOT NULL,
|
||||
ValorConversionObligacion decimal(19, 8) NOT NULL,
|
||||
ImporteAplicadoMXN decimal(19, 6) NOT NULL,
|
||||
ImportePagoConsumido decimal(19, 6) NOT NULL,
|
||||
CveUsuarioRegistro int NOT NULL,
|
||||
FechaRegistro datetime2(0) NOT NULL CONSTRAINT DF_Tra_PagosAplicaciones_Fecha DEFAULT (SYSDATETIME()),
|
||||
CONSTRAINT FK_Tra_PagosAplicaciones_Pago FOREIGN KEY (CvePago)
|
||||
REFERENCES dbo.Tra_Pagos (CvePago),
|
||||
CONSTRAINT FK_Tra_PagosAplicaciones_Parcialidad FOREIGN KEY (CveSolicitudPagoParcialidad, CveSolicitudPago)
|
||||
REFERENCES dbo.Tra_SolicitudesPagoParcialidades (CveSolicitudPagoParcialidad, CveSolicitudPago),
|
||||
CONSTRAINT FK_Tra_PagosAplicaciones_Detalle FOREIGN KEY (CveSolicitudPagoDetalle, CveSolicitudPago)
|
||||
REFERENCES dbo.Tra_SolicitudesPagoDetalle (CveSolicitudPagoDetalle, CveSolicitudPago),
|
||||
CONSTRAINT FK_Tra_PagosAplicaciones_Unidad FOREIGN KEY (CveSolicitudPago, CveUnidadCobro)
|
||||
REFERENCES dbo.Tra_SolicitudesPago (CveSolicitudPago, CveUnidadCobro),
|
||||
CONSTRAINT FK_Tra_PagosAplicaciones_Usuario FOREIGN KEY (CveUsuarioRegistro)
|
||||
REFERENCES dbo.Sis_Usuarios (CveUsuario),
|
||||
CONSTRAINT UQ_Tra_PagosAplicaciones_Destino UNIQUE
|
||||
(CvePago, CveSolicitudPagoParcialidad, CveSolicitudPagoDetalle),
|
||||
CONSTRAINT CK_Tra_PagosAplicaciones_Importes CHECK
|
||||
(ImporteAplicado > 0 AND ValorConversionObligacion > 0
|
||||
AND ImporteAplicadoMXN > 0 AND ImportePagoConsumido > 0
|
||||
AND ImporteAplicadoMXN = CONVERT(decimal(19, 6), ROUND(ImporteAplicado * ValorConversionObligacion, 6)))
|
||||
);
|
||||
CREATE INDEX IX_Tra_PagosAplicaciones_Parcialidad
|
||||
ON dbo.Tra_PagosAplicaciones (CveSolicitudPagoParcialidad)
|
||||
INCLUDE (CvePago, ImporteAplicado, CveSolicitudPagoDetalle);
|
||||
CREATE INDEX IX_Tra_PagosAplicaciones_Detalle
|
||||
ON dbo.Tra_PagosAplicaciones (CveSolicitudPagoDetalle) INCLUDE (CvePago, ImporteAplicado);
|
||||
|
||||
CREATE TABLE dbo.Tra_SolicitudesPagoRequeridoBitacora
|
||||
(
|
||||
CveSolicitudPagoRequeridoBitacora int IDENTITY(1, 1) NOT NULL
|
||||
CONSTRAINT PK_Tra_SolicitudesPagoRequeridoBitacora PRIMARY KEY,
|
||||
CveSolicitudPago int NOT NULL,
|
||||
ValorAnterior bit NOT NULL,
|
||||
ValorNuevo bit NOT NULL,
|
||||
Observacion varchar(2000) COLLATE Modern_Spanish_CS_AS NOT NULL,
|
||||
CveUsuarioRegistro int NOT NULL,
|
||||
FechaRegistro datetime2(0) NOT NULL CONSTRAINT DF_Tra_SolicitudesPagoRequeridoBitacora_Fecha DEFAULT (SYSDATETIME()),
|
||||
CONSTRAINT FK_Tra_SolicitudesPagoRequeridoBitacora_Solicitud FOREIGN KEY (CveSolicitudPago)
|
||||
REFERENCES dbo.Tra_SolicitudesPago (CveSolicitudPago),
|
||||
CONSTRAINT FK_Tra_SolicitudesPagoRequeridoBitacora_Usuario FOREIGN KEY (CveUsuarioRegistro)
|
||||
REFERENCES dbo.Sis_Usuarios (CveUsuario),
|
||||
CONSTRAINT CK_Tra_SolicitudesPagoRequeridoBitacora_Cambio CHECK
|
||||
(ValorAnterior <> ValorNuevo AND LEN(LTRIM(RTRIM(Observacion))) > 0)
|
||||
);
|
||||
CREATE INDEX IX_Tra_SolicitudesPagoRequeridoBitacora_Solicitud
|
||||
ON dbo.Tra_SolicitudesPagoRequeridoBitacora (CveSolicitudPago, FechaRegistro);
|
||||
';
|
||||
|
||||
-- Fase 4: lote separado para resolver los nuevos nombres y columnas.
|
||||
EXEC sys.sp_executesql N'CREATE TABLE dbo.Tra_SolicitudesPagoConvenio
|
||||
(
|
||||
CveSolicitudPago int NOT NULL CONSTRAINT PK_Tra_SolicitudesPagoConvenio PRIMARY KEY,
|
||||
ImporteSaldoConvenido decimal(19, 6) NOT NULL,
|
||||
Observaciones varchar(2000) COLLATE Modern_Spanish_CS_AS NULL,
|
||||
CveUsuarioRegistro int NOT NULL,
|
||||
FechaRegistro datetime2(0) NOT NULL CONSTRAINT DF_Tra_SolicitudesPagoConvenio_Fecha DEFAULT (SYSDATETIME()),
|
||||
CONSTRAINT FK_Tra_SolicitudesPagoConvenio_Solicitud FOREIGN KEY (CveSolicitudPago)
|
||||
REFERENCES dbo.Tra_SolicitudesPago (CveSolicitudPago),
|
||||
CONSTRAINT FK_Tra_SolicitudesPagoConvenio_Usuario FOREIGN KEY (CveUsuarioRegistro)
|
||||
REFERENCES dbo.Sis_Usuarios (CveUsuario),
|
||||
CONSTRAINT CK_Tra_SolicitudesPagoConvenio_Saldo CHECK (ImporteSaldoConvenido > 0)
|
||||
);
|
||||
|
||||
CREATE TABLE dbo.Tra_SolicitudesPagoConvenioOrigen
|
||||
(
|
||||
CveConvenioOrigen int IDENTITY(1, 1) NOT NULL CONSTRAINT PK_Tra_SolicitudesPagoConvenioOrigen PRIMARY KEY,
|
||||
CveSolicitudPagoConvenio int NOT NULL,
|
||||
CveSolicitudPagoOrigen int NOT NULL,
|
||||
ImporteSaldoOriginal decimal(19, 6) NOT NULL,
|
||||
ImporteTomadoConvenio decimal(19, 6) NOT NULL,
|
||||
CveUnidadCobro int NOT NULL,
|
||||
CONSTRAINT FK_Tra_SolicitudesPagoConvenioOrigen_Convenio FOREIGN KEY (CveSolicitudPagoConvenio)
|
||||
REFERENCES dbo.Tra_SolicitudesPagoConvenio (CveSolicitudPago),
|
||||
CONSTRAINT FK_Tra_SolicitudesPagoConvenioOrigen_UnidadOrigen FOREIGN KEY (CveSolicitudPagoOrigen, CveUnidadCobro)
|
||||
REFERENCES dbo.Tra_SolicitudesPago (CveSolicitudPago, CveUnidadCobro),
|
||||
CONSTRAINT FK_Tra_SolicitudesPagoConvenioOrigen_UnidadConvenio FOREIGN KEY (CveSolicitudPagoConvenio, CveUnidadCobro)
|
||||
REFERENCES dbo.Tra_SolicitudesPago (CveSolicitudPago, CveUnidadCobro),
|
||||
CONSTRAINT UQ_Tra_SolicitudesPagoConvenioOrigen_Origen UNIQUE (CveSolicitudPagoConvenio, CveSolicitudPagoOrigen),
|
||||
CONSTRAINT UQ_Tra_SolicitudesPagoConvenioOrigen_Solicitud UNIQUE (CveConvenioOrigen, CveSolicitudPagoOrigen),
|
||||
CONSTRAINT CK_Tra_SolicitudesPagoConvenioOrigen_Saldo CHECK
|
||||
(CveSolicitudPagoConvenio <> CveSolicitudPagoOrigen
|
||||
AND ImporteTomadoConvenio > 0 AND ImporteSaldoOriginal >= ImporteTomadoConvenio)
|
||||
);
|
||||
CREATE INDEX IX_Tra_SolicitudesPagoConvenioOrigen_Adeudo
|
||||
ON dbo.Tra_SolicitudesPagoConvenioOrigen (CveSolicitudPagoOrigen)
|
||||
INCLUDE (CveSolicitudPagoConvenio, ImporteTomadoConvenio);
|
||||
|
||||
CREATE TABLE dbo.Tra_SolicitudesPagoConvenioOrigenDetalle
|
||||
(
|
||||
CveConvenioOrigenDetalle int IDENTITY(1, 1) NOT NULL CONSTRAINT PK_Tra_SolicitudesPagoConvenioOrigenDetalle PRIMARY KEY,
|
||||
CveConvenioOrigen int NOT NULL,
|
||||
CveSolicitudPagoOrigen int NOT NULL,
|
||||
CveSolicitudPagoDetalleOrigen int NOT NULL,
|
||||
CveSolicitudPagoParcialidadOrigen int NOT NULL,
|
||||
ImporteSaldoOriginal decimal(19, 6) NOT NULL,
|
||||
ImporteTomadoConvenio decimal(19, 6) NOT NULL,
|
||||
CONSTRAINT FK_Tra_SolicitudesPagoConvenioOrigenDetalle_Origen FOREIGN KEY (CveConvenioOrigen, CveSolicitudPagoOrigen)
|
||||
REFERENCES dbo.Tra_SolicitudesPagoConvenioOrigen (CveConvenioOrigen, CveSolicitudPagoOrigen),
|
||||
CONSTRAINT FK_Tra_SolicitudesPagoConvenioOrigenDetalle_Producto FOREIGN KEY (CveSolicitudPagoDetalleOrigen, CveSolicitudPagoOrigen)
|
||||
REFERENCES dbo.Tra_SolicitudesPagoDetalle (CveSolicitudPagoDetalle, CveSolicitudPago),
|
||||
CONSTRAINT FK_Tra_SolicitudesPagoConvenioOrigenDetalle_Parcialidad FOREIGN KEY (CveSolicitudPagoParcialidadOrigen, CveSolicitudPagoOrigen)
|
||||
REFERENCES dbo.Tra_SolicitudesPagoParcialidades (CveSolicitudPagoParcialidad, CveSolicitudPago),
|
||||
CONSTRAINT UQ_Tra_SolicitudesPagoConvenioOrigenDetalle_Origen UNIQUE
|
||||
(CveConvenioOrigen, CveSolicitudPagoDetalleOrigen, CveSolicitudPagoParcialidadOrigen),
|
||||
CONSTRAINT CK_Tra_SolicitudesPagoConvenioOrigenDetalle_Saldo CHECK
|
||||
(ImporteTomadoConvenio > 0 AND ImporteSaldoOriginal >= ImporteTomadoConvenio)
|
||||
);
|
||||
CREATE INDEX IX_Tra_SolicitudesPagoConvenioOrigenDetalle_Producto
|
||||
ON dbo.Tra_SolicitudesPagoConvenioOrigenDetalle (CveSolicitudPagoDetalleOrigen)
|
||||
INCLUDE (CveConvenioOrigen, ImporteTomadoConvenio);
|
||||
CREATE INDEX IX_Tra_SolicitudesPagoConvenioOrigenDetalle_Parcialidad
|
||||
ON dbo.Tra_SolicitudesPagoConvenioOrigenDetalle (CveSolicitudPagoParcialidadOrigen)
|
||||
INCLUDE (CveConvenioOrigen, ImporteTomadoConvenio);
|
||||
';
|
||||
|
||||
-- Fase 5: lote separado para resolver los nuevos nombres y columnas.
|
||||
EXEC sys.sp_executesql N'ALTER TABLE dbo.Fac_CfdiDocumentos ADD
|
||||
OrigenRegistro varchar(10) COLLATE Modern_Spanish_CS_AS NOT NULL
|
||||
CONSTRAINT DF_Fac_CfdiDocumentos_OrigenRegistro DEFAULT (''INTERNO''),
|
||||
UuidExterno uniqueidentifier NULL,
|
||||
FechaTimbradoExterno datetime2(0) NULL,
|
||||
RutaXmlExterno varchar(500) COLLATE Modern_Spanish_CS_AS NULL,
|
||||
HashXmlExterno binary(32) NULL,
|
||||
RutaPdf varchar(500) COLLATE Modern_Spanish_CS_AS NULL,
|
||||
HashPdf binary(32) NULL,
|
||||
ImporteValidado bit NOT NULL CONSTRAINT DF_Fac_CfdiDocumentos_ImporteValidado DEFAULT (0),
|
||||
CveUsuarioValida int NULL,
|
||||
FechaValidacion datetime2(0) NULL;
|
||||
|
||||
-- Un documento externo puede capturarse manualmente sin un borrador de XML.
|
||||
-- Las exigencias del flujo interno se conservan mediante CHECK condicional.
|
||||
ALTER TABLE dbo.Fac_CfdiDocumentos ALTER COLUMN CveEmpresa int NULL;
|
||||
DROP INDEX IX_Fac_CfdiDocumentos_Cliente_Fecha ON dbo.Fac_CfdiDocumentos;
|
||||
ALTER TABLE dbo.Fac_CfdiDocumentos ALTER COLUMN FechaEmision datetime2(0) NULL;
|
||||
CREATE INDEX IX_Fac_CfdiDocumentos_Cliente_Fecha
|
||||
ON dbo.Fac_CfdiDocumentos (CveCliente, FechaEmision DESC, CveCfdiDocumento DESC);
|
||||
ALTER TABLE dbo.Fac_CfdiDocumentos ALTER COLUMN TipoComprobante char(1) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE dbo.Fac_CfdiDocumentos ALTER COLUMN Exportacion varchar(2) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE dbo.Fac_CfdiDocumentos ALTER COLUMN LugarExpedicion varchar(5) COLLATE Modern_Spanish_CI_AS NULL;
|
||||
ALTER TABLE dbo.Fac_CfdiDocumentos ALTER COLUMN Subtotal decimal(19, 6) NULL;
|
||||
ALTER TABLE dbo.Fac_CfdiDocumentos ALTER COLUMN Descuento decimal(19, 6) NULL;
|
||||
ALTER TABLE dbo.Fac_CfdiDocumentos ALTER COLUMN TotalImpuestosTrasladados decimal(19, 6) NULL;
|
||||
ALTER TABLE dbo.Fac_CfdiDocumentos ALTER COLUMN TotalImpuestosRetenidos decimal(19, 6) NULL;
|
||||
ALTER TABLE dbo.Fac_CfdiDocumentos ALTER COLUMN RfcEmisor varchar(13) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE dbo.Fac_CfdiDocumentos ALTER COLUMN NombreEmisor varchar(300) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE dbo.Fac_CfdiDocumentos ALTER COLUMN RegimenFiscalEmisor varchar(3) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE dbo.Fac_CfdiDocumentos ALTER COLUMN RfcReceptor varchar(13) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE dbo.Fac_CfdiDocumentos ALTER COLUMN NombreReceptor varchar(300) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE dbo.Fac_CfdiDocumentos ALTER COLUMN DomicilioFiscalReceptor varchar(5) COLLATE Modern_Spanish_CI_AS NULL;
|
||||
ALTER TABLE dbo.Fac_CfdiDocumentos ALTER COLUMN RegimenFiscalReceptor varchar(3) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE dbo.Fac_CfdiDocumentos ALTER COLUMN UsoCfdi varchar(5) COLLATE Modern_Spanish_CS_AS NULL;
|
||||
ALTER TABLE dbo.Fac_CfdiDocumentos ALTER COLUMN XmlSinTimbrar varbinary(max) NULL;
|
||||
ALTER TABLE dbo.Fac_CfdiDocumentos ALTER COLUMN HashXmlSinTimbrar binary(32) NULL;
|
||||
';
|
||||
|
||||
-- Fase 6: lote separado para resolver los nuevos nombres y columnas.
|
||||
EXEC sys.sp_executesql N'ALTER TABLE dbo.Fac_CfdiDocumentos ADD
|
||||
CONSTRAINT FK_Fac_CfdiDocumentos_UsuarioValida FOREIGN KEY (CveUsuarioValida)
|
||||
REFERENCES dbo.Sis_Usuarios (CveUsuario),
|
||||
CONSTRAINT CK_Fac_CfdiDocumentos_OrigenRegistro CHECK (OrigenRegistro IN (''INTERNO'', ''EXTERNO'')),
|
||||
CONSTRAINT CK_Fac_CfdiDocumentos_DatosInternos CHECK
|
||||
(
|
||||
OrigenRegistro = ''EXTERNO''
|
||||
OR
|
||||
(
|
||||
CveEmpresa IS NOT NULL AND FechaEmision IS NOT NULL
|
||||
AND TipoComprobante IS NOT NULL AND Exportacion IS NOT NULL
|
||||
AND LugarExpedicion IS NOT NULL AND Subtotal IS NOT NULL
|
||||
AND Descuento IS NOT NULL AND TotalImpuestosTrasladados IS NOT NULL
|
||||
AND TotalImpuestosRetenidos IS NOT NULL AND RfcEmisor IS NOT NULL
|
||||
AND NombreEmisor IS NOT NULL AND RegimenFiscalEmisor IS NOT NULL
|
||||
AND RfcReceptor IS NOT NULL AND NombreReceptor IS NOT NULL
|
||||
AND DomicilioFiscalReceptor IS NOT NULL AND RegimenFiscalReceptor IS NOT NULL
|
||||
AND UsoCfdi IS NOT NULL AND XmlSinTimbrar IS NOT NULL
|
||||
AND HashXmlSinTimbrar IS NOT NULL
|
||||
)
|
||||
),
|
||||
CONSTRAINT CK_Fac_CfdiDocumentos_OrigenXml CHECK
|
||||
(
|
||||
(OrigenRegistro = ''INTERNO'' AND UuidExterno IS NULL AND RutaXmlExterno IS NULL
|
||||
AND HashXmlExterno IS NULL AND FechaTimbradoExterno IS NULL)
|
||||
OR
|
||||
(OrigenRegistro = ''EXTERNO'' AND XmlSinTimbrar IS NULL AND HashXmlSinTimbrar IS NULL
|
||||
AND CveCfdiTimbradoVigente IS NULL)
|
||||
),
|
||||
CONSTRAINT CK_Fac_CfdiDocumentos_Archivos CHECK
|
||||
(
|
||||
((RutaXmlExterno IS NULL AND HashXmlExterno IS NULL)
|
||||
OR (RutaXmlExterno IS NOT NULL AND HashXmlExterno IS NOT NULL))
|
||||
AND
|
||||
((RutaPdf IS NULL AND HashPdf IS NULL)
|
||||
OR (RutaPdf IS NOT NULL AND HashPdf IS NOT NULL))
|
||||
),
|
||||
CONSTRAINT CK_Fac_CfdiDocumentos_Validacion CHECK
|
||||
(
|
||||
(ImporteValidado = 0 AND CveUsuarioValida IS NULL AND FechaValidacion IS NULL)
|
||||
OR (ImporteValidado = 1 AND CveUsuarioValida IS NOT NULL AND FechaValidacion IS NOT NULL)
|
||||
),
|
||||
CONSTRAINT CK_Fac_CfdiDocumentos_ExternoCompleto CHECK
|
||||
(
|
||||
OrigenRegistro = ''INTERNO'' OR Estado <> ''TIMBRADO''
|
||||
OR
|
||||
(UuidExterno IS NOT NULL AND RutaXmlExterno IS NOT NULL
|
||||
AND RutaPdf IS NOT NULL AND ImporteValidado = 1)
|
||||
);
|
||||
CREATE UNIQUE INDEX UX_Fac_CfdiDocumentos_UuidExterno
|
||||
ON dbo.Fac_CfdiDocumentos (UuidExterno) WHERE UuidExterno IS NOT NULL;
|
||||
|
||||
CREATE TABLE dbo.Tra_PagosCfdi
|
||||
(
|
||||
CvePagoCfdi int IDENTITY(1, 1) NOT NULL CONSTRAINT PK_Tra_PagosCfdi PRIMARY KEY,
|
||||
CvePago int NOT NULL,
|
||||
CveCfdiDocumento bigint NOT NULL,
|
||||
ImporteVinculadoMXN decimal(19, 6) NOT NULL,
|
||||
CveUsuarioRegistro int NOT NULL,
|
||||
FechaRegistro datetime2(0) NOT NULL CONSTRAINT DF_Tra_PagosCfdi_Fecha DEFAULT (SYSDATETIME()),
|
||||
CONSTRAINT FK_Tra_PagosCfdi_Pago FOREIGN KEY (CvePago) REFERENCES dbo.Tra_Pagos (CvePago),
|
||||
CONSTRAINT FK_Tra_PagosCfdi_Documento FOREIGN KEY (CveCfdiDocumento)
|
||||
REFERENCES dbo.Fac_CfdiDocumentos (CveCfdiDocumento),
|
||||
CONSTRAINT FK_Tra_PagosCfdi_Usuario FOREIGN KEY (CveUsuarioRegistro)
|
||||
REFERENCES dbo.Sis_Usuarios (CveUsuario),
|
||||
CONSTRAINT UQ_Tra_PagosCfdi_Vinculo UNIQUE (CvePago, CveCfdiDocumento),
|
||||
CONSTRAINT CK_Tra_PagosCfdi_Importe CHECK (ImporteVinculadoMXN > 0)
|
||||
);
|
||||
CREATE INDEX IX_Tra_PagosCfdi_Documento ON dbo.Tra_PagosCfdi (CveCfdiDocumento);
|
||||
|
||||
-- No vincular los CFDI actuales a abonos inexistentes.
|
||||
-- Su relación original con Ventas se conserva en TipoOrigen/CveOrigen.
|
||||
IF EXISTS
|
||||
(
|
||||
SELECT CveCfdiDocumento, Total, Estado, CveOrigen, TipoOrigen, HuellaXml
|
||||
FROM #PagosOrigenCfdi
|
||||
EXCEPT
|
||||
SELECT CveCfdiDocumento, Total, Estado, CveOrigen, TipoOrigen,
|
||||
HASHBYTES(''SHA2_256'', XmlSinTimbrar)
|
||||
FROM dbo.Fac_CfdiDocumentos
|
||||
)
|
||||
OR (SELECT COUNT_BIG(*) FROM #PagosOrigenCfdi) <> (SELECT COUNT_BIG(*) FROM dbo.Fac_CfdiDocumentos)
|
||||
THROW 51210, N''No se conservaron los documentos fiscales originales.'', 1;
|
||||
|
||||
IF EXISTS
|
||||
(
|
||||
SELECT CveSolicitudPago, CveSolicitud, CveTramitePago, CveVenta, Importe, FechaAlta, CveUsuario
|
||||
FROM #PagosOrigenSolicitudes
|
||||
EXCEPT
|
||||
SELECT CveSolicitudPago, CveSolicitud, CveTramitePago, CveVenta, Importe, FechaAlta, CveUsuario
|
||||
FROM dbo.Tra_SolicitudesPago
|
||||
)
|
||||
THROW 51211, N''No se conservaron las claves, importes o autores de las obligaciones.'', 1;
|
||||
|
||||
IF EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM dbo.Tra_SolicitudesPago AS S
|
||||
OUTER APPLY
|
||||
(
|
||||
SELECT SUM(D.Importe) AS Importe
|
||||
FROM dbo.Tra_SolicitudesPagoDetalle AS D
|
||||
WHERE D.CveSolicitudPago = S.CveSolicitudPago
|
||||
) AS D
|
||||
OUTER APPLY
|
||||
(
|
||||
SELECT SUM(P.Importe) AS Importe
|
||||
FROM dbo.Tra_SolicitudesPagoParcialidades AS P
|
||||
WHERE P.CveSolicitudPago = S.CveSolicitudPago
|
||||
) AS P
|
||||
WHERE D.Importe IS NULL OR D.Importe <> S.Importe
|
||||
OR P.Importe IS NULL OR P.Importe <> S.Importe
|
||||
)
|
||||
THROW 51212, N''Los detalles o parcialidades no concilian con la obligación.'', 1;
|
||||
';
|
||||
|
||||
IF @TablaPlantillas <> OBJECT_ID(N'dbo.Tra_TiposTramitePagos')
|
||||
OR @TablaDetallePlantillas <> OBJECT_ID(N'dbo.Tra_TiposTramitePagosDetalle')
|
||||
OR @TablaSolicitudes <> OBJECT_ID(N'dbo.Tra_SolicitudesPago')
|
||||
OR @TablaAbonos <> OBJECT_ID(N'dbo.Tra_Pagos')
|
||||
THROW 51213, N'No se conservaron las identidades de las tablas originales.', 1;
|
||||
|
||||
IF EXISTS
|
||||
(
|
||||
SELECT R.Clave, R.Tabla, R.Referencia FROM @Relaciones AS R
|
||||
EXCEPT
|
||||
SELECT F.object_id, F.parent_object_id, F.referenced_object_id
|
||||
FROM sys.foreign_keys AS F
|
||||
WHERE F.is_disabled = 0 AND F.is_not_trusted = 0
|
||||
)
|
||||
THROW 51214, N'No se conservaron todas las relaciones originales verificadas.', 1;
|
||||
|
||||
-- Consulta dinámica: estos nombres tienen una responsabilidad nueva tras renombrar.
|
||||
DECLARE @ConteosCorrectos bit;
|
||||
EXEC sys.sp_executesql
|
||||
N'SELECT @Correcto = CONVERT(bit, CASE WHEN
|
||||
(SELECT COUNT_BIG(*) FROM dbo.Tra_TiposTramitePagos) = @Plantillas
|
||||
AND (SELECT COUNT_BIG(*) FROM dbo.Tra_TiposTramitePagosDetalle) = @Detalles
|
||||
AND (SELECT COUNT_BIG(*) FROM dbo.Tra_SolicitudesPago) = @Solicitudes
|
||||
AND (SELECT COUNT_BIG(*) FROM dbo.Tra_Pagos) = @Abonos
|
||||
THEN 1 ELSE 0 END);',
|
||||
N'@Plantillas bigint, @Detalles bigint, @Solicitudes bigint, @Abonos bigint, @Correcto bit OUTPUT',
|
||||
@Plantillas = @CantidadPlantillas,
|
||||
@Detalles = @CantidadDetalles,
|
||||
@Solicitudes = @CantidadSolicitudes,
|
||||
@Abonos = @CantidadAbonos,
|
||||
@Correcto = @ConteosCorrectos OUTPUT;
|
||||
IF ISNULL(@ConteosCorrectos, 0) = 0
|
||||
THROW 51215, N'Los conteos finales no coinciden con el origen.', 1;
|
||||
|
||||
SELECT
|
||||
@CantidadPlantillas AS PlantillasConservadas,
|
||||
@CantidadSolicitudes AS ObligacionesMigradas,
|
||||
@CantidadAbonos AS AbonosConservados,
|
||||
N'Estructura preparada en la transacción. Faltan PAs, aplicación y configuración antes de confirmar.' AS Resultado;
|
||||
|
||||
-- Mostrar diferencias fiscales existentes sin corregirlas.
|
||||
SELECT O.CveSolicitudPago, O.CveVenta, O.Importe AS ImporteObligacion,
|
||||
F.CveCfdiDocumento, F.Total AS ImporteCfdi
|
||||
FROM #PagosOrigenSolicitudes AS O
|
||||
INNER JOIN dbo.Fac_CfdiDocumentos AS F ON F.TipoOrigen = 'VENTA' AND F.CveOrigen = O.CveVenta
|
||||
WHERE F.Total <> O.Importe;
|
||||
|
||||
DROP TABLE #PagosOrigenSolicitudes;
|
||||
DROP TABLE #PagosOrigenDetalle;
|
||||
DROP TABLE #PagosOrigenPlantilla;
|
||||
DROP TABLE #PagosOrigenCfdi;
|
||||
5266
Pagos_Convenios_Procedimientos_20260922.sql
Normal file
5266
Pagos_Convenios_Procedimientos_20260922.sql
Normal file
File diff suppressed because it is too large
Load Diff
594
Perfil_Usuario_Cambio_Contexto_20260828.sql
Normal file
594
Perfil_Usuario_Cambio_Contexto_20260828.sql
Normal file
@@ -0,0 +1,594 @@
|
||||
CREATE OR ALTER PROCEDURE dbo.PA_Sis_UsuarioGetByName
|
||||
@NombreUsuario varchar(100),
|
||||
@CveUsuarioEjecuta int,
|
||||
@ErrorMostrar varchar(max) OUTPUT,
|
||||
@ErrorTipo int OUTPUT,
|
||||
@Return bit OUTPUT
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON;
|
||||
SELECT @ErrorMostrar = NULL, @ErrorTipo = 0, @Return = 0;
|
||||
|
||||
BEGIN TRY
|
||||
SELECT TOP (1)
|
||||
U.CveUsuario,
|
||||
U.NombreUsuario,
|
||||
U.HashContrasena,
|
||||
U.CorreoElectronico,
|
||||
U.CveRol,
|
||||
R.NombreRol,
|
||||
U.Activo,
|
||||
U.DebeCambiarContrasena,
|
||||
U.IntentosFallidosInicioSesion,
|
||||
U.BloqueadoHasta,
|
||||
U.FechaUltimoInicioSesion,
|
||||
U.FechaUltimaConexion,
|
||||
U.CorreoVerificado,
|
||||
ISNULL(ClientePrincipal.CveCliente, 0) AS CveCliente
|
||||
FROM dbo.Sis_Usuarios AS U
|
||||
INNER JOIN dbo.Sis_Roles AS R
|
||||
ON R.CveRol = U.CveRol
|
||||
OUTER APPLY
|
||||
(
|
||||
SELECT TOP (1) UC.CveCliente
|
||||
FROM dbo.Sis_UsuariosClientes AS UC
|
||||
INNER JOIN dbo.Clientes AS C
|
||||
ON C.CveCliente = UC.CveCliente
|
||||
AND C.Estatus = 1
|
||||
WHERE UC.CveUsuario = U.CveUsuario
|
||||
AND UC.Activo = 1
|
||||
ORDER BY
|
||||
UC.EsPrincipal DESC,
|
||||
UC.Orden,
|
||||
UC.CveUsuarioCliente
|
||||
) AS ClientePrincipal
|
||||
WHERE U.NombreUsuario = @NombreUsuario;
|
||||
|
||||
SET @Return = 1;
|
||||
END TRY
|
||||
BEGIN CATCH
|
||||
SELECT
|
||||
@ErrorMostrar = 'Ocurrió un error al consultar el usuario; favor de contactar a Sistemas.',
|
||||
@ErrorTipo = 1,
|
||||
@Return = 0;
|
||||
|
||||
DECLARE @ErrorTecnico nvarchar(2048) =
|
||||
CONCAT(
|
||||
'Número: ', ERROR_NUMBER(),
|
||||
'; Procedimiento: ', COALESCE(ERROR_PROCEDURE(), 'PA_Sis_UsuarioGetByName'),
|
||||
'; Línea: ', ERROR_LINE(),
|
||||
'; Detalle: ', ERROR_MESSAGE());
|
||||
|
||||
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
|
||||
END CATCH;
|
||||
END;
|
||||
GO
|
||||
|
||||
CREATE OR ALTER PROCEDURE dbo.PA_Sis_PerfilGet
|
||||
@CveUsuario int,
|
||||
@CveUsuarioEjecuta int,
|
||||
@ErrorMostrar varchar(max) OUTPUT,
|
||||
@ErrorTipo int OUTPUT,
|
||||
@Return bit OUTPUT
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON;
|
||||
SELECT @ErrorMostrar = NULL, @ErrorTipo = 0, @Return = 0;
|
||||
|
||||
BEGIN TRY
|
||||
IF NOT EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM dbo.Sis_Usuarios
|
||||
WHERE CveUsuario = @CveUsuario
|
||||
AND Activo = 1
|
||||
)
|
||||
BEGIN
|
||||
SELECT
|
||||
@ErrorMostrar = 'No se encontró el usuario activo de la sesión.',
|
||||
@ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
SELECT
|
||||
U.CveUsuario,
|
||||
U.NombreUsuario,
|
||||
U.CorreoElectronico,
|
||||
U.CveRol,
|
||||
R.NombreRol,
|
||||
ISNULL(ClientePrincipal.CveCliente, 0) AS CveCliente,
|
||||
CONVERT(bit, CASE WHEN U.CveRol = 3 THEN 1 ELSE 0 END) AS EsDesarrollador
|
||||
FROM dbo.Sis_Usuarios AS U
|
||||
INNER JOIN dbo.Sis_Roles AS R
|
||||
ON R.CveRol = U.CveRol
|
||||
OUTER APPLY
|
||||
(
|
||||
SELECT TOP (1) UC.CveCliente
|
||||
FROM dbo.Sis_UsuariosClientes AS UC
|
||||
INNER JOIN dbo.Clientes AS C
|
||||
ON C.CveCliente = UC.CveCliente
|
||||
AND C.Estatus = 1
|
||||
WHERE UC.CveUsuario = U.CveUsuario
|
||||
AND UC.Activo = 1
|
||||
ORDER BY
|
||||
UC.EsPrincipal DESC,
|
||||
UC.Orden,
|
||||
UC.CveUsuarioCliente
|
||||
) AS ClientePrincipal
|
||||
WHERE U.CveUsuario = @CveUsuario;
|
||||
|
||||
SELECT
|
||||
C.CveCliente,
|
||||
C.Nombre,
|
||||
C.NombreComercial,
|
||||
C.Direccion,
|
||||
C.NoExt,
|
||||
C.NoInt,
|
||||
C.Colonia,
|
||||
C.Ciudad,
|
||||
C.Estado,
|
||||
C.Pais,
|
||||
C.RFC,
|
||||
C.CP,
|
||||
C.Telefono,
|
||||
C.Mail,
|
||||
C.CveRegimenFiscal,
|
||||
RF.CodigoRegimenFiscal,
|
||||
RF.RegimenFiscal,
|
||||
C.CveUsoCFDI,
|
||||
UCFDI.UsoCFDI,
|
||||
UCFDI.Descripcion AS DescripcionUsoCFDI
|
||||
FROM dbo.Sis_Usuarios AS U
|
||||
CROSS APPLY
|
||||
(
|
||||
SELECT TOP (1) UC.CveCliente
|
||||
FROM dbo.Sis_UsuariosClientes AS UC
|
||||
INNER JOIN dbo.Clientes AS ClienteActivo
|
||||
ON ClienteActivo.CveCliente = UC.CveCliente
|
||||
AND ClienteActivo.Estatus = 1
|
||||
WHERE UC.CveUsuario = U.CveUsuario
|
||||
AND UC.Activo = 1
|
||||
ORDER BY
|
||||
UC.EsPrincipal DESC,
|
||||
UC.Orden,
|
||||
UC.CveUsuarioCliente
|
||||
) AS ClientePrincipal
|
||||
INNER JOIN dbo.Clientes AS C
|
||||
ON C.CveCliente = ClientePrincipal.CveCliente
|
||||
LEFT JOIN dbo.Gral_RegimenesFiscales AS RF
|
||||
ON RF.CveRegimenFiscal = C.CveRegimenFiscal
|
||||
LEFT JOIN dbo.Gral_SAT_UsosCFDI AS UCFDI
|
||||
ON UCFDI.CveUsoCFDI = C.CveUsoCFDI
|
||||
WHERE U.CveUsuario = @CveUsuario
|
||||
AND U.CveRol = 3;
|
||||
|
||||
SELECT
|
||||
CveRegimenFiscal,
|
||||
CodigoRegimenFiscal,
|
||||
RegimenFiscal
|
||||
FROM dbo.Gral_RegimenesFiscales
|
||||
ORDER BY CodigoRegimenFiscal;
|
||||
|
||||
SELECT
|
||||
CveUsoCFDI,
|
||||
UsoCFDI,
|
||||
Descripcion
|
||||
FROM dbo.Gral_SAT_UsosCFDI
|
||||
ORDER BY UsoCFDI;
|
||||
|
||||
SET @Return = 1;
|
||||
END TRY
|
||||
BEGIN CATCH
|
||||
SELECT
|
||||
@ErrorMostrar = 'Ocurrió un error al consultar el perfil; favor de contactar a Sistemas.',
|
||||
@ErrorTipo = 1,
|
||||
@Return = 0;
|
||||
|
||||
DECLARE @ErrorTecnico nvarchar(2048) =
|
||||
CONCAT(
|
||||
'Número: ', ERROR_NUMBER(),
|
||||
'; Procedimiento: ', COALESCE(ERROR_PROCEDURE(), 'PA_Sis_PerfilGet'),
|
||||
'; Línea: ', ERROR_LINE(),
|
||||
'; Detalle: ', ERROR_MESSAGE());
|
||||
|
||||
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
|
||||
END CATCH;
|
||||
END;
|
||||
GO
|
||||
|
||||
CREATE OR ALTER PROCEDURE dbo.PA_Sis_PerfilSesionUpdate
|
||||
@CveUsuario int,
|
||||
@NombreUsuario varchar(100),
|
||||
@HashContrasena varchar(500) = NULL,
|
||||
@CveUsuarioEjecuta int,
|
||||
@ErrorMostrar varchar(max) OUTPUT,
|
||||
@ErrorTipo int OUTPUT,
|
||||
@Return bit OUTPUT
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON;
|
||||
SELECT @ErrorMostrar = NULL, @ErrorTipo = 0, @Return = 0;
|
||||
|
||||
BEGIN TRY
|
||||
SET @NombreUsuario = LTRIM(RTRIM(@NombreUsuario));
|
||||
SET @HashContrasena = NULLIF(LTRIM(RTRIM(@HashContrasena)), '');
|
||||
|
||||
IF NOT EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM dbo.Sis_Usuarios
|
||||
WHERE CveUsuario = @CveUsuario
|
||||
AND Activo = 1
|
||||
)
|
||||
BEGIN
|
||||
SELECT
|
||||
@ErrorMostrar = 'No se encontró el usuario activo de la sesión.',
|
||||
@ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
IF NULLIF(@NombreUsuario, '') IS NULL
|
||||
OR LEN(@NombreUsuario) < 3
|
||||
BEGIN
|
||||
SELECT
|
||||
@ErrorMostrar = 'El nombre de usuario debe contener al menos tres caracteres.',
|
||||
@ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
IF EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM dbo.Sis_Usuarios
|
||||
WHERE NombreUsuario = @NombreUsuario
|
||||
AND CveUsuario <> @CveUsuario
|
||||
)
|
||||
BEGIN
|
||||
SELECT
|
||||
@ErrorMostrar = 'El nombre de usuario ya está registrado.',
|
||||
@ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
UPDATE dbo.Sis_Usuarios
|
||||
SET NombreUsuario = @NombreUsuario,
|
||||
HashContrasena = COALESCE(@HashContrasena, HashContrasena),
|
||||
DebeCambiarContrasena =
|
||||
CASE
|
||||
WHEN @HashContrasena IS NULL
|
||||
THEN DebeCambiarContrasena
|
||||
ELSE 0
|
||||
END,
|
||||
FechaActualizacion = GETDATE()
|
||||
WHERE CveUsuario = @CveUsuario;
|
||||
|
||||
SELECT
|
||||
U.CveUsuario,
|
||||
U.NombreUsuario,
|
||||
U.CorreoElectronico,
|
||||
U.CveRol,
|
||||
R.NombreRol,
|
||||
ISNULL(ClientePrincipal.CveCliente, 0) AS CveCliente,
|
||||
CONVERT(bit, CASE WHEN U.CveRol = 3 THEN 1 ELSE 0 END) AS EsDesarrollador
|
||||
FROM dbo.Sis_Usuarios AS U
|
||||
INNER JOIN dbo.Sis_Roles AS R
|
||||
ON R.CveRol = U.CveRol
|
||||
OUTER APPLY
|
||||
(
|
||||
SELECT TOP (1) UC.CveCliente
|
||||
FROM dbo.Sis_UsuariosClientes AS UC
|
||||
INNER JOIN dbo.Clientes AS C
|
||||
ON C.CveCliente = UC.CveCliente
|
||||
AND C.Estatus = 1
|
||||
WHERE UC.CveUsuario = U.CveUsuario
|
||||
AND UC.Activo = 1
|
||||
ORDER BY
|
||||
UC.EsPrincipal DESC,
|
||||
UC.Orden,
|
||||
UC.CveUsuarioCliente
|
||||
) AS ClientePrincipal
|
||||
WHERE U.CveUsuario = @CveUsuario;
|
||||
|
||||
SET @Return = 1;
|
||||
END TRY
|
||||
BEGIN CATCH
|
||||
SELECT
|
||||
@ErrorMostrar = 'Ocurrió un error al actualizar los datos de sesión; favor de contactar a Sistemas.',
|
||||
@ErrorTipo = 1,
|
||||
@Return = 0;
|
||||
|
||||
DECLARE @ErrorTecnico nvarchar(2048) =
|
||||
CONCAT(
|
||||
'Número: ', ERROR_NUMBER(),
|
||||
'; Procedimiento: ', COALESCE(ERROR_PROCEDURE(), 'PA_Sis_PerfilSesionUpdate'),
|
||||
'; Línea: ', ERROR_LINE(),
|
||||
'; Detalle: ', ERROR_MESSAGE());
|
||||
|
||||
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
|
||||
END CATCH;
|
||||
END;
|
||||
GO
|
||||
|
||||
CREATE OR ALTER PROCEDURE dbo.PA_Clientes_PerfilUpdate
|
||||
@CveCliente int,
|
||||
@Nombre varchar(200),
|
||||
@NombreComercial varchar(200) = NULL,
|
||||
@Direccion varchar(90),
|
||||
@NoExt varchar(20) = NULL,
|
||||
@NoInt varchar(50) = NULL,
|
||||
@Colonia varchar(50),
|
||||
@Ciudad varchar(50),
|
||||
@Estado varchar(35),
|
||||
@Pais varchar(50),
|
||||
@RFC varchar(15),
|
||||
@CP varchar(10),
|
||||
@Telefono varchar(25) = NULL,
|
||||
@Mail varchar(500) = NULL,
|
||||
@CveRegimenFiscal tinyint,
|
||||
@CveUsoCFDI tinyint,
|
||||
@CveUsuarioEjecuta int,
|
||||
@ErrorMostrar varchar(max) OUTPUT,
|
||||
@ErrorTipo int OUTPUT,
|
||||
@Return bit OUTPUT
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON;
|
||||
SELECT @ErrorMostrar = NULL, @ErrorTipo = 0, @Return = 0;
|
||||
|
||||
BEGIN TRY
|
||||
SELECT
|
||||
@Nombre = LTRIM(RTRIM(@Nombre)),
|
||||
@NombreComercial = NULLIF(LTRIM(RTRIM(@NombreComercial)), ''),
|
||||
@Direccion = LTRIM(RTRIM(@Direccion)),
|
||||
@NoExt = NULLIF(LTRIM(RTRIM(@NoExt)), ''),
|
||||
@NoInt = NULLIF(LTRIM(RTRIM(@NoInt)), ''),
|
||||
@Colonia = LTRIM(RTRIM(@Colonia)),
|
||||
@Ciudad = LTRIM(RTRIM(@Ciudad)),
|
||||
@Estado = LTRIM(RTRIM(@Estado)),
|
||||
@Pais = LTRIM(RTRIM(@Pais)),
|
||||
@RFC = UPPER(REPLACE(LTRIM(RTRIM(@RFC)), ' ', '')),
|
||||
@CP = LTRIM(RTRIM(@CP)),
|
||||
@Telefono = NULLIF(LTRIM(RTRIM(@Telefono)), ''),
|
||||
@Mail = NULLIF(LTRIM(RTRIM(@Mail)), '');
|
||||
|
||||
IF NOT EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM dbo.Clientes
|
||||
WHERE CveCliente = @CveCliente
|
||||
AND Estatus = 1
|
||||
)
|
||||
BEGIN
|
||||
SELECT
|
||||
@ErrorMostrar = 'No se encontró el cliente activo del perfil.',
|
||||
@ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
IF NULLIF(@Nombre, '') IS NULL
|
||||
OR NULLIF(@Direccion, '') IS NULL
|
||||
OR NULLIF(@Colonia, '') IS NULL
|
||||
OR NULLIF(@Ciudad, '') IS NULL
|
||||
OR NULLIF(@Estado, '') IS NULL
|
||||
OR NULLIF(@Pais, '') IS NULL
|
||||
OR LEN(@RFC) NOT IN (12, 13)
|
||||
OR LEN(@CP) <> 5
|
||||
BEGIN
|
||||
SELECT
|
||||
@ErrorMostrar = 'Capture nombre fiscal, domicilio, RFC y código postal válidos.',
|
||||
@ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
IF NOT EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM dbo.Gral_RegimenesFiscales
|
||||
WHERE CveRegimenFiscal = @CveRegimenFiscal
|
||||
)
|
||||
BEGIN
|
||||
SELECT
|
||||
@ErrorMostrar = 'Seleccione un régimen fiscal válido.',
|
||||
@ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
IF NOT EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM dbo.Gral_SAT_UsosCFDI
|
||||
WHERE CveUsoCFDI = @CveUsoCFDI
|
||||
)
|
||||
BEGIN
|
||||
SELECT
|
||||
@ErrorMostrar = 'Seleccione un uso de CFDI válido.',
|
||||
@ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
UPDATE dbo.Clientes
|
||||
SET Nombre = @Nombre,
|
||||
NombreComercial = @NombreComercial,
|
||||
Direccion = @Direccion,
|
||||
NoExt = @NoExt,
|
||||
NoInt = @NoInt,
|
||||
Colonia = @Colonia,
|
||||
Ciudad = @Ciudad,
|
||||
Estado = @Estado,
|
||||
Pais = @Pais,
|
||||
RFC = @RFC,
|
||||
CP = @CP,
|
||||
Telefono = @Telefono,
|
||||
Mail = @Mail,
|
||||
CveRegimenFiscal = @CveRegimenFiscal,
|
||||
CveUsoCFDI = @CveUsoCFDI,
|
||||
CveUsuarioModifico = @CveUsuarioEjecuta
|
||||
WHERE CveCliente = @CveCliente;
|
||||
|
||||
SET @Return = 1;
|
||||
END TRY
|
||||
BEGIN CATCH
|
||||
SELECT
|
||||
@ErrorMostrar = 'Ocurrió un error al actualizar los datos del cliente; favor de contactar a Sistemas.',
|
||||
@ErrorTipo = 1,
|
||||
@Return = 0;
|
||||
|
||||
DECLARE @ErrorTecnico nvarchar(2048) =
|
||||
CONCAT(
|
||||
'Número: ', ERROR_NUMBER(),
|
||||
'; Procedimiento: ', COALESCE(ERROR_PROCEDURE(), 'PA_Clientes_PerfilUpdate'),
|
||||
'; Línea: ', ERROR_LINE(),
|
||||
'; Detalle: ', ERROR_MESSAGE());
|
||||
|
||||
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
|
||||
END CATCH;
|
||||
END;
|
||||
GO
|
||||
|
||||
CREATE OR ALTER PROCEDURE dbo.PA_Sis_UsuarioContextoList
|
||||
@Texto varchar(150) = NULL,
|
||||
@CveUsuarioEjecuta int,
|
||||
@ErrorMostrar varchar(max) OUTPUT,
|
||||
@ErrorTipo int OUTPUT,
|
||||
@Return bit OUTPUT
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON;
|
||||
SELECT @ErrorMostrar = NULL, @ErrorTipo = 0, @Return = 0;
|
||||
|
||||
BEGIN TRY
|
||||
SET @Texto = NULLIF(LTRIM(RTRIM(@Texto)), '');
|
||||
|
||||
SELECT
|
||||
U.CveUsuario,
|
||||
U.NombreUsuario,
|
||||
U.CorreoElectronico,
|
||||
U.CveRol,
|
||||
R.NombreRol,
|
||||
U.DebeCambiarContrasena,
|
||||
ISNULL(ClientePrincipal.CveCliente, 0) AS CveCliente,
|
||||
ClientePrincipal.Cliente
|
||||
FROM dbo.Sis_Usuarios AS U
|
||||
INNER JOIN dbo.Sis_Roles AS R
|
||||
ON R.CveRol = U.CveRol
|
||||
OUTER APPLY
|
||||
(
|
||||
SELECT TOP (1)
|
||||
UC.CveCliente,
|
||||
C.Nombre AS Cliente
|
||||
FROM dbo.Sis_UsuariosClientes AS UC
|
||||
INNER JOIN dbo.Clientes AS C
|
||||
ON C.CveCliente = UC.CveCliente
|
||||
AND C.Estatus = 1
|
||||
WHERE UC.CveUsuario = U.CveUsuario
|
||||
AND UC.Activo = 1
|
||||
ORDER BY
|
||||
UC.EsPrincipal DESC,
|
||||
UC.Orden,
|
||||
UC.CveUsuarioCliente
|
||||
) AS ClientePrincipal
|
||||
WHERE U.Activo = 1
|
||||
AND
|
||||
(
|
||||
@Texto IS NULL
|
||||
OR U.NombreUsuario LIKE '%' + @Texto + '%'
|
||||
OR U.CorreoElectronico LIKE '%' + @Texto + '%'
|
||||
OR ClientePrincipal.Cliente LIKE '%' + @Texto + '%'
|
||||
)
|
||||
ORDER BY U.NombreUsuario;
|
||||
|
||||
SET @Return = 1;
|
||||
END TRY
|
||||
BEGIN CATCH
|
||||
SELECT
|
||||
@ErrorMostrar = 'Ocurrió un error al consultar los usuarios disponibles; favor de contactar a Sistemas.',
|
||||
@ErrorTipo = 1,
|
||||
@Return = 0;
|
||||
|
||||
DECLARE @ErrorTecnico nvarchar(2048) =
|
||||
CONCAT(
|
||||
'Número: ', ERROR_NUMBER(),
|
||||
'; Procedimiento: ', COALESCE(ERROR_PROCEDURE(), 'PA_Sis_UsuarioContextoList'),
|
||||
'; Línea: ', ERROR_LINE(),
|
||||
'; Detalle: ', ERROR_MESSAGE());
|
||||
|
||||
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
|
||||
END CATCH;
|
||||
END;
|
||||
GO
|
||||
|
||||
CREATE OR ALTER PROCEDURE dbo.PA_Sis_UsuarioContextoGet
|
||||
@CveUsuario int,
|
||||
@CveUsuarioEjecuta int,
|
||||
@ErrorMostrar varchar(max) OUTPUT,
|
||||
@ErrorTipo int OUTPUT,
|
||||
@Return bit OUTPUT
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON;
|
||||
SELECT @ErrorMostrar = NULL, @ErrorTipo = 0, @Return = 0;
|
||||
|
||||
BEGIN TRY
|
||||
IF NOT EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM dbo.Sis_Usuarios
|
||||
WHERE CveUsuario = @CveUsuario
|
||||
AND Activo = 1
|
||||
)
|
||||
BEGIN
|
||||
SELECT
|
||||
@ErrorMostrar = 'El usuario seleccionado ya no está disponible.',
|
||||
@ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
SELECT
|
||||
U.CveUsuario,
|
||||
U.NombreUsuario,
|
||||
U.CorreoElectronico,
|
||||
U.CveRol,
|
||||
R.NombreRol,
|
||||
U.DebeCambiarContrasena,
|
||||
ISNULL(ClientePrincipal.CveCliente, 0) AS CveCliente,
|
||||
ClientePrincipal.Cliente
|
||||
FROM dbo.Sis_Usuarios AS U
|
||||
INNER JOIN dbo.Sis_Roles AS R
|
||||
ON R.CveRol = U.CveRol
|
||||
OUTER APPLY
|
||||
(
|
||||
SELECT TOP (1)
|
||||
UC.CveCliente,
|
||||
C.Nombre AS Cliente
|
||||
FROM dbo.Sis_UsuariosClientes AS UC
|
||||
INNER JOIN dbo.Clientes AS C
|
||||
ON C.CveCliente = UC.CveCliente
|
||||
AND C.Estatus = 1
|
||||
WHERE UC.CveUsuario = U.CveUsuario
|
||||
AND UC.Activo = 1
|
||||
ORDER BY
|
||||
UC.EsPrincipal DESC,
|
||||
UC.Orden,
|
||||
UC.CveUsuarioCliente
|
||||
) AS ClientePrincipal
|
||||
WHERE U.CveUsuario = @CveUsuario;
|
||||
|
||||
SET @Return = 1;
|
||||
END TRY
|
||||
BEGIN CATCH
|
||||
SELECT
|
||||
@ErrorMostrar = 'Ocurrió un error al obtener el usuario seleccionado; favor de contactar a Sistemas.',
|
||||
@ErrorTipo = 1,
|
||||
@Return = 0;
|
||||
|
||||
DECLARE @ErrorTecnico nvarchar(2048) =
|
||||
CONCAT(
|
||||
'Número: ', ERROR_NUMBER(),
|
||||
'; Procedimiento: ', COALESCE(ERROR_PROCEDURE(), 'PA_Sis_UsuarioContextoGet'),
|
||||
'; Línea: ', ERROR_LINE(),
|
||||
'; Detalle: ', ERROR_MESSAGE());
|
||||
|
||||
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
|
||||
END CATCH;
|
||||
END;
|
||||
GO
|
||||
3757
Procedimientos_Bitacora_Eventos_20260920.sql
Normal file
3757
Procedimientos_Bitacora_Eventos_20260920.sql
Normal file
File diff suppressed because it is too large
Load Diff
1064
Procedimientos_DocumentosSolicitudConfiguracion_20260918.sql
Normal file
1064
Procedimientos_DocumentosSolicitudConfiguracion_20260918.sql
Normal file
File diff suppressed because it is too large
Load Diff
1529
Procedimientos_DocumentosTramites_20260914.sql
Normal file
1529
Procedimientos_DocumentosTramites_20260914.sql
Normal file
File diff suppressed because it is too large
Load Diff
@@ -46,7 +46,6 @@ CREATE OR ALTER PROCEDURE [dbo].[PA_Sis_UsuarioLoginSuccessUpdate]
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON;
|
||||
SET XACT_ABORT ON;
|
||||
SELECT @ErrorMostrar = NULL, @ErrorTipo = 0, @Return = 0;
|
||||
|
||||
BEGIN TRY
|
||||
@@ -87,7 +86,6 @@ CREATE OR ALTER PROCEDURE [dbo].[PA_Sis_UsuarioLoginFailedUpdate]
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON;
|
||||
SET XACT_ABORT ON;
|
||||
SELECT @ErrorMostrar = NULL, @ErrorTipo = 0, @Return = 0;
|
||||
|
||||
BEGIN TRY
|
||||
@@ -136,7 +134,6 @@ CREATE OR ALTER PROCEDURE [dbo].[PA_Sis_IntentoInicioSesionAdd]
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON;
|
||||
SET XACT_ABORT ON;
|
||||
SELECT @ErrorMostrar = NULL, @ErrorTipo = 0, @Return = 0;
|
||||
|
||||
BEGIN TRY
|
||||
@@ -172,7 +169,6 @@ CREATE OR ALTER PROCEDURE [dbo].[PA_Sis_UsuarioSesionAdd]
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON;
|
||||
SET XACT_ABORT ON;
|
||||
SELECT @ErrorMostrar = NULL, @ErrorTipo = 0, @Return = 0;
|
||||
|
||||
BEGIN TRY
|
||||
@@ -215,7 +211,6 @@ CREATE OR ALTER PROCEDURE [dbo].[PA_Sis_UsuarioSesionEnd]
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON;
|
||||
SET XACT_ABORT ON;
|
||||
SELECT @ErrorMostrar = NULL, @ErrorTipo = 0, @Return = 0;
|
||||
|
||||
BEGIN TRY
|
||||
@@ -326,7 +321,6 @@ BEGIN
|
||||
WHERE RM.[CveRol] = @CveRol
|
||||
AND RM.[PuedeVer] = (1)
|
||||
AND M.[Activo] = (1)
|
||||
AND M.[Visible] = (1)
|
||||
AND RM.[Borrado] = (0)
|
||||
AND M.[Borrado] = (0)
|
||||
AND
|
||||
|
||||
BIN
Requisitos de trámites en Excel.xlsx
Normal file
BIN
Requisitos de trámites en Excel.xlsx
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,412 @@
|
||||
{
|
||||
"type": "FeatureCollection",
|
||||
"name": "Etapa1_10_lotes",
|
||||
"crs": {
|
||||
"type": "name",
|
||||
"properties": {
|
||||
"name": "EPSG:4326"
|
||||
}
|
||||
},
|
||||
"features": [
|
||||
{
|
||||
"type": "Feature",
|
||||
"properties": {
|
||||
"Etapa": "Etapa 1",
|
||||
"Nombre": "Umbrella-1",
|
||||
"Tipo": "Lote",
|
||||
"Calle": "Calle Demo 1",
|
||||
"Catastro": "CAT-001",
|
||||
"MetrosCuadrados": 200.0,
|
||||
"Duplicador": 1,
|
||||
"Estatus": "Activa"
|
||||
},
|
||||
"geometry": {
|
||||
"type": "Polygon",
|
||||
"coordinates": [
|
||||
[
|
||||
[
|
||||
-110.9555,
|
||||
29.09
|
||||
],
|
||||
[
|
||||
-110.95532,
|
||||
29.09
|
||||
],
|
||||
[
|
||||
-110.95532,
|
||||
29.090139999999998
|
||||
],
|
||||
[
|
||||
-110.9555,
|
||||
29.090139999999998
|
||||
],
|
||||
[
|
||||
-110.9555,
|
||||
29.09
|
||||
]
|
||||
]
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Feature",
|
||||
"properties": {
|
||||
"Etapa": "Etapa 1",
|
||||
"Nombre": "Umbrella-2",
|
||||
"Tipo": "Lote",
|
||||
"Calle": "Calle Demo 1",
|
||||
"Catastro": "CAT-002",
|
||||
"MetrosCuadrados": 200.0,
|
||||
"Duplicador": 1,
|
||||
"Estatus": "Activa"
|
||||
},
|
||||
"geometry": {
|
||||
"type": "Polygon",
|
||||
"coordinates": [
|
||||
[
|
||||
[
|
||||
-110.9553,
|
||||
29.09
|
||||
],
|
||||
[
|
||||
-110.95512,
|
||||
29.09
|
||||
],
|
||||
[
|
||||
-110.95512,
|
||||
29.090139999999998
|
||||
],
|
||||
[
|
||||
-110.9553,
|
||||
29.090139999999998
|
||||
],
|
||||
[
|
||||
-110.9553,
|
||||
29.09
|
||||
]
|
||||
]
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Feature",
|
||||
"properties": {
|
||||
"Etapa": "Etapa 1",
|
||||
"Nombre": "Umbrella-3",
|
||||
"Tipo": "Lote",
|
||||
"Calle": "Calle Demo 1",
|
||||
"Catastro": "CAT-003",
|
||||
"MetrosCuadrados": 200.0,
|
||||
"Duplicador": 1,
|
||||
"Estatus": "Activa"
|
||||
},
|
||||
"geometry": {
|
||||
"type": "Polygon",
|
||||
"coordinates": [
|
||||
[
|
||||
[
|
||||
-110.9551,
|
||||
29.09
|
||||
],
|
||||
[
|
||||
-110.95492,
|
||||
29.09
|
||||
],
|
||||
[
|
||||
-110.95492,
|
||||
29.090139999999998
|
||||
],
|
||||
[
|
||||
-110.9551,
|
||||
29.090139999999998
|
||||
],
|
||||
[
|
||||
-110.9551,
|
||||
29.09
|
||||
]
|
||||
]
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Feature",
|
||||
"properties": {
|
||||
"Etapa": "Etapa 1",
|
||||
"Nombre": "Umbrella-4",
|
||||
"Tipo": "Lote",
|
||||
"Calle": "Calle Demo 1",
|
||||
"Catastro": "CAT-004",
|
||||
"MetrosCuadrados": 200.0,
|
||||
"Duplicador": 1,
|
||||
"Estatus": "Activa"
|
||||
},
|
||||
"geometry": {
|
||||
"type": "Polygon",
|
||||
"coordinates": [
|
||||
[
|
||||
[
|
||||
-110.9549,
|
||||
29.09
|
||||
],
|
||||
[
|
||||
-110.95472,
|
||||
29.09
|
||||
],
|
||||
[
|
||||
-110.95472,
|
||||
29.090139999999998
|
||||
],
|
||||
[
|
||||
-110.9549,
|
||||
29.090139999999998
|
||||
],
|
||||
[
|
||||
-110.9549,
|
||||
29.09
|
||||
]
|
||||
]
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Feature",
|
||||
"properties": {
|
||||
"Etapa": "Etapa 1",
|
||||
"Nombre": "Umbrella-5",
|
||||
"Tipo": "Lote",
|
||||
"Calle": "Calle Demo 1",
|
||||
"Catastro": "CAT-005",
|
||||
"MetrosCuadrados": 200.0,
|
||||
"Duplicador": 1,
|
||||
"Estatus": "Activa"
|
||||
},
|
||||
"geometry": {
|
||||
"type": "Polygon",
|
||||
"coordinates": [
|
||||
[
|
||||
[
|
||||
-110.9547,
|
||||
29.09
|
||||
],
|
||||
[
|
||||
-110.95452,
|
||||
29.09
|
||||
],
|
||||
[
|
||||
-110.95452,
|
||||
29.090139999999998
|
||||
],
|
||||
[
|
||||
-110.9547,
|
||||
29.090139999999998
|
||||
],
|
||||
[
|
||||
-110.9547,
|
||||
29.09
|
||||
]
|
||||
]
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Feature",
|
||||
"properties": {
|
||||
"Etapa": "Etapa 1",
|
||||
"Nombre": "Umbrella-6",
|
||||
"Tipo": "Lote",
|
||||
"Calle": "Calle Demo 2",
|
||||
"Catastro": "CAT-006",
|
||||
"MetrosCuadrados": 200.0,
|
||||
"Duplicador": 1,
|
||||
"Estatus": "Activa"
|
||||
},
|
||||
"geometry": {
|
||||
"type": "Polygon",
|
||||
"coordinates": [
|
||||
[
|
||||
[
|
||||
-110.9555,
|
||||
29.09016
|
||||
],
|
||||
[
|
||||
-110.95532,
|
||||
29.09016
|
||||
],
|
||||
[
|
||||
-110.95532,
|
||||
29.0903
|
||||
],
|
||||
[
|
||||
-110.9555,
|
||||
29.0903
|
||||
],
|
||||
[
|
||||
-110.9555,
|
||||
29.09016
|
||||
]
|
||||
]
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Feature",
|
||||
"properties": {
|
||||
"Etapa": "Etapa 1",
|
||||
"Nombre": "Umbrella-7",
|
||||
"Tipo": "Lote",
|
||||
"Calle": "Calle Demo 2",
|
||||
"Catastro": "CAT-007",
|
||||
"MetrosCuadrados": 200.0,
|
||||
"Duplicador": 1,
|
||||
"Estatus": "Activa"
|
||||
},
|
||||
"geometry": {
|
||||
"type": "Polygon",
|
||||
"coordinates": [
|
||||
[
|
||||
[
|
||||
-110.9553,
|
||||
29.09016
|
||||
],
|
||||
[
|
||||
-110.95512,
|
||||
29.09016
|
||||
],
|
||||
[
|
||||
-110.95512,
|
||||
29.0903
|
||||
],
|
||||
[
|
||||
-110.9553,
|
||||
29.0903
|
||||
],
|
||||
[
|
||||
-110.9553,
|
||||
29.09016
|
||||
]
|
||||
]
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Feature",
|
||||
"properties": {
|
||||
"Etapa": "Etapa 1",
|
||||
"Nombre": "Umbrella-8",
|
||||
"Tipo": "Lote",
|
||||
"Calle": "Calle Demo 2",
|
||||
"Catastro": "CAT-008",
|
||||
"MetrosCuadrados": 200.0,
|
||||
"Duplicador": 1,
|
||||
"Estatus": "Activa"
|
||||
},
|
||||
"geometry": {
|
||||
"type": "Polygon",
|
||||
"coordinates": [
|
||||
[
|
||||
[
|
||||
-110.9551,
|
||||
29.09016
|
||||
],
|
||||
[
|
||||
-110.95492,
|
||||
29.09016
|
||||
],
|
||||
[
|
||||
-110.95492,
|
||||
29.0903
|
||||
],
|
||||
[
|
||||
-110.9551,
|
||||
29.0903
|
||||
],
|
||||
[
|
||||
-110.9551,
|
||||
29.09016
|
||||
]
|
||||
]
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Feature",
|
||||
"properties": {
|
||||
"Etapa": "Etapa 1",
|
||||
"Nombre": "Umbrella-9",
|
||||
"Tipo": "Lote",
|
||||
"Calle": "Calle Demo 2",
|
||||
"Catastro": "CAT-009",
|
||||
"MetrosCuadrados": 200.0,
|
||||
"Duplicador": 1,
|
||||
"Estatus": "Activa"
|
||||
},
|
||||
"geometry": {
|
||||
"type": "Polygon",
|
||||
"coordinates": [
|
||||
[
|
||||
[
|
||||
-110.9549,
|
||||
29.09016
|
||||
],
|
||||
[
|
||||
-110.95472,
|
||||
29.09016
|
||||
],
|
||||
[
|
||||
-110.95472,
|
||||
29.0903
|
||||
],
|
||||
[
|
||||
-110.9549,
|
||||
29.0903
|
||||
],
|
||||
[
|
||||
-110.9549,
|
||||
29.09016
|
||||
]
|
||||
]
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Feature",
|
||||
"properties": {
|
||||
"Etapa": "Etapa 1",
|
||||
"Nombre": "Umbrella-10",
|
||||
"Tipo": "Lote",
|
||||
"Calle": "Calle Demo 2",
|
||||
"Catastro": "CAT-010",
|
||||
"MetrosCuadrados": 200.0,
|
||||
"Duplicador": 1,
|
||||
"Estatus": "Activa"
|
||||
},
|
||||
"geometry": {
|
||||
"type": "Polygon",
|
||||
"coordinates": [
|
||||
[
|
||||
[
|
||||
-110.9547,
|
||||
29.09016
|
||||
],
|
||||
[
|
||||
-110.95452,
|
||||
29.09016
|
||||
],
|
||||
[
|
||||
-110.95452,
|
||||
29.0903
|
||||
],
|
||||
[
|
||||
-110.9547,
|
||||
29.0903
|
||||
],
|
||||
[
|
||||
-110.9547,
|
||||
29.09016
|
||||
]
|
||||
]
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 125 KiB |
Binary file not shown.
Binary file not shown.
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user