Compare commits
18 Commits
main
...
a3b9ffef1c
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a3b9ffef1c | ||
|
|
c4f958e688 | ||
|
|
547ec5d45a | ||
|
|
bb4934a031 | ||
|
|
c6cb8d5cce | ||
|
|
e5cfa0f10c | ||
|
|
5033fbbc06 | ||
|
|
58af3ffece | ||
|
|
4bea52c7ab | ||
|
|
fba8e12376 | ||
|
|
1c84a87f11 | ||
|
|
3c0b18f474 | ||
|
|
4e80ecca77 | ||
|
|
da4af4cb2a | ||
|
|
330129d24d | ||
|
|
45ce71c7da | ||
|
|
8f33c860ec | ||
|
|
30f2f917a4 |
4
.gitignore
vendored
4
.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
|
||||
|
||||
Binary file not shown.
737
AGENTS.md
737
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,52 @@ 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.
|
||||
|
||||
---
|
||||
## 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
|
||||
|
||||
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
|
||||
|
||||
@@ -723,46 +125,3 @@ Do not add the following until the user explicitly asks:
|
||||
The starter must stay small and focused: commands, master page, login, contracts, dummy user session, bundle structure, copied assets, and centralized SQL foundation.
|
||||
|
||||
---
|
||||
|
||||
## 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.
|
||||
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`.
|
||||
153
AGENTS_MANTENIMIENTO_PROYECTO.md
Normal file
153
AGENTS_MANTENIMIENTO_PROYECTO.md
Normal file
@@ -0,0 +1,153 @@
|
||||
# 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
|
||||
|
||||
- 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.
|
||||
|
||||
@@ -43,21 +43,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 +72,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 +83,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 +98,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 +115,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.
|
||||
|
||||
415
AGENTS_WEBFORMS_ESTRUCTURA.md
Normal file
415
AGENTS_WEBFORMS_ESTRUCTURA.md
Normal file
@@ -0,0 +1,415 @@
|
||||
# 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.
|
||||
- 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.
|
||||
|
||||
---
|
||||
|
||||
## 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`.
|
||||
|
||||
---
|
||||
|
||||
## 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.
|
||||
- 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.
|
||||
|
||||
---
|
||||
|
||||
## 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`.
|
||||
|
||||
---
|
||||
|
||||
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.
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
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.
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.
@@ -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
|
||||
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
|
||||
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
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
|
||||
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;
|
||||
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
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
|
||||
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
|
||||
@@ -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.
@@ -1,103 +1,19 @@
|
||||
<%@ Page Title="Acceso denegado" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true" CodeBehind="AccessDenied.aspx.cs" Inherits="SIG.Web.AccessDenied" %>
|
||||
<%@ Page Title="Acceso denegado"
|
||||
Language="C#"
|
||||
MasterPageFile="~/Site.master"
|
||||
AutoEventWireup="true"
|
||||
CodeFile="AccessDenied.aspx.cs"
|
||||
Inherits="SIG.Web.AccessDenied" %>
|
||||
|
||||
<asp:Content ID="ContentHead" ContentPlaceHolderID="H" runat="server">
|
||||
<style type="text/css">
|
||||
.access-denied-wrapper {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
min-height: calc(100vh - 190px);
|
||||
padding: 30px 15px;
|
||||
}
|
||||
|
||||
.access-denied-card {
|
||||
width: 100%;
|
||||
max-width: 680px;
|
||||
padding: 42px 38px;
|
||||
background: #ffffff;
|
||||
border-top: 4px solid #e7505a;
|
||||
box-shadow: 0 4px 18px rgba(0, 0, 0, .10);
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.access-denied-icon {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
width: 84px;
|
||||
height: 84px;
|
||||
margin-bottom: 18px;
|
||||
border-radius: 50%;
|
||||
color: #e7505a;
|
||||
background: #fbeaec;
|
||||
font-size: 38px;
|
||||
}
|
||||
|
||||
.access-denied-code {
|
||||
margin: 0 0 4px;
|
||||
color: #e7505a;
|
||||
font-size: 18px;
|
||||
font-weight: 700;
|
||||
letter-spacing: 2px;
|
||||
}
|
||||
|
||||
.access-denied-title {
|
||||
margin: 0 0 14px;
|
||||
color: #34495e;
|
||||
font-size: 30px;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.access-denied-message {
|
||||
max-width: 520px;
|
||||
margin: 0 auto 28px;
|
||||
color: #697882;
|
||||
font-size: 15px;
|
||||
line-height: 1.7;
|
||||
}
|
||||
|
||||
.access-denied-actions .btn {
|
||||
margin: 4px;
|
||||
}
|
||||
|
||||
@media (max-width: 600px) {
|
||||
.access-denied-card {
|
||||
padding: 32px 20px;
|
||||
}
|
||||
|
||||
.access-denied-title {
|
||||
font-size: 25px;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
</asp:Content>
|
||||
|
||||
<asp:Content ID="ContentMain" ContentPlaceHolderID="C" runat="server">
|
||||
<div class="access-denied-wrapper">
|
||||
<section class="access-denied-card" aria-labelledby="accessDeniedTitle">
|
||||
<div class="access-denied-icon" aria-hidden="true">
|
||||
<i class="fa fa-lock"></i>
|
||||
</div>
|
||||
|
||||
<p class="access-denied-code">ERROR 403</p>
|
||||
<h1 id="accessDeniedTitle" class="access-denied-title">Acceso denegado</h1>
|
||||
<p class="access-denied-message">
|
||||
Tu sesión está activa, pero tu usuario no cuenta con permiso para consultar esta página.
|
||||
Si necesitas acceso, solicita la autorización correspondiente al administrador del sistema.
|
||||
</p>
|
||||
|
||||
<div class="access-denied-actions">
|
||||
<a class="btn blue" href="<%= ResolveUrl("~/Inicio.aspx") %>">
|
||||
<i class="fa fa-home"></i> Ir al inicio
|
||||
</a>
|
||||
<button type="button" class="btn default" onclick="window.history.back();">
|
||||
<i class="fa fa-arrow-left"></i> Regresar
|
||||
</button>
|
||||
<a class="btn red" href="<%= ResolveUrl("~/Logout.aspx") %>">
|
||||
<i class="fa fa-sign-out"></i> Cerrar sesión
|
||||
</a>
|
||||
</div>
|
||||
</section>
|
||||
<div class="note note-warning">
|
||||
<h4 class="block">Acceso denegado</h4>
|
||||
<p>
|
||||
No cuenta con acceso a esta página desde el menú asignado a su usuario.
|
||||
</p>
|
||||
</div>
|
||||
</asp:Content>
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<ajaxControlToolkit>
|
||||
<controlBundles>
|
||||
<controlBundle name="Accordion">
|
||||
|
||||
@@ -1,59 +0,0 @@
|
||||
using SIG.Web.AppCode.Contracts.Database;
|
||||
using SIG.Web.AppCode.Contracts.Search;
|
||||
using SIG.Web.AppCode.Contracts.Security;
|
||||
using SIG.Web.AppCode.Notifications.Contracts;
|
||||
using SIG.Web.AppCode.Notifications.Services;
|
||||
using SIG.Web.AppCode.Repositories.Security;
|
||||
using SIG.Web.AppCode.Services.Database;
|
||||
using SIG.Web.AppCode.Services.Menu;
|
||||
using SIG.Web.AppCode.Services.Search;
|
||||
using SIG.Web.AppCode.Services.Security;
|
||||
using SIG.Web.AppCode.Session;
|
||||
|
||||
namespace SIG.Web.AppCode.Configuration
|
||||
{
|
||||
public static class AppServices
|
||||
{
|
||||
public static IDbConnectionFactory DbConnectionFactory { get; private set; }
|
||||
public static IDbExecutor DbExecutor { get; private set; }
|
||||
public static IPasswordHasher PasswordHasher { get; private set; }
|
||||
public static IUserRepository UserRepository { get; private set; }
|
||||
public static IUserAdministrationRepository UserAdministrationRepository { get; private set; }
|
||||
public static IPublicRegistrationService PublicRegistrationService { get; private set; }
|
||||
public static ILoginAttemptRepository LoginAttemptRepository { get; private set; } public static IUserSessionRepository UserSessionRepository { get; private set; }
|
||||
public static ILoginService LoginService { get; private set; }
|
||||
public static IUserContextProvider UserContext { get; private set; }
|
||||
public static IPermissionService PermissionService { get; private set; }
|
||||
public static IMenuProvider MenuProvider { get; private set; }
|
||||
public static INotificationCenter NotificationCenter { get; private set; }
|
||||
public static IBuscadorCatalogoDataProvider SearchProvider { get; private set; }
|
||||
|
||||
public static void Configure()
|
||||
{
|
||||
DbConnectionFactory = new DbConnectionFactory();
|
||||
DbExecutor = new DbExecutor(DbConnectionFactory);
|
||||
|
||||
PasswordHasher = new PasswordHasher();
|
||||
|
||||
UserRepository = new UserRepository(DbExecutor);
|
||||
UserAdministrationRepository = new UserAdministrationRepository(DbExecutor);
|
||||
LoginAttemptRepository = new LoginAttemptRepository(DbExecutor); UserSessionRepository = new UserSessionRepository(DbExecutor);
|
||||
|
||||
UserContext = new WebFormsUserContextProvider();
|
||||
PermissionService = new PermissionService(DbExecutor);
|
||||
MenuProvider = new MenuProvider(DbExecutor);
|
||||
NotificationCenter = new DummyNotificationCenter();
|
||||
SearchProvider = new DummyBuscadorCatalogoDataProvider();
|
||||
|
||||
LoginService = new LoginService(
|
||||
UserRepository,
|
||||
PasswordHasher,
|
||||
LoginAttemptRepository,
|
||||
UserSessionRepository);
|
||||
|
||||
PublicRegistrationService = new PublicRegistrationService(
|
||||
UserAdministrationRepository,
|
||||
PasswordHasher,
|
||||
new SmtpEmailSender());
|
||||
} }
|
||||
}
|
||||
@@ -1,8 +0,0 @@
|
||||
using SIG.Web.AppCode.Session;
|
||||
namespace SIG.Web.AppCode.Contracts.Security
|
||||
{
|
||||
public interface IUserContextProvider
|
||||
{
|
||||
bool IsAuthenticated(); UserSessionModel GetCurrentUser(); void SetCurrentUser(UserSessionModel user); void Clear();
|
||||
}
|
||||
}
|
||||
@@ -1,12 +0,0 @@
|
||||
using SIG.Web.AppCode.Session;
|
||||
namespace SIG.Web.AppCode.Models.Security
|
||||
{
|
||||
public sealed class LoginResult
|
||||
{
|
||||
public bool Exitoso { get; private set; }
|
||||
public string Mensaje { get; private set; }
|
||||
public UserSessionModel Usuario { get; private set; }
|
||||
public static LoginResult Ok(UserSessionModel usuario) { return new LoginResult { Exitoso = true, Usuario = usuario, Mensaje = string.Empty }; }
|
||||
public static LoginResult Fail(string mensaje) { return new LoginResult { Exitoso = false, Mensaje = mensaje }; }
|
||||
}
|
||||
}
|
||||
@@ -1,40 +0,0 @@
|
||||
using System.Data;
|
||||
using SIG.Web.AppCode.Contracts.Database;
|
||||
using SIG.Web.AppCode.Contracts.Security;
|
||||
using SIG.Web.AppCode.Models.Common;
|
||||
using SIG.Web.AppCode.Services.Database;
|
||||
|
||||
namespace SIG.Web.AppCode.Repositories.Security
|
||||
{
|
||||
public sealed class LoginAttemptRepository : ILoginAttemptRepository
|
||||
{
|
||||
private readonly IDbExecutor _dbExecutor;
|
||||
|
||||
public LoginAttemptRepository(IDbExecutor dbExecutor)
|
||||
{
|
||||
_dbExecutor = dbExecutor;
|
||||
}
|
||||
|
||||
public DbResult<bool> Save(int? cveUser, string username, bool wasSuccessful, string failureReason, string ipAddress, string userAgent, string domainName)
|
||||
{
|
||||
return _dbExecutor.Execute(domainName, connection =>
|
||||
{
|
||||
using (IDbCommand command = connection.CreateCommand())
|
||||
{
|
||||
StoredProcedureCommand.Configure(command, "dbo.PA_Sis_IntentoInicioSesionAdd", cveUser ?? 0);
|
||||
StoredProcedureCommand.AddInput(command, "@CveUsuario", cveUser.HasValue ? (object)cveUser.Value : null, DbType.Int32);
|
||||
StoredProcedureCommand.AddInput(command, "@NombreUsuario", username, DbType.String);
|
||||
StoredProcedureCommand.AddInput(command, "@Exitoso", wasSuccessful, DbType.Boolean);
|
||||
StoredProcedureCommand.AddInput(command, "@MotivoFallo", failureReason, DbType.String);
|
||||
StoredProcedureCommand.AddInput(command, "@DireccionIP", ipAddress, DbType.String);
|
||||
StoredProcedureCommand.AddInput(command, "@AgenteUsuario", userAgent, DbType.String);
|
||||
StoredProcedureCommand.AddInput(command, "@NombreDominio", domainName, DbType.String);
|
||||
|
||||
command.ExecuteNonQuery();
|
||||
StoredProcedureCommand.EnsureSuccess(command);
|
||||
return true;
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,68 +0,0 @@
|
||||
using System;
|
||||
using System.Data;
|
||||
using SIG.Web.AppCode.Contracts.Database;
|
||||
using SIG.Web.AppCode.Contracts.Security;
|
||||
using SIG.Web.AppCode.Models.Common;
|
||||
using SIG.Web.AppCode.Models.Security;
|
||||
using SIG.Web.AppCode.Services.Database;
|
||||
using SIG.Web.AppCode.Utilities;
|
||||
|
||||
namespace SIG.Web.AppCode.Repositories.Security
|
||||
{
|
||||
public sealed class UserRepository : IUserRepository
|
||||
{
|
||||
private readonly IDbExecutor _dbExecutor;
|
||||
|
||||
public UserRepository(IDbExecutor dbExecutor)
|
||||
{
|
||||
_dbExecutor = dbExecutor;
|
||||
}
|
||||
|
||||
public DbResult<UserModel> ObtenerPorNombreUsuario(string username, string domainName)
|
||||
{
|
||||
return _dbExecutor.Execute(domainName, connection =>
|
||||
{
|
||||
using (IDbCommand command = connection.CreateCommand())
|
||||
{
|
||||
StoredProcedureCommand.Configure(command, "dbo.PA_Sis_UsuarioGetByName", 0);
|
||||
StoredProcedureCommand.AddInput(command, "@NombreUsuario", username, DbType.String);
|
||||
|
||||
UserModel user;
|
||||
|
||||
using (IDataReader reader = command.ExecuteReader())
|
||||
{
|
||||
user = reader.ToObject<UserModel>();
|
||||
}
|
||||
|
||||
StoredProcedureCommand.EnsureSuccess(command);
|
||||
return user;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public DbResult<bool> RegisterSuccessfulLogin(int cveUser, string domainName)
|
||||
{
|
||||
return ExecuteUserUpdate("dbo.PA_Sis_UsuarioLoginSuccessUpdate", cveUser, domainName);
|
||||
}
|
||||
|
||||
public DbResult<bool> RegisterFailedLogin(int cveUser, string domainName)
|
||||
{
|
||||
return ExecuteUserUpdate("dbo.PA_Sis_UsuarioLoginFailedUpdate", cveUser, domainName);
|
||||
}
|
||||
|
||||
private DbResult<bool> ExecuteUserUpdate(string procedureName, int cveUser, string domainName)
|
||||
{
|
||||
return _dbExecutor.Execute(domainName, connection =>
|
||||
{
|
||||
using (IDbCommand command = connection.CreateCommand())
|
||||
{
|
||||
StoredProcedureCommand.Configure(command, procedureName, cveUser);
|
||||
StoredProcedureCommand.AddInput(command, "@CveUsuario", cveUser, DbType.Int32);
|
||||
command.ExecuteNonQuery();
|
||||
StoredProcedureCommand.EnsureSuccess(command);
|
||||
return true;
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,54 +0,0 @@
|
||||
using System.Data;
|
||||
using SIG.Web.AppCode.Contracts.Database;
|
||||
using SIG.Web.AppCode.Contracts.Security;
|
||||
using SIG.Web.AppCode.Models.Common;
|
||||
using SIG.Web.AppCode.Services.Database;
|
||||
|
||||
namespace SIG.Web.AppCode.Repositories.Security
|
||||
{
|
||||
public sealed class UserSessionRepository : IUserSessionRepository
|
||||
{
|
||||
private readonly IDbExecutor _dbExecutor;
|
||||
|
||||
public UserSessionRepository(IDbExecutor dbExecutor)
|
||||
{
|
||||
_dbExecutor = dbExecutor;
|
||||
}
|
||||
|
||||
public DbResult<bool> StartSession(int cveUser, string sessionToken, string ipAddress, string userAgent, string domainName)
|
||||
{
|
||||
return _dbExecutor.Execute(domainName, connection =>
|
||||
{
|
||||
using (IDbCommand command = connection.CreateCommand())
|
||||
{
|
||||
StoredProcedureCommand.Configure(command, "dbo.PA_Sis_UsuarioSesionAdd", cveUser);
|
||||
StoredProcedureCommand.AddInput(command, "@CveUsuario", cveUser, DbType.Int32);
|
||||
StoredProcedureCommand.AddInput(command, "@TokenSesion", sessionToken, DbType.String);
|
||||
StoredProcedureCommand.AddInput(command, "@DireccionIP", ipAddress, DbType.String);
|
||||
StoredProcedureCommand.AddInput(command, "@AgenteUsuario", userAgent, DbType.String);
|
||||
StoredProcedureCommand.AddInput(command, "@NombreDominio", domainName, DbType.String);
|
||||
|
||||
command.ExecuteNonQuery();
|
||||
StoredProcedureCommand.EnsureSuccess(command);
|
||||
return true;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public DbResult<bool> EndSession(string sessionToken, string domainName)
|
||||
{
|
||||
return _dbExecutor.Execute(domainName, connection =>
|
||||
{
|
||||
using (IDbCommand command = connection.CreateCommand())
|
||||
{
|
||||
StoredProcedureCommand.Configure(command, "dbo.PA_Sis_UsuarioSesionEnd", 0);
|
||||
StoredProcedureCommand.AddInput(command, "@TokenSesion", sessionToken, DbType.String);
|
||||
|
||||
command.ExecuteNonQuery();
|
||||
StoredProcedureCommand.EnsureSuccess(command);
|
||||
return true;
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,106 +0,0 @@
|
||||
using System;
|
||||
using System.Configuration;
|
||||
using System.IO;
|
||||
using System.Text;
|
||||
using System.Web;
|
||||
|
||||
namespace SIG.Web.AppCode.Services.Logging
|
||||
{
|
||||
public static class ExceptionLogger
|
||||
{
|
||||
private static readonly object LockObject = new object();
|
||||
|
||||
public static void Log(Exception exception, string source)
|
||||
{
|
||||
Log(exception, source, null);
|
||||
}
|
||||
|
||||
public static void Log(Exception exception, string source, string userMessage)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (exception == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
string logPath = GetLogPath();
|
||||
string directory = Path.GetDirectoryName(logPath);
|
||||
|
||||
if (!Directory.Exists(directory))
|
||||
{
|
||||
Directory.CreateDirectory(directory);
|
||||
}
|
||||
|
||||
string content = BuildLogContent(exception, source, userMessage);
|
||||
|
||||
lock (LockObject)
|
||||
{
|
||||
File.AppendAllText(logPath, content, Encoding.UTF8);
|
||||
}
|
||||
}
|
||||
catch
|
||||
{
|
||||
// Never throw from the logger.
|
||||
// If the logger fails, the application must continue.
|
||||
}
|
||||
}
|
||||
|
||||
private static string GetLogPath()
|
||||
{
|
||||
string configuredPath = ConfigurationManager.AppSettings["ExceptionLogFilePath"];
|
||||
|
||||
if (string.IsNullOrWhiteSpace(configuredPath))
|
||||
{
|
||||
configuredPath = "~/log/log.txt";
|
||||
}
|
||||
|
||||
if (HttpContext.Current != null)
|
||||
{
|
||||
return HttpContext.Current.Server.MapPath(configuredPath);
|
||||
}
|
||||
|
||||
return Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "log", "log.txt");
|
||||
}
|
||||
|
||||
private static string BuildLogContent(Exception exception, string source, string userMessage)
|
||||
{
|
||||
var sb = new StringBuilder();
|
||||
|
||||
sb.AppendLine("============================================================");
|
||||
sb.AppendLine("Date: " + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"));
|
||||
sb.AppendLine("Source: " + Safe(source));
|
||||
sb.AppendLine("UserMessage: " + Safe(userMessage));
|
||||
|
||||
HttpContext context = HttpContext.Current;
|
||||
|
||||
if (context != null && context.Request != null)
|
||||
{
|
||||
sb.AppendLine("Url: " + Safe(context.Request.Url != null ? context.Request.Url.ToString() : null));
|
||||
sb.AppendLine("HttpMethod: " + Safe(context.Request.HttpMethod));
|
||||
sb.AppendLine("DireccionIP: " + Safe(context.Request.UserHostAddress));
|
||||
sb.AppendLine("AgenteUsuario: " + Safe(context.Request.UserAgent));
|
||||
}
|
||||
|
||||
if (context != null && context.User != null && context.User.Identity != null)
|
||||
{
|
||||
sb.AppendLine("Identity: " + Safe(context.User.Identity.Name));
|
||||
sb.AppendLine("IsAuthenticated: " + context.User.Identity.IsAuthenticated);
|
||||
}
|
||||
|
||||
sb.AppendLine("ExceptionType: " + exception.GetType().FullName);
|
||||
sb.AppendLine("Message: " + exception.Message);
|
||||
sb.AppendLine("BaseException: " + exception.GetBaseException().Message);
|
||||
sb.AppendLine("StackTrace:");
|
||||
sb.AppendLine(exception.ToString());
|
||||
sb.AppendLine();
|
||||
|
||||
return sb.ToString();
|
||||
}
|
||||
|
||||
private static string Safe(string value)
|
||||
{
|
||||
return string.IsNullOrWhiteSpace(value) ? string.Empty : value;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,85 +0,0 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Data;
|
||||
using System.Linq;
|
||||
using SIG.Web.AppCode.Contracts.Database;
|
||||
using SIG.Web.AppCode.Services.Database;
|
||||
using SIG.Web.AppCode.Utilities;
|
||||
using SIG.Web.AppCode.Session;
|
||||
|
||||
namespace SIG.Web.AppCode.Services.Menu
|
||||
{
|
||||
public sealed class MenuProvider : IMenuProvider
|
||||
{
|
||||
private readonly IDbExecutor _dbExecutor;
|
||||
|
||||
public MenuProvider(IDbExecutor dbExecutor)
|
||||
{
|
||||
_dbExecutor = dbExecutor;
|
||||
}
|
||||
|
||||
public IReadOnlyList<MenuItemModel> GetMenu(UserSessionModel user)
|
||||
{
|
||||
if (user == null)
|
||||
{
|
||||
return new List<MenuItemModel>();
|
||||
}
|
||||
|
||||
var modulesResult = GetModules(user);
|
||||
|
||||
if (!modulesResult.Success || modulesResult.Data == null)
|
||||
{
|
||||
return new List<MenuItemModel>();
|
||||
}
|
||||
|
||||
return BuildTree(modulesResult.Data);
|
||||
}
|
||||
|
||||
private SIG.Web.AppCode.Models.Common.DbResult<List<MenuItemModel>> GetModules(UserSessionModel user)
|
||||
{
|
||||
return _dbExecutor.Execute(user.NombreDominio, connection =>
|
||||
{
|
||||
using (IDbCommand command = connection.CreateCommand())
|
||||
{
|
||||
StoredProcedureCommand.Configure(command, "dbo.PA_Sis_MenuList", user.CveUsuario);
|
||||
StoredProcedureCommand.AddInput(command, "@CveRol", user.CveRol, DbType.Int32);
|
||||
|
||||
List<MenuItemModel> items;
|
||||
|
||||
using (IDataReader reader = command.ExecuteReader())
|
||||
{
|
||||
items = reader.ToList<MenuItemModel>();
|
||||
}
|
||||
|
||||
StoredProcedureCommand.EnsureSuccess(command);
|
||||
return items;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private static IReadOnlyList<MenuItemModel> BuildTree(List<MenuItemModel> flatItems)
|
||||
{
|
||||
if (flatItems == null || flatItems.Count == 0)
|
||||
{
|
||||
return new List<MenuItemModel>();
|
||||
}
|
||||
|
||||
var byId = flatItems.ToDictionary(x => x.CveModulo);
|
||||
var roots = new List<MenuItemModel>();
|
||||
|
||||
foreach (var item in flatItems.OrderBy(x => x.OrdenVisualizacion).ThenBy(x => x.NombreModulo))
|
||||
{
|
||||
if (item.CveModuloPadre.HasValue && byId.ContainsKey(item.CveModuloPadre.Value))
|
||||
{
|
||||
byId[item.CveModuloPadre.Value].Hijos.Add(item);
|
||||
}
|
||||
else
|
||||
{
|
||||
roots.Add(item);
|
||||
}
|
||||
}
|
||||
|
||||
return roots;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,118 +0,0 @@
|
||||
using System;
|
||||
using SIG.Web.AppCode.Contracts.Security;
|
||||
using SIG.Web.AppCode.Models.Security;
|
||||
using SIG.Web.AppCode.Session;
|
||||
|
||||
namespace SIG.Web.AppCode.Services.Security
|
||||
{
|
||||
public sealed class LoginService : ILoginService
|
||||
{
|
||||
private const string GenericError = "No fue posible iniciar sesion. Verifique sus datos.";
|
||||
|
||||
private readonly IUserRepository _userRepository;
|
||||
private readonly IPasswordHasher _passwordHasher;
|
||||
private readonly ILoginAttemptRepository _loginAttemptRepository;
|
||||
private readonly IUserSessionRepository _userSessionRepository;
|
||||
|
||||
public LoginService(
|
||||
IUserRepository userRepository,
|
||||
IPasswordHasher passwordHasher,
|
||||
ILoginAttemptRepository loginAttemptRepository,
|
||||
IUserSessionRepository userSessionRepository)
|
||||
{
|
||||
_userRepository = userRepository;
|
||||
_passwordHasher = passwordHasher;
|
||||
_loginAttemptRepository = loginAttemptRepository;
|
||||
_userSessionRepository = userSessionRepository;
|
||||
}
|
||||
|
||||
public LoginResult Login(LoginRequest request)
|
||||
{
|
||||
if (request == null || string.IsNullOrWhiteSpace(request.NombreUsuario) || string.IsNullOrWhiteSpace(request.Contrasena))
|
||||
{
|
||||
return LoginResult.Fail(GenericError);
|
||||
}
|
||||
|
||||
string username = request.NombreUsuario.Trim();
|
||||
var userResult = _userRepository.ObtenerPorNombreUsuario(username, request.NombreDominio);
|
||||
|
||||
if (!userResult.Success)
|
||||
{
|
||||
return LoginResult.Fail(userResult.UserMessage);
|
||||
}
|
||||
|
||||
UserModel user = userResult.Data;
|
||||
|
||||
if (user == null)
|
||||
{
|
||||
_loginAttemptRepository.Save(null, username, false, "UserNotFound", request.DireccionIP, request.AgenteUsuario, request.NombreDominio);
|
||||
return LoginResult.Fail(GenericError);
|
||||
}
|
||||
|
||||
if (!user.CorreoVerificado)
|
||||
{
|
||||
_loginAttemptRepository.Save(user.CveUsuario, username, false, "EmailNotVerified", request.DireccionIP, request.AgenteUsuario, request.NombreDominio);
|
||||
return LoginResult.Fail("Debes verificar tu correo electrónico antes de iniciar sesión.");
|
||||
}
|
||||
|
||||
if (!user.Activo)
|
||||
{
|
||||
_loginAttemptRepository.Save(user.CveUsuario, username, false, "InactiveUser", request.DireccionIP, request.AgenteUsuario, request.NombreDominio);
|
||||
return LoginResult.Fail("El usuario se encuentra inactivo.");
|
||||
}
|
||||
|
||||
if (user.BloqueadoHasta.HasValue && user.BloqueadoHasta.Value > DateTime.Now) {
|
||||
_loginAttemptRepository.Save(user.CveUsuario, username, false, "LockedUser", request.DireccionIP, request.AgenteUsuario, request.NombreDominio);
|
||||
return LoginResult.Fail("El usuario se encuentra bloqueado temporalmente.");
|
||||
}
|
||||
|
||||
if (!_passwordHasher.VerifyPassword(request.Contrasena, user.HashContrasena))
|
||||
{
|
||||
_userRepository.RegisterFailedLogin(user.CveUsuario, request.NombreDominio);
|
||||
_loginAttemptRepository.Save(user.CveUsuario, username, false, "InvalidPassword", request.DireccionIP, request.AgenteUsuario, request.NombreDominio);
|
||||
return LoginResult.Fail(GenericError);
|
||||
}
|
||||
|
||||
string sessionToken = Guid.NewGuid().ToString("N");
|
||||
|
||||
var loginUpdateResult = _userRepository.RegisterSuccessfulLogin(user.CveUsuario, request.NombreDominio);
|
||||
|
||||
if (!loginUpdateResult.Success)
|
||||
{
|
||||
return LoginResult.Fail(loginUpdateResult.UserMessage);
|
||||
}
|
||||
|
||||
var sessionResult = _userSessionRepository.StartSession(user.CveUsuario, sessionToken, request.DireccionIP, request.AgenteUsuario, request.NombreDominio);
|
||||
|
||||
if (!sessionResult.Success)
|
||||
{
|
||||
return LoginResult.Fail(sessionResult.UserMessage);
|
||||
}
|
||||
|
||||
_loginAttemptRepository.Save(user.CveUsuario, username, true, null, request.DireccionIP, request.AgenteUsuario, request.NombreDominio);
|
||||
|
||||
var sessionUser = new UserSessionModel
|
||||
{
|
||||
CveUsuario = user.CveUsuario,
|
||||
CveRol = user.CveRol,
|
||||
NombreUsuario = user.NombreUsuario,
|
||||
Nombre = user.NombreUsuario,
|
||||
CorreoElectronico = user.CorreoElectronico,
|
||||
NombreRol = user.NombreRol,
|
||||
NombreDominio = request.NombreDominio,
|
||||
TokenSesion = sessionToken,
|
||||
DebeCambiarContrasena = user.DebeCambiarContrasena
|
||||
};
|
||||
|
||||
return LoginResult.Ok(sessionUser);
|
||||
}
|
||||
|
||||
public void Logout(string sessionToken, string domainName)
|
||||
{
|
||||
if (!string.IsNullOrWhiteSpace(sessionToken))
|
||||
{
|
||||
_userSessionRepository.EndSession(sessionToken, domainName);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,40 +0,0 @@
|
||||
using System;
|
||||
using System.Security.Cryptography;
|
||||
using SIG.Web.AppCode.Contracts.Security;
|
||||
namespace SIG.Web.AppCode.Services.Security
|
||||
{
|
||||
public sealed class PasswordHasher : IPasswordHasher
|
||||
{
|
||||
private const int SaltSize = 16;
|
||||
private const int HashSize = 32;
|
||||
private const int Iterations = 100000;
|
||||
public string HashPassword(string password)
|
||||
{
|
||||
byte[] salt = new byte[SaltSize];
|
||||
using (var rng = RandomNumberGenerator.Create()) rng.GetBytes(salt);
|
||||
byte[] hash = Derive(password, salt, Iterations);
|
||||
return "PBKDF2-SHA256$" + Iterations + "$" + Convert.ToBase64String(salt) + "$" + Convert.ToBase64String(hash);
|
||||
}
|
||||
public bool VerifyPassword(string password, string storedHash)
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(password) || string.IsNullOrWhiteSpace(storedHash)) return false;
|
||||
string[] parts = storedHash.Split('$');
|
||||
if (parts.Length != 4 || parts[0] != "PBKDF2-SHA256") return false;
|
||||
int iterations; if (!int.TryParse(parts[1], out iterations)) return false;
|
||||
byte[] salt = Convert.FromBase64String(parts[2]);
|
||||
byte[] expected = Convert.FromBase64String(parts[3]);
|
||||
byte[] actual = Derive(password, salt, iterations);
|
||||
return FixedTimeEquals(actual, expected);
|
||||
}
|
||||
private static byte[] Derive(string password, byte[] salt, int iterations)
|
||||
{
|
||||
using (var pbkdf2 = new Rfc2898DeriveBytes(password, salt, iterations, HashAlgorithmName.SHA256)) return pbkdf2.GetBytes(HashSize);
|
||||
}
|
||||
private static bool FixedTimeEquals(byte[] left, byte[] right)
|
||||
{
|
||||
if (left == null || right == null || left.Length != right.Length) return false;
|
||||
int diff = 0; for (int i = 0; i < left.Length; i++) diff |= left[i] ^ right[i];
|
||||
return diff == 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,101 +0,0 @@
|
||||
using System;
|
||||
using System.Data;
|
||||
using SIG.Web.AppCode.Contracts.Database;
|
||||
using SIG.Web.AppCode.Contracts.Security;
|
||||
using SIG.Web.AppCode.Services.Database;
|
||||
|
||||
namespace SIG.Web.AppCode.Services.Security
|
||||
{
|
||||
public sealed class PermissionService : IPermissionService
|
||||
{
|
||||
private readonly IDbExecutor _dbExecutor;
|
||||
|
||||
public PermissionService(IDbExecutor dbExecutor)
|
||||
{
|
||||
_dbExecutor = dbExecutor;
|
||||
}
|
||||
|
||||
public bool HasPermission(int cveUser, string permissionCode)
|
||||
{
|
||||
if (cveUser <= 0 || string.IsNullOrWhiteSpace(permissionCode))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
var result = _dbExecutor.Execute(null, connection =>
|
||||
{
|
||||
using (IDbCommand command = connection.CreateCommand())
|
||||
{
|
||||
StoredProcedureCommand.Configure(command, "dbo.PA_Sis_PermisoCheck", cveUser);
|
||||
StoredProcedureCommand.AddInput(command, "@CodigoPermiso", permissionCode.Trim(), DbType.String);
|
||||
|
||||
object value = command.ExecuteScalar();
|
||||
StoredProcedureCommand.EnsureSuccess(command);
|
||||
return value != null && value != DBNull.Value && Convert.ToBoolean(value);
|
||||
}
|
||||
});
|
||||
|
||||
return result.Success && result.Data;
|
||||
}
|
||||
|
||||
public bool CanAccessPage(int cveUser, string pageUrl)
|
||||
{
|
||||
if (cveUser <= 0)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
string normalizedUrl = NormalizePageUrl(pageUrl);
|
||||
|
||||
if (IsPublicPage(normalizedUrl))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
var result = _dbExecutor.Execute(null, connection =>
|
||||
{
|
||||
using (IDbCommand command = connection.CreateCommand())
|
||||
{
|
||||
StoredProcedureCommand.Configure(command, "dbo.PA_Sis_PaginaAccessCheck", cveUser);
|
||||
StoredProcedureCommand.AddInput(command, "@PaginaUrl", normalizedUrl, DbType.String);
|
||||
|
||||
object value = command.ExecuteScalar();
|
||||
StoredProcedureCommand.EnsureSuccess(command);
|
||||
return value != null && value != DBNull.Value && Convert.ToBoolean(value);
|
||||
}
|
||||
});
|
||||
|
||||
return result.Success && result.Data;
|
||||
}
|
||||
|
||||
private static string NormalizePageUrl(string pageUrl)
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(pageUrl))
|
||||
{
|
||||
return string.Empty;
|
||||
}
|
||||
|
||||
string value = pageUrl.Trim();
|
||||
|
||||
if (value.StartsWith("~/", StringComparison.Ordinal))
|
||||
{
|
||||
value = value.Substring(2);
|
||||
}
|
||||
|
||||
if (value.StartsWith("/", StringComparison.Ordinal))
|
||||
{
|
||||
value = value.Substring(1);
|
||||
}
|
||||
|
||||
return value;
|
||||
}
|
||||
|
||||
private static bool IsPublicPage(string normalizedUrl)
|
||||
{
|
||||
return normalizedUrl.Equals("Login.aspx", StringComparison.OrdinalIgnoreCase) ||
|
||||
normalizedUrl.Equals("Logout.aspx", StringComparison.OrdinalIgnoreCase) ||
|
||||
normalizedUrl.Equals("AccessDenied.aspx", StringComparison.OrdinalIgnoreCase) ||
|
||||
normalizedUrl.Equals("Error.aspx", StringComparison.OrdinalIgnoreCase);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,58 +0,0 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Security.Cryptography;
|
||||
using System.Text;
|
||||
using SIG.Web.AppCode.Contracts.Security;
|
||||
using SIG.Web.AppCode.Models.Common;
|
||||
using SIG.Web.AppCode.Models.Security;
|
||||
|
||||
namespace SIG.Web.AppCode.Services.Security
|
||||
{
|
||||
public sealed class PublicRegistrationService : IPublicRegistrationService
|
||||
{
|
||||
private readonly IUserAdministrationRepository _repository;
|
||||
private readonly IPasswordHasher _passwordHasher;
|
||||
private readonly IEmailSender _emailSender;
|
||||
public PublicRegistrationService(IUserAdministrationRepository repository, IPasswordHasher passwordHasher, IEmailSender emailSender) { _repository = repository; _passwordHasher = passwordHasher; _emailSender = emailSender; }
|
||||
|
||||
public DbResult<bool> Validate(PublicRegistrationDraft draft, string domainName)
|
||||
{
|
||||
string error = ValidateRequired(draft);
|
||||
return error == null ? _repository.ValidateRegistration(draft.NombreUsuario, draft.CorreoElectronico, draft.RFC, domainName) : DbResult<bool>.Fail(error, error, null);
|
||||
}
|
||||
|
||||
public DbResult<List<StateOptionModel>> ListStates(string domainName) { return _repository.ListStates(domainName); }
|
||||
|
||||
public DbResult<bool> Register(PublicRegistrationDraft draft, string verificationBaseUrl, string domainName)
|
||||
{
|
||||
DbResult<bool> validation = Validate(draft, domainName); if (!validation.Success) return validation;
|
||||
if (!_emailSender.IsConfigured) return DbResult<bool>.Fail("El envío de correo todavía no está configurado. Contacta a Sistemas.", "SMTP no configurado.", null);
|
||||
string token = CreateToken();
|
||||
DbResult<RegistrationCreatedModel> created = _repository.CreateRegistration(draft, _passwordHasher.HashPassword(draft.Contrasena), HashToken(token), domainName);
|
||||
if (!created.Success) return DbResult<bool>.Fail(created.UserMessage, created.TechnicalMessage, created.Exception);
|
||||
try
|
||||
{
|
||||
_emailSender.SendVerification(draft.CorreoElectronico, verificationBaseUrl + (verificationBaseUrl.Contains("?") ? "&" : "?") + "token=" + Uri.EscapeDataString(token));
|
||||
return DbResult<bool>.Ok(true);
|
||||
}
|
||||
catch (Exception ex) { return DbResult<bool>.Fail("La cuenta quedó pendiente, pero no fue posible enviar el correo. Contacta a Sistemas para reenviarlo.", ex.Message, ex); }
|
||||
}
|
||||
|
||||
public DbResult<bool> Verify(string token, string domainName)
|
||||
{
|
||||
return string.IsNullOrWhiteSpace(token) ? DbResult<bool>.Fail("La liga de verificación no es válida.", "Token vacío.", null) : _repository.VerifyEmail(HashToken(token), domainName);
|
||||
}
|
||||
|
||||
private static string ValidateRequired(PublicRegistrationDraft d)
|
||||
{
|
||||
if (d == null) return "Captura los datos del registro.";
|
||||
if (string.IsNullOrWhiteSpace(d.NombreUsuario) || string.IsNullOrWhiteSpace(d.CorreoElectronico) || string.IsNullOrWhiteSpace(d.Contrasena)) return "Completa los datos de usuario.";
|
||||
if (d.Contrasena.Length < 8) return "La contraseña debe tener al menos 8 caracteres.";
|
||||
if (string.IsNullOrWhiteSpace(d.RFC) || string.IsNullOrWhiteSpace(d.RazonSocial) || string.IsNullOrWhiteSpace(d.Direccion) || string.IsNullOrWhiteSpace(d.Colonia) || string.IsNullOrWhiteSpace(d.Ciudad) || d.CveSATEstado <= 0) return "Completa los datos obligatorios de la empresa.";
|
||||
return null;
|
||||
}
|
||||
|
||||
private static string CreateToken() { byte[] bytes = new byte[32]; using (var rng = RandomNumberGenerator.Create()) rng.GetBytes(bytes); return Convert.ToBase64String(bytes).TrimEnd('=').Replace('+', '-').Replace('/', '_'); }
|
||||
private static string HashToken(string token) { using (SHA256 sha = SHA256.Create()) { byte[] hash = sha.ComputeHash(Encoding.UTF8.GetBytes(token)); var value = new StringBuilder(64); foreach (byte item in hash) value.Append(item.ToString("x2")); return value.ToString(); } }
|
||||
}
|
||||
}
|
||||
@@ -1,31 +0,0 @@
|
||||
using System;
|
||||
using System.Configuration;
|
||||
using System.Net;
|
||||
using System.Net.Mail;
|
||||
using SIG.Web.AppCode.Contracts.Security;
|
||||
|
||||
namespace SIG.Web.AppCode.Services.Security
|
||||
{
|
||||
public sealed class SmtpEmailSender : IEmailSender
|
||||
{
|
||||
public bool IsConfigured { get { return !string.IsNullOrWhiteSpace(ConfigurationManager.AppSettings["SmtpHost"]) && !string.IsNullOrWhiteSpace(ConfigurationManager.AppSettings["EmailFrom"]); } }
|
||||
|
||||
public void SendVerification(string recipient, string verificationUrl)
|
||||
{
|
||||
if (!IsConfigured) throw new InvalidOperationException("El envío de correo no se encuentra configurado.");
|
||||
int port; if (!int.TryParse(ConfigurationManager.AppSettings["SmtpPort"], out port)) port = 25;
|
||||
bool ssl; bool.TryParse(ConfigurationManager.AppSettings["SmtpEnableSsl"], out ssl);
|
||||
using (var message = new MailMessage(ConfigurationManager.AppSettings["EmailFrom"], recipient))
|
||||
using (var client = new SmtpClient(ConfigurationManager.AppSettings["SmtpHost"], port))
|
||||
{
|
||||
message.Subject = "Verifica tu correo - Plataforma de Desarrolladores";
|
||||
message.IsBodyHtml = true;
|
||||
message.Body = "<p>Para concluir la creación de tu cuenta, abre la siguiente liga:</p><p><a href=\"" + WebUtility.HtmlEncode(verificationUrl) + "\">Verificar mi correo</a></p><p>La liga vence en 24 horas.</p>";
|
||||
client.EnableSsl = ssl;
|
||||
string user = ConfigurationManager.AppSettings["SmtpUser"];
|
||||
if (!string.IsNullOrWhiteSpace(user)) client.Credentials = new NetworkCredential(user, ConfigurationManager.AppSettings["SmtpPassword"]);
|
||||
client.Send(message);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,26 +0,0 @@
|
||||
using System.Web;
|
||||
using SIG.Web.AppCode.Contracts.Security;
|
||||
using SIG.Web.AppCode.Session;
|
||||
namespace SIG.Web.AppCode.Services.Security
|
||||
{
|
||||
public sealed class WebFormsUserContextProvider : Contracts.Security.IUserContextProvider
|
||||
{
|
||||
public bool IsAuthenticated() { return GetCurrentUser() != null; }
|
||||
public UserSessionModel GetCurrentUser()
|
||||
{
|
||||
return HttpContext.Current == null || HttpContext.Current.Session == null ? null : HttpContext.Current.Session[SessionKeys.CurrentUser] as UserSessionModel;
|
||||
}
|
||||
public void SetCurrentUser(UserSessionModel user)
|
||||
{
|
||||
if (HttpContext.Current == null || HttpContext.Current.Session == null)
|
||||
return; HttpContext.Current.Session[SessionKeys.CurrentUser] = user;
|
||||
HttpContext.Current.Session[SessionKeys.TokenSesion] = user != null ? user.TokenSesion : null;
|
||||
}
|
||||
public void Clear()
|
||||
{
|
||||
if (HttpContext.Current == null || HttpContext.Current.Session == null)
|
||||
return; HttpContext.Current.Session.Remove(SessionKeys.CurrentUser);
|
||||
HttpContext.Current.Session.Remove(SessionKeys.TokenSesion);
|
||||
}
|
||||
}
|
||||
}
|
||||
215
SIG.Web/App_Code/Configuration/AppServices.cs
Normal file
215
SIG.Web/App_Code/Configuration/AppServices.cs
Normal file
@@ -0,0 +1,215 @@
|
||||
using System;
|
||||
using System.Configuration;
|
||||
using SIG.Web.AppCode.Contracts.Bitacora;
|
||||
using SIG.Web.AppCode.Contracts.Database;
|
||||
using SIG.Web.AppCode.Contracts.Documentos;
|
||||
using SIG.Web.AppCode.Contracts.Facturacion;
|
||||
using SIG.Web.AppCode.Contracts.Fraccionamientos;
|
||||
using SIG.Web.AppCode.Contracts.General;
|
||||
using SIG.Web.AppCode.Contracts.Menu;
|
||||
using SIG.Web.AppCode.Contracts.Search;
|
||||
using SIG.Web.AppCode.Contracts.Security;
|
||||
using SIG.Web.AppCode.Contracts.Tramites;
|
||||
using SIG.Web.AppCode.Contracts.Ventas;
|
||||
using SIG.Web.AppCode.Notifications.Contracts;
|
||||
using SIG.Web.AppCode.Notifications.Services;
|
||||
using SIG.Web.AppCode.Repositories.Bitacora;
|
||||
using SIG.Web.AppCode.Repositories.Database;
|
||||
using SIG.Web.AppCode.Repositories.Documentos;
|
||||
using SIG.Web.AppCode.Repositories.Facturacion;
|
||||
using SIG.Web.AppCode.Repositories.General;
|
||||
using SIG.Web.AppCode.Repositories.Menu;
|
||||
using SIG.Web.AppCode.Repositories.Fraccionamientos;
|
||||
using SIG.Web.AppCode.Repositories.Security;
|
||||
using SIG.Web.AppCode.Repositories.Tramites;
|
||||
using SIG.Web.AppCode.Repositories.Ventas;
|
||||
using SIG.Web.AppCode.Services.Bitacora;
|
||||
using SIG.Web.AppCode.Services.Documentos;
|
||||
using SIG.Web.AppCode.Services.Facturacion;
|
||||
using SIG.Web.AppCode.Services.Fraccionamientos;
|
||||
using SIG.Web.AppCode.Services.General;
|
||||
using SIG.Web.AppCode.Services.Menu;
|
||||
using SIG.Web.AppCode.Services.Search;
|
||||
using SIG.Web.AppCode.Services.Security;
|
||||
using SIG.Web.AppCode.Services.Tramites;
|
||||
using SIG.Web.AppCode.Services.Ventas;
|
||||
using SIG.Web.AppCode.Session;
|
||||
|
||||
namespace SIG.Web.AppCode.Configuration
|
||||
{
|
||||
public static class AppServices
|
||||
{
|
||||
public static IDbConnectionFactory DbConnectionFactory { get; private set; }
|
||||
private static IDbExecutor DbExecutor { get; set; }
|
||||
public static IBitacoraService BitacoraService { get; private set; }
|
||||
public static IPasswordHasher PasswordHasher { get; private set; }
|
||||
public static ICaptchaService CaptchaService { get; private set; }
|
||||
public static IUserRepository UserRepository { get; private set; }
|
||||
private static IUserAdministrationRepository UserAdministrationRepository { get; set; }
|
||||
public static IUserAdministrationService UserAdministrationService { get; private set; }
|
||||
public static IServicioPerfilUsuario ServicioPerfilUsuario { get; private set; }
|
||||
public static IGeneralCatalogRepository GeneralCatalogRepository { get; private set; }
|
||||
public static IServicioProductoServicio ServicioProductoServicio { get; private set; }
|
||||
public static IServicioCatalogoProducto ServicioCatalogoProducto { get; private set; }
|
||||
public static IClienteDocumentoService ClienteDocumentoService { get; private set; }
|
||||
public static ITramiteDocumentoService TramiteDocumentoService { get; private set; }
|
||||
public static IServicioFraccionamiento ServicioFraccionamiento { get; private set; }
|
||||
public static IServicioGisFraccionamiento ServicioGisFraccionamiento { get; private set; }
|
||||
public static ITramiteCatalogService TramiteCatalogService { get; private set; }
|
||||
public static ITramiteSolicitudService TramiteSolicitudService { get; private set; }
|
||||
public static IServicioVentaTramite ServicioVentaTramite { get; private set; }
|
||||
public static IServicioTimbradoCfdi ServicioTimbradoCfdi { get; private set; }
|
||||
public static IPublicRegistrationService PublicRegistrationService { get; private set; }
|
||||
public static ILoginAttemptRepository LoginAttemptRepository { get; private set; }
|
||||
public static IUserSessionRepository UserSessionRepository { get; private set; }
|
||||
public static ILoginService LoginService { get; private set; }
|
||||
public static IUserContextProvider UserContext { get; private set; }
|
||||
public static IPermissionService PermissionService { get; private set; }
|
||||
public static IMenuProvider MenuProvider { get; private set; }
|
||||
public static INotificationCenter NotificationCenter { get; private set; }
|
||||
public static IBuscadorCatalogoDataProvider SearchProvider { get; private set; }
|
||||
|
||||
public static void Configure()
|
||||
{
|
||||
DbConnectionFactory = new DbConnectionFactory();
|
||||
DbExecutor = new DbExecutor(DbConnectionFactory);
|
||||
|
||||
PasswordHasher = new PasswordHasher();
|
||||
CaptchaService = new RecaptchaV2Service(
|
||||
ReadBooleanSetting("RecaptchaEnabled", "SIG_RECAPTCHA_ENABLED", false),
|
||||
ReadSetting("RecaptchaSiteKey", "SIG_RECAPTCHA_SITE_KEY"),
|
||||
ReadSetting("RecaptchaSecretKey", "SIG_RECAPTCHA_SECRET_KEY"));
|
||||
|
||||
UserContext = new WebFormsUserContextProvider();
|
||||
|
||||
var bitacoraConnectionFactory =
|
||||
new BitacoraDbConnectionFactory();
|
||||
var bitacoraDbExecutor =
|
||||
new DbExecutor(bitacoraConnectionFactory);
|
||||
|
||||
BitacoraService = new BitacoraService(
|
||||
new BitacoraRepository(bitacoraDbExecutor),
|
||||
new WebFormsBitacoraContextoProvider(UserContext));
|
||||
|
||||
UserRepository = new UserRepository(DbExecutor);
|
||||
UserAdministrationRepository = new UserAdministrationRepository(DbExecutor);
|
||||
UserAdministrationService = new UserAdministrationService(
|
||||
UserAdministrationRepository,
|
||||
PasswordHasher,
|
||||
BitacoraService);
|
||||
ServicioPerfilUsuario = new ServicioPerfilUsuario(
|
||||
new RepositorioPerfilUsuario(DbExecutor),
|
||||
PasswordHasher);
|
||||
GeneralCatalogRepository = new GeneralCatalogRepository(DbExecutor);
|
||||
ServicioProductoServicio = new ServicioProductoServicio(
|
||||
new RepositorioProductoServicio(DbExecutor),
|
||||
BitacoraService);
|
||||
ServicioCatalogoProducto = new ServicioCatalogoProducto(
|
||||
new RepositorioCatalogoProducto(DbExecutor),
|
||||
BitacoraService);
|
||||
ClienteDocumentoService = new ClienteDocumentoService(
|
||||
new ClienteDocumentoRepository(DbExecutor));
|
||||
|
||||
ITramiteDocumentoRepository tramiteDocumentoRepository =
|
||||
new TramiteDocumentoRepository(DbExecutor);
|
||||
ITramiteDocumentoFileStore tramiteDocumentoFileStore =
|
||||
new TramiteDocumentoFileStore();
|
||||
TramiteDocumentoService = new TramiteDocumentoService(
|
||||
tramiteDocumentoRepository,
|
||||
tramiteDocumentoFileStore,
|
||||
BitacoraService);
|
||||
|
||||
ITramiteSolicitudRepository tramiteSolicitudRepository =
|
||||
new TramiteSolicitudRepository(DbExecutor);
|
||||
|
||||
ServicioFraccionamiento = new ServicioFraccionamiento(
|
||||
new RepositorioFraccionamiento(DbExecutor),
|
||||
tramiteSolicitudRepository,
|
||||
BitacoraService);
|
||||
|
||||
IRepositorioGisFraccionamiento repositorioGis =
|
||||
new RepositorioGisFraccionamiento(DbExecutor);
|
||||
IAlmacenArchivosGisFraccionamiento almacenArchivosGis =
|
||||
new AlmacenArchivosGisFraccionamiento();
|
||||
ServicioGisFraccionamiento = new ServicioGisFraccionamiento(
|
||||
repositorioGis,
|
||||
almacenArchivosGis,
|
||||
BitacoraService,
|
||||
TramiteDocumentoService);
|
||||
TramiteCatalogService = new TramiteCatalogService(
|
||||
new TramiteCatalogRepository(DbExecutor),
|
||||
BitacoraService);
|
||||
TramiteSolicitudService = new TramiteSolicitudService(
|
||||
tramiteSolicitudRepository,
|
||||
BitacoraService);
|
||||
var clienteProfact = new ClienteTimbradoPacProfact(
|
||||
new ProveedorCredencialPacConfiguracion());
|
||||
ServicioTimbradoCfdi = new ServicioTimbradoCfdi(
|
||||
new RepositorioCfdi(DbExecutor),
|
||||
new ConstructorXmlCfdi40Profact(),
|
||||
new IClienteTimbradoPac[]
|
||||
{
|
||||
clienteProfact
|
||||
},
|
||||
new IClienteCancelacionPac[]
|
||||
{
|
||||
clienteProfact
|
||||
},
|
||||
new AlmacenArchivosCfdi());
|
||||
ServicioVentaTramite = new ServicioVentaTramite(
|
||||
new RepositorioVentaTramite(DbExecutor),
|
||||
ServicioTimbradoCfdi);
|
||||
LoginAttemptRepository = new LoginAttemptRepository(DbExecutor);
|
||||
UserSessionRepository = new UserSessionRepository(DbExecutor);
|
||||
|
||||
IPermissionRepository permissionRepository =
|
||||
new PermissionRepository(DbExecutor);
|
||||
IMenuRepository menuRepository =
|
||||
new MenuRepository(DbExecutor);
|
||||
|
||||
PermissionService = new PermissionService(
|
||||
permissionRepository);
|
||||
MenuProvider = new MenuProvider(menuRepository);
|
||||
NotificationCenter = new DummyNotificationCenter();
|
||||
SearchProvider = new DummyBuscadorCatalogoDataProvider();
|
||||
|
||||
LoginService = new LoginService(
|
||||
UserRepository,
|
||||
PasswordHasher,
|
||||
LoginAttemptRepository,
|
||||
UserSessionRepository);
|
||||
|
||||
PublicRegistrationService = new PublicRegistrationService(
|
||||
UserAdministrationRepository,
|
||||
GeneralCatalogRepository,
|
||||
PasswordHasher,
|
||||
new SmtpEmailSender());
|
||||
}
|
||||
|
||||
private static string ReadSetting(
|
||||
string appSettingName,
|
||||
string environmentVariableName)
|
||||
{
|
||||
string environmentValue =
|
||||
Environment.GetEnvironmentVariable(environmentVariableName);
|
||||
|
||||
return string.IsNullOrWhiteSpace(environmentValue)
|
||||
? ConfigurationManager.AppSettings[appSettingName]
|
||||
: environmentValue;
|
||||
}
|
||||
|
||||
private static bool ReadBooleanSetting(
|
||||
string appSettingName,
|
||||
string environmentVariableName,
|
||||
bool defaultValue)
|
||||
{
|
||||
bool value;
|
||||
string configuredValue =
|
||||
ReadSetting(appSettingName, environmentVariableName);
|
||||
|
||||
return bool.TryParse(configuredValue, out value)
|
||||
? value
|
||||
: defaultValue;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -46,16 +46,19 @@ namespace SIG.Web.AppCode.Configuration
|
||||
"~/Metronic/assets/global/plugins/bootstrap-confirmation/bootstrap-confirmation.min.js",
|
||||
"~/Metronic/assets/global/plugins/bootbox/bootbox.min.js",
|
||||
"~/Metronic/assets/global/plugins/bootstrap-toastr/toastr.min.js",
|
||||
"~/Metronic/assets/layouts/layout3/scripts/jquery.datetimepicker.full.min.js",
|
||||
"~/Metronic/assets/global/scripts/metronic.js",
|
||||
"~/Metronic/assets/admin/layout/scripts/layout.js",
|
||||
"~/Metronic/assets/admin/layout/scripts/quick-sidebar.js",
|
||||
"~/Metronic/assets/admin/layout/scripts/demo.js",
|
||||
"~/Scripts/porcentaje-box.js",
|
||||
"~/Scripts/BitacoraGrid.js",
|
||||
"~/Scripts/DropdownGrid.js",
|
||||
"~/Scripts/UcBuscadorCatalogo.js",
|
||||
"~/Scripts/SigPdfViewer.js",
|
||||
"~/Scripts/SigPdfDrawer.js",
|
||||
"~/Scripts/custom.js"
|
||||
"~/Scripts/custom.js",
|
||||
"~/Scripts/sig-alerts.js"
|
||||
));
|
||||
|
||||
bundles.Add(new ScriptBundle("~/bundles/WebFormsJs").Include(
|
||||
@@ -108,18 +111,20 @@ namespace SIG.Web.AppCode.Configuration
|
||||
.Include("~/Metronic/assets/global/plugins/simple-line-icons/simple-line-icons.min.css", new CssRewriteUrlTransform())
|
||||
.Include(
|
||||
"~/Styles/porcentaje-box.css",
|
||||
"~/Styles/BitacoraGrid.css",
|
||||
"~/Styles/DropdownGrid.css",
|
||||
"~/Styles/UcBuscadorCatalogo.css",
|
||||
"~/Styles/Filtros.css",
|
||||
"~/Styles/SigPdfViewer.css",
|
||||
"~/Styles/SigPdfDrawer.css",
|
||||
"~/Styles/Estilos2.css",
|
||||
"~/Metronic/assets/global/plugins/bootstrap-switch/css/bootstrap-switch.min.css",
|
||||
"~/Metronic/assets/global/plugins/bootstrap-toastr/toastr.min.css",
|
||||
"~/Metronic/assets/layouts/layout3/css/jquery.datetimepicker.css",
|
||||
"~/Metronic/assets/global/plugins/select2/select2.css",
|
||||
"~/Metronic/assets/global/css/components.css",
|
||||
"~/Metronic/assets/global/css/plugins.css",
|
||||
"~/Metronic/assets/admin/layout/css/layout.css",
|
||||
"~/Metronic/assets/admin/layout/css/custom.css")
|
||||
"~/Metronic/assets/admin/layout/css/layout.css")
|
||||
.Include("~/Metronic/Carusel/slick.css", new CssRewriteUrlTransform())
|
||||
.Include("~/Metronic/Carusel/slick-theme.css", new CssRewriteUrlTransform()));
|
||||
}
|
||||
@@ -2,6 +2,7 @@ using System;
|
||||
using System.Data.SqlClient;
|
||||
using System.Text;
|
||||
using System.Web;
|
||||
using SIG.Web.AppCode.Infrastructure;
|
||||
using SIG.Web.AppCode.Services.Errors;
|
||||
using SIG.Web.AppCode.Session;
|
||||
|
||||
@@ -51,9 +52,12 @@ namespace SIG.Web.AppCode.Configuration
|
||||
|
||||
/*
|
||||
* El detalle t<EFBFBD>cnico completo siempre se guarda en log.
|
||||
* Solo el administrador puede verlo en la respuesta.
|
||||
* Solo el administrador o una solicitud local en depuracion
|
||||
* puede verlo en la respuesta.
|
||||
*/
|
||||
bool mostrarDetalle = cveRole == 1;
|
||||
bool mostrarDetalle =
|
||||
cveRole == 1 ||
|
||||
EsDepuracionLocal(context);
|
||||
|
||||
context.Server.ClearError();
|
||||
|
||||
@@ -114,6 +118,14 @@ namespace SIG.Web.AppCode.Configuration
|
||||
return "Ocurri<72> un error inesperado.";
|
||||
}
|
||||
|
||||
string controlledMessage =
|
||||
ControlledExceptionClassifier.GetUserMessage(exception);
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(controlledMessage))
|
||||
{
|
||||
return controlledMessage;
|
||||
}
|
||||
|
||||
Exception baseException =
|
||||
exception.GetBaseException();
|
||||
|
||||
@@ -274,6 +286,22 @@ namespace SIG.Web.AppCode.Configuration
|
||||
context.ApplicationInstance.CompleteRequest();
|
||||
}
|
||||
|
||||
private static bool EsDepuracionLocal(
|
||||
HttpContext context)
|
||||
{
|
||||
try
|
||||
{
|
||||
return context != null &&
|
||||
context.IsDebuggingEnabled &&
|
||||
context.Request != null &&
|
||||
context.Request.IsLocal;
|
||||
}
|
||||
catch
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
private static UserSessionModel ObtenerUsuarioActual()
|
||||
{
|
||||
try
|
||||
@@ -0,0 +1,9 @@
|
||||
using SIG.Web.AppCode.Models.Bitacora;
|
||||
|
||||
namespace SIG.Web.AppCode.Contracts.Bitacora
|
||||
{
|
||||
public interface IBitacoraContextoProvider
|
||||
{
|
||||
BitacoraContextoModel Obtener();
|
||||
}
|
||||
}
|
||||
25
SIG.Web/App_Code/Contracts/Bitacora/IBitacoraRepository.cs
Normal file
25
SIG.Web/App_Code/Contracts/Bitacora/IBitacoraRepository.cs
Normal file
@@ -0,0 +1,25 @@
|
||||
using System.Collections.Generic;
|
||||
using SIG.Web.AppCode.Models.Bitacora;
|
||||
using SIG.Web.AppCode.Models.Common;
|
||||
|
||||
namespace SIG.Web.AppCode.Contracts.Bitacora
|
||||
{
|
||||
public interface IBitacoraRepository
|
||||
{
|
||||
DbResult<long> Agregar(
|
||||
BitacoraEventoModel evento,
|
||||
BitacoraContextoModel contexto);
|
||||
|
||||
DbResult<List<BitacoraModel>> Listar(
|
||||
BitacoraFiltroModel filtro,
|
||||
int cveUsuarioEjecuta);
|
||||
|
||||
DbResult<ResultadoPaginado<BitacoraModel>> ConsultarResumen(
|
||||
BitacoraConsultaModel consulta,
|
||||
int cveUsuarioEjecuta);
|
||||
|
||||
DbResult<BitacoraModel> ConsultarDetalle(
|
||||
long cveBitacora,
|
||||
int cveUsuarioEjecuta);
|
||||
}
|
||||
}
|
||||
18
SIG.Web/App_Code/Contracts/Bitacora/IBitacoraService.cs
Normal file
18
SIG.Web/App_Code/Contracts/Bitacora/IBitacoraService.cs
Normal file
@@ -0,0 +1,18 @@
|
||||
using System.Collections.Generic;
|
||||
using SIG.Web.AppCode.Models.Bitacora;
|
||||
using SIG.Web.AppCode.Models.Common;
|
||||
|
||||
namespace SIG.Web.AppCode.Contracts.Bitacora
|
||||
{
|
||||
public interface IBitacoraService
|
||||
{
|
||||
DbResult<long> Registrar(BitacoraEventoModel evento);
|
||||
|
||||
DbResult<List<BitacoraModel>> Listar(BitacoraFiltroModel filtro);
|
||||
|
||||
DbResult<ResultadoPaginado<BitacoraModel>> ConsultarResumen(
|
||||
BitacoraConsultaModel consulta);
|
||||
|
||||
DbResult<BitacoraModel> ConsultarDetalle(long cveBitacora);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
using SIG.Web.AppCode.Models.Common;
|
||||
using SIG.Web.AppCode.Models.Documentos;
|
||||
|
||||
namespace SIG.Web.AppCode.Contracts.Documentos
|
||||
{
|
||||
public interface IClienteDocumentoRepository
|
||||
{
|
||||
DbResult<ClienteDocumentoEtapaContextoModel> GetStageContext(
|
||||
int stageId,
|
||||
int executingUser,
|
||||
string domainName);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
using System.IO;
|
||||
using SIG.Web.AppCode.Models.Common;
|
||||
using SIG.Web.AppCode.Models.Documentos;
|
||||
|
||||
namespace SIG.Web.AppCode.Contracts.Documentos
|
||||
{
|
||||
public interface IClienteDocumentoService
|
||||
{
|
||||
DbResult<ClienteDocumentoEtapaContextoModel> GetStageContext(
|
||||
int stageId,
|
||||
int executingUser,
|
||||
string domainName);
|
||||
|
||||
DbResult<ClienteDocumentoArchivoModel> SaveStageGis(
|
||||
int developmentId,
|
||||
int stageId,
|
||||
string originalFileName,
|
||||
Stream content,
|
||||
long contentLength,
|
||||
int executingUser,
|
||||
string domainName);
|
||||
|
||||
DbResult<ClienteDocumentoArchivoModel> GetStageGis(
|
||||
int stageId,
|
||||
int executingUser,
|
||||
string domainName);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
using System.IO;
|
||||
using SIG.Web.AppCode.Models.Documentos;
|
||||
|
||||
namespace SIG.Web.AppCode.Contracts.Documentos
|
||||
{
|
||||
public interface ITramiteDocumentoFileStore
|
||||
{
|
||||
TramiteDocumentoPreparedFile Prepare(
|
||||
TramiteDocumentoUploadContextModel context,
|
||||
Stream source,
|
||||
string previousRelativePath);
|
||||
|
||||
void Promote(TramiteDocumentoPreparedFile preparedFile);
|
||||
void Rollback(TramiteDocumentoPreparedFile preparedFile);
|
||||
void Complete(TramiteDocumentoPreparedFile preparedFile);
|
||||
Stream OpenRead(string relativePath);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,63 @@
|
||||
using System.Collections.Generic;
|
||||
using SIG.Web.AppCode.Models.Common;
|
||||
using SIG.Web.AppCode.Models.Documentos;
|
||||
|
||||
namespace SIG.Web.AppCode.Contracts.Documentos
|
||||
{
|
||||
public interface ITramiteDocumentoRepository
|
||||
{
|
||||
DbResult<List<TramiteDocumentoSolicitudModel>> ListForDevelopment(
|
||||
int developmentId,
|
||||
int? stageId,
|
||||
int? procedureTypeId,
|
||||
int executingUser,
|
||||
string domainName);
|
||||
|
||||
DbResult<TramiteDocumentoUploadContextModel> GetUploadContext(
|
||||
int developmentId,
|
||||
int requestId,
|
||||
int documentTypeId,
|
||||
int executingUser,
|
||||
string domainName);
|
||||
|
||||
DbResult<TramiteDocumentoUploadContextModel> GetStageUploadContext(
|
||||
int stageId,
|
||||
int procedureTypeId,
|
||||
int documentTypeId,
|
||||
int executingUser,
|
||||
string domainName);
|
||||
|
||||
DbResult<TramiteDocumentoSaveResultModel> SaveUpload(
|
||||
int developmentId,
|
||||
int requestId,
|
||||
int documentTypeId,
|
||||
string originalFileName,
|
||||
string physicalFileName,
|
||||
string relativePath,
|
||||
string contentType,
|
||||
long contentLength,
|
||||
string clientComment,
|
||||
int executingUser,
|
||||
string domainName);
|
||||
|
||||
DbResult<TramiteDocumentoReviewResultModel> Review(
|
||||
int developmentId,
|
||||
int documentRequestId,
|
||||
bool approved,
|
||||
string note,
|
||||
int executingUser,
|
||||
string domainName);
|
||||
|
||||
DbResult<TramiteDocumentoDownloadContextModel> GetDownloadContext(
|
||||
int developmentId,
|
||||
int documentRequestId,
|
||||
int executingUser,
|
||||
string domainName);
|
||||
|
||||
DbResult<TramiteDocumentoDeleteResultModel> Delete(
|
||||
int developmentId,
|
||||
int documentRequestId,
|
||||
int executingUser,
|
||||
string domainName);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,69 @@
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using SIG.Web.AppCode.Models.Common;
|
||||
using SIG.Web.AppCode.Models.Documentos;
|
||||
|
||||
namespace SIG.Web.AppCode.Contracts.Documentos
|
||||
{
|
||||
public interface ITramiteDocumentoService
|
||||
{
|
||||
DbResult<List<TramiteDocumentoSolicitudModel>> ListForDevelopment(
|
||||
int developmentId,
|
||||
int? stageId,
|
||||
int? procedureTypeId,
|
||||
int executingUser,
|
||||
string domainName);
|
||||
|
||||
DbResult<TramiteDocumentoUploadContextModel> GetUploadContext(
|
||||
int developmentId,
|
||||
int requestId,
|
||||
int documentTypeId,
|
||||
int executingUser,
|
||||
string domainName);
|
||||
|
||||
DbResult<TramiteDocumentoSaveResultModel> Upload(
|
||||
int developmentId,
|
||||
int requestId,
|
||||
int documentTypeId,
|
||||
string originalFileName,
|
||||
string contentType,
|
||||
Stream content,
|
||||
long contentLength,
|
||||
string clientComment,
|
||||
int executingUser,
|
||||
string domainName);
|
||||
|
||||
DbResult<TramiteDocumentoReviewResultModel> Review(
|
||||
int developmentId,
|
||||
int documentRequestId,
|
||||
bool approved,
|
||||
string note,
|
||||
int executingUser,
|
||||
string domainName);
|
||||
|
||||
DbResult<TramiteDocumentoFileModel> Open(
|
||||
int developmentId,
|
||||
int documentRequestId,
|
||||
int executingUser,
|
||||
string domainName);
|
||||
|
||||
DbResult<TramiteDocumentoSaveResultModel> RegisterExternalStageFile(
|
||||
int stageId,
|
||||
int procedureTypeId,
|
||||
int documentTypeId,
|
||||
string originalFileName,
|
||||
string physicalFileName,
|
||||
string relativePath,
|
||||
string contentType,
|
||||
long contentLength,
|
||||
int executingUser,
|
||||
string domainName);
|
||||
|
||||
DbResult<bool> RemoveExternalStageFile(
|
||||
int stageId,
|
||||
int procedureTypeId,
|
||||
int documentTypeId,
|
||||
int executingUser,
|
||||
string domainName);
|
||||
}
|
||||
}
|
||||
142
SIG.Web/App_Code/Contracts/Facturacion/ContratosCfdi.cs
Normal file
142
SIG.Web/App_Code/Contracts/Facturacion/ContratosCfdi.cs
Normal file
@@ -0,0 +1,142 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using SIG.Web.AppCode.Models.Common;
|
||||
using SIG.Web.AppCode.Models.Facturacion;
|
||||
|
||||
namespace SIG.Web.AppCode.Contracts.Facturacion
|
||||
{
|
||||
public interface IRepositorioCfdi
|
||||
{
|
||||
DbResult<ModeloEmisorFiscalCfdi> ObtenerEmisor(
|
||||
int cveEmpresa,
|
||||
int cveUsuarioEjecuta,
|
||||
string nombreDominio);
|
||||
|
||||
DbResult<ModeloReceptorFiscalCfdi> ObtenerReceptor(
|
||||
int cveCliente,
|
||||
int cveUsuarioEjecuta,
|
||||
string nombreDominio);
|
||||
|
||||
DbResult<long> GuardarBorrador(
|
||||
ModeloDocumentoCfdi documento,
|
||||
int cveUsuarioEjecuta,
|
||||
string nombreDominio);
|
||||
|
||||
DbResult<ModeloDocumentoCfdi> ObtenerDocumento(
|
||||
long cveCfdiDocumento,
|
||||
int cveUsuarioEjecuta,
|
||||
string nombreDominio);
|
||||
|
||||
DbResult<ModeloInicioTimbradoCfdi> IniciarIntento(
|
||||
long cveCfdiDocumento,
|
||||
Guid idSolicitud,
|
||||
string proveedorPac,
|
||||
string ambiente,
|
||||
string referenciaContratoPac,
|
||||
int cveUsuarioEjecuta,
|
||||
string nombreDominio);
|
||||
|
||||
DbResult<ModeloIntentoTimbradoCfdi> FinalizarIntento(
|
||||
long cveCfdiTimbrado,
|
||||
ModeloResultadoPacCfdi resultadoPac,
|
||||
int cveUsuarioEjecuta,
|
||||
string nombreDominio);
|
||||
|
||||
DbResult<List<ModeloIntentoTimbradoCfdi>> ListarIntentos(
|
||||
long cveCfdiDocumento,
|
||||
int cveUsuarioEjecuta,
|
||||
string nombreDominio);
|
||||
|
||||
DbResult<ModeloArchivoCfdi> ObtenerXml(
|
||||
long cveCfdiDocumento,
|
||||
bool timbrado,
|
||||
int cveUsuarioEjecuta,
|
||||
string nombreDominio);
|
||||
|
||||
DbResult<ModeloInicioCancelacionCfdi> IniciarCancelacion(
|
||||
ModeloSolicitudCancelacionCfdi solicitud,
|
||||
Guid idSolicitud,
|
||||
string proveedorPac,
|
||||
string ambiente,
|
||||
int cveUsuarioEjecuta,
|
||||
string nombreDominio);
|
||||
|
||||
DbResult<ModeloResultadoCancelacionCfdi> FinalizarCancelacion(
|
||||
long cveCfdiCancelacion,
|
||||
ModeloResultadoCancelacionPacCfdi resultadoPac,
|
||||
int cveUsuarioEjecuta,
|
||||
string nombreDominio);
|
||||
}
|
||||
|
||||
public interface IConstructorXmlCfdi
|
||||
{
|
||||
DbResult<ModeloResultadoConstruccionXmlCfdi> Construir(
|
||||
ModeloSolicitudCfdi solicitud,
|
||||
ModeloEmisorFiscalCfdi emisor,
|
||||
ModeloReceptorFiscalCfdi receptor);
|
||||
}
|
||||
|
||||
public interface IClienteTimbradoPac
|
||||
{
|
||||
string Proveedor { get; }
|
||||
|
||||
ModeloResultadoPacCfdi Timbrar(
|
||||
ModeloSolicitudPacCfdi solicitud);
|
||||
}
|
||||
|
||||
public interface IClienteCancelacionPac
|
||||
{
|
||||
string Proveedor { get; }
|
||||
|
||||
ModeloResultadoCancelacionPacCfdi Cancelar(
|
||||
ModeloSolicitudCancelacionPacCfdi solicitud);
|
||||
}
|
||||
|
||||
public interface IProveedorCredencialPac
|
||||
{
|
||||
string ObtenerCredencial(string referencia);
|
||||
}
|
||||
|
||||
public interface IAlmacenArchivosCfdi
|
||||
{
|
||||
DbResult<string> GuardarXmlTimbrado(
|
||||
ModeloDocumentoCfdi documento,
|
||||
ModeloIntentoTimbradoCfdi intento);
|
||||
}
|
||||
|
||||
public interface IServicioTimbradoCfdi
|
||||
{
|
||||
DbResult<long> GuardarBorrador(
|
||||
ModeloSolicitudCfdi solicitud,
|
||||
int cveUsuarioEjecuta,
|
||||
string nombreDominio);
|
||||
|
||||
DbResult<ModeloResultadoTimbradoCfdi> Timbrar(
|
||||
long cveCfdiDocumento,
|
||||
Guid? idSolicitud,
|
||||
int cveUsuarioEjecuta,
|
||||
string nombreDominio);
|
||||
|
||||
DbResult<ModeloDocumentoCfdi> ObtenerDocumento(
|
||||
long cveCfdiDocumento,
|
||||
int cveUsuarioEjecuta,
|
||||
string nombreDominio);
|
||||
|
||||
DbResult<List<ModeloIntentoTimbradoCfdi>> ListarIntentos(
|
||||
long cveCfdiDocumento,
|
||||
int cveUsuarioEjecuta,
|
||||
string nombreDominio);
|
||||
|
||||
DbResult<ModeloArchivoCfdi> ObtenerXml(
|
||||
long cveCfdiDocumento,
|
||||
bool timbrado,
|
||||
int cveUsuarioEjecuta,
|
||||
string nombreDominio);
|
||||
|
||||
DbResult<ModeloResultadoCancelacionCfdi> Cancelar(
|
||||
ModeloSolicitudCancelacionCfdi solicitud,
|
||||
Guid? idSolicitud,
|
||||
int cveUsuarioEjecuta,
|
||||
string nombreDominio);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
using System.IO;
|
||||
using SIG.Web.AppCode.Models.Fraccionamientos;
|
||||
|
||||
namespace SIG.Web.AppCode.Contracts.Fraccionamientos
|
||||
{
|
||||
public interface IAlmacenArchivosGisFraccionamiento
|
||||
{
|
||||
string ObtenerRutaFisica(ContextoGisFraccionamiento contexto);
|
||||
bool Existe(ContextoGisFraccionamiento contexto);
|
||||
void Guardar(ContextoGisFraccionamiento contexto, Stream origen);
|
||||
Stream AbrirLectura(ContextoGisFraccionamiento contexto);
|
||||
void Eliminar(ContextoGisFraccionamiento contexto);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,83 @@
|
||||
using System.Collections.Generic;
|
||||
using SIG.Web.AppCode.Models.Common;
|
||||
using SIG.Web.AppCode.Models.Fraccionamientos;
|
||||
|
||||
namespace SIG.Web.AppCode.Contracts.Fraccionamientos
|
||||
{
|
||||
public interface IRepositorioFraccionamiento
|
||||
{
|
||||
DbResult<List<OpcionClienteFraccionamiento>> ListarClientes(int cveUsuarioEjecuta, string nombreDominio);
|
||||
DbResult<List<OpcionEstatusFraccionamiento>> ListarEstatus(int cveUsuarioEjecuta, string nombreDominio);
|
||||
DbResult<List<ModeloFraccionamiento>> Listar(string texto, int? cveCliente, bool incluirInactivo, int cveUsuarioEjecuta, string nombreDominio);
|
||||
DbResult<ModeloFraccionamiento> Obtener(int cveFraccionamiento, int cveUsuarioEjecuta, string nombreDominio);
|
||||
DbResult<List<ModeloAvisoDetalleFraccionamiento>> ObtenerAvisosDetalle(
|
||||
int cveFraccionamiento,
|
||||
int cveUsuarioEjecuta,
|
||||
string nombreDominio);
|
||||
DbResult<int> Guardar(ModeloFraccionamiento fraccionamiento, int cveUsuarioEjecuta, string nombreDominio);
|
||||
DbResult<bool> Eliminar(int cveFraccionamiento, int cveUsuarioEjecuta, string nombreDominio);
|
||||
DbResult<List<ModeloEtapaFraccionamiento>> ListarEtapas(int cveFraccionamiento, int cveUsuarioEjecuta, string nombreDominio);
|
||||
DbResult<ModeloEtapaFraccionamiento> ObtenerEtapa(int cveFraccionamientoEtapa, int cveUsuarioEjecuta, string nombreDominio);
|
||||
DbResult<ResultadoAvanceEtapaFraccionamiento> ActualizarAvanceEtapa(
|
||||
int cveFraccionamientoEtapa,
|
||||
decimal avance,
|
||||
int cveUsuarioEjecuta,
|
||||
string nombreDominio);
|
||||
DbResult<ModeloCondicionesEtapaFraccionamiento> ObtenerCondicionesEtapa(
|
||||
int cveFraccionamientoEtapa,
|
||||
int cveUsuarioEjecuta,
|
||||
string nombreDominio);
|
||||
DbResult<ModeloCondicionesEtapaFraccionamiento> GuardarCondicionesEtapa(
|
||||
ModeloCondicionesEtapaFraccionamiento condiciones,
|
||||
int cveUsuarioEjecuta,
|
||||
string nombreDominio);
|
||||
DbResult<ModeloGisEtapaFraccionamiento> ObtenerGisEtapa(
|
||||
int cveFraccionamientoEtapa,
|
||||
int cveUsuarioEjecuta,
|
||||
string nombreDominio);
|
||||
DbResult<ModeloGisEtapaFraccionamiento> GuardarGisEtapa(
|
||||
int cveFraccionamientoEtapa,
|
||||
int cveUsuarioEjecuta,
|
||||
string nombreDominio);
|
||||
DbResult<List<ModeloTramiteEtapaFraccionamiento>> ListarTramitesEtapa(int cveFraccionamiento, int cveUsuarioEjecuta, string nombreDominio);
|
||||
DbResult<int> GuardarEtapa(ModeloEtapaFraccionamiento etapa, int cveUsuarioEjecuta, string nombreDominio);
|
||||
DbResult<bool> MoverOrdenEtapa(
|
||||
int cveFraccionamientoEtapa,
|
||||
int cveFraccionamientoEtapaReferencia,
|
||||
bool colocarDespues,
|
||||
int cveUsuarioEjecuta,
|
||||
string nombreDominio);
|
||||
DbResult<bool> EliminarEtapa(int cveFraccionamientoEtapa, int cveUsuarioEjecuta, string nombreDominio);
|
||||
DbResult<List<ModeloLoteFraccionamiento>> ListarLotes(
|
||||
int cveFraccionamiento,
|
||||
int? cveFraccionamientoEtapa,
|
||||
int cveUsuarioEjecuta,
|
||||
string nombreDominio);
|
||||
DbResult<ModeloLoteFraccionamiento> ObtenerLote(
|
||||
int cveFraccionamiento,
|
||||
int cveFraccionamientoLote,
|
||||
int cveUsuarioEjecuta,
|
||||
string nombreDominio);
|
||||
DbResult<int> GuardarLote(
|
||||
int cveFraccionamiento,
|
||||
ModeloLoteFraccionamiento lote,
|
||||
int cveUsuarioEjecuta,
|
||||
string nombreDominio);
|
||||
DbResult<List<ModeloLoteFraccionamiento>> GuardarLotes(
|
||||
int cveFraccionamiento,
|
||||
int cveFraccionamientoEtapa,
|
||||
IList<ModeloLoteFraccionamiento> lotes,
|
||||
int cveUsuarioEjecuta,
|
||||
string nombreDominio);
|
||||
DbResult<bool> EliminarLote(
|
||||
int cveFraccionamiento,
|
||||
int cveFraccionamientoLote,
|
||||
int cveUsuarioEjecuta,
|
||||
string nombreDominio);
|
||||
DbResult<int> LimpiarLotesEtapa(
|
||||
int cveFraccionamiento,
|
||||
int cveFraccionamientoEtapa,
|
||||
int cveUsuarioEjecuta,
|
||||
string nombreDominio);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
using System.Collections.Generic;
|
||||
using SIG.Web.AppCode.Models.Common;
|
||||
using SIG.Web.AppCode.Models.Fraccionamientos;
|
||||
|
||||
namespace SIG.Web.AppCode.Contracts.Fraccionamientos
|
||||
{
|
||||
public interface IRepositorioGisFraccionamiento
|
||||
{
|
||||
DbResult<ContextoGisFraccionamiento> ObtenerContexto(
|
||||
int cveFraccionamientoEtapa,
|
||||
int cveUsuarioEjecuta,
|
||||
string nombreDominio);
|
||||
|
||||
DbResult<List<VinculoLoteGisFraccionamiento>> ListarVinculos(
|
||||
int cveFraccionamientoEtapa,
|
||||
int cveUsuarioEjecuta,
|
||||
string nombreDominio);
|
||||
|
||||
DbResult<bool> GuardarVinculos(
|
||||
int cveFraccionamientoEtapa,
|
||||
IList<VinculoLoteGisFraccionamiento> vinculos,
|
||||
int cveUsuarioEjecuta,
|
||||
string nombreDominio);
|
||||
|
||||
DbResult<bool> LimpiarVinculos(
|
||||
int cveFraccionamientoEtapa,
|
||||
int cveUsuarioEjecuta,
|
||||
string nombreDominio);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,86 @@
|
||||
using System.Collections.Generic;
|
||||
using SIG.Web.AppCode.Models.Common;
|
||||
using SIG.Web.AppCode.Models.Fraccionamientos;
|
||||
|
||||
namespace SIG.Web.AppCode.Contracts.Fraccionamientos
|
||||
{
|
||||
public interface IServicioFraccionamiento
|
||||
{
|
||||
DbResult<List<OpcionClienteFraccionamiento>> ListarClientes(int cveUsuarioEjecuta, string nombreDominio);
|
||||
DbResult<List<OpcionEstatusFraccionamiento>> ListarEstatus(int cveUsuarioEjecuta, string nombreDominio);
|
||||
DbResult<List<ModeloFraccionamiento>> Listar(string texto, int? cveCliente, bool incluirInactivo, int cveUsuarioEjecuta, string nombreDominio);
|
||||
DbResult<ModeloFraccionamiento> Obtener(int cveFraccionamiento, int cveUsuarioEjecuta, string nombreDominio);
|
||||
DbResult<List<ModeloAvisoDetalleFraccionamiento>> ObtenerAvisosDetalle(
|
||||
int cveFraccionamiento,
|
||||
int cveUsuarioEjecuta,
|
||||
string nombreDominio);
|
||||
DbResult<int> Guardar(ModeloFraccionamiento fraccionamiento, int cveUsuarioEjecuta, string nombreDominio);
|
||||
DbResult<bool> Eliminar(int cveFraccionamiento, int cveUsuarioEjecuta, string nombreDominio);
|
||||
DbResult<List<ModeloEtapaFraccionamiento>> ListarEtapas(int cveFraccionamiento, int cveUsuarioEjecuta, string nombreDominio);
|
||||
DbResult<ModeloEtapaFraccionamiento> ObtenerEtapa(
|
||||
int cveFraccionamientoEtapa,
|
||||
int cveUsuarioEjecuta,
|
||||
string nombreDominio);
|
||||
DbResult<ResultadoAvanceEtapaFraccionamiento> ActualizarAvanceEtapa(
|
||||
int cveFraccionamientoEtapa,
|
||||
decimal avance,
|
||||
int cveUsuarioEjecuta,
|
||||
string nombreDominio);
|
||||
DbResult<ModeloCondicionesEtapaFraccionamiento> ObtenerCondicionesEtapa(
|
||||
int cveFraccionamientoEtapa,
|
||||
int cveUsuarioEjecuta,
|
||||
string nombreDominio);
|
||||
DbResult<ModeloCondicionesEtapaFraccionamiento> GuardarCondicionesEtapa(
|
||||
ModeloCondicionesEtapaFraccionamiento condiciones,
|
||||
int cveUsuarioEjecuta,
|
||||
string nombreDominio);
|
||||
DbResult<ModeloGisEtapaFraccionamiento> ObtenerGisEtapa(
|
||||
int cveFraccionamientoEtapa,
|
||||
int cveUsuarioEjecuta,
|
||||
string nombreDominio);
|
||||
DbResult<ModeloGisEtapaFraccionamiento> GuardarGisEtapa(
|
||||
int cveFraccionamientoEtapa,
|
||||
int cveUsuarioEjecuta,
|
||||
string nombreDominio);
|
||||
DbResult<List<ModeloTramiteEtapaFraccionamiento>> ListarTramitesEtapa(int cveFraccionamiento, int cveUsuarioEjecuta, string nombreDominio);
|
||||
DbResult<int> GuardarEtapa(ModeloEtapaFraccionamiento etapa, int cveUsuarioEjecuta, string nombreDominio);
|
||||
DbResult<bool> MoverOrdenEtapa(
|
||||
int cveFraccionamientoEtapa,
|
||||
int cveFraccionamientoEtapaReferencia,
|
||||
bool colocarDespues,
|
||||
int cveUsuarioEjecuta,
|
||||
string nombreDominio);
|
||||
DbResult<bool> EliminarEtapa(int cveFraccionamientoEtapa, int cveUsuarioEjecuta, string nombreDominio);
|
||||
DbResult<List<ModeloLoteFraccionamiento>> ListarLotes(
|
||||
int cveFraccionamiento,
|
||||
int? cveFraccionamientoEtapa,
|
||||
int cveUsuarioEjecuta,
|
||||
string nombreDominio);
|
||||
DbResult<ModeloLoteFraccionamiento> ObtenerLote(
|
||||
int cveFraccionamiento,
|
||||
int cveFraccionamientoLote,
|
||||
int cveUsuarioEjecuta,
|
||||
string nombreDominio);
|
||||
DbResult<int> GuardarLote(
|
||||
int cveFraccionamiento,
|
||||
ModeloLoteFraccionamiento lote,
|
||||
int cveUsuarioEjecuta,
|
||||
string nombreDominio);
|
||||
DbResult<int> GuardarLotes(
|
||||
int cveFraccionamiento,
|
||||
int cveFraccionamientoEtapa,
|
||||
IList<ModeloLoteFraccionamiento> lotes,
|
||||
int cveUsuarioEjecuta,
|
||||
string nombreDominio);
|
||||
DbResult<bool> EliminarLote(
|
||||
int cveFraccionamiento,
|
||||
int cveFraccionamientoLote,
|
||||
int cveUsuarioEjecuta,
|
||||
string nombreDominio);
|
||||
DbResult<int> LimpiarLotesEtapa(
|
||||
int cveFraccionamiento,
|
||||
int cveFraccionamientoEtapa,
|
||||
int cveUsuarioEjecuta,
|
||||
string nombreDominio);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using SIG.Web.AppCode.Models.Common;
|
||||
using SIG.Web.AppCode.Models.Fraccionamientos;
|
||||
|
||||
namespace SIG.Web.AppCode.Contracts.Fraccionamientos
|
||||
{
|
||||
public interface IServicioGisFraccionamiento
|
||||
{
|
||||
DbResult<VistaGisFraccionamiento> Obtener(
|
||||
int cveFraccionamientoEtapa,
|
||||
int cveUsuarioEjecuta,
|
||||
string nombreDominio);
|
||||
|
||||
DbResult<ResultadoGuardadoGisFraccionamiento> Guardar(
|
||||
int cveFraccionamientoEtapa,
|
||||
string nombreArchivoOriginal,
|
||||
Stream contenido,
|
||||
long longitudContenido,
|
||||
IList<VinculoLoteGisFraccionamiento> vinculos,
|
||||
int cveUsuarioEjecuta,
|
||||
string nombreDominio);
|
||||
|
||||
DbResult<ResultadoGuardadoGisFraccionamiento> Eliminar(
|
||||
int cveFraccionamientoEtapa,
|
||||
int cveUsuarioEjecuta,
|
||||
string nombreDominio);
|
||||
|
||||
DbResult<ArchivoGisFraccionamiento> AbrirArchivo(
|
||||
int cveFraccionamientoEtapa,
|
||||
int cveUsuarioEjecuta,
|
||||
string nombreDominio);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
using System.Collections.Generic;
|
||||
using SIG.Web.AppCode.Models.Common;
|
||||
using SIG.Web.AppCode.Models.General;
|
||||
|
||||
namespace SIG.Web.AppCode.Contracts.General
|
||||
{
|
||||
public interface IGeneralCatalogRepository
|
||||
{
|
||||
DbResult<List<StateOptionModel>> ListStates(string domainName);
|
||||
DbResult<PostalCodeLookupModel> GetPostalCode(string postalCode, string domainName);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,51 @@
|
||||
using System.Collections.Generic;
|
||||
using SIG.Web.AppCode.Models.Common;
|
||||
using SIG.Web.AppCode.Models.General;
|
||||
|
||||
namespace SIG.Web.AppCode.Contracts.General
|
||||
{
|
||||
public interface IRepositorioCatalogoProducto
|
||||
{
|
||||
DbResult<List<ModeloClasificacion>> ListarClasificaciones(
|
||||
string texto,
|
||||
bool incluirInactivos,
|
||||
int usuario,
|
||||
string dominio);
|
||||
|
||||
DbResult<ModeloClasificacion> ObtenerClasificacion(
|
||||
int cveClasificacion,
|
||||
int usuario,
|
||||
string dominio);
|
||||
|
||||
DbResult<int> GuardarClasificacion(
|
||||
ModeloClasificacion clasificacion,
|
||||
int usuario,
|
||||
string dominio);
|
||||
|
||||
DbResult<bool> EliminarClasificacion(
|
||||
int cveClasificacion,
|
||||
int usuario,
|
||||
string dominio);
|
||||
|
||||
DbResult<List<ModeloUnidadMedida>> ListarUnidadesMedida(
|
||||
string texto,
|
||||
bool incluirInactivos,
|
||||
int usuario,
|
||||
string dominio);
|
||||
|
||||
DbResult<ModeloUnidadMedida> ObtenerUnidadMedida(
|
||||
int cveUnidadMedida,
|
||||
int usuario,
|
||||
string dominio);
|
||||
|
||||
DbResult<int> GuardarUnidadMedida(
|
||||
ModeloUnidadMedida unidadMedida,
|
||||
int usuario,
|
||||
string dominio);
|
||||
|
||||
DbResult<bool> EliminarUnidadMedida(
|
||||
int cveUnidadMedida,
|
||||
int usuario,
|
||||
string dominio);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
using System.Collections.Generic;
|
||||
using SIG.Web.AppCode.Models.Common;
|
||||
using SIG.Web.AppCode.Models.General;
|
||||
|
||||
namespace SIG.Web.AppCode.Contracts.General
|
||||
{
|
||||
public interface IRepositorioProductoServicio
|
||||
{
|
||||
DbResult<List<ModeloProductoServicio>> Listar(
|
||||
string texto,
|
||||
bool incluirInactivos,
|
||||
int usuario,
|
||||
string dominio);
|
||||
|
||||
DbResult<ModeloProductoServicio> Obtener(
|
||||
int cvePS,
|
||||
int usuario,
|
||||
string dominio);
|
||||
|
||||
DbResult<ModeloOpcionesProductoServicio> ListarOpciones(
|
||||
int? cveClasificacionActual,
|
||||
int? cveUnidadMedidaActual,
|
||||
int usuario,
|
||||
string dominio);
|
||||
|
||||
DbResult<int> Guardar(
|
||||
ModeloProductoServicio productoServicio,
|
||||
int usuario,
|
||||
string dominio);
|
||||
|
||||
DbResult<bool> Eliminar(
|
||||
int cvePS,
|
||||
int usuario,
|
||||
string dominio);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,51 @@
|
||||
using System.Collections.Generic;
|
||||
using SIG.Web.AppCode.Models.Common;
|
||||
using SIG.Web.AppCode.Models.General;
|
||||
|
||||
namespace SIG.Web.AppCode.Contracts.General
|
||||
{
|
||||
public interface IServicioCatalogoProducto
|
||||
{
|
||||
DbResult<List<ModeloClasificacion>> ListarClasificaciones(
|
||||
string texto,
|
||||
bool incluirInactivos,
|
||||
int usuario,
|
||||
string dominio);
|
||||
|
||||
DbResult<ModeloClasificacion> ObtenerClasificacion(
|
||||
int cveClasificacion,
|
||||
int usuario,
|
||||
string dominio);
|
||||
|
||||
DbResult<int> GuardarClasificacion(
|
||||
ModeloClasificacion clasificacion,
|
||||
int usuario,
|
||||
string dominio);
|
||||
|
||||
DbResult<bool> EliminarClasificacion(
|
||||
int cveClasificacion,
|
||||
int usuario,
|
||||
string dominio);
|
||||
|
||||
DbResult<List<ModeloUnidadMedida>> ListarUnidadesMedida(
|
||||
string texto,
|
||||
bool incluirInactivos,
|
||||
int usuario,
|
||||
string dominio);
|
||||
|
||||
DbResult<ModeloUnidadMedida> ObtenerUnidadMedida(
|
||||
int cveUnidadMedida,
|
||||
int usuario,
|
||||
string dominio);
|
||||
|
||||
DbResult<int> GuardarUnidadMedida(
|
||||
ModeloUnidadMedida unidadMedida,
|
||||
int usuario,
|
||||
string dominio);
|
||||
|
||||
DbResult<bool> EliminarUnidadMedida(
|
||||
int cveUnidadMedida,
|
||||
int usuario,
|
||||
string dominio);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
using System.Collections.Generic;
|
||||
using SIG.Web.AppCode.Models.Common;
|
||||
using SIG.Web.AppCode.Models.General;
|
||||
|
||||
namespace SIG.Web.AppCode.Contracts.General
|
||||
{
|
||||
public interface IServicioProductoServicio
|
||||
{
|
||||
DbResult<List<ModeloProductoServicio>> Listar(
|
||||
string texto,
|
||||
bool incluirInactivos,
|
||||
int usuario,
|
||||
string dominio);
|
||||
|
||||
DbResult<ModeloProductoServicio> Obtener(
|
||||
int cvePS,
|
||||
int usuario,
|
||||
string dominio);
|
||||
|
||||
DbResult<ModeloOpcionesProductoServicio> ListarOpciones(
|
||||
int? cveClasificacionActual,
|
||||
int? cveUnidadMedidaActual,
|
||||
int usuario,
|
||||
string dominio);
|
||||
|
||||
DbResult<int> Guardar(
|
||||
ModeloProductoServicio productoServicio,
|
||||
int usuario,
|
||||
string dominio);
|
||||
|
||||
DbResult<bool> Eliminar(
|
||||
int cvePS,
|
||||
int usuario,
|
||||
string dominio);
|
||||
}
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user