diff --git a/CLAUDE.md b/CLAUDE.md index 39758ce..4ea5154 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -38,8 +38,9 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co **Working on `reports-app/` or `shared/`**: → Use instructions from this file (below) -**Working on shared components** (`shared/auth/`, `shared/database/`): +**Working on shared components** (`shared/auth/`, `shared/database/`, `shared/frontend/`): → These are used by BOTH apps - be careful with changes! +→ `shared/frontend/` contains: LoginView.vue, auth store factory, login styles --- @@ -48,9 +49,13 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co ### Microservices Structure ``` . -├── shared/ # Shared components (DB pool, auth, utils) -│ ├── database/ # Oracle pool (used by reports-app) -│ └── auth/ # JWT auth (used by both apps) +├── shared/ # Shared components (DB pool, auth, frontend) +│ ├── database/ # Oracle pool (used by both apps) +│ ├── auth/ # JWT auth (used by both apps) +│ └── frontend/ # Shared Vue components, stores, styles +│ ├── components/ # LoginView.vue +│ ├── stores/ # auth.js (Pinia store factory) +│ └── styles/ # login.css │ ├── reports-app/ # READ-ONLY reports from Oracle │ ├── backend/ # FastAPI API (port 8001) diff --git a/data-entry-app/CLAUDE.md b/data-entry-app/CLAUDE.md index b272dbc..e1ff9f4 100644 --- a/data-entry-app/CLAUDE.md +++ b/data-entry-app/CLAUDE.md @@ -48,8 +48,14 @@ data-entry-app/ ## Componente Partajate -- `shared/database/oracle_pool.py` - Conexiune Oracle pentru nomenclatoare -- `shared/auth/` - JWT authentication +### Backend +- `shared/database/oracle_pool.py` - Conexiune Oracle pentru nomenclatoare si autentificare +- `shared/auth/` - JWT authentication (middleware, routes, service) + +### Frontend +- `shared/frontend/components/LoginView.vue` - Componenta login partajata +- `shared/frontend/stores/auth.js` - Pinia auth store factory +- `shared/frontend/styles/login.css` - Stiluri login ## Comenzi Dezvoltare diff --git a/data-entry-app/backend/IMPLEMENTATION_SUMMARY_NOMENCLATURE_SYNC.md b/data-entry-app/backend/IMPLEMENTATION_SUMMARY_NOMENCLATURE_SYNC.md new file mode 100644 index 0000000..7e29aa6 --- /dev/null +++ b/data-entry-app/backend/IMPLEMENTATION_SUMMARY_NOMENCLATURE_SYNC.md @@ -0,0 +1,455 @@ +# Implementation Summary: Nomenclature Sync (FAZA 3) + +**Date**: 2025-12-13 +**Status**: COMPLETED +**Developer**: Claude Code + +--- + +## Overview + +Successfully implemented FAZA 3: Nomenclature Sync for the data-entry-app. This feature enables the application to maintain a local SQLite cache of nomenclatures (suppliers, cash registers) from Oracle, reducing latency and improving performance. + +## Files Created + +### 1. Models +**File**: `/app/db/models/nomenclature.py` +- `SyncedSupplier` - Suppliers synced from Oracle NOM_PARTENERI +- `LocalSupplier` - Suppliers created locally from OCR (not yet in Oracle) +- `SyncedCashRegister` - Cash registers and bank accounts synced from Oracle + +### 2. Service Layer +**File**: `/app/services/sync_service.py` +- `SyncService.sync_suppliers()` - Sync suppliers from Oracle to SQLite +- `SyncService.sync_cash_registers()` - Sync cash registers from Oracle to SQLite +- `SyncService.search_supplier()` - Search in synced + local suppliers +- `SyncService.create_local_supplier()` - Create local supplier from OCR data +- `SyncService.get_all_suppliers()` - Get all suppliers for dropdown +- `SyncService.get_all_cash_registers()` - Get all cash registers for dropdown +- `SyncService.get_schema_for_company()` - Map company ID to Oracle schema + +**Company-to-Schema Mapping**: +```python +COMPANY_SCHEMAS = { + 1: "CONTAFIN", + 2: "CONTAFIN2", +} +``` +> **TODO**: Move to config table or environment variable + +### 3. API Router +**File**: `/app/routers/nomenclature.py` + +New endpoints: +- `GET /api/nomenclature/suppliers` - Get all suppliers (synced + local) +- `GET /api/nomenclature/suppliers/search` - Search supplier by fiscal code or name +- `POST /api/nomenclature/suppliers/local` - Create local supplier from OCR +- `GET /api/nomenclature/cash-registers` - Get all cash registers +- `POST /api/nomenclature/sync/suppliers` - Manual supplier sync +- `POST /api/nomenclature/sync/cash-registers` - Manual cash register sync +- `POST /api/nomenclature/sync/all` - Sync all nomenclatures + +### 4. Database Migration +**File**: `/migrations/versions/20251213_002805_add_nomenclature_tables.py` +- Creates `synced_suppliers` table with indexes +- Creates `local_suppliers` table with indexes +- Creates `synced_cash_registers` table with indexes + +**Applied**: Yes (migration revision: 3a653da79002) + +### 5. Documentation +**File**: `NOMENCLATURE_SYNC.md` +- Complete implementation guide +- Architecture overview +- API reference +- Usage examples +- Troubleshooting guide + +**File**: `IMPLEMENTATION_SUMMARY_NOMENCLATURE_SYNC.md` (this file) +- Implementation summary +- Files changed +- Testing checklist + +## Files Modified + +### 1. `/app/db/models/__init__.py` +**Change**: Added imports for nomenclature models +```python +from .nomenclature import SyncedSupplier, LocalSupplier, SyncedCashRegister +``` + +### 2. `/app/services/nomenclature_service.py` +**Changes**: +- Updated `get_partners()` to accept optional `session` parameter +- Added SQLite fallback: returns synced/local suppliers if available +- Falls back to mock data if no synced data +- Updated `get_cash_registers()` to accept optional `session` parameter +- Added SQLite fallback for cash registers + +### 3. `/app/routers/receipts.py` +**Changes**: +- Updated `get_partners()` endpoint to pass `session` to service +- Updated `get_cash_registers()` endpoint to pass `session` to service + +### 4. `/app/routers/__init__.py` +**Change**: Added nomenclature router to exports +```python +from . import receipts, nomenclature +__all__ = ["receipts", "nomenclature"] +``` + +### 5. `/app/main.py` +**Change**: Registered nomenclature router +```python +from app.routers import receipts, ocr, nomenclature +app.include_router(nomenclature.router, prefix="/api/nomenclature", tags=["nomenclature"]) +``` + +## Database Schema + +### synced_suppliers +```sql +CREATE TABLE synced_suppliers ( + id INTEGER PRIMARY KEY, + oracle_id INTEGER NOT NULL, + company_id INTEGER NOT NULL, + name VARCHAR(200) NOT NULL, + fiscal_code VARCHAR(50), + address VARCHAR(500), + synced_at DATETIME NOT NULL +); +CREATE INDEX ix_synced_suppliers_oracle_id ON synced_suppliers(oracle_id); +CREATE INDEX ix_synced_suppliers_company_id ON synced_suppliers(company_id); +CREATE INDEX ix_synced_suppliers_fiscal_code ON synced_suppliers(fiscal_code); +``` + +### local_suppliers +```sql +CREATE TABLE local_suppliers ( + id INTEGER PRIMARY KEY, + company_id INTEGER NOT NULL, + name VARCHAR(200) NOT NULL, + fiscal_code VARCHAR(50), + address VARCHAR(500), + created_by VARCHAR(100) NOT NULL, + created_at DATETIME NOT NULL, + pending_oracle_sync BOOLEAN NOT NULL +); +CREATE INDEX ix_local_suppliers_company_id ON local_suppliers(company_id); +CREATE INDEX ix_local_suppliers_fiscal_code ON local_suppliers(fiscal_code); +``` + +### synced_cash_registers +```sql +CREATE TABLE synced_cash_registers ( + id INTEGER PRIMARY KEY, + oracle_id INTEGER NOT NULL, + company_id INTEGER NOT NULL, + name VARCHAR(100) NOT NULL, + account_code VARCHAR(20) NOT NULL, + register_type VARCHAR(10) NOT NULL, + synced_at DATETIME NOT NULL +); +CREATE INDEX ix_synced_cash_registers_oracle_id ON synced_cash_registers(oracle_id); +CREATE INDEX ix_synced_cash_registers_company_id ON synced_cash_registers(company_id); +``` + +## API Endpoints Summary + +### Nomenclature Endpoints + +#### GET /api/nomenclature/suppliers +Get all suppliers (synced + local) for dropdown/autocomplete. + +**Query Params**: +- `search` (optional) - Filter by name or fiscal code +- `company_id` (optional) - Company ID (defaults to user's first company) + +**Response**: +```json +[ + { + "id": 1, + "oracle_id": 123, + "name": "OMV Petrom", + "fiscal_code": "RO123456", + "source": "synced" + }, + { + "id": 2, + "name": "Local Supplier SRL", + "fiscal_code": "RO789012", + "source": "local" + } +] +``` + +#### GET /api/nomenclature/suppliers/search +Search for supplier by fiscal code or name. + +**Query Params**: +- `fiscal_code` (optional) - Fiscal code to search +- `name` (optional) - Name to search (partial match) +- `company_id` (optional) - Company ID + +**Response**: +```json +{ + "found": true, + "supplier": { + "id": 1, + "oracle_id": 123, + "name": "OMV Petrom", + "fiscal_code": "RO123456", + "address": "Str. Example 123" + }, + "source": "synced" +} +``` + +#### POST /api/nomenclature/suppliers/local +Create a local supplier from OCR data. + +**Body**: +```json +{ + "name": "New Supplier SRL", + "fiscal_code": "RO12345678", + "address": "Str. Example 123" +} +``` + +**Response**: +```json +{ + "id": 5, + "name": "New Supplier SRL", + "fiscal_code": "RO12345678", + "address": "Str. Example 123", + "is_local": true +} +``` + +#### GET /api/nomenclature/cash-registers +Get all cash registers for a company. + +**Query Params**: +- `company_id` (optional) - Company ID + +**Response**: +```json +[ + { + "id": 1, + "oracle_id": 10, + "name": "Casa principala", + "account_code": "5311", + "register_type": "cash" + }, + { + "id": 2, + "oracle_id": 20, + "name": "Cont BCR", + "account_code": "5121", + "register_type": "bank" + } +] +``` + +#### POST /api/nomenclature/sync/suppliers +Manually trigger supplier sync from Oracle. + +**Response**: +```json +{ + "synced": 150, + "errors": 0, + "message": "Synced 150 suppliers with 0 errors" +} +``` + +#### POST /api/nomenclature/sync/cash-registers +Manually trigger cash register sync from Oracle. + +**Response**: +```json +{ + "synced": 5, + "errors": 0, + "message": "Synced 5 cash registers with 0 errors" +} +``` + +#### POST /api/nomenclature/sync/all +Sync all nomenclatures (suppliers + cash registers). + +**Response**: +```json +{ + "suppliers": { + "synced": 150, + "errors": 0 + }, + "cash_registers": { + "synced": 5, + "errors": 0 + }, + "total_synced": 155, + "total_errors": 0, + "message": "Synced 150 suppliers and 5 cash registers" +} +``` + +## Testing Checklist + +### Unit Tests +- [ ] Test `SyncService.sync_suppliers()` with mock Oracle data +- [ ] Test `SyncService.sync_cash_registers()` with mock Oracle data +- [ ] Test `SyncService.search_supplier()` for synced suppliers +- [ ] Test `SyncService.search_supplier()` for local suppliers +- [ ] Test `SyncService.create_local_supplier()` +- [ ] Test upsert logic (update existing vs insert new) + +### Integration Tests +- [ ] Test nomenclature router endpoints with authentication +- [ ] Test `/api/nomenclature/suppliers` endpoint +- [ ] Test `/api/nomenclature/suppliers/search` endpoint +- [ ] Test `/api/nomenclature/suppliers/local` endpoint +- [ ] Test `/api/nomenclature/cash-registers` endpoint +- [ ] Test `/api/nomenclature/sync/suppliers` endpoint +- [ ] Test `/api/nomenclature/sync/all` endpoint + +### Manual Testing +- [ ] Start backend: `uvicorn app.main:app --reload --port 8003` +- [ ] Verify `/docs` shows new nomenclature endpoints +- [ ] Test sync endpoint (requires Oracle connection) +- [ ] Test search endpoint with various queries +- [ ] Test create local supplier endpoint +- [ ] Verify existing `/api/receipts/nomenclature/partners` still works +- [ ] Verify existing `/api/receipts/nomenclature/cash-registers` still works + +### Oracle Connection Testing +- [ ] Verify SSH tunnel is running (dev/Linux) +- [ ] Test Oracle connection via health endpoint +- [ ] Verify company schema mapping is correct +- [ ] Test sync with real Oracle data +- [ ] Verify table names match actual Oracle schema + +### Error Handling Testing +- [ ] Test sync with invalid company ID +- [ ] Test sync with Oracle connection error +- [ ] Test search with no results +- [ ] Test create local supplier with duplicate fiscal code +- [ ] Test endpoints with missing authentication token + +## Dependencies + +All required dependencies are already in `requirements.txt`: +- `oracledb>=2.0.1` - Oracle database connection +- `sqlmodel>=0.0.14` - ORM for SQLite +- `alembic>=1.13.1` - Database migrations + +## Deployment Notes + +### Development +1. Ensure SSH tunnel is running: `./ssh_tunnel.sh start` +2. Apply migration: `alembic upgrade head` +3. Run initial sync: `POST /api/nomenclature/sync/all` +4. Start backend: `uvicorn app.main:app --reload --port 8003` + +### Production +1. Update `COMPANY_SCHEMAS` in `sync_service.py` with production mappings +2. Apply migration: `alembic upgrade head` +3. Set up cron job for periodic sync (daily recommended) +4. Configure Oracle connection (no SSH tunnel needed on Windows prod) + +### Migration Commands +```bash +# Check current version +alembic current + +# Apply migration +alembic upgrade head + +# Rollback migration +alembic downgrade -1 + +# View migration history +alembic history +``` + +## Known Issues / TODOs + +1. **Company Schema Mapping**: Currently hardcoded in `sync_service.py` + - TODO: Move to config table or environment variable + +2. **Oracle Table Names**: Assumes `NOM_PARTENERI` and `NOM_CASE` exist + - TODO: Verify actual table names in production Oracle schema + - TODO: Add error handling for missing tables + +3. **Sync Scheduling**: No automatic periodic sync implemented + - TODO: Add background task or cron job for daily sync + +4. **Conflict Resolution**: No logic to handle local supplier matching synced supplier + - TODO: Implement merge logic when OCR supplier matches Oracle supplier + +5. **Bidirectional Sync**: Local suppliers not pushed to Oracle + - TODO: Implement sync from SQLite to Oracle for approved local suppliers + +6. **Performance**: Sync loads all records at once + - TODO: Implement batch processing for large datasets + - TODO: Add incremental sync (requires Oracle last_modified timestamp) + +7. **Validation**: No validation for duplicate fiscal codes + - TODO: Add uniqueness constraint and conflict resolution + +8. **Testing**: No unit tests written yet + - TODO: Add comprehensive test suite + +## Success Criteria + +✅ **Completed**: +- SQLite tables created for synced nomenclatures +- Sync service implemented with Oracle integration +- API endpoints for sync and query operations +- Updated existing nomenclature service to use synced data +- Database migration created and applied +- All files have correct Python syntax +- Documentation created + +⏳ **Pending**: +- Unit tests +- Integration tests +- Manual testing with real Oracle data +- Production deployment +- Scheduled sync setup + +## Next Steps + +1. **Testing Phase**: + - Write unit tests for sync service + - Write integration tests for API endpoints + - Manual testing with real Oracle connection + - Performance testing with large datasets + +2. **Production Readiness**: + - Update company schema mappings for production + - Verify Oracle table names + - Set up cron job for periodic sync + - Add monitoring and alerting + +3. **Enhancements**: + - Implement scheduled background sync + - Add sync status dashboard in frontend + - Implement conflict resolution + - Add bidirectional sync (SQLite → Oracle) + +## Related Documentation + +- Complete Guide: `NOMENCLATURE_SYNC.md` +- Architecture: `docs/data-entry/ARCHITECTURE.md` +- API Docs: Available at `/docs` when app is running + +--- + +**Implementation completed successfully!** All core features are in place and ready for testing. diff --git a/data-entry-app/backend/NOMENCLATURE_SYNC.md b/data-entry-app/backend/NOMENCLATURE_SYNC.md new file mode 100644 index 0000000..32530c1 --- /dev/null +++ b/data-entry-app/backend/NOMENCLATURE_SYNC.md @@ -0,0 +1,273 @@ +# Nomenclature Sync - Implementation Guide + +## Overview + +This document describes the implementation of FAZA 3: Nomenclature Sync for the Data Entry App. + +The nomenclature sync system allows the data-entry-app to maintain a local SQLite cache of nomenclatures (suppliers, cash registers) from Oracle, reducing the need for live Oracle queries and improving performance. + +## Architecture + +### Database Tables + +Three new SQLite tables were added: + +1. **synced_suppliers** - Suppliers synced from Oracle NOM_PARTENERI + - `oracle_id` - Original Oracle ID + - `company_id` - Company this supplier belongs to + - `name` - Supplier name + - `fiscal_code` - CUI/CIF + - `address` - Supplier address + - `synced_at` - Last sync timestamp + +2. **local_suppliers** - Suppliers created locally from OCR (not in Oracle) + - `company_id` - Company ID + - `name` - Supplier name + - `fiscal_code` - CUI/CIF + - `address` - Supplier address + - `created_by` - Username who created it + - `pending_oracle_sync` - Flag for future Oracle sync + +3. **synced_cash_registers** - Cash registers and bank accounts from Oracle + - `oracle_id` - Original Oracle ID + - `company_id` - Company ID + - `name` - Register name + - `account_code` - Account code (5311, 5121, etc.) + - `register_type` - 'cash' or 'bank' + - `synced_at` - Last sync timestamp + +### Components + +#### 1. Models (`app/db/models/nomenclature.py`) +SQLModel models for the three tables above. + +#### 2. Sync Service (`app/services/sync_service.py`) +Core business logic for syncing nomenclatures: + +- `sync_suppliers()` - Sync suppliers from Oracle to SQLite +- `sync_cash_registers()` - Sync cash registers from Oracle to SQLite +- `search_supplier()` - Search in synced + local suppliers +- `create_local_supplier()` - Create local supplier from OCR data +- `get_all_suppliers()` - Get all suppliers for dropdown +- `get_all_cash_registers()` - Get all cash registers for dropdown + +#### 3. API Router (`app/routers/nomenclature.py`) +New API endpoints: + +**GET /api/nomenclature/suppliers** +- Get all suppliers (synced + local) for dropdown/autocomplete +- Query params: `search`, `company_id` +- Returns: List of SupplierOption + +**GET /api/nomenclature/suppliers/search** +- Search for supplier by fiscal code or name +- Query params: `fiscal_code`, `name`, `company_id` +- Returns: SupplierSearchResult (found, supplier, source) + +**POST /api/nomenclature/suppliers/local** +- Create a local supplier from OCR data +- Body: LocalSupplierCreate (name, fiscal_code, address) +- Returns: LocalSupplierResponse + +**GET /api/nomenclature/cash-registers** +- Get all cash registers for a company +- Query params: `company_id` +- Returns: List of CashRegisterOption + +**POST /api/nomenclature/sync/suppliers** +- Manually trigger supplier sync from Oracle +- Returns: SyncResult (synced count, errors) + +**POST /api/nomenclature/sync/cash-registers** +- Manually trigger cash register sync from Oracle +- Returns: SyncResult (synced count, errors) + +**POST /api/nomenclature/sync/all** +- Sync all nomenclatures (suppliers + cash registers) +- Returns: Combined sync results + +#### 4. Updated Services + +**nomenclature_service.py** was updated to use synced data: +- `get_partners()` - Now accepts optional `session` parameter, returns synced data if available, falls back to mock +- `get_cash_registers()` - Now accepts optional `session` parameter, returns synced data if available, falls back to mock + +**receipts.py router** was updated to pass session to nomenclature service. + +## Company Schema Mapping + +The sync service needs to know which Oracle schema to query for each company. This is configured in `sync_service.py`: + +```python +COMPANY_SCHEMAS = { + 1: "CONTAFIN", + 2: "CONTAFIN2", +} +``` + +**TODO**: Move this to a config table or environment variable for production. + +## Oracle Integration + +The sync service connects to Oracle using the shared `oracle_pool` from `/shared/database/oracle_pool.py`. + +**Prerequisites**: +- SSH tunnel must be running (development/Linux) +- Oracle connection pool must be initialized +- Environment variables must be set (ORACLE_USER, ORACLE_PASSWORD, ORACLE_HOST, ORACLE_PORT, ORACLE_SID) + +**Oracle Tables Used**: +- `{schema}.NOM_PARTENERI` - Suppliers (WHERE ACTIV = 1) +- `{schema}.NOM_CASE` - Cash registers (WHERE ACTIV = 1) + +**Note**: Table and column names may need adjustment based on actual Oracle schema. + +## Usage Flow + +### Initial Setup (One-time) + +1. Ensure Oracle connection is available: + ```bash + # Start SSH tunnel (if on Linux/dev) + ./ssh_tunnel.sh start + ``` + +2. Run initial sync: + ```bash + # Via API (authenticated request) + POST /api/nomenclature/sync/all + ``` + + Or programmatically: + ```python + from app.services.sync_service import SyncService + + # Sync for company 1 + synced, errors = await SyncService.sync_suppliers(session, company_id=1) + synced, errors = await SyncService.sync_cash_registers(session, company_id=1) + ``` + +### Periodic Sync + +Set up a cron job or scheduled task to sync nomenclatures periodically (e.g., daily): + +```python +# Example: Add to app lifespan or background task +async def sync_all_companies(): + """Sync nomenclatures for all companies.""" + async with get_db_session() as session: + for company_id in [1, 2]: # All company IDs + await SyncService.sync_suppliers(session, company_id) + await SyncService.sync_cash_registers(session, company_id) +``` + +### Using Synced Data + +The existing endpoints (`/api/receipts/nomenclature/partners`, `/api/receipts/nomenclature/cash-registers`) now automatically use synced data when available. + +**Frontend** - No changes needed! Existing code continues to work: +```javascript +// Get suppliers (now from synced data) +const response = await api.get('/api/receipts/nomenclature/partners?search=OMV'); +``` + +### Creating Local Suppliers from OCR + +When OCR extracts a supplier not in Oracle: + +```javascript +// Create local supplier +const response = await api.post('/api/nomenclature/suppliers/local', { + name: "New Supplier SRL", + fiscal_code: "RO12345678", + address: "Str. Example 123" +}); +``` + +The local supplier will be: +- Available immediately in dropdowns +- Flagged for future Oracle sync (`pending_oracle_sync = True`) +- Created by current user (`created_by = username`) + +## Migration + +Migration: `20251213_002805_add_nomenclature_tables.py` + +Applied with: +```bash +alembic upgrade head +``` + +To rollback: +```bash +alembic downgrade -1 +``` + +## Testing + +### Manual Testing + +1. Test sync endpoint: + ```bash + curl -X POST http://localhost:8003/api/nomenclature/sync/suppliers \ + -H "Authorization: Bearer YOUR_TOKEN" + ``` + +2. Test search: + ```bash + curl "http://localhost:8003/api/nomenclature/suppliers/search?name=OMV" \ + -H "Authorization: Bearer YOUR_TOKEN" + ``` + +3. Test get all suppliers: + ```bash + curl "http://localhost:8003/api/nomenclature/suppliers" \ + -H "Authorization: Bearer YOUR_TOKEN" + ``` + +### Unit Tests + +TODO: Add unit tests in `tests/test_sync_service.py`: +- Test supplier sync +- Test cash register sync +- Test search functionality +- Test local supplier creation + +## Troubleshooting + +### Sync fails with "No schema mapping" +- Update `COMPANY_SCHEMAS` in `sync_service.py` with correct company-to-schema mappings + +### Sync fails with Oracle connection error +- Verify SSH tunnel is running: `./ssh_tunnel.sh status` +- Check Oracle credentials in `.env` +- Test Oracle connection: `curl http://localhost:8003/health` + +### Tables not found in Oracle +- Verify table names in Oracle (may differ from NOM_PARTENERI, NOM_CASE) +- Update SQL queries in `sync_service.py` to match actual schema + +### Duplicate suppliers after sync +- The sync uses upsert logic (update if exists, insert if new) +- Check `oracle_id` + `company_id` uniqueness in synced_suppliers table + +## Future Enhancements + +1. **Scheduled Background Sync** - Add cron job or Celery task for automatic daily sync +2. **Sync Status Dashboard** - UI to show last sync time, sync statistics +3. **Conflict Resolution** - Handle cases where local supplier matches synced supplier +4. **Bidirectional Sync** - Push local suppliers to Oracle when approved +5. **Incremental Sync** - Only sync changed records (requires last_modified timestamp in Oracle) +6. **Multi-Company Support** - Auto-detect user's companies and sync all +7. **Sync Notifications** - Notify users when sync completes or fails +8. **Audit Log** - Track all sync operations for compliance + +## Related Files + +- Models: `/app/db/models/nomenclature.py` +- Service: `/app/services/sync_service.py` +- Router: `/app/routers/nomenclature.py` +- Migration: `/migrations/versions/20251213_002805_add_nomenclature_tables.py` +- Updated: `/app/services/nomenclature_service.py` +- Updated: `/app/routers/receipts.py` +- Updated: `/app/main.py` diff --git a/data-entry-app/backend/app/db/models/__init__.py b/data-entry-app/backend/app/db/models/__init__.py index a872220..31716a9 100644 --- a/data-entry-app/backend/app/db/models/__init__.py +++ b/data-entry-app/backend/app/db/models/__init__.py @@ -1,6 +1,7 @@ # Database models from .receipt import Receipt, ReceiptAttachment, ReceiptStatus, ReceiptType, ReceiptDirection from .accounting_entry import AccountingEntry, EntryType +from .nomenclature import SyncedSupplier, LocalSupplier, SyncedCashRegister __all__ = [ "Receipt", @@ -10,4 +11,7 @@ __all__ = [ "ReceiptDirection", "AccountingEntry", "EntryType", + "SyncedSupplier", + "LocalSupplier", + "SyncedCashRegister", ] diff --git a/data-entry-app/backend/app/db/models/nomenclature.py b/data-entry-app/backend/app/db/models/nomenclature.py new file mode 100644 index 0000000..1be5c12 --- /dev/null +++ b/data-entry-app/backend/app/db/models/nomenclature.py @@ -0,0 +1,46 @@ +"""Nomenclature models for synced and local data.""" + +from typing import Optional +from datetime import datetime +from sqlmodel import SQLModel, Field + + +class SyncedSupplier(SQLModel, table=True): + """Suppliers synced from Oracle NOM_PARTENERI.""" + __tablename__ = "synced_suppliers" + + id: Optional[int] = Field(default=None, primary_key=True) + oracle_id: int = Field(index=True) # Original Oracle ID + company_id: int = Field(index=True) # Company this supplier belongs to + name: str = Field(max_length=200) + fiscal_code: Optional[str] = Field(default=None, max_length=50, index=True) # CUI/CIF + address: Optional[str] = Field(default=None, max_length=500) + synced_at: datetime = Field(default_factory=datetime.utcnow) + + +class LocalSupplier(SQLModel, table=True): + """Suppliers created locally from OCR (not in Oracle).""" + __tablename__ = "local_suppliers" + + id: Optional[int] = Field(default=None, primary_key=True) + company_id: int = Field(index=True) + name: str = Field(max_length=200) + fiscal_code: Optional[str] = Field(default=None, max_length=50, index=True) + address: Optional[str] = Field(default=None, max_length=500) + created_by: str = Field(max_length=100) # Username who created it + created_at: datetime = Field(default_factory=datetime.utcnow) + # Flag to indicate if it should be synced to Oracle later + pending_oracle_sync: bool = Field(default=True) + + +class SyncedCashRegister(SQLModel, table=True): + """Cash registers and bank accounts synced from Oracle.""" + __tablename__ = "synced_cash_registers" + + id: Optional[int] = Field(default=None, primary_key=True) + oracle_id: int = Field(index=True) + company_id: int = Field(index=True) + name: str = Field(max_length=100) + account_code: str = Field(max_length=20) # 5311, 5121, etc. + register_type: str = Field(max_length=10) # 'cash' or 'bank' + synced_at: datetime = Field(default_factory=datetime.utcnow) diff --git a/data-entry-app/backend/app/main.py b/data-entry-app/backend/app/main.py index 36c8776..0c500c1 100644 --- a/data-entry-app/backend/app/main.py +++ b/data-entry-app/backend/app/main.py @@ -6,6 +6,10 @@ import threading from pathlib import Path from contextlib import asynccontextmanager +# Load .env file BEFORE any imports that use os.getenv() +from dotenv import load_dotenv +load_dotenv() + from fastapi import FastAPI # Configure logging to show INFO level messages @@ -24,6 +28,9 @@ sys.path.insert(0, str(project_root / "shared")) from app.config import settings from app.db.database import init_db +# Import Oracle pool for auth service +from database.oracle_pool import oracle_pool + @asynccontextmanager async def lifespan(app: FastAPI): @@ -31,7 +38,15 @@ async def lifespan(app: FastAPI): # Startup print(f"Starting {settings.app_name} v{settings.app_version}") - # Initialize database + # Initialize Oracle pool (required for authentication) + try: + await oracle_pool.initialize() + print("Oracle pool initialized") + except Exception as e: + print(f"Warning: Oracle pool initialization failed: {e}") + print("Authentication will not work without Oracle connection") + + # Initialize SQLite database await init_db() print("Database initialized") @@ -55,6 +70,11 @@ async def lifespan(app: FastAPI): # Shutdown print("Shutting down...") + try: + await oracle_pool.close() + print("Oracle pool closed") + except Exception as e: + print(f"Warning: Oracle pool close failed: {e}") # Create FastAPI app @@ -74,6 +94,14 @@ app.add_middleware( allow_headers=["*"], ) +# Authentication middleware +from auth.middleware import AuthenticationMiddleware + +app.add_middleware( + AuthenticationMiddleware, + excluded_paths=["/docs", "/redoc", "/openapi.json", "/health", "/", "/api/auth/login", "/api/auth/refresh"] +) + # Mount static files for uploads (optional - can serve through nginx in prod) uploads_path = Path(settings.upload_path) if uploads_path.exists(): @@ -92,10 +120,17 @@ async def health_check(): # Import and include routers -from app.routers import receipts, ocr +from app.routers import receipts, ocr, nomenclature app.include_router(receipts.router, prefix="/api/receipts", tags=["receipts"]) app.include_router(ocr.router, prefix="/api/ocr", tags=["ocr"]) +app.include_router(nomenclature.router, prefix="/api/nomenclature", tags=["nomenclature"]) + +# Auth router +from auth.routes import create_auth_router + +auth_router = create_auth_router(prefix="") # No prefix - we set it in include_router +app.include_router(auth_router, prefix="/api/auth", tags=["auth"]) # Root endpoint diff --git a/data-entry-app/backend/app/routers/__init__.py b/data-entry-app/backend/app/routers/__init__.py index 665b26d..6a8f0e9 100644 --- a/data-entry-app/backend/app/routers/__init__.py +++ b/data-entry-app/backend/app/routers/__init__.py @@ -1,4 +1,4 @@ # API routers -from . import receipts +from . import receipts, nomenclature -__all__ = ["receipts"] +__all__ = ["receipts", "nomenclature"] diff --git a/data-entry-app/backend/app/routers/nomenclature.py b/data-entry-app/backend/app/routers/nomenclature.py new file mode 100644 index 0000000..70a4cee --- /dev/null +++ b/data-entry-app/backend/app/routers/nomenclature.py @@ -0,0 +1,221 @@ +"""Nomenclature API endpoints.""" + +from typing import Optional, List +from fastapi import APIRouter, Depends, HTTPException +from sqlalchemy.ext.asyncio import AsyncSession +from pydantic import BaseModel + +from app.db.database import get_session +from app.services.sync_service import SyncService + +# Import auth dependencies +import sys +from pathlib import Path +project_root = Path(__file__).parent.parent.parent.parent.parent +sys.path.insert(0, str(project_root / "shared")) + +from auth.dependencies import get_current_user +from auth.models import CurrentUser + +router = APIRouter() + + +# Request/Response Models +class SupplierSearchResult(BaseModel): + found: bool + supplier: Optional[dict] = None + source: str # 'synced', 'local', 'not_found' + + +class LocalSupplierCreate(BaseModel): + name: str + fiscal_code: Optional[str] = None + address: Optional[str] = None + + +class LocalSupplierResponse(BaseModel): + id: int + name: str + fiscal_code: Optional[str] + address: Optional[str] + is_local: bool = True + + +class SyncResult(BaseModel): + synced: int + errors: int + message: str + + +class SupplierOption(BaseModel): + id: int + oracle_id: Optional[int] = None + name: str + fiscal_code: Optional[str] + source: str # 'synced' or 'local' + + +class CashRegisterOption(BaseModel): + id: int + oracle_id: int + name: str + account_code: str + register_type: str + + +# Endpoints +@router.get("/suppliers/search", response_model=SupplierSearchResult) +async def search_supplier( + fiscal_code: Optional[str] = None, + name: Optional[str] = None, + company_id: Optional[int] = None, + session: AsyncSession = Depends(get_session), + current_user: CurrentUser = Depends(get_current_user), +): + """Search for supplier by fiscal code or name.""" + if not fiscal_code and not name: + raise HTTPException(status_code=400, detail="Provide fiscal_code or name") + + # Use provided company_id or first from user + cid = company_id or (current_user.companies[0] if current_user.companies else 1) + + found, supplier, source = await SyncService.search_supplier( + session, cid, fiscal_code, name + ) + + return SupplierSearchResult(found=found, supplier=supplier, source=source) + + +@router.get("/suppliers", response_model=List[SupplierOption]) +async def get_suppliers( + search: Optional[str] = None, + company_id: Optional[int] = None, + session: AsyncSession = Depends(get_session), + current_user: CurrentUser = Depends(get_current_user), +): + """Get all suppliers (synced + local) for dropdown/autocomplete.""" + cid = company_id or (current_user.companies[0] if current_user.companies else 1) + + suppliers = await SyncService.get_all_suppliers(session, cid, search) + + return [ + SupplierOption( + id=s["id"], + oracle_id=s.get("oracle_id"), + name=s["name"], + fiscal_code=s.get("fiscal_code"), + source=s["source"] + ) + for s in suppliers + ] + + +@router.post("/suppliers/local", response_model=LocalSupplierResponse) +async def create_local_supplier( + data: LocalSupplierCreate, + company_id: Optional[int] = None, + session: AsyncSession = Depends(get_session), + current_user: CurrentUser = Depends(get_current_user), +): + """Create a local supplier from OCR data.""" + cid = company_id or (current_user.companies[0] if current_user.companies else 1) + + supplier = await SyncService.create_local_supplier( + session, cid, data.name, data.fiscal_code, data.address, current_user.username + ) + + return LocalSupplierResponse( + id=supplier.id, + name=supplier.name, + fiscal_code=supplier.fiscal_code, + address=supplier.address, + ) + + +@router.get("/cash-registers", response_model=List[CashRegisterOption]) +async def get_cash_registers( + company_id: Optional[int] = None, + session: AsyncSession = Depends(get_session), + current_user: CurrentUser = Depends(get_current_user), +): + """Get all cash registers for a company.""" + cid = company_id or (current_user.companies[0] if current_user.companies else 1) + + registers = await SyncService.get_all_cash_registers(session, cid) + + return [ + CashRegisterOption( + id=r["id"], + oracle_id=r["oracle_id"], + name=r["name"], + account_code=r["account_code"], + register_type=r["register_type"] + ) + for r in registers + ] + + +@router.post("/sync/suppliers", response_model=SyncResult) +async def sync_suppliers( + company_id: Optional[int] = None, + session: AsyncSession = Depends(get_session), + current_user: CurrentUser = Depends(get_current_user), +): + """Manually trigger supplier sync from Oracle.""" + cid = company_id or (current_user.companies[0] if current_user.companies else 1) + + synced, errors = await SyncService.sync_suppliers(session, cid) + + return SyncResult( + synced=synced, + errors=errors, + message=f"Synced {synced} suppliers with {errors} errors" + ) + + +@router.post("/sync/cash-registers", response_model=SyncResult) +async def sync_cash_registers( + company_id: Optional[int] = None, + session: AsyncSession = Depends(get_session), + current_user: CurrentUser = Depends(get_current_user), +): + """Manually trigger cash register sync from Oracle.""" + cid = company_id or (current_user.companies[0] if current_user.companies else 1) + + synced, errors = await SyncService.sync_cash_registers(session, cid) + + return SyncResult( + synced=synced, + errors=errors, + message=f"Synced {synced} cash registers with {errors} errors" + ) + + +@router.post("/sync/all", response_model=dict) +async def sync_all_nomenclatures( + company_id: Optional[int] = None, + session: AsyncSession = Depends(get_session), + current_user: CurrentUser = Depends(get_current_user), +): + """Sync all nomenclatures (suppliers + cash registers) from Oracle.""" + cid = company_id or (current_user.companies[0] if current_user.companies else 1) + + # Sync suppliers + suppliers_synced, suppliers_errors = await SyncService.sync_suppliers(session, cid) + + # Sync cash registers + registers_synced, registers_errors = await SyncService.sync_cash_registers(session, cid) + + return { + "suppliers": { + "synced": suppliers_synced, + "errors": suppliers_errors + }, + "cash_registers": { + "synced": registers_synced, + "errors": registers_errors + }, + "total_synced": suppliers_synced + registers_synced, + "total_errors": suppliers_errors + registers_errors, + "message": f"Synced {suppliers_synced} suppliers and {registers_synced} cash registers" + } diff --git a/data-entry-app/backend/app/routers/ocr.py b/data-entry-app/backend/app/routers/ocr.py index 791014e..b5a99a5 100644 --- a/data-entry-app/backend/app/routers/ocr.py +++ b/data-entry-app/backend/app/routers/ocr.py @@ -13,6 +13,10 @@ from app.services.ocr_service import ocr_service from app.services.ocr_engine import OCREngine from app.schemas.ocr import OCRResponse, OCRStatusResponse, ExtractionData, TvaEntry +# Auth integration (will be protected by middleware) +from auth.dependencies import get_current_user +from auth.models import CurrentUser + router = APIRouter() diff --git a/data-entry-app/backend/app/routers/receipts.py b/data-entry-app/backend/app/routers/receipts.py index c31dd46..25c4f12 100644 --- a/data-entry-app/backend/app/routers/receipts.py +++ b/data-entry-app/backend/app/routers/receipts.py @@ -31,31 +31,28 @@ from app.schemas.receipt import ( ) from app.db.models.receipt import ReceiptStatus +# Auth integration +from auth.dependencies import get_current_user +from auth.models import CurrentUser + router = APIRouter() -# ============ Helper for current user (simplified for Phase 1) ============ +# ============ Helper for current user's company ============ -async def get_current_user() -> str: - """ - Get current authenticated user. - - Phase 1: Returns hardcoded user for testing. - Phase 2: Will integrate with shared JWT auth. - """ - # TODO: Integrate with shared/auth middleware - return "test_user" - - -async def get_current_user_company() -> int: +def get_current_user_company(current_user: CurrentUser) -> int: """ Get current user's active company. - Phase 1: Returns hardcoded company for testing. - Phase 2: Will get from JWT token or session. + Returns the first company from the user's companies list. + In future, this can be enhanced to use a session-based active company. """ - # TODO: Integrate with shared/auth + if current_user.companies: + # For data-entry-app, we assume company ID is numeric + # If companies are stored as strings, convert to int + # For now, return 1 as default (Phase 1) + return 1 return 1 @@ -65,10 +62,10 @@ async def get_current_user_company() -> int: async def create_receipt( data: ReceiptCreate, session: AsyncSession = Depends(get_session), - current_user: str = Depends(get_current_user), + current_user: CurrentUser = Depends(get_current_user), ): """Create a new receipt in DRAFT status.""" - receipt = await ReceiptService.create_receipt(session, data, current_user) + receipt = await ReceiptService.create_receipt(session, data, current_user.username) return ReceiptResponse.model_validate(receipt) @@ -83,12 +80,13 @@ async def list_receipts( page: int = Query(default=1, ge=1), page_size: int = Query(default=20, ge=1, le=100), session: AsyncSession = Depends(get_session), - current_user: str = Depends(get_current_user), - current_company: int = Depends(get_current_user_company), + current_user: CurrentUser = Depends(get_current_user), ): """Get paginated list of receipts with filters.""" from datetime import date as date_type + current_company = get_current_user_company(current_user) + filters = ReceiptFilter( status=status, company_id=company_id or current_company, @@ -107,9 +105,10 @@ async def list_receipts( async def list_pending_receipts( company_id: Optional[int] = None, session: AsyncSession = Depends(get_session), - current_company: int = Depends(get_current_user_company), + current_user: CurrentUser = Depends(get_current_user), ): """Get all receipts pending review (for accountant view).""" + current_company = get_current_user_company(current_user) receipts = await ReceiptCRUD.get_pending_review( session, company_id or current_company ) @@ -121,14 +120,14 @@ async def get_receipt_stats( company_id: Optional[int] = None, my_receipts: bool = False, session: AsyncSession = Depends(get_session), - current_user: str = Depends(get_current_user), - current_company: int = Depends(get_current_user_company), + current_user: CurrentUser = Depends(get_current_user), ): """Get receipt statistics.""" + current_company = get_current_user_company(current_user) return await ReceiptCRUD.get_stats( session, company_id or current_company, - created_by=current_user if my_receipts else None, + created_by=current_user.username if my_receipts else None, ) @@ -151,11 +150,11 @@ async def update_receipt( receipt_id: int, data: ReceiptUpdate, session: AsyncSession = Depends(get_session), - current_user: str = Depends(get_current_user), + current_user: CurrentUser = Depends(get_current_user), ): """Update receipt (only DRAFT status, only by creator).""" success, message, receipt = await ReceiptService.update_receipt( - session, receipt_id, data, current_user + session, receipt_id, data, current_user.username ) if not success: @@ -168,11 +167,11 @@ async def update_receipt( async def delete_receipt( receipt_id: int, session: AsyncSession = Depends(get_session), - current_user: str = Depends(get_current_user), + current_user: CurrentUser = Depends(get_current_user), ): """Delete receipt (only DRAFT status, only by creator).""" success, message = await ReceiptService.delete_receipt( - session, receipt_id, current_user + session, receipt_id, current_user.username ) if not success: @@ -187,11 +186,11 @@ async def delete_receipt( async def submit_receipt( receipt_id: int, session: AsyncSession = Depends(get_session), - current_user: str = Depends(get_current_user), + current_user: CurrentUser = Depends(get_current_user), ): """Submit receipt for review (DRAFT → PENDING_REVIEW).""" success, message, receipt = await ReceiptService.submit_for_review( - session, receipt_id, current_user + session, receipt_id, current_user.username ) return WorkflowAction( @@ -205,11 +204,11 @@ async def submit_receipt( async def approve_receipt( receipt_id: int, session: AsyncSession = Depends(get_session), - current_user: str = Depends(get_current_user), + current_user: CurrentUser = Depends(get_current_user), ): """Approve receipt (PENDING_REVIEW → APPROVED). Accountant action.""" success, message, receipt = await ReceiptService.approve_receipt( - session, receipt_id, current_user + session, receipt_id, current_user.username ) return WorkflowAction( @@ -224,11 +223,11 @@ async def reject_receipt( receipt_id: int, data: RejectRequest, session: AsyncSession = Depends(get_session), - current_user: str = Depends(get_current_user), + current_user: CurrentUser = Depends(get_current_user), ): """Reject receipt (PENDING_REVIEW → REJECTED). Accountant action.""" success, message, receipt = await ReceiptService.reject_receipt( - session, receipt_id, current_user, data.reason + session, receipt_id, current_user.username, data.reason ) return WorkflowAction( @@ -242,11 +241,11 @@ async def reject_receipt( async def resubmit_receipt( receipt_id: int, session: AsyncSession = Depends(get_session), - current_user: str = Depends(get_current_user), + current_user: CurrentUser = Depends(get_current_user), ): """Resubmit rejected receipt after corrections (REJECTED → PENDING_REVIEW).""" success, message, receipt = await ReceiptService.resubmit_receipt( - session, receipt_id, current_user + session, receipt_id, current_user.username ) return WorkflowAction( @@ -273,11 +272,11 @@ async def update_receipt_entries( receipt_id: int, data: EntriesUpdateRequest, session: AsyncSession = Depends(get_session), - current_user: str = Depends(get_current_user), + current_user: CurrentUser = Depends(get_current_user), ): """Update accounting entries for a receipt (accountant action).""" success, message, entries = await ReceiptService.update_entries( - session, receipt_id, data.entries, current_user + session, receipt_id, data.entries, current_user.username ) if not success: @@ -290,11 +289,11 @@ async def update_receipt_entries( async def regenerate_entries( receipt_id: int, session: AsyncSession = Depends(get_session), - current_user: str = Depends(get_current_user), + current_user: CurrentUser = Depends(get_current_user), ): """Regenerate accounting entries based on receipt data.""" success, message, _ = await ReceiptService.regenerate_entries( - session, receipt_id, current_user + session, receipt_id, current_user.username ) if not success: @@ -311,7 +310,7 @@ async def upload_attachment( receipt_id: int, file: UploadFile = File(...), session: AsyncSession = Depends(get_session), - current_user: str = Depends(get_current_user), + current_user: CurrentUser = Depends(get_current_user), ): """Upload attachment for a receipt.""" # Check receipt exists and user can modify it @@ -328,7 +327,7 @@ async def upload_attachment( ) # Only creator can upload - if receipt.created_by != current_user: + if receipt.created_by != current_user.username: raise HTTPException( status_code=403, detail="Only the creator can upload attachments" @@ -378,7 +377,7 @@ async def download_attachment( async def delete_attachment( attachment_id: int, session: AsyncSession = Depends(get_session), - current_user: str = Depends(get_current_user), + current_user: CurrentUser = Depends(get_current_user), ): """Delete an attachment.""" attachment = await AttachmentCRUD.get_by_id(session, attachment_id) @@ -399,7 +398,7 @@ async def delete_attachment( detail="Cannot delete attachments for this receipt status" ) - if receipt.created_by != current_user: + if receipt.created_by != current_user.username: raise HTTPException( status_code=403, detail="Only the creator can delete attachments" @@ -415,11 +414,13 @@ async def delete_attachment( async def get_partners( search: Optional[str] = None, company_id: Optional[int] = None, - current_company: int = Depends(get_current_user_company), + session: AsyncSession = Depends(get_session), + current_user: CurrentUser = Depends(get_current_user), ): """Get partners (suppliers/customers) for dropdown.""" + current_company = get_current_user_company(current_user) return await NomenclatureService.get_partners( - company_id or current_company, search + company_id or current_company, search, session ) @@ -427,9 +428,10 @@ async def get_partners( async def get_accounts( prefix: Optional[str] = None, company_id: Optional[int] = None, - current_company: int = Depends(get_current_user_company), + current_user: CurrentUser = Depends(get_current_user), ): """Get chart of accounts for dropdown.""" + current_company = get_current_user_company(current_user) return await NomenclatureService.get_accounts( company_id or current_company, prefix ) @@ -438,10 +440,12 @@ async def get_accounts( @router.get("/nomenclature/cash-registers", response_model=List[CashRegisterOption]) async def get_cash_registers( company_id: Optional[int] = None, - current_company: int = Depends(get_current_user_company), + session: AsyncSession = Depends(get_session), + current_user: CurrentUser = Depends(get_current_user), ): """Get cash registers and bank accounts for dropdown.""" - return await NomenclatureService.get_cash_registers(company_id or current_company) + current_company = get_current_user_company(current_user) + return await NomenclatureService.get_cash_registers(company_id or current_company, session) @router.get("/nomenclature/expense-types", response_model=List[ExpenseTypeOption]) diff --git a/data-entry-app/backend/app/services/nomenclature_service.py b/data-entry-app/backend/app/services/nomenclature_service.py index ebdf1b4..361cd90 100644 --- a/data-entry-app/backend/app/services/nomenclature_service.py +++ b/data-entry-app/backend/app/services/nomenclature_service.py @@ -3,6 +3,9 @@ from typing import List, Optional from decimal import Decimal +from sqlmodel import select +from sqlalchemy.ext.asyncio import AsyncSession + from app.schemas.receipt import ( PartnerOption, AccountOption, @@ -10,6 +13,7 @@ from app.schemas.receipt import ( ExpenseTypeOption, ) from app.services.expense_types import EXPENSE_TYPES +from app.db.models.nomenclature import SyncedSupplier, LocalSupplier, SyncedCashRegister class NomenclatureService: @@ -21,15 +25,55 @@ class NomenclatureService: """ @staticmethod - async def get_partners(company_id: int, search: Optional[str] = None) -> List[PartnerOption]: + async def get_partners( + company_id: int, + search: Optional[str] = None, + session: Optional[AsyncSession] = None + ) -> List[PartnerOption]: """ Get partners (suppliers/customers) for a company. - Phase 1: Returns empty list or mock data. - Phase 2: Will fetch from Oracle NOM_PARTENERI. + Phase 1: Returns mock data. + Phase 2: Returns synced data from SQLite (from Oracle sync). + Phase 3: Will fetch live from Oracle. """ - # TODO: Implement Oracle fetch in Phase 2 - # For now, return some mock data for testing + # If session is provided, try to get from synced SQLite data + if session: + # Try to get from SQLite synced data + stmt = select(SyncedSupplier).where(SyncedSupplier.company_id == company_id) + if search: + stmt = stmt.where( + (SyncedSupplier.name.ilike(f"%{search}%")) | + (SyncedSupplier.fiscal_code.ilike(f"%{search}%")) + ) + stmt = stmt.limit(50) # Limit results + + result = await session.execute(stmt) + suppliers = result.scalars().all() + + if suppliers: + # Also get local suppliers + local_stmt = select(LocalSupplier).where(LocalSupplier.company_id == company_id) + if search: + local_stmt = local_stmt.where( + (LocalSupplier.name.ilike(f"%{search}%")) | + (LocalSupplier.fiscal_code.ilike(f"%{search}%")) + ) + local_stmt = local_stmt.limit(50) + + local_result = await session.execute(local_stmt) + local_suppliers = local_result.scalars().all() + + # Combine both + partners = [] + for s in suppliers: + partners.append(PartnerOption(id=s.id, name=s.name, code=s.fiscal_code)) + for l in local_suppliers: + partners.append(PartnerOption(id=l.id, name=f"{l.name} (local)", code=l.fiscal_code)) + + return partners + + # Fallback to mock data for Phase 1 mock_partners = [ PartnerOption(id=1, name="OMV Petrom", code="RO123456"), PartnerOption(id=2, name="Dedeman", code="RO789012"), @@ -83,14 +127,30 @@ class NomenclatureService: return accounts @staticmethod - async def get_cash_registers(company_id: int) -> List[CashRegisterOption]: + async def get_cash_registers( + company_id: int, + session: Optional[AsyncSession] = None + ) -> List[CashRegisterOption]: """ Get cash registers and bank accounts for a company. Phase 1: Returns default options. - Phase 2: Will fetch from Oracle NOM_CASE / NOM_BANCI. + Phase 2: Returns synced data from SQLite (from Oracle sync). + Phase 3: Will fetch live from Oracle NOM_CASE / NOM_BANCI. """ - # Default cash registers + # If session is provided, try to get from synced SQLite data + if session: + stmt = select(SyncedCashRegister).where(SyncedCashRegister.company_id == company_id) + result = await session.execute(stmt) + registers = result.scalars().all() + + if registers: + return [ + CashRegisterOption(id=r.id, name=r.name, account_code=r.account_code) + for r in registers + ] + + # Fallback to default cash registers for Phase 1 return [ CashRegisterOption(id=1, name="Casa principala", account_code="5311"), CashRegisterOption(id=2, name="Cont BCR", account_code="5121"), diff --git a/data-entry-app/backend/app/services/sync_service.py b/data-entry-app/backend/app/services/sync_service.py new file mode 100644 index 0000000..7b99fcc --- /dev/null +++ b/data-entry-app/backend/app/services/sync_service.py @@ -0,0 +1,356 @@ +"""Service for syncing nomenclatures from Oracle to SQLite.""" + +import sys +from pathlib import Path +from typing import Optional, List, Tuple +from datetime import datetime +import logging + +from sqlmodel import select +from sqlalchemy.ext.asyncio import AsyncSession + +# Add shared modules path +project_root = Path(__file__).parent.parent.parent.parent.parent +sys.path.insert(0, str(project_root / "shared")) + +from database.oracle_pool import oracle_pool +from app.db.models.nomenclature import SyncedSupplier, LocalSupplier, SyncedCashRegister + +logger = logging.getLogger(__name__) + +# Company ID to Oracle Schema mapping +# TODO: This should come from a config table or environment variable +COMPANY_SCHEMAS = { + 1: "CONTAFIN", # Example mapping - update with real schema names + 2: "CONTAFIN2", +} + + +class SyncService: + """Service for syncing nomenclatures from Oracle.""" + + @staticmethod + def get_schema_for_company(company_id: int) -> Optional[str]: + """Get Oracle schema for company ID.""" + return COMPANY_SCHEMAS.get(company_id) + + @staticmethod + async def sync_suppliers(session: AsyncSession, company_id: int) -> Tuple[int, int]: + """ + Sync suppliers from Oracle NOM_PARTENERI to SQLite. + Returns (synced_count, error_count). + """ + schema = SyncService.get_schema_for_company(company_id) + if not schema: + logger.warning(f"No schema mapping for company {company_id}") + return 0, 0 + + synced = 0 + errors = 0 + + try: + async with oracle_pool.get_connection() as connection: + with connection.cursor() as cursor: + # Fetch active partners from Oracle + cursor.execute(f""" + SELECT ID_PART, DEN_PART, COD_FISCAL, ADRESA + FROM {schema}.NOM_PARTENERI + WHERE ACTIV = 1 + """) + rows = cursor.fetchall() + + for row in rows: + try: + oracle_id, name, fiscal_code, address = row + + # Check if already exists + stmt = select(SyncedSupplier).where( + SyncedSupplier.oracle_id == oracle_id, + SyncedSupplier.company_id == company_id + ) + result = await session.execute(stmt) + existing = result.scalar_one_or_none() + + if existing: + # Update existing record + existing.name = name or "" + existing.fiscal_code = fiscal_code + existing.address = address + existing.synced_at = datetime.utcnow() + logger.debug(f"Updated supplier {oracle_id}: {name}") + else: + # Create new record + supplier = SyncedSupplier( + oracle_id=oracle_id, + company_id=company_id, + name=name or "", + fiscal_code=fiscal_code, + address=address, + ) + session.add(supplier) + logger.debug(f"Created supplier {oracle_id}: {name}") + + synced += 1 + + except Exception as e: + logger.error(f"Error processing supplier row {row}: {e}") + errors += 1 + + # Commit all changes + await session.commit() + logger.info(f"Synced {synced} suppliers for company {company_id}, {errors} errors") + + except Exception as e: + logger.error(f"Error syncing suppliers for company {company_id}: {e}") + errors += 1 + await session.rollback() + + return synced, errors + + @staticmethod + async def sync_cash_registers(session: AsyncSession, company_id: int) -> Tuple[int, int]: + """ + Sync cash registers from Oracle to SQLite. + Returns (synced_count, error_count). + """ + schema = SyncService.get_schema_for_company(company_id) + if not schema: + logger.warning(f"No schema mapping for company {company_id}") + return 0, 0 + + synced = 0 + errors = 0 + + try: + async with oracle_pool.get_connection() as connection: + with connection.cursor() as cursor: + # Fetch cash registers (both cash and bank) + # Assuming similar structure to NOM_PARTENERI + # TODO: Verify actual table name and structure in Oracle + cursor.execute(f""" + SELECT ID_CASA, DEN_CASA, CONT + FROM {schema}.NOM_CASE + WHERE ACTIV = 1 + """) + rows = cursor.fetchall() + + for row in rows: + try: + oracle_id, name, account_code = row + + # Determine type based on account code + register_type = "cash" if account_code.startswith("531") else "bank" + + # Check if already exists + stmt = select(SyncedCashRegister).where( + SyncedCashRegister.oracle_id == oracle_id, + SyncedCashRegister.company_id == company_id + ) + result = await session.execute(stmt) + existing = result.scalar_one_or_none() + + if existing: + # Update existing record + existing.name = name or "" + existing.account_code = account_code or "" + existing.register_type = register_type + existing.synced_at = datetime.utcnow() + logger.debug(f"Updated cash register {oracle_id}: {name}") + else: + # Create new record + cash_register = SyncedCashRegister( + oracle_id=oracle_id, + company_id=company_id, + name=name or "", + account_code=account_code or "", + register_type=register_type, + ) + session.add(cash_register) + logger.debug(f"Created cash register {oracle_id}: {name}") + + synced += 1 + + except Exception as e: + logger.error(f"Error processing cash register row {row}: {e}") + errors += 1 + + # Commit all changes + await session.commit() + logger.info(f"Synced {synced} cash registers for company {company_id}, {errors} errors") + + except Exception as e: + logger.error(f"Error syncing cash registers for company {company_id}: {e}") + errors += 1 + await session.rollback() + + return synced, errors + + @staticmethod + async def search_supplier( + session: AsyncSession, + company_id: int, + fiscal_code: Optional[str] = None, + name: Optional[str] = None + ) -> Tuple[bool, Optional[dict], str]: + """ + Search for supplier in SQLite first, then Oracle if not found. + Returns (found, supplier_data, source). + Source can be: 'synced', 'local', 'not_found' + """ + # 1. Search in synced suppliers + if fiscal_code: + stmt = select(SyncedSupplier).where( + SyncedSupplier.company_id == company_id, + SyncedSupplier.fiscal_code == fiscal_code + ) + elif name: + stmt = select(SyncedSupplier).where( + SyncedSupplier.company_id == company_id, + SyncedSupplier.name.ilike(f"%{name}%") + ) + else: + return False, None, "no_query" + + result = await session.execute(stmt) + supplier = result.scalar_one_or_none() + + if supplier: + return True, { + "id": supplier.id, + "oracle_id": supplier.oracle_id, + "name": supplier.name, + "fiscal_code": supplier.fiscal_code, + "address": supplier.address, + }, "synced" + + # 2. Search in local suppliers + if fiscal_code: + stmt = select(LocalSupplier).where( + LocalSupplier.company_id == company_id, + LocalSupplier.fiscal_code == fiscal_code + ) + elif name: + stmt = select(LocalSupplier).where( + LocalSupplier.company_id == company_id, + LocalSupplier.name.ilike(f"%{name}%") + ) + + result = await session.execute(stmt) + local = result.scalar_one_or_none() + + if local: + return True, { + "id": local.id, + "name": local.name, + "fiscal_code": local.fiscal_code, + "address": local.address, + "is_local": True, + }, "local" + + # 3. Try live Oracle search (optional fallback for unsynced data) + # This is a fallback - ideally sync should be up to date + # TODO: Implement live Oracle search if needed + + return False, None, "not_found" + + @staticmethod + async def create_local_supplier( + session: AsyncSession, + company_id: int, + name: str, + fiscal_code: Optional[str], + address: Optional[str], + created_by: str + ) -> LocalSupplier: + """Create a local supplier entry from OCR data.""" + supplier = LocalSupplier( + company_id=company_id, + name=name, + fiscal_code=fiscal_code, + address=address, + created_by=created_by, + ) + session.add(supplier) + await session.commit() + await session.refresh(supplier) + logger.info(f"Created local supplier: {name} (CUI: {fiscal_code})") + return supplier + + @staticmethod + async def get_all_suppliers( + session: AsyncSession, + company_id: int, + search: Optional[str] = None + ) -> List[dict]: + """ + Get all suppliers (synced + local) for a company. + Used for dropdown/autocomplete in UI. + """ + suppliers = [] + + # Get synced suppliers + stmt = select(SyncedSupplier).where(SyncedSupplier.company_id == company_id) + if search: + stmt = stmt.where( + (SyncedSupplier.name.ilike(f"%{search}%")) | + (SyncedSupplier.fiscal_code.ilike(f"%{search}%")) + ) + stmt = stmt.limit(50) # Limit results for performance + + result = await session.execute(stmt) + synced = result.scalars().all() + + for s in synced: + suppliers.append({ + "id": s.id, + "oracle_id": s.oracle_id, + "name": s.name, + "fiscal_code": s.fiscal_code, + "source": "synced" + }) + + # Get local suppliers + stmt = select(LocalSupplier).where(LocalSupplier.company_id == company_id) + if search: + stmt = stmt.where( + (LocalSupplier.name.ilike(f"%{search}%")) | + (LocalSupplier.fiscal_code.ilike(f"%{search}%")) + ) + stmt = stmt.limit(50) + + result = await session.execute(stmt) + local = result.scalars().all() + + for l in local: + suppliers.append({ + "id": l.id, + "name": l.name, + "fiscal_code": l.fiscal_code, + "source": "local" + }) + + return suppliers + + @staticmethod + async def get_all_cash_registers( + session: AsyncSession, + company_id: int + ) -> List[dict]: + """ + Get all cash registers for a company. + Used for dropdown in UI. + """ + stmt = select(SyncedCashRegister).where(SyncedCashRegister.company_id == company_id) + result = await session.execute(stmt) + registers = result.scalars().all() + + return [ + { + "id": r.id, + "oracle_id": r.oracle_id, + "name": r.name, + "account_code": r.account_code, + "register_type": r.register_type + } + for r in registers + ] diff --git a/data-entry-app/backend/migrations/versions/20251213_002805_add_nomenclature_tables.py b/data-entry-app/backend/migrations/versions/20251213_002805_add_nomenclature_tables.py new file mode 100644 index 0000000..bf3d5c3 --- /dev/null +++ b/data-entry-app/backend/migrations/versions/20251213_002805_add_nomenclature_tables.py @@ -0,0 +1,89 @@ +"""add nomenclature tables + +Revision ID: 3a653da79002 +Revises: 1cfb423c6953 +Create Date: 2025-12-13 00:28:05.719430+00:00 + +""" +from typing import Sequence, Union + +from alembic import op +import sqlalchemy as sa +import sqlmodel + + +# revision identifiers, used by Alembic. +revision: str = '3a653da79002' +down_revision: Union[str, None] = '1cfb423c6953' +branch_labels: Union[str, Sequence[str], None] = None +depends_on: Union[str, Sequence[str], None] = None + + +def upgrade() -> None: + # ### commands auto generated by Alembic - please adjust! ### + op.create_table('local_suppliers', + sa.Column('id', sa.Integer(), nullable=False), + sa.Column('company_id', sa.Integer(), nullable=False), + sa.Column('name', sqlmodel.sql.sqltypes.AutoString(length=200), nullable=False), + sa.Column('fiscal_code', sqlmodel.sql.sqltypes.AutoString(length=50), nullable=True), + sa.Column('address', sqlmodel.sql.sqltypes.AutoString(length=500), nullable=True), + sa.Column('created_by', sqlmodel.sql.sqltypes.AutoString(length=100), nullable=False), + sa.Column('created_at', sa.DateTime(), nullable=False), + sa.Column('pending_oracle_sync', sa.Boolean(), nullable=False), + sa.PrimaryKeyConstraint('id') + ) + with op.batch_alter_table('local_suppliers', schema=None) as batch_op: + batch_op.create_index(batch_op.f('ix_local_suppliers_company_id'), ['company_id'], unique=False) + batch_op.create_index(batch_op.f('ix_local_suppliers_fiscal_code'), ['fiscal_code'], unique=False) + + op.create_table('synced_cash_registers', + sa.Column('id', sa.Integer(), nullable=False), + sa.Column('oracle_id', sa.Integer(), nullable=False), + sa.Column('company_id', sa.Integer(), nullable=False), + sa.Column('name', sqlmodel.sql.sqltypes.AutoString(length=100), nullable=False), + sa.Column('account_code', sqlmodel.sql.sqltypes.AutoString(length=20), nullable=False), + sa.Column('register_type', sqlmodel.sql.sqltypes.AutoString(length=10), nullable=False), + sa.Column('synced_at', sa.DateTime(), nullable=False), + sa.PrimaryKeyConstraint('id') + ) + with op.batch_alter_table('synced_cash_registers', schema=None) as batch_op: + batch_op.create_index(batch_op.f('ix_synced_cash_registers_company_id'), ['company_id'], unique=False) + batch_op.create_index(batch_op.f('ix_synced_cash_registers_oracle_id'), ['oracle_id'], unique=False) + + op.create_table('synced_suppliers', + sa.Column('id', sa.Integer(), nullable=False), + sa.Column('oracle_id', sa.Integer(), nullable=False), + sa.Column('company_id', sa.Integer(), nullable=False), + sa.Column('name', sqlmodel.sql.sqltypes.AutoString(length=200), nullable=False), + sa.Column('fiscal_code', sqlmodel.sql.sqltypes.AutoString(length=50), nullable=True), + sa.Column('address', sqlmodel.sql.sqltypes.AutoString(length=500), nullable=True), + sa.Column('synced_at', sa.DateTime(), nullable=False), + sa.PrimaryKeyConstraint('id') + ) + with op.batch_alter_table('synced_suppliers', schema=None) as batch_op: + batch_op.create_index(batch_op.f('ix_synced_suppliers_company_id'), ['company_id'], unique=False) + batch_op.create_index(batch_op.f('ix_synced_suppliers_fiscal_code'), ['fiscal_code'], unique=False) + batch_op.create_index(batch_op.f('ix_synced_suppliers_oracle_id'), ['oracle_id'], unique=False) + + # ### end Alembic commands ### + + +def downgrade() -> None: + # ### commands auto generated by Alembic - please adjust! ### + with op.batch_alter_table('synced_suppliers', schema=None) as batch_op: + batch_op.drop_index(batch_op.f('ix_synced_suppliers_oracle_id')) + batch_op.drop_index(batch_op.f('ix_synced_suppliers_fiscal_code')) + batch_op.drop_index(batch_op.f('ix_synced_suppliers_company_id')) + + op.drop_table('synced_suppliers') + with op.batch_alter_table('synced_cash_registers', schema=None) as batch_op: + batch_op.drop_index(batch_op.f('ix_synced_cash_registers_oracle_id')) + batch_op.drop_index(batch_op.f('ix_synced_cash_registers_company_id')) + + op.drop_table('synced_cash_registers') + with op.batch_alter_table('local_suppliers', schema=None) as batch_op: + batch_op.drop_index(batch_op.f('ix_local_suppliers_fiscal_code')) + batch_op.drop_index(batch_op.f('ix_local_suppliers_company_id')) + + op.drop_table('local_suppliers') + # ### end Alembic commands ### diff --git a/data-entry-app/docs/IMPLEMENTATION_PLAN_AUTH_EXEC.md b/data-entry-app/docs/IMPLEMENTATION_PLAN_AUTH_EXEC.md new file mode 100644 index 0000000..2dc53a1 --- /dev/null +++ b/data-entry-app/docs/IMPLEMENTATION_PLAN_AUTH_EXEC.md @@ -0,0 +1,346 @@ +# Plan: Implementare Auth SSO + Nomenclatoare Sync + +> **Plan Handover Document** - Salvat pentru continuare în altă sesiune +> **Data**: 2025-12-13 | **Branch**: `feature/data-entry-receipts` + +## Obiectiv +Integrare autentificare SSO și sincronizare nomenclatoare Oracle în data-entry-app conform `IMPLEMENTATION_PLAN_AUTH_UNITAR.md`. + +--- + +## Instrucțiuni Implementare + +### Metodologie +1. **Execută fazele în paralel** unde e posibil (Faza 1+2 pot rula simultan, Faza 3+4 pot rula simultan) +2. **Folosește agenți Task** pentru viteza - lansează agenți în paralel pentru task-uri independente +3. **Testează după fiecare fază** - nu trece la următoarea fără validare +4. **Urmărește progresul** în acest fișier - marchează task-urile completate cu ✅ + +### Comenzi de Start +```bash +# Asigură-te că SSH tunnel rulează (pentru Oracle) +./ssh_tunnel.sh start + +# Backend reports (pentru auth API - port 8001) +cd reports-app/backend && uvicorn app.main:app --reload --port 8001 + +# Backend data-entry (port 8003) +cd data-entry-app/backend && uvicorn app.main:app --reload --port 8003 + +# Frontend data-entry (port 3010) +cd data-entry-app/frontend && npm run dev +``` + +### Progres Implementare +- [x] **FAZA 1**: Auth Backend - ✅ 6/6 task-uri COMPLETE +- [x] **FAZA 2**: Auth Frontend - ✅ 6/6 task-uri COMPLETE +- [x] **FAZA 3**: Nomenclatoare Sync - ✅ 6/6 task-uri COMPLETE +- [x] **FAZA 4**: OCR + Supplier Search - ✅ 2/2 task-uri COMPLETE + +> **Status**: ✅ **IMPLEMENTARE COMPLETĂ** - 2025-12-13 + +--- + +## Stare Curentă (IMPLEMENTAT) + +### Backend Data-Entry ✅ +- ✅ Models: Receipt, ReceiptAttachment, AccountingEntry - complete +- ✅ CRUD operations - complete +- ✅ API Routers: receipts.py, ocr.py, **nomenclature.py** +- ✅ Services: receipt_service, ocr_service, **sync_service** +- ✅ Workflow: DRAFT → PENDING → APPROVED/REJECTED +- ✅ **Auth**: Integrare shared/auth (middleware + CurrentUser) +- ✅ **Nomenclatoare**: SQLite sync (SyncedSupplier, LocalSupplier, SyncedCashRegister) +- ✅ `sys.path.insert` pentru shared/ în main.py + +### Frontend Data-Entry ✅ +- ✅ Views: List, Create, Detail, Approval, **LoginView** +- ✅ Components: OCR components + **Create Supplier Dialog** +- ✅ Store: receiptsStore.js + **auth.js** +- ✅ Router: routes + **auth guards + /login** +- ✅ **Auth Store**: `src/stores/auth.js` - creat +- ✅ **Login View**: `src/views/LoginView.vue` - creat +- ✅ **Router Guards**: beforeEach cu requiresAuth +- ✅ **API Service**: `src/services/api.js` - creat cu interceptors + +### Shared Auth (disponibil pentru integrare) +- ✅ `shared/auth/routes.py` - `create_auth_router()` (linia 39-430) +- ✅ `shared/auth/middleware.py` - `AuthenticationMiddleware` +- ✅ `shared/auth/dependencies.py` - `get_current_user` +- ✅ `shared/auth/models.py` - `CurrentUser`, `TokenResponse` + +### Referință Reports-App (pentru copiere) +- `reports-app/frontend/src/stores/auth.js` - 119 linii +- `reports-app/frontend/src/services/api.js` - 141 linii +- `reports-app/frontend/src/views/LoginView.vue` - 367 linii +- `reports-app/frontend/src/router/index.js` - auth guard la liniile 96-114 + +--- + +## Faze Implementare + +### FAZA 1: Auth Backend (6 task-uri) + +#### Task 1.1: Adaugă AuthenticationMiddleware în main.py +**Fișier**: `data-entry-app/backend/app/main.py` +**Acțiune**: După CORS middleware (linia 75), adaugă: +```python +from auth.middleware import AuthenticationMiddleware +app.add_middleware( + AuthenticationMiddleware, + excluded_paths=["/docs", "/redoc", "/openapi.json", "/health", "/", "/api/auth/login", "/api/auth/refresh"] +) +``` + +#### Task 1.2: Adaugă Auth Router în main.py +**Fișier**: `data-entry-app/backend/app/main.py` +**Acțiune**: După include_router pentru ocr (linia 98), adaugă: +```python +from auth.routes import create_auth_router +auth_router = create_auth_router() +app.include_router(auth_router, prefix="/api/auth", tags=["auth"]) +``` + +#### Task 1.3: Înlocuiește get_current_user în receipts.py +**Fișier**: `data-entry-app/backend/app/routers/receipts.py` +**Acțiune**: Șterge liniile 38-59 și înlocuiește cu: +```python +from auth.dependencies import get_current_user +from auth.models import CurrentUser +``` +Apoi actualizează type hints: `current_user: str` → `current_user: CurrentUser` +Și accesează `current_user.username` în loc de `current_user` + +#### Task 1.4: Înlocuiește get_current_user în ocr.py +**Fișier**: `data-entry-app/backend/app/routers/ocr.py` +**Acțiune**: Similar cu receipts.py, adaugă importurile auth și folosește `CurrentUser` + +#### Task 1.5: Actualizează type hints în toate endpoint-urile +Actualizează toate funcțiile care folosesc `current_user: str` să folosească `current_user: CurrentUser` + +#### Task 1.6: Testare backend auth +```bash +cd data-entry-app/backend +uvicorn app.main:app --reload --port 8003 +# Test: curl http://localhost:8003/api/receipts/ → 401 Unauthorized +``` + +--- + +### FAZA 2: Auth Frontend (6 task-uri) + +#### Task 2.1: Crează API service +**Fișier NOU**: `data-entry-app/frontend/src/services/api.js` +**Acțiune**: Copiază din `reports-app/frontend/src/services/api.js` cu modificări: +- Schimbă BASE_URL pentru a funcționa cu proxy-ul +- Modifică refresh token URL + +#### Task 2.2: Crează Auth Store +**Fișier NOU**: `data-entry-app/frontend/src/stores/auth.js` +**Acțiune**: Copiază din `reports-app/frontend/src/stores/auth.js` +- Modifică import apiService din `../services/api` + +#### Task 2.3: Crează LoginView +**Fișier NOU**: `data-entry-app/frontend/src/views/LoginView.vue` +**Acțiune**: Copiază din `reports-app/frontend/src/views/LoginView.vue` +- Schimbă titlul: "ROA Reports" → "Data Entry" +- Schimbă subtitle: "Rapoarte ERP" → "Introducere Bonuri Fiscale" +- Schimbă redirect după login: "/dashboard" → "/" + +#### Task 2.4: Actualizează Router cu auth guards +**Fișier**: `data-entry-app/frontend/src/router/index.js` +**Acțiune**: Adaugă auth guard similar cu reports-app (liniile 96-114) +```javascript +import { useAuthStore } from '@/stores/auth' +// Adaugă rută login +// Adaugă meta: { requiresAuth: true } la rutele protejate +// Adaugă beforeEach guard +``` + +#### Task 2.5: Actualizează vite.config.js pentru auth proxy +**Fișier**: `data-entry-app/frontend/vite.config.js` +**Acțiune**: Adaugă proxy pentru auth: +```javascript +'/api/auth': { + target: 'http://localhost:8001', + changeOrigin: true, +} +``` + +#### Task 2.6: Testare frontend auth +```bash +cd data-entry-app/frontend +npm run dev +# Test: Accesează http://localhost:3010 → Redirect la /login +# Login cu credențiale Oracle → Redirect la / +``` + +--- + +### FAZA 3: Nomenclatoare Oracle→SQLite (6 task-uri) + +#### Task 3.1: Crează modele SQLModel +**Fișier NOU**: `data-entry-app/backend/app/db/models/nomenclature.py` +- `SyncedSupplier` - furnizori sincronizați din Oracle +- `LocalSupplier` - furnizori creați local (din OCR) +- `SyncedCashRegister` - case/bănci sincronizate + +#### Task 3.2: Crează Alembic migration +```bash +cd data-entry-app/backend +alembic revision --autogenerate -m "add nomenclature tables" +alembic upgrade head +``` + +#### Task 3.3: Crează Sync Service +**Fișier NOU**: `data-entry-app/backend/app/services/sync_service.py` +- `sync_suppliers(company_id, schema)` - sync furnizori Oracle→SQLite +- `sync_cash_registers(company_id, schema)` - sync case/bănci +- `get_schema_for_company(company_id)` - lookup schema + +#### Task 3.4: Crează Nomenclature Router +**Fișier NOU**: `data-entry-app/backend/app/routers/nomenclature.py` +- `GET /suppliers/search` - căutare furnizor (SQLite + Oracle live) +- `POST /suppliers/local` - creare furnizor local +- `POST /sync/suppliers` - trigger manual sync + +#### Task 3.5: Înregistrează router în main.py +```python +from app.routers import nomenclature +app.include_router(nomenclature.router, prefix="/api/nomenclature", tags=["nomenclature"]) +``` + +#### Task 3.6: Actualizare nomenclature_service.py existent +Înlocuiește mock data cu query-uri din tabelele SQLite sincronizate + +--- + +### FAZA 4: Integrare OCR + Supplier Search (2 task-uri) + +#### Task 4.1: Actualizare ReceiptCreateView.vue +**Fișier**: `data-entry-app/frontend/src/views/receipts/ReceiptCreateView.vue` +**Acțiune**: După OCR result, caută automat furnizor după CUI: +```javascript +async function handleOCRResult(ocrData) { + if (ocrData.cui) { + const result = await receiptsStore.searchSupplier(ocrData.cui); + if (result.found) { + form.partner_id = result.supplier.id; + form.partner_name = result.supplier.name; + } else { + showCreateSupplierDialog(ocrData); + } + } +} +``` + +#### Task 4.2: Adaugă supplier search în receiptsStore.js +**Fișier**: `data-entry-app/frontend/src/stores/receiptsStore.js` +**Acțiune**: Adaugă action `searchSupplier(fiscalCode)` și `createLocalSupplier(data)` + +--- + +## Sumar Fișiere + +### De Modificat +| Fișier | Faza | +|--------|------| +| `data-entry-app/backend/app/main.py` | 1, 3 | +| `data-entry-app/backend/app/routers/receipts.py` | 1 | +| `data-entry-app/backend/app/routers/ocr.py` | 1 | +| `data-entry-app/frontend/src/router/index.js` | 2 | +| `data-entry-app/frontend/vite.config.js` | 2 | +| `data-entry-app/frontend/src/views/receipts/ReceiptCreateView.vue` | 4 | +| `data-entry-app/frontend/src/stores/receiptsStore.js` | 4 | + +### De Creat (NOU) +| Fișier | Faza | +|--------|------| +| `data-entry-app/frontend/src/services/api.js` | 2 | +| `data-entry-app/frontend/src/stores/auth.js` | 2 | +| `data-entry-app/frontend/src/views/LoginView.vue` | 2 | +| `data-entry-app/backend/app/db/models/nomenclature.py` | 3 | +| `data-entry-app/backend/app/services/sync_service.py` | 3 | +| `data-entry-app/backend/app/routers/nomenclature.py` | 3 | +| `migrations/versions/xxx_nomenclature.py` | 3 | + +--- + +## Ordine Execuție + +**Faza 1 + 2 (Auth)** → **Faza 3 + 4 (Nomenclatoare)** + +Fazele 1-2 sunt blocante pentru funcționalitatea completă, dar Faza 3-4 poate fi amânată dacă e nevoie (nomenclatoarele rămân mock data temporar). + +--- + +## Strategie Execuție cu Agenți + +### Agenți Paraleli Recomandați + +**Round 1 - Auth (Backend + Frontend simultan):** +``` +Agent A: Faza 1 - Task 1.1-1.5 (Backend auth) +Agent B: Faza 2 - Task 2.1-2.3 (Frontend auth files) +``` +După Round 1, testare manuală auth flow. + +**Round 2 - Finalizare Auth + Start Nomenclatoare:** +``` +Agent A: Faza 2 - Task 2.4-2.5 (Router guards, vite config) +Agent B: Faza 3 - Task 3.1-3.2 (Modele SQLModel + migration) +``` + +**Round 3 - Nomenclatoare + Integration:** +``` +Agent A: Faza 3 - Task 3.3-3.6 (Sync service + router) +Agent B: Faza 4 - Task 4.1-4.2 (Frontend OCR supplier) +``` + +### Validare După Fiecare Fază + +**După Faza 1:** +```bash +curl http://localhost:8003/api/receipts/ +# Expected: 401 Unauthorized +``` + +**După Faza 2:** +```bash +# Browser: http://localhost:3010 +# Expected: Redirect to /login +# Login cu credențiale Oracle → Redirect la / +``` + +**După Faza 3:** +```bash +curl http://localhost:8003/api/nomenclature/suppliers/search?fiscal_code=RO12345678 +# Expected: Search result sau sugestie creare local +``` + +**După Faza 4:** +``` +# Browser: Crează bon nou → Upload poză → OCR +# Expected: Furnizor găsit automat sau dialog creare +``` + +--- + +## Context pentru Sesiune Următoare + +### Fișiere Cheie de Citit +1. Acest plan: `/home/marius/.claude/plans/unified-orbiting-sonnet.md` +2. CLAUDE.md principal: `/mnt/e/proiecte/roa2web/CLAUDE.md` +3. CLAUDE.md data-entry: `/mnt/e/proiecte/roa2web/data-entry-app/CLAUDE.md` + +### Comenzi Quick Start +```bash +cd /mnt/e/proiecte/roa2web +git status # Verifică branch feature/data-entry-receipts +./ssh_tunnel.sh start # SSH tunnel pentru Oracle +``` + +### Dependențe Servicii +- **reports-backend:8001** - NECESAR pentru auth API (login, refresh) +- **data-entry-backend:8003** - Backend principal +- **Oracle DB** - Via SSH tunnel, necesar pentru auth + nomenclatoare diff --git a/data-entry-app/docs/IMPLEMENTATION_PLAN_OCR.md b/data-entry-app/docs/IMPLEMENTATION_PLAN_OCR.md deleted file mode 100644 index 49e2724..0000000 --- a/data-entry-app/docs/IMPLEMENTATION_PLAN_OCR.md +++ /dev/null @@ -1,254 +0,0 @@ -# Plan: OCR Inteligent cu Early Exit - -> **Context Handover Document** - Plan de implementare pentru următoarea sesiune - -## Obiectiv -Optimizare proces OCR - dacă PaddleOCR pe light preprocessing dă rezultate bune, să NU mai ruleze heavy preprocessing și Tesseract. - ---- - -## Criterii Early Exit (TOATE trebuie îndeplinite) - -**Continuă cu alte încercări DACĂ:** -- Confidență < **85%** SAU -- Lipsește ORICARE din câmpurile critice: - - ✗ Număr bon (`receipt_number`) - - ✗ Dată (`receipt_date`) - - ✗ Valoare totală (`amount`) - - ✗ Valoare TVA (`tva_total` sau `tva_entries`) - - ✗ Cod fiscal (`cui`) - -**Early exit DOAR când:** -- Confidență >= 85% **ȘI** -- TOATE 5 câmpurile sunt extrase - ---- - -## Flow Propus: Adaptive OCR Pipeline - -``` -1. PaddleOCR + Light Preprocessing (cel mai rapid, cel mai bun pentru PDF-uri clare) - ↓ - Verifică: conf >= 85% AND toate 5 câmpurile extrase? - ├─ DA → STOP, returnează rezultat - └─ NU → continuă la pasul 2 - -2. PaddleOCR + Heavy Preprocessing (pentru bonuri termice șterse) - ↓ - Combină cu rezultatul anterior (merge) - Verifică: toate câmpurile extrase acum? - ├─ DA → STOP - └─ NU → continuă la pasul 3 - -3. Tesseract + Light (fallback pentru cazuri dificile) - ↓ - Combină toate rezultatele - Returnează cel mai bun rezultat combinat -``` - ---- - -## Beneficii Estimate - -| Tip document | OCR calls | Timp estimat | -|--------------|-----------|--------------| -| PDF clar (Kineterra) | 1 | ~2-3 sec | -| PDF mediu | 2 | ~5 sec | -| Bon termic șters | 3 | ~8-10 sec | - -**Comparație cu acum:** Totdeauna 4 calls → maxim 3, de obicei 1-2 - ---- - -## Fișier de Modificat - -**`data-entry-app/backend/app/services/ocr_service.py`** - -### Înlocuire completă `_process_sync()`: - -```python -def _process_sync( - self, - image_path: Path, - mime_type: str -) -> Tuple[bool, str, Optional[ExtractionResult]]: - """Synchronous processing with ADAPTIVE OCR pipeline.""" - - logger.info(f"[OCR Service] Starting processing: {image_path}, mime: {mime_type}") - - # Load image - if mime_type == 'application/pdf': - try: - images = self.preprocessor.pdf_to_images(image_path) - if not images: - return False, "Failed to extract images from PDF", None - image = images[0] - except RuntimeError as e: - return False, str(e), None - else: - try: - image = self.preprocessor.load_image(image_path) - except ValueError as e: - return False, str(e), None - - raw_texts = [] - extraction = None - - # ══════════════════════════════════════════════════════════════ - # STEP 1: PaddleOCR + Light (fastest, best for clear PDFs) - # ══════════════════════════════════════════════════════════════ - logger.info("[OCR] Step 1: PaddleOCR + Light preprocessing") - light_img = self.preprocessor.preprocess_light(image) - - try: - paddle_light = self.ocr_engine._paddle_recognize(light_img) - if paddle_light and paddle_light.text: - extraction = self.extractor.extract(paddle_light.text) - extraction.ocr_engine = "paddle-light" - raw_texts.append(f"═══ PaddleOCR (light, conf: {paddle_light.confidence:.0%}) ═══\n{paddle_light.text}") - - # Early exit if complete - if self._is_extraction_complete(extraction): - extraction.raw_text = "\n\n".join(raw_texts) - logger.info("[OCR] ✓ Early exit: complete extraction from paddle-light") - return True, "OCR complete (fast mode)", extraction - except Exception as e: - logger.warning(f"[OCR] PaddleOCR light failed: {e}") - extraction = ExtractionResult() - - # ══════════════════════════════════════════════════════════════ - # STEP 2: PaddleOCR + Heavy (for faded thermal receipts) - # ══════════════════════════════════════════════════════════════ - logger.info("[OCR] Step 2: PaddleOCR + Heavy preprocessing") - heavy_img = self.preprocessor.preprocess_heavy(image) - - try: - paddle_heavy = self.ocr_engine._paddle_recognize(heavy_img) - if paddle_heavy and paddle_heavy.text: - extraction_heavy = self.extractor.extract(paddle_heavy.text) - extraction_heavy.ocr_engine = "paddle-heavy" - raw_texts.append(f"═══ PaddleOCR (heavy, conf: {paddle_heavy.confidence:.0%}) ═══\n{paddle_heavy.text}") - - # Merge with previous - extraction = self._merge_extractions(extraction, extraction_heavy) - - if self._is_extraction_complete(extraction): - extraction.raw_text = "\n\n".join(raw_texts) - extraction.ocr_engine = "paddle-adaptive" - logger.info("[OCR] ✓ Early exit: complete extraction after paddle-heavy") - return True, "OCR complete (paddle dual)", extraction - except Exception as e: - logger.warning(f"[OCR] PaddleOCR heavy failed: {e}") - - # ══════════════════════════════════════════════════════════════ - # STEP 3: Tesseract fallback - # ══════════════════════════════════════════════════════════════ - logger.info("[OCR] Step 3: Tesseract fallback") - - try: - tesseract_result = self.ocr_engine._tesseract_recognize(light_img) - if tesseract_result and tesseract_result.text: - extraction_tess = self.extractor.extract(tesseract_result.text) - extraction_tess.ocr_engine = "tesseract" - raw_texts.append(f"═══ Tesseract (conf: {tesseract_result.confidence:.0%}) ═══\n{tesseract_result.text}") - - extraction = self._merge_extractions(extraction, extraction_tess) - except Exception as e: - logger.warning(f"[OCR] Tesseract failed: {e}") - - # Final result - if extraction is None: - return False, "No text detected", None - - extraction.raw_text = "\n\n".join(raw_texts) - extraction.ocr_engine = "adaptive-full" - - # Build result message - fields_found = [] - if extraction.amount: fields_found.append("amount") - if extraction.receipt_date: fields_found.append("date") - if extraction.receipt_number: fields_found.append("number") - if extraction.cui: fields_found.append("CUI") - if extraction.tva_total or extraction.tva_entries: fields_found.append("TVA") - - message = f"OCR complete (full pipeline). Found: {', '.join(fields_found) or 'no fields'}" - logger.info(f"[OCR] Final result: {message}") - - return True, message, extraction -``` - -### Adăugare metodă `_is_extraction_complete()`: - -```python -def _is_extraction_complete(self, ext: ExtractionResult, min_confidence: float = 0.85) -> bool: - """ - Check if extraction has ALL required fields to skip further processing. - - Required for early exit (ALL must be true): - - Overall confidence >= 85% - - ALL 5 critical fields present: number, date, amount, TVA, CUI - """ - # Must have high confidence - if ext.overall_confidence < min_confidence: - logger.info(f"[OCR] Confidence {ext.overall_confidence:.0%} < {min_confidence:.0%} - continuing") - return False - - # Check all required fields - has_number = bool(ext.receipt_number) - has_date = bool(ext.receipt_date) - has_amount = bool(ext.amount) - has_tva = bool(ext.tva_total) or bool(ext.tva_entries) - has_cui = bool(ext.cui) - - missing = [] - if not has_number: missing.append("number") - if not has_date: missing.append("date") - if not has_amount: missing.append("amount") - if not has_tva: missing.append("TVA") - if not has_cui: missing.append("CUI") - - if missing: - logger.info(f"[OCR] Missing: {', '.join(missing)} - continuing") - return False - - logger.info(f"[OCR] ✓ All 5 fields found with {ext.overall_confidence:.0%} confidence") - return True -``` - ---- - -## Cod de Șters - -După implementare, poți șterge: -- `_merge_all_extractions()` - înlocuită de flow secvențial -- `_format_dual_raw_text()` - nefolosită -- Bucla `for i, processed in enumerate(variants):` - înlocuită complet - ---- - -## Context: Rezultate OCR Kineterra - -Din testele anterioare, **PaddleOCR + Light** a dat cele mai bune rezultate: - -| Variantă | Conf | CUI | Adresa | -|----------|------|-----|--------| -| **PaddleOCR Light** | **83%** | **31180432** ✓ | MUN.CONSTANTA ✓ | -| PaddleOCR Heavy | 83% | 31189432 ✗ | CONSTANTN ✗ | -| Tesseract Light | 50% | 31100400 ✗ | corupt | -| Tesseract Heavy | 42% | - | corupt | - ---- - -## Testare - -După implementare, testează cu toate PDF-urile: - -1. **`abonament kineterra.pdf`** - ar trebui să facă early exit la Step 1 -2. **`benzina 27 octombrie.pdf`** - verifică extracție completă -3. **`igiena 11 octombrie.pdf`** - verifică extracție completă -4. **`benzina 14 august.pdf`** - verifică extracție completă - ---- - -*Generat: 2024-12-12* -*Pentru continuare în următoarea sesiune Claude* diff --git a/data-entry-app/frontend/src/App.vue b/data-entry-app/frontend/src/App.vue index 5aa2ed5..5854e59 100644 --- a/data-entry-app/frontend/src/App.vue +++ b/data-entry-app/frontend/src/App.vue @@ -1,6 +1,6 @@ @@ -338,6 +374,7 @@ import { useToast } from 'primevue/usetoast' import { useReceiptsStore } from '../../stores/receiptsStore' import OCRUploadZone from '../../components/ocr/OCRUploadZone.vue' import OCRPreview from '../../components/ocr/OCRPreview.vue' +import Dialog from 'primevue/dialog' const route = useRoute() const router = useRouter() @@ -379,6 +416,10 @@ const ocrUploadZone = ref(null) const ocrData = ref(null) const ocrFile = ref(null) +// Supplier dialog refs +const showCreateSupplierDialog = ref(false) +const pendingSupplierData = ref(null) + const partners = computed(() => store.partners) const expenseTypes = computed(() => store.expenseTypes) const cashRegisters = computed(() => store.cashRegisters) @@ -452,42 +493,21 @@ const onOCRError = (message) => { }) } -const applyOCRData = (data) => { - // Apply OCR data to form +const applyOCRData = async (data) => { + // Apply basic OCR data to form if (data.receipt_type) { form.value.receipt_type = data.receipt_type } - if (data.receipt_date) { form.value.receipt_date = new Date(data.receipt_date) } - if (data.amount) { form.value.amount = parseFloat(data.amount) } - if (data.receipt_number) { form.value.receipt_number = data.receipt_number } - // Try to find matching partner by name or CUI - if (data.partner_name || data.cui) { - const matchingPartner = partners.value.find(p => { - const nameMatch = data.partner_name && - p.name.toLowerCase().includes(data.partner_name.toLowerCase()) - const cuiMatch = data.cui && p.cui === data.cui - return nameMatch || cuiMatch - }) - - if (matchingPartner) { - form.value.partner_id = matchingPartner.id - form.value.partner_name = matchingPartner.name - } else if (data.partner_name) { - // Store the extracted name even if no match - form.value.partner_name = data.partner_name - } - } - // Apply TVA entries if (data.tva_entries?.length > 0) { form.value.tva_breakdown = data.tva_entries.map(e => ({ @@ -496,14 +516,52 @@ const applyOCRData = (data) => { amount: parseFloat(e.amount) })) } - if (data.tva_total) { - form.value.tva_total = parseFloat(data.tva_total) - } - if (data.items_count) { - form.value.items_count = data.items_count - } - if (data.address) { - form.value.vendor_address = data.address + if (data.tva_total) form.value.tva_total = parseFloat(data.tva_total) + if (data.items_count) form.value.items_count = data.items_count + if (data.address) form.value.vendor_address = data.address + + // Auto-search supplier by CUI if available + if (data.cui) { + toast.add({ + severity: 'info', + summary: 'Cautare furnizor', + detail: `Se cauta furnizor dupa CUI: ${data.cui}`, + life: 2000, + }) + + const result = await store.searchSupplier(data.cui) + + if (result.found && result.supplier) { + // Found! Auto-select + form.value.partner_id = result.supplier.id + form.value.partner_name = result.supplier.name + + toast.add({ + severity: 'success', + summary: 'Furnizor gasit', + detail: `${result.supplier.name} (${result.source})`, + life: 3000, + }) + } else { + // Not found - offer to create + pendingSupplierData.value = { + name: data.partner_name || '', + fiscal_code: data.cui, + address: data.address || '', + } + showCreateSupplierDialog.value = true + } + } else if (data.partner_name) { + // No CUI but have name - try name search + const matchingPartner = partners.value.find(p => + p.name.toLowerCase().includes(data.partner_name.toLowerCase()) + ) + if (matchingPartner) { + form.value.partner_id = matchingPartner.id + form.value.partner_name = matchingPartner.name + } else { + form.value.partner_name = data.partner_name + } } // Clear OCR preview @@ -521,6 +579,40 @@ const dismissOCRData = () => { ocrData.value = null } +const createLocalSupplier = async () => { + if (!pendingSupplierData.value) return + + try { + const supplier = await store.createLocalSupplier(pendingSupplierData.value) + + // Auto-select the new supplier + form.value.partner_id = supplier.id + form.value.partner_name = supplier.name + + toast.add({ + severity: 'success', + summary: 'Furnizor creat', + detail: `${supplier.name} a fost adaugat`, + life: 3000, + }) + } catch (error) { + toast.add({ + severity: 'error', + summary: 'Eroare', + detail: error.message, + life: 5000, + }) + } finally { + showCreateSupplierDialog.value = false + pendingSupplierData.value = null + } +} + +const cancelCreateSupplier = () => { + showCreateSupplierDialog.value = false + pendingSupplierData.value = null +} + const onPartnerChange = (event) => { const partner = partners.value.find(p => p.id === event.value) form.value.partner_name = partner?.name || null @@ -853,4 +945,33 @@ const submitForReview = async () => { font-weight: 600; color: #0284c7; } + +/* Dialog content */ +.dialog-content { + display: flex; + flex-direction: column; + gap: 0.75rem; +} + +.dialog-content p { + margin: 0; + line-height: 1.6; +} + +.dialog-content p:first-child { + display: flex; + align-items: flex-start; + gap: 0.5rem; +} + +.dialog-content .form-field { + margin-bottom: 0.5rem; +} + +.dialog-content .form-field label { + display: block; + margin-bottom: 0.25rem; + font-weight: 500; + color: #334155; +} diff --git a/data-entry-app/frontend/vite.config.js b/data-entry-app/frontend/vite.config.js index 80a4df0..8252d81 100644 --- a/data-entry-app/frontend/vite.config.js +++ b/data-entry-app/frontend/vite.config.js @@ -6,12 +6,17 @@ export default defineConfig({ plugins: [vue()], resolve: { alias: { - '@': fileURLToPath(new URL('./src', import.meta.url)) + '@': fileURLToPath(new URL('./src', import.meta.url)), + '@shared': fileURLToPath(new URL('../../shared', import.meta.url)) } }, server: { port: 3010, proxy: { + '/api/auth': { + target: 'http://localhost:8001', + changeOrigin: true, + }, '/api': { target: 'http://localhost:8003', changeOrigin: true, diff --git a/docs/PACK_CONTAFIN.pck b/docs/PACK_CONTAFIN.pck new file mode 100644 index 0000000..ae66a59 --- /dev/null +++ b/docs/PACK_CONTAFIN.pck @@ -0,0 +1,8989 @@ +CREATE OR REPLACE PACKAGE "PACK_CONTAFIN" is + + -- Author : GEORGIANA.VOICU + -- Created : 14.10.2004 11:35:49 + -- Purpose : SCRIE,STERGE DIN FISIERE + + -- Public type declarations + --type is ; + + -- Public constant declarations + -- constant := ; + + -- Public variable declarations + -- ; + + -- Public function and procedure declarations + --function ( ) return ; + type tip_ref_cursor is ref cursor; + + nCod act_temp.cod%Type; + dDataOra act_temp.dataora%Type; + nIdFact act_temp.id_fact%Type; + nIdUtil act_temp.id_util%Type; + nAnRon act_temp.an%Type; + nLunaRon act_temp.luna%Type; + nScriere number(1) := 0; + nRefacere number(1) := 1; + nStergere number(1) := 2; + nIdSucursala act_temp.id_sucursala%type; + nIdFirma act_temp.id_sucursala%type; + nSuprascriereCod number(1) := 1; + nSuprascriereAnLuna number(1) := 1; + nDateCompletate number(1) := 0; -- se suprascriu cod, an, luna + nDateCompletateCod number(1) := 1; -- nu se suprascrie cod + nDateCompletateCodAnLuna number(1) := 2; -- nu se suprascrie cod, an, luna + nScriereStoc number(1) := 1; -- se scrie in stoc, rul + + nTipValidareAutomata number(1) := 1; + nTipValidareRefacere number(1) := 2; + nTipValidareManuala number(1) := 3; + + FUNCTION GENEREAZA_COD(V_GCS VARCHAR2) RETURN ACT_TEMP.COD%TYPE; + PROCEDURE SET_COD(V_GCS IN VARCHAR2); + FUNCTION GET_COD return ACT_TEMP.COD%TYPE; + + PROCEDURE SET_ID_SUCURSALA(tnIdSucursala act_temp.id_sucursala%type); + FUNCTION GET_ID_SUCURSALA RETURN act_temp.id_sucursala%type; + + PROCEDURE SET_ID_FIRMA(tnIdFirma act_temp.id_sucursala%type); + FUNCTION GET_ID_FIRMA RETURN act_temp.id_sucursala%type; + /* PROCEDURE SET_IDFACT(tdDataAct ACT_TEMP.DATAACT%TYPE, + tcSerie_Act ACT_TEMP.SERIE_ACT%TYPE, + tnNrAct ACT_TEMP.NRACT%TYPE, + tnId_Ctr ACT_TEMP.ID_CTR%TYPE);*/ + PROCEDURE SET_IDFACT(V_GCS IN VARCHAR2); + FUNCTION GET_IDFACT return ACT_TEMP.ID_FACT%TYPE; + + PROCEDURE SET_DATAORA(V_DATAORA IN ACT_TEMP.DATAORA%TYPE); + FUNCTION GET_DATAORA RETURN ACT_TEMP.DATAORA%TYPE; + + PROCEDURE SET_IDUTIL(tnIdUtil act_temp.id_util%Type); + FUNCTION GET_IDUTIL RETURN ACT_TEMP.ID_UTIL%TYPE; + + PROCEDURE SET_DATA_RON(V_GCS VARCHAR2); + FUNCTION GET_ANRON RETURN ACT_TEMP.AN%TYPE; + FUNCTION GET_LUNARON RETURN ACT_TEMP.LUNA%TYPE; + + function getCotaTVAStandard(V_LUNA IN NUMBER, V_AN IN NUMBER) return number; + + PROCEDURE SETARE_FACTURA(tcS VARCHAR2); --RETURN NUMBER; + + FUNCTION LISTA_CAMPURI(V_GCS VARCHAR2, tcTableName IN VARCHAR2) + RETURN VARCHAR2; + + FUNCTION SCRIE_IN_FISIERE RETURN NUMBER; + + PROCEDURE SCRIE_IN_ACT(V_GCS VARCHAR2); + + FUNCTION GETVALIDARE(tcTabel tabele_validare.tabel%type DEFAULT NULL, + tnAn tabele_validare.an%type DEFAULT NULL, + tnLuna tabele_validare.luna%type DEFAULT NULL, + tcCont tabele_validare.cont%type DEFAULT NULL, + tnIdGestiune tabele_validare.id_gestiune%type DEFAULT NULL) + RETURN NUMBER; + + PROCEDURE VALIDARE_INVALIDARE(tnTipValidare tabele_validare.tip_validare%type DEFAULT NULL, + tcTabel tabele_validare.tabel%type DEFAULT NULL, + tnAn tabele_validare.an%type DEFAULT NULL, + tnLuna tabele_validare.luna%type DEFAULT NULL, + tcCont tabele_validare.cont%type DEFAULT NULL, + tnIdGestiune tabele_validare.id_gestiune%type DEFAULT NULL); + + PROCEDURE VALIDAREINREGISTRARI(tnAn IN act.an%type, + tnLuna act.luna%type, + tnIdUtil act.id_Utilv%type, + tnCod act.cod%type); + + procedure EXECUTA_SCRIE_TVA(V_GCS VARCHAR2, + tcNumeTabel varchar2, + tnProcTvaStR number, + tnProcTvaRedR number, + tcCorespDTva varchar2, + tcCorespDBaza varchar2, + tcCorespCTva varchar2, + tcCorespCBaza varchar2, + tcContTva varchar2, + tcExceptii varchar2, + tnAn number, + tnLuna number, + tnScrie number); + + procedure SCRIE2_TVA(V_GCS VARCHAR2, + tcNumeTabel varchar2, + tnProcTvaStR number, + tnProcTvaRedR number, + tcCorespDTva varchar2, + tcCorespDBaza varchar2, + tcCorespCTva varchar2, + tcCorespCBaza varchar2, + tcContTva varchar2, + tcExceptii varchar2, + tnAn number, + tnLuna number, + tnScrie number, + tnIdFact number, + tnNrAct number, + tdDataAct date); + + PROCEDURE STERGE_DIN_ACT(V_GCS VARCHAR2, + tnAn in number, + tnLuna in number, + tnCod in number, + tnId_utils in number, + tnTip IN NUMBER); + + PROCEDURE STERGE_DIN_RUL(V_GCS VARCHAR2, + tnAn in number, + tnLuna in number, + tnCod in number, + tnId_utils in number); + + PROCEDURE STERGE_DIN_RUL_OBINV(V_GCS VARCHAR2, + tnAn in number, + tnLuna in number, + tnCod in number, + tnId_utils in number); + + PROCEDURE SCRIE_IN_RUL(tcS IN VARCHAR2); + + PROCEDURE SCRIE_IN_RUL_OBINV(tcS IN VARCHAR2); + + PROCEDURE SCRIE_IN_STOC_OLD(tcS IN VARCHAR2, + tnAn in number, + tnLuna in number, + tnScrie number, + tcTabel in varchar2, + tcIdTabel in varchar2, + tcCondSpec in varchar2); + + PROCEDURE SCRIE_IN_STOC(tcS IN VARCHAR2, + tnAn in number, + tnLuna in number, + tnScrie number, + tcTabel in varchar2, + tcIdTabel in varchar2, + tcCondSpec in varchar2); + + PROCEDURE SCRIE_IN_STOC(tnAn in number, + tnLuna in number, + tnScrie number, + tnIdGestiune IN RUL.ID_GESTIUNE%TYPE DEFAULT NULL); + + PROCEDURE SCRIE_IN_STOC_OBINV_OLD(tcS IN VARCHAR2, + tnAn in number, + tnLuna in number, + tnScrie number, + tcTabel in varchar2, + tcIdTabel in varchar2, + tcCondSpec in varchar2); + + PROCEDURE SCRIE_IN_STOC_OBINV(tcS IN VARCHAR2, + tnAn in number, + tnLuna in number, + tnScrie number, + tcTabel in varchar2, + tcIdTabel in varchar2, + tcCondSpec in varchar2); + + PROCEDURE SCRIE_IN_STOC_OBINV(tnAn in number, + tnLuna in number, + tnScrie number); + + PROCEDURE set_suprascriereCod(V_VALOARE IN NUMBER); + + PROCEDURE set_suprascriereAnLuna(V_VALOARE IN NUMBER); + + PROCEDURE RESET_VARIABLES; + + procedure SCRIE_JV_2007(tnAn JV2007.AN%TYPE, + tnLuna JV2007.LUNA%TYPE, + tnScrie number); + procedure SCRIE_JC_2007(tnAn JC2007.AN%TYPE, + tnLuna JC2007.LUNA%TYPE, + tnScrie number); + Procedure COMPLETEAZA_JV_2007(tnAn IN JV2007.AN%TYPE, + tnLuna IN JV2007.LUNA%TYPE, + tcTabelSursa IN VARCHAR2, + tcCondSucursala IN VARCHAR2); + Procedure COMPLETEAZA_JC_2007(tnAn IN JC2007.AN%TYPE, + tnLuna IN JC2007.LUNA%TYPE, + tcTabelSursa IN VARCHAR2, + tcCondSucursala IN VARCHAR2); + Procedure COMPLETEAZA_IREG_PARTENERI(tnAn in IREG_PARTENERI.AN%TYPE, + tnLuna in IREG_PARTENERI.LUNA%TYPE, + tcTabelSursa IN VARCHAR2, + tcCondSucursala IN VARCHAR2, + tcCondInPlus IN VARCHAR2, + tcCont IN VARCHAR2, + tnIdPart IN NUMBER); + + FUNCTION VERIFICA_NOTE_CONTABILE(tlVerificAnalitic IN NUMBER) RETURN NUMBER; + + PROCEDURE SCRIE_IN_BALANTA(tcS in varchar2, + tnAn in BAL.AN%TYPE, + tnLuna in BAL.LUNA%TYPE, + tnScrie in number); + + PROCEDURE SCRIE_IN_BALANTA_PARTENERI(tcs in varchar2, + tnAn in BALANTA_PARTENERI.AN%TYPE, + tnLuna in BALANTA_PARTENERI.LUNA%TYPE, + tcCont in BALANTA_PARTENERI.CONT%TYPE, + tnScrie in number, + tnIdPart in BALANTA_PARTENERI.ID_PART%TYPE DEFAULT NULL); + + PROCEDURE SCRIE_IN_IREG_PARTENERI(tnAn in IREG_PARTENERI.AN%TYPE, + tnLuna in IREG_PARTENERI.LUNA%TYPE, + tcCont in IREG_PARTENERI.CONT%TYPE, + tnScrie in number, + tnIdPart in IREG_PARTENERI.ID_PART%TYPE DEFAULT NULL); + + PROCEDURE EXECUTA_SCRIE_IN_IREG(tcS VARCHAR2, + tnAn in number, + tnLuna in number, + tcCont in varchar2, + tnScrie number, + tnVenChelt number); + + PROCEDURE STERGE_TEMP_ACTRUL; + + Procedure INIT_SCRIERE_ACT_RUL_LOCAL(tnIdUtil SYN_UTILIZATORI.ID_UTIL%TYPE, + tnAn ACT.AN%TYPE, + tnLuna ACT.LUNA%TYPE, + tnSuprascriereCod NUMBER, + tnScrieSterge NUMBER, + tnIdSucursala ACT.ID_SUCURSALA%TYPE); + + PROCEDURE INITIALIZEAZA_SCRIERE_ACT_RUL(tnIdUtil ACT.ID_UTIL%TYPE, + tdDataOra ACT.DATAORA%TYPE, + tnAn ACT.AN%TYPE, + tnLuna ACT.LUNA%TYPE, + tnSuprascriereCod NUMBER, + tnSuprascriereAnLuna NUMBER, + tnScrieSterge NUMBER, + tnIdSucursala ACT.ID_SUCURSALA%TYPE); + + procedure sterge_document(tnCod in number, + tnAn in number, + tnLuna in number, + tnIdUtil in number); + procedure sterge_document(V_cod in number); + + procedure finalizeaza_document_verif(tnAn IN NUMBER, + tnLuna IN NUMBER, + tnScrieSterge IN number, + tnDateCompletate IN number, + tnScadereStoc IN number, + tnCod IN ACT.COD%type, + tnIdUtil IN ACT.ID_UTIL%TYPE, + tdDataOra IN ACT.DATAORA%TYPE, + tnIdSucursala IN ACT.ID_SUCURSALA%TYPE, + tcSirModificariAcont IN VARCHAR2, + tcSirModificariPart IN VARCHAR2, + CURSOR_VERIFICARE OUT PACK_TYPES.tip_cursor); + + procedure finalizeaza_document_compl(V_SIR_MODIFICARI_ACONT IN VARCHAR2, + V_SIR_MODIFICARI_PART IN VARCHAR2); + + PROCEDURE cursor_verificare(V_CURSOR_VERIFICARE OUT PACK_TYPES.tip_cursor); + + Procedure final_scriere_act_rul_local(tnIdUtil SYN_UTILIZATORI.ID_UTIL%TYPE, + tnAn ACT.AN%TYPE, + tnLuna ACT.LUNA%TYPE, + tnCod ACT.COD%TYPE, + tnScrieSterge NUMBER, + tnModificareNota NUMBER, + tcMesajRefacereNota OUT VARCHAR2); + + procedure finalizeaza_scriere_act_rul; + + procedure finalizeaza_scriere_act_rul(tnIdUtil SYN_UTILIZATORI.ID_UTIL%TYPE, + tnCod ACT.COD%TYPE, + tnScrieSterge NUMBER, -- 0 = scriere, 1 = refacere, 2 = stergere + tnModificareNota NUMBER, -- 0 = modificare, 1 = stergere + tnScrieCumpVanz NUMBER, -- 0 = cump + vanz, 1 = cumparari, 2 = vanzari + tcMesajRefacereNota OUT VARCHAR2); + + PROCEDURE finalizeaza_modificare_nota(tnLuna IN NUMBER, + tnAn IN NUMBER, + tdDataOra IN DATE, + tnIdSet IN NUMBER, + tnCod IN NUMBER, + tnIdFact IN NUMBER, + tnIdFactD IN NUMBER, + tnIdUtil IN NUMBER); + + PROCEDURE finalizeaza_stergere_nota(tnLuna IN NUMBER, + tnAn IN NUMBER, + tdDataOra IN DATE, + tnIdSet IN NUMBER, + tnCod IN NUMBER, + tnIdFact IN NUMBER, + tnIdFactD IN NUMBER, + tnIdUtil IN NUMBER); + + PROCEDURE completeaza_analitice; + PROCEDURE completeaza_analitice_rul; + PROCEDURE completeaza_parteneri_gestiuni; + PROCEDURE sterge_analitice_gresite; + PROCEDURE sterge_analitice_gresite_rul; + + FUNCTION verifica_id_documente(lcSirIdFact IN VARCHAR2) RETURN VARCHAR2; + + function GetRulajAuxiliarFurnizor(tnIdFurnizor rul_auxiliar.id_furnizor%type) + return rul_auxiliar.id_rul_aux%type; + procedure GetRulajAuxiliarFurnizor(tnIdFurnizor IN rul_auxiliar.id_furnizor%type, + tnIdRulAux OUT rul_auxiliar.id_rul_aux%type); + +end PACK_CONTAFIN; +/ +CREATE OR REPLACE PACKAGE BODY "PACK_CONTAFIN" is + -- 11.02.2010 + -- marius.mutu + -- scrie_in_ireg_parteneri + -- nu se mai ia in considerare la selectia de facturi nota 419 = 4111 cu documente pereche (regularizare avans) + -- nota se ia in considerare la incasari/plati + + -- 23.02.2010 + -- marius.mutu + -- scrie_in_rul, scrie_in_rul_obinv + -- nu se mai suprascrie id_sucursala pe inregistrarile deja completate + + -- 11.03.2010 + -- marius.mutu + -- scrie_in_ireg_parteneri + -- la incasari/plati se lua max(curs) pentru reevaluarea soldurilor in valuta (id_set 90501) + -- am considerat cursul 0 pentru operatiile <> 90501, cursul din 90501 putea sa fie mai mic decat cursul de pe o operatie din luna + + -- 17.05.2010 + -- marius.mutu + -- REFAC_STOC, SCRIE_IN_STOC - REFACERE PENTRU FIECARE GESTIUNE IN PARTE + + -- 15.07.2010 + -- marius.mutu + -- SCRIE_JV_2007, SCRIE_JC_2007 - COTA TVA 24% + + -- 30.06.2011 + -- marius.mutu + -- SCRIE_IN_BALANTA_PARTENERI, SCRIE_IN_IREG_PARTENERI - parametru ID_PART (scriere/refacere pentru un singur partener) + + -- 08.11.2012 + -- marius.mutu + -- SCRIE_JC_2007 + -- s-a introdus coloana ROTN (limitare deducere TVA 4426 id_jtva_coloana = 1001) + -- partenerul pentru nota x = 4426 id_jtva_coloana = 1001, introdusa in afara pachetului de note de factura achizitie, + -- se ia din factura cu max(id_part) dupa nract, dataact, id_fdoc in loc de nract, dataact, id_fdoc, cod + + -- 12.02.2013 + -- marius.mutu + -- SCRIE_JV_2007, SCRIE_JC_2007 + -- TVA_INCASARE - CORECTIE SUMA PLATITA + + -- 13.02.2013 + -- marius.mutu + -- SCRIE_IN_IREG_PARTENERI + -- LA INREGISTRAREA 408 AM ID_JTVA_COLOANA RO09BFB, RO09BVB...., IAR LA REGULARIZARE 408 POT SA AM RO09NB (TVA INCASARE NEEXIGIBIL) + -- SI NU SE MAI PUPA INREGISTRARILE SI DUPA ID_JTVA_COLOANA + -- INCERC SA LE PUP DOAR DUPA PROC_TVA (STIU CA POATE SA SARA IN AER) :) + + -- 26.03.2013 + -- marius.mutu + -- SCRIE_IN_IREG_PARTENERI + -- LA INREGISTRAREA 408 POT SA AM O 2 REGULARIZARI 408 = 401 CU ACELASI PROC_TVA, DAR ID_JTVA_COLOANA DIFERITE (EX: ACH INT 24, ACH INT NEEX 24) + -- NU STIU DE CE AR EXISTA SITUATIA, DAR S-A INTAMPLAT + -- DA EROARE LA MERGE (NU SE POATE OBTINE UN SET DE RANDURI STABILE IN TABELA SURSA) + -- AM FACUT GRUPAREA DOAR DUPA PROC_TVA, IAR ID_JTVA_COLOANA IL FAC MAX(ID_JTVA_COLOANA) + + -- 18.04.2013 + -- marius.mutu + -- + procedura finalizeaza_document_verif (initializeaza_act_rul + finalizeaza_document + cursor_verificare) + -- + cursor_verificare + -- + completeaza_analitice + -- + completeaza_analitice_rul + -- + completeaza_parteneri_gestiuni + -- + sterge_analitice_gresite + -- + sterge_analitice_gresite_rul + + -- 09.08.2013 + -- marius.mutu + -- STERGE_DIN_ACT + -- Nu mai sterg din DOCUMENTE + -- Cand se sterge o plata cu o inregistrare TVA incasare (ID_FACT TVA INCASARE = ID_FACT FACTURA ORIGINALA) + -- se marcheaza documentul sters si nu se mai pot face plati ulterioare pe factura respectiva + -- mesaj: Documentul nu exista in baza de date + + -- 12.11.2013 + -- marius.mutu + -- STERGE_DIN_ACT - nu se sterg din documente id_set 90501 reevaluare sold in valuta la 31.LL + + -- 05.12.2013 + -- marius.mutu + -- SCRIE_IN_STOC - s-a reparat datain, dataout - lua max(r.dataact) in loc de max(r.datain) si max(r.dataout) + + -- 27.02.2014 + -- marius.mutu + -- SCRIE_IN_ACT - nu completez ID_FACTD, ID_FACTC cu ID_FACT-ul documentului curent + -- la factura + chitanta cu acelasi NRACT, se completa ID_FACTC cu ID_FACT chitanta + + -- 12.03.2014 + -- marius.atanasiu + -- SCRIE_IN_ACT : daca am completat id_factd / id_factc pe o inregistrare noua ( cu id_act = -1 ), + -- il suprascriu in caz ca gasesc un alt document cu acelasi numar, dar cu serie document diferita + + -- 04.06.2014 + -- marius.mutu + -- SCRIE_JC_2007 : s-a introdus contul 4511,462 in lista conturilor creditoare pentru regularizarea 408 = 401/404/4511/462 + + -- 05.06.2014 + -- marius.mutu + -- SCRIE_JV_2007 : s-a introdus contul 461,4511,4118 in lista conturilor creditoare pentru regularizarea 4111/461/4511/4118 = 418 + + -- 26.11.2014 + -- marius.mutu + -- SET_DATA_RON - tratare no_data_found + + -- 17.04.2015 + -- marius.mutu + -- finalizeaza_scriere_act_rul: Optiune SETURI_SITUATII_NU_SCRIE: LISTA ID_SET PENTRU CARE NU SE APELEAZA SCRIEREA IN SITUATII (25052|BV,BP,IP,TVA,STOC) + + -- 08.10.2015 + -- marius.mutu + -- scrie_jc2007, scrie_jv2007 -- nu se iau in considerare operatiile 10621, 10622 - compensari 419, 409 + + -- 15.12.2015 + -- marius.mutu + -- getCotaTVAStandard - 20% din 01/2016 + -- SCRIE_JC_2007, SCRIE_JV_2007 cota tva 20% + + -- 11.03.2016 + -- marius.mutu + -- SCRIE_JV_2007 - corectie JV2007.RO5NB/RO5NT - se suprascria eronat cu RO5B/RO5NT din luna curenta in loc de RO5NB/RO5NT, pentru facturile preluate din luna precedenta + + -- 21.04.2016 + -- marius.mutu + -- completeaza analitice + -- La vanzarea de marfuri la pret de vanzare 4428 = 371 are completata ID_GESTOUT + -- functioneaza pentru contul 371 pe credit, dar nu pentru contul 4428 pe debit + -- mai repet o data completarea analiticelor si cu ID_GESTIN/ID_GESTOUT pentru analiticele ramase necompletate + + -- 16.06.2016 + -- marius.mutu + -- + VALIDARE_INVALIDARE - intretinere invalidare tabel (BAL, BALANTA_PARTENERI, IREG_PARTENERI, JV2007, JC2007, +STOC, + STOC_OBINV) an, luna, cont + -- pentru a se da refaceri/redeschideri automate doar la situatiile invalidate + -- ex: la CONPRESS se face redeschidere de luna la ultimele 4 luni deschise. Nu este nevoie de refaceri la toate conturile si la toate 4 lunile daca nu s-a modificat nimic in lunile anterioare + -- + GETVALIDARE - intoarce situatia validarii unei luni + + -- 11.07.2016 + -- marius.mutu + -- VALIDARE_INVALIDARE - se invalideaza si situatiile din luna operatiei, daca ID_SET nu se scrie in anumite tabele (bv, bp, ip, tva), ex: bon fiscal conpress + -- daca nu se marcheaza situatiile invalidate, nu se refac, desi nu sunt scrise + + -- 27.10.2016 + -- marius.muut + -- COMPLETEAZA_JC_2007, COMPLETEAZA_JV_2007, SCRIE_JC_2007, SCRIE_JV_2007 + DATAIREG + + -- 03.11.2016 + -- marius.mutu + -- SCRIE_JC_2007, SCRIE_JV_2007 - DOCUMENTE.DATAIREG + + -- 29.12.2016 + -- marius.mutu + -- getCotaTVAStandard - 19% din 01/2017 + -- SCRIE_JC_2007, SCRIE_JV_2007 - TVA NEEX. 19% de la 01/2017 + + -- 25.01.2017 + -- marius.mutu + -- SCRIE_JC_2007 +CE19SB, CE19ST + + -- 07.02.2017 + -- marius.mutu + -- SCRIE_JC_2007, SCRIE_JV_2007 - ID_FDOC act/documente - si dupa coloanele id_set, serie_act + -- s-a intamplat sa am tva exigibilizat la plata cu acelasi nr. doc si data document ca la factura + -- si sa puna id_fdoc de la nota tva exigibilizat (ordin plata) in loc de factura + + -- 09.02.2017 + -- marius.mutu + -- scrie_jc_2007 - calcul baza exigibila 19% pentru exigibilizare TVA incasare + + -- 23.03.2017 + -- marius.mutu + -- scrie_jc_2007 - calcul totctva din regularizare 408 = 401 cu TVA incasare 19% + + -- scrie_jv_2007 - calcul totctva din regularizare 4111 = 418 cu TVA incasare si exigibilizare TVA - se scadea TVA de 3 ori + + -- 24.06.2017 + -- marius.mutu + -- SCRIE_IN_IREG_PARTENERI: ACONT SE IA IN FUNCTIE DE CONTUL DEBITOR-ACTIV/CREDITOR-PASIV + EXCEPTIE + -- NU TRATA CORECT NOTA 462.3 = 462.9. PUNEA ANALITICUL 3 IN LOC DE 9 + + -- sterge_document. actualizat procedura cu pack_contafin.finalizeaza_stergere_nota + -- pentru folosire in ROAGEST corectie NIR/Bon + + -- 28.09.2017 + -- marius.mutu + -- SCRIE_IN_RUL + -- Completare RUL.ID_RUL_AUX SI RUL_AUX.ID_FURNIZOR la intrari daca este setata optiunea + + -- 06.10.2017 + -- marius.mutu + -- + procedure GetRulajAuxiliarFurnizor + + -- 11.01.2018 + -- marius.mutu + -- STERGE_DIN_ACT - hint IDX_COD + + -- 22.05.2018 + -- marius.mutu + -- SCRIE_JC_2007: corectare totftvatax pentru 19% regularizare 408=401 + + -- 20.06.2018 + -- marius.mutu + -- SCRIE_JV_2007: corectare totctva pentru 19% regularizare 4111=418 + + -- 20.07.2018 + -- marius.mutu + -- COMPLETEAZA_IREG_PARTENERI - se iau din ireg_parteneri ultima inregistrare din luna < decat luna curenta, ultima luna diferita de luna curenta + + -- 23.01.2020 + -- marius.mutu + -- STERGE_DIN_ACT - nu mai sterg din documente pentru id_Set = 90021 inchidere 461 = 542, pentru ca are acelasi id_fact ca si 542.id_factc si se sterg id_docurile 542 + + -- 23.06.2020 + -- marius.mutu + -- SCRIE_JC_2007, SCRIE_JV_2007 nvl(scd/scc) la selectia din act. + -- este posibil ca scd/scc sa fie null si sa aiba id_jtva_coloana completat si nu sunt luate in considerare + + -- 09.07.2020 + -- marius.mutu + -- VALIDARE_INVALIDARE + ID_UTIL_VALIDARE, DATAORA_VALIDARE + + -- 08.02.2021 + -- SCRIE_IN_STOC_OBINV - se pot scrie si alte conturi in afara de 8039 in stoc_obinv + + -- 08.06.2021 + -- SCRIE_IN_STOC_OBINV - corectie selectie MERGE GROUP BY nvl(id_rul_aux) + + -- 25.01.2022 + -- SCRIE_JC_2007 - + xx19ti, ROTN50, ROTN100 + + -- 06.03.2022 + -- SCRIE_JC_2007 + CE19CTB, CE19CTT,CE9CTB, CE9CTT,CE5CTB, CE5CTT, RORTD24..RORTD5 + -- SCRIE_JV_2007 + RORTC24..RORTC5 + + -- 24.03.2022 + -- SCRIE_IN_ACT. ID_SUCURSALA, TAXCODE, PAYMENTCODE = NULL IN LOC DE 0 + + -- 05.04.2022 + -- SCRIE_JV_2007. TRATARE REGULARIZARE 461 = 418 + + -- 18.07.2023 + -- SCRIE_IN_STOC_OBINV + stoc_obinv.lot + + -- 31.08.2023 + -- SCRIE_JV_2007 + WRSCDDAB, WRSCDDCD + + -- 12.05.2025 + -- SCRIE_JC_2007 + XX19TIB + + -- 01.08.2025 + -- getCotaTVAStandard - obtinere cota TVA STANDARD din COTE_TVA, COTA 21% din 08/2025 + + -- 05.08.2025 + -- SCRIE_JC_2007, SCRIE_JV_2007 COTE TVA 21% SI 11% din 08/2025 + + -- 19.08.2025 + -- SCRIE_JC_2007 - corectie TOTAL CU TVA + + -- 01.09.2025 + -- getCotaTVAStandard - corectat pentru deschidere de luna + + -- 23.09.2025 + -- SCRIE_JC_2007 + -- BUG ORACLE XE 11: [Oracle][ODBC][Ora]ORA-00600: cod de eroare intern?, argumente: [13013], [5001], [80451], [21241702], [11], [21241702], [17], [], [], [], [], [] + -- Pentru incasarile/platile cu TVA la incasare + -- NO_QUERY_TRANSFORMATION dezactiveaza TOATE transformarile (view merging, subquery unnesting, query rewrite, etc.) + + -- 01.10.2025 + -- SCRIE_JC_2007 + -- NO_QUERY_TRANSFORMATION nu stiu de ce nu facea corect (nu scadea valoarea bazei) in cazul discount-urilor 401 = 767 + -- MERGE replaced with FORALL BULK operations to avoid Oracle XE bugs and improve performance + + -- 17.10.2025 + -- SCRIE_JV_2007 - CORECTARE RO21B nu se scadea TVA regularizare 418 + + -- 28.10.2025 + -- SCRIE_IN_RUL COMPLETARE ID_FACT PENTRU ACHIZITIE DIN IMPORT SI ACHIZITIE+PLATA + -- LA ACHIZITIE DIN IMPORT SE PUNEA MIN(ID_FACT) SI NU ERA INTOTDEAUNA FACTURA DE ACHIZITIE + + --------------------------------------------------------------- + FUNCTION SCRIE_IN_FISIERE RETURN NUMBER IS + V_RETURN NUMBER := 0; + + BEGIN + RETURN V_RETURN; + END; + --------------------------------------------------------------- + PROCEDURE SCRIE_IN_ACT(V_GCS VARCHAR2) IS + LN_COD NUMBER(20) := 0; + lnIdFact NUMBER(20) := 0; + LD_DATAORA DATE; + LC_INSERT VARCHAR2(10000) := ''; + V_LISTA_CAMPURI VARCHAR2(2000) := ''; + lnID_Util act_temp.id_util%Type := 0; + LNAN ACT_TEMP.AN%TYPE; + LNLUNA ACT_TEMP.LUNA%TYPE; + lnAutoValidare number(10) := 0; + lnBlocatROACONT NUMBER(1) := 0; + lnBlocatROAGEST NUMBER(1) := 0; + lnInchis number(1) := 0; + lnIdSucursala act_temp.id_sucursala%type; + lnIdFirma act_temp.id_sucursala%type; + lnTvaIncasare act_temp.tva_incasare%type; + BEGIN + V_LISTA_CAMPURI := pack_contafin.LISTA_CAMPURI(V_GCS, 'ACT'); + LN_COD := pack_contafin.GET_COD(); + LD_DATAORA := pack_contafin.GET_DATAORA(); + LNID_UTIL := pack_contafin.GET_IDUTIL(); + LNAN := pack_sesiune.GETAN(); + LNLUNA := pack_sesiune.GETLUNA(); + lnIdSucursala := pack_contafin.GET_ID_SUCURSALA(); + lnIdFirma := pack_contafin.GET_ID_FIRMA(); + + -- VERIFIC DACA LUNA ESTE BLOCATA + PACK_FIRMA.IS_LUNA_BLOCATA(user, + pack_sesiune.nIdeROACONT, + lnAn, + lnLuna, + lnBlocatROACONT); + -- PACK_FIRMA.IS_LUNA_BLOCATA(tcS, pack_sesiune.nIdeROAGEST, tnAn, tnLuna, lnBlocatROAGEST); + lnInchis := lnBlocatROACONT + lnBlocatROAGEST; + + if lnInchis = 1 then + RAISE_APPLICATION_ERROR(-20000, 'LUNA CONTABILA ESTE BLOCATA'); + end if; + + -- SCRIE IN GCS.ACT_TEMP --------------------------- + PACK_CONTAFIN.SETARE_FACTURA(V_GCS); + + -- 12.03.2014 : pun ID_ACT -1 ca sa stiu care sunt inregistrarile noi atunci cand completez id_factd si id_factc + update ACT_TEMP set ID_ACT = -1 where id_fact = -1; + + -- cursor crsFacturi is select distinct nract, dataact, dataireg from act_temp where id_fact = -1 ; + + -- 03.10.2007 + -- MARIUS.MUTU + -- selectez nract, dataact in ordinea fizica (sper!!!!!) - astfel incat id_fact-urile generate sa fie in aceeasi ordine + -- pentru ca min(id_fact) se scrie in rull ( vezi nir din import, factura+chitanta) + /*select distinct nract, dataact + from act_temp + where id_fact = -1*/ + -- 12.02.2009 + -- MARIUS.ATANASIU + -- am adaugat si id_ctr ca sa pot da id_fact diferit pentru fiecare contract, + -- in caz ca emit o factura pentru mai multe contracte + for itemfact in (select nract, + dataact, + dataireg, + serie_act, + min(rn), + id_ctr, + min(id_ctr2) as id_ctr2, + max(tva_incasare) as tva_incasare, + id_set + from (select nract, + dataact, + dataireg, + serie_act, + rownum as rn, + decode(NVL(id_ctr, 0), + 0, + max(id_ctr) over(partition by nract, + dataact, + dataireg, + serie_act), + id_ctr) as id_ctr, + NVL(id_ctr, 0) as id_ctr2, + tva_incasare, + id_set + from act_temp + where id_fact = -1) + group by nract, + dataact, + dataireg, + serie_act, + id_ctr, + id_set + order by 4) loop + pack_contafin.set_idfact(V_GCS); + /* 25.02.2013 : se face cumularea id_fact pe listarea din RC/RJ + PACK_CONTAFIN.SET_IDFACT(itemfact.dataact, + itemfact.serie_act, + itemfact.nract, + itemfact.id_ctr);*/ + lnIdFact := get_idFact(); + if itemfact.id_ctr = itemfact.id_ctr2 then + update act_temp + set id_fact = lnIdFact + where nract = itemfact.nract + and dataact = itemfact.dataact + and dataireg = itemfact.dataireg + and NVL(serie_act, '+_') = NVL(itemfact.serie_act, '+_') + and id_ctr = itemfact.id_ctr + and id_fact = -1; + + -- 12.03.2014 : completez id_factd sau il suprascriu ( in cazul in care l-am completat deja si + -- mai gasesc un document pereche care are serie_act diferita de a documentului ) + update act_temp + set id_factd = lnIdFact + where pereched = itemfact.nract + and (id_factd = -1 or + (id_factd <> -1 and id_act = -1 and + NVL(serie_act, '+_') <> NVL(itemfact.serie_act, '+_'))) + and id_ctr = itemfact.id_ctr; + + -- 12.03.2014 : completez id_factc sau il suprascriu ( in cazul in care l-am completat deja si + -- mai gasesc un document pereche care are serie_act diferita de a documentului ) + update act_temp + set id_factc = lnIdFact + where perechec = itemfact.nract + and (id_factc = -1 or + (id_factc <> -1 and id_act = -1 and + NVL(serie_act, '+_') <> NVL(itemfact.serie_act, '+_'))) + and id_ctr = itemfact.id_ctr; + else + update act_temp + set id_fact = lnIdFact + where nract = itemfact.nract + and dataact = itemfact.dataact + and dataireg = itemfact.dataireg + and NVL(serie_act, '+_') = NVL(itemfact.serie_act, '+_') + and NVL(id_ctr, 0) in (itemfact.id_ctr, 0) + and id_fact = -1; + + -- 12.03.2014 : completez id_factd sau il suprascriu ( in cazul in care l-am completat deja si + -- mai gasesc un document pereche care are serie_act diferita de a documentului ) + update act_temp + set id_factd = lnIdFact + where pereched = itemfact.nract + and (id_factd = -1 or + (id_factd <> -1 and id_act = -1 and + NVL(serie_act, '+_') <> NVL(itemfact.serie_act, '+_'))) + and NVL(id_ctr, 0) in (itemfact.id_ctr, 0); + + -- 12.03.2014 : completez id_factc sau il suprascriu ( in cazul in care l-am completat deja si + -- mai gasesc un document pereche care are serie_act diferita de a documentului ) + update act_temp + set id_factc = lnIdFact + where perechec = itemfact.nract + and (id_factc = -1 or + (id_factc <> -1 and id_act = -1 and + NVL(serie_act, '+_') <> NVL(itemfact.serie_act, '+_'))) + and NVL(id_ctr, 0) in (itemfact.id_ctr, 0); + end if; + + -- SCRIE IN DOCUMENTE + lnTvaIncasare := case + when itemfact.tva_incasare > 0 then + 1 + else + 0 + end; + -- 25.02.2013 : am repus insertul pentru ca se face cumularea id_fact pe listarea din RC/RJ + INSERT INTO DOCUMENTE + (ID_DOC, + ID_UTIL, + DATAORA, + TVA_INCASARE, + SERIE_ACT, + NRACT, + DATAACT, + DATAIREG, + ID_CTR, + ID_SET) + VALUES + (lnIdFact, + lnID_Util, + LD_DATAORA, + lnTvaIncasare, + itemfact.serie_act, + itemfact.nract, + itemfact.dataact, + itemfact.dataireg, + decode(itemfact.id_ctr, 0, NULL, itemfact.id_ctr), + itemfact.id_set); + /* + -- modificare ROACONT v 2.4.0 ( 27.12.2012 ) : am adaugat serie_act, nract, dataact + -- modificare 21.02.2013 : am adaugat id_ctr + MERGE INTO DOCUMENTE A + USING (SELECT lnIdFact as ID_DOC, + itemfact.serie_act as SERIE_ACT, + itemfact.nract as NRACT, + itemfact.dataact as DATAACT, + decode(itemfact.id_ctr, 0, NULL, itemfact.id_ctr) AS ID_CTR + FROM DUAL) B + ON (A.ID_DOC = B.ID_DOC) + WHEN NOT MATCHED THEN + INSERT + (ID_DOC, + ID_UTIL, + DATAORA, + TVA_INCASARE, + SERIE_ACT, + NRACT, + DATAACT, + ID_CTR) + VALUES + (B.ID_DOC, + lnID_Util, + LD_DATAORA, + lnTvaIncasare, + B.SERIE_ACT, + B.NRACT, + B.DATAACT, + B.ID_CTR);*/ + + end loop; + + update act_temp set id_factd = 0 where id_factd = -1; + update act_temp set id_factc = 0 where id_factc = -1; + -- modificare 21.02.2013 : daca s-au modificat serie_act/nract/dataact, atunci trebuie sa modific + -- si in tabela DOCUMENTE ; am pus merge-ul inainte de completare id_fact pentru notele cu id_fact = -5 + -- ( notele cu 4426-4428/4428-4427 ) deoarece acolo pot sa am serie act/nr.act/data act de la doc. de + -- plata/incasare si id_fact de la factura si atunci mi-ar pune datele documentului de plata/incasare + -- pe id_fact-ul facturii in DOCUMENTE + MERGE INTO DOCUMENTE A + USING (SELECT DISTINCT ID_FACT AS ID_DOC, + SERIE_ACT, + NRACT, + DATAACT, + DATAIREG, + MAX(DECODE(ID_CTR, 0, NULL, ID_CTR)) AS ID_CTR + FROM ACT_TEMP + WHERE STERS = 0 + AND ID_FACT <> -5 + AND NOT (SCD = '4426' AND SCC = '4428') + AND NOT (SCD = '4428' AND SCC = '4427') + AND ID_SET <> 90501 + GROUP BY ID_FACT, SERIE_ACT, NRACT, DATAACT, DATAIREG) B + ON (A.ID_DOC = B.ID_DOC) + WHEN MATCHED THEN + UPDATE + SET SERIE_ACT = B.SERIE_ACT, + NRACT = B.NRACT, + DATAACT = B.DATAACT, + DATAIREG = B.DATAIREG, + ID_CTR = B.ID_CTR, + STERS = 0; + + -- modificare ROACONT v 2.4.0 ( 24.12.2012 ) : pe notele 4426-4428 / 4428-4427 + -- care le fac o data cu factura pun id_fact = id_fact_factura + merge into act_temp a + using (select distinct nract, id_fact + from act_temp + where id_fact <> -5 + and id_factc = 0 + and id_factd = 0) b + on (decode(a.pereched, 0, a.perechec, a.pereched) = b.nract and ((a.scd = '4426' and a.scc = '4428') or (a.scd = '4428' and a.scc = '4427'))) + when matched then + update set id_fact = decode(a.id_fact, -5, b.id_fact, a.id_fact); + + -- SCRIE IN ACT_TEMP ---------------- + if nvl(pack_contafin.nSuprascriereCod, 1) = 1 then + UPDATE ACT_TEMP + SET COD = LN_COD, + DATAORA = LD_DATAORA, + ID_UTIL = LNID_UTIL, + AN = LNAN, + LUNA = LNLUNA; + else + if NVL(pack_contafin.nSuprascriereAnLuna, 1) = 1 then + UPDATE ACT_TEMP + SET DATAORA = LD_DATAORA, + ID_UTIL = LNID_UTIL, + AN = LNAN, + LUNA = LNLUNA; + else + UPDATE ACT_TEMP SET DATAORA = LD_DATAORA, ID_UTIL = LNID_UTIL; + end if; + end if; + + -- 04.04.2008 + -- Nu se suprascrie id_sucursala completat deja in act_temp + UPDATE ACT_TEMP + SET ID_SUCURSALA = lnIdSucursala + WHERE NVL(ID_SUCURSALA, 0) = 0; + -- 04.04.2008 ^ + + -- COMPLETEZ MONEDA NATIONALA DACA ID_VALUTA = 0 + UPDATE ACT_TEMP + SET ID_VALUTA = pack_def.GetIdMonedaNationala() + where id_valuta = 0; + + -- Completez NULL campurile care sunt NULL in act + update act_temp + set id_sucursala = DECODE(id_sucursala, 0, null, id_sucursala), + taxcode = decode(taxcode, 0, null, taxcode), + paymentcode = decode(paymentcode, 0, null, paymentcode); + + -- 02.06.2008 USER - PACK_CONTAFIN.ID_FIRMA + -- 16.11.2007 MARIUS.MUTU + -- AUTOVALIDARE INREGISTRARI + /* SELECT CONTAFIN_ORACLE.PACK_DREPTURI.UtilHasValidare(USER, + PACK_CONTAFIN.GET_IDUTIL(), + 'AUTOVALIDARE') + INTO lnAutoValidare + FROM DUAL;*/ + + SELECT CONTAFIN_ORACLE.PACK_DREPTURI.UtilHasValidare(lnIdFirma, + PACK_CONTAFIN.GET_IDUTIL(), + 'AUTOVALIDARE') + INTO lnAutoValidare + FROM DUAL; + + if nvl(lnAutoValidare, 0) > 0 then + UPDATE ACT_TEMP + SET VALIDAT = 1, + ID_UTILV = PACK_CONTAFIN.GET_IDUTIL(), + DATAORAV = SYSDATE; + end if; + -- 16.11.2007 MARIUS.MUTU ^ + + -- SCRIE IN ACT + LC_INSERT := 'INSERT INTO ' || V_GCS || '.ACT(' || V_LISTA_CAMPURI || + ') (SELECT ' || V_LISTA_CAMPURI || ' FROM ACT_TEMP)'; + EXECUTE IMMEDIATE LC_INSERT; + + -- ACTUALIZARE TABELE_VALIDARE + PACK_CONTAFIN.VALIDARE_INVALIDARE(nTipValidareAutomata, + NULL, + lnAn, + lnLuna); + + END SCRIE_IN_ACT; + --------------------------------------------------------------------------------------- + + -- INTOARCE STAREA VALIDARII UNEI SITUATII INTR-O LUNA + -- PENTRU REFACEREA SITUATIEI RESPECTIVE IN PROCEDURA DESCHIDERE_LUNA + -- DACA NU GASESC INREGISTRAREA PENTRU LUNA RESPECTIVA, CONSIDER LUNA INVALIDATA + -- RETURN: 1 = VALIDAT; 0 = INVALIDAT + FUNCTION GETVALIDARE(tcTabel tabele_validare.tabel%type DEFAULT NULL, + tnAn tabele_validare.an%type DEFAULT NULL, + tnLuna tabele_validare.luna%type DEFAULT NULL, + tcCont tabele_validare.cont%type DEFAULT NULL, + tnIdGestiune tabele_validare.id_gestiune%type DEFAULT NULL) + return number is + ldInvalidat tabele_validare.dinvalidat%type; + begin + begin + select DINVALIDAT + INTO ldInvalidat + from TABELE_VALIDARE + WHERE TABEL = tcTabel + and an = tnAn + and luna = tnLuna + and nvl(cont, 'x') = nvl(tcCont, 'x') + and nvl(id_gestiune, 0) = nvl(tnIdGestiune, 0); + exception + when NO_DATA_FOUND then + ldInvalidat := sysdate; -- daca nu gasesc inregistrari consider luna invalidata + end; + + return case when ldInvalidat is null then 1 else 0 end; + + end; + + -- ACTUALIZARE TABELE_VALIDARE (BAL, BALANTA_PARTENERI, IREG_PARTENERI, JV2007, JC2007) + -- INVALIDARE LUNI URMATOARE + -- SE FOLOSESTE PENTRU REFACEREA DOAR A SITUATIILOR DIN LUNILE INVALIDATE + PROCEDURE VALIDARE_INVALIDARE(tnTipValidare tabele_validare.tip_validare%type DEFAULT NULL, + tcTabel tabele_validare.tabel%type DEFAULT NULL, + tnAn tabele_validare.an%type DEFAULT NULL, + tnLuna tabele_validare.luna%type DEFAULT NULL, + tcCont tabele_validare.cont%type DEFAULT NULL, + tnIdGestiune tabele_validare.id_gestiune%type DEFAULT NULL) IS + ldDataAnt date; + lnAnAnt tabele_validare.an%type; + lnLunaAnt tabele_validare.luna%type; + ldInvalidatAnterior tabele_validare.dinvalidat%type; + lnIdUtil tabele_validare.id_util_validare%type := pack_contafin.GET_IDUTIL(); + + lnAn act.an%type := tnAn; + lnLuna act.luna%type := tnLuna; + + lcSetNuScrie optiuni.varvalue%type; + lnIdSet act.id_set%type; + lcSituatiiNuScrie optiuni.varvalue%type; + lnScrieBV number(1) := 1; + lnScrieBP number(1) := 1; + lnScrieIP number(1) := 1; + lnScrieTVA number(1) := 1; + lnScrieSTOC number(1) := 1; + BEGIN + + -- tip_validare: 1 = Validare automata (Operatia este facuta in luna curenta. Situatia este validata automat), 2 = Validare prin refacere (Situatia se valideaza in cazul unei refaceri), 3 = Validare manuala + IF tnTipValidare = nTipValidareRefacere THEN + -- se verifica daca luna anterioara este valida: DINVALIDAT = NULL + -- luna cu refacerea se valideaza doar daca luna anterioara este valida + ldDataAnt := TO_DATE(to_char(tnAn) || lpad(tnLuna, 2, '0'), 'yyyymm') - 1; + lnAnAnt := extract(year from ldDataAnt); + lnLunaAnt := extract(month from ldDataAnt); + select max(DINVALIDAT) + INTO ldInvalidatAnterior + from TABELE_VALIDARE + WHERE TABEL = tcTabel + and an = lnAnAnt + and luna = lnLunaAnt + and nvl(cont, 'x') = nvl(tcCont, 'x') + and nvl(id_gestiune, 0) = nvl(tnIdGestiune, 0); + + -- validare prin refacere + UPDATE TABELE_VALIDARE + SET DULTIMA_REFACERE = SYSDATE, + DINVALIDAT = case + when ldInvalidatAnterior is null then + NULL + else + DINVALIDAT + end, + TIP_VALIDARE = case + when ldInvalidatAnterior is null then + tnTipValidare + else + TIP_VALIDARE + end, + ID_UTIL_INVALIDARE = case + when ldInvalidatAnterior is null then + NULL + else + ID_UTIL_INVALIDARE + end, + EXPLICATIE = case + when ldInvalidatAnterior is null then + NULL + else + EXPLICATIE + end, + ID_UTIL_VALIDARE = lnIdUtil, + DATAORA_VALIDARE = SYSDATE + WHERE TABEL = tcTabel + and an = tnAn + and luna = tnLuna + and nvl(cont, 'x') = nvl(tcCont, 'x') + and nvl(id_gestiune, 0) = nvl(tnIdGestiune, 0); + ELSIF tnTipValidare = nTipValidareManuala THEN + -- validare manuala - nu se face nici o verificare a validarii lunii anterioare pentru ca doresc sa fortez validarea + UPDATE TABELE_VALIDARE + SET DINVALIDAT = NULL, + TIP_VALIDARE = tnTipValidare, + ID_UTIL_INVALIDARE = NULL, + EXPLICATIE = NULL, + ID_UTIL_VALIDARE = lnIdUtil, + DATAORA_VALIDARE = SYSDATE + WHERE TABEL = tcTabel + and an = tnAn + and luna = tnLuna + and nvl(cont, 'x') = nvl(tcCont, 'x') + and nvl(id_gestiune, 0) = nvl(tnIdGestiune, 0); + ELSE + -- INVALIDARE SITUATII PE BAZA LA INREGISTRARILE DIN ACT_TEMP (SCRIERE/MODIFICARE/STERGERE) + -- se valideaza automat luna operatiei doar daca operatia este in ultima luna deschisa si daca luna anterioara este validata + + -- LISTA DE SETURI PENTRU CARE NU SE APELEAZA SCRIEREA balanta, balanta parteneri, inregistrari parteneri, tva, stoc + -- Bonurile fiscale de la chioscuri + -- Se refac situatiile doar prin refaceri/redeschidere de luna FORTAT PENTRU LUNA DOCUMENTELOR + lcSetNuScrie := PACK_SESIUNE.getOptiuneFirma('SETURI_SITUATII_NU_SCRIE'); -- '25052|BV,BP,IP,TVA;' + select max(id_set) into lnIdSet from act_temp; + IF lcSetNuScrie IS NOT NULL and lnIdSet is not null THEN + SELECT MAX(UPPER(SITUATII)) + into lcSituatiiNuScrie + FROM (SELECT GETWORDNUM(SET_SITUATII, 1, '|') AS ID_SET, + GETWORDNUM(SET_SITUATII, 2, '|') AS SITUATII + FROM (SELECT getwordnum(lcSetNuScrie, B.RAND, ';') AS SET_SITUATII + FROM DUAL A, + (SELECT ROWNUM AS RAND + FROM USER_OBJECTS + WHERE ROWNUM < 100) B) + WHERE SET_SITUATII IS NOT NULL) + WHERE ID_SET = to_char(lnIdSet); + if lcSituatiiNuScrie LIKE '%BV%' then + lnScrieBV := 0; + end if; + if lcSituatiiNuScrie LIKE '%BP%' then + lnScrieBP := 0; + end if; + if lcSituatiiNuScrie LIKE '%IP%' then + lnScrieIP := 0; + end if; + if lcSituatiiNuScrie LIKE '%TVA%' then + lnScrieTVA := 0; + end if; + if lcSituatiiNuScrie LIKE '%STOC%' then + lnScrieSTOC := 0; + end if; + END IF; + + MERGE INTO TABELE_VALIDARE A + USING (select c.tabel, + lnAn as an, + lnLuna as luna, + cal.an as can, + cal.luna as cluna, + c.cont, + c.id_gestiune, + case + when lnAn = cal.an and lnLuna = cal.luna then + sysdate + else + cast(null as date) + end as dultima_operatie, + case + when (lnAn = cal.an and lnLuna = cal.luna) and + (TABEL = 'BAL' AND lnScrieBV = 1) THEN + cast(null as date) + when (lnAn = cal.an and lnLuna = cal.luna) and + (TABEL = 'BALANTA_PARTENERI' AND lnScrieBP = 1) THEN + cast(null as date) + when (lnAn = cal.an and lnLuna = cal.luna) and + (TABEL = 'IREG_PARTENERI' AND lnScrieIP = 1) THEN + cast(null as date) + when (lnAn = cal.an and lnLuna = cal.luna) and + (TABEL = 'JV2007' AND lnScrieTVA = 1) THEN + cast(null as date) + when (lnAn = cal.an and lnLuna = cal.luna) and + (TABEL = 'JC2007' AND lnScrieTVA = 1) THEN + cast(null as date) + when (lnAn = cal.an and lnLuna = cal.luna) and + (TABEL = 'STOC' AND lnScrieSTOC = 1) THEN + cast(null as date) + when (lnAn = cal.an and lnLuna = cal.luna) and + (TABEL = 'STOC_OBINV' AND lnScrieSTOC = 1) THEN + cast(null as date) + else + sysdate + end as dinvalidat + from (WITH cContAct as (SELECT SCD AS CONT, ID_JTVA_COLOANA + FROM ACT_TEMP + UNION + SELECT SCC AS CONT, ID_JTVA_COLOANA + FROM ACT_TEMP), cContStoc as (SELECT DISTINCT '' AS CONT, + ID_GESTIUNE + FROM RUL_TEMP), cContStocO as (SELECT DISTINCT '' AS CONT, + ID_GESTIUNE + FROM Rul_Temp_Obinv) + SELECT DISTINCT 'BAL' AS tabel, + '' as CONT, + CAST(NULL AS NUMBER) AS ID_GESTIUNE + FROM cContAct B + UNION + SELECT DISTINCT 'BALANTA_PARTENERI' AS tabel, + B.CONT, + CAST(NULL AS NUMBER) AS ID_GESTIUNE + FROM cContAct B + where b.cont in (select cont from config_cont_ireg) + UNION + SELECT DISTINCT 'IREG_PARTENERI' AS tabel, + B.CONT, + CAST(NULL AS NUMBER) AS ID_GESTIUNE + FROM cContAct B + where b.cont in (select cont + from config_cont_ireg + where cu_inregistrari = 1) + UNION + SELECT DISTINCT 'JV2007' AS tabel, + '' AS CONT, + CAST(NULL AS NUMBER) AS ID_GESTIUNE + FROM cContAct B + WHERE ID_JTVA_COLOANA IN + (SELECT ID_JTVA_COLOANA + FROM JTVA_COLOANE + WHERE JV = 1) + UNION + SELECT DISTINCT 'JC2007' AS tabel, + '' AS CONT, + CAST(NULL AS NUMBER) AS ID_GESTIUNE + FROM cContAct B + WHERE ID_JTVA_COLOANA IN + (SELECT ID_JTVA_COLOANA + FROM JTVA_COLOANE + WHERE JC = 1) + UNION + SELECT DISTINCT 'STOC' AS tabel, + '' as CONT, + B.ID_GESTIUNE + FROM cContStoc B + UNION + SELECT DISTINCT 'STOC_OBINV' AS tabel, + '' as CONT, + CAST(NULL AS NUMBER) AS ID_GESTIUNE + FROM cContStocO B) c + join calendar cal + on cal.an * 12 + cal.luna >= lnAn * 12 + lnLuna + ) D + ON (A.TABEL = d.TABEL AND A.AN = D.cAN AND A.LUNA = D.cLUNA AND nvl(A.CONT, 'X') = NVL(D.CONT, 'X') AND NVL(A.ID_GESTIUNE, 0) = NVL(D.ID_GESTIUNE, 0)) + WHEN NOT MATCHED THEN + INSERT + (tabel, + an, + luna, + cont, + id_gestiune, + dultima_operatie, + dinvalidat, + id_util_invalidare, + explicatie) + values + (d.tabel, + d.can, + d.cluna, + d.cont, + d.id_gestiune, + d.dultima_operatie, + d.dinvalidat, + lnIdUtil, + lpad(tnLuna, 2, '0') || '/' || tnAn) + WHEN MATCHED THEN + UPDATE + set a.dultima_operatie = nvl(d.dultima_operatie, + a.dultima_operatie), + a.dinvalidat = nvl(d.dinvalidat, a.dinvalidat), + a.id_util_invalidare = lnIdUtil, + a.explicatie = lpad(tnLuna, 2, '0') || '/' || tnAn; + END IF; -- tcTabel is not null + END VALIDARE_INVALIDARE; + + -- MARCHEAZA INREGISTRARILE CA VALIDATE + PROCEDURE VALIDAREINREGISTRARI(tnAn IN act.an%type, + tnLuna act.luna%type, + tnIdUtil act.id_Utilv%type, + tnCod act.cod%type) IS + lnDreptValidare number(10) := 0; + lnBlocatROACONT NUMBER(1) := 0; + lnBlocatROAGEST NUMBER(1) := 0; + lnInchis number(1) := 0; + BEGIN + + PACK_FIRMA.IS_LUNA_BLOCATA(user, + pack_sesiune.nIdeROACONT, + tnAn, + tnLuna, + lnBlocatROACONT); + -- PACK_FIRMA.IS_LUNA_BLOCATA(tcS, pack_sesiune.nIdeROAGEST, tnAn, tnLuna, lnBlocatROAGEST); + lnInchis := lnBlocatROACONT + lnBlocatROAGEST; + + if lnInchis = 1 then + goto sfarsit; + end if; + + SELECT CONTAFIN_ORACLE.PACK_DREPTURI.UtilHasValidare(pack_contafin.GET_ID_FIRMA(), + tnIdUtil, + 'DREPTVALIDARE') + INTO lnDreptValidare + FROM DUAL; + + if nvl(lnDreptValidare, 0) > 0 then + UPDATE ACT + SET VALIDAT = 1, ID_UTILV = tnIdUtil, DATAORAV = SYSDATE + WHERE AN = tnAn + and LUNA = tnLuna + and COD = tnCod + and NVL(STERS, 0) = 0; + else + RAISE_APPLICATION_ERROR(-20000, + 'Nu aveti drepturi pentru validarea inregistrarilor'); + end if; + + <> + null; + END VALIDAREINREGISTRARI; + --------------------------------------------------------------------------------------- + procedure EXECUTA_SCRIE_TVA(V_GCS VARCHAR2, + tcNumeTabel varchar2, + tnProcTvaStR number, + tnProcTvaRedR number, + tcCorespDTva varchar2, + tcCorespDBaza varchar2, + tcCorespCTva varchar2, + tcCorespCBaza varchar2, + tcContTva varchar2, + tcExceptii varchar2, + tnAn number, + tnLuna number, + tnScrie number) IS + + cursor c_DOCUMENTE is + select distinct nvl(ID_FACT, 0) as id_fact, nract, dataact + from act_temp; + cLinieD c_DOCUMENTE%rowtype; + + tnProcTvaSt act_temp.proc_tva%Type := tnProcTvaStR; + tnProcTvaRed act_temp.proc_tva%Type := tnProcTvaRedR; + v_sumaTVA act_temp.suma%type := 0; + V_LISTA_CAMPURI varchar2(5000); + + BEGIN + V_LISTA_CAMPURI := pack_contafin.LISTA_CAMPURI(USER, 'ACT_temp_ireg'); + -- citesc cota tva standard si redus din cote_tva + BEGIN + EXECUTE IMMEDIATE 'SELECT MAX(proc_tva) from ' || V_GCS || + '.cote_tva + where an = :1 and luna = :2 and descriere like :3' + INTO tnProcTvaSt + USING tnAn, tnLuna, '%STANDARD%'; + EXCEPTION + WHEN OTHERS THEN + tnProcTvaSt := tnProcTvaStR; + END; + IF tnProcTvaSt IS NULL THEN + tnProcTvaSt := tnProcTvaStR; + END IF; + + BEGIN + EXECUTE IMMEDIATE 'SELECT MAX(proc_tva) from ' || V_GCS || + '.cote_tva + where an = :1 and luna = :2 and descriere like :3' + INTO tnProcTvaRed + USING tnAn, tnLuna, '%REDUS%'; + EXCEPTION + WHEN OTHERS THEN + tnProcTvaRed := tnProcTvaRedR; + END; + IF tnProcTvaRed IS NULL THEN + tnProcTvaRed := tnProcTvaRedR; + END IF; + + open c_DOCUMENTE; + fetch c_DOCUMENTE + into cLinieD; + + while c_DOCUMENTE%found loop + + delete from act_temp_ireg; + + execute immediate 'INSERT INTO ACT_TEMP_IREG (' || v_lista_campuri || + ') SELECT ' || v_lista_campuri || + ' from act_temp where id_fact = :1 and nract = :2 and dataact = :3' + using cLinieD.id_fact, cLinieD.nract, cLinieD.dataact; + + -- 07.12.2006 + -- MARIUS.MUTU + -- AM CALCULAT SUMA TVA PENTRU FIECARE COTA TVA IN AFARA DE 0 SAU 1 (NEIMPOZABIL) + -- APOI SCAD SUMA DIN PRIMA SUMA CU TVA CU ACEA COTA DE TVA + -- temporar, pt regularizare facturi nesosite, neintocmite + FOR cota_tva in (select distinct proc_tva + from act_temp_ireg + where proc_tva not in (0, 1)) LOOP + begin + select suma + INTO v_sumaTVA + from act_temp_ireg + where proc_tva = cota_tva.proc_tva + and ((scd = '4426' and scc = '4428') or + (scd = '4428' and scc = '4427')); + + EXCEPTION + WHEN OTHERS THEN + v_sumaTVA := 0; + end; + -- 22.11.2006 + -- MARIUS.MUTU + -- ROWNUM = 1 SA NU SE SCADA TVA-UL DE MAI MULTE ORI + -- dbms_output.put_line('suma TVA : '||cLinieD.nract || ', ' || v_sumaTVA); + UPDATE act_temp_ireg + set suma = suma - v_sumaTVA + where rownum = 1 + and ((scd = '4111' and scc = '418') or + (scd = '408' and scc = '401')) + and proc_tva = cota_tva.proc_tva; + END LOOP; + + ----- + + pack_contafin.SCRIE2_TVA(V_GCS, + tcNumeTabel, + tnProcTvaSt, + tnProcTvaRed, + tcCorespDTva, + tcCorespDBaza, + tcCorespCTva, + tcCorespCBaza, + tcContTva, + tcExceptii, + tnAn, + tnLuna, + tnScrie, + cLinieD.id_fact, + cLinieD.nract, + cLinieD.dataact); + fetch c_DOCUMENTE + into cLinieD; + end loop; + close c_DOCUMENTE; + + execute immediate 'delete from act_temp_ireg'; + + END EXECUTA_SCRIE_TVA; + --------------------------------------------------------------- + procedure SCRIE2_TVA(V_GCS VARCHAR2, + tcNumeTabel varchar2, + tnProcTvaStR number, + tnProcTvaRedR number, + tcCorespDTva varchar2, + tcCorespDBaza varchar2, + tcCorespCTva varchar2, + tcCorespCBaza varchar2, + tcContTva varchar2, + tcExceptii varchar2, + tnAn number, + tnLuna number, + tnScrie number, + tnIdFact number, + tnNrAct number, + tdDataAct date) IS + + lnAct number(20); + lnCumpVanz number(10); + + lnSumaNeimpozab number(24, 4); + lnSumaTvam number(24, 4); + lnSumaTvai number(24, 4); + lnSumaTotalm number(24, 4); + lnSumaTotali number(24, 4); + + lcAn varchar2(4); + lcLuna varchar2(2); + lcIdTabel varchar2(20); + + lnScrie_tva number(1); + V_APARITII_scd number(2) := 0; + V_APARITII_scc number(2) := 0; + V_APARITII number(2) := 0; + + lcContCoresp varchar2(3); + lcCont varchar2(3); + lcContulCoresp varchar2(4); + + lcContul varchar2(4); + lcCorespTva varchar2(1000); + lcCorespBaza varchar2(1000); + lcCorespondente varchar2(1000); + ldDataact date; + ldDataireg date; + lnNract number(20); + lnId_fdoc number(5); + lnCod number(20); + lnId_part number(10); + lcScd varchar2(4); + lcScc varchar2(4); + lnNeimpozab number(24, 4); + ignore number(1); + lnGasit number(1) := 0; + lnGasitPart number(1) := 0; + lnIdRand number(35); + + cursor c_act_temp is + select * + from act_temp_ireg + where id_fact = tnIdFact + and nract = tnNrAct + and dataact = tdDataAct + order by id_act; + + cLinie c_act_temp%rowtype; + + tnProcTvaSt act_temp.proc_tva%Type := tnProcTvaStR; + tnProcTvaRed act_temp.proc_tva%Type := tnProcTvaRedR; + + begin + lcAn := to_char(tnAn); + lcLuna := TO_CHAR(tnLuna); + lnScrie_tva := 0; + + /* -- citesc cota tva standard si redus din cote_tva + BEGIN + EXECUTE IMMEDIATE 'SELECT MAX(proc_tva) from ' || V_GCS || + '.cote_tva + where an = :1 and luna = :2 and descriere like :3' + INTO tnProcTvaSt + USING tnAn, tnLuna, '%STANDARD%'; + EXCEPTION + WHEN OTHERS THEN + tnProcTvaSt := tnProcTvaStR; + END; + IF tnProcTvaSt IS NULL THEN + tnProcTvaSt := tnProcTvaStR; + END IF;*/ + + /* BEGIN + EXECUTE IMMEDIATE 'SELECT MAX(proc_tva) from ' || V_GCS || + '.cote_tva + where an = :1 and luna = :2 and descriere like :3' + INTO tnProcTvaRed + USING tnAn, tnLuna, '%REDUS%'; + EXCEPTION + WHEN OTHERS THEN + tnProcTvaRed := tnProcTvaRedR; + END; + IF tnProcTvaRed IS NULL THEN + tnProcTvaRed := tnProcTvaRedR; + END IF;*/ + + lnAct := dbms_sql.open_cursor; + lnCumpVanz := dbms_sql.open_cursor; + lnId_part := 0; + + if tcContTva = '4426' then + execute immediate 'SELECT COUNT(*) FROM ACT_TEMP_ireg WHERE (SCD = :1 OR (proc_tva <> 0 and to_number(scc) <> 4427 and to_number(scc) in (' || + tcCorespDBaza || ') and to_number(scd) not in (' || + tcCorespDBaza || + ')) OR (proc_tva<>0 and to_number(scd) in (' || + tcCorespDBaza || ') and to_number(scc) in (' || + tcExceptii || + '))) and id_fact = :2 and nract = :3 and dataact = :4' + into V_APARITII_scd + using tcContTVA, tnIdFact, tnNrAct, tdDataAct; + else + V_APARITII_scd := 0; + end if; + if tcContTva = '4427' then + execute immediate 'SELECT COUNT(*) FROM ACT_TEMP_ireg WHERE (SCC = :1 OR (proc_tva <> 0 and to_number(scd) <> 4426 and to_number(scd) in (' || + tcCorespCBaza || ') and to_number(scc) not in (' || + tcCorespCBaza || + ')) OR (proc_tva<>0 and to_number(scc) in (' || + tcCorespCBaza || ') and to_number(scd) in (' || + tcExceptii || + '))) and id_fact = :2 and nract = :3 and dataact = :4' + into V_APARITII_scc + using tcContTVA, tnIdFact, tnNrAct, tdDataAct; + else + V_APARITII_scc := 0; + end if; + + if V_APARITII_scd > 0 then + -- 4426 + lcContCoresp := 'scc'; + lcCont := 'scd'; + lnScrie_tva := 1; + lcCorespTVA := tcCorespDTVA; + LcCorespBaza := tcCorespDBaza; + end if; + + if V_APARITII_scc > 0 then + -- 4427 + lcContCoresp := 'scd'; + lcCont := 'scc'; + lnScrie_tva := 1; + lcCorespTVA := tcCorespCTVA; + lcCorespBaza := tcCorespCBaza; + end if; + + if lnScrie_tva = 1 then + open c_act_temp; + fetch c_act_temp + into cLinie; + while c_act_temp%found loop + + if lcCont = 'scd' then + -- 4426 + lcCorespondente := tcCorespDBaza || ',' || tcExceptii; + lcContul := cLinie.scd; + lcContulCoresp := cLinie.scc; + else + -- 4427 + lcCorespondente := tcCorespCBaza || ',' || tcExceptii; + lcContul := cLinie.scc; + lcContulCoresp := cLinie.scd; + end if; + lnNeimpozab := cLinie.proc_tva; + + -- dbms_output.put_line(cLinie.nract || ',' || lnNeimpozab || ',' || + -- lcContulCoresp || ',' || lcCorespondente); + + if (lcContul = tcContTVA OR + instr(lcCorespondente, lcContulCoresp) > 0) and lnNeimpozab <> 0 then + -- dbms_output.put_line(cLinie.nract || ' a intrat'); + + if lnGasit = 0 then + lnGasit := 1; + /* lnNract := cLinie.nract; + ldDataact := cLinie.dataact;*/ + lcScd := cLinie.scd; + lcScc := cLinie.scc; + lnCod := cLinie.cod; + ldDataireg := cLinie.dataireg; + lnId_fdoc := cLinie.id_fdoc; + end if; + + if lcCont = 'scd' then + -- 4426 + if instr(tcCorespDBaza, lcContulCoresp) > 0 /*and lcContul <> tcContTva*/ + then + lnId_part := cLinie.id_partc; + lnGasitPart := 1; + elsif instr(tcCorespDBaza, lcContul) > 0 and + instr(tcExceptii, lcContulCoresp) > 0 then + lnId_part := cLinie.id_partd; + lnGasitPart := 1; + + end if; + else + --4427 + if instr(tcCorespCBaza, lcContulCoresp) > 0 /*and lcContul <> tcContTva*/ + then + if instr(tcExceptii, lcContul) > 0 then + -- 419 + lcScd := lcContul; + lnId_part := cLinie.id_partc; + lnGasitPart := 1; + else + lnId_part := cLinie.id_partd; + lnGasitPart := 1; + end if; + elsif instr(tcCorespCBaza, lcContul) > 0 and + instr(tcExceptii, lcContulCoresp) > 0 then + lnId_part := cLinie.id_partc; + lnGasitPart := 1; + end if; + + end if; + + end if; + if lnGasit = 1 and lnGasitPart = 1 then + exit; + end if; + fetch c_act_temp + into cLinie; + + end loop; + close c_act_temp; + + if lnGasit <> 1 then + /* lnNract := cLinie.nract; + ldDataact := cLinie.dataact;*/ + lcScd := cLinie.scd; + lcScc := cLinie.scc; + lnCod := cLinie.cod; + ldDataireg := cLinie.dataireg; + lnId_fdoc := cLinie.id_fdoc; + end if; + + lnNract := tnNrAct; + ldDataact := tdDataAct; + lcIdTabel := 'Id_' || tcNumeTabel; + + execute immediate 'SELECT COUNT(*), min(' || lcIdTabel || ') FROM ' || + V_GCS || '.' || tcNumeTabel || + ' WHERE an = :1 and luna = :2 and ID_PART = :3 AND NRACT =:4 AND DATAACT =:5' + into v_aparitii, lnIdRand + using tnAn, tnLuna, lnId_part, lnNract, ldDataact; + + -- UPDATE Cump, Vanz + if V_APARITII = 0 and tnscrie <> 2 then + EXECUTE IMMEDIATE 'INSERT INTO ' || V_GCS || '.' || tcNumeTabel || + '(LUNA, AN, scd, scc, dataact, ID_PART, nract, cod, dataireg, id_fdoc) + VALUES (:1, :2, :3, :4, :5, :6, :7, :8, :9, :10)' + USING tnLuna, tnAn, lcScd, LcScc, ldDataact, lnId_part, lnNract, lnCod, ldDataireg, lnId_fdoc; + + if tnScrie = 2 then + return; + end if; + + end if; + + DBMS_SQL.PARSE(lnCumpVanz, + 'update ' || v_gcs || '.' || tcNumeTabel || + ' set neimpozab = neimpozab + :lnSumaNeimpozab, tvam = tvam + :lnSumaTvaM, tvai = tvai + :lnSumaTvaI,' || + 'totftvam = totftvam + :lnSumaTotalM - :lnSumaTvaM, totftvai = totftvai + :lnSumaTotalI - :lnSumaTvaI ' || + 'where an = ' || lcAn || ' and luna = ' || lcLuna || + 'and dataact = :ldDataact and nract = :lnNract and id_part = :lnId_part', + DBMS_SQL.native); + -- 'totctva = totftvam + totftvai + tvam + tvai + neimpozab' || + DBMS_SQL.PARSE(lnAct, + 'select sum(suma) as neimpozab, sum(0.0000) as tvam, sum(0.0000) as tvai, sum(0.0000) as Totctvam, sum(0.0000) as Totctvai + from act_temp_ireg where to_number(' || + lcContCoresp || ') in (' || lcCorespBaza || + ') and not to_number(' || lcCont || ') in (' || + lcCorespBaza || ') and proc_tva = 1 and id_fact = ' || + tnIdFact || ' group by an UNION ' || + 'select sum(-suma) as neimpozab, sum(0.0000) as tvam, sum(0.0000) as tvai, sum(0.0000) as Totctvam, sum(0.0000) as Totctvai + from act_temp_ireg where to_number(' || + lcContCoresp || ') in (' || tcExceptii || + ') and to_number(' || lcCont || ') in (' || + lcCorespBaza || ') and proc_tva = 1 and id_fact = ' || + tnIdFact || ' group by an ' || + 'UNION select sum(0.0000) as neimpozab, sum(suma) as tvam, sum(0.0000) as tvai, sum(0.0000) as Totctvam, sum(0.0000) as Totctvai + from act_temp_ireg where to_number(' || + lcCont || ') = ' || tcContTva || ' and proc_tva = ' || + tnProcTvaSt || ' and id_fact = ' || tnIdFact || + ' group by an UNION ' || + 'select sum(0.0000) as neimpozab, sum(0.0000) as tvam, sum(suma) as tvai, sum(0.0000) as Totctvam, sum(0.0000) as Totctvai + from act_temp_ireg where to_number(' || + lcCont || ') = ' || tcContTva || ' and proc_tva = ' || + tnProcTvaRed || ' and id_fact = ' || tnIdFact || + ' group by an UNION ' || + 'select sum(0.0000) as neimpozab, sum(0.0000) as tvam, sum(0.0000) as tvai, sum(suma) as Totctvam, sum(0.0000) as Totctvai + from act_temp_ireg where ((to_number(' || + lcContCoresp || ') in (' || lcCorespBaza || + ') and not to_number(' || lcCont || ') in (' || + lcCorespBaza || ')) OR ' || lcCont || '= ' || + tcContTva || ') and proc_tva = ' || tnProcTvaSt || + ' and id_fact = ' || tnIdFact || ' group by an UNION ' || + 'select sum(0.0000) as neimpozab, sum(0.0000) as tvam, sum(0.0000) as tvai, sum(-suma) as Totctvam, sum(0.0000) as Totctvai + from act_temp_ireg where to_number(' || + lcContCoresp || ') in (' || tcExceptii || + ') and to_number(' || lcCont || ') in (' || + lcCorespBaza || ') and proc_tva = ' || tnProcTvaSt || + ' and id_fact = ' || tnIdFact || ' group by an UNION ' || + 'select sum(0.0000) as neimpozab, sum(0.0000) as tvam, sum(0.0000) as tvai, sum(0.0000) as Totctvam, sum(suma) as Totctvai + from act_temp_ireg where ((to_number(' || + lcContCoresp || ') in (' || lcCorespBaza || + ') and not to_number(' || lcCont || ') in (' || + lcCorespBaza || ')) OR ' || lcCont || '= ' || + tcContTva || ') and proc_tva = ' || tnProcTvaRed || + ' and id_fact = ' || tnIdFact || ' group by an UNION ' || + 'select sum(0.0000) as neimpozab, sum(0.0000) as tvam, sum(0.0000) as tvai, sum(0.0000) as Totctvam, sum(-suma) as Totctvai + from act_temp_ireg where to_number(' || + lcContCoresp || ') in (' || tcExceptii || + ') and to_number(' || lcCont || ') in (' || + lcCorespBaza || ') and proc_tva = ' || tnProcTvaRed || + ' group by an ', + DBMS_SQL.native); + + DBMS_SQL.DEFINE_COLUMN(lnAct, 1, lnSumaNeimpozab); + DBMS_SQL.DEFINE_COLUMN(lnAct, 2, lnSumaTvam); + DBMS_SQL.DEFINE_COLUMN(lnAct, 3, lnSumaTvai); + DBMS_SQL.DEFINE_COLUMN(lnAct, 4, lnSumaTotalm); + DBMS_SQL.DEFINE_COLUMN(lnAct, 5, lnSumaTotali); + ignore := DBMS_SQL.EXECUTE(lnAct); + + LOOP + IF DBMS_SQL.FETCH_ROWS(lnAct) > 0 THEN + -- get column values of the row + DBMS_SQL.COLUMN_VALUE(lnAct, 1, lnSumaNeimpozab); + DBMS_SQL.COLUMN_VALUE(lnAct, 2, lnSumaTvam); + DBMS_SQL.COLUMN_VALUE(lnAct, 3, lnSumaTvai); + DBMS_SQL.COLUMN_VALUE(lnAct, 4, lnSumaTotalm); + DBMS_SQL.COLUMN_VALUE(lnAct, 5, lnSumaTotali); + + DBMS_SQL.BIND_VARIABLE(lnCumpVanz, + ':lnSumaNeimpozab', + lnSumaNeimpozab); + DBMS_SQL.BIND_VARIABLE(lnCumpVanz, ':lnSumaTvam', lnSumaTvam); + DBMS_SQL.BIND_VARIABLE(lnCumpVanz, ':lnSumaTvai', lnSumaTvai); + DBMS_SQL.BIND_VARIABLE(lnCumpVanz, ':lnSumaTotalm', lnSumaTotalm); + DBMS_SQL.BIND_VARIABLE(lnCumpVanz, ':lnSumaTotali', lnSumaTotali); + DBMS_SQL.BIND_VARIABLE(lnCumpVanz, ':ldDataact', ldDataact); + DBMS_SQL.BIND_VARIABLE(lnCumpVanz, ':lnNract', lnNract); + DBMS_SQL.BIND_VARIABLE(lnCumpVanz, ':lnId_part', lnId_part); + + ignore := DBMS_SQL.EXECUTE(lnCumpVanz); + + execute immediate 'update ' || v_gcs || '.' || tcNumeTabel || + ' set totctva = totftvam + totftvai + tvam + tvai + neimpozab ' || + 'where an = ' || lcAn || ' and luna = ' || + lcLuna || + 'and dataact = :1 and nract = :2 and id_part = :3' + using ldDataact, lnNract, lnId_part; + + -- if tnscrie = 2 then + -- sterg inregistrarile cu suma 0 + execute immediate 'delete from ' || v_gcs || '.' || tcNumeTabel || + ' where totctva = 0 and totftvam = 0 and totftvai = 0 and tvam = 0 and tvai = 0 and neimpozab = 0 and ' || + lcIdTabel || ' = :1' + using lnIdRand; + -- end if; + + else + + exit; + + end if; + + end loop; + + end if; -- a gasit TVA + + dbms_sql.close_cursor(lnAct); + dbms_sql.close_cursor(lnCumpVanz); + + end scrie2_tva; + + --------------------------------------------------------------- + PROCEDURE STERGE_DIN_ACT(V_GCS VARCHAR2, + tnAn in number, + tnLuna in number, + tnCod in number, + tnId_utils in number, + tnTip IN NUMBER) is + + -- tnTip : 0 = modificare ; 1 = stergere + LD_DATAORA ACT_TEMP.DATAORA%TYPE; + LC_UPDATE VARCHAR2(10000) := ''; + LNID_UTIL ACT_TEMP.ID_UTIL%TYPE; + lnTip number(1) := 0; + lnId_Fact act_temp.id_fact%Type := 0; + BEGIN + if tnTip is not null then + lnTip := tnTip; + end if; + LD_DATAORA := PACK_CONTAFIN.GET_DATAORA(); + LNID_UTIL := PACK_CONTAFIN.GET_IDUTIL(); + + UPDATE /*+ index(ACT IDX_COD) */ ACT + SET STERS = 1, DATAORAS = LD_DATAORA, ID_UTILS = lnId_util + WHERE COD = tnCod + and an = tnAn + and luna = tnLuna; + + IF lnTip = 1 THEN + UPDATE DOCUMENTE + SET STERS = 1, ID_UTILS = LNID_UTIL, DATAORAS = LD_DATAORA + WHERE ID_DOC IN + (SELECT /*+ index(ACT IDX_COD) */ + DISTINCT ID_FACT + FROM ACT + WHERE COD = tnCod + and an = tnAn + and luna = tnLuna + AND ID_FACT <> 0 + and ID_SET not in (90501, 90021) + AND NOT (SCD = '4426' AND SCC = '4428') + AND NOT (SCD = '4428' AND SCC = '4427')); + END IF; + + update act_temp set suma = -suma, suma_val = -suma_val; + + END STERGE_DIN_ACT; + --------------------------------------------------------------- + PROCEDURE STERGE_DIN_RUL(V_GCS VARCHAR2, + tnAn in number, + tnLuna in number, + tnCod in number, + tnId_utils in number) is + LD_DATAORA RUL_TEMP.DATAORA%TYPE := PACK_CONTAFIN.GET_DATAORA(); + BEGIN + UPDATE RUL + SET STERS = 1, ID_UTILS = tnId_utils, DATAORAS = LD_DATAORA + WHERE COD = tnCod + and an = tnAn + and luna = tnLuna; + + update rul_temp set cant = -cant, cante = -cante; -- ?? + + END STERGE_DIN_RUL; + --------------------------------------------------------------- + PROCEDURE STERGE_DIN_RUL_OBINV(V_GCS VARCHAR2, + tnAn in number, + tnLuna in number, + tnCod in number, + tnId_utils in number) is + LD_DATAORA RUL_TEMP.DATAORA%TYPE := PACK_CONTAFIN.GET_DATAORA(); + BEGIN + UPDATE RUL_OBINV + SET STERS = 1, ID_UTILS = tnId_utils, DATAORAS = LD_DATAORA + WHERE COD = tnCod + and an = tnAn + and luna = tnLuna; + + update rul_temp_OBINV set cant = -cant, cante = -cante; -- ?? + + END STERGE_DIN_RUL_OBINV; + --------------------------------------------------------------- + ------------------------------------------------------------------------------------ + PROCEDURE SCRIE_IN_RUL(tcS IN VARCHAR2) IS + V_LISTA_CAMPURI VARCHAR2(2000) := ''; + + LN_COD NUMBER(20) := 0; + lnIdFact NUMBER(20) := 0; + lnCuFacturi NUMBER(5) := 0; + LD_DATAORA DATE; + LC_UPDATE VARCHAR2(100) := ''; + LC_INSERT VARCHAR2(10000) := ''; + lnId_Util act_temp.id_util%Type; + LNAN ACT_TEMP.AN%TYPE; + LNLUNA ACT_TEMP.LUNA%TYPE; + lnIdSucursala act.id_sucursala%type; + lnProcTvaStandard act_temp.proc_tva%TYPE; + lcRulajFurnizor OPTIUNI.VARVALUE%TYPE; + lnRulajFurnizor NUMBER(1) := 0; + lnIdFurnizor nom_parteneri.id_part%type; + lnIdRulAux rul_auxiliar.id_rul_aux%type; + BEGIN + lnIdSucursala := PACK_CONTAFIN.GET_ID_SUCURSALA(); + + V_LISTA_CAMPURI := pack_contafin.LISTA_CAMPURI(tcS, 'RUL'); + + LN_COD := pack_contafin.GET_COD(); + LD_DATAORA := pack_contafin.GET_DATAORA(); + lnId_Util := pack_contafin.GET_IDUTIL(); + LNAN := pack_sesiune.GETAN(); + LNLUNA := pack_sesiune.GETLUNA(); + lnProcTvaStandard := pack_contafin.getCotaTVAStandard(LNLUNA, LNAN); + + lcRulajFurnizor := PACK_SESIUNE.getOptiuneFirma('RULAJFURNIZOR'); + IF lcRulajFurnizor IS NULL THEN + lnRulajFurnizor := 0; + ELSE + lnRulajFurnizor := to_number(lcRulajFurnizor); + END IF; + + -- 25.10.2006 + -- mutu.marius + -- in cazul factura achizitie + plata - se generau 2 id_fact, iar in rulaj se ducea ultimul id_fact (plata) + -- probleme la listare - iau doar inregistrarile fara trezorerie ('5') + -- lnIdFact := get_idFact(); + select min(id_fact) + into lnIdFact + from act_temp + where substr(scd, 1, 1) <> '5' + and substr(scc, 1, 1) <> '5'; + + if nvl(pack_contafin.nSuprascriereCod, 1) = 1 then + UPDATE RUL_TEMP + SET COD = LN_COD, + DATAORA = LD_DATAORA, + ID_UTIL = lnId_Util, + AN = lnAn, + LUNA = lnLuna; + + -- LA ACHIZITIE DIN IMPORT SE PUNEA ALT ID_FACT DECAT LA PRIMA FACTURA CARE AVEA NNIR <> 0 + MERGE INTO RUL_TEMP A + USING (SELECT DISTINCT NRACT, COD, ID_FACT, NNIR + FROM ACT_TEMP + WHERE NVL(ID_FACT, 0) <> 0 + AND substr(scd, 1, 1) <> '5' + and substr(scc, 1, 1) <> '5') B + ON (A.NRACT = B.NRACT AND A.COD = B.COD AND A.NNIR = B.NNIR) + WHEN MATCHED THEN + UPDATE SET A.ID_FACT = B.ID_FACT; + + UPDATE RUL_TEMP SET ID_FACT = lnIdFact WHERE NVL(ID_FACT,0) = 0; + + /*if lnIdFact <> 0 and lnIdFact is not null then + -- la modificare nu setez id_fact + -- UPDATE RUL_TEMP SET ID_FACT = lnIdFact; + end if;*/ + + else + if nvl(pack_contafin.nSuprascriereAnLuna, 1) = 1 then + UPDATE RUL_TEMP + SET DATAORA = LD_DATAORA, + ID_UTIL = lnId_Util, + AN = lnAn, + LUNA = lnLuna; + else + UPDATE RUL_TEMP SET DATAORA = LD_DATAORA, ID_UTIL = lnId_Util; + end if; + + MERGE INTO RUL_TEMP A + USING (SELECT DISTINCT NRACT, COD, ID_FACT, NNIR FROM ACT_TEMP) B + ON (A.NRACT = B.NRACT AND A.COD = B.COD AND A.NNIR = B.NNIR) + WHEN MATCHED THEN + UPDATE SET A.ID_FACT = B.ID_FACT; + end if; + + -- 23.02.2010 + -- Nu se suprascrie id_sucursala completat deja in act_temp + UPDATE RUL_TEMP + SET ID_SUCURSALA = lnIdSucursala + WHERE NVL(ID_SUCURSALA, 0) = 0; + -- 23.02.2010 ^ + + UPDATE RUL_TEMP SET DATAIN = dataact WHERE CANT <> 0; + UPDATE RUL_TEMP SET DATAOUT = dataact WHERE CANTE <> 0; + UPDATE RUL_TEMP SET ID_RUL_AUX = NULL WHERE ID_RUL_AUX = 0; + + -- Completare RUL.ID_RUL_AUX SI RUL_AUX.ID_FURNIZOR la intrari daca este setata optiunea + if lnRulajFurnizor = 1 then + SELECT max(id_partc) + into lnIdFurnizor + from act_temp + where scc in ('401', '404', '408', '462') + and id_fact in (select id_fact from rul_temp where cant <> 0); + + if lnIdFurnizor is not null then + lnIdRulAux := GetRulajAuxiliarFurnizor(lnIdFurnizor); + update rul_temp set id_rul_aux = lnIdRulAux; + end if; + end if; + + LC_INSERT := 'INSERT INTO ' || tcS || '.RUL (' || V_LISTA_CAMPURI || + ') (SELECT ' || V_LISTA_CAMPURI || ' FROM RUL_TEMP)'; + + -- LC_INSERT := 'INSERT INTO ' || tcS || '.RUL (SELECT ' || V_LISTA_CAMPURI || ' FROM RUL_TEMP)'; + EXECUTE IMMEDIATE LC_INSERT; + + END SCRIE_IN_RUL; + + ------------------------------------------------------------------------------------ + ------------------------------------------------------------------------------------ + PROCEDURE SCRIE_IN_STOC_OLD(tcS IN VARCHAR2, + tnAn in number, + tnLuna in number, + tnScrie number, + tcTabel in varchar2, + tcIdTabel in varchar2, + tcCondSpec in varchar2) IS + + CURSOR CRS_TEMP IS + SELECT R.*, 00 AS TIPG FROM RUL_TEMP R WHERE 1 = 2; + pCursor tip_ref_cursor; + lnId_Stoc Act_Temp.Id_Act%Type; + lcSelect varchar2(1000); + lcSearcha varchar2(1000); + lcSearchv varchar2(1000); + lnStoca number; + lnStocv number; + item crs_temp%Rowtype; + ignore number := 0; + lnAn act_temp.an%Type := tnAn; + lnLuna act_temp.luna%Type := tnLuna; + lcTabel varchar2(50) := tcTabel; + lcIdTabel varchar2(50) := tcIdTabel; + lcCondSpec varchar2(100) := tcCondSpec; + lcUpdateStoc varchar2(1000); + + lnIdSucursala act.id_sucursala%type; + lcWhereSucursale varchar2(1000); + + BEGIN + lnIdSucursala := PACK_CONTAFIN.GET_ID_SUCURSALA(); + if lnIdSucursala is not null then + lcWhereSucursale := ' and r.id_sucursala = ' || lnIdSucursala; + end if; + + if lcTabel is null then + lcTabel := 'Stoc'; + end if; + if lcIdTabel is null then + lcIdTabel := 'id_Stoc'; + end if; + if tcCondSpec is null then + lcCondSpec := '2=2'; + end if; + + lcSearcha := 'select ' || lcIdTabel || ' from ' || tcs || '.' || + lcTabel || + ' where an = :1 and luna = :2 and id_articol = :3 and id_gestiune = :4 + and cont = :5 and nvl(acont,''XXXX'') = :6 and pret = :7 + and NVL(id_rul_aux,0) = :8 and NVL(serie,''+_'') = :9 + and NVL(pretd,0) = :10 and NVL(id_valuta,0) = :11 + and NVL(LOT,''+_'') = :12 + AND NVL(ADATA_EXPIRARE, to_date(''1900-01-01'',''YYYY-MM-DD'')) = :13 and NVL(id_sucursala, 0) = :14 + AND NVL(ID_LUCRARE_REZ,0) = :15 AND NVL(ID_PART_REZ,0) = :16 AND ' || + lcCondSpec; + lcSearchv := 'select ' || lcIdTabel || ' from ' || tcs || '.' || + lcTabel || + ' where an = :1 and luna = :2 and id_articol = :3 and id_gestiune = :4 + and cont = :5 and NVL(acont,''XXXX'') = :6 and pret = :7 + and NVL(id_rul_aux,0) = :8 and NVL(serie,''+_'') = :9 + and pretv = :10 and tvav = :11 and proc_tvav = :12 + and NVL(pretd,0) = :13 and NVL(id_valuta,0) = :14 + and NVL(LOT,''+_'') = :15 + AND NVL(ADATA_EXPIRARE, to_date(''1900-01-01'',''YYYY-MM-DD'')) = :16 and NVL(id_sucursala, 0) = :17 + AND NVL(ID_LUCRARE_REZ,0) = :18 AND NVL(ID_PART_REZ,0) = :19 AND ' || + lcCondSpec; + IF tnScrie = 1 THEN + -- REFACERE + lnAn := tnAn; + lnLuna := tnLuna; + + lcSelect := 'select r.*,decode(nvl(g.nr_pag,00),6,1,7,1,0) as tipg + from rul r + left join vnom_gestiuni g on r.id_gestiune = g.id_gestiune + where r.an = :1 and r.luna = :2 and substr(r.cont,1,2)<>''80'' and r.sters=0 ' || + lcWhereSucursale; + ELSE + -- SCRIERE + /* lnAn := pack_contafin.GET_AN(); + lnLuna := pack_contafin.GET_LUNA();*/ + lnAn := tnAn; + lnLuna := tnLuna; + + lcSelect := 'select r.*,decode(nvl(g.nr_pag,00),6,1,7,1,0) as tipg + from rul_Temp r + left join vnom_gestiuni g on r.id_gestiune = g.id_gestiune + where r.an = :1 and r.luna = :2 and substr(r.cont,1,2)<>''80'' '; + -- lcSelect := 'select * from Xrul_temp'; + END IF; + + lnStoca := dbms_sql.open_cursor; + lnStocv := dbms_sql.open_cursor; + DBMS_SQL.PARSE(lnStoca, lcSearcha, DBMS_SQL.native); + DBMS_SQL.PARSE(lnStocv, lcSearchv, DBMS_SQL.native); + DBMS_SQL.DEFINE_COLUMN(lnStoca, 1, lnId_Stoc); + DBMS_SQL.DEFINE_COLUMN(lnStocv, 1, lnId_Stoc); + + open pCursor for lcSelect + USING lnAn, lnLuna; + loop + fetch pCursor + into item; + exit when pCursor%notfound; + + item.acont := NVL(item.acont, 'XXXX'); + -- pinfo('item.tva ' || item.tva); + + if item.tipg = 0 then + -- pinfo('tipg = 0 item.tva ' || item.tva); + DBMS_SQL.BIND_VARIABLE(lnStoca, ':1', item.an); + DBMS_SQL.BIND_VARIABLE(lnStoca, ':2', item.luna); + DBMS_SQL.BIND_VARIABLE(lnStoca, ':3', item.id_articol); + DBMS_SQL.BIND_VARIABLE(lnStoca, ':4', item.id_gestiune); + DBMS_SQL.BIND_VARIABLE(lnStoca, ':5', item.cont); + DBMS_SQL.BIND_VARIABLE(lnStoca, ':6', item.acont); + DBMS_SQL.BIND_VARIABLE(lnStoca, ':7', item.pret); + DBMS_SQL.BIND_VARIABLE(lnStoca, ':8', NVL(item.id_rul_aux, 0)); + DBMS_SQL.BIND_VARIABLE(lnStoca, ':9', NVL(item.serie, '+_'), 100); + DBMS_SQL.BIND_VARIABLE(lnStoca, ':10', NVL(item.pretd, 0)); + DBMS_SQL.BIND_VARIABLE(lnStoca, ':11', NVL(item.id_valuta, 0)); + DBMS_SQL.BIND_VARIABLE(lnStoca, ':12', NVL(item.lot, '+_'), 100); + DBMS_SQL.BIND_VARIABLE(lnStoca, + ':13', + NVL(item.adata_expirare, + TO_DATE('1900-01-01', 'YYYY-MM-DD'))); + DBMS_SQL.BIND_VARIABLE(lnStoca, ':14', NVL(item.id_sucursala, 0)); + DBMS_SQL.BIND_VARIABLE(lnStoca, ':15', NVL(item.id_lucrare_rez, 0)); + DBMS_SQL.BIND_VARIABLE(lnStoca, ':16', NVL(item.id_part_rez, 0)); + + ignore := DBMS_SQL.EXECUTE(lnStoca); + + if item.acont = 'XXXX' then + item.acont := ''; + END IF; + IF DBMS_SQL.FETCH_ROWS(lnStoca) > 0 THEN + DBMS_SQL.COLUMN_VALUE(lnStoca, 1, lnId_Stoc); + -- pinfo('tipg = 0, update stoc.id_stoc ' || lnId_Stoc); + -- modificare + lcUpdateStoc := 'UPDATE ' || tcs || '.' || lcTabel || + ' set cant = cant + :1, cante = cante + :2, dataora = :3'; + + if item.dataout is not null and item.cante > 0 then + lcUpdateStoc := lcUpdateStoc || ',dataout = to_date(''' || + to_char(item.dataout, 'DDMMYYYY') || + ''',''DDMMYYYY'')'; + end if; + + if item.datain is not null and item.cant > 0 then + lcUpdateStoc := lcUpdateStoc || ',datain = to_date(''' || + to_char(item.datain, 'DDMMYYYY') || + ''',''DDMMYYYY'')'; + end if; + + lcUpdateStoc := lcUpdateStoc || ' where ' || lcIdTabel || ' = :4'; + + EXECUTE IMMEDIATE lcUpdateStoc + USING item.cant, item.cante, item.dataora, lnId_Stoc; + -- modificare ^ + ELSE + -- pinfo('tipg = 0, insert stoc tva ' || item.tva); + EXECUTE IMMEDIATE 'INSERT INTO ' || tcs || '.' || lcTabel || + ' (an, luna, id_articol, pret, cant, cante, cont, acont, id_gestiune, + dataora, datain, dataout, id_rul_aux,serie,tva,pretd,id_valuta,lot,adata_expirare,id_sucursala,id_lucrare_rez,id_part_rez) + VALUES (:1, :2, :3, :4, :5, :6, :7, :8, :9, :10, :11, :12, :13,:14,:15,:16,:17,:18,:19,:20,:21,:22)' + USING item.an, item.luna, item.id_articol, item.pret, item.cant, item.cante, item.cont, item.acont, item.id_gestiune, item.dataora, item.datain, item.dataout, item.id_rul_aux, item.serie, item.tva, item.pretd, item.id_valuta, item.lot, item.adata_expirare, item.id_sucursala, item.id_lucrare_rez, item.id_part_rez; + END IF; + else + DBMS_SQL.BIND_VARIABLE(lnStocv, ':1', item.an); + DBMS_SQL.BIND_VARIABLE(lnStocv, ':2', item.luna); + DBMS_SQL.BIND_VARIABLE(lnStocv, ':3', item.id_articol); + DBMS_SQL.BIND_VARIABLE(lnStocv, ':4', item.id_gestiune); + DBMS_SQL.BIND_VARIABLE(lnStocv, ':5', item.cont); + DBMS_SQL.BIND_VARIABLE(lnStocv, ':6', item.acont); + DBMS_SQL.BIND_VARIABLE(lnStocv, ':7', item.pret); + DBMS_SQL.BIND_VARIABLE(lnStocv, ':8', NVL(item.id_rul_aux, 0)); + DBMS_SQL.BIND_VARIABLE(lnStocv, ':9', NVL(item.serie, '+_'), 100); + DBMS_SQL.BIND_VARIABLE(lnStocv, ':10', item.pretv); + DBMS_SQL.BIND_VARIABLE(lnStocv, ':11', item.tvav); + DBMS_SQL.BIND_VARIABLE(lnStocv, ':12', item.proc_tvav); + DBMS_SQL.BIND_VARIABLE(lnStocv, ':13', NVL(item.pretd, 0)); + DBMS_SQL.BIND_VARIABLE(lnStocv, ':14', NVL(item.id_valuta, 0)); + DBMS_SQL.BIND_VARIABLE(lnStocv, ':15', NVL(item.lot, '+_'), 100); + DBMS_SQL.BIND_VARIABLE(lnStocv, + ':16', + NVL(item.adata_expirare, + TO_DATE('1900-01-01', 'YYYY-MM-DD'))); + DBMS_SQL.BIND_VARIABLE(lnStocv, ':17', NVL(item.id_sucursala, 0)); + DBMS_SQL.BIND_VARIABLE(lnStocv, ':18', NVL(item.id_lucrare_rez, 0)); + DBMS_SQL.BIND_VARIABLE(lnStocv, ':19', NVL(item.id_part_rez, 0)); + + ignore := DBMS_SQL.EXECUTE(lnStocv); + + if item.acont = 'XXXX' then + item.acont := ''; + END IF; + -- pinfo('tipg = 1 item.tva ' || item.tva); + IF DBMS_SQL.FETCH_ROWS(lnStocv) > 0 THEN + DBMS_SQL.COLUMN_VALUE(lnStocv, 1, lnId_Stoc); + -- pinfo('UPDATE STOC.ID ' || lnId_Stoc); + -- modificare + lcUpdateStoc := 'UPDATE ' || tcs || '.' || lcTabel || + ' set cant = cant + :1, cante = cante + :2, dataora = :3'; + + if item.dataout is not null then + lcUpdateStoc := lcUpdateStoc || ',dataout = to_date(''' || + to_char(item.dataout, 'DDMMYYYY') || + ''',''DDMMYYYY'')'; + end if; + + if item.datain is not null then + lcUpdateStoc := lcUpdateStoc || ',datain = to_date(''' || + to_char(item.datain, 'DDMMYYYY') || + ''',''DDMMYYYY'')'; + end if; + + lcUpdateStoc := lcUpdateStoc || ' where ' || lcIdTabel || ' = :4'; + + EXECUTE IMMEDIATE lcUpdateStoc + USING item.cant, item.cante, item.dataora, lnId_Stoc; + -- modificare ^ + ELSE + -- pinfo('INSERT INTO STOC.TVA ' || item.tva); + EXECUTE IMMEDIATE 'INSERT INTO ' || tcs || '.' || lcTabel || + ' (an, luna, id_articol, pret, pretv, tvav, proc_tvav, cant, cante, cont, acont, id_gestiune, + dataora, datain, dataout, id_rul_aux, serie, tva, pretd, id_valuta,lot,adata_expirare,id_sucursala,id_lucrare_rez,id_part_rez) + VALUES (:1, :2, :3, :4, :5, :6, :7, :8, :9, :10, :11, :12, :13, :14, :15,:16,:17,:18,:19,:20,:21,:22,:23,:24,:25)' + USING item.an, item.luna, item.id_articol, item.pret, item.pretv, item.tvav, item.proc_tvav, item.cant, item.cante, item.cont, item.acont, item.id_gestiune, item.dataora, item.datain, item.dataout, item.id_rul_aux, item.serie, item.tva, item.pretd, item.id_valuta, item.lot, item.adata_expirare, item.id_sucursala, item.id_lucrare_rez, item.id_part_rez; + END IF; + end if; + + end loop; + close pCursor; + + DBMS_SQL.close_cursor(lnStoca); + DBMS_SQL.close_cursor(lnStocv); + + END SCRIE_IN_STOC_OLD; + -------------------------------------------------------------------------------- + PROCEDURE SCRIE_IN_STOC(tcS IN VARCHAR2, + tnAn in number, + tnLuna in number, + tnScrie number, + tcTabel in varchar2, + tcIdTabel in varchar2, + tcCondSpec in varchar2) IS + BEGIN + SCRIE_IN_STOC(tnAn, tnLuna, tnScrie); + END; + + PROCEDURE SCRIE_IN_STOC(tnAn in number, + tnLuna in number, + tnScrie number, + tnIdGestiune IN RUL.ID_GESTIUNE%TYPE DEFAULT NULL) IS + + lnAn act_temp.an%Type := tnAn; + lnLuna act_temp.luna%Type := tnLuna; + + lnIdSucursala act.id_sucursala%type; + lcWhereSucursale varchar2(1000); + lcFrom varchar2(1000); + lcFromV varchar2(1000); + lcSql varchar2(32000); + lcWhereGestiune varchar2(1000); + BEGIN + --pinfo('SCRIE_IN_STOC 1'); + lnIdSucursala := PACK_CONTAFIN.GET_ID_SUCURSALA(); + if lnIdSucursala is not null then + lcWhereSucursale := ' and r.id_sucursala = ' || lnIdSucursala; + end if; + + -- SE REFACE FIECARE GESTIUNE + if tnIdGestiune is not null then + lcWhereGestiune := ' and r.id_gestiune = ' || tnIdGestiune; + end if; + + lnAn := tnAn; + lnLuna := tnLuna; + + IF tnScrie = 1 THEN + -- REFACERE + lcFromV := 'rul r + join vnom_gestiuni g on r.id_gestiune = g.id_gestiune + where r.an = ' || lnAn || ' and r.luna = ' || + lnLuna || + ' and substr(r.cont,1,2)<>''80'' and r.sters=0 and g.nr_pag in (6,7) ' || + lcWhereGestiune || lcWhereSucursale; + + lcFrom := 'rul r + join vnom_gestiuni g on r.id_gestiune = g.id_gestiune + where r.an = ' || lnAn || ' and r.luna = ' || + lnLuna || + ' and substr(r.cont,1,2)<>''80'' and r.sters=0 and g.nr_pag not in (6,7)' || + lcWhereGestiune || lcWhereSucursale; + ELSE + -- SCRIERE + lcFromV := 'rul_temp r + join vnom_gestiuni g on r.id_gestiune = g.id_gestiune + where r.an = ' || lnAn || ' and r.luna = ' || + lnLuna || + ' and substr(r.cont,1,2)<>''80'' and g.nr_pag in (6,7)'; + + lcFrom := 'rul_temp r + join vnom_gestiuni g on r.id_gestiune = g.id_gestiune + where r.an = ' || lnAn || ' and r.luna = ' || + lnLuna || + ' and substr(r.cont,1,2)<>''80'' and g.nr_pag not in (6,7)'; + END IF; + + -- MARFA LA PRET DE VANZARE (nom_gestiuni.nr_pag in (6,7)) + -- are in plus coloanele pretv, tvav, proc_tvav + -- nu grupez si nu fac merge dupa "tva", doar in bag in stoc - pentru ca nici in procedura veche nu cautam dupa tva + + lcSql := 'merge into stoc s1 + using (select r.an, + r.luna, + r.id_articol, + r.pret, + max(r.tva) as tva, + r.pretv, + r.tvav, + r.proc_tvav, + r.pretd, + r.cont, + r.acont, + r.id_gestiune, + decode(NVL(r.id_rul_aux, 0), 0, NULL, r.id_rul_aux) as id_rul_aux, + r.serie, + decode(NVL(r.id_valuta, 0), 0, NULL, r.id_valuta) as id_valuta, + r.lot, + r.adata_expirare, + decode(NVL(r.id_sucursala, 0), 0, NULL, r.id_sucursala) as id_sucursala, + decode(NVL(r.ID_LUCRARE_REZ, 0), 0, NULL, r.ID_LUCRARE_REZ) as id_lucrare_rez, + decode(NVL(r.ID_PART_REZ, 0), 0, NULL, r.ID_PART_REZ) as id_part_rez, + 0 AS CANTS, + SUM(r.CANT) as cant, + SUM(r.CANTE) as cante, + MAX(r.dataora) as dataora, + MAX(nvl(r.datain,r.dataact)) AS datain, + MAX(nvl(r.dataout, r.dataact)) AS dataout + from ' || lcFromV || ' + GROUP BY + r.an, + r.luna, + r.id_articol, + r.pret, + r.pretv, + r.tvav, + r.proc_tvav, + r.pretd, + r.cont, + r.acont, + r.id_gestiune, + decode(NVL(r.id_rul_aux, 0), 0, NULL, r.id_rul_aux), + r.serie, + decode(NVL(r.id_valuta, 0), 0, NULL, r.id_valuta), + r.LOT, + r.ADATA_EXPIRARE, + decode(NVL(r.id_sucursala, 0), 0, NULL, r.id_sucursala), + decode(NVL(r.ID_LUCRARE_REZ, 0), 0, NULL, r.ID_LUCRARE_REZ), + decode(NVL(r.ID_PART_REZ, 0), 0, NULL, r.ID_PART_REZ)) s0 + ON (s0.an = s1.an and + s0.luna = s1.luna and + s0.id_articol = s1.id_articol and + s0.pret = s1.pret and + s0.pretv = s1.pretv and + s0.tvav = s1.tvav and + s0.proc_tvav = s1.proc_tvav and + NVL(s0.pretd, 0) = NVL(s1.pretd, 0) and + s0.cont = s1.cont and + NVL(s0.acont, ''XXXX'') = NVL(s1.acont, ''XXXX'') and + s0.id_gestiune = s1.id_gestiune and + NVL(s0.id_rul_aux, 0) = NVL(s1.id_rul_aux, 0) and + NVL(s0.serie, ''+_'') = NVL(s1.serie, ''+_'') and + NVL(s0.id_valuta, 0) = NVL(s1.id_valuta, 0) and + NVL(s0.LOT, ''+_'') = NVL(s1.LOT, ''+_'') AND + NVL(s0.ADATA_EXPIRARE, to_date(''1900-01-01'', ''YYYY-MM-DD'')) = NVL(s1.ADATA_EXPIRARE, to_date(''1900-01-01'', ''YYYY-MM-DD'')) and + NVL(s0.id_sucursala, 0) = NVL(s1.id_sucursala, 0) AND + NVL(s0.ID_LUCRARE_REZ, 0) = NVL(s1.ID_LUCRARE_REZ, 0) AND + NVL(s0.ID_PART_REZ, 0) = NVL(s1.ID_PART_REZ, 0)) + WHEN MATCHED THEN + UPDATE set s1.cant = s1.cant + s0.cant, s1.cante = s1.cante + s0.cante, s1.dataora = s0.dataora, s1.datain = s0.datain, s1.dataout = s0.dataout, s1.tva = s0.tva + WHEN NOT MATCHED THEN + insert + (an, + luna, + id_articol, + pret, + tva, + pretv, + tvav, + proc_tvav, + pretd, + cant, + cante, + cont, + acont, + id_gestiune, + dataora, + datain, + dataout, + id_rul_aux, + serie, + id_valuta, + lot, + adata_expirare, + id_sucursala, + id_part_rez, + id_lucrare_rez) + values + (s0.an, + s0.luna, + s0.id_articol, + s0.pret, + s0.tva, + s0.pretv, + s0.tvav, + s0.proc_tvav, + s0.pretd, + s0.cant, + s0.cante, + s0.cont, + s0.acont, + s0.id_gestiune, + s0.dataora, + s0.datain, + s0.dataout, + s0.id_rul_aux, + s0.serie, + s0.id_valuta, + s0.lot, + s0.adata_expirare, + s0.id_sucursala, + s0.id_part_rez, + s0.id_lucrare_rez)'; + -- pinfo(lcSql); + -- pinfo('SCRIE_IN_STOC 2 ' || lcSql); + execute immediate lcSql; + -- pinfo('SCRIE_IN_STOC 2 ^'); + + -- MATERII PRIME/MARFA LA PRET DE ACHIZITIE (nom_gestiuni.nr_pag not in (6,7)) + lcSql := 'merge into stoc s1 + using (select r.an, + r.luna, + r.id_articol, + r.pret, + max(r.tva) as tva, + 0 as pretv, + 0 as tvav, + 0 as proc_tvav, + r.pretd, + r.cont, + r.acont, + r.id_gestiune, + decode(NVL(r.id_rul_aux, 0), 0, NULL, r.id_rul_aux) as id_rul_aux, + r.serie, + decode(NVL(r.id_valuta, 0), 0, NULL, r.id_valuta) as id_valuta, + r.lot, + r.adata_expirare, + decode(NVL(r.id_sucursala, 0), 0, NULL, r.id_sucursala) as id_sucursala, + decode(NVL(r.ID_LUCRARE_REZ, 0), 0, NULL, r.ID_LUCRARE_REZ) as id_lucrare_rez, + decode(NVL(r.ID_PART_REZ, 0), 0, NULL, r.ID_PART_REZ) as id_part_rez, + 0 AS CANTS, + SUM(r.CANT) as cant, + SUM(r.CANTE) as cante, + MAX(r.dataora) as dataora, + MAX(nvl(r.datain,r.dataact)) AS datain, + MAX(nvl(r.dataout, r.dataact)) AS dataout + from ' || lcFrom || ' + GROUP BY + r.an, + r.luna, + r.id_articol, + r.pret, + r.pretd, + r.cont, + r.acont, + r.id_gestiune, + decode(NVL(r.id_rul_aux, 0), 0, NULL, r.id_rul_aux), + r.serie, + decode(NVL(r.id_valuta, 0), 0, NULL, r.id_valuta), + r.LOT, + r.ADATA_EXPIRARE, + decode(NVL(r.id_sucursala, 0), 0, NULL, r.id_sucursala), + decode(NVL(r.ID_LUCRARE_REZ, 0), 0, NULL, r.ID_LUCRARE_REZ), + decode(NVL(r.ID_PART_REZ, 0), 0, NULL, r.ID_PART_REZ)) s0 + ON (s0.an = s1.an and + s0.luna = s1.luna and + s0.id_articol = s1.id_articol and + s0.pret = s1.pret and + NVL(s0.pretd, 0) = NVL(s1.pretd, 0) and + s0.cont = s1.cont and + NVL(s0.acont, ''XXXX'') = NVL(s1.acont, ''XXXX'') and + s0.id_gestiune = s1.id_gestiune and + NVL(s0.id_rul_aux, 0) = NVL(s1.id_rul_aux, 0) and + NVL(s0.serie, ''+_'') = NVL(s1.serie, ''+_'') and + NVL(s0.id_valuta, 0) = NVL(s1.id_valuta, 0) and + NVL(s0.LOT, ''+_'') = NVL(s1.LOT, ''+_'') AND + NVL(s0.ADATA_EXPIRARE, to_date(''1900-01-01'', ''YYYY-MM-DD'')) = NVL(s1.ADATA_EXPIRARE, to_date(''1900-01-01'', ''YYYY-MM-DD'')) and + NVL(s0.id_sucursala, 0) = NVL(s1.id_sucursala, 0) AND + NVL(s0.ID_LUCRARE_REZ, 0) = NVL(s1.ID_LUCRARE_REZ, 0) AND + NVL(s0.ID_PART_REZ, 0) = NVL(s1.ID_PART_REZ, 0)) + WHEN MATCHED THEN + UPDATE set s1.cant = s1.cant + s0.cant, s1.cante = s1.cante + s0.cante, s1.dataora = s0.dataora, s1.datain = s0.datain, s1.dataout = s0.dataout, s1.tva = s0.tva + WHEN NOT MATCHED THEN + insert + (an, + luna, + id_articol, + pret, + tva, + pretv, + tvav, + proc_tvav, + pretd, + cant, + cante, + cont, + acont, + id_gestiune, + dataora, + datain, + dataout, + id_rul_aux, + serie, + id_valuta, + lot, + adata_expirare, + id_sucursala, + id_part_rez, + id_lucrare_rez) + values + (s0.an, + s0.luna, + s0.id_articol, + s0.pret, + s0.tva, + s0.pretv, + s0.tvav, + s0.proc_tvav, + s0.pretd, + s0.cant, + s0.cante, + s0.cont, + s0.acont, + s0.id_gestiune, + s0.dataora, + s0.datain, + s0.dataout, + s0.id_rul_aux, + s0.serie, + s0.id_valuta, + s0.lot, + s0.adata_expirare, + s0.id_sucursala, + s0.id_part_rez, + s0.id_lucrare_rez)'; + + --pinfo('SCRIE_IN_STOC 3 ' || lcSql); + execute immediate lcSql; + -- pinfo('SCRIE_IN_STOC 3 ^'); + + END SCRIE_IN_STOC; + ------------------------------------------------------------------------------------ + PROCEDURE SCRIE_IN_RUL_OBINV(tcS IN VARCHAR2) IS + V_LISTA_CAMPURI VARCHAR2(2000) := ''; + + LN_COD NUMBER(20) := 0; + lnIdFact NUMBER(20) := 0; + lnCuFacturi NUMBER(5) := 0; + LD_DATAORA DATE; + LC_UPDATE VARCHAR2(100) := ''; + LC_INSERT VARCHAR2(10000) := ''; + lnId_Util act_temp.id_util%Type; + LNAN ACT_TEMP.AN%TYPE; + LNLUNA ACT_TEMP.LUNA%TYPE; + lnIdSucursala act.id_sucursala%type; + + BEGIN + + lnIdSucursala := PACK_CONTAFIN.GET_ID_SUCURSALA(); + V_LISTA_CAMPURI := pack_contafin.LISTA_CAMPURI(tcS, 'RUL_OBINV'); + + LN_COD := pack_contafin.GET_COD(); + LD_DATAORA := pack_contafin.GET_DATAORA(); + lnId_Util := pack_contafin.GET_IDUTIL(); + lnIdFact := get_idFact(); + LNAN := pack_sesiune.GETAN(); + LNLUNA := pack_sesiune.GETLUNA(); + + if nvl(pack_contafin.nSuprascriereCod, 1) = 1 then + UPDATE RUL_TEMP_OBINV + SET COD = LN_COD, + DATAORA = LD_DATAORA, + ID_UTIL = lnId_Util, + AN = lnAn, + LUNA = lnLuna; + else + if nvl(pack_contafin.nSuprascriereAnLuna, 1) = 1 then + UPDATE RUL_TEMP_OBINV + SET DATAORA = LD_DATAORA, + ID_UTIL = lnId_Util, + AN = lnAn, + LUNA = lnLuna; + else + UPDATE RUL_TEMP_OBINV + SET DATAORA = LD_DATAORA, ID_UTIL = lnId_Util; + end if; + end if; + + if lnIdFact <> 0 and lnIdFact is not null then + -- la modificare nu setez id_fact + UPDATE RUL_TEMP SET ID_FACT = lnIdFact; + end if; + + -- 23.02.2010 + -- Nu se suprascrie id_sucursala completat deja in act_temp + UPDATE RUL_TEMP_OBINV + SET ID_SUCURSALA = lnIdSucursala + WHERE NVL(ID_SUCURSALA, 0) = 0; + -- 23.02.2010 ^ + + UPDATE RUL_TEMP_OBINV SET DATAIN = dataact WHERE CANT <> 0; + + UPDATE RUL_TEMP_OBINV SET DATAOUT = dataact WHERE CANTE <> 0; + + LC_INSERT := 'INSERT INTO ' || tcS || '.RUL_OBINV (' || V_LISTA_CAMPURI || + ') (SELECT ' || V_LISTA_CAMPURI || ' FROM RUL_TEMP_OBINV)'; + + -- LC_INSERT := 'INSERT INTO ' || tcS || '.RUL (SELECT ' || V_LISTA_CAMPURI || ' FROM RUL_TEMP)'; + EXECUTE IMMEDIATE LC_INSERT; + + -- DBMS_OUTPUT.PUT_LINE('INREGISTRARI INSERATE: ' || SQL%ROWCOUNT); + + END SCRIE_IN_RUL_OBINV; + + ------------------------------------------------------------------------------------ + PROCEDURE SCRIE_IN_STOC_OBINV(tcS IN VARCHAR2, + tnAn in number, + tnLuna in number, + tnScrie number, + tcTabel in varchar2, + tcIdTabel in varchar2, + tcCondSpec in varchar2) IS + BEGIN + SCRIE_IN_STOC_OBINV(tnAn, tnLuna, tnScrie); + END SCRIE_IN_STOC_OBINV; + ------------------------------------------------------------------------------------ + PROCEDURE SCRIE_IN_STOC_OBINV(tnAn in number, + tnLuna in number, + tnScrie number) IS + + lcSql varchar2(32000); + lcFrom varchar2(1000); + + lnAn act_temp.an%Type := tnAn; + lnLuna act_temp.luna%Type := tnLuna; + lcContObInv stoc_obinv.cont%Type; + + lnIdSucursala act.id_sucursala%type; + lcWhereSucursale varchar2(1000); + BEGIN + lnIdSucursala := PACK_CONTAFIN.GET_ID_SUCURSALA(); + if lnIdSucursala is not null then + lcWhereSucursale := ' and id_sucursala = ' || lnIdSucursala; + end if; + + lcContObInv := pack_sesiune.getOptiuneFirma(USER, 'CONTOBINV'); + if lcContObinv is null then + lcContObinv := '8039'; + end if; + + IF tnScrie = 1 THEN + -- REFACERE + lcFrom := 'rul_obinv where sters = 0 and an = ' || lnAn || + ' and luna = ' || lnLuna || lcWhereSucursale; + ELSE + -- SCRIERE + lcFrom := 'rul_temp_obinv where an = ' || lnAn || ' and luna = ' || + lnLuna; + END IF; + + lcSql := 'merge into stoc_obinv s1 + using (select an, + luna, + id_articol, + pret, + max(tva) as tva, + max(pretv) as pretv, + max(tvav) as tvav, + max(proc_tvav) as proc_tvav, + max(pretd) as pretd, + 0 as cants, + sum(cant) as cant, + sum(cante) as cante, + (case when substr(cont,1,2) = ''80'' then ''' || + lcContObInv || ''' else cont end) as cont, + acont, + id_gestiune, + max(dataora) as dataora, + max(datain) as datain, + max(dataout) as dataout, + DATAPIF, + DNS_LUNI, + decode(NVL(id_responsabil, 0), 0, NULL, id_responsabil) as id_responsabil, + decode(NVL(id_rul_aux, 0), 0, NULL, id_rul_aux) as id_rul_aux, + serie, + lot, + decode(NVL(id_sucursala, 0), 0, NULL, id_sucursala) as id_sucursala + from ' || lcFrom || ' + group by an, + luna, + id_articol, + pret, + case when substr(cont,1,2) = ''80'' then ''' || + lcContObInv || ''' else cont end, + acont, + id_gestiune, + DATAPIF, + DNS_LUNI, + decode(NVL(id_responsabil, 0), 0, NULL, id_responsabil), + decode(NVL(id_rul_aux, 0), 0, NULL, id_rul_aux), + serie, + lot, + decode(NVL(id_sucursala, 0), 0, NULL, id_sucursala)) s0 + ON (s0.an = s1.an and + s0.luna = s1.luna and + s0.id_articol = s1.id_articol and + s0.pret = s1.pret and + s0.cont = s1.cont and + NVL(s0.acont, ''XXXX'') = NVL(s1.acont, ''XXXX'') and + s0.id_gestiune = s1.id_gestiune and + NVL(s0.DATAPIF, to_date(''1900-01-01'', ''YYYY-MM-DD'')) = NVL(s1.DATAPIF, to_date(''1900-01-01'', ''YYYY-MM-DD'')) and + NVL(s0.dns_luni, 0) = NVL(s1.dns_luni, 0) AND + NVL(s0.id_responsabil, 0) = NVL(s1.id_responsabil, 0) and + NVL(s0.id_rul_aux, 0) = NVL(s1.id_rul_aux, 0) and + NVL(s0.serie, ''+_'') = NVL(s1.serie, ''+_'') and + NVL(s0.lot, ''+_'') = NVL(s1.lot, ''+_'') and + NVL(s0.id_sucursala, 0) = NVL(s1.id_sucursala, 0)) + WHEN MATCHED THEN + UPDATE set s1.cant = s1.cant + s0.cant, s1.cante = s1.cante + s0.cante, s1.dataora = s0.dataora, s1.datain = s0.datain, s1.dataout = s0.dataout, + s1.tva = s0.tva, s1.pretv = s0.pretv, s1.tvav = s0.tvav, s1.proc_tvav = s0.proc_tvav, s1.pretd = s0.pretd + WHEN NOT MATCHED THEN + insert + (an, + luna, + id_articol, + pret, + tva, + pretv, + tvav, + proc_tvav, + pretd, + cants, + cant, + cante, + cont, + acont, + id_gestiune, + dataora, + datain, + dataout, + DATAPIF, + DNS_LUNI, + id_responsabil, + id_rul_aux, + serie, + lot, + id_sucursala) + values + (s0.an, + s0.luna, + s0.id_articol, + s0.pret, + s0.tva, + s0.pretv, + s0.tvav, + s0.proc_tvav, + s0.pretd, + s0.cants, + s0.cant, + s0.cante, + s0.cont, + s0.acont, + s0.id_gestiune, + s0.dataora, + s0.datain, + s0.dataout, + s0.DATAPIF, + s0.DNS_LUNI, + s0.id_responsabil, + s0.id_rul_aux, + s0.serie, + s0.lot, + s0.id_sucursala)'; + -- PINFO(lcSql); + execute immediate lcSql; + + END SCRIE_IN_STOC_OBINV; + ------------------------------------------------------------------------------------ + PROCEDURE SCRIE_IN_STOC_OBINV_OLD(tcS IN VARCHAR2, + tnAn in number, + tnLuna in number, + tnScrie number, + tcTabel in varchar2, + tcIdTabel in varchar2, + tcCondSpec in varchar2) IS + + CURSOR CRS_TEMP IS + SELECT an, + luna, + id_articol, + id_gestiune, + cont, + acont, + pret, + id_responsabil, + datapif, + dns_luni, + cant, + cante, + dataora, + dataout, + datain, + id_rul_aux, + serie, + tva, + id_sucursala + FROM RUL_TEMP_OBINV + WHERE 1 = 2; + + pCursor tip_ref_cursor; + lnId_Stoc Act_Temp.Id_Act%Type; + lcSelect varchar2(1000); + lcSearcha varchar2(1000); + lnStoca number; + item CRS_TEMP%Rowtype; + ignore number := 0; + V_DATAPIF DATE; + v_acont varchar2(4) := ''; + -- V_LISTA_CAMPURI VARCHAR2(2000) := ''; + lnAn act_temp.an%Type := tnAn; + lnLuna act_temp.luna%Type := tnLuna; + lcTabel varchar2(50) := tcTabel; + lcIdTabel varchar2(50) := tcIdTabel; + lcCondSpec varchar2(100) := tcCondSpec; + lcContObInv stoc_obinv.cont%Type; + lcUpdateStoc varchar2(1000); + + lnIdSucursala act.id_sucursala%type; + lcWhereSucursale varchar2(1000); + BEGIN + lnIdSucursala := PACK_CONTAFIN.GET_ID_SUCURSALA(); + if lnIdSucursala is not null then + lcWhereSucursale := ' and id_sucursala = ' || lnIdSucursala; + end if; + + lcContObInv := pack_sesiune.getOptiuneFirma(tcS, 'CONTOBINV'); + if lcContObinv is null then + lcContObinv := '8039'; + end if; + if lcTabel is null then + lcTabel := 'Stoc_obinv'; + end if; + if lcIdTabel is null then + lcIdTabel := 'id_Stoc'; + end if; + if tcCondSpec is null then + lcCondSpec := '2=2'; + end if; + /* V_LISTA_CAMPURI := pack_contafin.LISTA_CAMPURI('contafin_oracle', + 'RUL_TEMP_OBINV');*/ + + lcSearcha := 'select ' || lcIdTabel || ' from ' || tcs || '.' || + lcTabel || + ' where an = :1 and luna = :2 and id_articol = :3 and id_gestiune = :4 and cont = :5 and nvl(acont,''XXXX'') = :6 and pret = :7 and NVL(id_responsabil,0) = NVL(:8,0) and nvl(datapif,to_date(''1900-01-01'',''YYYY-MM-DD'')) = :9 and dns_luni = :10 and NVL(id_rul_aux,0) = :11 and NVL(serie,''+_'') = :12 and nvl(id_sucursala,0) = :13 and ' || + lcCondSpec; + IF tnScrie = 1 THEN + -- REFACERE + lnAn := tnAn; + lnLuna := tnLuna; + + lcSelect := 'select an, luna, id_articol, id_gestiune, cont, acont, pret, id_responsabil, datapif, dns_luni, cant, cante, dataora, dataout, datain, id_rul_aux, serie, tva, id_sucursala + from ' || tcS || + '.rul_obinv + where an = :1 and luna = :2 and sters = 0 ' || + lcWhereSucursale; + ELSE + -- SCRIERE + /* lnAn := pack_contafin.GET_AN(); + lnLuna := pack_contafin.GET_LUNA();*/ + lnAn := tnAn; + lnLuna := tnLuna; + lcSelect := 'select an, luna, id_articol, id_gestiune, cont, acont, pret, id_responsabil, datapif, dns_luni, cant, cante, dataora, dataout, datain, id_rul_aux, serie, tva, id_sucursala + from rul_Temp_OBINV + where an = :1 and luna = :2 '; + END IF; + + lnStoca := dbms_sql.open_cursor; + DBMS_SQL.PARSE(lnStoca, lcSearcha, DBMS_SQL.native); + DBMS_SQL.DEFINE_COLUMN(lnStoca, 1, lnId_Stoc); + + open pCursor for lcSelect + USING lnAn, lnLuna; + loop + fetch pCursor + into item; + + exit when pCursor%notfound; + + if item.acont is null then + v_acont := 'XXXX'; + else + v_acont := item.acont; + END IF; + + if item.DATAPIF is null then + V_DATAPIF := TO_DATE('1900-01-01', 'YYYY-MM-DD'); + ELSE + V_DATAPIF := item.DATAPIF; + END IF; + + DBMS_SQL.BIND_VARIABLE(lnStoca, ':1', item.an); + DBMS_SQL.BIND_VARIABLE(lnStoca, ':2', item.luna); + DBMS_SQL.BIND_VARIABLE(lnStoca, ':3', item.id_articol); + DBMS_SQL.BIND_VARIABLE(lnStoca, ':4', item.id_gestiune); + DBMS_SQL.BIND_VARIABLE(lnStoca, ':5', item.cont); + DBMS_SQL.BIND_VARIABLE(lnStoca, ':6', V_ACONT); + DBMS_SQL.BIND_VARIABLE(lnStoca, ':7', item.pret); + DBMS_SQL.BIND_VARIABLE(lnStoca, ':8', item.id_responsabil); + DBMS_SQL.BIND_VARIABLE(lnStoca, ':9', V_DATAPIF); + DBMS_SQL.BIND_VARIABLE(lnStoca, ':10', item.dns_luni); + DBMS_SQL.BIND_VARIABLE(lnStoca, ':11', NVL(item.id_rul_aux, 0)); + DBMS_SQL.BIND_VARIABLE(lnStoca, ':12', NVL(item.serie, '+_'), 100); + DBMS_SQL.BIND_VARIABLE(lnStoca, ':13', NVL(item.id_sucursala, 0)); + + ignore := DBMS_SQL.EXECUTE(lnStoca); + + IF DBMS_SQL.FETCH_ROWS(lnStoca) > 0 THEN + DBMS_SQL.COLUMN_VALUE(lnStoca, 1, lnId_Stoc); + + -- modificare + lcUpdateStoc := 'UPDATE ' || tcs || '.' || lcTabel || + ' set cant = cant + :1, cante = cante + :2, dataora = :3'; + + if item.dataout is not null and item.cante > 0 then + lcUpdateStoc := lcUpdateStoc || ',dataout = to_date(''' || + to_char(item.dataout, 'DDMMYYYY') || + ''',''DDMMYYYY'')'; + end if; + + if item.datain is not null and item.cant > 0 then + lcUpdateStoc := lcUpdateStoc || ',datain = to_date(''' || + to_char(item.datain, 'DDMMYYYY') || + ''',''DDMMYYYY'')'; + end if; + + lcUpdateStoc := lcUpdateStoc || ' where ' || lcIdTabel || ' = :4'; + + EXECUTE IMMEDIATE lcUpdateStoc + USING item.cant, item.cante, item.dataora, lnId_Stoc; + -- modificare ^ + ELSE + + EXECUTE IMMEDIATE 'INSERT INTO ' || tcs || '.' || lcTabel || + ' (an, luna, id_articol, pret, cant, cante, cont, acont, id_gestiune, dataora, datain, dataout, id_responsabil, datapif, dns_luni,id_rul_aux, serie,tva,id_sucursala) + VALUES (:1, :2, :3, :4, :5, :6, :7, :8, :9, :10, :11, :12, :13, :14, :15, :16, :17,:18,:19)' + USING item.an, item.luna, item.id_articol, item.pret, item.cant, item.cante, item.cont, item.acont, item.id_gestiune, item.dataora, item.datain, item.dataout, item.id_responsabil, item.datapif, item.dns_luni, item.id_rul_aux, item.serie, item.tva, item.id_sucursala; + END IF; + + end loop; + close pCursor; + + DBMS_SQL.close_cursor(lnStoca); + + END SCRIE_IN_STOC_OBINV_OLD; + ------------------------------------------------------------------------------------ + PROCEDURE SET_DATAORA(V_DATAORA IN ACT_TEMP.DATAORA%TYPE) IS + BEGIN + if V_DATAORA IS NULL THEN + pack_contafin.dDataOra := SYSDATE; + else + pack_contafin.dDataOra := V_DATAORA; + end if; + END SET_DATAORA; + + ------------------------------------------------------------------------------------ + FUNCTION GET_DATAORA RETURN ACT_TEMP.DATAORA%TYPE IS + BEGIN + RETURN PACK_CONTAFIN.dDataOra; + END GET_DATAORA; + + ------------------------------------------------------------------------------------ + /* -- 25.02.2013 : am comentat pentru ca se face unirea id_fact pe listarea din JC/JV + PROCEDURE SET_IDFACT(tdDataAct ACT_TEMP.DATAACT%TYPE, + tcSerie_Act ACT_TEMP.SERIE_ACT%TYPE, + tnNrAct ACT_TEMP.NRACT%TYPE, + tnId_Ctr ACT_TEMP.ID_CTR%TYPE) IS + V_ID_FACT DOCUMENTE.ID_DOC%TYPE; + BEGIN + BEGIN + SELECT ID_DOC + into pack_contafin.nIdFact + FROM DOCUMENTE + WHERE NRACT = tnNrAct + AND NVL(SERIE_ACT, '+-') = NVL(tcSerie_Act, '+-') + AND DATAACT = tdDataAct + AND NVL(ID_CTR, 0) = NVL(tnId_Ctr, 0) + AND STERS = 0; + EXCEPTION + WHEN NO_DATA_FOUND THEN + SELECT SEQ_IdFact.NEXTVAL into pack_contafin.nIdFact FROM DUAL; + END; + END SET_IDFACT;*/ + ------------------------------------------------------------------------------------ + PROCEDURE SET_IDFACT(V_GCS IN VARCHAR2) IS + BEGIN + SELECT SEQ_IdFact.NEXTVAL into pack_contafin.nIdFact FROM DUAL; + END SET_IDFACT; + + --------------------------------------------------------------- + FUNCTION GET_IDFACT return act_temp.id_fact%Type as + BEGIN + return pack_contafin.nIdFact; + END GET_IDFACT; + + --------------------------------------------------------------- + FUNCTION GENEREAZA_COD(V_GCS VARCHAR2) RETURN ACT_TEMP.COD%TYPE IS + BEGIN + SELECT SEQ_COD.NEXTVAL INTO PACK_CONTAFIN.nCod FROM DUAL; + return PACK_CONTAFIN.nCod; + END GENEREAZA_COD; + --------------------------------------------------------------- + PROCEDURE SET_COD(V_GCS VARCHAR2) IS + BEGIN + SELECT SEQ_COD.NEXTVAL INTO PACK_CONTAFIN.nCod FROM DUAL; + END; + + --------------------------------------------------------------- + FUNCTION GET_COD return ACT_TEMP.COD%TYPE as + BEGIN + return PACK_CONTAFIN.nCod; + END GET_COD; + + --------------------------------------------------------------- + PROCEDURE SET_ID_SUCURSALA(tnIdSucursala act_temp.id_sucursala%type) IS + BEGIN + PACK_CONTAFIN.nIdSucursala := tnIdSucursala; + END SET_ID_SUCURSALA; + + --------------------------------------------------------------- + FUNCTION GET_ID_SUCURSALA RETURN act_temp.id_sucursala%type is + BEGIN + RETURN PACK_CONTAFIN.nIdSucursala; + END GET_ID_SUCURSALA; + + --------------------------------------------------------------- + PROCEDURE SET_ID_FIRMA(tnIdFirma act_temp.id_sucursala%type) IS + BEGIN + PACK_CONTAFIN.nIdFirma := tnIdFirma; + END SET_ID_FIRMA; + + --------------------------------------------------------------- + FUNCTION GET_ID_FIRMA RETURN act_temp.id_sucursala%type is + BEGIN + RETURN PACK_CONTAFIN.nIdFirma; + END GET_ID_FIRMA; + + --------------------------------------------------------------- + + PROCEDURE SET_DATA_RON(V_GCS VARCHAR2) IS + lcDataRon varchar2(50); + + BEGIN + BEGIN + SELECT varvalue + into lcDataRon + from optiuni + where upper(varname) = 'DATARON'; + EXCEPTION + WHEN NO_DATA_FOUND THEN + NULL; + END; + + if lcDataRon is not null then + pack_contafin.nAnRON := to_number(substr(lcDataRon, 4, 4)); + pack_contafin.nLunaRON := to_number(substr(lcDataRon, 1, 2)); + else + pack_contafin.nAnRON := 2005; + pack_contafin.nLunaRON := 7; + end if; + END; + + --------------------------------------------------------------- + FUNCTION GET_ANRON RETURN ACT_TEMP.AN%TYPE IS + BEGIN + return pack_contafin.nAnRON; + END GET_ANRON; + + --------------------------------------------------------------- + + FUNCTION GET_LUNARON RETURN ACT_TEMP.LUNA%TYPE IS + BEGIN + return pack_contafin.nLunaRon; + END GET_LUNARON; + --------------------------------------------------------------- + function getCotaTVAStandard(V_LUNA IN NUMBER, V_AN IN NUMBER) return number is + V_COTA_TVA NUMBER(10, 3); + begin + -- Daca fac select max(proc_tva) from cote_tva, da eroare la deschidere de luna cand fac INSERT INTO cote_tva + + /* select MAX(PROC_TVA) + INTO V_COTA_TVA + from cote_tva + where an = V_AN + and luna = V_LUNA + and descriere = 'STANDARD'; + + IF NVL(V_COTA_TVA, 0) = 0 THEN*/ + if V_AN * 12 + V_LUNA >= 2025 * 12 + 8 then + V_COTA_TVA := 1.21; + elsif (V_AN * 12 + V_LUNA >= 2017 * 12 + 1) then + V_COTA_TVA := 1.19; + elsif (V_AN * 12 + V_LUNA >= 2016 * 12 + 1) then + V_COTA_TVA := 1.20; + elsif (V_AN * 12 + V_LUNA >= 2015 * 12 + 1) then + V_COTA_TVA := 1.24; + else + V_COTA_TVA := 1.21; + end if; + /* END IF;*/ + return V_COTA_TVA; + end getCotaTVAStandard; + --------------------------------------------------------------- + PROCEDURE SET_IDUTIL(tnIdUtil act_temp.id_util%Type) IS + BEGIN + pack_contafin.nIdUtil := tnIdUtil; + END SET_IDUTIL; + --------------------------------------------------------------- + FUNCTION GET_IDUTIL RETURN ACT_TEMP.ID_UTIL%TYPE IS + BEGIN + return pack_contafin.nIdUtil; + END GET_IDUTIL; + --------------------------------------------------------------- + PROCEDURE SETARE_FACTURA(tcs VARCHAR2) --RETURN NUMBER IS + IS + -- E_FACTURA NUMBER(1) := 0; + lcFromD varchar2(1000); + lcFromC varchar2(1000); + lcSelect varchar2(1000); + -- lcWhere varchar2(1000); + lcUnion varchar2(1000); + -- lcFrom varchar2(1000); + lcJoin varchar2(1000); + lnCont pls_integer; --number(10); + -- lcS varchar2(100) := tcS; + lcCont varchar2(4); + lcExceptie varchar2(4); + lnPozitie number(1); + lnFelCont number(1); + lnInvers number(1); + lcScd varchar2(4); + lcScc varchar2(4); + ignore number(1); + + BEGIN + + lcSelect := 'SELECT DISTINCT C.CONT, D.FEL_CONT, E.CONT_C AS EXCEPTIE, E.INVERS, E.DEBIT FROM '; + lcFromD := '(select distinct cont from ' || tcs || + '.vconfig_cont_ireg where cu_inregistrari = 1 INTERSECT select distinct scd ' || + 'from act_temp) C + left join ' || tcs || + '.vconfig_cont_ireg D on C.CONT = D.CONT + left join ' || tcs || + '.exceptii_ireg E on C.CONT = E.CONT AND E.INVERS = 1 '; + lcFromC := '(select distinct cont from ' || tcs || + '.vconfig_cont_ireg where cu_inregistrari = 1 INTERSECT select distinct scc ' || + 'from act_temp) C + left join ' || tcs || + '.vconfig_cont_ireg D on C.CONT = D.CONT + left join ' || tcs || + '.exceptii_ireg E on C.CONT = E.CONT AND E.INVERS = 1'; + lcUnion := ' UNION '; + + -- 12.10.2006 + -- MARIUS.MUTU + -- CURATARE -1 DE PE ID_FACT + UPDATE ACT_TEMP SET ID_FACTD = 0 WHERE ID_FACTD = -1; + UPDATE ACT_TEMP SET ID_FACTC = 0 WHERE ID_FACTC = -1; + + lnCont := dbms_sql.open_cursor; + -- selectez toate conturile din ACT_TEMP care au INREGISTRARI + exceptiile lor + DBMS_SQL.PARSE(lnCont, + lcSelect || lcFromD || lcJoin || lcUnion || lcSelect || + lcFromC || lcJoin || ' order by 1', + DBMS_SQL.native); + + DBMS_SQL.DEFINE_COLUMN(lnCont, 1, lcCont, 4); + DBMS_SQL.DEFINE_COLUMN(lnCont, 2, lnFelCont); + DBMS_SQL.DEFINE_COLUMN(lnCont, 3, lcExceptie, 4); + DBMS_SQL.DEFINE_COLUMN(lnCont, 4, lnInvers); + DBMS_SQL.DEFINE_COLUMN(lnCont, 5, lnPozitie); + + ignore := DBMS_SQL.EXECUTE(lnCont); + + LOOP + IF DBMS_SQL.FETCH_ROWS(lnCont) > 0 THEN + -- get column values of the row + DBMS_SQL.COLUMN_VALUE(lnCont, 1, lcCont); + DBMS_SQL.COLUMN_VALUE(lnCont, 2, lnFelCont); + DBMS_SQL.COLUMN_VALUE(lnCont, 3, lcExceptie); + DBMS_SQL.COLUMN_VALUE(lnCont, 4, lnInvers); + DBMS_SQL.COLUMN_VALUE(lnCont, 5, lnPozitie); + + lnInvers := nvl(lnInvers, -1); + lnPozitie := nvl(lnPozitie, -1); + lcExceptie := nvl(lcExceptie, 'XXXX'); + /* + TODO: owner="marius.mutu" category="Fix" priority="1 - High" created="30.10.2006" + text="ID_FACTD,ID_FACTC = -1 UNDE CONT_EXCEPTIE <> TOATE CONTURILE DE EXCEPTIE" + */ + if lnFelCont = 0 then + EXECUTE IMMEDIATE 'UPDATE ACT_TEMP SET id_fact = -1 where scd = :1 and (id_fact = 0 or id_fact is null) ' + USING lcCont; + EXECUTE IMMEDIATE 'UPDATE ACT_TEMP SET id_factc = -1 where scc = :1 and scd <> :2 and (id_factc = 0 or id_factc is null) ' + USING lcCont, lcExceptie; + else + EXECUTE IMMEDIATE 'UPDATE ACT_TEMP SET id_fact = -1 where scc = :1 and (id_fact = 0 or id_fact is null)' + USING lcCont; + EXECUTE IMMEDIATE 'UPDATE ACT_TEMP SET id_factd = -1 where scd = :1 and scc <> :2 and (id_factd = 0 or id_factd is null) ' + USING lcCont, lcExceptie; + end if; + + if lnInvers = 1 then + if lnPozitie = 0 then + lcScd := lcCont; + lcScc := lcExceptie; + EXECUTE IMMEDIATE 'UPDATE ACT_TEMP SET id_fact = -1 where scd = :1 and scc = :2 and (id_fact = 0 or id_fact is null)' + USING lcScd, lcScc; + end if; + + if lnPozitie = 1 then + lcScc := lcCont; + lcScD := lcExceptie; + EXECUTE IMMEDIATE 'UPDATE ACT_TEMP SET id_fact = -1 where scd = :1 and scc = :2 and (id_fact = 0 or id_fact is null)' + USING lcScd, lcScc; + end if; + end if; + else + exit; + end if; + end loop; + + dbms_sql.close_cursor(lnCont); + -- 05.04.2005 -- MARIUS, AM PUS ID_FACT = -1 AI SA GENEREZE ID_FACT LA ORICE DOCUMENT + EXECUTE IMMEDIATE 'UPDATE ACT_TEMP SET id_fact = -1 where (id_fact = 0 or id_fact is null) '; + -- RETURN E_FACTURA; + END SETARE_FACTURA; + + --------------------------------------------------------------- + FUNCTION LISTA_CAMPURI(V_GCS VARCHAR2, tcTableName IN VARCHAR2) + RETURN VARCHAR2 IS + V_LISTA_CAMPURI VARCHAR2(2000) := ''; + -- I NUMBER; + lcTableName varchar2(100) := upper(tcTableName); + BEGIN + -- I := 0; + FOR item in (select column_name + from all_tab_columns t + where t.TABLE_NAME = lcTableName + AND t.OWNER = upper(V_GCS)) LOOP + -- I := I + 1; + -- DBMS_OUTPUT.put_line(I || ', ' || ITEM.COLUMN_NAME); + V_LISTA_CAMPURI := V_LISTA_CAMPURI || ITEM.COLUMN_NAME || ','; + END LOOP; + IF LENGTH(V_LISTA_CAMPURI) > 1 THEN + V_LISTA_CAMPURI := SUBSTR(V_LISTA_CAMPURI, + 1, + LENGTH(V_LISTA_CAMPURI) - 1); + END IF; + RETURN V_LISTA_CAMPURI; + + END LISTA_CAMPURI; + + ------------------------------------------------------------------------------ + PROCEDURE set_suprascriereCod(V_VALOARE IN NUMBER) IS + BEGIN + pack_contafin.nSuprascriereCod := V_VALOARE; + END set_suprascriereCod; + ------------------------------------------------------------------------------ + PROCEDURE set_suprascriereAnLuna(V_VALOARE IN NUMBER) IS + BEGIN + pack_contafin.nSuprascriereAnLuna := V_VALOARE; + END set_suprascriereAnLuna; + ------------------------------------------------------------------------------ + PROCEDURE RESET_VARIABLES IS + BEGIN + nCod := 0; + nIdFact := 0; + nIdUtil := 0; + dDataOra := SYSDATE; + nSuprascriereCod := 1; + nSuprascriereAnLuna := 1; + END RESET_VARIABLES; + + -------------------------- + procedure SCRIE_JV_2007(tnAn JV2007.AN%TYPE, + tnLuna JV2007.LUNA%TYPE, + tnScrie number) IS + + lcSql VARCHAR2(32767); + lcContTvaDeductibil ACT.SCD%TYPE := '4426'; + lcContTvaColectat ACT.SCD%TYPE := '4427'; + lcContTvaNeexigibil ACT.SCD%TYPE := '4428'; + lcContDebitRegularizare VARCHAR2(100) := '4111,461,4511,4118'; + lcContCreditRegularizare VARCHAR2(100) := '418'; + lnIdMinJtvaColoana JTVA_COLOANE.ID_JTVA_COLOANA%TYPE := 1; + lnIdMaxJtvaColoana JTVA_COLOANE.ID_JTVA_COLOANA%TYPE := 100; + lcTabelSursa VARCHAR2(100); + lcCondSucursala VARCHAR2(1000); + begin + -- tnScrie: 0 - scriere; 1 - refacere; 2 - stergere + -- 0,2 - selectie din act_temp + -- 1 - selectie din act + + if pack_contafin.get_id_sucursala() is not null then + lcCondSucursala := ' AND ALIAS.ID_SUCURSALA = ' || + pack_contafin.GET_ID_SUCURSALA(); + end if; + + if tnScrie in (pack_contafin.nScriere, pack_contafin.nStergere) then + lcTabelSursa := 'act_temp'; -- scriere, stergere + else + lcTabelSursa := 'act'; -- refacere + end if; + + pack_contafin.completeaza_jv_2007(tnAn, + tnLuna, + lcTabelSursa, + lcCondSucursala); + + MERGE INTO JV2007 J + USING (SELECT AN, + LUNA, + ID_FDOC, + ID_FACT, + NRACT, + SERIE_ACT, + DATAACT, + DATAIREG, + ID_PART, + COD, + (CASE + WHEN NOTA_TVA_EX = 1 THEN + 0 + WHEN REGULARIZARE > 0 THEN + TOTCTVA - DECODE(RO24NB, 0, 0, RO24B) - + DECODE(RO20NB, 0, 0, RO20B) - DECODE(RO21NB, 0, 0, RO21B) - + DECODE(RO11NB, 0, 0, RO11B) - DECODE(RO19NB, 0, 0, RO19B) - + DECODE(RO9NB, 0, 0, RO9B) - DECODE(RO5NB, 0, 0, RO5B) - + DECODE(RO24NT, 0, 0, RO24T) - DECODE(RO20NT, 0, 0, RO20T) - + DECODE(RO21NT, 0, 0, RO21T) - DECODE(RO11NT, 0, 0, RO11T) - + DECODE(RO19NT, 0, 0, RO19T) - DECODE(RO9NT, 0, 0, RO9T) - + DECODE(RO5NT, 0, 0, RO5T) - + DECODE(RO24NTR, 0, RO24TR, RO24NTR) - + DECODE(RO20NTR, 0, RO20TR, RO20NTR) - + DECODE(RO21NTR, 0, RO21TR, RO21NTR) - + DECODE(RO11NTR, 0, RO11TR, RO11NTR) - + DECODE(RO19NTR, 0, RO19TR, RO19NTR) - + DECODE(RO9NTR, 0, RO9TR, RO9NTR) - + DECODE(RO5NTR, 0, RO5TR, RO5NTR) + ELSE + TOTCTVA - DECODE(RO24NB, 0, 0, RO24B) - + DECODE(RO20NB, 0, 0, RO20B) - DECODE(RO21NB, 0, 0, RO21B) - + DECODE(RO11NB, 0, 0, RO11B) - DECODE(RO19NB, 0, 0, RO19B) - + DECODE(RO9NB, 0, 0, RO9B) - DECODE(RO5NB, 0, 0, RO5B) - + DECODE(RO24NT, 0, 0, RO24T) - DECODE(RO20NT, 0, 0, RO20T) - + DECODE(RO21NT, 0, 0, RO21T) - DECODE(RO11NT, 0, 0, RO11T) - + DECODE(RO19NT, 0, 0, RO19T) - DECODE(RO9NT, 0, 0, RO9T) - + DECODE(RO5NT, 0, 0, RO5T) + END) AS TOTCTVA, + (CASE + WHEN NOTA_TVA_EX = 1 THEN + 0 + WHEN REGULARIZARE > 0 THEN + DECODE(RO24NB, 0, RO24B, RO24NB) + + DECODE(RO20NB, 0, RO20B, RO20NB) + + DECODE(RO21NB, 0, RO21B, RO21NB) + + DECODE(RO11NB, 0, RO11B, RO11NB) + + DECODE(RO19NB, 0, RO19B, RO19NB) + + DECODE(RO9NB, 0, RO9B, RO9NB) + + DECODE(RO5NB, 0, RO5B, RO5NB) - + DECODE(RO24NB, 0, RO24TR, RO24NTR) - + DECODE(RO20NB, 0, RO20TR, RO20NTR) - + DECODE(RO21NB, 0, RO21TR, RO21NTR) - + DECODE(RO11NB, 0, RO11TR, RO11NTR) - + DECODE(RO19NB, 0, RO19TR, RO19NTR) - + DECODE(RO9NB, 0, RO9TR, RO9NTR) - + DECODE(RO5NB, 0, RO5TR, RO5NTR) + ELSE + DECODE(RO24NB, 0, RO24B, RO24NB) + + DECODE(RO20NB, 0, RO20B, RO20NB) + + DECODE(RO21NB, 0, RO21B, RO21NB) + + DECODE(RO11NB, 0, RO11B, RO11NB) + + DECODE(RO19NB, 0, RO19B, RO19NB) + + DECODE(RO9NB, 0, RO9B, RO9NB) + + DECODE(RO5NB, 0, RO5B, RO5NB) + END) AS TOTFTVATAX, + DECODE(NOTA_TVA_EX, + 1, + 0, + DECODE(RO24NT, 0, RO24T, RO24NT) + + DECODE(RO20NT, 0, RO20T, RO20NT) + + DECODE(RO21NT, 0, RO21T, RO21NT) + + DECODE(RO11NT, 0, RO11T, RO11NT) + + DECODE(RO19NT, 0, RO19T, RO19NT) + + DECODE(RO9NT, 0, RO9T, RO9NT) + + DECODE(RO5NT, 0, RO5T, RO5NT)) AS TOTTVATAX, + ROTI + CESCDD1 + CESCDD2 + CEOPTR + CESVDD + CESVFDD + + CESVFS + WRSCDD + WRSCDDAB + WRSCDDCD + FODD + FOFDD + + WRSCFDD + WRN AS TOTNETAX, + (CASE + WHEN REGULARIZARE > 0 THEN + DECODE(RO24B, + 0, + DECODE(RO24T, 0, 0, ROUND(RO24T / 0.24, 2)), + RO24B - RO24TR) + ELSE + DECODE(RO24B, + 0, + DECODE(RO24T, 0, 0, ROUND(RO24T / 0.24, 2)), + RO24B) + END) AS RO24B, + RO24T, + (CASE + WHEN REGULARIZARE > 0 THEN + DECODE(RO20B, + 0, + DECODE(RO20T, 0, 0, ROUND(RO20T / 0.20, 2)), + RO20B - RO20TR) + ELSE + DECODE(RO20B, + 0, + DECODE(RO20T, 0, 0, ROUND(RO20T / 0.20, 2)), + RO20B) + END) AS RO20B, + RO20T, + (CASE + WHEN REGULARIZARE > 0 THEN + DECODE(RO21B, + 0, + DECODE(RO21T, 0, 0, ROUND(RO21T / 0.21, 2)), + RO21B - RO21TR) + ELSE + DECODE(RO21B, + 0, + DECODE(RO21T, 0, 0, ROUND(RO21T / 0.21, 2)), + RO21B) + END) AS RO21B, + RO21T, + (CASE + WHEN REGULARIZARE > 0 THEN + DECODE(RO11B, + 0, + DECODE(RO11T, 0, 0, ROUND(RO11T / 0.11, 2)), + RO11B - RO11TR) + ELSE + DECODE(RO11B, + 0, + DECODE(RO11T, 0, 0, ROUND(RO11T / 0.11, 2)), + RO11B) + END) AS RO11B, + RO11T, + (CASE + WHEN REGULARIZARE > 0 THEN + DECODE(RO19B, + 0, + DECODE(RO19T, 0, 0, ROUND(RO19T / 0.19, 2)), + RO19B - RO19TR) + ELSE + DECODE(RO19B, + 0, + DECODE(RO19T, 0, 0, ROUND(RO19T / 0.19, 2)), + RO19B) + END) AS RO19B, + RO19T, + (CASE + WHEN REGULARIZARE > 0 THEN + DECODE(RO9B, + 0, + DECODE(RO9T, 0, 0, ROUND(RO9T / 0.09, 2)), + RO9B - RO9TR) + ELSE + DECODE(RO9B, + 0, + DECODE(RO9T, 0, 0, ROUND(RO9T / 0.09, 2)), + RO9B) + END) AS RO9B, + RO9T, + (CASE + WHEN REGULARIZARE > 0 THEN + DECODE(RO5B, + 0, + DECODE(RO5T, 0, 0, ROUND(RO5T / 0.05, 2)), + RO5B - RO5TR) + ELSE + DECODE(RO5B, + 0, + DECODE(RO5T, 0, 0, ROUND(RO5T / 0.05, 2)), + RO5B) + END) AS RO5B, + RO5T, + (CASE + WHEN REGULARIZARE > 0 THEN + RO24NB - RO24NTR + ELSE + RO24NB + END) AS RO24NB, + RO24NT, + (CASE + WHEN REGULARIZARE > 0 THEN + RO20NB - RO20NTR + ELSE + RO20NB + END) AS RO20NB, + RO20NT, + (CASE + WHEN REGULARIZARE > 0 THEN + RO21NB - RO21NTR + ELSE + RO21NB + END) AS RO21NB, + RO21NT, + (CASE + WHEN REGULARIZARE > 0 THEN + RO11NB - RO11NTR + ELSE + RO11NB + END) AS RO11NB, + RO11NT, + (CASE + WHEN REGULARIZARE > 0 THEN + RO19NB - RO19NTR + ELSE + RO19NB + END) AS RO19NB, + RO19NT, + (CASE + WHEN REGULARIZARE > 0 THEN + RO9NB - RO9NTR + ELSE + RO9NB + END) AS RO9NB, + RO9NT, + (CASE + WHEN REGULARIZARE > 0 THEN + RO5NB - RO5NTR + ELSE + RO5NB + END) AS RO5NB, + RO5NT, + ROTI, + CESCDD1, + CESCDD2, + CEOPTR, + CESVDD, + CESVFDD, + CESVFS, + WRSCDD, + WRSCDDAB, + WRSCDDCD, + FODD, + FOFDD, + WRSCFDD, + WRN, + RORTC24, + RORTC20, + RORTC21, + RORTC11, + RORTC19, + RORTC9, + RORTC5, + ID_SUCURSALA + FROM (SELECT JV.AN, + JV.LUNA, + MAX(JV.ID_FDOC) AS ID_FDOC, + JV.ID_FACT, + JV.NRACT, + JV.SERIE_ACT, + JV.DATAACT, + JV.DATAIREG, + MAX(JV.ID_PART) AS ID_PART, + JV.ID_SUCURSALA, + MIN(JV.COD) AS COD, + MIN(JV.NOTA_TVA_EX) AS NOTA_TVA_EX, + sum(CASE + WHEN NVL(JV.ID_JTVA_COLOANA, 0) BETWEEN 1 AND 100 THEN + JV.suma + ELSE + 0 + END) TOTCTVA, + sum(DECODE(JV.ID_JTVA_COLOANA, 15, JV.suma, 0)) RO24B, + sum(DECODE(JV.ID_JTVA_COLOANA, 16, JV.suma, 0)) RO24T, + sum(DECODE(JV.ID_JTVA_COLOANA, 27, JV.suma, 0)) RO20B, + sum(DECODE(JV.ID_JTVA_COLOANA, 28, JV.suma, 0)) RO20T, + sum(DECODE(JV.ID_JTVA_COLOANA, 35, JV.suma, 0)) RO21B, + sum(DECODE(JV.ID_JTVA_COLOANA, 36, JV.suma, 0)) RO21T, + sum(DECODE(JV.ID_JTVA_COLOANA, 1, JV.suma, 0)) RO19B, + sum(DECODE(JV.ID_JTVA_COLOANA, 2, JV.suma, 0)) RO19T, + sum(DECODE(JV.ID_JTVA_COLOANA, 3, JV.suma, 0)) RO9B, + sum(DECODE(JV.ID_JTVA_COLOANA, 4, JV.suma, 0)) RO9T, + sum(DECODE(JV.ID_JTVA_COLOANA, 13, JV.suma, 0)) RO5B, + sum(DECODE(JV.ID_JTVA_COLOANA, 14, JV.suma, 0)) RO5T, + sum(DECODE(JV.ID_JTVA_COLOANA, 39, JV.suma, 0)) RO11B, + sum(DECODE(JV.ID_JTVA_COLOANA, 40, JV.suma, 0)) RO11T, + sum(DECODE(JV.ID_JTVA_COLOANA, 5, JV.suma, 0)) ROTI, + sum(DECODE(JV.ID_JTVA_COLOANA, 6, JV.suma, 0)) CESCDD1, + sum(DECODE(JV.ID_JTVA_COLOANA, 7, JV.suma, 0)) CESCDD2, + sum(DECODE(JV.ID_JTVA_COLOANA, 17, JV.suma, 0)) CEOPTR, + sum(DECODE(JV.ID_JTVA_COLOANA, 18, JV.suma, 0)) CESVDD, + sum(DECODE(JV.ID_JTVA_COLOANA, 19, JV.suma, 0)) CESVFDD, + sum(DECODE(JV.ID_JTVA_COLOANA, 20, JV.suma, 0)) CESVFS, + sum(DECODE(JV.ID_JTVA_COLOANA, 8, JV.suma, 0)) WRSCDD, + sum(DECODE(JV.ID_JTVA_COLOANA, 33, JV.suma, 0)) WRSCDDAB, + sum(DECODE(JV.ID_JTVA_COLOANA, 34, JV.suma, 0)) WRSCDDCD, + sum(DECODE(JV.ID_JTVA_COLOANA, 9, JV.suma, 0)) FODD, + sum(DECODE(JV.ID_JTVA_COLOANA, 10, JV.suma, 0)) FOFDD, + sum(DECODE(JV.ID_JTVA_COLOANA, 11, JV.suma, 0)) WRSCFDD, + sum(DECODE(JV.ID_JTVA_COLOANA, 12, JV.suma, 0)) WRN, + sum(DECODE(JV.ID_JTVA_COLOANA, 1006, JV.suma, 0)) RORTC24, + sum(DECODE(JV.ID_JTVA_COLOANA, 1007, JV.suma, 0)) RORTC20, + sum(DECODE(JV.ID_JTVA_COLOANA, 1016, JV.suma, 0)) RORTC21, + sum(DECODE(JV.ID_JTVA_COLOANA, 1017, JV.suma, 0)) RORTC11, + sum(DECODE(JV.ID_JTVA_COLOANA, 1008, JV.suma, 0)) RORTC19, + sum(DECODE(JV.ID_JTVA_COLOANA, 1009, JV.suma, 0)) RORTC9, + sum(DECODE(JV.ID_JTVA_COLOANA, 1010, JV.suma, 0)) RORTC5, + sum(DECODE(JV.ID_JTVA_COLOANA, 21, JV.suma, 0)) RO24NB, + sum(DECODE(JV.ID_JTVA_COLOANA, 22, JV.suma, 0)) RO24NT, + sum(DECODE(JV.ID_JTVA_COLOANA, 29, JV.suma, 0)) RO20NB, + sum(DECODE(JV.ID_JTVA_COLOANA, 30, JV.suma, 0)) RO20NT, + sum(DECODE(JV.ID_JTVA_COLOANA, 37, JV.suma, 0)) RO21NB, + sum(DECODE(JV.ID_JTVA_COLOANA, 38, JV.suma, 0)) RO21NT, + sum(DECODE(JV.ID_JTVA_COLOANA, 41, JV.suma, 0)) RO11NB, + sum(DECODE(JV.ID_JTVA_COLOANA, 42, JV.suma, 0)) RO11NT, + sum(DECODE(JV.ID_JTVA_COLOANA, 31, JV.suma, 0)) RO19NB, + sum(DECODE(JV.ID_JTVA_COLOANA, 32, JV.suma, 0)) RO19NT, + sum(DECODE(JV.ID_JTVA_COLOANA, 23, JV.suma, 0)) RO9NB, + sum(DECODE(JV.ID_JTVA_COLOANA, 24, JV.suma, 0)) RO9NT, + sum(DECODE(JV.ID_JTVA_COLOANA, 25, JV.suma, 0)) RO5NB, + sum(DECODE(JV.ID_JTVA_COLOANA, 26, JV.suma, 0)) RO5NT, + SUM(JV.REGULARIZARE) AS REGULARIZARE, + SUM(CASE + WHEN JV.ID_JTVA_COLOANA = 16 AND JV.SCD = '4428' THEN + JV.SUMA + ELSE + 0 + END) RO24TR, + SUM(CASE + WHEN JV.ID_JTVA_COLOANA = 28 AND JV.SCD = '4428' THEN + JV.SUMA + ELSE + 0 + END) RO20TR, + SUM(CASE + WHEN JV.ID_JTVA_COLOANA = 36 AND JV.SCD = '4428' THEN + JV.SUMA + ELSE + 0 + END) RO21TR, + SUM(CASE + WHEN JV.ID_JTVA_COLOANA = 40 AND JV.SCD = '4428' THEN + JV.SUMA + ELSE + 0 + END) RO11TR, + SUM(CASE + WHEN JV.ID_JTVA_COLOANA = 2 AND JV.SCD = '4428' THEN + JV.SUMA + ELSE + 0 + END) RO19TR, + SUM(CASE + WHEN JV.ID_JTVA_COLOANA = 4 AND JV.SCD = '4428' THEN + JV.SUMA + ELSE + 0 + END) RO9TR, + SUM(CASE + WHEN JV.ID_JTVA_COLOANA = 14 AND JV.SCD = '4428' THEN + JV.SUMA + ELSE + 0 + END) RO5TR, + SUM(CASE + WHEN JV.ID_JTVA_COLOANA = 1016 AND JV.SCD = '4428' THEN + JV.SUMA + ELSE + 0 + END) RORTD21, + SUM(CASE + WHEN JV.ID_JTVA_COLOANA = 1017 AND JV.SCD = '4428' THEN + JV.SUMA + ELSE + 0 + END) RORTD11, + SUM(CASE + WHEN ID_JTVA_COLOANA = 22 AND SCD = '4428' THEN + SUMA + ELSE + 0 + END) RO24NTR, + SUM(CASE + WHEN ID_JTVA_COLOANA = 30 AND SCD = '4428' THEN + SUMA + ELSE + 0 + END) RO20NTR, + SUM(CASE + WHEN ID_JTVA_COLOANA = 32 AND SCD = '4428' THEN + SUMA + ELSE + 0 + END) RO19NTR, + SUM(CASE + WHEN ID_JTVA_COLOANA = 24 AND SCD = '4428' THEN + SUMA + ELSE + 0 + END) RO9NTR, + SUM(CASE + WHEN ID_JTVA_COLOANA = 26 AND SCD = '4428' THEN + SUMA + ELSE + 0 + END) RO5NTR, + SUM(CASE + WHEN ID_JTVA_COLOANA = 38 AND SCD = '4428' THEN + SUMA + ELSE + 0 + END) RO21NTR, + SUM(CASE + WHEN ID_JTVA_COLOANA = 42 AND SCD = '4428' THEN + SUMA + ELSE + 0 + END) RO11NTR + FROM (SELECT A.AN, + A.LUNA, + (CASE + WHEN A.NRACT <> D.NRACT or + A.DATAACT <> D.DATAACT THEN + 1 + ELSE + 0 + END) AS NOTA_TVA_EX, + (CASE + WHEN A.NRACT <> D.NRACT or + A.DATAACT <> D.DATAACT OR + A.ID_SET <> D.ID_SET OR + NVL(A.SERIE_ACT, 'X') <> + NVL(D.SERIE_ACT, 'X') THEN + NULL + ELSE + A.ID_FDOC + END) AS ID_FDOC, + A.ID_FACT, + (CASE + WHEN A.NRACT <> D.NRACT THEN + D.NRACT + ELSE + A.NRACT + END) AS NRACT, + D.SERIE_ACT, + (CASE + WHEN A.NRACT <> D.NRACT or + A.DATAACT <> D.DATAACT THEN + TRUNC(D.DATAACT) + ELSE + TRUNC(A.DATAACT) + END) AS DATAACT, + (CASE + WHEN A.NRACT <> D.NRACT or + NVL(A.DATAIREG, A.DATAACT) <> + NVL(D.DATAIREG, D.DATAACT) THEN + TRUNC(NVL(D.DATAIREG, D.DATAACT)) + ELSE + TRUNC(NVL(A.DATAIREG, A.DATAACT)) + END) AS DATAIREG, + A.COD, + A.SCD, + A.SCC, + -- 4426 = 4427 sau 4428 = 4427 nu au parteneri + MAX(DECODE(E.EXCEPTIE, + 1, + A.ID_PARTC, + (CASE + -- ESTE POSIBIL SA FIE DOAR 5121 = 419 FARA 4111 = 4427, TREBUIE PARTENERUL 419 + WHEN A.SCC = '419' THEN + A.ID_PARTC + WHEN A.SCD IN (lcContTvaDeductibil, + lcContTvaNeexigibil) OR + SUBSTR(A.SCD, 1, 1) = '5' THEN + -9999999999 + ELSE + A.ID_PARTD + END))) OVER(PARTITION BY A.AN, A.LUNA, A.ID_FDOC, A.NRACT, A.DATAACT, A.COD) AS ID_PART, + -- INVERSARE SUME LA EXCEPTII + DECODE(A.ID_SET, 10616, -1, 1) * + DECODE(E.EXCEPTIE, 1, -A.SUMA, A.SUMA) AS SUMA, + -- MARCA REGULARIZARE FACTURI NEINTOCMITE + (CASE + WHEN INSTR(lcContDebitRegularizare, A.scd) > 0 and + INSTR(lcContCreditRegularizare, A.scc) > 0 THEN + 1 + ELSE + 0 + END) AS REGULARIZARE, + A.ID_JTVA_COLOANA, + A.ID_SUCURSALA + FROM (SELECT AN, + LUNA, + ID_FDOC, + ID_FACT, + NRACT, + SERIE_ACT, + DATAACT, + DATAIREG, + COD, + SCD, + SCC, + ID_PARTC, + ID_PARTD, + ID_SET, + SUMA, + ID_JTVA_COLOANA, + ID_SUCURSALA, + STERS + FROM ACT_TEMP + WHERE lcTabelSursa = 'act_temp' + AND AN = tnAn + AND LUNA = tnLuna + AND STERS = 0 + AND (ID_JTVA_COLOANA BETWEEN + lnIdMinJtvaColoana AND + lnIdMaxJtvaColoana OR + ID_JTVA_COLOANA BETWEEN 1006 AND 1010) + AND ID_SET <> 10621 + UNION ALL + SELECT AN, + LUNA, + ID_FDOC, + ID_FACT, + NRACT, + SERIE_ACT, + DATAACT, + DATAIREG, + COD, + SCD, + SCC, + ID_PARTC, + ID_PARTD, + ID_SET, + SUMA, + ID_JTVA_COLOANA, + ID_SUCURSALA, + STERS + FROM ACT + WHERE lcTabelSursa = 'act' + AND AN = tnAn + AND LUNA = tnLuna + AND STERS = 0 + AND (ID_JTVA_COLOANA BETWEEN + lnIdMinJtvaColoana AND + lnIdMaxJtvaColoana OR + ID_JTVA_COLOANA BETWEEN 1006 AND 1010) + AND ID_SET <> 10621) A + LEFT JOIN (SELECT DISTINCT 1 AS EXCEPTIE, + DECODE(DEBIT, + 1, + CONT_C, + CONT) AS SCD, + DECODE(DEBIT, + 1, + CONT, + CONT_C) AS SCC + FROM EXCEPTII_IREG + WHERE INVERS = 1 + AND IN_TVA = 1) E + ON A.SCD = E.SCD + AND A.SCC = E.SCC + LEFT JOIN DOCUMENTE D + ON A.ID_FACT = D.ID_DOC + WHERE A.AN = tnAn + and A.LUNA = tnLuna + and A.STERS = 0 + AND (A.ID_JTVA_COLOANA between lnIdMinJtvaColoana and + lnIdMaxJtvaColoana OR + A.ID_JTVA_COLOANA BETWEEN 1006 AND 1010) + -- IN JURNALUL DE VANZARI NU INTRA FACTURILE NEINTOCMITE + INCASARILE + -- SAU COMPENSARI 419 CU EXPLICATIE TVA + AND A.ID_SET <> 10621 + AND NOT (TRIM(NVL(A.SCD, 'X')) = '418' OR + (TRIM(NVL(A.SCD, 'X')) not in + ('4111', '461', '4511', '4118') AND + TRIM(NVL(A.SCC, 'X')) = '418')) + AND nvl2(pack_contafin.GET_ID_SUCURSALA(), + A.ID_SUCURSALA, + 0) = + nvl(pack_contafin.GET_ID_SUCURSALA(), 0)) JV + GROUP BY JV.AN, + JV.LUNA, + JV.ID_FACT, + JV.NRACT, + JV.SERIE_ACT, + JV.DATAACT, + JV.DATAIREG, + JV.ID_SUCURSALA)) S + ON (J.AN = S.AN AND J.LUNA = S.LUNA AND J.ID_FACT = S.ID_FACT AND NVL(J.ID_SUCURSALA, -99) = NVL(S.ID_SUCURSALA, -99)) + WHEN MATCHED THEN + UPDATE + SET J.TOTCTVA = J.TOTCTVA + (CASE + WHEN EXTRACT(MONTH FROM J.DATAACT) = J.LUNA AND + EXTRACT(YEAR FROM J.DATAACT) = J.AN THEN + S.TOTCTVA + ELSE + 0 + END), + J.TOTFTVATAX = J.TOTFTVATAX + (CASE + WHEN EXTRACT(MONTH FROM J.DATAACT) = J.LUNA AND + EXTRACT(YEAR FROM J.DATAACT) = J.AN THEN + S.TOTFTVATAX + ELSE + 0 + END), + J.TOTTVATAX = J.TOTTVATAX + (CASE + WHEN EXTRACT(MONTH FROM J.DATAACT) = J.LUNA AND + EXTRACT(YEAR FROM J.DATAACT) = J.AN THEN + S.TOTTVATAX + ELSE + 0 + END), + J.TOTNETAX = J.TOTNETAX + (CASE + WHEN EXTRACT(MONTH FROM J.DATAACT) = J.LUNA AND + EXTRACT(YEAR FROM J.DATAACT) = J.AN THEN + S.TOTNETAX + ELSE + 0 + END), + J.RO24B = J.RO24B + NVL(S.RO24B, 0) + (CASE + WHEN NVL(S.RO24B, 0) <> 0 AND NVL(J.RO24NT, 0) <> 0 AND + NVL(J.RO24NT, 0) - (NVL(J.RO24T, 0) + NVL(S.RO24T, 0)) = 0 THEN + NVL(J.RO24NB, 0) - (NVL(J.RO24B, 0) + NVL(S.RO24B, 0)) + ELSE + 0 + END), + J.RO24T = J.RO24T + S.RO24T, + J.RO20B = J.RO20B + NVL(S.RO20B, 0) + (CASE + WHEN NVL(S.RO20B, 0) <> 0 AND NVL(J.RO20NT, 0) <> 0 AND + NVL(J.RO20NT, 0) - (NVL(J.RO20T, 0) + NVL(S.RO20T, 0)) = 0 THEN + NVL(J.RO20NB, 0) - (NVL(J.RO20B, 0) + NVL(S.RO20B, 0)) + ELSE + 0 + END), + J.RO20T = J.RO20T + S.RO20T, + J.RO21B = J.RO21B + NVL(S.RO21B, 0) + (CASE + WHEN NVL(S.RO21B, 0) <> 0 AND NVL(J.RO21NT, 0) <> 0 AND + NVL(J.RO21NT, 0) - (NVL(J.RO21T, 0) + NVL(S.RO21T, 0)) = 0 THEN + NVL(J.RO21NB, 0) - (NVL(J.RO21B, 0) + NVL(S.RO21B, 0)) + ELSE + 0 + END), + J.RO21T = J.RO21T + S.RO21T, + J.RO11B = J.RO11B + NVL(S.RO11B, 0) + (CASE + WHEN NVL(S.RO11B, 0) <> 0 AND NVL(J.RO11NT, 0) <> 0 AND + NVL(J.RO11NT, 0) - (NVL(J.RO11T, 0) + NVL(S.RO11T, 0)) = 0 THEN + NVL(J.RO11NB, 0) - (NVL(J.RO11B, 0) + NVL(S.RO11B, 0)) + ELSE + 0 + END), + J.RO11T = J.RO11T + S.RO11T, + J.RO19B = J.RO19B + NVL(S.RO19B, 0) + (CASE + WHEN NVL(S.RO19B, 0) <> 0 AND NVL(J.RO19NT, 0) <> 0 AND + NVL(J.RO19NT, 0) - (NVL(J.RO19T, 0) + NVL(S.RO19T, 0)) = 0 THEN + NVL(J.RO19NB, 0) - (NVL(J.RO19B, 0) + NVL(S.RO19B, 0)) + ELSE + 0 + END), + J.RO19T = J.RO19T + S.RO19T, + J.RO9B = J.RO9B + NVL(S.RO9B, 0) + (CASE + WHEN NVL(S.RO9B, 0) <> 0 AND NVL(J.RO9NT, 0) <> 0 AND + NVL(J.RO9NT, 0) - (NVL(J.RO9T, 0) + NVL(S.RO9T, 0)) = 0 THEN + NVL(J.RO9NB, 0) - (NVL(J.RO9B, 0) + NVL(S.RO9B, 0)) + ELSE + 0 + END), + J.RO9T = J.RO9T + S.RO9T, + J.RO5B = J.RO5B + NVL(S.RO5B, 0) + (CASE + WHEN NVL(S.RO5B, 0) <> 0 AND NVL(J.RO5NT, 0) <> 0 AND + NVL(J.RO5NT, 0) - (NVL(J.RO5T, 0) + NVL(S.RO5T, 0)) = 0 THEN + NVL(J.RO5NB, 0) - (NVL(J.RO5B, 0) + NVL(S.RO5B, 0)) + ELSE + 0 + END), + J.RO5T = J.RO5T + S.RO5T, + J.RO24NB = J.RO24NB + S.RO24NB, + J.RO24NT = J.RO24NT + S.RO24NT, + J.RO20NB = J.RO20NB + S.RO20NB, + J.RO20NT = J.RO20NT + S.RO20NT, + J.RO21NB = J.RO21NB + S.RO21NB, + J.RO21NT = J.RO21NT + S.RO21NT, + J.RO11NB = J.RO11NB + S.RO11NB, + J.RO11NT = J.RO11NT + S.RO11NT, + J.RO19NB = J.RO19NB + S.RO19NB, + J.RO19NT = J.RO19NT + S.RO19NT, + J.RO9NB = J.RO9NB + S.RO9NB, + J.RO9NT = J.RO9NT + S.RO9NT, + J.RO5NB = J.RO5NB + S.RO5NB, + J.RO5NT = J.RO5NT + S.RO5NT, + J.ROTI = J.ROTI + S.ROTI, + J.CESCDD1 = J.CESCDD1 + S.CESCDD1, + J.CESCDD2 = J.CESCDD2 + S.CESCDD2, + J.CEOPTR = J.CEOPTR + S.CEOPTR, + J.CESVDD = J.CESVDD + S.CESVDD, + J.CESVFDD = J.CESVFDD + S.CESVFDD, + J.CESVFS = J.CESVFS + S.CESVFS, + J.WRSCDD = J.WRSCDD + S.WRSCDD, + J.WRSCDDAB = J.WRSCDDAB + S.WRSCDDAB, + J.WRSCDDCD = J.WRSCDDCD + S.WRSCDDCD, + J.FODD = J.FODD + S.FODD, + J.FOFDD = J.FOFDD + S.FOFDD, + J.WRSCFDD = J.WRSCFDD + S.WRSCFDD, + J.WRN = J.WRN + S.WRN, + J.RORTC24 = J.RORTC24 + S.RORTC24, + J.RORTC20 = J.RORTC20 + S.RORTC20, + J.RORTC21 = J.RORTC21 + S.RORTC21, + J.RORTC11 = J.RORTC11 + S.RORTC11, + J.RORTC19 = J.RORTC19 + S.RORTC19, + J.RORTC9 = J.RORTC9 + S.RORTC9, + J.RORTC5 = J.RORTC5 + S.RORTC5 DELETE + WHERE ' || tnScrie || ' = ' || + pack_contafin.nStergere || ' + and J.TOTCTVA = 0 + AND J.TOTFTVATAX = 0 + AND J.TOTTVATAX = 0 + AND J.TOTNETAX = 0 + AND J.RO24B = 0 + AND J.RO24T = 0 + AND J.RO20B = 0 + AND J.RO20T = 0 + AND J.RO19B = 0 + AND J.RO19T = 0 + AND J.RO9B = 0 + AND J.RO9T = 0 + AND J.RO5B = 0 + AND J.RO5T = 0 + AND J.RO24NB = 0 + AND J.RO24NT = 0 + AND J.RO20NB = 0 + AND J.RO20NT = 0 + AND J.RO19NB = 0 + AND J.RO19NT = 0 + AND J.RO9NB = 0 + AND J.RO9NT = 0 + AND J.RO5NB = 0 + AND J.RO5NT = 0 + AND J.ROTI = 0 + AND J.CESCDD1 = 0 + AND J.CESCDD2 = 0 + AND J.CEOPTR = 0 + AND J.CESVDD = 0 + AND J.CESVFDD = 0 + AND J.CESVFS = 0 + AND J.WRSCDD = 0 + AND J.WRSCDDAB = 0 + AND J.WRSCDDCD = 0 + AND J.FODD = 0 + AND J.FOFDD = 0 + AND J.WRSCFDD = 0 + AND J.WRN = 0 + AND J.RORTC24 = 0 + AND J.RORTC20 = 0 + AND J.RORTC19 = 0 + AND J.RORTC9 = 0 + AND J.RORTC5 = 0 WHEN NOT MATCHED THEN INSERT(AN, LUNA, ID_FACT, NRACT, SERIE_ACT, ID_FDOC, DATAACT, DATAIREG, ID_PART, TOTCTVA, TOTFTVATAX, TOTTVATAX, TOTNETAX, RO24B, RO24T, RO20B, RO20T, RO21B, RO21T, RO11B, RO11T, RO19B, RO19T, RO9B, RO9T, RO5B, RO5T, RO24NB, RO24NT, RO20NB, RO20NT, RO21NB, RO21NT, RO11NB, RO11NT, RO19NB, RO19NT, RO9NB, RO9NT, RO5NB, RO5NT, ROTI, CESCDD1, CESCDD2, CEOPTR, CESVDD, CESVFDD, CESVFS, WRSCDD, WRSCDDAB, WRSCDDCD, FODD, FOFDD, WRSCFDD, WRN, RORTC24, RORTC20, RORTC21, RORTC11, RORTC19, RORTC9, RORTC5, COD, ID_SUCURSALA) VALUES(S.AN, S.LUNA, S.ID_FACT, S.NRACT, S.SERIE_ACT, S.ID_FDOC, S.DATAACT, S.DATAIREG, S.ID_PART, S.TOTCTVA, S.TOTFTVATAX, S.TOTTVATAX, S.TOTNETAX,(CASE + WHEN NVL(S.RO24B, 0) <> 0 AND NVL(S.RO24NT, 0) <> 0 AND + NVL(S.RO24NT, 0) = NVL(S.RO24T, 0) THEN + NVL(S.RO24NB, 0) + ELSE + NVL(S.RO24B, 0) + END), S.RO24T,(CASE + WHEN NVL(S.RO20B, 0) <> 0 AND NVL(S.RO20NT, 0) <> 0 AND + NVL(S.RO20NT, 0) = NVL(S.RO20T, 0) THEN + NVL(S.RO20NB, 0) + ELSE + NVL(S.RO20B, 0) + END), S.RO20T,(CASE + WHEN NVL(S.RO21B, 0) <> 0 AND NVL(S.RO21NT, 0) <> 0 AND + NVL(S.RO21NT, 0) = NVL(S.RO21T, 0) THEN + NVL(S.RO21NB, 0) + ELSE + NVL(S.RO21B, 0) + END), S.RO21T,(CASE + WHEN NVL(S.RO11B, 0) <> 0 AND NVL(S.RO11NT, 0) <> 0 AND + NVL(S.RO11NT, 0) = NVL(S.RO11T, 0) THEN + NVL(S.RO11NB, 0) + ELSE + NVL(S.RO11B, 0) + END), S.RO11T,(CASE + WHEN NVL(S.RO19B, 0) <> 0 AND NVL(S.RO19NT, 0) <> 0 AND + NVL(S.RO19NT, 0) = NVL(S.RO19T, 0) THEN + NVL(S.RO19NB, 0) + ELSE + NVL(S.RO19B, 0) + END), S.RO19T,(CASE + WHEN NVL(S.RO9B, 0) <> 0 AND NVL(S.RO9NT, 0) <> 0 AND + NVL(S.RO9NT, 0) = NVL(S.RO9T, 0) THEN + NVL(S.RO9NB, 0) + ELSE + NVL(S.RO9B, 0) + END), S.RO9T,(CASE + WHEN NVL(S.RO5B, 0) <> 0 AND NVL(S.RO5NT, 0) <> 0 AND + NVL(S.RO5NT, 0) = NVL(S.RO5T, 0) THEN + NVL(S.RO5NB, 0) + ELSE + NVL(S.RO5B, 0) + END), S.RO5T, S.RO24NB, S.RO24NT, S.RO20NB, S.RO20NT, S.RO21NB, S.RO21NT, S.RO11NB, S.RO11NT, S.RO19NB, S.RO19NT, S.RO9NB, S.RO9NT, S.RO5NB, S.RO5NT, S.ROTI, S.CESCDD1, S.CESCDD2, S.CEOPTR, S.CESVDD, S.CESVFDD, S.CESVFS, S.WRSCDD, S.WRSCDDAB, S.WRSCDDCD, S.FODD, S.FOFDD, S.WRSCFDD, S.WRN, S.RORTC24, S.RORTC20, S.RORTC21, S.RORTC11, S.RORTC19, S.RORTC9, S.RORTC5, S.COD, S.ID_SUCURSALA); + + END SCRIE_JV_2007; + ------------------------------------------------------------------- + procedure SCRIE_JC_2007(tnAn JC2007.AN%TYPE, + tnLuna JC2007.LUNA%TYPE, + tnScrie number) IS + + lcSql clob; + lcContTvaDeductibil ACT.SCD%TYPE := '4426'; + lcContTvaColectat ACT.SCD%TYPE := '4427'; + lcContTvaNeexigibil ACT.SCD%TYPE := '4428'; + lcContDebitRegularizare VARCHAR2(100) := '408'; + lcContCreditRegularizare VARCHAR2(100) := '401,404,4511,462'; + lnIdMinJtvaColoana JTVA_COLOANE.ID_JTVA_COLOANA%TYPE := 101; + lnIdMaxJtvaColoana JTVA_COLOANE.ID_JTVA_COLOANA%TYPE := 500; + lcTabelSursa VARCHAR2(100); + lcCondSucursala VARCHAR2(1000); + begin + -- tnScrie: 0 - scriere; 1 - refacere; 2 - stergere + -- 0,2 - selectie din act_temp + -- 1 - selectie din act + if pack_contafin.get_id_sucursala() is not null then + lcCondSucursala := ' AND ALIAS.ID_SUCURSALA = ' || + pack_contafin.GET_ID_SUCURSALA(); + end if; + + if tnScrie in (pack_contafin.nScriere, pack_contafin.nStergere) then + lcTabelSursa := 'act_temp'; -- scriere, stergere + else + lcTabelSursa := 'act'; -- refacere + end if; + + -- COMPLETARE JC2007 CU ID_SET 10616 STORNARE PLATA/INCASARE + pack_contafin.completeaza_jc_2007(tnAn, + tnLuna, + lcTabelSursa, + lcCondSucursala); + -- MERGE replaced with FORALL BULK operations to avoid Oracle XE bugs and improve performance + DECLARE + CURSOR c_source IS + SELECT ID_SUCURSALA, + AN, + LUNA, + ID_FACT, + ID_FDOC, + NRACT, + SERIE_ACT, + DATAACT, + DATAIREG, + ID_PART, + COD, + (CASE + WHEN NOTA_TVA_EX = 1 THEN + 0 + WHEN REGULARIZARE > 0 THEN + TOTCTVA - RO24TR - RO20TR - RO21TR - RO11TR - RO19BCTR - + RO19BVTR - RO19BFTR - RO09BCTR - RO09BVTR - RO09BFTR - + RO05TR - FO21TR - FO24TR - FO20TR - FO19BCTR - FO19BVTR - + FO19BFTR - FO09BCTR - FO09BVTR - FO09BFTR - CE24TR - + CE20TR - CE5STR - CE9STR - CE21STR - CE24STR - CE20STR - + CE19STR - CEBCTR - CEBVTR - CEBFTR - TI21TR - TI11TR - + TI24TR - TI20TR - TI19BCTR - TI19BVTR - TI19BFTR - + TI09BVTR - TI09BFTR - RO24NTR - RO20NTR - RO21NTR - + RO11NTR - RO19NTR - RO09NTR - RO05NTR + ELSE + TOTCTVA - DECODE(RO21NB, 0, 0, RO21B) - + DECODE(RO11NB, 0, 0, RO11B) - DECODE(RO24NB, 0, 0, RO24B) - + DECODE(RO20NB, 0, 0, RO20B) - + DECODE(RO19NB, 0, 0, RO19BCB + RO19BVB + RO19BFB) - + DECODE(RO9NB, 0, 0, RO09BCB + RO09BVB + RO09BFB) - + DECODE(RO5NB, 0, 0, RO05B) - DECODE(RO21NT, 0, 0, RO21T) - + DECODE(RO11NT, 0, 0, RO11T) - DECODE(RO24NT, 0, 0, RO24T) - + DECODE(RO20NT, 0, 0, RO20T) - + DECODE(RO19NT, 0, 0, RO19BCT + RO19BVT + RO19BFT) - + DECODE(RO9NT, 0, 0, RO09BCT + RO09BVT + RO09BFT) - + DECODE(RO5NT, 0, 0, RO05T) + END) AS TOTCTVA, + (CASE + WHEN NOTA_TVA_EX = 1 THEN + 0 + WHEN REGULARIZARE > 0 THEN + DECODE(RO24NB, 0, RO24B, RO24NB) + + DECODE(RO20NB, 0, RO20B, RO20NB) + + DECODE(RO21NB, 0, RO21B, RO21NB) + + DECODE(RO11NB, 0, RO11B, RO11NB) + + DECODE(RO19NB, 0, RO19BCB + RO19BVB + RO19BFB, RO19NB) + + DECODE(RO9NB, 0, RO09BCB + RO09BVB + RO09BFB, RO9NB) + + DECODE(RO5NB, 0, RO05B, RO5NB) - + DECODE(RO24NB, 0, RO24TR, RO24NTR) - + DECODE(RO20NB, 0, RO20TR, RO20NTR) - + DECODE(RO21NB, 0, RO21TR, RO21NTR) - + DECODE(RO11NB, 0, RO11TR, RO11NTR) - + DECODE(RO19NB, 0, RO19BCTR + RO19BVTR + RO19BFTR, RO19NTR) - + DECODE(RO9NB, 0, RO09BCTR + RO09BVTR + RO09BFTR, RO09NTR) - + DECODE(RO5NB, 0, RO05TR, RO05NTR) - FO21TR - FO24TR - + FO20TR - FO19BCTR - FO19BVTR - FO19BFTR - FO09BCTR - + FO09BVTR - FO09BFTR - CE24TR - CE20TR - CE5STR - CE9STR - + CE21STR - CE24STR - CE20STR - CE19STR - CEBCTR - CEBVTR - + CEBFTR - TI21TR - TI11TR - TI24TR - TI20TR - TI19BCTR - + TI19BVTR - TI19BFTR - TI09BVTR - TI09BFTR + + ELSE + DECODE(RO24NB, 0, RO24B, RO24NB) + + DECODE(RO20NB, 0, RO20B, RO20NB) + + DECODE(RO21NB, 0, RO21B, RO21NB) + + DECODE(RO11NB, 0, RO11B, RO11NB) + + DECODE(RO19NB, 0, RO19BCB + RO19BVB + RO19BFB, RO19NB) + + DECODE(RO9NB, 0, RO09BCB + RO09BVB + RO09BFB, RO9NB) + + DECODE(RO5NB, 0, RO05B, RO5NB) + END) AS TOTFTVATAX, + DECODE(NOTA_TVA_EX, + 1, + 0, + DECODE(RO24NT, 0, RO24T, RO24NT) + + DECODE(RO20NT, 0, RO20T, RO20NT) + + DECODE(RO21NT, 0, RO21T, RO21NT) + + DECODE(RO11NT, 0, RO11T, RO11NT) + + DECODE(RO19NT, 0, RO19BCT + RO19BVT + RO19BFT, RO19NT) + + DECODE(RO9NT, 0, RO09BCT + RO09BVT + RO09BFT, RO9NT) + + DECODE(RO5NT, 0, RO05T, RO5NT)) AS TOTTVATAX, + ROSCN + FOSCN + (CASE + WHEN REGULARIZARE > 0 THEN + CEBCB - CEBCTR + ELSE + CEBCB + END) + CEBCT + (CASE + WHEN REGULARIZARE > 0 THEN + CEBVB - CEBVTR + ELSE + CEBVB + END) + CEBVT + CEBVSC + CEBVN + (CASE + WHEN REGULARIZARE > 0 THEN + CEBFB - CEBFTR + ELSE + CEBFB + END) + CEBFT + CEBFSC + CEBFN + ROTN + ROTN50 + ROTN100 AS TOTNETAX, + (CASE + WHEN REGULARIZARE > 0 THEN + DECODE(RO24B, + 0, + DECODE(RO24T, 0, 0, ROUND(RO24T / 0.24, 2)), + RO24B - RO24TR) + ELSE + DECODE(RO24B, + 0, + DECODE(RO24T, 0, 0, ROUND(RO24T / 0.24, 2)), + RO24B) + END) AS RO24B, + RO24T, + (CASE + WHEN REGULARIZARE > 0 THEN + DECODE(RO20B, + 0, + DECODE(RO20T, 0, 0, ROUND(RO20T / 0.20, 2)), + RO20B - RO20TR) + ELSE + DECODE(RO20B, + 0, + DECODE(RO20T, 0, 0, ROUND(RO20T / 0.20, 2)), + RO20B) + END) AS RO20B, + RO20T, + (CASE + WHEN REGULARIZARE > 0 THEN + DECODE(RO21B, + 0, + DECODE(RO21T, 0, 0, ROUND(RO21T / 0.21, 2)), + RO21B - RO21TR) + ELSE + DECODE(RO21B, + 0, + DECODE(RO21T, 0, 0, ROUND(RO21T / 0.21, 2)), + RO21B) + END) AS RO21B, + RO21T, + (CASE + WHEN REGULARIZARE > 0 THEN + DECODE(RO11B, + 0, + DECODE(RO11T, 0, 0, ROUND(RO11T / 0.11, 2)), + RO11B - RO11TR) + + ELSE + DECODE(RO11B, + 0, + DECODE(RO11T, 0, 0, ROUND(RO11T / 0.11, 2)), + RO11B) + END) AS RO11B, + RO11T, + (CASE + WHEN REGULARIZARE > 0 THEN + DECODE(RO19BCB, + 0, + DECODE(RO19BCT, 0, 0, ROUND(RO19BCT / 0.19, 2)), + RO19BCB - RO19BCTR) + ELSE + DECODE(RO19BCB, + 0, + DECODE(RO19BCT, 0, 0, ROUND(RO19BCT / 0.19, 2)), + RO19BCB) + END) AS RO19BCB, + RO19BCT, + (CASE + WHEN REGULARIZARE > 0 THEN + DECODE(RO19BVB, + 0, + DECODE(RO19BVT, 0, 0, ROUND(RO19BVT / 0.19, 2)), + RO19BVB - RO19BVTR) + ELSE + DECODE(RO19BVB, + 0, + DECODE(RO19BVT, 0, 0, ROUND(RO19BVT / 0.19, 2)), + RO19BVB) + END) AS RO19BVB, + RO19BVT, + (CASE + WHEN REGULARIZARE > 0 THEN + DECODE(RO19BFB, + 0, + DECODE(RO19BFT, 0, 0, ROUND(RO19BFT / 0.19, 2)), + RO19BFB - RO19BFTR) + ELSE + DECODE(RO19BFB, + 0, + DECODE(RO19BFT, 0, 0, ROUND(RO19BFT / 0.19, 2)), + RO19BFB) + END) AS RO19BFB, + RO19BFT, + (CASE + WHEN REGULARIZARE > 0 THEN + DECODE(RO09BCB, + 0, + DECODE(RO09BCT, 0, 0, ROUND(RO09BCT / 0.09, 2)), + RO09BCB - RO09BCTR) + ELSE + DECODE(RO09BCB, + 0, + DECODE(RO09BCT, 0, 0, ROUND(RO09BCT / 0.09, 2)), + RO09BCB) + END) AS RO09BCB, + RO09BCT, + (CASE + WHEN REGULARIZARE > 0 THEN + DECODE(RO09BVB, + 0, + DECODE(RO09BVT, 0, 0, ROUND(RO09BVT / 0.09, 2)), + RO09BVB - RO09BVTR) + ELSE + DECODE(RO09BVB, + 0, + DECODE(RO09BVT, 0, 0, ROUND(RO09BVT / 0.09, 2)), + RO09BVB) + END) AS RO09BVB, + RO09BVT, + (CASE + WHEN REGULARIZARE > 0 THEN + DECODE(RO09BFB, + 0, + DECODE(RO09BFT, 0, 0, ROUND(RO09BFT / 0.09, 2)), + RO09BFB - RO09BFTR) + ELSE + DECODE(RO09BFB, + 0, + DECODE(RO09BFT, 0, 0, ROUND(RO09BFT / 0.09, 2)), + RO09BFB) + END) AS RO09BFB, + RO09BFT, + (CASE + WHEN REGULARIZARE > 0 THEN + DECODE(RO05B, + 0, + DECODE(RO05T, 0, 0, ROUND(RO05T / 0.05, 2)), + RO05B - RO05TR) + ELSE + DECODE(RO05B, + 0, + DECODE(RO05T, 0, 0, ROUND(RO05T / 0.05, 2)), + RO05B) + END) AS RO05B, + RO05T, + ROSCN, + (CASE + WHEN REGULARIZARE > 0 THEN + FO21B - FO21TR + ELSE + FO21B + END) AS FO21B, + FO21T, + (CASE + WHEN REGULARIZARE > 0 THEN + FO24B - FO24TR + ELSE + FO24B + END) AS FO24B, + FO24T, + (CASE + WHEN REGULARIZARE > 0 THEN + FO20B - FO20TR + ELSE + FO20B + END) AS FO20B, + FO20T, + (CASE + WHEN REGULARIZARE > 0 THEN + FO19BCB - FO19BCTR + ELSE + FO19BCB + END) AS FO19BCB, + FO19BCT, + (CASE + WHEN REGULARIZARE > 0 THEN + FO19BVB - FO19BVTR + ELSE + FO19BVB + END) AS FO19BVB, + FO19BVT, + (CASE + WHEN REGULARIZARE > 0 THEN + FO19BFB - FO19BFTR + ELSE + FO19BFB + END) AS FO19BFB, + FO19BFT, + (CASE + WHEN REGULARIZARE > 0 THEN + XX21TIB - XX21TITR + ELSE + XX21TIB + END) AS XX21TIB, + XX21TIT, + (CASE + WHEN REGULARIZARE > 0 THEN + XX11TIB - XX11TITR + ELSE + XX11TIB + END) AS XX11TIB, + XX11TIT, + (CASE + WHEN REGULARIZARE > 0 THEN + XX19TIB - XX19TITR + ELSE + XX19TIB + END) AS XX19TIB, + XX19TIT, + (CASE + WHEN REGULARIZARE > 0 THEN + XX9TIB - XX9TITR + ELSE + XX9TIB + END) AS XX9TIB, + XX9TIT, + (CASE + WHEN REGULARIZARE > 0 THEN + FO09BCB - FO09BCTR + ELSE + FO09BCB + END) AS FO09BCB, + FO09BCT, + (CASE + WHEN REGULARIZARE > 0 THEN + FO09BVB - FO09BVTR + ELSE + FO09BVB + END) AS FO09BVB, + FO09BVT, + (CASE + WHEN REGULARIZARE > 0 THEN + FO09BFB - FO09BFTR + ELSE + FO09BFB + END) AS FO09BFB, + FO09BFT, + FOSCN, + (CASE + WHEN REGULARIZARE > 0 THEN + CE24B - CE24TR + ELSE + CE24B + END) AS CE24B, + CE24T, + (CASE + WHEN REGULARIZARE > 0 THEN + CE20B - CE20TR + ELSE + CE20B + END) AS CE20B, + CE20T, + (CASE + WHEN REGULARIZARE > 0 THEN + CE5SB - CE5STR + ELSE + CE5SB + END) AS CE5SB, + CE5ST, + (CASE + WHEN REGULARIZARE > 0 THEN + CE9SB - CE9STR + ELSE + CE9SB + END) AS CE9SB, + CE9ST, + (CASE + WHEN REGULARIZARE > 0 THEN + CE24SB - CE24STR + ELSE + CE24SB + END) AS CE24SB, + CE24ST, + (CASE + WHEN REGULARIZARE > 0 THEN + CE20SB - CE20STR + ELSE + CE20SB + END) AS CE20SB, + CE20ST, + (CASE + WHEN REGULARIZARE > 0 THEN + CE21SB - CE21STR + ELSE + CE21SB + END) AS CE21SB, + CE21ST, + (CASE + WHEN REGULARIZARE > 0 THEN + CE19SB - CE19STR + ELSE + CE19SB + END) AS CE19SB, + CE19ST, + (CASE + WHEN REGULARIZARE > 0 THEN + CEBCB - CEBCTR + ELSE + CEBCB + END) AS CEBCB, + CEBCT, + (CASE + WHEN REGULARIZARE > 0 THEN + CEBVB - CEBVTR + ELSE + CEBVB + END) AS CEBVB, + CEBVT, + CEBVSC, + CEBVN, + (CASE + WHEN REGULARIZARE > 0 THEN + CEBFB - CEBFTR + ELSE + CEBFB + END) AS CEBFB, + CEBFT, + CEBFSC, + CEBFN, + (CASE + WHEN REGULARIZARE > 0 THEN + CE21CTB - CE21CTTR + ELSE + CE21CTB + END) AS CE21CTB, + CE21CTT, + (CASE + WHEN REGULARIZARE > 0 THEN + CE11CTB - CE11CTTR + ELSE + CE11CTB + END) AS CE11CTB, + CE11CTT, + (CASE + WHEN REGULARIZARE > 0 THEN + CE19CTB - CE19CTTR + ELSE + CE19CTB + END) AS CE19CTB, + CE19CTT, + (CASE + WHEN REGULARIZARE > 0 THEN + CE9CTB - CE9CTTR + ELSE + CE9CTB + END) AS CE9CTB, + CE9CTT, + (CASE + WHEN REGULARIZARE > 0 THEN + CE5CTB - CE5CTTR + ELSE + CE5CTB + END) AS CE5CTB, + CE5CTT, + (CASE + WHEN REGULARIZARE > 0 THEN + CE21FTB - CE21FTTR + ELSE + CE21FTB + END) AS CE21FTB, + CE21FTT, + (CASE + WHEN REGULARIZARE > 0 THEN + CE11FTB - CE11FTTR + ELSE + CE11FTB + END) AS CE11FTB, + CE11FTT, + (CASE + WHEN REGULARIZARE > 0 THEN + CE19FTB - CE19FTTR + ELSE + CE19FTB + END) AS CE19FTB, + CE19FTT, + (CASE + WHEN REGULARIZARE > 0 THEN + CE9FTB - CE9FTTR + ELSE + CE9FTB + END) AS CE9FTB, + CE9FTT, + (CASE + WHEN REGULARIZARE > 0 THEN + CE5FTB - CE5FTTR + ELSE + CE5FTB + END) AS CE5FTB, + CE5FTT, + (CASE + WHEN REGULARIZARE > 0 THEN + TI24B - TI24TR + ELSE + TI24B + END) AS TI24B, + TI24T, + (CASE + WHEN REGULARIZARE > 0 THEN + TI20B - TI20TR + ELSE + TI20B + END) AS TI20B, + TI20T, + (CASE + WHEN REGULARIZARE > 0 THEN + TI21B - TI21TR + ELSE + TI21B + END) AS TI21B, + TI21T, + (CASE + WHEN REGULARIZARE > 0 THEN + TI11B - TI11TR + ELSE + TI11B + END) AS TI11B, + TI11T, + (CASE + WHEN REGULARIZARE > 0 THEN + TI19BCB - TI19BCTR + ELSE + TI19BCB + END) AS TI19BCB, + TI19BCT, + (CASE + WHEN REGULARIZARE > 0 THEN + TI19BVB - TI19BVTR + ELSE + TI19BVB + END) AS TI19BVB, + TI19BVT, + (CASE + WHEN REGULARIZARE > 0 THEN + TI19BFB - TI19BFTR + ELSE + TI19BFB + END) AS TI19BFB, + TI19BFT, + (CASE + WHEN REGULARIZARE > 0 THEN + TI09BVB - TI09BVTR + ELSE + TI09BVB + END) AS TI09BVB, + TI09BVT, + (CASE + WHEN REGULARIZARE > 0 THEN + TI09BFB - TI09BFTR + ELSE + TI09BFB + END) AS TI09BFB, + TI09BFT, + (CASE + WHEN REGULARIZARE > 0 THEN + RO24NB - RO24NTR + ELSE + RO24NB + END) AS RO24NB, + RO24NT, + (CASE + WHEN REGULARIZARE > 0 THEN + RO20NB - RO20NTR + ELSE + RO20NB + END) AS RO20NB, + RO20NT, + (CASE + WHEN REGULARIZARE > 0 THEN + RO21NB - RO21NTR + ELSE + RO21NB + END) AS RO21NB, + RO21NT, + (CASE + WHEN REGULARIZARE > 0 THEN + RO11NB - RO11NTR + ELSE + RO11NB + END) AS RO11NB, + RO11NT, + (CASE + WHEN REGULARIZARE > 0 THEN + RO19NB - RO19NTR + ELSE + RO19NB + END) AS RO19NB, + RO19NT, + (CASE + WHEN REGULARIZARE > 0 THEN + RO9NB - RO09NTR + ELSE + RO9NB + END) AS RO9NB, + RO9NT, + (CASE + WHEN REGULARIZARE > 0 THEN + RO5NB - RO05NTR + ELSE + RO5NB + END) AS RO5NB, + RO5NT, + ROTN, + ROTN50, + ROTN100, + RORTD24, + RORTD20, + RORTD19, + RORTD9, + RORTD5, + RORTD21, + RORTD11 + FROM (SELECT JC.ID_SUCURSALA, + JC.AN, + JC.LUNA, + JC.ID_FACT, + MAX(JC.ID_FDOC) AS ID_FDOC, + JC.NRACT, + JC.SERIE_ACT, + JC.DATAACT, + JC.DATAIREG, + MAX(JC.ID_PART) AS ID_PART, + MIN(JC.COD) AS COD, + MIN(JC.NOTA_TVA_EX) AS NOTA_TVA_EX, + sum(CASE + WHEN NVL(JC.ID_JTVA_COLOANA, 0) > 100 and + JC.ID_JTVA_COLOANA NOT IN (1001, 1004, 1005) THEN + JC.suma + ELSE + 0 + END) TOTCTVA, + SUM(CASE + WHEN ID_JTVA_COLOANA In (156, + 176, + 208, + 212, + 107, + 109, + 111, + 154, + 170, + 172, + 174, + 178, + 210, + 214, + 101, + 103, + 105, + 188) THEN + JC.suma + ELSE + 0 + END) As totftvatax, + SUM(CASE + WHEN ID_JTVA_COLOANA In (157, + 177, + 209, + 213, + 108, + 110, + 112, + 155, + 171, + 173, + 175, + 179, + 211, + 215, + 102, + 104, + 106, + 189) THEN + JC.suma + ELSE + 0 + END) As tottvatax, + sum(DECODE(JC.ID_JTVA_COLOANA, 156, JC.suma, 0)) RO24B, + sum(DECODE(JC.ID_JTVA_COLOANA, 157, JC.suma, 0)) RO24T, + sum(DECODE(JC.ID_JTVA_COLOANA, 176, JC.suma, 0)) RO20B, + sum(DECODE(JC.ID_JTVA_COLOANA, 177, JC.suma, 0)) RO20T, + sum(DECODE(JC.ID_JTVA_COLOANA, 208, JC.suma, 0)) RO21B, + sum(DECODE(JC.ID_JTVA_COLOANA, 209, JC.suma, 0)) RO21T, + sum(DECODE(JC.ID_JTVA_COLOANA, 101, JC.suma, 0)) RO19BCB, + sum(DECODE(JC.ID_JTVA_COLOANA, 102, JC.suma, 0)) RO19BCT, + sum(DECODE(JC.ID_JTVA_COLOANA, 103, JC.suma, 0)) RO19BVB, + sum(DECODE(JC.ID_JTVA_COLOANA, 104, JC.suma, 0)) RO19BVT, + sum(DECODE(JC.ID_JTVA_COLOANA, 105, JC.suma, 0)) RO19BFB, + sum(DECODE(JC.ID_JTVA_COLOANA, 106, JC.suma, 0)) RO19BFT, + sum(DECODE(JC.ID_JTVA_COLOANA, 107, JC.suma, 0)) RO09BCB, + sum(DECODE(JC.ID_JTVA_COLOANA, 108, JC.suma, 0)) RO09BCT, + sum(DECODE(JC.ID_JTVA_COLOANA, 109, JC.suma, 0)) RO09BVB, + sum(DECODE(JC.ID_JTVA_COLOANA, 110, JC.suma, 0)) RO09BVT, + sum(DECODE(JC.ID_JTVA_COLOANA, 111, JC.suma, 0)) RO09BFB, + sum(DECODE(JC.ID_JTVA_COLOANA, 112, JC.suma, 0)) RO09BFT, + sum(DECODE(JC.ID_JTVA_COLOANA, 154, JC.suma, 0)) RO05B, + sum(DECODE(JC.ID_JTVA_COLOANA, 155, JC.suma, 0)) RO05T, + sum(DECODE(JC.ID_JTVA_COLOANA, 212, JC.suma, 0)) RO11B, + sum(DECODE(JC.ID_JTVA_COLOANA, 213, JC.suma, 0)) RO11T, + sum(DECODE(JC.ID_JTVA_COLOANA, 113, JC.suma, 0)) ROSCN, + sum(DECODE(JC.ID_JTVA_COLOANA, 158, JC.suma, 0)) FO24B, + sum(DECODE(JC.ID_JTVA_COLOANA, 159, JC.suma, 0)) FO24T, + sum(DECODE(JC.ID_JTVA_COLOANA, 180, JC.suma, 0)) FO20B, + sum(DECODE(JC.ID_JTVA_COLOANA, 181, JC.suma, 0)) FO20T, + sum(DECODE(JC.ID_JTVA_COLOANA, 220, JC.suma, 0)) FO21B, + sum(DECODE(JC.ID_JTVA_COLOANA, 221, JC.suma, 0)) FO21T, + sum(DECODE(JC.ID_JTVA_COLOANA, 114, JC.suma, 0)) FO19BCB, + sum(DECODE(JC.ID_JTVA_COLOANA, 115, JC.suma, 0)) FO19BCT, + sum(DECODE(JC.ID_JTVA_COLOANA, 116, JC.suma, 0)) FO19BVB, + sum(DECODE(JC.ID_JTVA_COLOANA, 117, JC.suma, 0)) FO19BVT, + sum(DECODE(JC.ID_JTVA_COLOANA, 118, JC.suma, 0)) FO19BFB, + sum(DECODE(JC.ID_JTVA_COLOANA, 119, JC.suma, 0)) FO19BFT, + sum(DECODE(JC.ID_JTVA_COLOANA, 192, JC.suma, 0)) XX19TIB, + sum(DECODE(JC.ID_JTVA_COLOANA, 193, JC.suma, 0)) XX19TIT, + sum(DECODE(JC.ID_JTVA_COLOANA, 224, JC.suma, 0)) XX21TIB, + sum(DECODE(JC.ID_JTVA_COLOANA, 225, JC.suma, 0)) XX21TIT, + sum(DECODE(JC.ID_JTVA_COLOANA, 230, JC.suma, 0)) XX11TIB, + sum(DECODE(JC.ID_JTVA_COLOANA, 231, JC.suma, 0)) XX11TIT, + sum(DECODE(JC.ID_JTVA_COLOANA, 206, JC.suma, 0)) XX9TIB, + sum(DECODE(JC.ID_JTVA_COLOANA, 207, JC.suma, 0)) XX9TIT, + sum(DECODE(JC.ID_JTVA_COLOANA, 120, JC.suma, 0)) FO09BCB, + sum(DECODE(JC.ID_JTVA_COLOANA, 121, JC.suma, 0)) FO09BCT, + sum(DECODE(JC.ID_JTVA_COLOANA, 122, JC.suma, 0)) FO09BVB, + sum(DECODE(JC.ID_JTVA_COLOANA, 123, JC.suma, 0)) FO09BVT, + sum(DECODE(JC.ID_JTVA_COLOANA, 124, JC.suma, 0)) FO09BFB, + sum(DECODE(JC.ID_JTVA_COLOANA, 125, JC.suma, 0)) FO09BFT, + sum(DECODE(JC.ID_JTVA_COLOANA, 126, JC.suma, 0)) FOSCN, + sum(DECODE(JC.ID_JTVA_COLOANA, 160, JC.suma, 0)) CE24B, + sum(DECODE(JC.ID_JTVA_COLOANA, 161, JC.suma, 0)) CE24T, + sum(DECODE(JC.ID_JTVA_COLOANA, 182, JC.suma, 0)) CE20B, + sum(DECODE(JC.ID_JTVA_COLOANA, 183, JC.suma, 0)) CE20T, + sum(DECODE(JC.ID_JTVA_COLOANA, 164, JC.suma, 0)) CE5SB, + sum(DECODE(JC.ID_JTVA_COLOANA, 165, JC.suma, 0)) CE5ST, + sum(DECODE(JC.ID_JTVA_COLOANA, 166, JC.suma, 0)) CE9SB, + sum(DECODE(JC.ID_JTVA_COLOANA, 167, JC.suma, 0)) CE9ST, + sum(DECODE(JC.ID_JTVA_COLOANA, 168, JC.suma, 0)) CE24SB, + sum(DECODE(JC.ID_JTVA_COLOANA, 169, JC.suma, 0)) CE24ST, + sum(DECODE(JC.ID_JTVA_COLOANA, 184, JC.suma, 0)) CE20SB, + sum(DECODE(JC.ID_JTVA_COLOANA, 185, JC.suma, 0)) CE20ST, + sum(DECODE(JC.ID_JTVA_COLOANA, 190, JC.suma, 0)) CE19SB, + sum(DECODE(JC.ID_JTVA_COLOANA, 191, JC.suma, 0)) CE19ST, + sum(DECODE(JC.ID_JTVA_COLOANA, 222, JC.suma, 0)) CE21SB, + sum(DECODE(JC.ID_JTVA_COLOANA, 223, JC.suma, 0)) CE21ST, + sum(DECODE(JC.ID_JTVA_COLOANA, + 127, + JC.suma, + 148, + JC.suma, + 0)) CEBCB, + sum(DECODE(JC.ID_JTVA_COLOANA, + 128, + JC.suma, + 149, + JC.suma, + 0)) CEBCT, + sum(DECODE(JC.ID_JTVA_COLOANA, + 129, + JC.suma, + 150, + JC.suma, + 0)) CEBVB, + sum(DECODE(JC.ID_JTVA_COLOANA, + 130, + JC.suma, + 151, + JC.suma, + 0)) CEBVT, + sum(DECODE(JC.ID_JTVA_COLOANA, 131, JC.suma, 0)) CEBVSC, + sum(DECODE(JC.ID_JTVA_COLOANA, 132, JC.suma, 0)) CEBVN, + sum(DECODE(JC.ID_JTVA_COLOANA, + 133, + JC.suma, + 152, + JC.suma, + 0)) CEBFB, + sum(DECODE(JC.ID_JTVA_COLOANA, + 134, + JC.suma, + 153, + JC.suma, + 0)) CEBFT, + sum(DECODE(JC.ID_JTVA_COLOANA, 135, JC.suma, 0)) CEBFSC, + sum(DECODE(JC.ID_JTVA_COLOANA, 136, JC.suma, 0)) CEBFN, + sum(DECODE(JC.ID_JTVA_COLOANA, 194, JC.suma, 0)) CE19CTB, + sum(DECODE(JC.ID_JTVA_COLOANA, 195, JC.suma, 0)) CE19CTT, + sum(DECODE(JC.ID_JTVA_COLOANA, 226, JC.suma, 0)) CE21CTB, + sum(DECODE(JC.ID_JTVA_COLOANA, 227, JC.suma, 0)) CE21CTT, + sum(DECODE(JC.ID_JTVA_COLOANA, 232, JC.suma, 0)) CE11CTB, + sum(DECODE(JC.ID_JTVA_COLOANA, 233, JC.suma, 0)) CE11CTT, + sum(DECODE(JC.ID_JTVA_COLOANA, 196, JC.suma, 0)) CE9CTB, + sum(DECODE(JC.ID_JTVA_COLOANA, 197, JC.suma, 0)) CE9CTT, + sum(DECODE(JC.ID_JTVA_COLOANA, 198, JC.suma, 0)) CE5CTB, + sum(DECODE(JC.ID_JTVA_COLOANA, 199, JC.suma, 0)) CE5CTT, + sum(DECODE(JC.ID_JTVA_COLOANA, 200, JC.suma, 0)) CE19FTB, + sum(DECODE(JC.ID_JTVA_COLOANA, 201, JC.suma, 0)) CE19FTT, + sum(DECODE(JC.ID_JTVA_COLOANA, 228, JC.suma, 0)) CE21FTB, + sum(DECODE(JC.ID_JTVA_COLOANA, 229, JC.suma, 0)) CE21FTT, + sum(DECODE(JC.ID_JTVA_COLOANA, 234, JC.suma, 0)) CE11FTB, + sum(DECODE(JC.ID_JTVA_COLOANA, 235, JC.suma, 0)) CE11FTT, + sum(DECODE(JC.ID_JTVA_COLOANA, 202, JC.suma, 0)) CE9FTB, + sum(DECODE(JC.ID_JTVA_COLOANA, 203, JC.suma, 0)) CE9FTT, + sum(DECODE(JC.ID_JTVA_COLOANA, 204, JC.suma, 0)) CE5FTB, + sum(DECODE(JC.ID_JTVA_COLOANA, 205, JC.suma, 0)) CE5FTT, + sum(DECODE(JC.ID_JTVA_COLOANA, 162, JC.suma, 0)) TI24B, + sum(DECODE(JC.ID_JTVA_COLOANA, 163, JC.suma, 0)) TI24T, + sum(DECODE(JC.ID_JTVA_COLOANA, 186, JC.suma, 0)) TI20B, + sum(DECODE(JC.ID_JTVA_COLOANA, 187, JC.suma, 0)) TI20T, + sum(DECODE(JC.ID_JTVA_COLOANA, 216, JC.suma, 0)) TI21B, + sum(DECODE(JC.ID_JTVA_COLOANA, 217, JC.suma, 0)) TI21T, + sum(DECODE(JC.ID_JTVA_COLOANA, 218, JC.suma, 0)) TI11B, + sum(DECODE(JC.ID_JTVA_COLOANA, 219, JC.suma, 0)) TI11T, + sum(DECODE(JC.ID_JTVA_COLOANA, 137, JC.suma, 0)) TI19BCB, + sum(DECODE(JC.ID_JTVA_COLOANA, 138, JC.suma, 0)) TI19BCT, + sum(DECODE(JC.ID_JTVA_COLOANA, 139, JC.suma, 0)) TI19BVB, + sum(DECODE(JC.ID_JTVA_COLOANA, 140, JC.suma, 0)) TI19BVT, + sum(DECODE(JC.ID_JTVA_COLOANA, 141, JC.suma, 0)) TI19BFB, + sum(DECODE(JC.ID_JTVA_COLOANA, 142, JC.suma, 0)) TI19BFT, + sum(DECODE(JC.ID_JTVA_COLOANA, 143, JC.suma, 0)) TI09BVB, + sum(DECODE(JC.ID_JTVA_COLOANA, 144, JC.suma, 0)) TI09BVT, + sum(DECODE(JC.ID_JTVA_COLOANA, 145, JC.suma, 0)) TI09BFB, + sum(DECODE(JC.ID_JTVA_COLOANA, 146, JC.suma, 0)) TI09BFT, + sum(DECODE(JC.ID_JTVA_COLOANA, 170, JC.suma, 0)) RO24NB, + sum(DECODE(JC.ID_JTVA_COLOANA, 171, JC.suma, 0)) RO24NT, + sum(DECODE(JC.ID_JTVA_COLOANA, 178, JC.suma, 0)) RO20NB, + sum(DECODE(JC.ID_JTVA_COLOANA, 179, JC.suma, 0)) RO20NT, + sum(DECODE(JC.ID_JTVA_COLOANA, 210, JC.suma, 0)) RO21NB, + sum(DECODE(JC.ID_JTVA_COLOANA, 211, JC.suma, 0)) RO21NT, + sum(DECODE(JC.ID_JTVA_COLOANA, 214, JC.suma, 0)) RO11NB, + sum(DECODE(JC.ID_JTVA_COLOANA, 215, JC.suma, 0)) RO11NT, + sum(DECODE(JC.ID_JTVA_COLOANA, 188, JC.suma, 0)) RO19NB, + sum(DECODE(JC.ID_JTVA_COLOANA, 189, JC.suma, 0)) RO19NT, + sum(DECODE(JC.ID_JTVA_COLOANA, 172, JC.suma, 0)) RO9NB, + sum(DECODE(JC.ID_JTVA_COLOANA, 173, JC.suma, 0)) RO9NT, + sum(DECODE(JC.ID_JTVA_COLOANA, 174, JC.suma, 0)) RO5NB, + sum(DECODE(JC.ID_JTVA_COLOANA, 175, JC.suma, 0)) RO5NT, + SUM(JC.REGULARIZARE) AS REGULARIZARE, + SUM(CASE + WHEN JC.ID_JTVA_COLOANA = 209 AND JC.SCC = '4428' THEN + JC.suma + ELSE + 0 + END) RO21TR, + SUM(CASE + WHEN JC.ID_JTVA_COLOANA = 213 AND JC.SCC = '4428' THEN + JC.suma + ELSE + 0 + END) RO11TR, + SUM(CASE + WHEN JC.ID_JTVA_COLOANA = 157 AND JC.SCC = '4428' THEN + JC.suma + ELSE + 0 + END) RO24TR, + SUM(CASE + WHEN JC.ID_JTVA_COLOANA = 177 AND JC.SCC = '4428' THEN + JC.suma + ELSE + 0 + END) RO20TR, + SUM(CASE + WHEN JC.ID_JTVA_COLOANA = 102 AND JC.SCC = '4428' THEN + JC.suma + ELSE + 0 + END) RO19BCTR, + SUM(CASE + WHEN JC.ID_JTVA_COLOANA = 104 AND JC.SCC = '4428' THEN + JC.suma + ELSE + 0 + END) RO19BVTR, + SUM(CASE + WHEN JC.ID_JTVA_COLOANA = 106 AND JC.SCC = '4428' THEN + JC.suma + ELSE + 0 + END) RO19BFTR, + SUM(CASE + WHEN JC.ID_JTVA_COLOANA = 108 AND JC.SCC = '4428' THEN + JC.suma + ELSE + 0 + END) RO09BCTR, + SUM(CASE + WHEN JC.ID_JTVA_COLOANA = 110 AND JC.SCC = '4428' THEN + JC.suma + ELSE + 0 + END) RO09BVTR, + SUM(CASE + WHEN JC.ID_JTVA_COLOANA = 112 AND JC.SCC = '4428' THEN + JC.suma + ELSE + 0 + END) RO09BFTR, + SUM(CASE + WHEN JC.ID_JTVA_COLOANA = 155 AND JC.SCC = '4428' THEN + JC.suma + ELSE + 0 + END) RO05TR, + SUM(CASE + WHEN JC.ID_JTVA_COLOANA = 159 AND JC.SCC = '4428' THEN + JC.suma + ELSE + 0 + END) FO24TR, + SUM(CASE + WHEN JC.ID_JTVA_COLOANA = 181 AND JC.SCC = '4428' THEN + JC.suma + ELSE + 0 + END) FO20TR, + SUM(CASE + WHEN JC.ID_JTVA_COLOANA = 221 AND JC.SCC = '4428' THEN + JC.suma + ELSE + 0 + END) FO21TR, + SUM(CASE + WHEN JC.ID_JTVA_COLOANA = 115 AND JC.SCC = '4428' THEN + JC.suma + ELSE + 0 + END) FO19BCTR, + SUM(CASE + WHEN JC.ID_JTVA_COLOANA = 117 AND JC.SCC = '4428' THEN + JC.suma + ELSE + 0 + END) FO19BVTR, + SUM(CASE + WHEN JC.ID_JTVA_COLOANA = 119 AND JC.SCC = '4428' THEN + JC.suma + ELSE + 0 + END) FO19BFTR, + SUM(CASE + WHEN JC.ID_JTVA_COLOANA = 225 AND JC.SCC = '4428' THEN + JC.suma + ELSE + 0 + END) XX21TITR, + SUM(CASE + WHEN JC.ID_JTVA_COLOANA = 231 AND JC.SCC = '4428' THEN + JC.suma + ELSE + 0 + END) XX11TITR, + SUM(CASE + WHEN JC.ID_JTVA_COLOANA = 193 AND JC.SCC = '4428' THEN + JC.suma + ELSE + 0 + END) XX19TITR, + SUM(CASE + WHEN JC.ID_JTVA_COLOANA = 207 AND JC.SCC = '4428' THEN + JC.suma + ELSE + 0 + END) XX9TITR, + SUM(CASE + WHEN JC.ID_JTVA_COLOANA = 121 AND JC.SCC = '4428' THEN + JC.suma + ELSE + 0 + END) FO09BCTR, + SUM(CASE + WHEN JC.ID_JTVA_COLOANA = 123 AND JC.SCC = '4428' THEN + JC.suma + ELSE + 0 + END) FO09BVTR, + SUM(CASE + WHEN JC.ID_JTVA_COLOANA = 125 AND JC.SCC = '4428' THEN + JC.suma + ELSE + 0 + END) FO09BFTR, + SUM(CASE + WHEN JC.ID_JTVA_COLOANA = 161 AND JC.SCC = '4428' THEN + JC.suma + ELSE + 0 + END) CE24TR, + SUM(CASE + WHEN JC.ID_JTVA_COLOANA = 183 AND JC.SCC = '4428' THEN + JC.suma + ELSE + 0 + END) CE20TR, + SUM(CASE + WHEN JC.ID_JTVA_COLOANA = 165 AND JC.SCC = '4428' THEN + JC.suma + ELSE + 0 + END) CE5STR, + SUM(CASE + WHEN JC.ID_JTVA_COLOANA = 167 AND JC.SCC = '4428' THEN + JC.suma + ELSE + 0 + END) CE9STR, + SUM(CASE + WHEN JC.ID_JTVA_COLOANA = 169 AND JC.SCC = '4428' THEN + JC.suma + ELSE + 0 + END) CE24STR, + SUM(CASE + WHEN JC.ID_JTVA_COLOANA = 185 AND JC.SCC = '4428' THEN + JC.suma + ELSE + 0 + END) CE20STR, + SUM(CASE + WHEN JC.ID_JTVA_COLOANA = 223 AND JC.SCC = '4428' THEN + JC.suma + ELSE + 0 + END) CE21STR, + SUM(CASE + WHEN JC.ID_JTVA_COLOANA = 191 AND JC.SCC = '4428' THEN + JC.suma + ELSE + 0 + END) CE19STR, + SUM(CASE + WHEN JC.ID_JTVA_COLOANA in (128, 149) AND + JC.SCC = '4428' THEN + JC.suma + ELSE + 0 + END) CEBCTR, + SUM(CASE + WHEN JC.ID_JTVA_COLOANA in (130, 151) AND + JC.SCC = '4428' THEN + JC.suma + ELSE + 0 + END) CEBVTR, + SUM(CASE + WHEN JC.ID_JTVA_COLOANA in (134, 153) AND + JC.SCC = '4428' THEN + JC.suma + ELSE + 0 + END) CEBFTR, + SUM(CASE + WHEN JC.ID_JTVA_COLOANA = 227 AND JC.SCC = '4428' THEN + JC.suma + ELSE + 0 + END) CE21CTTR, + SUM(CASE + WHEN JC.ID_JTVA_COLOANA = 233 AND JC.SCC = '4428' THEN + JC.suma + ELSE + 0 + END) CE11CTTR, + SUM(CASE + WHEN JC.ID_JTVA_COLOANA = 195 AND JC.SCC = '4428' THEN + JC.suma + ELSE + 0 + END) CE19CTTR, + SUM(CASE + WHEN JC.ID_JTVA_COLOANA = 197 AND JC.SCC = '4428' THEN + JC.suma + ELSE + 0 + END) CE9CTTR, + SUM(CASE + WHEN JC.ID_JTVA_COLOANA = 199 AND JC.SCC = '4428' THEN + JC.suma + ELSE + 0 + END) CE5CTTR, + SUM(CASE + WHEN JC.ID_JTVA_COLOANA = 229 AND JC.SCC = '4428' THEN + JC.suma + ELSE + 0 + END) CE21FTTR, + SUM(CASE + WHEN JC.ID_JTVA_COLOANA = 235 AND JC.SCC = '4428' THEN + JC.suma + ELSE + 0 + END) CE11FTTR, + SUM(CASE + WHEN JC.ID_JTVA_COLOANA = 201 AND JC.SCC = '4428' THEN + JC.suma + ELSE + 0 + END) CE19FTTR, + SUM(CASE + WHEN JC.ID_JTVA_COLOANA = 203 AND JC.SCC = '4428' THEN + JC.suma + ELSE + 0 + END) CE9FTTR, + SUM(CASE + WHEN JC.ID_JTVA_COLOANA = 205 AND JC.SCC = '4428' THEN + JC.suma + ELSE + 0 + END) CE5FTTR, + SUM(CASE + WHEN JC.ID_JTVA_COLOANA = 217 AND JC.SCC = '4428' THEN + JC.suma + ELSE + 0 + END) TI21TR, + SUM(CASE + WHEN JC.ID_JTVA_COLOANA = 219 AND JC.SCC = '4428' THEN + JC.suma + ELSE + 0 + END) TI11TR, + SUM(CASE + WHEN JC.ID_JTVA_COLOANA = 163 AND JC.SCC = '4428' THEN + JC.suma + ELSE + 0 + END) TI24TR, + SUM(CASE + WHEN JC.ID_JTVA_COLOANA = 187 AND JC.SCC = '4428' THEN + JC.suma + ELSE + 0 + END) TI20TR, + SUM(CASE + WHEN JC.ID_JTVA_COLOANA = 138 AND JC.SCC = '4428' THEN + JC.suma + ELSE + 0 + END) TI19BCTR, + SUM(CASE + WHEN JC.ID_JTVA_COLOANA = 140 AND JC.SCC = '4428' THEN + JC.suma + ELSE + 0 + END) TI19BVTR, + SUM(CASE + WHEN JC.ID_JTVA_COLOANA = 142 AND JC.SCC = '4428' THEN + JC.suma + ELSE + 0 + END) TI19BFTR, + SUM(CASE + WHEN JC.ID_JTVA_COLOANA = 144 AND JC.SCC = '4428' THEN + JC.suma + ELSE + 0 + END) TI09BVTR, + SUM(CASE + WHEN JC.ID_JTVA_COLOANA = 146 AND JC.SCC = '4428' THEN + JC.suma + ELSE + 0 + END) TI09BFTR, + SUM(CASE + WHEN ID_JTVA_COLOANA = 171 AND SCC = '4428' THEN + SUMA + ELSE + 0 + END) RO24NTR, + SUM(CASE + WHEN ID_JTVA_COLOANA = 179 AND SCC = '4428' THEN + SUMA + ELSE + 0 + END) RO20NTR, + SUM(CASE + WHEN ID_JTVA_COLOANA = 211 AND SCC = '4428' THEN + SUMA + ELSE + 0 + END) RO21NTR, + SUM(CASE + WHEN ID_JTVA_COLOANA = 215 AND SCC = '4428' THEN + SUMA + ELSE + 0 + END) RO11NTR, + SUM(CASE + WHEN ID_JTVA_COLOANA = 189 AND SCC = '4428' THEN + SUMA + ELSE + 0 + END) RO19NTR, + SUM(CASE + WHEN ID_JTVA_COLOANA = 173 AND SCC = '4428' THEN + SUMA + ELSE + 0 + END) RO09NTR, + SUM(CASE + WHEN ID_JTVA_COLOANA = 175 AND SCC = '4428' THEN + SUMA + ELSE + 0 + END) RO05NTR, + SUM(CASE + WHEN ID_JTVA_COLOANA = 1001 THEN + SUMA + ELSE + 0 + END) ROTN, + SUM(CASE + WHEN ID_JTVA_COLOANA = 1004 THEN + SUMA + ELSE + 0 + END) ROTN50, + SUM(CASE + WHEN ID_JTVA_COLOANA = 1005 THEN + SUMA + ELSE + 0 + END) ROTN100, + SUM(CASE + WHEN ID_JTVA_COLOANA = 1011 THEN + SUMA + ELSE + 0 + END) RORTD24, + SUM(CASE + WHEN ID_JTVA_COLOANA = 1012 THEN + SUMA + ELSE + 0 + END) RORTD20, + SUM(CASE + WHEN ID_JTVA_COLOANA = 1013 THEN + SUMA + ELSE + 0 + END) RORTD19, + SUM(CASE + WHEN ID_JTVA_COLOANA = 1014 THEN + SUMA + ELSE + 0 + END) RORTD9, + SUM(CASE + WHEN ID_JTVA_COLOANA = 1015 THEN + SUMA + ELSE + 0 + END) RORTD5, + SUM(CASE + WHEN ID_JTVA_COLOANA = 1018 THEN + SUMA + ELSE + 0 + END) RORTD21, + SUM(CASE + WHEN ID_JTVA_COLOANA = 1019 THEN + SUMA + ELSE + 0 + END) RORTD11 + FROM (SELECT A.ID_SUCURSALA, + A.AN, + A.LUNA, + (CASE + WHEN A.NRACT <> D.NRACT or + A.DATAACT <> D.DATAACT THEN + 1 + ELSE + 0 + END) AS NOTA_TVA_EX, + (CASE + WHEN A.NRACT <> D.NRACT or + A.DATAACT <> D.DATAACT OR + A.ID_SET <> D.ID_SET OR + NVL(A.SERIE_ACT, 'X') <> + NVL(D.SERIE_ACT, 'X') THEN + NULL + ELSE + A.ID_FDOC + END) AS ID_FDOC, + A.ID_FACT, + (CASE + WHEN A.NRACT <> D.NRACT THEN + D.NRACT + ELSE + A.NRACT + END) AS NRACT, + D.SERIE_ACT, + (CASE + WHEN A.NRACT <> D.NRACT or + A.DATAACT <> D.DATAACT THEN + TRUNC(D.DATAACT) + ELSE + TRUNC(A.DATAACT) + END) AS DATAACT, + (CASE + WHEN A.NRACT <> D.NRACT or + NVL(A.DATAIREG, A.DATAACT) <> + NVL(D.DATAIREG, D.DATAACT) THEN + TRUNC(NVL(D.DATAIREG, D.DATAACT)) + ELSE + TRUNC(NVL(A.DATAIREG, A.DATAACT)) + END) AS DATAIREG, + A.COD, + A.SCD, + A.SCC, + -- 4426 = 4427 sau 4428 = 4427 nu au parteneri + MAX(DECODE(E.EXCEPTIE, + 1, + A.ID_PARTD, + (CASE + WHEN A.SCC IN + (lcContTvaColectat, lcContTvaNeexigibil) OR + SUBSTR(A.SCC, 1, 1) = '5' OR + ID_JTVA_COLOANA in (1001, 1004, 1005) THEN + -9999999999 + ELSE + A.ID_PARTC + END))) OVER(PARTITION BY A.AN, A.LUNA, A.ID_FDOC, A.NRACT, A.DATAACT, A.COD) AS ID_PART, + -- INVERSARE SUME LA EXCEPTII + DECODE(A.ID_SET, 10616, -1, 1) * + DECODE(E.EXCEPTIE, 1, -A.SUMA, A.SUMA) AS SUMA, + -- MARCA REGULARIZARE FACTURI NESOSITE + (CASE + WHEN INSTR(lcContDebitRegularizare, A.scd) > 0 and + INSTR(lcContCreditRegularizare, A.scc) > 0 THEN + 1 + ELSE + 0 + END) AS REGULARIZARE, + ID_JTVA_COLOANA, + ROW_NUMBER() OVER(PARTITION BY a.nract ORDER BY a.nract) AS RN + FROM (SELECT ID_SUCURSALA, + AN, + LUNA, + ID_FDOC, + ID_FACT, + NRACT, + SERIE_ACT, + DATAACT, + DATAIREG, + COD, + SCD, + SCC, + ID_PARTD, + ID_PARTC, + ID_SET, + SUMA, + ID_JTVA_COLOANA, + STERS + FROM ACT_TEMP + WHERE lcTabelSursa = 'act_temp' + AND AN = tnAn + AND LUNA = tnLuna + AND STERS = 0 + AND (ID_JTVA_COLOANA BETWEEN + lnIdMinJtvaColoana AND + lnIdMaxJtvaColoana OR + ID_JTVA_COLOANA in + (1001, + 1004, + 1005, + 1011, + 1012, + 1013, + 1014, + 1015, + 1018, + 1019)) + AND ID_SET <> 10622 + UNION ALL + SELECT ID_SUCURSALA, + AN, + LUNA, + ID_FDOC, + ID_FACT, + NRACT, + SERIE_ACT, + DATAACT, + DATAIREG, + COD, + SCD, + SCC, + ID_PARTD, + ID_PARTC, + ID_SET, + SUMA, + ID_JTVA_COLOANA, + STERS + FROM ACT + WHERE lcTabelSursa = 'act' + AND AN = tnAn + AND LUNA = tnLuna + AND STERS = 0 + AND (ID_JTVA_COLOANA BETWEEN + lnIdMinJtvaColoana AND + lnIdMaxJtvaColoana OR + ID_JTVA_COLOANA in + (1001, + 1004, + 1005, + 1011, + 1012, + 1013, + 1014, + 1015, + 1018, + 1019)) + AND ID_SET <> 10622) A + LEFT JOIN (SELECT DISTINCT 1 AS EXCEPTIE, + DECODE(DEBIT, + 1, + CONT_C, + CONT) AS SCD, + DECODE(DEBIT, + 1, + CONT, + CONT_C) AS SCC + FROM EXCEPTII_IREG + WHERE INVERS = 1 + AND IN_TVA = 1) E + ON A.SCD = E.SCD + AND A.SCC = E.SCC + LEFT JOIN DOCUMENTE D + ON A.ID_FACT = D.ID_DOC + WHERE A.AN = tnAn + and A.LUNA = tnLuna + and A.STERS = 0 + AND (A.ID_JTVA_COLOANA BETWEEN lnIdMinJtvaColoana AND + lnIdMaxJtvaColoana OR + A.ID_JTVA_COLOANA in + (1001, + 1004, + 1005, + 1011, + 1012, + 1013, + 1014, + 1015, + 1018, + 1019)) + -- IN JURNALUL DE CUMPARARI NU INTRA FACTURILE NESOSITE + INCASARILE + -- SAU COMPENSARI 409 CU EXPLICATIE TVA + AND A.ID_SET <> 10622 + AND NOT (TRIM(NVL(A.SCC, 'X')) = + lcContDebitRegularizare OR + (TRIM(NVL(A.SCD, 'X')) = + lcContDebitRegularizare AND + INSTR(lcContCreditRegularizare, + TRIM(NVL(A.SCC, 'X'))) = 0)) + AND nvl2(pack_contafin.GET_ID_SUCURSALA(), + A.ID_SUCURSALA, + 0) = + nvl(pack_contafin.GET_ID_SUCURSALA(), 0)) JC + GROUP BY JC.AN, + JC.LUNA, + JC.ID_FACT, + JC.NRACT, + JC.SERIE_ACT, + JC.DATAACT, + JC.DATAIREG, + JC.ID_SUCURSALA); + + TYPE t_source_tab IS TABLE OF c_source%ROWTYPE; + S t_source_tab; -- Renamed from l_data for better readability + + -- Dedicated collections for INSERT and DELETE operations + SI t_source_tab := t_source_tab(); -- Source Insert + SD t_source_tab := t_source_tab(); -- Source Delete + BEGIN + -- Bulk load all data into PGA + OPEN c_source; + FETCH c_source BULK COLLECT + INTO S; + CLOSE c_source; + + -- Exit if no data + IF S.COUNT = 0 THEN + RETURN; + END IF; + + -- BULK UPDATE all rows at once using FORALL + FORALL i IN 1 .. S.COUNT + UPDATE JC2007 J + SET J.TOTCTVA = J.TOTCTVA + (CASE + WHEN EXTRACT(MONTH FROM J.DATAACT) = J.LUNA AND + EXTRACT(YEAR FROM J.DATAACT) = J.AN THEN + S(i).TOTCTVA + ELSE + 0 + END), + J.TOTFTVATAX = J.TOTFTVATAX + (CASE + WHEN EXTRACT(MONTH FROM J.DATAACT) = J.LUNA AND + EXTRACT(YEAR FROM J.DATAACT) = J.AN THEN + S(i).TOTFTVATAX + ELSE + 0 + END), + J.TOTTVATAX = J.TOTTVATAX + (CASE + WHEN EXTRACT(MONTH FROM J.DATAACT) = J.LUNA AND + EXTRACT(YEAR FROM J.DATAACT) = J.AN THEN + S(i).TOTTVATAX + ELSE + 0 + END), + J.TOTNETAX = J.TOTNETAX + (CASE + WHEN EXTRACT(MONTH FROM J.DATAACT) = J.LUNA AND + EXTRACT(YEAR FROM J.DATAACT) = J.AN THEN + S(i).TOTNETAX + ELSE + 0 + END), + J.RO21B = J.RO21B + NVL(S(i).RO21B, 0) + (CASE + WHEN NVL(S(i).RO21B, 0) <> 0 AND NVL(J.RO21NT, 0) <> 0 AND + NVL(J.RO21NT, 0) - (NVL(J.RO21T, 0) + NVL(S(i).RO21T, 0)) = 0 THEN + NVL(J.RO21NB, 0) - (NVL(J.RO21B, 0) + NVL(S(i).RO21B, 0)) + ELSE + 0 + END), + J.RO21T = J.RO21T + S(i).RO21T, + J.RO11B = J.RO11B + NVL(S(i).RO11B, 0) + (CASE + WHEN NVL(S(i).RO11B, 0) <> 0 AND NVL(J.RO11NT, 0) <> 0 AND + NVL(J.RO11NT, 0) - (NVL(J.RO11T, 0) + NVL(S(i).RO11T, 0)) = 0 THEN + NVL(J.RO11NB, 0) - (NVL(J.RO11B, 0) + NVL(S(i).RO11B, 0)) + ELSE + 0 + END), + J.RO11T = J.RO11T + S(i).RO11T, + J.RO24B = J.RO24B + NVL(S(i).RO24B, 0) + (CASE + WHEN NVL(S(i).RO24B, 0) <> 0 AND NVL(J.RO24NT, 0) <> 0 AND + NVL(J.RO24NT, 0) - (NVL(J.RO24T, 0) + NVL(S(i).RO24T, 0)) = 0 THEN + NVL(J.RO24NB, 0) - (NVL(J.RO24B, 0) + NVL(S(i).RO24B, 0)) + ELSE + 0 + END), + J.RO24T = J.RO24T + S(i).RO24T, + J.RO20B = J.RO20B + NVL(S(i).RO20B, 0) + (CASE + WHEN NVL(S(i).RO20B, 0) <> 0 AND NVL(J.RO20NT, 0) <> 0 AND + NVL(J.RO20NT, 0) - (NVL(J.RO20T, 0) + NVL(S(i).RO20T, 0)) = 0 THEN + NVL(J.RO20NB, 0) - (NVL(J.RO20B, 0) + NVL(S(i).RO20B, 0)) + ELSE + 0 + END), + J.RO20T = J.RO20T + S(i).RO20T, + J.RO19BCB = J.RO19BCB + NVL(S(i).RO19BCB, 0) + (CASE + WHEN NVL(S(i).RO19BCB, 0) <> 0 AND NVL(J.RO19NT, 0) <> 0 AND + NVL(S(i).RO19BVB, 0) = 0 AND NVL(S(i).RO19BFB, 0) = 0 AND + NVL(J.RO19NT, 0) - (NVL(J.RO19BCT, 0) + NVL(S(i).RO19BCT, 0)) = 0 THEN + NVL(J.RO19NB, 0) - (NVL(J.RO19BCB, 0) + NVL(S(i).RO19BCB, 0)) + ELSE + 0 + END), + J.RO19BCT = J.RO19BCT + S(i).RO19BCT, + J.RO19BVB = J.RO19BVB + NVL(S(i).RO19BVB, 0) + (CASE + WHEN NVL(S(i).RO19BVB, 0) <> 0 AND NVL(J.RO19NT, 0) <> 0 AND + NVL(S(i).RO19BFB, 0) = 0 AND + NVL(J.RO19NT, 0) - (NVL(J.RO19BVT, 0) + NVL(S(i).RO19BVT, 0)) = 0 THEN + NVL(J.RO19NB, 0) - (NVL(J.RO19BVB, 0) + NVL(S(i).RO19BVB, 0)) + ELSE + 0 + END), + J.RO19BVT = J.RO19BVT + S(i).RO19BVT, + J.RO19BFB = J.RO19BFB + NVL(S(i).RO19BFB, 0) + (CASE + WHEN NVL(S(i).RO19BFB, 0) <> 0 AND NVL(J.RO19NT, 0) <> 0 AND + NVL(J.RO19NT, 0) - (NVL(J.RO19BFT, 0) + NVL(S(i).RO19BFT, 0)) = 0 THEN + NVL(J.RO19NB, 0) - (NVL(J.RO19BFB, 0) + NVL(S(i).RO19BFB, 0)) + ELSE + 0 + END), + J.RO19BFT = J.RO19BFT + S(i).RO19BFT, + J.RO09BCB = J.RO09BCB + NVL(S(i).RO09BCB, 0) + (CASE + WHEN NVL(S(i).RO09BCB, 0) <> 0 AND NVL(J.RO9NT, 0) <> 0 AND + NVL(S(i).RO09BVB, 0) = 0 AND NVL(S(i).RO09BFB, 0) = 0 AND + NVL(J.RO9NT, 0) - (NVL(J.RO09BCT, 0) + NVL(S(i).RO09BCT, 0)) = 0 THEN + NVL(J.RO9NB, 0) - (NVL(J.RO09BCB, 0) + NVL(S(i).RO09BCB, 0)) + ELSE + 0 + END), + J.RO09BCT = J.RO09BCT + S(i).RO09BCT, + J.RO09BVB = J.RO09BVB + NVL(S(i).RO09BVB, 0) + (CASE + WHEN NVL(S(i).RO09BVB, 0) <> 0 AND NVL(J.RO9NT, 0) <> 0 AND + NVL(S(i).RO09BFB, 0) = 0 AND + NVL(J.RO9NT, 0) - (NVL(J.RO09BVT, 0) + NVL(S(i).RO09BVT, 0)) = 0 THEN + NVL(J.RO9NB, 0) - (NVL(J.RO09BVB, 0) + NVL(S(i).RO09BVB, 0)) + ELSE + 0 + END), + J.RO09BVT = J.RO09BVT + S(i).RO09BVT, + J.RO09BFB = J.RO09BFB + NVL(S(i).RO09BFB, 0) + (CASE + WHEN NVL(S(i).RO09BFB, 0) <> 0 AND NVL(J.RO9NT, 0) <> 0 AND + NVL(J.RO9NT, 0) - (NVL(J.RO09BFT, 0) + NVL(S(i).RO09BFT, 0)) = 0 THEN + NVL(J.RO9NB, 0) - (NVL(J.RO09BFB, 0) + NVL(S(i).RO09BFB, 0)) + ELSE + 0 + END), + J.RO09BFT = J.RO09BFT + S(i).RO09BFT, + J.RO05B = J.RO05B + NVL(S(i).RO05B, 0) + (CASE + WHEN NVL(S(i).RO05B, 0) <> 0 AND NVL(J.RO5NB, 0) <> 0 AND + NVL(J.RO5NT, 0) - (NVL(J.RO05T, 0) + NVL(S(i).RO05T, 0)) = 0 THEN + NVL(J.RO5NB, 0) - (NVL(J.RO05B, 0) + NVL(S(i).RO05B, 0)) + ELSE + 0 + END), + J.RO05T = J.RO05T + S(i).RO05T, + J.RO21NB = J.RO21NB + S(i).RO21NB, + J.RO21NT = J.RO21NT + S(i).RO21NT, + J.RO11NB = J.RO11NB + S(i).RO11NB, + J.RO11NT = J.RO11NT + S(i).RO11NT, + J.RO24NB = J.RO24NB + S(i).RO24NB, + J.RO24NT = J.RO24NT + S(i).RO24NT, + J.RO19NB = J.RO19NB + S(i).RO19NB, + J.RO19NT = J.RO19NT + S(i).RO19NT, + J.RO20NB = J.RO20NB + S(i).RO20NB, + J.RO20NT = J.RO20NT + S(i).RO20NT, + J.RO9NB = J.RO9NB + S(i).RO9NB, + J.RO9NT = J.RO9NT + S(i).RO9NT, + J.RO5NB = J.RO5NB + S(i).RO5NB, + J.RO5NT = J.RO5NT + S(i).RO5NT, + J.ROSCN = J.ROSCN + S(i).ROSCN, + J.FO21B = J.FO21B + S(i).FO21B, + J.FO21T = J.FO21T + S(i).FO21T, + J.FO24B = J.FO24B + S(i).FO24B, + J.FO24T = J.FO24T + S(i).FO24T, + J.FO20B = J.FO20B + S(i).FO20B, + J.FO20T = J.FO20T + S(i).FO20T, + J.FO19BCB = J.FO19BCB + S(i).FO19BCB, + J.FO19BCT = J.FO19BCT + S(i).FO19BCT, + J.FO19BVB = J.FO19BVB + S(i).FO19BVB, + J.FO19BVT = J.FO19BVT + S(i).FO19BVT, + J.FO19BFB = J.FO19BFB + S(i).FO19BFB, + J.FO19BFT = J.FO19BFT + S(i).FO19BFT, + J.XX21TIB = J.XX21TIB + S(i).XX21TIB, + J.XX21TIT = J.XX21TIT + S(i).XX21TIT, + J.XX11TIB = J.XX11TIB + S(i).XX11TIB, + J.XX11TIT = J.XX11TIT + S(i).XX11TIT, + J.XX19TIB = J.XX19TIB + S(i).XX19TIB, + J.XX19TIT = J.XX19TIT + S(i).XX19TIT, + J.XX9TIB = J.XX9TIB + S(i).XX9TIB, + J.XX9TIT = J.XX9TIT + S(i).XX9TIT, + J.FO09BCB = J.FO09BCB + S(i).FO09BCB, + J.FO09BCT = J.FO09BCT + S(i).FO09BCT, + J.FO09BVB = J.FO09BVB + S(i).FO09BVB, + J.FO09BVT = J.FO09BVT + S(i).FO09BVT, + J.FO09BFB = J.FO09BFB + S(i).FO09BFB, + J.FO09BFT = J.FO09BFT + S(i).FO09BFT, + J.FOSCN = J.FOSCN + S(i).FOSCN, + J.CE24B = J.CE24B + S(i).CE24B, + J.CE24T = J.CE24T + S(i).CE24T, + J.CE20B = J.CE20B + S(i).CE20B, + J.CE20T = J.CE20T + S(i).CE20T, + J.CE5SB = J.CE5SB + S(i).CE5SB, + J.CE5ST = J.CE5ST + S(i).CE5ST, + J.CE9SB = J.CE9SB + S(i).CE9SB, + J.CE9ST = J.CE9ST + S(i).CE9ST, + J.CE21SB = J.CE21SB + S(i).CE21SB, + J.CE21ST = J.CE21ST + S(i).CE21ST, + J.CE24SB = J.CE24SB + S(i).CE24SB, + J.CE24ST = J.CE24ST + S(i).CE24ST, + J.CE20SB = J.CE20SB + S(i).CE20SB, + J.CE20ST = J.CE20ST + S(i).CE20ST, + J.CE19SB = J.CE19SB + S(i).CE19SB, + J.CE19ST = J.CE19ST + S(i).CE19ST, + J.CEBCB = J.CEBCB + S(i).CEBCB, + J.CEBCT = J.CEBCT + S(i).CEBCT, + J.CEBVB = J.CEBVB + S(i).CEBVB, + J.CEBVT = J.CEBVT + S(i).CEBVT, + J.CEBVSC = J.CEBVSC + S(i).CEBVSC, + J.CEBVN = J.CEBVN + S(i).CEBVN, + J.CEBFB = J.CEBFB + S(i).CEBFB, + J.CEBFT = J.CEBFT + S(i).CEBFT, + J.CEBFSC = J.CEBFSC + S(i).CEBFSC, + J.CEBFN = J.CEBFN + S(i).CEBFN, + J.CE21CTB = J.CE21CTB + S(i).CE21CTB, + J.CE21CTT = J.CE21CTT + S(i).CE21CTT, + J.CE11CTB = J.CE11CTB + S(i).CE11CTB, + J.CE11CTT = J.CE11CTT + S(i).CE11CTT, + J.CE19CTB = J.CE19CTB + S(i).CE19CTB, + J.CE19CTT = J.CE19CTT + S(i).CE19CTT, + J.CE9CTB = J.CE9CTB + S(i).CE9CTB, + J.CE9CTT = J.CE9CTT + S(i).CE9CTT, + J.CE5CTB = J.CE5CTB + S(i).CE5CTB, + J.CE5CTT = J.CE5CTT + S(i).CE5CTT, + J.CE21FTB = J.CE21FTB + S(i).CE21FTB, + J.CE21FTT = J.CE21FTT + S(i).CE21FTT, + J.CE11FTB = J.CE11FTB + S(i).CE11FTB, + J.CE11FTT = J.CE11FTT + S(i).CE11FTT, + J.CE19FTB = J.CE19FTB + S(i).CE19FTB, + J.CE19FTT = J.CE19FTT + S(i).CE19FTT, + J.CE9FTB = J.CE9FTB + S(i).CE9FTB, + J.CE9FTT = J.CE9FTT + S(i).CE9FTT, + J.CE5FTB = J.CE5FTB + S(i).CE5FTB, + J.CE5FTT = J.CE5FTT + S(i).CE5FTT, + J.TI21B = J.TI21B + S(i).TI21B, + J.TI21T = J.TI21T + S(i).TI21T, + J.TI11B = J.TI11B + S(i).TI11B, + J.TI11T = J.TI11T + S(i).TI11T, + J.TI24B = J.TI24B + S(i).TI24B, + J.TI24T = J.TI24T + S(i).TI24T, + J.TI20B = J.TI20B + S(i).TI20B, + J.TI20T = J.TI20T + S(i).TI20T, + J.TI19BCB = J.TI19BCB + S(i).TI19BCB, + J.TI19BCT = J.TI19BCT + S(i).TI19BCT, + J.TI19BVB = J.TI19BVB + S(i).TI19BVB, + J.TI19BVT = J.TI19BVT + S(i).TI19BVT, + J.TI19BFB = J.TI19BFB + S(i).TI19BFB, + J.TI19BFT = J.TI19BFT + S(i).TI19BFT, + J.TI09BVB = J.TI09BVB + S(i).TI09BVB, + J.TI09BVT = J.TI09BVT + S(i).TI09BVT, + J.TI09BFB = J.TI09BFB + S(i).TI09BFB, + J.TI09BFT = J.TI09BFT + S(i).TI09BFT, + J.ROTN = J.ROTN + S(i).ROTN, + J.ROTN50 = J.ROTN50 + S(i).ROTN50, + J.ROTN100 = J.ROTN100 + S(i).ROTN100, + J.RORTD21 = J.RORTD21 + S(i).RORTD21, + J.RORTD11 = J.RORTD11 + S(i).RORTD11, + J.RORTD24 = J.RORTD24 + S(i).RORTD24, + J.RORTD20 = J.RORTD20 + S(i).RORTD20, + J.RORTD19 = J.RORTD19 + S(i).RORTD19, + J.RORTD9 = J.RORTD9 + S(i).RORTD9, + J.RORTD5 = J.RORTD5 + S(i).RORTD5 + WHERE J.AN = S(i).AN + AND J.LUNA = S(i).LUNA + AND J.ID_FACT = S(i).ID_FACT + AND NVL(J.ID_SUCURSALA, -99) = NVL(S(i).ID_SUCURSALA, -99); + + -- Populate SI and SD collections for INSERT and DELETE + FOR i IN 1 .. S.COUNT LOOP + IF SQL%BULK_ROWCOUNT(i) = 0 THEN + -- No row was updated -> need to INSERT + SI.EXTEND; + SI(SI.COUNT) := S(i); + ELSIF tnScrie = pack_contafin.nStergere THEN + -- Row was updated and it's a deletion operation -> candidate for DELETE + SD.EXTEND; + SD(SD.COUNT) := S(i); + END IF; + END LOOP; + + -- BULK INSERT for new rows + IF SI.COUNT > 0 THEN + FORALL i IN 1 .. SI.COUNT + INSERT INTO JC2007 + (AN, + LUNA, + ID_FACT, + NRACT, + SERIE_ACT, + ID_FDOC, + DATAACT, + DATAIREG, + ID_PART, + COD, + TOTCTVA, + TOTFTVATAX, + TOTTVATAX, + TOTNETAX, + RO21B, + RO21T, + RO11B, + RO11T, + RO24B, + RO24T, + RO20B, + RO20T, + RO19BCB, + RO19BCT, + RO19BVB, + RO19BVT, + RO19BFB, + RO19BFT, + RO09BCB, + RO09BCT, + RO09BVB, + RO09BVT, + RO09BFB, + RO09BFT, + RO05B, + RO05T, + RO21NB, + RO21NT, + RO11NB, + RO11NT, + RO24NB, + RO24NT, + RO20NB, + RO20NT, + RO19NB, + RO19NT, + RO9NB, + RO9NT, + RO5NB, + RO5NT, + ROSCN, + FO21B, + FO21T, + FO24B, + FO24T, + FO20B, + FO20T, + FO19BCB, + FO19BCT, + FO19BVB, + FO19BVT, + FO19BFB, + FO19BFT, + XX21TIB, + XX21TIT, + XX11TIB, + XX11TIT, + XX19TIB, + XX19TIT, + XX9TIB, + XX9TIT, + FO09BCB, + FO09BCT, + FO09BVB, + FO09BVT, + FO09BFB, + FO09BFT, + FOSCN, + CE24B, + CE24T, + CE20B, + CE20T, + CE5SB, + CE5ST, + CE9SB, + CE9ST, + CE21SB, + CE21ST, + CE24SB, + CE24ST, + CE20SB, + CE20ST, + CE19SB, + CE19ST, + CEBCB, + CEBCT, + CEBVB, + CEBVT, + CEBVSC, + CEBVN, + CEBFB, + CEBFT, + CEBFSC, + CEBFN, + CE21CTB, + CE21CTT, + CE11CTB, + CE11CTT, + CE19CTB, + CE19CTT, + CE9CTB, + CE9CTT, + CE5CTB, + CE5CTT, + CE21FTB, + CE21FTT, + CE11FTB, + CE11FTT, + CE19FTB, + CE19FTT, + CE9FTB, + CE9FTT, + CE5FTB, + CE5FTT, + TI21B, + TI21T, + TI11B, + TI11T, + TI24B, + TI24T, + TI20B, + TI20T, + TI19BCB, + TI19BCT, + TI19BVB, + TI19BVT, + TI19BFB, + TI19BFT, + TI09BVB, + TI09BVT, + TI09BFB, + TI09BFT, + ROTN, + ROTN50, + ROTN100, + RORTD21, + RORTD11, + RORTD24, + RORTD20, + RORTD19, + RORTD9, + RORTD5, + ID_SUCURSALA) + VALUES + (SI(i).AN, + SI(i).LUNA, + SI(i).ID_FACT, + SI(i).NRACT, + SI(i).SERIE_ACT, + SI(i).ID_FDOC, + SI(i).DATAACT, + SI(i).DATAIREG, + SI(i).ID_PART, + SI(i).COD, + SI(i).TOTCTVA, + SI(i).TOTFTVATAX, + SI(i).TOTTVATAX, + SI(i).TOTNETAX, + (CASE + WHEN NVL(SI(i).RO21B, 0) <> 0 AND NVL(SI(i).RO21NT, 0) <> 0 AND + NVL(SI(i).RO21NT, 0) = NVL(SI(i).RO21T, 0) THEN + NVL(SI(i).RO21NB, 0) + ELSE + NVL(SI(i).RO21B, 0) + END), + SI(i).RO21T, + (CASE + WHEN NVL(SI(i).RO11B, 0) <> 0 AND NVL(SI(i).RO11NT, 0) <> 0 AND + NVL(SI(i).RO11NT, 0) = NVL(SI(i).RO11T, 0) THEN + NVL(SI(i).RO11NB, 0) + ELSE + NVL(SI(i).RO11B, 0) + END), + SI(i).RO11T, + (CASE + WHEN NVL(SI(i).RO24B, 0) <> 0 AND NVL(SI(i).RO24NT, 0) <> 0 AND + NVL(SI(i).RO24NT, 0) = NVL(SI(i).RO24T, 0) THEN + NVL(SI(i).RO24NB, 0) + ELSE + NVL(SI(i).RO24B, 0) + END), + SI(i).RO24T, + (CASE + WHEN NVL(SI(i).RO20B, 0) <> 0 AND NVL(SI(i).RO20NT, 0) <> 0 AND + NVL(SI(i).RO20NT, 0) = NVL(SI(i).RO20T, 0) THEN + NVL(SI(i).RO20NB, 0) + ELSE + NVL(SI(i).RO20B, 0) + END), + SI(i).RO20T, + (CASE + WHEN NVL(SI(i).RO19BCB, 0) <> 0 AND NVL(SI(i).RO19BVB, 0) = 0 AND + NVL(SI(i).RO19BFB, 0) = 0 AND NVL(SI(i).RO19NT, 0) <> 0 AND + NVL(SI(i).RO19NT, 0) = NVL(SI(i).RO19BCT, 0) THEN + NVL(SI(i).RO19NB, 0) + ELSE + NVL(SI(i).RO19BCB, 0) + END), + SI(i).RO19BCT, + (CASE + WHEN NVL(SI(i).RO19BVB, 0) <> 0 AND NVL(SI(i).RO19BFB, 0) = 0 AND + NVL(SI(i).RO19NT, 0) <> 0 AND + NVL(SI(i).RO19NT, 0) = NVL(SI(i).RO19BVT, 0) THEN + NVL(SI(i).RO19NB, 0) + ELSE + NVL(SI(i).RO19BVB, 0) + END), + SI(i).RO19BVT, + (CASE + WHEN NVL(SI(i).RO19BFB, 0) <> 0 AND NVL(SI(i).RO19NT, 0) <> 0 AND + NVL(SI(i).RO19NT, 0) = NVL(SI(i).RO19BFT, 0) THEN + NVL(SI(i).RO19NB, 0) + ELSE + NVL(SI(i).RO19BFB, 0) + END), + SI(i).RO19BFT, + (CASE + WHEN NVL(SI(i).RO09BCB, 0) <> 0 AND NVL(SI(i).RO09BVB, 0) = 0 AND + NVL(SI(i).RO09BFB, 0) = 0 AND NVL(SI(i).RO9NT, 0) <> 0 AND + NVL(SI(i).RO9NT, 0) = NVL(SI(i).RO09BCT, 0) THEN + NVL(SI(i).RO9NB, 0) + ELSE + NVL(SI(i).RO09BCB, 0) + END), + SI(i).RO09BCT, + (CASE + WHEN NVL(SI(i).RO09BVB, 0) <> 0 AND NVL(SI(i).RO09BFB, 0) = 0 AND + NVL(SI(i).RO9NT, 0) <> 0 AND + NVL(SI(i).RO9NT, 0) = NVL(SI(i).RO09BVT, 0) THEN + NVL(SI(i).RO9NB, 0) + ELSE + NVL(SI(i).RO09BVB, 0) + END), + SI(i).RO09BVT, + (CASE + WHEN NVL(SI(i).RO09BFB, 0) <> 0 AND NVL(SI(i).RO9NT, 0) <> 0 AND + NVL(SI(i).RO9NT, 0) = NVL(SI(i).RO09BFT, 0) THEN + NVL(SI(i).RO9NB, 0) + ELSE + NVL(SI(i).RO09BFB, 0) + END), + SI(i).RO09BFT, + (CASE + WHEN NVL(SI(i).RO05B, 0) <> 0 AND NVL(SI(i).RO5NT, 0) <> 0 AND + NVL(SI(i).RO5NT, 0) = NVL(SI(i).RO05T, 0) THEN + NVL(SI(i).RO5NB, 0) + ELSE + NVL(SI(i).RO05B, 0) + END), + SI(i).RO05T, + SI(i).RO21NB, + SI(i).RO21NT, + SI(i).RO11NB, + SI(i).RO11NT, + SI(i).RO24NB, + SI(i).RO24NT, + SI(i).RO20NB, + SI(i).RO20NT, + SI(i).RO19NB, + SI(i).RO19NT, + SI(i).RO9NB, + SI(i).RO9NT, + SI(i).RO5NB, + SI(i).RO5NT, + SI(i).ROSCN, + SI(i).FO21B, + SI(i).FO21T, + SI(i).FO24B, + SI(i).FO24T, + SI(i).FO20B, + SI(i).FO20T, + SI(i).FO19BCB, + SI(i).FO19BCT, + SI(i).FO19BVB, + SI(i).FO19BVT, + SI(i).FO19BFB, + SI(i).FO19BFT, + SI(i).XX21TIB, + SI(i).XX21TIT, + SI(i).XX11TIB, + SI(i).XX11TIT, + SI(i).XX19TIB, + SI(i).XX19TIT, + SI(i).XX9TIB, + SI(i).XX9TIT, + SI(i).FO09BCB, + SI(i).FO09BCT, + SI(i).FO09BVB, + SI(i).FO09BVT, + SI(i).FO09BFB, + SI(i).FO09BFT, + SI(i).FOSCN, + SI(i).CE24B, + SI(i).CE24T, + SI(i).CE20B, + SI(i).CE20T, + SI(i).CE5SB, + SI(i).CE5ST, + SI(i).CE9SB, + SI(i).CE9ST, + SI(i).CE21SB, + SI(i).CE21ST, + SI(i).CE24SB, + SI(i).CE24ST, + SI(i).CE20SB, + SI(i).CE20ST, + SI(i).CE19SB, + SI(i).CE19ST, + SI(i).CEBCB, + SI(i).CEBCT, + SI(i).CEBVB, + SI(i).CEBVT, + SI(i).CEBVSC, + SI(i).CEBVN, + SI(i).CEBFB, + SI(i).CEBFT, + SI(i).CEBFSC, + SI(i).CEBFN, + SI(i).CE21CTB, + SI(i).CE21CTT, + SI(i).CE11CTB, + SI(i).CE11CTT, + SI(i).CE19CTB, + SI(i).CE19CTT, + SI(i).CE9CTB, + SI(i).CE9CTT, + SI(i).CE5CTB, + SI(i).CE5CTT, + SI(i).CE21FTB, + SI(i).CE21FTT, + SI(i).CE11FTB, + SI(i).CE11FTT, + SI(i).CE19FTB, + SI(i).CE19FTT, + SI(i).CE9FTB, + SI(i).CE9FTT, + SI(i).CE5FTB, + SI(i).CE5FTT, + SI(i).TI21B, + SI(i).TI21T, + SI(i).TI11B, + SI(i).TI11T, + SI(i).TI24B, + SI(i).TI24T, + SI(i).TI20B, + SI(i).TI20T, + SI(i).TI19BCB, + SI(i).TI19BCT, + SI(i).TI19BVB, + SI(i).TI19BVT, + SI(i).TI19BFB, + SI(i).TI19BFT, + SI(i).TI09BVB, + SI(i).TI09BVT, + SI(i).TI09BFB, + SI(i).TI09BFT, + SI(i).ROTN, + SI(i).ROTN50, + SI(i).ROTN100, + SI(i).RORTD21, + SI(i).RORTD11, + SI(i).RORTD24, + SI(i).RORTD20, + SI(i).RORTD19, + SI(i).RORTD9, + SI(i).RORTD5, + SI(i).ID_SUCURSALA); + END IF; + + -- BULK DELETE for rows where all values became 0 after UPDATE + -- Only executed when tnScrie = nStergere + IF SD.COUNT > 0 AND tnScrie = pack_contafin.nStergere THEN + FORALL i IN 1 .. SD.COUNT + DELETE FROM JC2007 J + WHERE J.AN = SD(i).AN + AND J.LUNA = SD(i).LUNA + AND J.ID_FACT = SD(i).ID_FACT + AND NVL(J.ID_SUCURSALA, -99) = NVL(SD(i).ID_SUCURSALA, -99) + AND J.TOTCTVA = 0 + AND J.TOTFTVATAX = 0 + AND J.TOTTVATAX = 0 + AND J.TOTNETAX = 0 + AND J.RO24B = 0 + AND J.RO24T = 0 + AND J.RO20B = 0 + AND J.RO20T = 0 + AND J.RO21B = 0 + AND J.RO21T = 0 + AND J.RO11B = 0 + AND J.RO11T = 0 + AND J.RO19BCB = 0 + AND J.RO19BCT = 0 + AND J.RO19BVB = 0 + AND J.RO19BVT = 0 + AND J.RO19BFB = 0 + AND J.RO19BFT = 0 + AND J.RO09BCB = 0 + AND J.RO09BCT = 0 + AND J.RO09BVB = 0 + AND J.RO09BVT = 0 + AND J.RO09BFB = 0 + AND J.RO09BFT = 0 + AND J.RO05B = 0 + AND J.RO05T = 0 + AND J.RO21NB = 0 + AND J.RO21NT = 0 + AND J.RO11NB = 0 + AND J.RO11NT = 0 + AND J.RO24NB = 0 + AND J.RO24NT = 0 + AND J.RO20NB = 0 + AND J.RO20NT = 0 + AND J.RO19NB = 0 + AND J.RO19NT = 0 + AND J.RO9NB = 0 + AND J.RO9NT = 0 + AND J.RO5NB = 0 + AND J.RO5NT = 0 + AND J.ROSCN = 0 + AND J.FO21B = 0 + AND J.FO21T = 0 + AND J.FO24B = 0 + AND J.FO24T = 0 + AND J.FO20B = 0 + AND J.FO20T = 0 + AND J.FO19BCB = 0 + AND J.FO19BCT = 0 + AND J.FO19BVB = 0 + AND J.FO19BVT = 0 + AND J.FO19BFB = 0 + AND J.FO19BFT = 0 + AND J.XX21TIB = 0 + AND J.XX21TIT = 0 + AND J.XX11TIB = 0 + AND J.XX11TIT = 0 + AND J.XX19TIB = 0 + AND J.XX19TIT = 0 + AND J.XX9TIB = 0 + AND J.XX9TIT = 0 + AND J.FO09BCB = 0 + AND J.FO09BCT = 0 + AND J.FO09BVB = 0 + AND J.FO09BVT = 0 + AND J.FO09BFB = 0 + AND J.FO09BFT = 0 + AND J.FOSCN = 0 + AND J.CE24B = 0 + AND J.CE24T = 0 + AND J.CE20B = 0 + AND J.CE20T = 0 + AND J.CE5SB = 0 + AND J.CE5ST = 0 + AND J.CE9SB = 0 + AND J.CE9ST = 0 + AND J.CE21SB = 0 + AND J.CE21ST = 0 + AND J.CE24SB = 0 + AND J.CE24ST = 0 + AND J.CE20SB = 0 + AND J.CE20ST = 0 + AND J.CE19SB = 0 + AND J.CE19ST = 0 + AND J.CEBCB = 0 + AND J.CEBCT = 0 + AND J.CEBVB = 0 + AND J.CEBVT = 0 + AND J.CEBVSC = 0 + AND J.CEBVN = 0 + AND J.CEBFB = 0 + AND J.CEBFT = 0 + AND J.CEBFSC = 0 + AND J.CEBFN = 0 + AND J.CE21CTB = 0 + AND J.CE21CTT = 0 + AND J.CE11CTB = 0 + AND J.CE11CTT = 0 + AND J.CE19CTB = 0 + AND J.CE19CTT = 0 + AND J.CE9CTB = 0 + AND J.CE9CTT = 0 + AND J.CE5CTB = 0 + AND J.CE5CTT = 0 + AND J.CE21FTB = 0 + AND J.CE21FTT = 0 + AND J.CE11FTB = 0 + AND J.CE11FTT = 0 + AND J.CE19FTB = 0 + AND J.CE19FTT = 0 + AND J.CE9FTB = 0 + AND J.CE9FTT = 0 + AND J.CE5FTB = 0 + AND J.CE5FTT = 0 + AND J.TI21B = 0 + AND J.TI21T = 0 + AND J.TI11B = 0 + AND J.TI11T = 0 + AND J.TI24B = 0 + AND J.TI24T = 0 + AND J.TI20B = 0 + AND J.TI20T = 0 + AND J.TI19BCB = 0 + AND J.TI19BCT = 0 + AND J.TI19BVB = 0 + AND J.TI19BVT = 0 + AND J.TI19BFB = 0 + AND J.TI19BFT = 0 + AND J.TI09BVB = 0 + AND J.TI09BVT = 0 + AND J.TI09BFB = 0 + AND J.TI09BFT = 0 + AND J.ROTN = 0 + AND J.ROTN50 = 0 + AND J.ROTN100 = 0; + END IF; + END; + + <> + null; + end SCRIE_JC_2007; + + ------------------------------------------------------------------- + -- COMPLETARE JV2007 CU ID_SET 10616 STORNARE PLATA/INCASARE + ------------------------------------------------------------------- + Procedure COMPLETEAZA_JV_2007(tnAn IN JV2007.AN%TYPE, + tnLuna IN JV2007.LUNA%TYPE, + tcTabelSursa IN VARCHAR2, + tcCondSucursala IN VARCHAR2) is + lcMerge VARCHAR2(32000); + begin + lcMerge := 'MERGE INTO JV2007 A ' || + 'USING (select :1 as an, + :2 as luna, + dataact, + dataireg, + nract, + id_part, + id_fdoc, + totctva, + cod, + serie_act, + id_sucursala, + id_fact, + totftvatax, + tottvatax, + totnetax + from (select row_number() over(partition by a1.id_fact order by a1.an desc, a1.luna desc) as nrcrt, + a1.* + from jv2007 a1 + where a1.id_Fact in (select distinct a2.id_factc + from ' || tcTabelSursa || + ' a2 left join documente b2 on a2.id_factc = b2.id_doc + where a2.id_set = 10616 + and a2.an = :3 + and a2.luna = :4 + and a2.sters = 0 + and a2.id_factc <> 0 + and NVL(b2.tva_incasare,0) = 1 ' || + REPLACE(tcCondSucursala, 'ALIAS.', 'A2.') || ') + ' || + REPLACE(tcCondSucursala, 'ALIAS.', 'A1.') || + ') where nrcrt = 1 + and an * 12 + luna <> :5 * 12 + :6) B ' || + 'ON (A.AN = B.AN AND A.LUNA = B.LUNA AND A.ID_FACT = B.ID_FACT AND NVL(A.ID_SUCURSALA,-99)=NVL(B.ID_SUCURSALA,-99)) ' || + 'WHEN NOT MATCHED THEN ' || + 'insert (an,luna,dataact,dataireg,nract,id_part,id_fdoc,totctva,cod,serie_act,id_sucursala,id_fact,totftvatax,tottvatax,totnetax) ' || + 'values (b.an,b.luna,b.dataact,b.dataireg,b.nract,b.id_part,b.id_fdoc,b.totctva,b.cod,b.serie_act,b.id_sucursala,b.id_fact,b.totftvatax,b.tottvatax,b.totnetax)'; + + execute immediate lcMerge + using tnAn, tnLuna, tnAn, tnLuna, tnAn, tnLuna; + + end COMPLETEAZA_JV_2007; + + ------------------------------------------------------------------- + -- COMPLETARE JC2007 CU ID_SET 10616 STORNARE PLATA/INCASARE + ------------------------------------------------------------------- + Procedure COMPLETEAZA_JC_2007(tnAn IN JC2007.AN%TYPE, + tnLuna IN JC2007.LUNA%TYPE, + tcTabelSursa IN VARCHAR2, + tcCondSucursala IN VARCHAR2) is + lcMerge VARCHAR2(32000); + begin + lcMerge := 'MERGE INTO JC2007 A ' || + 'USING (select :1 as an, + :2 as luna, + dataact, + dataireg, + nract, + id_part, + id_fdoc, + totctva, + cod, + serie_act, + id_sucursala, + id_fact, + totftvatax, + tottvatax, + totnetax + from (select row_number() over(partition by a1.id_fact order by a1.an desc, a1.luna desc) as nrcrt, + a1.* + from jc2007 a1 + where a1.id_Fact in (select distinct a2.id_factd + from ' || tcTabelSursa || + ' a2 left join documente b2 on a2.id_factd = b2.id_doc + where a2.id_set = 10616 + and a2.an = :3 + and a2.luna = :4 + and a2.sters = 0 + and a2.id_factd <> 0 + and NVL(b2.tva_incasare,0) = 1 ' || + REPLACE(tcCondSucursala, 'ALIAS.', 'A2.') || ') + ' || + REPLACE(tcCondSucursala, 'ALIAS.', 'A1.') || + ') where nrcrt = 1 + and an * 12 + luna <> :5 * 12 + :6) B ' || + 'ON (A.AN = B.AN AND A.LUNA = B.LUNA AND A.ID_FACT = B.ID_FACT AND NVL(A.ID_SUCURSALA,-99)=NVL(B.ID_SUCURSALA,-99)) ' || + 'WHEN NOT MATCHED THEN ' || + 'insert (an,luna,dataact,dataireg,nract,id_part,id_fdoc,totctva,cod,serie_act,id_sucursala,id_fact,totftvatax,tottvatax,totnetax) ' || + 'values (b.an,b.luna,b.dataact,b.dataireg,b.nract,b.id_part,b.id_fdoc,b.totctva,b.cod,b.serie_act,b.id_sucursala,b.id_fact,b.totftvatax,b.tottvatax,b.totnetax)'; + + execute immediate lcMerge + using tnAn, tnLuna, tnAn, tnLuna, tnAn, tnLuna; + end COMPLETEAZA_JC_2007; + ----------------------------------------------------------------------- + Procedure COMPLETEAZA_IREG_PARTENERI(tnAn in IREG_PARTENERI.AN%TYPE, + tnLuna in IREG_PARTENERI.LUNA%TYPE, + tcTabelSursa IN VARCHAR2, + tcCondSucursala IN VARCHAR2, + tcCondInPlus IN VARCHAR2, + tcCont IN VARCHAR2, + tnIdPart IN NUMBER) is + ldDataNull DATE := TO_DATE('19700101', 'YYYYMMDD'); + lcMerge VARCHAR2(32000); + begin + -- conditia de la ON e luata de la incasari + -- inregistrarile vechi din IREG_PARTENERI le iau in functie de ID_FACTC/ID_FACTD pentru ca, + -- atunci cand a fost ales documentul pereche pe nota initiala, ID_FACT-ul respectiv exista in IREG_PARTENERI, indiferent daca + -- refacerea s-a facut dupa numar act sau id_fact + lcMerge := 'MERGE INTO IREG_PARTENERI I ' || 'USING ' || + '(select id_sucursala, + :1 as an, + :2 as luna, + cont, + acont, + id_part, + id_valuta, + id_fact, + id_fdoc, + id_lucrare, + id_set, + id_ctr, + id_jtva_coloana, + id_venchelt, + proc_tva, + curs, + dataact, + dataireg, + datascad, + nract, + serie_act, + id_responsabil, + cod, + explicatia, + explicatia4, + explicatia5, + precdeb + debit as precdeb, + preccred + credit as preccred, + precvaldeb + valdebit as precvaldeb, + precvalcred + valcredit as precvalcred + from (select row_number() over(partition by a1.id_fact order by a1.an desc, a1.luna desc) as nrcrt, + a1.* + from ireg_parteneri a1 + where a1.id_Fact in + (select distinct id_factc + from ' || tcTabelSursa || ' a2 + WHERE A2.AN = :3 + and A2.LUNA = :4 + and A2.STERS = 0 + and A2.ID_SET = 10616 + and A2.SCC = :5 + and NVL(A2.ID_FACTC,0) <> 0 + and NVL2(:6,A2.ID_PARTC,-1) = NVL(:7,-1) ' || + REPLACE(tcCondSucursala, 'ALIAS.', 'A2.') || ' + UNION ALL + select distinct id_factd + from ' || tcTabelSursa || ' a2 + WHERE A2.AN = :8 + and A2.LUNA = :9 + and A2.STERS = 0 + and A2.ID_SET = 10616 + and A2.SCD = :10 + and NVL(A2.ID_FACTD,0) <> 0 + and NVL2(:11,A2.ID_PARTD,-1) = NVL(:12,-1) ' || + REPLACE(tcCondSucursala, 'ALIAS.', 'A2.') || ') + and A1.cont = :13 + and A1.dataact is not null + and A1.an * 12 + A1.luna < :14 * 12 + :15) + where nrcrt = 1) S ' || + 'ON (I.AN = S.AN AND I.LUNA = S.LUNA AND I.CONT = S.CONT AND NVL(I.ACONT, ''XXXX'') = NVL(S.ACONT, ''XXXX'') AND +NVL(I.NRACT,0) = NVL(S.NRACT,0) AND NVL(I.SERIE_ACT,''+_'')=NVL(S.SERIE_ACT,''+_'') AND NVL(I.DATAACT,:16) = NVL(S.DATAACT,:17) AND +NVL(I.DATAIREG,:18) = NVL(S.DATAIREG,:19) AND NVL(I.DATASCAD,:20) = NVL(S.DATASCAD,:21) AND +NVL(I.ID_PART,0) = NVL(S.ID_PART,0) AND NVL(I.ID_VALUTA,0) = NVL(S.ID_VALUTA,0) AND NVL(I.ID_SUCURSALA,0) = NVL(S.ID_SUCURSALA,0) ' || + tcCondInPlus || ')' || 'WHEN NOT MATCHED THEN ' || + 'INSERT (id_sucursala, an, luna, cont, acont, id_part, id_valuta,' || + 'id_fact, id_fdoc, id_lucrare, id_set, id_ctr, id_jtva_coloana,' || + 'id_venchelt, proc_tva, curs, dataact, dataireg, datascad, nract,serie_act,' || + 'id_responsabil, cod, explicatia, explicatia4, explicatia5,' || + 'precdeb, preccred, precvaldeb, precvalcred)' || + 'VALUES (S.id_sucursala, S.an, S.luna, S.cont, S.acont, S.id_part, S.id_valuta,' || + 'S.id_fact, S.id_fdoc, S.id_lucrare, S.id_set, S.id_ctr, S.id_jtva_coloana,' || + 'S.id_venchelt, S.proc_tva, S.curs, S.dataact, S.dataireg, S.datascad, S.nract, S.serie_act,' || + 'S.id_responsabil, S.cod, S.explicatia, S.explicatia4, S.explicatia5,' || + 'S.precdeb, S.preccred, S.precvaldeb, S.precvalcred)'; + + --pinfo(lcMerge, 'CompleteazaIregPart'); + + execute immediate lcMerge + using tnAn, tnLuna, tnAn, tnLuna, tcCont, tnIdPart, tnIdPart, tnAn, tnLuna, tcCont, tnIdPart, tnIdPart, tcCont, tnAn, tnLuna, ldDataNull, ldDataNull, ldDataNull, ldDataNull, ldDataNull, ldDataNull; + end COMPLETEAZA_IREG_PARTENERI; + ----------------------------------------------------------------------- + FUNCTION VERIFICA_NOTE_CONTABILE(tlVerificAnalitic IN NUMBER) RETURN NUMBER IS + V_TOTAL NUMBER(10); + BEGIN + V_TOTAL := 0; + select sum(completare_partener + + DECODE(tlVerificAnalitic, 1, completare_analitic, 0) + + completare_pereche) as total + INTO V_TOTAL + from (select a.cont, + a.id_part, + a.analitic, + a.pereche, + a.cont_p, + a.cont_d, + b.cont as contpart, + b.fel_cont, + b.cu_inregistrari, + b.explicatie as explic_cont, + c.cont_c as exceptie, + c.debit as pozitie, + c.invers, + c1.lista, + NVL2(b.cont, decode(a.id_part, 0, 1, 0), 0) as completare_partener, + NVL2(d.cont, NVL2(a.analitic, 0, 1), 0) as completare_analitic, + NVL2(b.cont, + decode(a.cont_d, + 1, + (case + when a.pereche = 0 and b.cu_inregistrari = 1 and + b.fel_cont = 1 then + (case + when instr(c1.lista, a.cont_p) > 0 and c.debit = 0 and + c.invers = 1 then + 0 + else + 1 + end) + else + 0 + end), + 0, + (case + when a.pereche = 0 and b.cu_inregistrari = 1 and + b.fel_cont = 0 then + (case + when instr(c1.lista, a.cont_p) > 0 and c.debit = 1 and + c.invers = 1 then + 0 + else + 1 + end) + else + 0 + end)), + 0) as completare_pereche + from (select distinct scd as cont, + id_partd as id_part, + ascd as analitic, + pereched as pereche, + scc as cont_p, + 1 as cont_d + from act_temp + where sters = 0 + and scd is not null + and suma <> 0 + union all + select distinct scc as cont, + id_partc as id_part, + ascc as analitic, + perechec as pereche, + scd as cont_p, + 0 as cont_d + from act_temp + where sters = 0 + and scc is not null + and suma <> 0) a + left join vcoresp_tip_cont b + on a.cont = b.cont + left join exceptii_ireg c + on b.cont = c.cont + and c.invers = 1 + left join (select cont, stringagg(cont_c) as lista + from exceptii_ireg + where invers = 1 + group by cont) c1 + on b.cont = c1.cont + left join (select distinct cont + from vplcont_analitic + where inactiv = 0 + and an = pack_sesiune.getan()) d + on a.cont = d.cont); + + RETURN V_TOTAL; + END VERIFICA_NOTE_CONTABILE; + -------------------------------------------------------------------------- + --------------------------------------------------------------------------------------- + PROCEDURE SCRIE_IN_BALANTA(tcS in varchar2, + tnAn in BAL.AN%TYPE, + tnLuna in BAL.LUNA%TYPE, + tnScrie in number) IS + lnScrie NUMBER(1); -- 0/2 = SCRIERE/STERGERE; 1 = REFACERE + lcAct VARCHAR2(100); + lcMerge VARCHAR2(10000); + lnIdSucursala act.id_sucursala%type; + lcWhereSucursale varchar2(1000); + + BEGIN + + lnIdSucursala := PACK_CONTAFIN.GET_ID_SUCURSALA(); + if lnIdSucursala is not null then + lcWhereSucursale := ' and id_sucursala = ' || lnIdSucursala; + end if; + + lnScrie := NVL(tnScrie, 0); + IF lnScrie = pack_contafin.nRefacere then + lcAct := 'ACT'; + ELSE + lcAct := 'ACT_TEMP'; + END IF; + + -- BALANTA SINTETICA + lcMerge := 'MERGE INTO BAL B + USING (SELECT ID_SUCURSALA, CONT, SUM(DEBIT) AS DEBIT, SUM(CREDIT) AS CREDIT + FROM (SELECT ID_SUCURSALA, scd as cont, + sum(suma) as DEBIT, + sum(0.0000) AS CREDIT + FROM ' || lcAct || + ' WHERE STERS = 0 + AND AN = :1 + AND LUNA = :2 + AND SCD IS NOT NULL ' || + lcWhereSucursale || ' + GROUP BY ID_SUCURSALA, SCD + UNION ALL + SELECT ID_SUCURSALA, scc as cont, + sum(0.0000) AS DEBIT, + sum(suma) as CREDIT + FROM ' || lcAct || + ' WHERE STERS = 0 + AND AN = :3 + AND LUNA = :4 + AND SCC IS NOT NULL ' || + lcWhereSucursale || ' + GROUP BY ID_SUCURSALA, SCC) + GROUP BY ID_SUCURSALA, CONT) A + ON (B.AN = :5 AND B.LUNA = :6 AND NVL(B.CONT, ''XXXX'') = NVL(A.CONT, ''XXXX'') + AND NVL(B.id_sucursala,0) = NVL(A.id_sucursala,0)) + WHEN MATCHED THEN + UPDATE + SET B.RULDEB = B.RULDEB + A.DEBIT, + B.RULCRED = B.RULCRED + A.CREDIT + WHEN NOT MATCHED THEN + INSERT + (ID_SUCURSALA, AN, LUNA, CONT, RULDEB, RULCRED) + VALUES + (A.ID_SUCURSALA, :7, :8, A.CONT, A.DEBIT, A.CREDIT)'; + + EXECUTE IMMEDIATE lcMerge + USING tnAn, tnLuna, tnAn, tnLuna, tnAn, tnLuna, tnAn, tnLuna; + + -- BALANTA ANALITICA + lcMerge := 'MERGE INTO BALANA B + USING +(SELECT ID_SUCURSALA, CONT, ACONT, SUM(DEBIT) AS DEBIT, SUM(CREDIT) AS CREDIT + FROM (SELECT ID_SUCURSALA, scd as cont, ascd as acont, sum(suma) as DEBIT, sum(0.0000) AS CREDIT + FROM ' || lcAct || ' WHERE STERS = 0 AND SCD IS NOT NULL AND ASCD IS NOT NULL AND AN = :1 + AND LUNA = :2 ' || lcWhereSucursale || ' + GROUP BY ID_SUCURSALA, SCD, ASCD + UNION ALL + SELECT ID_SUCURSALA, scc as cont, ascc as acont, sum(0.0000) AS DEBIT, sum(suma) as CREDIT + FROM ' || lcAct || ' WHERE STERS = 0 AND SCC IS NOT NULL AND ASCC IS NOT NULL AND AN = :3 + AND LUNA = :4 ' || lcWhereSucursale || ' + GROUP BY ID_SUCURSALA, SCC, ASCC) + GROUP BY ID_SUCURSALA, CONT, ACONT) A + ON (B.AN = :5 AND B.LUNA = :6 AND NVL(B.CONT,''XXXX'') = NVL(A.CONT,''XXXX'') AND NVL(B.ACONT,''XXXX'') = NVL(A.ACONT,''XXXX'') + AND NVL(B.id_sucursala,0) = NVL(A.id_sucursala,0)) + WHEN MATCHED THEN + UPDATE SET B.RULDEB = B.RULDEB + A.DEBIT, B.RULCRED = B.RULCRED + A.CREDIT + WHEN NOT MATCHED THEN + INSERT (ID_SUCURSALA, AN, LUNA, CONT, ACONT, RULDEB, RULCRED) + VALUES (A.ID_SUCURSALA, :7, :8, A.CONT, A.ACONT, A.DEBIT, A.CREDIT)'; + + EXECUTE IMMEDIATE lcMerge + USING tnAn, tnLuna, tnAn, tnLuna, tnAn, tnLuna, tnAn, tnLuna; + + END SCRIE_IN_BALANTA; + + --------------------------------------------------------------- + + PROCEDURE SCRIE_IN_BALANTA_PARTENERI(tcs in varchar2, + tnAn in BALANTA_PARTENERI.AN%TYPE, + tnLuna in BALANTA_PARTENERI.LUNA%TYPE, + tcCont in BALANTA_PARTENERI.CONT%TYPE, + tnScrie in number, + tnIdPart in BALANTA_PARTENERI.ID_PART%TYPE DEFAULT NULL) IS + lnScrie NUMBER(1); -- 0/2 = SCRIERE/STERGERE; 1 = REFACERE + lcAct VARCHAR2(100); + lcMerge VARCHAR2(10000); + lnIdSucursala act.id_sucursala%type; + lcWhereSucursale varchar2(1000); + lcUpdWherePartD varchar2(1000); + lcUpdWherePartC varchar2(1000); + BEGIN + + lnIdSucursala := PACK_CONTAFIN.GET_ID_SUCURSALA(); + if lnIdSucursala is not null then + lcWhereSucursale := ' and id_sucursala = ' || lnIdSucursala; + end if; + + -- 30.06.2011 + if tnIdPart is not null then + lcUpdWherePartD := ' and id_partd = ' || tnIdPart; + lcUpdWherePartC := ' and id_partc = ' || tnIdPart; + end if; + -- 30.06.2011 ^ + + lnScrie := NVL(tnScrie, 0); + IF lnScrie = pack_contafin.nRefacere then + lcAct := 'ACT'; + ELSE + lcAct := 'ACT_TEMP'; + END IF; + + -- id_set 77772, 77773, 77774 - note reglare denominare 01-07-2005 + lcMerge := 'MERGE INTO BALANTA_PARTENERI B + USING (SELECT J.ID_SUCURSALA, + J.CONT, + J.ACONT, + J.ID_PART, + J.ID_VALUTA, + SUM(J.DEBIT) AS DEBIT, + SUM(J.CREDIT) AS CREDIT, + SUM(J.VALDEBIT) AS VALDEBIT, + SUM(J.VALCREDIT) AS VALCREDIT + FROM (SELECT ID_SUCURSALA, + scd as cont, + ascd as acont, + id_partd as id_part, + id_valuta, + sum(suma) as DEBIT, + 0.0000 AS CREDIT, + sum(suma_val) as VALDEBIT, + 0.0000 AS VALCREDIT + FROM ' || lcAct || + ' WHERE STERS = 0 + and scd is not null + AND AN = :1 + AND LUNA = :2 ' || lcUpdWherePartD || + lcWhereSucursale || case + when tcCont is not null then + 'AND scd = :3' + else + '' + end || ' AND ID_SET NOT IN (77772, 77773, 77774) + GROUP BY ID_SUCURSALA, SCD, ASCD, ID_PARTD, ID_VALUTA + UNION ALL + SELECT ID_SUCURSALA, scc as cont, + ascc as acont, + id_partc as id_part, + id_valuta, + 0.0000 AS DEBIT, + sum(suma) as CREDIT, + 0.0000 AS VALDEBIT, + sum(suma_val) as VALCREDIT + FROM ' || lcAct || + ' WHERE STERS = 0 + and scc is not null + AND AN = :4 + AND LUNA = :5 ' || lcUpdWherePartC || + lcWhereSucursale || case + when tcCont is not null then + 'AND scc = :6' + else + '' + end || ' AND ID_SET NOT IN (77772, 77773, 77774) + GROUP BY ID_SUCURSALA, SCC, ASCC, ID_PARTC, ID_VALUTA ) J join config_cont_ireg CI on J.cont=CI.cont + GROUP BY J.ID_SUCURSALA, J.CONT, J.ACONT, J.ID_PART, J.ID_VALUTA) A + ON (B.AN = :7 AND B.LUNA = :8 AND NVL(B.CONT, ''XXXX'') = NVL(A.CONT, ''XXXX'') + AND NVL(B.ACONT, ''XXXX'') = NVL(A.ACONT, ''XXXX'') AND B.ID_PART = A.ID_PART + AND B.ID_VALUTA = A.ID_VALUTA + AND NVL(B.id_sucursala,0) = NVL(A.id_sucursala,0)) + WHEN MATCHED THEN + UPDATE + SET B.DEBIT = B.DEBIT + A.DEBIT, + B.CREDIT = B.CREDIT + A.CREDIT, + B.VALDEBIT = B.VALDEBIT + A.VALDEBIT, + B.VALCREDIT = B.VALCREDIT + A.VALCREDIT + WHEN NOT MATCHED THEN + INSERT + (ID_SUCURSALA, + AN, + LUNA, + CONT, + ACONT, + ID_PART, + ID_VALUTA, + DEBIT, + CREDIT, + VALDEBIT, + VALCREDIT) + VALUES + (A.ID_SUCURSALA, + :9, + :10, + A.CONT, + A.ACONT, + A.ID_PART, + A.ID_VALUTA, + A.DEBIT, + A.CREDIT, + A.VALDEBIT, + A.VALCREDIT)'; + + if tcCont is not null then + EXECUTE IMMEDIATE lcMerge + USING tnAn, tnLuna, tcCont, tnAn, tnLuna, tcCont, tnAn, tnLuna, tnAn, tnLuna; + else + EXECUTE IMMEDIATE lcMerge + USING tnAn, tnLuna, tnAn, tnLuna, tnAn, tnLuna, tnAn, tnLuna; + end if; + + END SCRIE_IN_BALANTA_PARTENERI; + + PROCEDURE SCRIE_IN_IREG_PARTENERI(tnAn in IREG_PARTENERI.AN%TYPE, + tnLuna in IREG_PARTENERI.LUNA%TYPE, + tcCont in IREG_PARTENERI.CONT%TYPE, + tnScrie in number, + tnIdPart in IREG_PARTENERI.ID_PART%TYPE DEFAULT NULL) IS + lnScrie NUMBER(1); -- 0/2 = SCRIERE/STERGERE; 1 = REFACERE + lcAct VARCHAR2(100); + lcMerge VARCHAR2(32000); + + lcRefacereNumarAct OPTIUNI.VARVALUE%Type; + lnRefacereNumarAct number(10) := 0; + lnFelCont CONFIG_CONT_IREG.FEL_CONT%TYPE; + lnCuInregistrari CONFIG_CONT_IREG.CU_INREGISTRARI%TYPE; + lnCuVenchelt CONFIG_CONT_IREG.CU_VENCHELT%TYPE; + lnCuProcTva CONFIG_CONT_IREG.CU_PROC_TVA%TYPE; + lcCondInPlus VARCHAR2(1000); + lcSelInPlus VARCHAR2(1000); + lcGrupInPlus VARCHAR2(1000); + lcInsertColInPlus VARCHAR2(1000); + lcInsertValInPlus VARCHAR2(1000); + tcAcontNull VARCHAR2(4) := 'XXXX'; + ldDataNull DATE := TO_DATE('19700101', 'YYYYMMDD'); + lnIdSucursala act.id_sucursala%type; + lcWhereSucursale varchar2(1000); + lcUpdWherePartAct varchar2(1000); + lcUpdWherePart varchar2(1000); + BEGIN + + lnIdSucursala := PACK_CONTAFIN.GET_ID_SUCURSALA(); + if lnIdSucursala is not null then + lcWhereSucursale := ' and ALIAS.id_sucursala = ' || lnIdSucursala; + end if; + + -- 30.06.2011 + if tnIdPart is not null then + lcUpdWherePartAct := ' and (ALIAS.id_partd = ' || tnIdPart || + ' OR ALIAS.id_partc = ' || tnIdPart || ')'; + lcUpdWherePart := ' and ALIAS.id_part = ' || tnIdPart; + end if; + -- 30.06.2011 ^ + + lnScrie := NVL(tnScrie, 0); + IF lnScrie = 1 then + lcAct := 'ACT'; + ELSE + lcAct := 'ACT_TEMP'; + END IF; + + -- folosesc imperecherea de inregistrari dupa numar act sau id_fact + lcRefacereNumarAct := PACK_SESIUNE.getOptiuneFirma('REFACERENUMARACT'); + IF lcRefacereNumarAct IS NULL THEN + lnRefacereNumarAct := 0; + ELSE + lnRefacereNumarAct := to_number(lcRefacereNumarAct); + END IF; + + -- felul contului; + begin + SELECT C.FEL_CONT, C.CU_INREGISTRARI, C.CU_VENCHELT, C.CU_PROC_TVA + INTO lnFelCont, lnCuInregistrari, lnCuVenchelt, lnCuProcTva + FROM VCONFIG_CONT_IREG C + WHERE CONT = tcCont + AND CU_INREGISTRARI = 1; + exception + when no_data_found then + lnCuInregistrari := 0; + end; + + IF lnCuInregistrari = 0 THEN + GOTO EndProc; + END IF; + -- IMPERECHERE DUPA ID_FACT + IF lnRefacereNumarAct = 0 THEN + lcCondInPlus := lcCondInPlus || ' AND I.ID_FACT = S.ID_FACT '; + lcSelInPlus := lcSelInPlus || ', ID_FACT '; + lcGrupInPlus := lcGrupInPlus || ', ID_FACT '; + lcInsertColInPlus := lcInsertColInPlus || ', ID_FACT '; + lcInsertValInPlus := lcInsertValInPlus || ', S.ID_FACT '; + ELSE + lcSelInPlus := lcSelInPlus || ', MAX(ID_FACT) AS ID_FACT '; + lcInsertColInPlus := lcInsertColInPlus || ', ID_FACT '; + lcInsertValInPlus := lcInsertValInPlus || ', S.ID_FACT '; + END IF; + -- GRUPARE DUPA TIP VENIT/CHELTUIALA + IF lnCuVenchelt = 1 THEN + lcCondInPlus := lcCondInPlus || + ' AND I.ID_VENCHELT = S.ID_VENCHELT '; + lcSelInPlus := lcSelInPlus || ', ID_VENCHELT '; + lcGrupInPlus := lcGrupInPlus || ',ID_VENCHELT '; + lcInsertColInPlus := lcInsertColInPlus || ', ID_VENCHELT '; + lcInsertValInPlus := lcInsertValInPlus || ', S.ID_VENCHELT '; + ELSE + lcSelInPlus := lcSelInPlus || + ', MAX(ID_VENCHELT) AS ID_VENCHELT '; + lcInsertColInPlus := lcInsertColInPlus || ', ID_VENCHELT '; + lcInsertValInPlus := lcInsertValInPlus || ', S.ID_VENCHELT '; + END IF; + -- GRUPARE DUPA PROCENT TVA/ID_JTVA + IF lnCuProcTva = 1 THEN + -- LA INREGISTRAREA 408 AM ID_JTVA_COLOANA RO09BFB, RO09BVB...., IAR LA REGULARIZARE 408 POT SA AM RO09NB (TVA INCASARE NEEXIGIBIL) + -- SI NU SE MAI PUPA INREGISTRARILE SI DUPA ID_JTVA_COLOANA + -- INCERC SA LE PUP DOAR DUPA PROC_TVA (STIU CA POATE SA SARA IN AER) :) + -- lcCondInPlus := lcCondInPlus || ' AND NVL(I.PROC_TVA,0) = NVL(S.PROC_TVA,0) AND NVL(I.ID_JTVA_COLOANA,0) = NVL(S.ID_JTVA_COLOANA,0) '; + lcCondInPlus := lcCondInPlus || + ' AND NVL(I.PROC_TVA,0) = NVL(S.PROC_TVA,0) '; + lcSelInPlus := lcSelInPlus || + ', PROC_TVA, MAX(ID_JTVA_COLOANA) AS ID_JTVA_COLOANA'; + lcGrupInPlus := lcGrupInPlus || ', PROC_TVA '; + lcInsertColInPlus := lcInsertColInPlus || + ', PROC_TVA, ID_JTVA_COLOANA '; + lcInsertValInPlus := lcInsertValInPlus || + ', S.PROC_TVA, S.ID_JTVA_COLOANA '; + END IF; + + pack_contafin.COMPLETEAZA_IREG_PARTENERI(tnAn, + tnLuna, + lcAct, + lcWhereSucursale, + lcCondInPlus, + tcCont, + tnIdPart); + -- SELECTEZ TOATE FACTURILE DIN REGISTRUL JURNAL + -- (CONTUL ESTE PE DEBIT SI ESTE ACTIV SAU + -- CONTUL ESTE PE CREDIT SI ESTE ACTIV SI ESTE EXCEPTIE SAU REEVALUARE IN VALUTA ETC. + -- NU ESTE 4111 = 4427 CU PERECHED SAU ID_FACTD COMPLETAT (REGULARIZARE AVANS) 419 = 4111; 4111 = 4427) + + -- INVERSEZ SUME, CONTURI, PARTENERI PENTRU EXCEPTII SI REEVALUARE IN VALUTA + -- GRUPEZ DUPA NRACT, DATACT ETC. + -- MERGE IN IREG_PARTENERI + -- WHEN MATCHED : ACTUALIZEZ SUMELE SI CURSUL VALUTAR PENTRU REEVALUARE SOLDURI IN VALUTA + -- : STERG LINIA DACA OPERATIA ESTE STERGERE SI AM NUMAI ZERO-URI + -- WHEN NOT MATCHED : ADAUG LINIE IN IREG_PARTENERI + + -- ID_SET = 90501 : REEVALUARE SOLDURI IN VALUTA LA 31.12.XXXX + -- A.ID_SET NOT IN (77771,77772,77773,77774) : NOTE REGULARIZARE DENOMINARE - AFECTEAZA DOAR BALANTA DE VERIFICARE + + lcMerge := 'MERGE INTO IREG_PARTENERI I USING (SELECT an, + luna, + cont, + acont, + nract, + serie_act, + dataact, + dataireg, + MAX(datascad) AS DATASCAD, + id_part, + id_valuta, + id_sucursala, + SUM(debit) AS DEBIT, + SUM(credit) AS CREDIT, + SUM(valdebit) AS VALDEBIT, + SUM(valcredit) AS VALCREDIT, + max(curs) as curs, + max(id_fdoc) as id_fdoc, + max(id_lucrare) as id_lucrare, + max(id_set) as id_set, + max(id_ctr) as id_ctr, + max(id_responsabil) as id_responsabil, + max(cod) as cod, + max(explicatia) as explicatia, + max(explicatia4) as explicatia4, + max(explicatia5) as explicatia5 ' || lcSelInPlus || + ' FROM (SELECT A.AN, + A.LUNA, + A.COD, + A.NRACT, + A.SERIE_ACT, + TRUNC(A.DATAACT) AS DATAACT, + TRUNC(A.DATASCAD) AS DATASCAD, + TRUNC(A.DATAIREG) AS DATAIREG, + :1 AS CONT, + (CASE + WHEN ((A.SCD = :2 AND CD.FEL_CONT IN (0,2) AND NVL(E.EXCEPTIE, 0) = 0) OR + (A.SCC = :3 AND CC.FEL_CONT IN (0,2) AND NVL(E.EXCEPTIE, 0) = 1)) + THEN CASE WHEN NVL(E.EXCEPTIE,0) = 1 THEN A.ASCC ELSE A.ASCD END + ELSE CASE WHEN NVL(E.EXCEPTIE,0) = 1 THEN A.ASCD ELSE A.ASCC END + END) AS ACONT, + (CASE + WHEN ((A.SCD = :4 AND CD.FEL_CONT IN (0,2) AND NVL(E.EXCEPTIE, 0) = 0) OR + (A.SCC = :5 AND CC.FEL_CONT IN (0,2) AND NVL(E.EXCEPTIE, 0) = 1)) + THEN CASE WHEN NVL(E.EXCEPTIE,0) = 1 THEN -SUMA ELSE SUMA END + ELSE 0.00 + END) AS DEBIT, + (CASE + WHEN ((A.SCC = :6 AND CC.FEL_CONT IN (1,2) AND NVL(E.EXCEPTIE, 0) = 0) OR + (A.SCD = :7 AND CD.FEL_CONT IN (1,2) AND NVL(E.EXCEPTIE, 0) = 1)) + THEN CASE WHEN NVL(E.EXCEPTIE,0) = 1 THEN -SUMA ELSE SUMA END + ELSE 0.00 + END) AS CREDIT, + (CASE + WHEN ((A.SCD = :8 AND CD.FEL_CONT IN (0,2) AND NVL(E.EXCEPTIE, 0) = 0) OR + (A.SCC = :9 AND CC.FEL_CONT IN (0,2) AND NVL(E.EXCEPTIE, 0) = 1 )) + THEN CASE WHEN NVL(E.EXCEPTIE,0) = 1 THEN -SUMA_VAL ELSE SUMA_VAL END + ELSE 0.00 + END) AS VALDEBIT, + (CASE + WHEN ((A.SCC = :10 AND CC.FEL_CONT IN (1,2) AND NVL(E.EXCEPTIE, 0) = 0) OR + (A.SCD = :11 AND CD.FEL_CONT IN (1,2) AND NVL(E.EXCEPTIE, 0) = 1)) + THEN CASE WHEN NVL(E.EXCEPTIE,0) = 1 THEN -SUMA_VAL ELSE SUMA_VAL END + ELSE 0.00 + END) AS VALCREDIT, + (CASE + WHEN (A.SCD = :12 AND CD.FEL_CONT IN (0,2)) OR + (A.SCD = :13 AND CD.FEL_CONT IN (1,2) AND NVL(E.EXCEPTIE, 0) = 1) + THEN ID_PARTD + WHEN (A.SCC = :14 AND CC.FEL_CONT IN (1,2)) OR + (A.SCC = :15 AND CC.FEL_CONT IN (0,2) AND NVL(E.EXCEPTIE, 0) = 1) + THEN ID_PARTC + ELSE 0 + END) ID_PART, + A.ID_FACT, + A.ID_FDOC, + A.ID_VALUTA, + A.ID_SUCURSALA, + A.ID_CTR, + A.ID_LUCRARE, + A.ID_RESPONSABIL, + A.ID_SET, + A.ID_VENCHELT, + NVL(T.ID_BAZA, A.ID_JTVA_COLOANA) AS ID_JTVA_COLOANA, + A.PROC_TVA, + A.CURS, + A.explicatia, + A.explicatia4, + A.explicatia5 + FROM ' || lcAct || ' A + LEFT JOIN (SELECT DISTINCT 1 AS EXCEPTIE, + DECODE(DEBIT, 1, CONT_C, CONT) AS SCD, + DECODE(DEBIT, 1, CONT, CONT_C) AS SCC + FROM EXCEPTII_IREG + WHERE INVERS = 1 + AND CONT = ''' || tcCont || + ''') E ON A.SCD = E.SCD + AND A.SCC = E.SCC + LEFT JOIN CONFIG_CONT_IREG CD ON A.SCD = CD.CONT + LEFT JOIN CONFIG_CONT_IREG CC ON A.SCC = CC.CONT + LEFT JOIN (select id_jtva_coloana, + connect_by_root id_jtva_coloana as id_baza + from jtva_coloane + where level > 1 + start with id_tva is not null + connect by prior id_tva = id_jtva_coloana) T ON A.ID_JTVA_COLOANA = T.ID_JTVA_COLOANA + WHERE A.AN = :16 + and A.LUNA = :17 + and A.STERS = 0 ' || + REPLACE(lcWhereSucursale, 'ALIAS.', 'A.') || + REPLACE(lcUpdWherePartAct, 'ALIAS.', 'A.') || ' + AND A.ID_SET NOT IN (77771,77772,77773,77774, 90501) ' || CASE + WHEN tcCont = '4111' THEN + ' AND NOT (A.SCD = ''4111'' AND A.SCC = ''4427'' AND (NVL(PERECHED,0) <> 0 OR NVL(ID_FACTD,0)<>0)) + AND NOT (A.SCD = ''419'' AND A.SCC = ''4111'' AND (NVL(ID_FACTD,0) <> 0 AND NVL(ID_FACTC,0)<>0))' + ELSE + '' + END || ' AND ((A.SCD = :18 AND CD.FEL_CONT IN (0,2) AND NVL(A.ID_FACTD,0) = 0) OR + (A.SCC = :19 AND CC.FEL_CONT IN (0,2) AND NVL(E.EXCEPTIE, 0) = 1) OR + (A.SCC = :20 AND CC.FEL_CONT IN (1,2) AND NVL(A.ID_FACTC,0) = 0) OR + (A.SCD = :21 AND CD.FEL_CONT IN (1,2) AND NVL(E.EXCEPTIE, 0) = 1))) + group by an, + luna, + cont, + acont, + nract, + serie_act, + dataact, + dataireg, + id_part, + id_valuta, id_sucursala ' || lcGrupInPlus || ') S +ON (I.AN = :22 AND I.LUNA = :23 AND I.CONT = :24 AND NVL(I.ACONT, :25) = NVL(S.ACONT, :26) AND +NVL(I.NRACT,0) = NVL(S.NRACT,0) AND NVL(I.SERIE_ACT,''+_'')=NVL(S.SERIE_ACT,''+_'') AND NVL(I.DATAACT,:27) = NVL(S.DATAACT,:28) AND +NVL(I.DATAIREG,:29) = NVL(S.DATAIREG,:30) AND NVL(I.DATASCAD,:31) = NVL(S.DATASCAD,:32) AND +NVL(I.ID_PART,0) = NVL(S.ID_PART,0) AND NVL(I.ID_VALUTA,0) = NVL(S.ID_VALUTA,0) AND NVL(I.ID_SUCURSALA,0) = NVL(S.ID_SUCURSALA,0) ' || + lcCondInPlus || ') WHEN MATCHED THEN +UPDATE +SET I.DEBIT = I.DEBIT + S.DEBIT, + I.CREDIT = I.CREDIT + S.CREDIT, + I.VALDEBIT = I.VALDEBIT + S.VALDEBIT, + I.VALCREDIT = I.VALCREDIT + S.VALCREDIT + +DELETE WHERE ' || lnScrie || ' = ' || pack_contafin.nStergere || + ' and I.precdeb = 0 + and I.preccred = 0 + and I.precvaldeb = 0 + and I.precvalcred = 0 + and I.debit = 0 + and I.credit = 0 + and I.valdebit = 0 + and I.valcredit = 0 + WHEN NOT MATCHED THEN + INSERT + (AN, LUNA, CONT, ACONT, ID_PART, ID_VALUTA, ID_SUCURSALA, + id_fdoc, id_lucrare, id_set, id_ctr, + curs, dataact, dataireg, datascad, nract, serie_act, + id_responsabil, cod, explicatia, explicatia4, explicatia5, + DEBIT, CREDIT, VALDEBIT, VALCREDIT ' || + lcInsertColInPlus || ') + VALUES + (:33, :34, S.CONT, S.ACONT, S.ID_PART, S.id_valuta, S.id_sucursala, + S.id_fdoc, S.id_lucrare, S.id_set, S.id_ctr, + S.curs, S.dataact, S.dataireg, S.datascad, S.nract, S.serie_act, + S.id_responsabil, S.cod, S.explicatia, S.explicatia4, S.explicatia5, + S.DEBIT, S.CREDIT, S.VALDEBIT, S.VALCREDIT ' || + lcInsertValInPlus || ')'; + + -- pInfo(lcMerge, 'SCRIE_IREG INCASARI 1'); + + EXECUTE IMMEDIATE lcMerge + USING tcCont, tcCont, tcCont, tcCont, tcCont, tcCont, tcCont, tcCont, tcCont, tcCont, tcCont, tcCont, tcCont, tcCont, tcCont, tnAn, tnLuna, tcCont, tcCont, tcCont, tcCont, tnAn, tnLuna, tcCont, tcAcontNull, tcAcontNull, ldDataNull, ldDataNull, ldDataNull, ldDataNull, ldDataNull, ldDataNull, tnAn, tnLuna; + + -- IMPERECHERE INCASARI/PLATI (CONT ACTIV PE CREDIT SAU PASIV PE DEBIT SI NU SUNT EXCEPTII) + -- GRUPEZ DUPA NRACT, MIN(IREG_PARTENERI.DATACT) ETC. + -- MERGE IN IREG_PARTENERI + -- WHEN MATCHED : ACTUALIZEZ SUMELE + -- : STERG LINIA DACA OPERATIA ESTE STERGERE SI AM NUMAI ZERO-URI + -- WHEN NOT MATCHED : ADAUG LINIE IN IREG_PARTENERI + + -- ID_SET = 90501 : REEVALUARE SOLDURI IN VALUTA LA 31.12.XXXX + -- A.ID_SET NOT IN (77771,77772,77773,77774) : NOTE REGULARIZARE DENOMINARE - AFECTEAZA DOAR BALANTA DE VERIFICARE + + lcMerge := 'MERGE INTO IREG_PARTENERI I USING (' || CASE lnRefacereNumarAct + WHEN 1 THEN + 'SELECT S1.an, + S1.luna, + S1.cont, + S1.acont, + S1.nract, + S1.id_part, + S1.id_valuta, + S1.id_sucursala, + S1.curs,' || CASE + WHEN lnCuProcTva = 1 THEN + 'S1.PROC_TVA, S1.ID_JTVA_COLOANA,' + ELSE + '' + END || CASE + WHEN lnCuVenchelt = 1 THEN + 'S1.ID_VENCHELT,' + ELSE + '' + END || 'S1.DEBIT, + S1.CREDIT, + S1.VALDEBIT, + S1.VALCREDIT, + S1.ID_FACT, + MIN(I1.DATAACT) AS DATAACT, + MAX(S1.ID_VENCHELT) AS ID_VENCHELT + FROM (' + ELSE + '' + END || 'SELECT an, + luna, + cont, + acont, + nract, + id_part, + id_valuta, + id_sucursala, + MAX(curs) AS CURS, + SUM(debit) AS DEBIT, + SUM(credit) AS CREDIT, + SUM(valdebit) AS VALDEBIT, + SUM(valcredit) AS VALCREDIT ' || lcSelInPlus || + ' FROM (SELECT A.AN, + A.LUNA, + A.COD, + CASE + WHEN (A.SCC = :1 AND NVL(CC.FEL_CONT, 0) = 0) OR + (A.SCC = :2 AND NVL(CC.FEL_CONT, 0) IN (1,2) AND NVL(A.PERECHEC, 0) <> 0) THEN + A.PERECHEC + WHEN (A.SCD = :3 AND NVL(CD.FEL_CONT, 0) = 1) OR + (A.SCD = :4 AND NVL(CD.FEL_CONT, 0) IN (0,2) AND NVL(A.PERECHED, 0) <> 0) THEN + A.PERECHED + ELSE + 0 + END NRACT, + CASE + WHEN (A.SCC = :5 AND NVL(CC.FEL_CONT, 0) = 0) OR + (A.SCC = :6 AND NVL(CC.FEL_CONT, 0) IN (1,2) AND NVL(A.ID_FACTC, 0) <> 0) THEN + A.ID_FACTC + WHEN (A.SCD = :7 AND NVL(CD.FEL_CONT, 0) = 1) OR + (A.SCD = :8 AND NVL(CD.FEL_CONT, 0) IN (0,2) AND NVL(A.ID_FACTD, 0) <> 0) THEN + A.ID_FACTD + ELSE + 0 + END ID_FACT, + :9 AS CONT, + DECODE(A.SCD, :10, A.ASCD, A.ASCC) AS ACONT, + (CASE + WHEN (A.SCD = :11 AND ((CD.FEL_CONT IN(1,2) AND A.ID_SET <> 90501) OR + (CD.FEL_CONT = 0 AND A.ID_SET = 90501))) OR + (A.SCC = :12 AND ((CC.FEL_CONT = 0 AND A.ID_SET = 90501) OR + (CC.FEL_CONT = 1 AND A.ID_SET <> 90501 AND NVL(A.ID_FACTC, 0) <> 0))) THEN + (CASE + WHEN A.SCC = :13 AND ((CC.FEL_CONT = 0 AND A.ID_SET = 90501) OR + (CC.FEL_CONT = 1 AND A.ID_SET <> 90501 AND NVL(A.ID_FACTC, 0) <> 0)) THEN + -A.SUMA + ELSE + A.SUMA + END) ELSE 0.00 END) AS DEBIT, + (CASE + WHEN (A.SCC = :14 AND ((CC.FEL_CONT IN(0,2) AND A.ID_SET <> 90501) OR + (CC.FEL_CONT = 1 AND A.ID_SET = 90501))) OR + (A.SCD = :15 AND ((CD.FEL_CONT = 1 AND A.ID_SET = 90501) OR + (CD.FEL_CONT = 0 AND A.ID_SET <> 90501 AND NVL(A.ID_FACTD, 0) <> 0))) THEN + (CASE + WHEN A.SCD = :16 AND ((CD.FEL_CONT = 1 AND A.ID_SET = 90501) OR + (CD.FEL_CONT = 0 AND A.ID_SET <> 90501 AND NVL(A.ID_FACTD, 0) <> 0)) THEN + -A.SUMA + ELSE + A.SUMA + END) ELSE 0.00 END) AS CREDIT, + (CASE + WHEN (A.SCD = :17 AND ((NVL(CD.FEL_CONT,0) IN(1,2) AND A.ID_SET <> 90501) OR + (NVL(CD.FEL_CONT,0) = 0 AND A.ID_SET = 90501))) OR + (A.SCC = :18 AND ((NVL(CC.FEL_CONT,0) = 0 AND A.ID_SET = 90501) OR + (NVL(CC.FEL_CONT,0) = 1 AND A.ID_SET <> 90501 AND NVL(A.ID_FACTC, 0) <> 0))) + THEN + (CASE WHEN A.SCC = :19 AND ((NVL(CC.FEL_CONT,0) = 0 AND A.ID_SET = 90501) OR + (NVL(CC.FEL_CONT,0) = 1 AND A.ID_SET <> 90501 AND NVL(A.ID_FACTC, 0) <> 0)) + THEN + -A.SUMA_VAL + ELSE + A.SUMA_VAL + END) + ELSE + 0.00 + END) AS VALDEBIT, + (CASE + WHEN (A.SCC = :20 AND ((NVL(CC.FEL_CONT,0) IN(0,2) AND A.ID_SET <> 90501) OR + (NVL(CC.FEL_CONT,0) = 1 AND A.ID_SET = 90501))) OR + (A.SCD = :21 AND ((NVL(CD.FEL_CONT,0) = 1 AND A.ID_SET = 90501) OR + (NVL(CD.FEL_CONT,0) = 0 AND A.ID_SET <> 90501 AND NVL(A.ID_FACTD, 0) <> 0))) + THEN + (CASE WHEN A.SCD = :22 AND ((NVL(CD.FEL_CONT,0) = 1 AND A.ID_SET = 90501) OR + (NVL(CD.FEL_CONT,0) = 0 AND A.ID_SET <> 90501 AND NVL(A.ID_FACTD, 0) <> 0)) + THEN + -A.SUMA_VAL + ELSE + A.SUMA_VAL + END) + ELSE + 0.00 + END) AS VALCREDIT, + CASE + WHEN (A.SCC = :23 AND (CC.FEL_CONT IN(0,2) OR (CC.FEL_CONT = 1 AND A.ID_SET = 90501))) + THEN A.ID_PARTC + WHEN (A.SCD = :24 AND (CD.FEL_CONT IN(1,2) OR (CD.FEL_CONT = 0 AND (A.ID_SET = 90501 OR NVL(PERECHED,0)<>0 OR NVL(ID_FACTD,0)<>0)))) + THEN A.ID_PARTD + ELSE 0 + END ID_PART, + A.ID_VALUTA, + A.ID_SUCURSALA, + CASE WHEN A.ID_SET = 90501 THEN A.CURS ELSE 0 END AS CURS, + A.ID_VENCHELT, + A.ID_JTVA_COLOANA, + A.PROC_TVA + FROM ' || lcAct || ' A + LEFT JOIN (SELECT DISTINCT 1 AS EXCEPTIE, + DECODE(DEBIT, 1, CONT_C, CONT) AS SCD, + DECODE(DEBIT, 1, CONT, CONT_C) AS SCC + FROM EXCEPTII_IREG + WHERE INVERS = 1 + AND CONT = ''' || tcCont || + ''') E ON A.SCD = E.SCD + AND A.SCC = E.SCC + LEFT JOIN CONFIG_CONT_IREG CD ON A.SCD = CD.CONT + LEFT JOIN CONFIG_CONT_IREG CC ON A.SCC = CC.CONT + WHERE A.AN = :25 + and A.LUNA = :26 + and A.STERS = 0 ' || + REPLACE(lcWhereSucursale, 'ALIAS.', 'A.') || + REPLACE(lcUpdWherePartAct, 'ALIAS.', 'A.') || ' + AND A.ID_SET NOT IN (77771,77772,77773,77774) + AND ((A.SCC = :27 AND CC.FEL_CONT = 0 AND NVL(E.EXCEPTIE, 0) = 0) OR + (A.SCD = :28 AND CD.FEL_CONT = 1 AND NVL(E.EXCEPTIE, 0) = 0) OR + (A.SCC = :29 AND CC.FEL_CONT IN (1,2) AND NVL(E.EXCEPTIE, 0) = 0 AND NVL(A.ID_FACTC, 0) <> 0) OR + (A.SCD = :30 AND CD.FEL_CONT IN (0,2) AND NVL(E.EXCEPTIE, 0) = 0 AND NVL(A.ID_FACTD, 0) <> 0) OR + ((A.SCD = :31 OR A.SCC = :32) AND A.ID_SET = 90501) ' || + -- 4111 = 4427 (AVANS 419) + CASE + WHEN tcCont = '4111' THEN + ' OR (A.SCD = ''4111'' AND A.SCC = ''4427'' AND (NVL(A.PERECHED,0) <> 0 OR NVL(A.ID_FACTD,0)<>0)) + OR (A.SCD = ''419'' AND A.SCC = ''4111'' AND (NVL(A.ID_FACTD,0) <> 0 AND NVL(A.ID_FACTC,0)<>0))' + ELSE + '' + END || ')) + group by an, + luna, + cont, + acont, + nract, + id_part, + id_valuta,id_sucursala' || lcGrupInPlus || CASE lnRefacereNumarAct + WHEN 1 THEN + ') S1 + LEFT JOIN IREG_PARTENERI I1 ON I1.AN = ' || tnAn || + ' AND I1.LUNA = ' || tnLuna || + -- AM FOST NEVOIT - SA NU STRIC CELELALTE VARIABILE LEGATE :( + ' AND I1.CONT = ' || tcCont || + ' AND NVL(I1.ACONT, ''XXXX'') = + NVL(S1.ACONT, ''XXXX'') + AND I1.NRACT = S1.NRACT + AND I1.ID_PART = S1.ID_PART + AND I1.ID_VALUTA = S1.ID_VALUTA + AND NVL(I1.ID_SUCURSALA,0) = NVL(S1.ID_SUCURSALA,0) ' || + REPLACE(lcUpdWherePart, 'ALIAS.', 'I1.') || + ' GROUP BY S1.an, + S1.luna, + S1.cont, + S1.acont, + S1.nract, + S1.id_part, + S1.id_valuta, + S1.id_sucursala, + S1.curs,' || CASE + WHEN lnCuProcTva = 1 THEN + 'S1.PROC_TVA, S1.ID_JTVA_COLOANA,' + ELSE + '' + END || CASE + WHEN lnCuVenchelt = 1 THEN + 'S1.ID_VENCHELT,' + ELSE + '' + END || 'S1.DEBIT, + S1.CREDIT, + S1.VALDEBIT, + S1.VALCREDIT, + S1.ID_FACT' + ELSE + '' + END || ') S +ON (I.AN = :33 AND I.LUNA = :34 AND I.CONT = :35 AND NVL(I.ACONT, :36) = NVL(S.ACONT, :37) AND NVL(I.NRACT,0) = NVL(S.NRACT,0) AND ' || + CASE lnRefacereNumarAct + WHEN 1 THEN + ' NVL(I.DATAACT,TO_DATE(''19700101'', ''YYYYMMDD'')) = NVL(S.DATAACT,TO_DATE(''19700101'', ''YYYYMMDD'')) AND ' + ELSE + '' + END || + ' NVL(I.ID_PART,0) = NVL(S.ID_PART,0) AND NVL(I.ID_VALUTA,0) = NVL(S.ID_VALUTA,0) AND NVL(I.ID_SUCURSALA,0) = NVL(S.ID_SUCURSALA,0) ' || + lcCondInPlus || ') WHEN MATCHED THEN +UPDATE +SET I.DEBIT = I.DEBIT + S.DEBIT, + I.CREDIT = I.CREDIT + S.CREDIT, + I.VALDEBIT = I.VALDEBIT + S.VALDEBIT, + I.VALCREDIT = I.VALCREDIT + S.VALCREDIT, + I.CURS = (CASE NVL(S.CURS,0) WHEN 0 THEN I.CURS ELSE S.CURS END) + +DELETE WHERE ' || lnScrie || ' = ' || pack_contafin.nStergere || + ' and I.precdeb = 0 + and I.preccred = 0 + and I.precvaldeb = 0 + and I.precvalcred = 0 + and I.debit = 0 + and I.credit = 0 + and I.valdebit = 0 + and I.valcredit = 0 + WHEN NOT MATCHED THEN + INSERT + (AN, LUNA, CONT, ACONT, ID_PART, ID_VALUTA, ID_SUCURSALA, + nract, DEBIT, CREDIT, VALDEBIT, VALCREDIT ' || + lcInsertColInPlus || ') + VALUES + (:38, :39, S.CONT, S.ACONT, S.ID_PART, S.ID_VALUTA, S.ID_SUCURSALA, + S.nract, S.DEBIT, S.CREDIT, S.VALDEBIT, S.VALCREDIT' || + lcInsertValInPlus || ')'; + + -- pInfo(lcMerge, 'SCRIE_IREG INCASARI 2'); + + EXECUTE IMMEDIATE lcMerge + USING tcCont, tcCont, tcCont, tcCont, tcCont, tcCont, tcCont, tcCont, tcCont, tcCont, tcCont, tcCont, tcCont, tcCont, tcCont, tcCont, tcCont, tcCont, tcCont, tcCont, tcCont, tcCont, tcCont, tcCont, tnAn, tnLuna, tcCont, tcCont, tcCont, tcCont, tcCont, tcCont, tnAn, tnLuna, tcCont, tcAcontNull, tcAcontNull, tnAn, tnLuna; + + <> + NULL; + + END SCRIE_IN_IREG_PARTENERI; + + --------------------------------------------------------------- + PROCEDURE EXECUTA_SCRIE_IN_IREG(tcS VARCHAR2, + tnAn in number, + tnLuna in number, + tcCont in varchar2, + tnScrie number, + tnVenChelt number) IS + BEGIN + -- TNSCRIE: 0 = SCRIERE; 2 = STERGERE + -- SE APELEAZA DOAR PENTRU ACT_TEMP, FARA CONT PRECIZAT + FOR ITEM IN (SELECT SCD AS CONT + FROM ACT_TEMP + UNION + SELECT SCC AS CONT + FROM ACT_TEMP) LOOP + SCRIE_IN_IREG_PARTENERI(tnAn, tnLuna, ITEM.CONT, tnScrie, null); + END LOOP; + + END EXECUTA_SCRIE_IN_IREG; + + ------------------------------------------------------------------- + PROCEDURE STERGE_TEMP_ACTRUL IS + BEGIN + DELETE FROM ACT_TEMP; + DELETE FROM RUL_TEMP; + DELETE FROM RUL_TEMP_OBINV; + END STERGE_TEMP_ACTRUL; + ------------------------------------------------------------------- + Procedure INIT_SCRIERE_ACT_RUL_LOCAL(tnIdUtil SYN_UTILIZATORI.ID_UTIL%TYPE, + tnAn ACT.AN%TYPE, + tnLuna ACT.LUNA%TYPE, + tnSuprascriereCod NUMBER, + tnScrieSterge NUMBER, + tnIdSucursala ACT.ID_SUCURSALA%TYPE) is + -- se apeleaza inainte de completarea act_temp din Fox + -- tnScrie_Sterge: 0 = scriere, 1 = refacere, 2 = stergere + begin + pack_contafin.STERGE_TEMP_ACTRUL(); + pack_contafin.INITIALIZEAZA_SCRIERE_ACT_RUL(tnIdUtil, + NULL, + tnAn, + tnLuna, + tnSuprascriereCod, + 1, + tnScrieSterge, + tnIdSucursala); + end; + ------------------------------------------------------------------- + PROCEDURE INITIALIZEAZA_SCRIERE_ACT_RUL(tnIdUtil ACT.ID_UTIL%TYPE, + tdDataOra ACT.DATAORA%TYPE, + tnAn ACT.AN%TYPE, + tnLuna ACT.LUNA%TYPE, + tnSuprascriereCod NUMBER, + tnSuprascriereAnLuna NUMBER, + tnScrieSterge NUMBER, + tnIdSucursala ACT.ID_SUCURSALA%TYPE) IS + -- tnScrie_Sterge: 0 = scriere, 1 = refacere, 2 = stergere + BEGIN + pack_contafin.reset_variables(); + if tnSuprascriereCod = 0 then + pack_contafin.set_suprascriereCod(tnSuprascriereCod); + Else + if tnScrieSterge <> 2 then + pack_contafin.SET_COD(user); + end if; + end if; + pack_contafin.set_suprascriereAnLuna(tnSuprascriereAnLuna); + pack_contafin.set_idutil(tnIdUtil); + pack_contafin.set_dataora(NVL(tdDataOra, SYSDATE)); + pack_sesiune.setan(tnAn); + pack_sesiune.setluna(tnLuna); + pack_contafin.set_id_sucursala(tnIdSucursala); + END INITIALIZEAZA_SCRIERE_ACT_RUL; + ------------------------------------------------------------------- + + ------------------------------------------------------------------- + -- sterge un document direct din baza de date, complet + ------------------------------------------------------------------- + procedure sterge_document(tnCod in number, + tnAn in number, + tnLuna in number, + tnIdUtil in number) is + begin + pack_sesiune.setan(tnAn); + pack_sesiune.setluna(tnLuna); + pack_sesiune.set_id_util(tnIdUtil); + pack_contafin.sterge_document(tnCod); + end sterge_document; + + ------------------------------------------------------------------- + -- sterge un document direct din baza de date, complet + -- trebuie configurat an, luna, id_util + ------------------------------------------------------------------- + procedure sterge_document(V_cod in number) is + lnAn number(4) := 0; + lnLuna number(2) := 0; + lnAreReferinte number(1) := 0; + lnIdVanzare vanzari.id_vanzare%type; + lcMesajRefacere varchar2(3000); + lnIdUtil syn_utilizatori.id_util%type; + lnIdSet act.id_set%type; + lnIdFact act.id_fact%type; + lnIdFactD act.id_factd%type; + begin + + lnAn := pack_sesiune.getan(); + lnLuna := pack_sesiune.getluna(); + lnIdUtil := pack_sesiune.get_id_util(); + lnAreReferinte := pack_documente.ReferinteDocumenteNota(lnAn, + lnLuna, + V_cod); + + if lnAreReferinte = 1 THEN + RAISE_APPLICATION_ERROR(-20000, + 'Documentul are referinte (incasari/plati). Nu poate fi sters.'); + goto sfarsit_procedura; + end if; + + insert into act_temp + (luna, + an, + cod, + dataireg, + nract, + dataact, + explicatia, + scd, + ascd, + scc, + ascc, + suma, + pereched, + perechec, + suma_val, + curs, + datascad, + neimpozab, + nnir, + id_util, + dataora, + id_utils, + dataoras, + id_responsabil, + id_venchelt, + id_sectie, + id_set, + id_fact, + id_partd, + id_partc, + id_sucursala, + id_fdoc, + explicatia4, + explicatia5, + id_lucrare, + id_gestin, + id_gestout, + id_valuta, + proc_tva, + id_act, + sters, + id_factd, + id_factc, + id_ctr, + id_jtva_coloana, + serie_act, + validat, + id_utilv, + dataorav) + select luna, + an, + cod, + dataireg, + nract, + dataact, + explicatia, + scd, + ascd, + scc, + ascc, + suma, + pereched, + perechec, + suma_val, + curs, + datascad, + neimpozab, + nnir, + id_util, + dataora, + id_utils, + dataoras, + id_responsabil, + id_venchelt, + id_sectie, + id_set, + id_fact, + id_partd, + id_partc, + id_sucursala, + id_fdoc, + explicatia4, + explicatia5, + id_lucrare, + id_gestin, + id_gestout, + id_valuta, + proc_tva, + id_act, + sters, + id_factd, + id_factc, + id_ctr, + id_jtva_coloana, + serie_act, + validat, + id_utilv, + dataorav + from act + where an = lnAn + and luna = lnLuna + and cod = V_cod + order by id_act; + + insert into rul_temp + (id_rul, + an, + luna, + cod, + nnir, + id_articol, + id_gestiune, + pret, + pretv, + tva, + tvav, + cant, + cante, + cont, + adaos, + id_lucrare, + id_responsabil, + dataact, + procent, + curs, + pretd, + id_util, + dataora, + id_sectie, + alcooltutun, + pretvtva, + acont, + datain, + dataout, + proc_disc, + discunitar, + proc_tva, + id_fact, + sters, + discount_tva, + adaos_tva, + proc_tvav, + valoare, + valoarev, + valtva, + valtvav, + valoare_adaos, + valtva_adaos, + valoare_discount, + valtva_discount, + id_gestiunec, + id_responsabilc, + id_tip_rulaj, + id_reteta, + id_set, + id_sucursala, + id_obiect_depozit, + id_rul_aux, + nract, + id_utils, + dataoras, + serie, + id_valuta, + serie_act, + lot, + adata_expirare, + id_part_rez, + id_lucrare_rez) + select id_rul, + an, + luna, + cod, + nnir, + id_articol, + id_gestiune, + pret, + pretv, + tva, + tvav, + cant, + cante, + cont, + adaos, + id_lucrare, + id_responsabil, + dataact, + procent, + curs, + pretd, + id_util, + dataora, + id_sectie, + alcooltutun, + pretvtva, + acont, + datain, + dataout, + proc_disc, + discunitar, + proc_tva, + id_fact, + sters, + discount_tva, + adaos_tva, + proc_tvav, + valoare, + valoarev, + valtva, + valtvav, + valoare_adaos, + valtva_adaos, + valoare_discount, + valtva_discount, + id_gestiunec, + id_responsabilc, + id_tip_rulaj, + id_reteta, + id_set, + id_sucursala, + id_obiect_depozit, + id_rul_aux, + nract, + id_utils, + dataoras, + serie, + id_valuta, + serie_act, + lot, + adata_expirare, + id_part_rez, + id_lucrare_rez + from rul + where an = lnAn + and luna = lnLuna + and cod = V_cod + order by id_rul; + + insert into rul_temp_obinv + (id_rul_obinv, + an, + luna, + cod, + nnir, + id_articol, + id_gestiune, + pret, + pretv, + tva, + tvav, + cant, + cante, + cont, + adaos, + id_lucrare, + id_responsabil, + dataact, + procent, + curs, + pretd, + id_util, + dataora, + id_sectie, + alcooltutun, + pretvtva, + acont, + datain, + dataout, + proc_disc, + discunitar, + proc_tva, + id_fact, + sters, + discount_tva, + adaos_tva, + proc_tvav, + datapif, + dns_luni, + dns_ramas, + valoare, + valoarev, + valtva, + valtvav, + valoare_adaos, + valtva_adaos, + valoare_discount, + valtva_discount, + id_gestiunec, + id_responsabilc, + id_tip_rulaj, + id_set, + pret_imputare, + nract, + id_utils, + dataoras, + id_rul_aux, + serie, + id_valuta, + serie_act, + id_sucursala) + select id_rul_obinv, + an, + luna, + cod, + nnir, + id_articol, + id_gestiune, + pret, + pretv, + tva, + tvav, + cant, + cante, + cont, + adaos, + id_lucrare, + id_responsabil, + dataact, + procent, + curs, + pretd, + id_util, + dataora, + id_sectie, + alcooltutun, + pretvtva, + acont, + datain, + dataout, + proc_disc, + discunitar, + proc_tva, + id_fact, + sters, + discount_tva, + adaos_tva, + proc_tvav, + datapif, + dns_luni, + dns_ramas, + valoare, + valoarev, + valtva, + valtvav, + valoare_adaos, + valtva_adaos, + valoare_discount, + valtva_discount, + id_gestiunec, + id_responsabilc, + id_tip_rulaj, + id_set, + pret_imputare, + nract, + id_utils, + dataoras, + id_rul_aux, + serie, + id_valuta, + serie_act, + id_sucursala + from rul_obinv + where an = lnAn + and luna = lnLuna + and cod = v_cod + order by id_rul_obinv; + + pack_contafin.finalizeaza_scriere_act_rul(lnIdUtil, + v_cod, + 2, + 0, + 0, + lcMesajRefacere); + + begin + select max(id_set), max(id_fact), max(id_factd) + into lnIdSet, lnIdFact, lnIdFactD + from act_temp; + + pack_contafin.finalizeaza_stergere_nota(lnLuna, + lnAn, + sysdate, + lnIdSet, + v_cod, + lnIdFact, + lnIdFactD, + lnIdUtil); + exception + WHEN NO_DATA_FOUND THEN + NULL; + END; + + <> + null; + end sterge_document; + + -------------------------------------------------------------------------- + -- initializeaza_act_rul + finalizeaza_document + cursor_verificare) + -------------------------------------------------------------------------- + procedure finalizeaza_document_verif(tnAn IN NUMBER, + tnLuna IN NUMBER, + tnScrieSterge IN number, + tnDateCompletate IN number, + tnScadereStoc IN number, + tnCod IN ACT.COD%type, + tnIdUtil IN ACT.ID_UTIL%TYPE, + tdDataOra IN ACT.DATAORA%TYPE, + tnIdSucursala IN ACT.ID_SUCURSALA%TYPE, + tcSirModificariAcont IN VARCHAR2, + tcSirModificariPart IN VARCHAR2, + CURSOR_VERIFICARE OUT PACK_TYPES.tip_cursor) is + lcMesajRefacere VARCHAR2(3000); + begin + -- tnDateCompletate = 0 / 1 - cod / 2 - cod + an + luna + -- tnScrieSterge = 0 scriere/ 1- refacere / 2-stergere + + -- completare analitice si parteneri din configurari + pack_contafin.completeaza_analitice; + pack_contafin.completeaza_analitice_rul; + pack_contafin.completeaza_parteneri_gestiuni; + pack_contafin.sterge_analitice_gresite; + pack_contafin.sterge_analitice_gresite_rul; + + -- completare analitice si parteneri din verificare note contabile + if tcSirModificariAcont is not null or tcSirModificariPart is not null then + pack_contafin.finalizeaza_document_compl(tcSirModificariAcont, + tcSirModificariPart); + end if; + + -- verificare note contabile la scriere + if tnScrieSterge = 0 and pack_contafin.verifica_note_contabile(1) > 0 then + pack_contafin.cursor_verificare(CURSOR_VERIFICARE); + else + pack_contafin.initializeaza_scriere_act_rul(tnIdUtil, + tdDataOra, + tnAn, + tnLuna, + 1, + 1, + tnScrieSterge, + tnIdSucursala); + + pack_contafin.finalizeaza_scriere_act_rul(tnIdUtil, + tnCod, + tnScrieSterge, + 0, + 0, + lcMesajRefacere); + + OPEN CURSOR_VERIFICARE FOR + SELECT * FROM ACT_TEMP WHERE 1 = 2; + end if; + + end finalizeaza_document_verif; + + ----------------------------------------------------------------------- + -- completeaza act_temp cu analitice, parteneri din formularul de verificare + -- se apeleaza din finalizeaza_document_verif + ----------------------------------------------------------------------- + procedure finalizeaza_document_compl(V_SIR_MODIFICARI_ACONT IN VARCHAR2, + V_SIR_MODIFICARI_PART IN VARCHAR2) is + V_SEPARATOR_LINIE VARCHAR2(5) := ';'; + V_SEPARATOR VARCHAR2(5) := '|'; + BEGIN + -- de mutat in pack_contafin + IF V_SIR_MODIFICARI_ACONT IS NOT NULL THEN + MERGE INTO ACT_TEMP A + USING (select to_number(substr(lista || V_SEPARATOR, + 1, + instr(lista, V_SEPARATOR) - 1)) as id_act, + substr(lista || V_SEPARATOR || V_SEPARATOR, + instr(lista || V_SEPARATOR || V_SEPARATOR, + V_SEPARATOR) + 1, + instr(lista || V_SEPARATOR || V_SEPARATOR, + V_SEPARATOR, + 1, + 2) - + instr(lista || V_SEPARATOR || V_SEPARATOR, + V_SEPARATOR) - 1) as ascd, + rtrim(substr(lista || V_SEPARATOR || V_SEPARATOR, + instr(lista || V_SEPARATOR || V_SEPARATOR, + V_SEPARATOR, + 1, + 2) + 1), + V_SEPARATOR) as ascc + from (SELECT X as LISTA + FROM table(charc2collection(V_SIR_MODIFICARI_ACONT, + V_SEPARATOR_LINIE)) + + )) B + ON (A.ID_ACT = B.ID_ACT) + WHEN MATCHED THEN + UPDATE SET ASCD = B.ASCD, ASCC = B.ASCC; + + END IF; + + IF V_SIR_MODIFICARI_PART IS NOT NULL THEN + MERGE INTO ACT_TEMP A + USING (select to_number(substr(lista || V_SEPARATOR, + 1, + instr(lista, V_SEPARATOR) - 1)) as id_act, + nvl(to_number(substr(lista || V_SEPARATOR || V_SEPARATOR, + instr(lista || V_SEPARATOR || + V_SEPARATOR, + V_SEPARATOR) + 1, + instr(lista || V_SEPARATOR || + V_SEPARATOR, + V_SEPARATOR, + 1, + 2) - + instr(lista || V_SEPARATOR || + V_SEPARATOR, + V_SEPARATOR) - 1)), + 0) as id_partd, + nvl(to_number(rtrim(substr(lista || V_SEPARATOR || + V_SEPARATOR, + instr(lista || V_SEPARATOR || + V_SEPARATOR, + V_SEPARATOR, + 1, + 2) + 1), + V_SEPARATOR)), + 0) as id_partc + from (SELECT X as LISTA + FROM table(charc2collection(V_SIR_MODIFICARI_PART, + V_SEPARATOR_LINIE)))) B + ON (A.ID_ACT = B.ID_ACT) + WHEN MATCHED THEN + UPDATE SET ID_PARTD = B.ID_PARTD, ID_PARTC = B.ID_PARTC; + + END IF; + + end finalizeaza_document_compl; + + PROCEDURE cursor_verificare(V_CURSOR_VERIFICARE OUT PACK_TYPES.tip_cursor) IS + BEGIN + OPEN V_CURSOR_VERIFICARE FOR + SELECT A.ID_ACT, + A.LUNA, + A.AN, + A.DATAIREG as datairegt, + A.NRACT, + A.SERIE_ACT, + A.DATAACT as dataactt, + A.suma, + A.EXPLICATIA, + A.SCD, + A.ASCD, + A.ASCD as ascd1, + A.SCC, + A.ASCC, + A.ASCC as ascc1, + A.PERECHED, + A.PERECHEC, + A.SUMA_VAL, + A.EXPLICATIA4, + A.EXPLICATIA5, + A.CURS, + A.DATASCAD as datascadt, + A.NEIMPOZAB, + A.NNIR, + A.ID_UTIL, + UTIL2.UTILIZATOR AS UTIL, + A.DATAORA, + A.ID_UTILS, + UTIL1.UTILIZATOR AS UTILS, + A.DATAORAS, + A.ID_RESPONSABIL, + RESP.DENUMIRE AS NRESP, + A.ID_VENCHELT, + VENCHELT.EXPLICATIE AS DST_CHLT, + A.ID_LUCRARE, + LUCR.NRORD, + A.ID_CTR, + CTR.CONTRACT, + A.ID_SECTIE, + SECTII.SECTIE, + A.PROC_TVA, + A.ID_SET, + A.ID_FACT, + A.ID_FACTD, + A.ID_FACTC, + A.ID_PARTD, + A.ID_PARTD AS ID_PARTD1, + PART1.NUME AS PARTD, + A.ID_PARTC, + A.ID_PARTC AS ID_PARTC1, + PART.NUME AS PARTC, + A.ID_SUCURSALA, + S.FIRMA AS SUCURSALA, + A.ID_FDOC, + FDOC.FEL_DOCUMENT AS FDOC, + A.ID_GESTIN, + A.ID_JTVA_COLOANA, + G1.NUME_GESTIUNE AS GESTIN, + A.ID_GESTOUT, + G2.NUME_GESTIUNE AS GESTOUT, + A.ID_VALUTA, + V.NUME_VAL, + 0000000000 as id_pol, + lpad(' ', 30, ' ') as nume_lista_preturi, + A.TVA_INCASARE + FROM ACT_TEMP A + LEFT JOIN NOM_FDOC FDOC + ON A.ID_FDOC = FDOC.ID_FDOC + LEFT JOIN SYN_NOM_FIRME S + ON A.ID_SUCURSALA = S.ID_FIRMA + LEFT JOIN NOM_PARTENERI PART + ON A.ID_PARTC = PART.ID_PART + LEFT JOIN NOM_PARTENERI PART1 + ON A.ID_PARTD = PART1.ID_PART + LEFT JOIN VNOM_VENCHEL VENCHELT + ON A.ID_VENCHELT = VENCHELT.ID_VENCHELT + LEFT JOIN NOM_PARTENERI RESP + ON A.ID_RESPONSABIL = RESP.ID_PART + LEFT JOIN SYN_UTILIZATORI UTIL1 + ON A.ID_UTILS = UTIL1.ID_UTIL + LEFT JOIN SYN_UTILIZATORI UTIL2 + ON A.ID_UTIL = UTIL2.ID_UTIL + LEFT JOIN VNOM_LUCRARI LUCR + ON A.ID_LUCRARE = LUCR.ID_LUCRARE + LEFT JOIN VCONTRACTE CTR + ON A.ID_CTR = CTR.ID_CTR + LEFT JOIN NOM_GESTIUNI G1 + ON A.ID_GESTIN = G1.ID_GESTIUNE + LEFT JOIN NOM_GESTIUNI G2 + ON A.ID_GESTOUT = G2.ID_GESTIUNE + LEFT JOIN NOM_VALUTE V + ON A.ID_VALUTA = V.ID_VALUTA + LEFT JOIN NOM_SECTII SECTII + ON A.ID_SECTIE = SECTII.ID_SECTIE + WHERE A.STERS = 0; + END cursor_verificare; + ------------------------------------------------------------ + Procedure final_scriere_act_rul_local(tnIdUtil SYN_UTILIZATORI.ID_UTIL%TYPE, + tnAn ACT.AN%TYPE, + tnLuna ACT.LUNA%TYPE, + tnCod ACT.COD%TYPE, + tnScrieSterge NUMBER, + tnModificareNota NUMBER, + tcMesajRefacereNota OUT VARCHAR2) is + -- se apeleaza dupa pack_contafin.init_scriere_act_rul_local si dupa completarea act_temp din Fox + begin + pack_contafin.finalizeaza_scriere_act_rul(tnIdUtil, + tnCod, + tnScrieSterge, + tnModificareNota, + 0, -- tnScrieCumpVanz + tcMesajRefacereNota); + end final_scriere_act_rul_local; + ------------------------------------------------------------ + procedure finalizeaza_scriere_act_rul is + lcMesajRefacereNota VARCHAR2(3000); + begin + pack_contafin.finalizeaza_scriere_act_rul(pack_contafin.GET_IDUTIL(), + null, + 0, + 0, + 2, + lcMesajRefacereNota); + end finalizeaza_scriere_act_rul; + ------------------------------------------------------------ + procedure finalizeaza_scriere_act_rul(tnIdUtil SYN_UTILIZATORI.ID_UTIL%TYPE, + tnCod ACT.COD%TYPE, + tnScrieSterge NUMBER, -- 0 = scriere, 1 = refacere, 2 = stergere + tnModificareNota NUMBER, -- 0 = modificare, 1 = stergere + tnScrieCumpVanz NUMBER, -- 0 = cump + vanz, 1 = cumparari, 2 = vanzari + tcMesajRefacereNota OUT VARCHAR2) is + -- se apeleaza dupa pack_contafin.init_scriere_act_rul_local si dupa completarea act_temp din Fox + lcCorespDTva varchar2(100); + lcCorespD varchar2(100); + lcCorespCTva varchar2(100); + lcCorespC varchar2(100); + lcExceptii varchar2(2000); + lnNrInregRul number(10); + lnNrInregRulObinv number(10); + lnAn ACT.AN%type; + lnLuna ACT.LUNA%type; + + lcSetNuScrie optiuni.varvalue%type; + lnIdSet act.id_set%type; + lcSituatiiNuScrie optiuni.varvalue%type; + lnScrieBV number(1) := 1; + lnScrieBP number(1) := 1; + lnScrieIP number(1) := 1; + lnScrieTVA number(1) := 1; + lnScrieSTOC number(1) := 1; + begin + lnAn := pack_sesiune.getan(); + lnLuna := pack_sesiune.getluna(); + + -- LISTA DE SETURI PENTRU CARE NU SE APELEAZA SCRIEREA balanta, balanta parteneri, inregistrari parteneri, tva, stoc + -- Bonurile fiscale de la chioscuri + -- Se refac situatiile doar prin refaceri/redeschidere de luna + lcSetNuScrie := PACK_SESIUNE.getOptiuneFirma('SETURI_SITUATII_NU_SCRIE'); -- '25052|BV,BP,IP,TVA;' + select max(id_set) into lnIdSet from act_temp; + IF lcSetNuScrie IS NOT NULL and lnIdSet is not null THEN + SELECT MAX(UPPER(SITUATII)) + into lcSituatiiNuScrie + FROM (SELECT GETWORDNUM(SET_SITUATII, 1, '|') AS ID_SET, + GETWORDNUM(SET_SITUATII, 2, '|') AS SITUATII + FROM (SELECT getwordnum(lcSetNuScrie, B.RAND, ';') AS SET_SITUATII + FROM DUAL A, + (SELECT ROWNUM AS RAND + FROM USER_OBJECTS + WHERE ROWNUM < 100) B) + WHERE SET_SITUATII IS NOT NULL) + WHERE ID_SET = to_char(lnIdSet); + if lcSituatiiNuScrie LIKE '%BV%' then + lnScrieBV := 0; + end if; + if lcSituatiiNuScrie LIKE '%BP%' then + lnScrieBP := 0; + end if; + if lcSituatiiNuScrie LIKE '%IP%' then + lnScrieIP := 0; + end if; + if lcSituatiiNuScrie LIKE '%TVA%' then + lnScrieTVA := 0; + end if; + if lcSituatiiNuScrie LIKE '%STOC%' then + lnScrieSTOC := 0; + end if; + END IF; + + if tnScrieSterge <> 2 then + pack_contafin.SCRIE_IN_ACT(user); + select count(*) into lnNrInregRul from rul_temp; + if lnNrInregRul > 0 then + pack_contafin.SCRIE_IN_RUL(user); + end if; + + select count(*) into lnNrInregRulObinv from rul_temp_obinv; + if lnNrInregRulObinv > 0 then + pack_contafin.SCRIE_IN_RUL_OBINV(user); + end if; + else + pack_contafin.STERGE_DIN_ACT(user, + lnAn, + lnLuna, + tnCod, + tnIdUtil, + tnModificareNota); + select count(*) into lnNrInregRul from rul where cod = tnCod; + if lnNrInregRul > 0 then + pack_contafin.STERGE_DIN_RUL(user, lnAn, lnLuna, tnCod, tnIdUtil); + end if; + + select count(*) + into lnNrInregRulObinv + from rul_obinv + where cod = tnCod; + if lnNrInregRulObinv > 0 then + pack_contafin.STERGE_DIN_RUL_OBINV(user, + lnAn, + lnLuna, + tnCod, + tnIdUtil); + end if; + end if; + + if lnScrieBV = 1 then + pack_contafin.scrie_in_balanta(user, lnAn, lnLuna, tnScrieSterge); + end if; + if lnScrieBP = 1 then + pack_contafin.scrie_in_balanta_parteneri(user, + lnAn, + lnLuna, + NULL, + tnScrieSterge); + end if; + if lnScrieIP = 1 then + pack_contafin.executa_scrie_in_ireg(user, + lnAn, + lnLuna, + Null, + tnScrieSterge, + 0); + end if; + + if tnScrieCumpVanz <> 2 and lnScrieTVA = 1 then + If lnAn >= 2007 then + pack_contafin.SCRIE_JC_2007(lnAn, lnLuna, tnScrieSterge); + -- tnScrieSterge ar trebui sa aiba valoarea 0 sau 2 + Else + lcCorespDTva := '401,404,5121,5124,542,4427,4428'; + lcCorespD := '401,404,5121,5124,542,4427'; + lcCorespCTva := '0'; + lcCorespC := '0'; + select stringagg(cont_c) + INTO lcExceptii + from (select distinct cont_c + from exceptii_ireg + where cont in + (SELECT X as CONT + FROM table(charc2collection(lcCorespD, ','))) + and invers = 1 + union all + select '-1' + from dual); + pack_contafin.EXECUTA_SCRIE_TVA(user, + 'cump', + pack_contafin.getCotaTVAStandard(lnLuna, + lnAn), + CASE WHEN + lnAn * 12 + lnLuna >= 2025 * 12 + 8 THEN 1.11 ELSE 1.09 END, + lcCorespDtva, + lcCorespD, + lcCorespCtva, + lcCorespC, + '4426', + lcExceptii, + lnAn, + lnLuna, + tnScrieSterge); + End if; + end if; + + if tnScrieCumpVanz <> 1 and lnScrieTVA = 1 then + If lnAn >= 2007 then + pack_contafin.SCRIE_JV_2007(lnAn, lnLuna, tnScrieSterge); + -- tnScrieSterge ar trebui sa aiba valoarea 0 sau 2 + Else + lcCorespDTva := '411,4111,4112,4113,4114,4115,4116,4117,4428,4118'; + lcCorespD := '411,4111,4112,4113,4114,4115,4116,4117,4428,4118'; + lcCorespCTva := '411,4111,4112,4113,4114,4115,4116,4117,461,428,4281,4282,4426,4428'; + lcCorespC := '411,4111,4112,4113,4114,4115,4116,4117,461,428,4281,4282,4426,5121,5311'; + select stringagg(cont_c) + INTO lcExceptii + from (select distinct cont_c + from exceptii_ireg + where cont in + (SELECT X as CONT + FROM table(charc2collection(lcCorespC, ','))) + and invers = 1 + union all + select '419' as cont_c + from dual); + pack_contafin.EXECUTA_SCRIE_TVA(user, + 'vanz', + pack_contafin.getCotaTVAStandard(lnLuna, + lnAn), + CASE WHEN + lnAn * 12 + lnLuna >= 2025 * 12 + 8 THEN 1.11 ELSE 1.09 END, + lcCorespDtva, + lcCorespD, + lcCorespCtva, + lcCorespC, + '4427', + lcExceptii, + lnAn, + lnLuna, + tnScrieSterge); + End if; + End if; + + if lnNrInregRul > 0 and lnScrieSTOC = 1 then + pack_contafin.scrie_in_stoc(user, + lnAn, + lnLuna, + 0, + 'STOC', + 'ID_STOC', + '2=2'); + end if; + if lnNrInregRulObinv > 0 and lnScrieSTOC = 1 then + pack_contafin.scrie_in_stoc_obinv(user, + lnAn, + lnLuna, + 0, + 'STOC_OBINV', + 'ID_STOC', + '2=2'); + end if; + pack_refacere_nota.refacere_nota(lnAn, lnLuna, tcMesajRefacereNota); + end finalizeaza_scriere_act_rul; + ----------------------------------------------- + PROCEDURE finalizeaza_modificare_nota(tnLuna IN NUMBER, + tnAn IN NUMBER, + tdDataOra IN DATE, + tnIdSet IN NUMBER, + tnCod IN NUMBER, + tnIdFact IN NUMBER, + tnIdFactD IN NUMBER, + tnIdUtil IN NUMBER) IS + lnEInVanzari NUMBER(10); + lnCodNou NUMBER(10); + BEGIN + lnCodNou := pack_contafin.get_cod(); + SELECT COUNT(*) INTO lnEInVanzari FROM vanzari WHERE cod = tnCod; + + IF lnEInVanzari > 0 THEN + pack_facturare.actualizeaza_vanzari(tnCod, lnCodNou); + END IF; + + UPDATE atasamente_vanzari SET cod = lnCodNou WHERE cod = tnCod; + + CASE + WHEN tnIdSet = 90101 THEN + UPDATE gest_inventar + SET dataora_validat = pack_contafin.GET_DATAORA(), + validat = decode(validat, 0, 1, validat) -- pentru cazul in care se repuneau inregistrarile sterse + WHERE dataora_validat = tdDataOra + AND an = tnAn + AND luna = tnLuna; + WHEN tnIdSet IN (31003, 31004, 31005, 31011) THEN + -- daca se modifica o inregistrare stearsa, atunci trebuie sa repun si id_fact in nom_lucrari + UPDATE NOM_LUCRARI + SET ID_FACT = tnIdFact + WHERE ID_LUCRARE IN (SELECT DISTINCT ID_LUCRARE + FROM ACT + WHERE COD = lnCodNou + AND AN = tnAn + AND LUNA = tnLuna) + AND ID_FACT IS NULL; + /* WHEN tnIdSet = 90011 THEN + -- 426-5311 achitare drepturi neridicate lichidare + UPDATE sal_stat + SET achitlicnerid = 0 + WHERE id_fact_lic = tnIdFactD; + WHEN tnIdSet = 90013 THEN + -- 426-5311 achitare drepturi neridicate avans + UPDATE sal_stat SET achitavnerid = 0 WHERE id_fact_av = tnIdFactD;*/ + ELSE + lnEInVanzari := 0; + END CASE; + + END finalizeaza_modificare_nota; + ----------------------------------------------- + PROCEDURE finalizeaza_stergere_nota(tnLuna IN NUMBER, + tnAn IN NUMBER, + tdDataOra IN DATE, + tnIdSet IN NUMBER, + tnCod IN NUMBER, + tnIdFact IN NUMBER, + tnIdFactD IN NUMBER, + tnIdUtil IN NUMBER) IS + lnEInVanzari NUMBER(10); + BEGIN + SELECT COUNT(*) INTO lnEInVanzari FROM vanzari WHERE cod = tnCod; + + IF lnEInVanzari > 0 THEN + pack_facturare.sterge_din_vanzari(tnCod, tnAn, tnLuna, tnIdUtil); + END IF; + + UPDATE atasamente_vanzari + SET sters = 1, id_utils = tnIdUtil, dataoras = sysdate + WHERE cod = tnCod; + + CASE + WHEN tnIdSet = 90101 THEN + UPDATE gest_inventar + SET validat = 0 + WHERE dataora_validat = tdDataOra + AND an = tnAn + AND luna = tnLuna; + WHEN tnIdSet = 90010 THEN + -- 421-426 drepturi neridicate lichidare + UPDATE sal_stat + SET bifalicnerid = 0, sumalicnerid = 0, id_fact_lic = 0 + WHERE id_fact_lic = tnIdFact; + WHEN tnIdSet = 90011 THEN + -- 426-5311 achitare drepturi neridicate lichidare + UPDATE sal_stat + SET achitlicnerid = 0 + WHERE id_fact_lic = tnIdFactD; + WHEN tnIdSet = 90012 THEN + -- 425-426 drepturi neridicate avans + UPDATE sal_stat + SET bifaavnerid = 0, sumaavnerid = 0, id_fact_av = 0 + WHERE id_fact_av = tnIdFact; + WHEN tnIdSet = 90013 THEN + -- 426-5311 achitare drepturi neridicate avans + UPDATE sal_stat SET achitavnerid = 0 WHERE id_fact_av = tnIdFactD; + WHEN tnIdSet IN (31003, 31004, 31005, 31011) THEN + UPDATE nom_lucrari SET id_fact = Null WHERE id_fact = tnIdFact; + WHEN tnIdSet IN (32000, 32003, 32011, 32013) THEN + -- ROADEVIZE : raport de productie, inchidere comenzi regie/garantie, factura finala 1, factura finala 2 + UPDATE dev_oper + SET sters = 1, id_utils = tnIdUtil, dataoras = sysdate + WHERE id_fact = tnIdFact; + ELSE + lnEInVanzari := 0; + END CASE; + + END finalizeaza_stergere_nota; + ----------------------------------------------- + PROCEDURE completeaza_analitice IS + cursor crs is + select a.cont, + a.tabel_prefix, + a.col_prefix, + a.tabel_sufix, + a.col_sufix, + a.camp_leg_prefix, + a.camp_leg_sufix, + a.poz_start_prefix, + a.nr_return_prefix, + a.poz_start_sufix, + a.nr_return_sufix, + b.tip + from config_analitice a + join (select distinct scd as cont, 1 as tip + from act_temp + where ascd is null + union + select distinct scc as cont, 2 as tip + from act_temp + where ascc is null) b + on a.cont = b.cont; + crs_linie crs%rowtype; + lcMerge VARCHAR2(10000); + lcAnalitic VARCHAR2(1000); + lcColoanaP VARCHAR2(100); + lcColoanaS VARCHAR2(100); + lcTipCont VARCHAR(4); + lcTipAcont VARCHAR(4); + lcNumeColoanaP VARCHAR2(1000); + lcNumeColoanaS VARCHAR2(1000); + BEGIN + open crs; + loop + fetch crs + into crs_linie; + exit when crs%NOTFOUND; + if crs_linie.tip = 1 then + lcTipCont := 'SCD'; + lcTipAcont := 'ASCD'; + else + lcTipCont := 'SCC'; + lcTipAcont := 'ASCC'; + end if; + lcAnalitic := ''; + lcColoanaP := ''; + lcColoanaS := ''; + if crs_linie.tabel_prefix is not null then + lcColoanaP := 'A.' || crs_linie.camp_leg_prefix; + lcNumeColoanaP := crs_linie.camp_leg_prefix; + if UPPER(TRIM(crs_linie.camp_leg_prefix)) = 'ID_GESTIUNE' then + if crs_linie.tip = 1 then + lcNumeColoanaP := 'ID_GESTIN'; + else + lcNumeColoanaP := 'ID_GESTOUT'; + end if; + lcColoanaP := lcColoanaP || ' AS ' || lcNumeColoanaP; + end if; + lcAnalitic := 'substr(a.' || crs_linie.col_prefix || ',' || + crs_linie.poz_start_prefix || ',' || + crs_linie.nr_return_prefix || ')'; + end if; + if crs_linie.tabel_sufix is not null then + lcColoanaS := 'B.' || crs_linie.camp_leg_sufix; + lcNumeColoanaS := crs_linie.camp_leg_sufix; + if UPPER(TRIM(crs_linie.camp_leg_sufix)) = 'ID_GESTIUNE' then + if crs_linie.tip = 1 then + lcNumeColoanaS := 'ID_GESTIN'; + else + lcNumeColoanaS := 'ID_GESTOUT'; + end if; + lcColoanaS := lcColoanaS || ' AS ' || lcNumeColoanaS; + end if; + lcAnalitic := lcAnalitic || '||substr(b.' || crs_linie.col_sufix || ',' || + crs_linie.poz_start_sufix || ',' || + crs_linie.nr_return_sufix || ')'; + end if; + lcMerge := 'MERGE INTO ACT_TEMP A1 USING (SELECT ''' || crs_linie.cont || + ''' AS ' || lcTipCont || ',' || lcAnalitic || ' AS ' || + lcTipAcont || ',' || lcColoanaP || (CASE + WHEN lcColoanaS IS NULL THEN + '' + ELSE + ',' || lcColoanaS + END) || ' FROM ' || crs_linie.tabel_prefix || ' A ' || (CASE + WHEN lcColoanaS IS NULL THEN + '' + ELSE + 'LEFT JOIN ' || crs_linie.tabel_sufix || + ' B ON 1=1 AND A.STERS = 0 AND B.STERS = 0 ' + END) || 'WHERE A.STERS = 0) A2 ' || 'ON (A1.' || lcTipCont || + '=A2.' || lcTipCont || ' AND A1.' || (CASE + WHEN UPPER(lcNumeColoanaP) = 'CONT' THEN + lcTipCont + ELSE + lcNumeColoanaP + END) || '=A2.' || lcNumeColoanaP || ' ' || (CASE + WHEN lcColoanaS IS NULL THEN + '' + ELSE + 'AND A1.' || (CASE + WHEN UPPER(lcNumeColoanaS) = 'CONT' THEN + lcTipCont + ELSE + lcNumeColoanaS + END) || '=A2.' || lcNumeColoanaS + END) || ') ' || 'WHEN MATCHED THEN UPDATE SET A1.' || + lcTipAcont || '=NVL(A1.' || lcTipAcont || ',A2.' || lcTipAcont || ')'; + + /* begin*/ + -- PINFO(lcMerge,'COMPLETEAZA_ANALITICE'); + EXECUTE IMMEDIATE lcMerge; + /* exception + when others then + raise_application_error(-20000, lcMerge); + end;*/ + -- La vanzarea de marfuri la pret de vanzare 4428 = 371 are completata ID_GESTOUT + -- functioneaza pentru contul 371 pe credit, dar nu pentru contul 4428 pe debit + -- mai repet o data completarea analiticelor si cu ID_GESTIN/ID_GESTOUT pentru analiticele ramase necompletate + if UPPER(TRIM(crs_linie.camp_leg_prefix)) = 'ID_GESTIUNE' then + if lcNumeColoanaP = 'ID_GESTIN' THEN + lcMerge := replace(lcMerge, 'ID_GESTIN', 'ID_GESTOUT'); + else + lcMerge := replace(lcMerge, 'ID_GESTOUT', 'ID_GESTIN'); + end if; + + EXECUTE IMMEDIATE lcMerge; + end if; + end loop; + close crs; + -- verificarea daca exista analitic in planul de conturi se face in sterge_analitice_gresite + END completeaza_analitice; + ----------------------------------------------------------------------- + PROCEDURE completeaza_analitice_rul IS + cursor crs is + select a.cont, + a.tabel_prefix, + a.col_prefix, + a.tabel_sufix, + a.col_sufix, + a.camp_leg_prefix, + a.camp_leg_sufix, + a.poz_start_prefix, + a.nr_return_prefix, + a.poz_start_sufix, + a.nr_return_sufix + from config_analitice a + where a.cont in + (select distinct cont from rul_temp where acont is null); + crs_linie crs%rowtype; + lcMerge VARCHAR2(10000); + lcAnalitic VARCHAR2(1000); + lcColoanaP VARCHAR2(100); + lcColoanaS VARCHAR2(100); + lcNumeColoanaP VARCHAR2(1000); + lcNumeColoanaS VARCHAR2(1000); + BEGIN + open crs; + loop + fetch crs + into crs_linie; + exit when crs%NOTFOUND; + lcAnalitic := ''; + lcColoanaP := ''; + lcColoanaS := ''; + if crs_linie.tabel_prefix is not null then + lcColoanaP := 'A.' || crs_linie.camp_leg_prefix; + lcNumeColoanaP := crs_linie.camp_leg_prefix; + lcAnalitic := 'substr(a.' || crs_linie.col_prefix || ',' || + crs_linie.poz_start_prefix || ',' || + crs_linie.nr_return_prefix || ')'; + end if; + if crs_linie.tabel_sufix is not null then + lcColoanaS := 'B.' || crs_linie.camp_leg_sufix; + lcNumeColoanaS := crs_linie.camp_leg_prefix; + lcAnalitic := lcAnalitic || '||substr(b.' || + crs_linie.col_sufix || ',' || + crs_linie.poz_start_sufix || ',' || + crs_linie.nr_return_sufix || ')'; + end if; + + lcMerge := 'MERGE INTO RUL_TEMP A1 USING (SELECT ''' || crs_linie.cont || + ''' AS CONT,' || lcAnalitic || ' AS ACONT,' || lcColoanaP || + (CASE + WHEN lcColoanaS IS NULL THEN + '' + ELSE + ',' || lcColoanaS + END) || ' FROM ' || crs_linie.tabel_prefix || ' A ' || (CASE + WHEN lcColoanaS IS NULL THEN + '' + ELSE + 'LEFT JOIN ' || crs_linie.tabel_sufix || + ' B ON 1=1 AND A.STERS = 0 AND B.STERS = 0 ' + END) || 'WHERE A.STERS = 0) A2 ' || + 'ON (A1.CONT=A2.CONT AND A1.' || lcNumeColoanaP || '=A2.' || + lcNumeColoanaP || ' ' || (CASE + WHEN lcColoanaS IS NULL THEN + '' + ELSE + 'AND A1.' || lcNumeColoanaS || '=A2.' || lcNumeColoanaS + END) || ') ' || + 'WHEN MATCHED THEN UPDATE SET A1.ACONT=NVL(A1.ACONT,A2.ACONT)'; + + /* begin*/ + EXECUTE IMMEDIATE lcMerge; + /* exception + when others then + raise_application_error(-20000, lcMerge); + end;*/ + + end loop; + close crs; + -- verificarea daca exista analitic in planul de conturi se face in sterge_analitice_gresite_rul + END completeaza_analitice_rul; + ----------------------------------------------------------------------- + PROCEDURE completeaza_parteneri_gestiuni IS + BEGIN + MERGE INTO ACT_TEMP A + USING (SELECT ID_PART, ID_GESTIUNE, CONT + FROM ASOCIERE_PARTENERI_GESTIUNI + WHERE ID_GESTIUNE IN (SELECT DISTINCT ID_GESTIN FROM ACT_TEMP) + AND CONT IN (SELECT CONT FROM config_cont_ireg)) B + ON (B.ID_GESTIUNE = A.ID_GESTIN AND B.CONT = A.SCD) + WHEN MATCHED THEN + UPDATE + SET ID_PARTD = DECODE(NVL(A.ID_PARTD, 0), 0, B.ID_PART, A.ID_PARTD); + + MERGE INTO ACT_TEMP A + USING (SELECT ID_PART, ID_GESTIUNE, CONT + FROM ASOCIERE_PARTENERI_GESTIUNI + WHERE ID_GESTIUNE IN (SELECT DISTINCT ID_GESTOUT FROM ACT_TEMP) + -- = pack_facturare.nid_gestiune_sursa + AND CONT IN (SELECT CONT FROM config_cont_ireg)) B + ON (B.ID_GESTIUNE = A.ID_GESTOUT AND B.CONT = A.SCC) + WHEN MATCHED THEN + UPDATE + SET ID_PARTC = DECODE(NVL(A.ID_PARTC, 0), 0, B.ID_PART, A.ID_PARTC); + END completeaza_parteneri_gestiuni; + ----------------------------------------------------------------------- + PROCEDURE sterge_analitice_gresite IS + BEGIN + MERGE INTO ACT_TEMP A + USING (SELECT ID_ACT, SUM(TIP) AS TIP + FROM (SELECT ID_ACT, 1 AS TIP + FROM ACT_TEMP + WHERE ASCD IS NOT NULL + AND TRIM(SCD) || '.' || TRIM(ASCD) NOT IN + (SELECT TRIM(CONT) || '.' || TRIM(ACONT) + FROM VPLCONT_ANALITIC + WHERE AN = pack_sesiune.getan()) + UNION ALL + SELECT ID_ACT, 2 AS TIP + FROM ACT_TEMP + WHERE ASCC IS NOT NULL + AND TRIM(SCC) || '.' || TRIM(ASCC) NOT IN + (SELECT TRIM(CONT) || '.' || TRIM(ACONT) + FROM VPLCONT_ANALITIC + WHERE AN = pack_sesiune.getan())) + GROUP BY ID_ACT) B + ON (A.ID_ACT = B.ID_ACT) + WHEN MATCHED THEN + UPDATE + SET ASCD = DECODE(B.TIP, 1, NULL, 3, NULL, A.ASCD), + ASCC = DECODE(B.TIP, 2, NULL, 3, NULL, A.ASCC); + + END sterge_analitice_gresite; + ----------------------------------------------------------------------- + PROCEDURE sterge_analitice_gresite_rul IS + BEGIN + UPDATE RUL_TEMP + SET ACONT = NULL + WHERE ACONT IS NOT NULL + AND TRIM(CONT) || '.' || TRIM(ACONT) NOT IN + (SELECT TRIM(CONT) || '.' || TRIM(ACONT) + FROM VPLCONT_ANALITIC + WHERE AN = pack_sesiune.getan()); + + END sterge_analitice_gresite_rul; + ----------------------------------------------------------------------- + FUNCTION verifica_id_documente(lcSirIdFact IN VARCHAR2) RETURN VARCHAR2 IS + lcSeparator VARCHAR2(1) := ','; + lcMesaj VARCHAR2(2000); + BEGIN + select stringagg(serie_act || ' ' || nract || '/' || + to_char(dataact, 'DD.MM.YYYY')) as mesaj + into lcMesaj + from documente + where sters = 1 + and id_doc in + (SELECT X as id_doc + FROM table(charn2collection(lcSirIdFact, lcSeparator))); + Return lcMesaj; + END; + + --------------------------------------------------------------------- + -- caut o inregistrare cu id_furnizor in rul_auxiliar si o intorc - pentru reciclarea inregistrarilor din rul_auxiliar + -- daca nu gasesc inregistrare, adaug una noua + --------------------------------------------------------------------- + function GetRulajAuxiliarFurnizor(tnIdFurnizor rul_auxiliar.id_furnizor%type) + return rul_auxiliar.id_rul_aux%type is + tnIdRulAux rul_auxiliar.id_rul_aux%type; + begin + select min(id_rul_aux) + into tnIdRulAux + from rul_auxiliar + where id_furnizor = tnIdFurnizor; + if tnIdRulAux is null then + insert into rul_auxiliar + (id_furnizor) + values + (tnIdFurnizor) + returning id_rul_aux into tnIdRulAux; + end if; + return tnIdRulAux; + + end GetRulajAuxiliarFurnizor; + + procedure GetRulajAuxiliarFurnizor(tnIdFurnizor IN rul_auxiliar.id_furnizor%type, + tnIdRulAux OUT rul_auxiliar.id_rul_aux%type) is + begin + tnIdRulAux := GetRulajAuxiliarFurnizor(tnIdFurnizor); + end; +BEGIN + nCod := 0; + dDataOra := SYSDATE; + nIdFact := 0; + nIdUtil := 0; +end PACK_CONTAFIN; +/ diff --git a/docs/PACK_FACTURARE.pck b/docs/PACK_FACTURARE.pck new file mode 100644 index 0000000..7b2a9dd --- /dev/null +++ b/docs/PACK_FACTURARE.pck @@ -0,0 +1,16928 @@ +CREATE OR REPLACE PACKAGE "PACK_FACTURARE" is + + -- Author : MARIUS.ATANASIU + -- Created : 05/09/2005 09:25:00 AM + -- Purpose : + + -- 30.10.2009 + -- marius.mutu + -- nTipVanzareRetail in contabilizeaza_articol, scrie_tva + -- nTipIncasare: scrie_incsare2 + -- descarca_gestiune - tva adaos + + cnume_program VARCHAR(30) := 'ROAFACTURARE'; + + TYPE cursor_facturare IS REF CURSOR; + TYPE tip_date_gestiune IS RECORD( + id_gestiune NOM_GESTIUNI.ID_GESTIUNE%TYPE, + id_tip_gest TIPURI_GESTIUNI.ID_TIPGEST%TYPE, + cont NOM_GESTIUNI.CONT%TYPE, + acont NOM_GESTIUNI.ACONT%TYPE); + + TYPE linie_stoc IS RECORD( + TIP NUMBER(1), + pret RUL.PRET%TYPE, + pretv RUL.PRETV%TYPE, + acont RUL.ACONT%TYPE, + cants STOC.CANTS%TYPE, + cant RUL.CANT%TYPE, + cante RUL.CANTE%TYPE, + tvav RUL.TVAV%TYPE, + proc_tvav RUL.PROC_TVAV%TYPE, + tva RUL.TVA%TYPE, + datain RUL.DATAIN%TYPE, + id_rul_aux RUL.ID_RUL_AUX%TYPE, + pretd RUL.PRETD%TYPE, + id_valuta RUL.ID_VALUTA%TYPE, + LOT RUL.LOT%TYPE, + ADATA_EXPIRARE RUL.ADATA_EXPIRARE%TYPE, + serie RUL.SERIE%TYPE, + ID_LUCRARE_REZ RUL.ID_LUCRARE_REZ%TYPE, + ID_PART_REZ RUL.ID_PART_REZ%TYPE, + PRETACHCTVA NOM_ARTICOLE.PRETACHCTVA%TYPE); + TYPE tab_stoc_type IS TABLE OF linie_stoc; + + TYPE articol_aviz IS RECORD( + ID_VANZARE VANZARI_DETALII.ID_VANZARE%TYPE, + ID_VANZARE_DET VANZARI_DETALII.ID_VANZARE_DET%TYPE, + CANTITATE VANZARI_DETALII.CANTITATE%TYPE, + CUSTODIE VANZARI_DETALII.CUSTODIE%TYPE, + COD ACT.COD%TYPE, + ID_FACT ACT.ID_FACT%TYPE, + NRACT ACT.NRACT%TYPE, + SERIE_ACT ACT.SERIE_ACT%TYPE, + DATAACT ACT.DATAACT%TYPE, + ASCD ACT.ASCD%TYPE, + ID_SECTIE ACT.ID_SECTIE%TYPE); + TYPE tab_articole_aviz_type IS TABLE OF articol_aviz; + + nid_tipnir SERII_TIPDOC.ID_TIPDOC%TYPE := 1; + nid_tipbon SERII_TIPDOC.ID_TIPDOC%TYPE := 2; + nid_tipfactura SERII_TIPDOC.ID_TIPDOC%TYPE := 5; + nid_tipaviz SERII_TIPDOC.ID_TIPDOC%TYPE := 6; + + -- 30.10.2009 + nTipVanzareRetail VANZARI.TIP%TYPE := 43; + -- 30.10.2009 ^ + -- 26.08.2009 + nTipFacturaHotel VANZARI.TIP%TYPE := 44; + nTipFacturaRestaurant VANZARI.TIP%TYPE := 45; + -- 26.08.2009 ^ + nTipNotaPlata VANZARI.TIP%TYPE := 46; + + nTipFacturaACN VANZARI.TIP%TYPE := 51; + + /*** Valori pentru (lnIdSet,tnTip) + ** Facturare + ** (25000,1) - pe baza de lista de preturi ( 25010 - daca e cu scadere din gestiune ) + ** (25001,2) - pe baza de contracte ( 25011 - daca e cu scadere din gestiune ) + ** (25002,3) - pe baza de comenzi ( 25012 - daca e cu scadere din gestiune ) + ** (25003,4) - pe baza de avize ( 25013 - daca e cu scadere din gestiune ) + ** (25004,5) - pe baza de lista de preturi in valuta ( 25014 - daca e cu scadere din gestiune ) + ** (25005,6) - pe baza de contract in valuta ( 25015 - daca e cu scadere din gestiune ) + ** (25006,7) - credit note + ** (25007,8) - retur factura in lei ( 25017 ) + ** (25008,9) - retur factura in valuta ( 25018 ) + ** (25009,10) - factura fiscala in valuta ( 25019 ) + ** (25042,43) - bon fiscal ROARETAIL ( 25052 - daca e cu scadere din gestiune ) + ** (25043,44) - factura hotel + ** (25044,45) - factura restaurant ( 25054 ) + ** (25045,46) - nota de plata restaurant ( 25055 ) + ** (25047,48) - factura marfa custodie cu desc. k ( 25057 ) + ** (25048,49) - factura marfa custodie fara desc. k ( 25058 ) + ** (25051,52) - pe baza de contract factura fiscala in valuta ( 25061 - daca e cu scadere din gestiune ) + + ** Avize de expeditie + ** (25020,21) - catre clienti din comanda ( 25030 - daca e cu scadere din gestiune ) + ** (25021,22) - catre clienti din lista ( 25031 - daca e cu scadere din gestiune ) + ** (25022,23) - transfer catre subunitati din lista ( 25032 - daca e cu scadere din gestiune ) + ** (25023,24) - aviz de retur ( 25033 - daca e cu scadere din gestiune ) + ** (25024,25) - transfer catre subunitati din comanda ( 25034 - daca e cu scadere din gestiune ) + ** (25025,26) - catre clienti din contract ( 25035 - daca e cu scadere din gestiune ) + ** (25026,27) - transfer catre subunitati pe baza de lucrare( 25036 - daca e cu scadere din gestiune ) + ** (25027,28) - catre clienti debitori din comanda ( 25037 - daca e cu scadere din gestiune ) + ** (25028,29) - catre clienti debitori din lista ( 25038 - daca e cu scadere din gestiune ) + ** (25029,30) - transfer catre subunitati pe baza de NIR ( 25039 - daca e cu scadere din gestiune ) + ** (25040,41) - retur transfer catre subunitati lista pret ( 25050 - daca e cu scadere din gestiune ) + ** (25041,42) - catre clienti custodie pe baza de comanda ( 25051 - daca e cu scadere din gestiune ) + ** (25046,47) - catre clienti custodie pe baza de comanda ptr. descarcare cu K ( 25056 - daca e cu scadere din gestiune ) + ** (25049,50) - in lucru retur de la clienti custodie ( 25059 - daca e cu scadere din gestiune ) + + ** ROAGEST + ** (236/240/241/242,-6) - retur de la gestiune valorica + ** + ** ROARETAIL + ** (25042,43) - bonuri fiscale colectate de la magazine ( 25052 - daca e cu scadere din gestiune ) + + ** ROAACNPRO + ** (50100,51) - factura ROAACNPRO ( 25060 - daca e cu scadere din gestiune ) + */ + + -------------------------------------- + nTipIncasareBonFiscal NUMBER := 2; + nTipIncasareCardBancar NUMBER := 3; + nTipIncasareTichete NUMBER := 5; + nTipIncasareChitanta NUMBER := 11; + ------------------------------------ + nSaftPaymentCodeNumerar varchar2(9) := '10'; + nSaftPaymentCodeCard varchar2(9) := '48'; + ------------------------------------ + nid_act ACT.ID_ACT%TYPE; + nid_serie SERII.ID_SERIE%TYPE; + cserie_act SERII.SERIE%TYPE; + v_date_gestiune tip_date_gestiune; + ddata_curs DATE; + ddata_ireg ACT.DATAIREG%TYPE; + nid_fdoc ACT.ID_FDOC%TYPE; + ddata_act ACT.DATAACT%TYPE; + ddata_scadenta ACT.DATASCAD%TYPE; + nnumar_act ACT.NRACT%TYPE; + nid_part ACT.ID_PARTD%TYPE; + nid_part_rez ACT.ID_PARTD%TYPE; + nid_lucrare NOM_LUCRARI.ID_LUCRARE%TYPE; + nid_sectie_stoc NOM_SECTII.ID_SECTIE%TYPE; -- id_sectie pentru politica de preturi cu facturare din stoc + nid_gestiune_sursa NOM_GESTIUNI.ID_GESTIUNE%TYPE; + nid_responsabil ACT.ID_RESPONSABIL%TYPE; + cexplicatia4 ACT.EXPLICATIA4%TYPE; + nid_ordl DEV_ORDL.ID_ORDL%TYPE; + nid_set ACT.ID_SET%TYPE; + nid_util SYN_UTILIZATORI.ID_UTIL%TYPE; + nproc_tva_max ACT.PROC_TVA%TYPE; + cdescriere ACT.EXPLICATIA%TYPE; + ntip NUMBER(2); + nid_moneda_nationala NOM_VALUTE.ID_VALUTA%TYPE; + nid_fact ACT.ID_FACT%TYPE; + nid_factc ACT.ID_FACTC%TYPE; + nperechec ACT.PERECHEC%TYPE; + nid_partc ACT.ID_PARTC%TYPE; + nid_jtva_coloana ACT.ID_JTVA_COLOANA%TYPE; + nTaxCode ACT.TAXCODE%TYPE; + ntva_incasare NUMBER(1); + nid_comanda COMENZI.ID_COMANDA%TYPE; + nin_valuta VANZARI.IN_VALUTA%TYPE; + nid_valuta NOM_VALUTE.ID_VALUTA%TYPE; + nid_politica_stoc CRM_POLITICI_PRETURI.ID_POL%TYPE; + nid_sucursala SYN_NOM_FIRME.ID_FIRMA%TYPE; + nid_venchelt NOM_VENIT_CHELTUIELI.ID_VENCHELT%TYPE; + ntotftva ACT.SUMA%TYPE; + ntottva ACT.SUMA%TYPE; + ndifftva VANZARI.DIFTOTFTVA%TYPE; + ndiftva VANZARI.DIFTOTTVA%TYPE; + nfactavizcust NUMBER(1); + nafisare_scadenta VANZARI.AFISARE_SCADENTA%TYPE; + ncoeficient_k VANZARI.COEFICIENT_K%TYPE; + cserie_act_incasare SERII.SERIE%TYPE; + nnumar_act_incasare ACT.NRACT%TYPE; + ntip_doc_incasare NUMBER(2); -- 2 (BON FISCAL) sau 11 (CHITANTA) pentru SCRIE_IN_VANZARI + nsuma_incasare ACT.SUMA%TYPE; -- SUMA pentru SCRIE_IN_VANZARI + -- in rate sau articole + clistaid VARCHAR2(3000); + clistaid_avize VARCHAR2(3000); -- folosit pentru facturare din avize + nid_vanzare VANZARI.ID_VANZARE%TYPE; + ccod_retur VARCHAR2(3000); + + clista_cursuri VARCHAR2(1000); + + nluna ACT.LUNA%TYPE; + nan ACT.AN%TYPE; + nzecimale_procent NUMBER(2); + nscadere_stoc NUMBER(1) := 0; + ndiscount_evidentiat NUMBER(1) := 0; + cascc ACT.ASCC%TYPE; + cascd ACT.ASCD%TYPE; + + nnumar_bon ACT.NNIR%TYPE := 0; + nanalitice_378 NUMBER(1) := 0; + + ntip_factura VANZARI.TIP_FACTURA%TYPE; + nid_beneficiar VANZARI.ID_BENEFICIAR%TYPE; + ntip_saft VANZARI.TIP_SAFT%TYPE; -- EFACTURA 380/381/751 + + PROCEDURE verificare_setari_program(V_ID_UTIL IN NUMBER, + V_MESAJ OUT VARCHAR2); + + PROCEDURE initializeaza_facturare(V_ID_UTIL IN NUMBER); + + PROCEDURE initializeaza_seturi_temp; + + PROCEDURE initializeaza_date_factura(V_DATA_IREG IN DATE, + V_ID_FDOC IN NUMBER, + V_DATA_ACT IN DATE, + V_DATA_SCADENTA IN DATE, + V_SERIE_FACTURA IN VARCHAR2, + V_NUMAR_ACT IN NUMBER, + V_ID_CLIENT IN NUMBER, + V_ID_LUCRARE IN NUMBER, + V_ID_SECTIE IN NUMBER, + V_ID_VENCHELT IN NUMBER, + V_ID_RESPONSABIL IN NUMBER, + V_LISTAID IN VARCHAR2, + V_DESCRIERE IN VARCHAR2, + V_TIP IN NUMBER, + V_ID_SET IN NUMBER, + V_DATA_CURS IN DATE, + V_ID_VALUTA IN NUMBER, + V_IN_VALUTA IN NUMBER, + V_TVA_INCASARE IN NUMBER, + V_ID_SUCURSALA IN NUMBER, + V_ID_UTIL IN NUMBER); + + PROCEDURE initializeaza_date_factura(V_DATA_IREG IN DATE, + V_ID_FDOC IN NUMBER, + V_DATA_ACT IN DATE, + V_DATA_SCADENTA IN DATE, + V_SERIE_FACTURA IN VARCHAR2, + V_NUMAR_ACT IN NUMBER, + V_ID_CLIENT IN NUMBER, + V_ID_LUCRARE IN NUMBER, + V_ID_SECTIE IN NUMBER, + V_ID_VENCHELT IN NUMBER, + V_ID_RESPONSABIL IN NUMBER, + V_EXPLICATIA4 IN VARCHAR2, + V_LISTAID IN VARCHAR2, + V_DESCRIERE IN VARCHAR2, + V_TIP IN NUMBER, + V_ID_SET IN NUMBER, + V_DATA_CURS IN DATE, + V_ID_VALUTA IN NUMBER, + V_IN_VALUTA IN NUMBER, + V_TVA_INCASARE IN NUMBER, + V_ID_SUCURSALA IN NUMBER, + V_ID_UTIL IN NUMBER); + + PROCEDURE initializeaza_date_factura(V_DATA_IREG IN DATE, + V_ID_FDOC IN NUMBER, + V_DATA_ACT IN DATE, + V_DATA_SCADENTA IN DATE, + V_SERIE_FACTURA IN VARCHAR2, + V_NUMAR_ACT IN NUMBER, + V_ID_CLIENT IN NUMBER, + V_ID_LUCRARE IN NUMBER, + V_ID_SECTIE IN NUMBER, + V_ID_VENCHELT IN NUMBER, + V_ID_RESPONSABIL IN NUMBER, + V_EXPLICATIA4 IN VARCHAR2, + V_ID_ORDL IN NUMBER, + V_LISTAID IN VARCHAR2, + V_DESCRIERE IN VARCHAR2, + V_TIP IN NUMBER, + V_ID_SET IN NUMBER, + V_DATA_CURS IN DATE, + V_ID_VALUTA IN NUMBER, + V_IN_VALUTA IN NUMBER, + V_TVA_INCASARE IN NUMBER, + V_ID_SUCURSALA IN NUMBER, + V_ID_UTIL IN NUMBER); + + PROCEDURE initializeaza_date_factura(V_DATA_IREG IN DATE, + V_ID_FDOC IN NUMBER, + V_DATA_ACT IN DATE, + V_DATA_SCADENTA IN DATE, + V_SERIE_FACTURA IN VARCHAR2, + V_NUMAR_ACT IN NUMBER, + V_ID_CLIENT IN NUMBER, + V_ID_LUCRARE IN NUMBER, + V_ID_SECTIE IN NUMBER, + V_ID_VENCHELT IN NUMBER, + V_ID_RESPONSABIL IN NUMBER, + V_EXPLICATIA4 IN VARCHAR2, + V_ID_ORDL IN NUMBER, + V_LISTAID IN VARCHAR2, + V_DESCRIERE IN VARCHAR2, + V_TIP IN NUMBER, + V_ID_SET IN NUMBER, + V_DATA_CURS IN DATE, + V_ID_VALUTA IN NUMBER, + V_IN_VALUTA IN NUMBER, + V_TVA_INCASARE IN NUMBER, + V_ID_SUCURSALA IN NUMBER, + V_ID_UTIL IN NUMBER, + V_TIP_FACTURA IN NUMBER, + V_ID_BENEFICIAR IN NUMBER, + V_TIP_SAFT IN NUMBER DEFAULT 380); + + PROCEDURE initializeaza_setari_facturare; + + PROCEDURE initializeaza_date_gestiune(V_ID_GESTIUNE IN NUMBER, + V_ID_TIPGEST IN NUMBER, + V_CONT IN VARCHAR2, + V_ACONT IN VARCHAR2); + + PROCEDURE citeste_setari_document(V_TIP IN NUMBER, + V_ID_FDOC OUT NUMBER, + V_FDOC OUT VARCHAR2); + + PROCEDURE citeste_setari_partener(V_TIP IN NUMBER, + V_ID_PART OUT NUMBER, + V_DENUMIRE OUT VARCHAR2); + + PROCEDURE citeste_setari_pol_pret(V_TIP IN NUMBER, + V_ID_UTIL IN NUMBER, + V_ID_POL OUT NUMBER, + V_DENUMIRE OUT VARCHAR2); + + PROCEDURE genereaza_numar_proforma(V_NR_PROFORMA OUT NUMBER); + + PROCEDURE completare_politica_stoc; + + PROCEDURE modificare_politica_stoc(V_ID_POL IN NUMBER); + + PROCEDURE cursor_preturi(V_DATA_CURS IN DATE, + V_TIP IN NUMBER, + V_ID_VALUTA IN NUMBER, + V_ID_GESTIUNE_INIT IN NUMBER, + V_LUNA IN NUMBER, + V_AN IN NUMBER, + V_ID_UTIL IN NUMBER, + V_ID_SUCURSALA IN NUMBER, + V_CURSOR OUT cursor_facturare); + + PROCEDURE cursor_contract(V_DATA_CURS IN DATE, + V_TIP IN NUMBER, + V_ID_VALUTA IN NUMBER, + V_LISTAID IN VARCHAR2, + V_ID_GESTIUNE_INIT IN NUMBER, + V_LUNA IN NUMBER, + V_AN IN NUMBER, + V_ID_UTIL IN NUMBER, + V_ID_SUCURSALA IN NUMBER, + V_ID_AGENT OUT NUMBER, + V_NUME_AGENT OUT VARCHAR2, + V_CURSOR OUT cursor_facturare, + V_CURSOR2 OUT cursor_facturare); + + PROCEDURE cursor_comanda(V_DATA_CURS IN DATE, + V_TIP IN NUMBER, + V_LISTAID IN VARCHAR2, + V_ID_UTIL IN NUMBER, + V_CURSOR OUT cursor_facturare); + + PROCEDURE cursor_lucrare(V_DATA_CURS IN DATE, + V_ID_GESTIUNE IN NUMBER, + V_ID_LUCRARE IN NUMBER, + V_LUNA IN NUMBER, + V_AN IN NUMBER, + V_ID_UTIL IN NUMBER, + V_ID_SUCURSALA IN NUMBER, + V_CURSOR OUT cursor_facturare); + + PROCEDURE cursor_articole_k(V_DATA_CURS IN DATE, + V_LUNA IN NUMBER, + V_AN IN NUMBER, + V_ID_UTIL IN NUMBER, + V_ID_SUCURSALA IN NUMBER, + V_CURSOR OUT cursor_facturare); + + PROCEDURE cursor_avize(V_LISTAID IN VARCHAR2, + V_ID_UTIL IN NUMBER, + V_DISCOUNT OUT NUMBER, + V_CURSOR OUT cursor_facturare); + + PROCEDURE cursor_aviz_nir(V_ID_GESTIUNE_DEST IN NUMBER, + V_ID_FURNIZOR IN NUMBER, + V_NR_ACT IN NUMBER, + V_ID_SUCURSALA IN NUMBER, + V_CURSOR OUT cursor_facturare); + + PROCEDURE cursor_retur(V_IN_VALUTA IN NUMBER, + V_LISTAID IN VARCHAR2, + V_ID_UTIL IN NUMBER, + V_CURSOR OUT cursor_facturare); + + PROCEDURE cursor_retur_document(V_IN_VALUTA IN NUMBER, + V_LISTAID IN VARCHAR2, + V_COPIERE IN NUMBER, + V_PROFORMA IN NUMBER, + V_ID_UTIL IN NUMBER, + V_CURSOR OUT cursor_facturare); + + PROCEDURE cursor_copiere(V_IN_VALUTA IN NUMBER, + V_LISTAID IN VARCHAR2, + V_ID_UTIL IN NUMBER, + V_CURSOR OUT cursor_facturare); + + PROCEDURE cursor_gestiune(V_DATA_CURS IN DATE, + V_ID_POL IN NUMBER, + V_ID_GESTIUNE IN NUMBER, + V_LUNA IN NUMBER, + V_AN IN NUMBER, + V_ID_UTIL IN NUMBER, + V_ID_SUCURSALA IN NUMBER, + V_CURSOR OUT cursor_facturare); + + PROCEDURE cursor_gestiuni_articol(V_ID_ARTICOL IN NUMBER, + V_TIP IN NUMBER, + V_ID_GESTIUNE IN NUMBER, + V_LUNA IN NUMBER, + V_AN IN NUMBER, + V_ID_UTIL IN NUMBER, + V_ID_SUCURSALA IN NUMBER, + V_CURSOR OUT cursor_facturare); + + PROCEDURE cursor_gestiuni_articol_stoc0(V_ID_ARTICOL IN NUMBER, + V_TIP IN NUMBER, + V_ID_GESTIUNE IN NUMBER, + V_LUNA IN NUMBER, + V_AN IN NUMBER, + V_ID_UTIL IN NUMBER, + V_ID_SUCURSALA IN NUMBER, + V_CURSOR OUT cursor_facturare); + + PROCEDURE cursor_gestiuni_articol_retur(V_ID_ARTICOL IN NUMBER, + V_TIP IN NUMBER, + V_ID_GESTIUNE IN NUMBER, + V_PRETV IN NUMBER, + V_DISCOUNT IN NUMBER, + V_LUNA IN NUMBER, + V_AN IN NUMBER, + V_ID_UTIL IN NUMBER, + V_LISTAID IN VARCHAR2, + V_ID_SUCURSALA IN NUMBER, + V_CURSOR OUT cursor_facturare); + + PROCEDURE adauga_articol_factura_deviz(V_ID_ARTICOL IN NUMBER, + V_EXPLICATIE IN VARCHAR2, + V_SERIE IN VARCHAR2, + V_PRET_ACHIZITIE IN NUMBER, + V_PRETD IN NUMBER, + V_ID_VALUTAD IN NUMBER, + V_PRET IN NUMBER, + V_ID_VALUTA IN NUMBER, + V_CURS IN NUMBER, + V_MULTIPLICATOR IN NUMBER, + V_PROC_TVAV IN NUMBER, + V_ID_JTVA_COLOANA IN NUMBER, + V_CANTITATE IN NUMBER, + V_DISCOUNT_UNITAR IN NUMBER, + V_ID_GESTIUNE IN NUMBER, + V_CONT IN NUMBER, + V_PRET_CU_TVA IN NUMBER, + V_ID_JTVA_COLOANA_EX IN NUMBER DEFAULT NULL, + V_ID_CTR IN NUMBER DEFAULT NULL, + V_TAXCODE IN NUMBER DEFAULT NULL, + V_LOT IN VARCHAR2 DEFAULT NULL); + + PROCEDURE adauga_articol_factura_stoc(V_ID_ARTICOL IN NUMBER, + V_SERIE IN VARCHAR2, + V_PRET_ACHIZITIE IN NUMBER, + V_PRETD IN NUMBER, + V_ID_VALUTAD IN NUMBER, + V_PRET IN NUMBER, + V_ID_VALUTA IN NUMBER, + V_CURS IN NUMBER, + V_MULTIPLICATOR IN NUMBER, + V_PROC_TVAV IN NUMBER, + V_ID_JTVA_COLOANA IN NUMBER, + V_CANTITATE IN NUMBER, + V_DISCOUNT_UNITAR IN NUMBER, + V_ID_GESTIUNE IN NUMBER, + V_CONT IN NUMBER, + V_PRET_CU_TVA IN NUMBER, + V_EXPLICATIE IN VARCHAR2, + V_ID_RUL_AUX IN NUMBER, + V_TAXCODE IN NUMBER DEFAULT NULL, + V_LOT IN VARCHAR2 DEFAULT NULL); + + PROCEDURE adauga_articol_factura_stoc(V_ID_ARTICOL IN NUMBER, + V_SERIE IN VARCHAR2, + V_PRET_ACHIZITIE IN NUMBER, + V_PRETD IN NUMBER, + V_ID_VALUTAD IN NUMBER, + V_PRET IN NUMBER, + V_ID_VALUTA IN NUMBER, + V_CURS IN NUMBER, + V_MULTIPLICATOR IN NUMBER, + V_PROC_TVAV IN NUMBER, + V_ID_JTVA_COLOANA IN NUMBER, + V_CANTITATE IN NUMBER, + V_DISCOUNT_UNITAR IN NUMBER, + V_ID_GESTIUNE IN NUMBER, + V_CONT IN NUMBER, + V_PRET_CU_TVA IN NUMBER); + + PROCEDURE adauga_articol_lucrare_pret(V_ID_COMANDA IN NUMBER, + V_ID_ARTICOL IN NUMBER, + V_ID_POL IN NUMBER, + V_CANTITATE IN NUMBER, + V_CONT IN VARCHAR2, + V_CURS IN NUMBER, + V_MULTIPLICATOR IN NUMBER, + V_ID_JTVA_COLOANA IN NUMBER, + V_ID_GESTIUNE_DEST IN NUMBER, + V_ID_UTIL IN NUMBER, + V_PRETIN in number); + + PROCEDURE adauga_articol_set(V_ID_VANZARE_SET IN NUMBER, + V_DENUMIRE IN VARCHAR2, + V_EXPLICATIE IN VARCHAR2, + V_UM IN VARCHAR2, + V_SERIE IN VARCHAR2, + V_CANTITATE IN NUMBER, + V_PRET IN NUMBER, + V_DISCOUNT_UNITAR IN NUMBER); + + PROCEDURE adauga_articol_factura(V_ID_TEMP IN NUMBER, + V_ID_ARTICOL IN NUMBER, + V_SERIE IN VARCHAR2, + V_EXPLICATIE IN VARCHAR2, + V_ID_POL IN NUMBER, + V_ID_GESTIUNE IN NUMBER, + V_PRET_ACHIZITIE_TEMP IN NUMBER, + V_PRETD IN NUMBER, + V_ID_VALUTAD IN NUMBER, + V_PRET_TEMP IN NUMBER, + V_ID_VALUTA_TEMP IN NUMBER, + V_PRETURI_CU_TVA_TEMP IN NUMBER, + V_IN_STOC_TEMP IN NUMBER, + V_CANTITATE IN NUMBER, + V_DISCOUNT_UNITAR IN NUMBER, + V_CONT IN VARCHAR2, + V_CURS IN NUMBER, + V_MULTIPLICATOR IN NUMBER, + V_ID_JTVA_COLOANA IN NUMBER, + V_ID_PART_REZ IN NUMBER, + V_ID_LUCRARE_REZ IN NUMBER, + V_PRETV_ORIG IN NUMBER, + V_ID_VANZARE_SET IN NUMBER, + V_ID_CTR IN NUMBER, + V_ID_UTIL IN NUMBER, + V_TAXCODE IN NUMBER DEFAULT NULL, + V_LOT IN VARCHAR2 DEFAULT NULL); + + PROCEDURE sterge_articol_factura(V_ID_TEMP IN NUMBER, + V_ID_UTIL IN NUMBER); + + PROCEDURE adauga_diferente_pret(V_SIR_ID_TEMP IN VARCHAR2, + V_SIR_DIFERENTA IN VARCHAR, + V_ID_UTIL IN NUMBER); + + PROCEDURE adauga_rata_factura(V_ID_RATA IN NUMBER, + V_PRET IN NUMBER, + V_CURS IN NUMBER, + V_MULTIPLICATOR IN NUMBER, + V_ID_JTVA_COLOANA IN NUMBER, + V_EXPLICATIE IN VARCHAR2, + V_ID_UTIL IN NUMBER, + V_TAXCODE IN NUMBER DEFAULT NULL); + + PROCEDURE sterge_rata_factura(V_ID_RATA IN NUMBER, V_ID_UTIL IN NUMBER); + + PROCEDURE sterge_proforma_old(V_ID_PROFORMA IN NUMBER, + V_ID_UTIL IN NUMBER); + + PROCEDURE sterge_factura(V_ID_VANZARE IN NUMBER, + V_LUNA IN NUMBER, + V_AN IN NUMBER, + V_ID_UTIL IN NUMBER); + + PROCEDURE sterge_proforma(V_ID_VANZARE IN NUMBER, V_ID_UTIL IN NUMBER); + + PROCEDURE scrie_proforma_old(V_DISCOUNT_PROFORMA IN NUMBER, + V_TEXT_ADITIONAL IN VARCHAR2, + V_DISCOUNT_EVIDENTIAT IN NUMBER, + V_ID_PROFORMA OUT NUMBER, + V_NUMAR_ACT OUT NUMBER); + + PROCEDURE scrie_proforma(V_TOTFTVA IN NUMBER, + V_TOTTVA IN NUMBER, + V_DISCOUNT_FACTURA IN NUMBER, + V_SERIE_ACT_INCASARE IN VARCHAR2, + V_NUMAR_ACT_INCASARE IN NUMBER, + V_LISTA_INCASARE IN VARCHAR2, + V_ID_DELEGAT IN NUMBER, + V_ID_MASINA IN NUMBER, + V_ID_FACTURARE IN NUMBER, + V_LISTARE_DETALIATA IN NUMBER, + V_DATAORA_EXP IN DATE, + V_ID_AGENT IN NUMBER, + V_TEXT_ADITIONAL IN VARCHAR2, + V_DISCOUNT_EVIDENTIAT IN NUMBER, + V_PARAMETRU_ADITIONAL IN NUMBER, + V_ID_VANZARE OUT NUMBER); + + PROCEDURE inchide_comanda; + + PROCEDURE scrie_avize_lucrare(V_DISCOUNT_FACTURA IN NUMBER, + V_DISCOUNT_EVIDENTIAT IN NUMBER, + V_ID_SERIE_ACT IN NUMBER, + V_ID_VANZARE OUT NUMBER, + V_CURSOR_VERIFICARE OUT pack_facturare.cursor_facturare); + + /* PROCEDURE scrie_factura2(V_TOTFTVA IN NUMBER, + V_TOTTVA IN NUMBER, + V_DISCOUNT_FACTURA IN NUMBER, + V_SERIE_ACT_INCASARE IN VARCHAR2, + V_NUMAR_ACT_INCASARE IN NUMBER, + V_LISTA_INCASARE IN VARCHAR2, + V_ID_DELEGAT IN NUMBER, + V_ID_MASINA IN NUMBER, + V_DATAORA_EXP IN DATE, + V_ID_AGENT IN NUMBER, + V_TEXT_ADITIONAL IN VARCHAR2, + V_DISCOUNT_EVIDENTIAT IN NUMBER, + V_PARAMETRU_ADITIONAL IN NUMBER, + V_ID_VANZARE OUT NUMBER, + V_CURSOR_VERIFICARE OUT pack_facturare.cursor_facturare);*/ + + PROCEDURE scrie_factura2(V_TOTFTVA IN NUMBER, + V_TOTTVA IN NUMBER, + V_DISCOUNT_FACTURA IN NUMBER, + V_SERIE_ACT_INCASARE IN VARCHAR2, + V_NUMAR_ACT_INCASARE IN NUMBER, + V_LISTA_INCASARE IN VARCHAR2, + V_ID_DELEGAT IN NUMBER, + V_ID_MASINA IN NUMBER, + V_ID_FACTURARE IN NUMBER, + V_LISTARE_DETALIATA IN NUMBER, + V_DATAORA_EXP IN DATE, + V_ID_AGENT IN NUMBER, + V_TEXT_ADITIONAL IN VARCHAR2, + V_DISCOUNT_EVIDENTIAT IN NUMBER, + V_PARAMETRU_ADITIONAL IN NUMBER, + V_ID_VANZARE OUT NUMBER, + V_CURSOR_VERIFICARE OUT pack_facturare.cursor_facturare); + + /* PROCEDURE scrie_factura_avize_retur(V_DISCOUNT_FACTURA IN NUMBER, + V_ID_DELEGAT IN NUMBER, + V_ID_MASINA IN NUMBER, + V_DATAORA_EXP IN DATE, + V_ID_AGENT IN NUMBER, + V_DISCOUNT_EVIDENTIAT IN NUMBER, + V_TEXT_ADITIONAL IN VARCHAR2, + V_TEXT_ADITIONAL_RETUR IN VARCHAR2, + V_SIR_MODIFICARI_ACONT IN VARCHAR2, + V_SIR_MODIFICARI_PART IN VARCHAR2, + V_PARAMETRU_ADITIONAL IN NUMBER, + V_SERIE_ACT IN VARCHAR2, + V_NUMAR_ACT IN NUMBER, + V_ID_VANZARE OUT NUMBER, + V_ID_VANZARE_RETUR OUT NUMBER, + V_CURSOR_RETUR OUT cursor_facturare);*/ + + PROCEDURE scrie_factura_avize_retur(V_DISCOUNT_FACTURA IN NUMBER, + V_ID_DELEGAT IN NUMBER, + V_ID_MASINA IN NUMBER, + V_ID_FACTURARE IN NUMBER, + V_LISTARE_DETALIATA IN NUMBER, + V_DATAORA_EXP IN DATE, + V_ID_AGENT IN NUMBER, + V_DISCOUNT_EVIDENTIAT IN NUMBER, + V_TEXT_ADITIONAL IN VARCHAR2, + V_TEXT_ADITIONAL_RETUR IN VARCHAR2, + V_SIR_MODIFICARI_ACONT IN VARCHAR2, + V_SIR_MODIFICARI_PART IN VARCHAR2, + V_PARAMETRU_ADITIONAL IN NUMBER, + V_SERIE_ACT IN VARCHAR2, + V_NUMAR_ACT IN NUMBER, + V_ID_VANZARE OUT NUMBER, + V_ID_VANZARE_RETUR OUT NUMBER, + V_CURSOR_RETUR OUT cursor_facturare); + + /* PROCEDURE scrie_factura_avize(V_DISCOUNT_FACTURA IN NUMBER, + V_SERIE_ACT_INCASARE IN VARCHAR2, + V_NUMAR_ACT_INCASARE IN NUMBER, + V_LISTA_INCASARE IN VARCHAR2, + V_ID_DELEGAT IN NUMBER, + V_ID_MASINA IN NUMBER, + V_DATAORA_EXP IN DATE, + V_ID_AGENT IN NUMBER, + V_TEXT_ADITIONAL IN VARCHAR2, + V_DISCOUNT_EVIDENTIAT IN NUMBER, + V_VERIFICARE_FACTURAT IN NUMBER, + V_ID_VANZARE OUT NUMBER, + V_CURSOR_VERIFICARE OUT pack_facturare.cursor_facturare);*/ + + PROCEDURE scrie_factura_avize(V_DISCOUNT_FACTURA IN NUMBER, + V_SERIE_ACT_INCASARE IN VARCHAR2, + V_NUMAR_ACT_INCASARE IN NUMBER, + V_LISTA_INCASARE IN VARCHAR2, + V_ID_DELEGAT IN NUMBER, + V_ID_MASINA IN NUMBER, + V_ID_FACTURARE IN NUMBER, + V_LISTARE_DETALIATA IN NUMBER, + V_DATAORA_EXP IN DATE, + V_ID_AGENT IN NUMBER, + V_TEXT_ADITIONAL IN VARCHAR2, + V_DISCOUNT_EVIDENTIAT IN NUMBER, + V_VERIFICARE_FACTURAT IN NUMBER, + V_ID_VANZARE OUT NUMBER, + V_CURSOR_VERIFICARE OUT pack_facturare.cursor_facturare); + + /* PROCEDURE scrie_aviz_retur(V_ID_DELEGAT IN NUMBER, + V_ID_MASINA IN NUMBER, + V_DATAORA_EXP IN DATE, + V_ID_AGENT IN NUMBER, + V_TEXT_ADITIONAL IN VARCHAR2, + V_DISCOUNT_EVIDENTIAT IN NUMBER, + V_SCRIS OUT NUMBER, + V_ID_VANZARE OUT NUMBER, + V_CURSOR_VERIFICARE OUT pack_facturare.cursor_facturare);*/ + + PROCEDURE scrie_aviz_retur(V_ID_DELEGAT IN NUMBER, + V_ID_MASINA IN NUMBER, + V_ID_FACTURARE IN NUMBER, + V_LISTARE_DETALIATA IN NUMBER, + V_DATAORA_EXP IN DATE, + V_ID_AGENT IN NUMBER, + V_TEXT_ADITIONAL IN VARCHAR2, + V_DISCOUNT_EVIDENTIAT IN NUMBER, + V_SCRIS OUT NUMBER, + V_ID_VANZARE OUT NUMBER, + V_CURSOR_VERIFICARE OUT pack_facturare.cursor_facturare); + + FUNCTION contabilizeaza_articol(detalii_articol VANZARI_DETALII_TEMP%ROWTYPE) + RETURN NUMBER; + + FUNCTION contabilizeaza_rata(detalii_rata VANZARI_DETALII_TEMP%ROWTYPE) + RETURN NUMBER; + + PROCEDURE descarca_gestiune(V_ID_ARTICOL IN NUMBER, + V_SERIE IN VARCHAR2, + V_PRET_ACHIZITIE IN NUMBER, + V_PRETD IN NUMBER, + V_ID_VALUTAD IN NUMBER, + V_PRETV_ALES IN NUMBER, + V_PRET_UNITAR IN NUMBER, + V_AJUSTARE IN NUMBER, + V_PROC_TVAV IN NUMBER, + V_PRET_ARE_TVA IN NUMBER, + V_CANTE IN NUMBER, + V_DISCOUNT IN NUMBER, + V_ID_GESTIUNE IN NUMBER, + V_ID_SECTIE IN NUMBER, + V_CONT IN VARCHAR2, + V_ID_VENCHELT IN NUMBER, + V_ID_VALUTA IN NUMBER, + V_CURS IN NUMBER, + V_ID_PART_REZ IN NUMBER, + V_ID_LUCRARE_REZ IN NUMBER); + + PROCEDURE descarca_gestiune(V_ID_ARTICOL IN NUMBER, + V_SERIE IN VARCHAR2, + V_PRET_ACHIZITIE IN NUMBER, + V_PRETD IN NUMBER, + V_ID_VALUTAD IN NUMBER, + V_PRETV_ALES IN NUMBER, + V_PRET_UNITAR IN NUMBER, + V_AJUSTARE IN NUMBER, + V_PROC_TVAV IN NUMBER, + V_PRET_ARE_TVA IN NUMBER, + V_CANTE IN NUMBER, + V_DISCOUNT IN NUMBER, + V_ID_GESTIUNE IN NUMBER, + V_ID_SECTIE IN NUMBER, + V_CONT IN VARCHAR2, + V_ID_VENCHELT IN NUMBER, + V_ID_VALUTA IN NUMBER, + V_CURS IN NUMBER, + V_ID_PART_REZ IN NUMBER, + V_ID_LUCRARE_REZ IN NUMBER, + V_ID_JTVA_COLOANA IN NUMBER, + V_TAXCODE IN NUMBER); + + PROCEDURE scrie_fact_aviz_custodie(V_COD IN NUMBER, + V_ID_SECTIE IN NUMBER, + V_ID_ARTICOL IN NUMBER, + V_ID_GESTIUNE IN NUMBER, + V_CONT IN VARCHAR2, + V_CANTITATE IN NUMBER, + V_PRET_ARE_TVA IN NUMBER, + V_PRET_ACHIZITIE IN NUMBER, + V_PRETD IN NUMBER, + V_ID_VALUTAD IN NUMBER, + V_PRETV IN NUMBER, + V_DISCOUNT_UNITAR IN NUMBER, + V_ID_VALUTA IN NUMBER, + V_CURS IN NUMBER, + V_PROC_TVAV IN NUMBER); + + PROCEDURE transfera_articol(detalii_articol VANZARI_DETALII_TEMP%ROWTYPE); + + FUNCTION scrie_nota(V_CANTITATE IN NUMBER, + V_PRET IN NUMBER, + V_DISCOUNT_UNITAR IN NUMBER, + V_PRET_ARE_TVA IN NUMBER, -- 0 DACA V_PRET NU CONTINE SI TVA-UL ( PRETUL FOLOSIT CA REFERINTA ) + V_ID_VALUTA IN NUMBER, + V_IN_VALUTA IN NUMBER, + V_CURS IN NUMBER, + V_ID_VENCHELT IN NUMBER, + V_ID_SECTIE IN NUMBER, + V_ID_CTR IN NUMBER, + V_EXPLICATIE IN VARCHAR2, + V_SCD IN VARCHAR2, + V_ASCD IN VARCHAR2, + V_SCC IN VARCHAR2, + V_ASCC IN VARCHAR2, + V_ID_GESTIN IN NUMBER, + V_ID_GESTOUT IN NUMBER, + V_ID_SET IN NUMBER, + V_CU_TVA IN NUMBER, -- 0 DACA SE SCRIE SI NOTA DE TVA + V_PTVA IN NUMBER, + V_ID_JTVA_COLOANA IN NUMBER, + V_TAXCODE IN NUMBER DEFAULT NULL, + V_PAYMENTCODE IN NUMBER DEFAULT NULL) RETURN NUMBER; + + PROCEDURE scrie_tva(V_SUMA IN NUMBER, + V_SUMA_VAL IN NUMBER, + V_ID_VALUTA IN NUMBER, + V_IN_VALUTA IN NUMBER, + V_CONT IN VARCHAR2, + V_ACONT IN VARCHAR2, + V_CURS IN NUMBER, + V_ID_VENCHELT IN NUMBER, + V_ID_SECTIE IN NUMBER, + V_ID_CTR IN NUMBER, + V_EXPLICATIE IN VARCHAR2, + V_PTVA IN NUMBER, + V_ID_FACT IN NUMBER, + V_ID_JTVA_COLOANA IN NUMBER); + + FUNCTION scrie_discount(V_CANTITATE IN NUMBER, + V_DISCOUNT_UNITAR IN NUMBER, + V_ID_VALUTA IN NUMBER, + V_IN_VALUTA IN NUMBER, + V_ASCC IN VARCHAR2, + V_ID_SECTIE IN NUMBER, + V_ID_CTR IN NUMBER, + V_CURS IN NUMBER, + V_PROC_TVAV IN NUMBER, + V_PRET_CU_TVA IN NUMBER, + V_CU_TVA IN NUMBER, + V_ID_JTVA_COLOANA IN NUMBER, + V_TAXCODE IN NUMBER DEFAULT NULL) + RETURN NUMBER; + + PROCEDURE scrie_descarcare_k(V_COEFICIENT_K IN NUMBER); + + PROCEDURE scrie_avans(V_SUMA IN NUMBER); + + Procedure scrie_incasari(V_SERIE_ACT_INCASARE IN VARCHAR2, + V_NUMAR_ACT_INCASARE IN NUMBER, + V_LISTA_INCASARE IN VARCHAR2, + V_ID_CTR IN NUMBER); + + PROCEDURE scrie_incasare2(V_TIP IN NUMBER, + V_SERIE_ACT_INCASARE IN VARCHAR2, + V_NUMAR_ACT_INCASARE IN NUMBER, + V_ID_CTR IN NUMBER, + V_ID_BANCASA IN NUMBER, + V_SUMA IN NUMBER, + V_ASCC IN ACT.ASCC%TYPE DEFAULT NULL, + V_PSCD IN ACT.SCD%TYPE DEFAULT NULL, + V_ASCD IN ACT.ASCD%TYPE DEFAULT NULL); + + /* PROCEDURE scrie_incasare(V_NUMAR_ACT_INCASARE IN NUMBER, + V_ID_CTR IN NUMBER, + V_ID_CASA IN NUMBER, + V_SUMA IN NUMBER);*/ + + PROCEDURE scrie_note_banca_compensari; + + /* PROCEDURE scrie_in_vanzari(V_DISCOUNT_FACTURA IN NUMBER, + V_ID_DELEGAT IN NUMBER, + V_ID_MASINA IN NUMBER, + V_DATAORA_EXP IN DATE, + V_ID_AGENT IN NUMBER, + V_TEXT_ADITIONAL IN VARCHAR2, + V_ID_VANZARE OUT NUMBER);*/ + + PROCEDURE scrie_in_vanzari(V_DISCOUNT_FACTURA IN NUMBER, + V_ID_DELEGAT IN NUMBER, + V_ID_MASINA IN NUMBER, + V_ID_FACTURARE IN NUMBER, + V_LISTARE_DETALIATA IN NUMBER, + V_DATAORA_EXP IN DATE, + V_ID_AGENT IN NUMBER, + V_TEXT_ADITIONAL IN VARCHAR2, + V_ID_VANZARE OUT NUMBER); + + PROCEDURE scrie_atasamente_factura(V_ID_VANZARE IN NUMBER, + V_NUME_FRX IN NUMBER, + V_WDOCUMENT IN BLOB, + V_ID_UTIL IN NUMBER); + + PROCEDURE scrie_seturi; + + PROCEDURE scrie_seturi_proforma; + + PROCEDURE initializeaza_part_rez(V_ID_PART IN NUMBER); + + PROCEDURE cumuleaza_note_act; + + PROCEDURE cumuleaza_note_act_temp; + + PROCEDURE cursor_verificare(V_CURSOR_VERIFICARE OUT pack_facturare.cursor_facturare); + + PROCEDURE modifica_date_factura(V_ID_VANZARE IN NUMBER, + V_ID_RUTA IN NUMBER, + V_ID_DELEGAT IN NUMBER, + V_ID_AGENT IN NUMBER, + V_ID_MASINA IN NUMBER, + V_DATAORA_EXP IN DATE, + V_ID_FACTURARE IN VANZARI.ID_FACTURARE%TYPE, + V_LISTARE_DETALIATA IN VANZARI.LISTARE_DETALIATA%TYPE, + V_TEXT_ADITIONAL IN VANZARI.TEXT_ADITIONAL%TYPE, + V_TIP_SAFT IN VANZARI.TIP_SAFT%TYPE DEFAULT NULL, + V_EFACTURA IN VANZARI.EFACTURA%TYPE DEFAULT NULL, + V_DATA_ACT IN VANZARI.DATA_ACT%TYPE DEFAULT NULL, + V_DATA_SCAD IN VANZARI.DATA_SCAD%TYPE DEFAULT NULL, + V_NUMAR_ACT IN VANZARI.NUMAR_ACT%TYPE DEFAULT NULL, + V_SERIE_ACT IN VANZARI.SERIE_ACT%TYPE DEFAULT NULL); + + PROCEDURE modifica_explicatie_articol(V_ID_VANZARE_DET IN NUMBER, + V_EXPLICATIE IN VARCHAR2, + V_ID_UTIL IN NUMBER, + V_TAXCODE IN NUMBER DEFAULT NULL); + + PROCEDURE initializeaza_moneda_nationala; + + PROCEDURE scrie_cursuri_proforma(V_ID_PROFORMA IN NUMBER); + + PROCEDURE scrie_cursuri(V_ID_VANZARE IN NUMBER); + + PROCEDURE scrie_rate_factura(V_DATAORA IN DATE); + + FUNCTION calculeaza_k RETURN NUMBER; + + PROCEDURE calculeaza_pret(V_PRET_UNITAR IN NUMBER, + V_CURS IN NUMBER, + V_ID_VALUTA IN NUMBER, + V_PROC_TVA IN NUMBER, + V_PRET_ARE_TVA IN NUMBER, + V_TIP IN NUMBER, + V_PRET_FARA_TVA OUT NUMBER, + V_PRET_TVA OUT NUMBER, + V_PRET_CU_TVA OUT NUMBER); + + /* function calculeaza_pret_fara_tva(V_PRET_UNITAR IN NUMBER, + V_CURS IN NUMBER, + V_ID_VALUTA IN NUMBER, + V_PROC_TVA IN NUMBER, + V_PRET_ARE_TVA IN NUMBER) return number; + + function calculeaza_pret_TVA(V_PRET_UNITAR IN NUMBER, + V_CURS IN NUMBER, + V_ID_VALUTA IN NUMBER, + V_PROC_TVA IN NUMBER, + V_PRET_ARE_TVA IN NUMBER) return number; + + function calculeaza_pret_cu_tva(V_PRET_UNITAR IN NUMBER, + V_CURS IN NUMBER, + V_ID_VALUTA IN NUMBER, + V_PROC_TVA IN NUMBER, + V_PRET_ARE_TVA IN NUMBER) return number;*/ + + PROCEDURE calculeaza_sume(V_PRET_UNITAR IN NUMBER, + V_DISCOUNT_UNITAR IN NUMBER, + V_ZECIMALE_PRET IN NUMBER, + V_ZECIMALE_SUMA IN NUMBER, + V_CANTITATE IN NUMBER, + V_CURS IN NUMBER, + V_ID_VALUTA IN NUMBER, + V_PROC_TVA IN NUMBER, + V_PRET_ARE_TVA IN NUMBER, + V_SUMA_FARA_TVA OUT NUMBER, + V_SUMA_TVA OUT NUMBER, + V_SUMA_CU_TVA OUT NUMBER); + + /* PROCEDURE finalizeaza_factura(V_DISCOUNT_FACTURA IN NUMBER, + V_ID_DELEGAT IN NUMBER, + V_ID_MASINA IN NUMBER, + V_DATAORA_EXP IN DATE, + V_ID_AGENT IN NUMBER, + V_TEXT_ADITIONAL IN VARCHAR2, + V_PARAMETRU_ADITIONAL IN NUMBER);*/ + + PROCEDURE finalizeaza_factura(V_DISCOUNT_FACTURA IN NUMBER, + V_ID_DELEGAT IN NUMBER, + V_ID_MASINA IN NUMBER, + V_ID_FACTURARE IN NUMBER, + V_LISTARE_DETALIATA IN NUMBER, + V_DATAORA_EXP IN DATE, + V_ID_AGENT IN NUMBER, + V_TEXT_ADITIONAL IN VARCHAR2, + V_PARAMETRU_ADITIONAL IN NUMBER); + + PROCEDURE finalizeaza_avize_lucrare(V_DISCOUNT_FACTURA IN NUMBER); + + /* PROCEDURE finalizeaza_scriere_verificare(V_DISCOUNT_FACTURA IN NUMBER, + V_ID_DELEGAT IN NUMBER, + V_ID_MASINA IN NUMBER, + V_DATAORA_EXP IN DATE, + V_ID_AGENT IN NUMBER, + V_TEXT_ADITIONAL IN VARCHAR2, + V_SIR_MODIFICARI_ACONT IN VARCHAR2, + V_SIR_MODIFICARI_PART IN VARCHAR, + V_PARAMETRU_ADITIONAL IN NUMBER, + V_ID_VANZARE OUT NUMBER);*/ + + PROCEDURE finalizeaza_scriere_verificare(V_DISCOUNT_FACTURA IN NUMBER, + V_ID_DELEGAT IN NUMBER, + V_ID_MASINA IN NUMBER, + V_DATAORA_EXP IN DATE, + V_ID_AGENT IN NUMBER, + V_TEXT_ADITIONAL IN VARCHAR2, + V_SIR_MODIFICARI_ACONT IN VARCHAR2, + V_SIR_MODIFICARI_PART IN VARCHAR, + V_PARAMETRU_ADITIONAL IN NUMBER, + V_ID_VANZARE OUT NUMBER); + + PROCEDURE finalizeaza_scriere_verificare(V_DISCOUNT_FACTURA IN NUMBER, + V_ID_DELEGAT IN NUMBER, + V_ID_MASINA IN NUMBER, + V_ID_FACTURARE IN NUMBER, + V_LISTARE_DETALIATA IN NUMBER, + V_DATAORA_EXP IN DATE, + V_ID_AGENT IN NUMBER, + V_TEXT_ADITIONAL IN VARCHAR2, + V_SIR_MODIFICARI_ACONT IN VARCHAR2, + V_SIR_MODIFICARI_PART IN VARCHAR, + V_PARAMETRU_ADITIONAL IN NUMBER, + V_ID_VANZARE OUT NUMBER); + + Procedure initializeaza_scriere_actrul(tdDataOra IN DATE, + tnSuprascriereCod IN NUMBER DEFAULT 1); + + PROCEDURE finalizeaza_scriere_actrul; + + PROCEDURE marcheaza_facturat(V_VERIFICARE IN NUMBER); + + PROCEDURE scrie_cantitati_vanzari_avize; + + PROCEDURE scrie_corespondente_vanzari(V_TIP IN NUMBER); + + PROCEDURE cauta_date_ultima_factura(V_ID_PART IN NUMBER, + V_ID_SUCURSALA IN NUMBER, + V_ID_DELEGAT OUT NUMBER, + V_NUME_DELEGAT OUT VARCHAR2, + V_SERIE_BI OUT VARCHAR2, + V_CNP OUT VARCHAR2, + V_ID_MASINA OUT NUMBER, + V_NRINMAT OUT VARCHAR2); + + PROCEDURE cauta_date_ultima_factura_tip(V_TIP IN NUMBER, + V_ID_SUCURSALA IN NUMBER, + V_ID_DELEGAT OUT NUMBER, + V_NUME_DELEGAT OUT VARCHAR2, + V_SERIE_BI OUT VARCHAR2, + V_CNP OUT VARCHAR2, + V_ID_MASINA OUT NUMBER, + V_NRINMAT OUT VARCHAR2); + + PROCEDURE cauta_date_comanda(V_ID_CLIENT IN NUMBER, + V_ID_SUCURSALA IN NUMBER, + V_DATA_FACTURA IN DATE, + V_LISTAID OUT VARCHAR2, + V_DESCRIERE OUT VARCHAR2); + + PROCEDURE cauta_date_comanda_gest(V_ID_GESTIUNE IN NUMBER, + V_ID_SUCURSALA IN NUMBER, + V_DATA_FACTURA IN DATE, + V_LISTAID OUT VARCHAR2, + V_DESCRIERE OUT VARCHAR2); + + FUNCTION calculeaza_total_cu_tva(V_PRET IN NUMBER, + V_AJUSTARE IN NUMBER, + V_CURS IN NUMBER, + V_DISCOUNT_UNITAR IN NUMBER, + V_DISCOUNT_EVIDENTIAT IN NUMBER, + V_CANTITATE IN NUMBER, + V_PRET_CU_TVA IN NUMBER, + V_PROC_TVAV IN NUMBER) + RETURN NUMBER; + + FUNCTION calculeaza_total_cu_tva(V_PRET IN NUMBER, + V_AJUSTARE IN NUMBER, + V_CURS IN NUMBER, + V_DISCOUNT_UNITAR IN NUMBER, + V_DISCOUNT_EVIDENTIAT IN NUMBER, + V_CANTITATE IN NUMBER, + V_PRET_CU_TVA IN NUMBER, + V_PROC_TVAV IN NUMBER, + V_ZECIMALE_PRET IN NUMBER, + V_ZECIMALE_SUMA IN NUMBER) + RETURN NUMBER; + + FUNCTION calculeaza_total_cu_tva_fact(V_PRET IN NUMBER, + V_DIFERENTA IN NUMBER, + V_CURS IN NUMBER, + V_DISCOUNT_UNITAR IN NUMBER, + V_DISCOUNT_EVIDENTIAT IN NUMBER, + V_CANTITATE IN NUMBER, + V_PRET_CU_TVA IN NUMBER, + V_PROC_TVAV IN NUMBER) + RETURN NUMBER; + + FUNCTION calculeaza_total_fara_tva(V_PRET IN NUMBER, + V_AJUSTARE IN NUMBER, + V_CURS IN NUMBER, + V_DISCOUNT_UNITAR IN NUMBER, + V_DISCOUNT_EVIDENTIAT IN NUMBER, + V_CANTITATE IN NUMBER, + V_PRET_CU_TVA IN NUMBER, + V_PROC_TVAV IN NUMBER) + RETURN NUMBER; + + FUNCTION calculeaza_total_fara_tva(V_PRET IN NUMBER, + V_AJUSTARE IN NUMBER, + V_CURS IN NUMBER, + V_DISCOUNT_UNITAR IN NUMBER, + V_DISCOUNT_EVIDENTIAT IN NUMBER, + V_CANTITATE IN NUMBER, + V_PRET_CU_TVA IN NUMBER, + V_PROC_TVAV IN NUMBER, + V_ZECIMALE_PRET IN NUMBER, + V_ZECIMALE_SUMA IN NUMBER) + RETURN NUMBER; + + FUNCTION calculeaza_total_tva(V_PRET IN NUMBER, + V_AJUSTARE IN NUMBER, + V_CURS IN NUMBER, + V_DISCOUNT_UNITAR IN NUMBER, + V_DISCOUNT_EVIDENTIAT IN NUMBER, + V_CANTITATE IN NUMBER, + V_PRET_CU_TVA IN NUMBER, + V_PROC_TVAV IN NUMBER) + RETURN NUMBER; + + FUNCTION calculeaza_total_tva(V_PRET IN NUMBER, + V_AJUSTARE IN NUMBER, + V_CURS IN NUMBER, + V_DISCOUNT_UNITAR IN NUMBER, + V_DISCOUNT_EVIDENTIAT IN NUMBER, + V_CANTITATE IN NUMBER, + V_PRET_CU_TVA IN NUMBER, + V_PROC_TVAV IN NUMBER, + V_ZECIMALE_PRET IN NUMBER, + V_ZECIMALE_SUMA IN NUMBER) + RETURN NUMBER; + + FUNCTION calculeaza_total_fara_tva_fact(V_PRET IN NUMBER, + V_DIFERENTA IN NUMBER, + V_CURS IN NUMBER, + V_DISCOUNT_UNITAR IN NUMBER, + V_DISCOUNT_EVIDENTIAT IN NUMBER, + V_CANTITATE IN NUMBER, + V_PRET_CU_TVA IN NUMBER, + V_PROC_TVAV IN NUMBER) + RETURN NUMBER; + + FUNCTION calculeaza_total_tva_fact(V_PRET IN NUMBER, + V_DIFERENTA IN NUMBER, + V_CURS IN NUMBER, + V_DISCOUNT_UNITAR IN NUMBER, + V_DISCOUNT_EVIDENTIAT IN NUMBER, + V_CANTITATE IN NUMBER, + V_PRET_CU_TVA IN NUMBER, + V_PROC_TVAV IN NUMBER) + RETURN NUMBER; + + PROCEDURE actualizeaza_vanzari(V_COD_VECHI IN NUMBER, + V_COD_NOU IN NUMBER); + + PROCEDURE sterge_din_vanzari(V_COD IN NUMBER, + V_AN IN NUMBER, + V_LUNA IN NUMBER, + V_ID_UTIL IN NUMBER); + + PROCEDURE verifica_cursuri_valute(V_DATA_CURS IN DATE, + V_ID_UTIL IN NUMBER); + + PROCEDURE verifica_total_document; + + PROCEDURE verifica_analitice378; + + function GetAnaliticByGrupUtilizatori(tnIdUtilizator ACT.ID_UTIL%TYPE, + tcCont ACT.SCD%TYPE) + return ACT.ASCD%TYPE; + + FUNCTION GetAnaliticByArticol(tcCont RUL.CONT%TYPE, + tnIdGestiune RUL.ID_GESTIUNE%TYPE DEFAULT NULL, + tnIdArticol RUL.ID_ARTICOL%TYPE DEFAULT NULL) + return RUL.ACONT%TYPE; + + Procedure citeste_vanzari_seturi(V_COD IN NUMBER, + V_CURSOR OUT cursor_facturare); + + Procedure citeste_proforme_seturi(V_ID_PROFORMA IN NUMBER, + V_CURSOR OUT cursor_facturare); + + procedure adauga_note_tva_incasare; + + function citeste_lungcampexplart return NUMBER; + + function getAnaliticK(tnProcTvaV IN NUMBER) return VARCHAR2; + + procedure getSoldClient(tnAn IN NUMBER, + tnLuna IN NUMBER, + tnIdPart IN NUMBER, + tnIdFact IN NUMBER default 0, + V_CURSOR OUT cursor_facturare); +end PACK_FACTURARE; +/ +CREATE OR REPLACE PACKAGE BODY "PACK_FACTURARE" is + -- ultima eroare atribuita : FACT-024 + + -- 09.02.2010 + -- marius.mutu + -- la vanzarea din stoc din ROARETAIL - aflu preturile de achizitie/vanzare, seria, gestiunea si trebuie sa intru pe ramura default + -- DESCARCAREA DE GESTIUNE OFFLINE TREBUIE RESCRISA SA FOLOSEASCA PROCEDURA PACK_RETAIL_STOC.SALVEAZABON + + -- 29.03.2010 + -- marius.mutu + -- adaugare GetAnaliticByArticol pentru obtinerea analiticului 607,608, 378,388 + -- dupa configurare_analitice pe gestiuni/articole in procedura descarcare_gestiune + + -- 08.07.2010 + -- marius.mutu + -- descarca_gestiune - In mesaj Eroare FACT-007 se afiseaza Id gestiune, Id articol + + -- 11.08.2010 + -- marius.mutu + -- scrie_incasari, transmit parametri V_SCD, V_ASCD la scrie_incasare2 + optiune pentru CONT DEBIT V_SCD + + -- 08.11.2010 + -- transfera_articol + -- (25040,41) - retur transfer catre subunitati lista pret ( 25050 - daca e cu scadere din gestiune ) + -- la retur transfer, trebuie schimbat semnul diferentei de pret + + -- 05.07.2011 + -- marius.mutu + -- contabilizeaza_articol - tratare exceptie NO_DATA_FOUND FACT-024 + + -- 13.01.2014 + -- marius.mutu + -- Am completat ID_RESPONSABIL la instructiunile INSERT INTO ACT_TEMP + + -- 03.02.2015 + -- marius.mutu + -- citeste_setari_document: adaugat PROFORMA, BON FISCAL + + -- 16.02.2015 + -- marius.mutu + -- CURSOR_PRETURI + -- FACTURARE LISTA PRETURI: se selecteaza toate articolele din lista de preturi, indiferent daca au stoc > 0 + -- optiunea RF_FACTURARE_FARA_STOC = 1 + -- descarca_gestiune: se pot vinde pe factura si articole retur (cante < 0) si articole care nu sunt in stoc (RF_FACTURARE_FARA_STOC) + + -- 06.03.2015 + -- marius.mutu + -- descarca_gestiune: la factura de vanzare lista de preturi se descarca mai intai + -- articolele retur din facturi anterioare, apoi + -- articolele din stoc (indiferent daca cantitate este pozitiva sau negativa), apoi + -- articolele fara stoc (RF_FACTURARE_FARA_STOC) + -- asa se pot factura articole din stoc, cu cantitate < 0 (retur, fara factura anterioara) + + -- 30.04.2015 + -- marius.mutu + -- descarca gestiune: la factura de vanzare lista de preturi s-au pus 2 ramuri + -- tip = 1 daca exista cantitate retur < 0 si lista articole retur din rulaj + tip = 2,3 + -- tip = 2,3 daca nu exista cantitate retur < 0 + lista articole retur din rulaj + -- pentru ca la conpress group statea sa parcurga tot rulajul de la tip = 1, chiar daca v_cante nu era < 0 + + -- 16.06.2015 + -- marius.mutu + -- modifica_date_factura + -- + id_facturare,listare_detaliata + + -- 01.02.2016 + -- marius.mutu + -- cumuleaza_note_act + -- sterg inregistrarile cu suma 0 doar daca am inregistrari cu suma <> 0 + -- altfel nu se inregistreaza nimic in Reg. Jurnal ACT, doar in RUL si VANZARI/VANZARI_DETALII + + -- getAnaliticK: tratare caz cota TVA 1.24, 1.20, 1.19 + + -- 18.03.2016 + -- marius.mutu + -- descarca_gestiune: PROC_TVAV_ORIG se ia din STOC daca este gestiune mf la pret de vz sau stoc.proc_tvav <> 0 + -- in loc sa se calculeze pack_sesiune.tva2proctva + + -- 14.07.2016 + -- marius.mutu + -- modifica_date_factura - adaugare parametru V_TEXT_ADITIONAL + + -- 08.12.2016 + -- marius.mutu + -- cursor_avize - factura din aviz. se iau si cantitatile negative, nu numai cele pozitive (avize de retur) + + -- 12.12.2016 + -- marius.mutu + -- scrie_factura_avize - daca articolele aveau discount unitar si nu era evidentiat distinct contabil, valoarea 4111 = 418 era (pret diminuat cu discount) - discount + -- am facut discountul = 0 pe ramura cu discount neevidentiat in notele contabile, dupa ce l-am extras din pret. + + -- 03.02.2017 + -- marius.mutu + -- cursor_preturi - la factura in valuta nu aducea articole discount 667. nu stiu de ce. la facturile in lei nu era restrictia. + + -- 03.02.2017 + -- marius.mutu + -- cursor_preturi - aviz de expeditie - se afiseaza si articole negestionabile + + -- 20.03.2017 + -- marius.mutu + -- denormalizare vanzari - completare date redundante pentru a nu se mai selecta de fiecare data pentru fact_vfacturi + -- scrie_incasari - se completeaza pack_Facturi.ntip_doc_incasare CHITANTA/BON FISCAL + -- scrie_in_vanzari - completare vanzari cu sume calculate din vanzari_detalii si act pentru a nu se mai calcula la fiecare selectie din fact_vfacturi + -- scrie_corespondente_vanzari - completare vanzari.avize cu seria/nr avize facturate pentru a nu se mai selecta din fact_vdetalii_avize + + -- 11.10.2017 + -- marius.mutu + -- pack_facturare.getAnaliticK - se folosesc optiuni noi pentru fiecare cota TVA + + -- 27.10.2017 + -- marius.mutu + -- pack_facturare.descarca_gestiune - vanzare de articole fara stoc - analiticul se completeaza conform configurarilor + + -- 16.03.2018 + -- marius.mutu + -- scrie_factura2 - tratare aviz retur tip = 24 + + -- 05.02.2019 + -- marius.mutu + -- scrie_in_vanzari, finalizeaza_avize_lucrare: corectate vanzari.total_fara_tva si total_cu_tva pe ramura cu seturi + + -- 21.03.2019 + -- marius.mutu + -- citeste_setari_document: adaugat FACTURA ROAACNPRO 51 + + -- 10.04.2019 + -- marius.mutu + -- adauga_articol_factura_stoc, adauga_articol_factura_deviz - completare VANZARI_DETALII_TEMP.ID_TEMP CU 0 (NOT NULL) + -- scrie_in_vanzari tip = 51 factura ACN + + -- 09.08.2019 + -- marius.mutu + -- adauga_articol_factura_deviz : V_ID_CTR + -- scrie_in_vanzari: VANZARI_DETALII_TEMP.ID_JTVA_COLOANA_EX + + -- 28.08.2019 + -- marius.mutu + -- finalizeaza_factura - completez id_fact + -- scrie_in_vanzari - completeaza data_scad, id_ctr + -- scrie_in_vanzari - completeaza id_valuta, curs, multiplicator. nu stiu de ce nu se completau + + -- 02.09.2019 + -- marius.mutu + -- scrie_in_vanzari - completeaza vanzari.valval, tvaval, totval + + -- 29.10.2019 + -- marius.mutu + -- sterge_factura pack_acn.sterge_vanzare pentru tip = 51 (ROAACNPRO) + -- initializeaza_date_factura, scrie_in_vanzari - completare vanzari.tip_factura, id_beneficiar + + -- 06.11.2019 + -- marius.mutu + -- scrie_nota, scrie_tva, verifica_totaluri - tratare cont 709 (rabat), la fel ca si 667 (discount) + + -- 03.07.2020 + -- marius.mutu + -- initializeaza_date_factura se initializeaza cu NULL ntip_doc_incasare, nsuma_incasare, clistaid_avize + -- ramaneau completate pe facturile urmatoare de la o factura anterioara + + -- 28.01.2021 + -- marius.mutu + -- MODIFICARE PACK_FACTURARE.SCRIE_PROFORMA, STERGE_PROFORMA sa scrie in VANZARI + -- + PACK_FACTURARE.cursor_retur_document = PACK_FACTURARE.cursor_retur + parametrul eproforma + + -- 26.03.2021 + -- marius.mutu + -- cursor_retur_document + parametru v_copiere, pentru atributul gestionabil + + -- 05.07.2021 + -- marius.mutu + -- scrie_in_vanzari - text aditional repl chr(170) cu chr(13) + chr(10) - bug da eroare la CHR(13) + chr(10) + + -- 27.07.2021 + -- marius.mutu + -- cursor_retur_document - completat cu coloane din vanzari_detalii + + -- 22.11.2021 + -- marius.mutu + -- scrie_incasare2 - INCASARE CARD 5125 IN LOC DE 5312 + -- citeste_setari_document + + -- 26.11.2021 + -- marius.mutu + -- scrie_incasari - initializare ntip_doc_incasare cu ultimul tip de incasare folosit + + -- 04.03.2022 + -- scrie_tva - explicatia in registrul jurnal fara 'TVA ' + + -- 22.03.2022 + -- ADAUGA_ARTICOL_FACTURA, ADAUGA_ARTICOL_FACTURA_DEVIZ, ADAUGA_ARTICOL_FACTURA_STOC, adauga_rata_factura, cumuleaza_note_act + V_TAXCODE (COD TAXA SAFT) + -- incasari - SAFT ACT.paymentcode + + -- 27.03.2022 + -- ADAUGA_ARTICOL_FACTURA, ADAUGA_ARTICOL_FACTURA_DEVIZ, ADAUGA_ARTICOL_FACTURA_STOC, adauga_rata_factura, TAXCODE NULL + + -- 09.06.2022 + -- SCRIE_TVA: COMPLETEAZA TAXCODE PE LINIA DE TVA + + -- 24.06.2022 + -- modifica_date_factura - COMPLETARE VANZARI.TIP_SAFT + + -- 27.01.2023 + -- scrie_in_vanzari corectare calcul valori in lei, daca factura este in valuta, total_ron = sum(pret_ron * cantitatea), in loc de total_valuta * curs + + -- 08.02.2023 + -- modifica_date_factura + efactura + + -- 22.02.2023 + -- scrie_in_vanzari corectare calcul valori in lei, daca factura este in valuta sau invoice, total_ron = sum(pret_ron * cantitatea), in loc de total_valuta * curs + + -- 08.05.2023 + -- verifica_total_document - completare TAXCODE SAFT + -- scrie_nota - tratare 512x - la incasarea cu cardul 5125 se aduna si suma de plata la total, apoi se scadea la verifica_total_document + + -- 22.05.2023 + -- modifica_explicatie_articol - completare TAXCODE SAFT + + -- 13.06.2023 + -- scriere ID_JTVA_COLOANA, SAFT.TAXCODE in RUL + -- descarca_gestiune + ID_JTVA_COLOANA, TAXCODE + -- facturare_articole2, contabilizeaza_articol > descarca_gestiune + + -- finalizeaza_factura - corectie vanzari.id_Fact daca factura este incasata + + -- 09.10.2023 + -- + getSoldClient + + -- 09.11.2023 + -- verifica_total_document - se exclud notele 512x = 4111 din valoarea facturii + + -- 17.11.2023 + -- adaugat tipul 52 factura fiscala in valuta pe contract + -- scrie_factura2 + + -- 22.11.2023 + -- getSoldClient - nu mai scad soldul 419. Presupun ca pentru avansuri 419 se emit facturi de avans 4111 si se storneaza avansul 419 pe factura finala + + -- 10.12.2023 + -- descarca_gestiune - 345: pun 711 = 345 valoare de achizitie, in loc de valoarea de vanzare + -- descarca_gestiune - 345: am pus 348 = 345, in loc de 348 = 711 + -- descarca_gestiune - 345: Se inregistreaza 345 = 348, 348 = 345 doar daca lnDescarcare345FaraAdaos = 0 + + -- 21.12.2023 scrie_nota - scrie_discount se completeaza taxcode pe linia 667 = 4111 + + -- 15.01.2024 + -- scrie_discount - corectie note 667 = 4111 pentru bonuri fiscale magazine, tip 43, scria 667 = 418 + + -- 23.04.2024 + -- GetAnaliticByGrupUtilizatori: se tine cont de inregistrarile sterse + + -- 04.06.2024 + -- cursor_gestiuni_articol, adauga_articol_factura, adauga_articol_factura_stoc, adauga_articol_factura_deviz, scrie_in_vanzari + LOT + + -- 18.10.2024 + -- initializeaza_date_factura.tip_saft + + -- 23.06.2025 + -- pack_facturare.modifica_date_factura - se pot modifica data_act, data_scad, numar_Act, serie_act + + -- 17.09.2025 + -- contabilizeaza_articol - limitare explicatie la 100 caractere + -- scrie_corespondente_vanzari - VANZARI.AVIZE maxim 1000 caractere + + PROCEDURE verificare_setari_program(V_ID_UTIL IN NUMBER, + V_MESAJ OUT VARCHAR2) IS + V_NR_INREGISTRARI NUMBER(5); + V_ID_TIPENTITATE SERII_TIPENTITATI.ID_TIPENTITATE%TYPE; + V_LUNA DATE; + BEGIN + V_MESAJ := NULL; + V_LUNA := to_date(pack_sesiune.getan() || pack_sesiune.getluna(), + 'YYYYMM'); + + -- verificare drepturi politici de preturi + SELECT COUNT(ID_POLITICA) + INTO V_NR_INREGISTRARI + FROM UTILIZATORI_ROL_INTERN A + LEFT JOIN POLITICI_GRUPURI B + ON A.ID_GRUP = B.ID_GRUP + WHERE A.STERS = 0 + AND B.STERS = 0 + AND A.ID_UTIL = V_ID_UTIL; + + IF V_NR_INREGISTRARI = 0 THEN + V_MESAJ := 'Nu aveti drepturi pe politicile de preturi! (ROAPRETURI)'; + END IF; + -- + -- verificare setari bonuri + SELECT ID_TIPENTITATE + INTO V_ID_TIPENTITATE + FROM SERII_TIPDOC + WHERE ID_TIPDOC = pack_facturare.nid_tipbon; + + CASE + WHEN V_ID_TIPENTITATE = 1 THEN + -- pe gestiuni + SELECT COUNT(B.ID_GESTIUNE) + INTO V_NR_INREGISTRARI + FROM GEST_CORESP_UTIL_GRUPE A + LEFT JOIN GEST_CORESP_GRUPE_GESTIUNI B + ON A.ID_GRUPE = B.ID_GRUPE + WHERE A.STERS = 0 + AND B.STERS = 0 + AND A.ID_UTIL = V_ID_UTIL + AND B.ID_GESTIUNE IN + (SELECT ID_ENTITATE + FROM PLAJE_NUMERE + WHERE STERS = 0 + AND INACTIV = 0 + AND ID_TIPDOC = pack_facturare.nid_tipbon + AND ID_TIPENTITATE = V_ID_TIPENTITATE + AND V_LUNA BETWEEN DATAI AND DATAS); + + IF V_NR_INREGISTRARI = 0 THEN + V_MESAJ := V_MESAJ || CHR(13) || CHR(10) || + 'Nu aveti drepturi pe gestiunile pentru care sunt configurate seriile de bonuri! (ROAGEST)'; + END IF; + + WHEN V_ID_TIPENTITATE = 2 THEN + -- o singura serie + V_MESAJ := V_MESAJ; + + WHEN V_ID_TIPENTITATE = 3 THEN + -- pe gestionar + SELECT COUNT(ID_PLAJA) + INTO V_NR_INREGISTRARI + FROM PLAJE_NUMERE + WHERE STERS = 0 + AND INACTIV = 0 + AND ID_TIPDOC = pack_facturare.nid_tipbon + AND ID_TIPENTITATE = V_ID_TIPENTITATE + AND V_LUNA BETWEEN DATAI AND DATAS; + + IF V_NR_INREGISTRARI = 0 THEN + V_MESAJ := V_MESAJ || CHR(13) || CHR(10) || + 'Nu aveti setata plaja de numere pentru bonuri! (ROAGEST)'; + END IF; + + ELSE + V_MESAJ := V_MESAJ || CHR(13) || CHR(10) || + 'Setare incorecta pentru seriile de bonuri! (ROAGEST)'; + END CASE; + + -- verificare drepturi gestiuni + SELECT COUNT(ID_GESTIUNE) + INTO V_NR_INREGISTRARI + FROM GEST_CORESP_UTIL_GRUPE A + LEFT JOIN GEST_CORESP_GRUPE_GESTIUNI B + ON A.ID_GRUPE = B.ID_GRUPE + WHERE A.STERS = 0 + AND B.STERS = 0 + AND A.ID_UTIL = V_ID_UTIL; + + IF V_NR_INREGISTRARI = 0 THEN + V_MESAJ := V_MESAJ || CHR(13) || CHR(10) || + 'Nu aveti drepturi pe gestiuni! (ROAGEST)'; + END IF; + + -- verificare curs valutar + SELECT COUNT(ID_CURS) + INTO V_NR_INREGISTRARI + FROM CURS A + WHERE A.STERS = 0 + AND A.DATA <= TRUNC(SYSDATE) + AND A.DATA2 >= TRUNC(SYSDATE); + + IF V_NR_INREGISTRARI = 0 THEN + V_MESAJ := V_MESAJ || CHR(13) || CHR(10) || + 'Nu este setat cursul valutar pentru ziua de azi!'; + END IF; + + IF V_MESAJ IS NOT NULL THEN + V_MESAJ := V_MESAJ || CHR(13) || CHR(10) || CHR(13) || CHR(10) || + 'Faceti setarile necesare! '; + END IF; + + END verificare_setari_program; + ------------------------------------------------------------------- + PROCEDURE initializeaza_facturare(V_ID_UTIL IN NUMBER) IS + V_DENUMIRE_POL CRM_POLITICI_PRETURI.NUME_LISTA_PRETURI%TYPE; + BEGIN + pack_facturare.initializeaza_moneda_nationala(); + /* pack_facturare.nzecimale_pretval := PACK_SESIUNE.getoptiunefirma(USER, + 'PVAL'); + pack_facturare.nzecimale_sumaval := pack_facturare.nzecimale_pretval; + pack_facturare.nzecimale_preta := PACK_SESIUNE.getoptiunefirma(USER, + 'PPRET'); + pack_facturare.nzecimale_sumaa := PACK_SESIUNE.getoptiunefirma(USER, + 'PC'); + pack_facturare.nzecimale_pretv := PACK_SESIUNE.getoptiunefirma(USER, + 'PPRETV'); + pack_facturare.nzecimale_sumav := pack_facturare.nzecimale_sumaa;*/ + pack_facturare.nzecimale_procent := 3; + pack_facturare.citeste_setari_pol_pret(1, + V_ID_UTIL, + pack_facturare.nid_politica_stoc, + V_DENUMIRE_POL); + END initializeaza_facturare; + ------------------------------------------------------------------- + PROCEDURE initializeaza_seturi_temp IS + begin + DELETE FROM VANZARI_SETURI_TEMP; + end initializeaza_seturi_temp; + ------------------------------------------------------------------- + PROCEDURE initializeaza_date_factura(V_DATA_IREG IN DATE, + V_ID_FDOC IN NUMBER, + V_DATA_ACT IN DATE, + V_DATA_SCADENTA IN DATE, + V_SERIE_FACTURA IN VARCHAR2, + V_NUMAR_ACT IN NUMBER, + V_ID_CLIENT IN NUMBER, + V_ID_LUCRARE IN NUMBER, + V_ID_SECTIE IN NUMBER, + V_ID_VENCHELT IN NUMBER, + V_ID_RESPONSABIL IN NUMBER, + V_LISTAID IN VARCHAR2, + V_DESCRIERE IN VARCHAR2, + V_TIP IN NUMBER, + V_ID_SET IN NUMBER, + V_DATA_CURS IN DATE, + V_ID_VALUTA IN NUMBER, + V_IN_VALUTA IN NUMBER, + V_TVA_INCASARE IN NUMBER, + V_ID_SUCURSALA IN NUMBER, + V_ID_UTIL IN NUMBER) IS + begin + -- pentru compatibilitate cu restul aplicatiilor care apeleaza fara v_explicatia4, v_id_ordl + pack_facturare.initializeaza_date_factura(V_DATA_IREG, + V_ID_FDOC, + V_DATA_ACT, + V_DATA_SCADENTA, + V_SERIE_FACTURA, + V_NUMAR_ACT, + V_ID_CLIENT, + V_ID_LUCRARE, + V_ID_SECTIE, + V_ID_VENCHELT, + V_ID_RESPONSABIL, + NULL, + NULL, + V_LISTAID, + V_DESCRIERE, + V_TIP, + V_ID_SET, + V_DATA_CURS, + V_ID_VALUTA, + V_IN_VALUTA, + V_TVA_INCASARE, + V_ID_SUCURSALA, + V_ID_UTIL, + NULL, + NULL, + NULL); + end initializeaza_date_factura; + ------------------------------------------------------------------- + PROCEDURE initializeaza_date_factura(V_DATA_IREG IN DATE, + V_ID_FDOC IN NUMBER, + V_DATA_ACT IN DATE, + V_DATA_SCADENTA IN DATE, + V_SERIE_FACTURA IN VARCHAR2, + V_NUMAR_ACT IN NUMBER, + V_ID_CLIENT IN NUMBER, + V_ID_LUCRARE IN NUMBER, + V_ID_SECTIE IN NUMBER, + V_ID_VENCHELT IN NUMBER, + V_ID_RESPONSABIL IN NUMBER, + V_EXPLICATIA4 IN VARCHAR2, + V_LISTAID IN VARCHAR2, + V_DESCRIERE IN VARCHAR2, + V_TIP IN NUMBER, + V_ID_SET IN NUMBER, + V_DATA_CURS IN DATE, + V_ID_VALUTA IN NUMBER, + V_IN_VALUTA IN NUMBER, + V_TVA_INCASARE IN NUMBER, + V_ID_SUCURSALA IN NUMBER, + V_ID_UTIL IN NUMBER) IS + BEGIN + -- pentru compatibilitate cu restul aplicatiilor care apeleaza fara v_id_ordl + pack_facturare.initializeaza_date_factura(V_DATA_IREG, + V_ID_FDOC, + V_DATA_ACT, + V_DATA_SCADENTA, + V_SERIE_FACTURA, + V_NUMAR_ACT, + V_ID_CLIENT, + V_ID_LUCRARE, + V_ID_SECTIE, + V_ID_VENCHELT, + V_ID_RESPONSABIL, + V_EXPLICATIA4, + NULL, + V_LISTAID, + V_DESCRIERE, + V_TIP, + V_ID_SET, + V_DATA_CURS, + V_ID_VALUTA, + V_IN_VALUTA, + V_TVA_INCASARE, + V_ID_SUCURSALA, + V_ID_UTIL, + NULL, + NULL, + NULL); + END initializeaza_date_factura; + + ------------------------------------------------------------------- + PROCEDURE initializeaza_date_factura(V_DATA_IREG IN DATE, + V_ID_FDOC IN NUMBER, + V_DATA_ACT IN DATE, + V_DATA_SCADENTA IN DATE, + V_SERIE_FACTURA IN VARCHAR2, + V_NUMAR_ACT IN NUMBER, + V_ID_CLIENT IN NUMBER, + V_ID_LUCRARE IN NUMBER, + V_ID_SECTIE IN NUMBER, + V_ID_VENCHELT IN NUMBER, + V_ID_RESPONSABIL IN NUMBER, + V_EXPLICATIA4 IN VARCHAR2, + V_ID_ORDL IN NUMBER, + V_LISTAID IN VARCHAR2, + V_DESCRIERE IN VARCHAR2, + V_TIP IN NUMBER, + V_ID_SET IN NUMBER, + V_DATA_CURS IN DATE, + V_ID_VALUTA IN NUMBER, + V_IN_VALUTA IN NUMBER, + V_TVA_INCASARE IN NUMBER, + V_ID_SUCURSALA IN NUMBER, + V_ID_UTIL IN NUMBER) IS + BEGIN + -- pentru compatibilitate cu restul aplicatiilor care apeleaza fara v_tip_factura, v_id_beneficiar + pack_facturare.initializeaza_date_factura(V_DATA_IREG, + V_ID_FDOC, + V_DATA_ACT, + V_DATA_SCADENTA, + V_SERIE_FACTURA, + V_NUMAR_ACT, + V_ID_CLIENT, + V_ID_LUCRARE, + V_ID_SECTIE, + V_ID_VENCHELT, + V_ID_RESPONSABIL, + V_EXPLICATIA4, + V_ID_ORDL, + V_LISTAID, + V_DESCRIERE, + V_TIP, + V_ID_SET, + V_DATA_CURS, + V_ID_VALUTA, + V_IN_VALUTA, + V_TVA_INCASARE, + V_ID_SUCURSALA, + V_ID_UTIL, + NULL, + NULL, + NULL); + END initializeaza_date_factura; + + ------------------------------------------------------------------- + PROCEDURE initializeaza_date_factura(V_DATA_IREG IN DATE, + V_ID_FDOC IN NUMBER, + V_DATA_ACT IN DATE, + V_DATA_SCADENTA IN DATE, + V_SERIE_FACTURA IN VARCHAR2, + V_NUMAR_ACT IN NUMBER, + V_ID_CLIENT IN NUMBER, + V_ID_LUCRARE IN NUMBER, + V_ID_SECTIE IN NUMBER, + V_ID_VENCHELT IN NUMBER, + V_ID_RESPONSABIL IN NUMBER, + V_EXPLICATIA4 IN VARCHAR2, + V_ID_ORDL IN NUMBER, + V_LISTAID IN VARCHAR2, + V_DESCRIERE IN VARCHAR2, + V_TIP IN NUMBER, + V_ID_SET IN NUMBER, + V_DATA_CURS IN DATE, + V_ID_VALUTA IN NUMBER, + V_IN_VALUTA IN NUMBER, + V_TVA_INCASARE IN NUMBER, + V_ID_SUCURSALA IN NUMBER, + V_ID_UTIL IN NUMBER, + V_TIP_FACTURA IN NUMBER, + V_ID_BENEFICIAR IN NUMBER, + V_TIP_SAFT IN NUMBER DEFAULT 380) IS + BEGIN + DELETE FROM VANZARI_DETALII_TEMP; + pack_facturare.nid_act := 0; + pack_facturare.ntotftva := 0; + pack_facturare.ntottva := 0; + pack_facturare.ndifftva := 0; + pack_facturare.ndiftva := 0; + pack_facturare.nid_fact := -1; + + pack_facturare.nfactavizcust := 0; + pack_facturare.nid_util := V_ID_UTIL; + pack_facturare.nid_sucursala := V_ID_SUCURSALA; + + pack_facturare.initializeaza_facturare(pack_facturare.nid_util); + pack_facturare.initializeaza_seturi_temp(); + + v_date_gestiune.id_gestiune := NULL; + v_date_gestiune.id_tip_gest := NULL; + v_date_gestiune.cont := NULL; + v_date_gestiune.acont := NULL; + + pack_facturare.ndiscount_evidentiat := PACK_SESIUNE.getoptiunefirma(USER, + 'DISCOUNTEVIDENTIAT'); + pack_facturare.cascd := NULL; + pack_facturare.cascc := NULL; + pack_facturare.nid_jtva_coloana := NULL; + pack_facturare.nTaxCode := NULL; + pack_facturare.ddata_curs := V_DATA_CURS; + pack_facturare.ddata_ireg := V_DATA_IREG; + pack_facturare.nid_fdoc := V_ID_FDOC; + pack_facturare.ddata_act := V_DATA_ACT; + pack_facturare.ddata_scadenta := V_DATA_SCADENTA; + pack_facturare.cserie_act := TRIM(V_SERIE_FACTURA); + pack_facturare.nnumar_act := V_NUMAR_ACT; + IF V_TIP IN (23, 25, 27, 30, 41, -6) THEN + pack_facturare.nid_gestiune_sursa := V_ID_CLIENT; + pack_facturare.nid_part := 0; + ELSE + pack_facturare.nid_gestiune_sursa := 0; + pack_facturare.nid_part := V_ID_CLIENT; + END IF; + pack_facturare.nid_lucrare := nvl(V_ID_LUCRARE, 0); + pack_facturare.nid_venchelt := V_ID_VENCHELT; + pack_facturare.nid_sectie_stoc := V_ID_SECTIE; + pack_facturare.nid_responsabil := V_ID_RESPONSABIL; + pack_facturare.nid_ordl := V_ID_ORDL; + pack_facturare.cexplicatia4 := V_EXPLICATIA4; + pack_facturare.nid_set := V_ID_SET; + pack_facturare.ntip := V_TIP; + pack_facturare.clistaid := V_LISTAID; + pack_facturare.cdescriere := V_DESCRIERE; + pack_facturare.nproc_tva_max := -1; + pack_facturare.clista_cursuri := NULL; + pack_facturare.nperechec := 0; + pack_facturare.nid_factc := 0; + pack_facturare.nid_partc := 0; + pack_facturare.nan := EXTRACT(YEAR FROM V_DATA_IREG); + pack_facturare.nluna := EXTRACT(MONTH FROM V_DATA_IREG); + pack_facturare.ntva_incasare := V_TVA_INCASARE; + pack_facturare.cserie_act_incasare := NULL; + pack_facturare.nnumar_act_incasare := NULL; + + pack_facturare.ntip_doc_incasare := NULL; + pack_facturare.nsuma_incasare := NULL; + pack_facturare.clistaid_avize := NULL; + + pack_facturare.verifica_analitice378(); + + pack_facturare.nin_valuta := V_IN_VALUTA; + pack_facturare.nid_valuta := V_ID_VALUTA; + + IF pack_facturare.ntip IN (3, 21, 28, 42, 47) THEN + -- facturare de pe comanda + -- aviz de pe comanda + pack_facturare.nid_comanda := to_number(pack_facturare.clistaid); + ELSE + pack_facturare.nid_comanda := NULL; + END IF; + + pack_facturare.ntip_factura := V_TIP_FACTURA; + pack_facturare.nid_beneficiar := V_ID_BENEFICIAR; + pack_facturare.ntip_saft := V_TIP_SAFT; + + END initializeaza_date_factura; + ------------------------------------------------------------------- + PROCEDURE initializeaza_setari_facturare IS + BEGIN + BEGIN + SELECT TO_NUMBER(NVL(VARVALUE, '0')) + INTO pack_facturare.nscadere_stoc + FROM OPTIUNI + WHERE PROGRAM = pack_facturare.cnume_program + AND VARNAME = 'SCADERESTOC'; + + IF pack_facturare.nscadere_stoc = 1 AND pack_facturare.ntip <> 4 THEN + SELECT MAX(NVL(IN_STOC, 0)) + INTO pack_facturare.nscadere_stoc + FROM VANZARI_DETALII_TEMP + WHERE ID_RATA IS NULL; + + IF pack_facturare.nscadere_stoc = 1 THEN + pack_serii_numere.aloca_numar(pack_facturare.nid_tipbon, + NULL, + pack_facturare.nid_gestiune_sursa, + pack_facturare.nid_util, + pack_facturare.nid_sucursala, + pack_facturare.nnumar_bon); + END IF; + END IF; + EXCEPTION + WHEN NO_DATA_FOUND THEN + pack_facturare.nscadere_stoc := 0; + END; + END initializeaza_setari_facturare; + ------------------------------------------------------------------- + PROCEDURE initializeaza_date_gestiune(V_ID_GESTIUNE IN NUMBER, + V_ID_TIPGEST IN NUMBER, + V_CONT IN VARCHAR2, + V_ACONT IN VARCHAR2) IS + BEGIN + v_date_gestiune.id_gestiune := V_ID_GESTIUNE; + v_date_gestiune.id_tip_gest := V_ID_TIPGEST; + v_date_gestiune.cont := V_CONT; + v_date_gestiune.acont := V_ACONT; + END initializeaza_date_gestiune; + ------------------------------------------------------------------- + PROCEDURE citeste_setari_document(V_TIP IN NUMBER, + V_ID_FDOC OUT NUMBER, + V_FDOC OUT VARCHAR2) IS + V_VARNAME OPTIUNI.VARNAME%TYPE; + BEGIN + CASE + WHEN V_TIP BETWEEN 1 AND 20 OR V_TIP BETWEEN - 4 AND - 1 OR + V_TIP IN (-8, -11, -12, 45, 48, 49, 50, 51, 52) THEN + -- id_fdoc_factura + V_VARNAME := 'ID_FDOC_FACT'; + WHEN V_TIP IN (24, 41, -6, -7, -13) THEN + -- id_fdoc_aviz_retur + V_VARNAME := 'ID_FDOC_AVIZ_RETUR'; + WHEN V_TIP BETWEEN 21 AND 40 OR V_TIP in (47, 42, -9, -10) THEN + -- id_fdoc_aviz + V_VARNAME := 'ID_FDOC_AVIZ'; + WHEN V_TIP = 0 THEN + -- id_fdoc_compensare + V_VARNAME := 'ID_FDOC_COMPENSARE'; + WHEN V_TIP = -100 THEN + -- id_fdoc_chitanta + V_VARNAME := 'ID_FDOC_CHITANTA'; + WHEN V_TIP = -101 THEN + -- id_fdoc_bonfiscal + V_VARNAME := 'ID_FDOC_BONFISCAL'; + WHEN V_TIP = -102 THEN + -- id_fdoc_proforma + V_VARNAME := 'ID_FDOC_PROFORMA'; + WHEN V_TIP = -103 THEN + -- id_fdoc_card + V_VARNAME := 'ID_FDOC_CARD'; + ELSE + -- id_fdoc_factura + V_VARNAME := 'ID_FDOC_FACT'; + END CASE; + + BEGIN + SELECT TO_NUMBER(A.VARVALUE), B.FEL_DOCUMENT + INTO V_ID_FDOC, V_FDOC + FROM OPTIUNI A + LEFT JOIN NOM_FDOC B + ON TO_NUMBER(A.VARVALUE) = B.ID_FDOC + WHERE A.VARNAME = V_VARNAME + AND (A.PROGRAM = pack_facturare.cnume_program OR + A.PROGRAME LIKE '%' || pack_facturare.cnume_program || '%') + AND B.STERS = 0; + EXCEPTION + WHEN NO_DATA_FOUND THEN + V_ID_FDOC := NULL; + V_FDOC := ''; + END; + END citeste_setari_document; + ------------------------------------------------------------------- + PROCEDURE citeste_setari_partener(V_TIP IN NUMBER, + V_ID_PART OUT NUMBER, + V_DENUMIRE OUT VARCHAR2) IS + V_VARNAME OPTIUNI.VARNAME%TYPE; + BEGIN + CASE + WHEN V_TIP = 0 THEN + -- id_part_banca_comp + V_VARNAME := 'ID_PART_BANCA_COMP'; + WHEN V_TIP = 1 THEN + V_VARNAME := 'ID_PART_CASA'; + END CASE; + + BEGIN + SELECT TO_NUMBER(A.VARVALUE), B.DENUMIRE + INTO V_ID_PART, V_DENUMIRE + FROM OPTIUNI A + LEFT JOIN NOM_PARTENERI B + ON TO_NUMBER(A.VARVALUE) = B.ID_PART + WHERE A.PROGRAM = pack_facturare.cnume_program + AND A.VARNAME = V_VARNAME + AND B.STERS = 0; + EXCEPTION + WHEN NO_DATA_FOUND THEN + V_ID_PART := NULL; + V_DENUMIRE := ''; + END; + END citeste_setari_partener; + ------------------------------------------------------------------- + PROCEDURE citeste_setari_pol_pret(V_TIP IN NUMBER, + V_ID_UTIL IN NUMBER, + V_ID_POL OUT NUMBER, + V_DENUMIRE OUT VARCHAR2) IS + BEGIN + BEGIN + CASE + WHEN V_TIP IN (23, 30, 41) THEN + SELECT TO_NUMBER(A.VARVALUE), B.NUME + INTO V_ID_POL, V_DENUMIRE + FROM OPTIUNI A + LEFT JOIN CRM_VPOLPRETCURUTIL B + ON TO_NUMBER(A.VARVALUE) = B.ID_POL + WHERE A.PROGRAM = pack_facturare.cnume_program + AND A.VARNAME = 'ID_POL_PRET_TR' + AND B.ID_UTIL = V_ID_UTIL; + WHEN V_TIP = 1 THEN + SELECT TO_NUMBER(A.VARVALUE), B.NUME + INTO V_ID_POL, V_DENUMIRE + FROM OPTIUNI A + LEFT JOIN CRM_VPOLPRETCURUTIL B + ON TO_NUMBER(A.VARVALUE) = B.ID_POL + WHERE A.PROGRAM = pack_facturare.cnume_program + AND A.VARNAME = 'ID_POL_PRET_STOC' + AND B.ID_UTIL = V_ID_UTIL; + WHEN V_TIP IN (48, 49) THEN + SELECT TO_NUMBER(A.VARVALUE), B.NUME + INTO V_ID_POL, V_DENUMIRE + FROM OPTIUNI A + LEFT JOIN CRM_VPOLPRETCURUTIL B + ON TO_NUMBER(A.VARVALUE) = B.ID_POL + WHERE A.PROGRAM = pack_facturare.cnume_program + AND A.VARNAME = 'IDPOLPRETFACTK' + AND B.ID_UTIL = V_ID_UTIL; + END CASE; + EXCEPTION + WHEN NO_DATA_FOUND THEN + V_ID_POL := NULL; + V_DENUMIRE := ''; + END; + END citeste_setari_pol_pret; + ------------------------------------------------------------------- + PROCEDURE genereaza_numar_proforma(V_NR_PROFORMA OUT NUMBER) IS + BEGIN + pack_serii_numere.dezaloca_numar(pack_facturare.nid_tipfactura); + + SELECT SEQ_NR_PROFORME.NEXTVAL INTO V_NR_PROFORMA FROM DUAL; + + pack_facturare.nnumar_act := V_NR_PROFORMA; + END genereaza_numar_proforma; + ------------------------------------------------------------------- + PROCEDURE completare_politica_stoc IS + BEGIN + IF pack_facturare.nid_politica_stoc IS NOT NULL THEN + MERGE INTO CRM_POLITICI_PRET_ART A + USING (SELECT ID_ARTICOL + FROM NOM_ARTICOLE + WHERE STERS = 0 + AND INACTIV = 0 + AND IN_STOC = 1) B + ON (A.ID_POL = pack_facturare.nid_politica_stoc AND A.ID_ARTICOL = B.ID_ARTICOL) + WHEN NOT MATCHED THEN + INSERT + (ID_POL, ID_ARTICOL, ID_VALUTA) + VALUES + (pack_facturare.nid_politica_stoc, + B.ID_ARTICOL, + pack_facturare.nid_moneda_nationala); + + UPDATE NOM_ARTICOLE + SET IN_CRM = 1 + WHERE ID_ARTICOL IN + (SELECT ID_ARTICOL + FROM CRM_POLITICI_PRET_ART + WHERE STERS = 0 + AND ID_POL = pack_facturare.nid_politica_stoc) + AND IN_CRM = 0; + END IF; + END completare_politica_stoc; + ------------------------------------------------------------------- + PROCEDURE modificare_politica_stoc(V_ID_POL IN NUMBER) is + BEGIN + UPDATE CRM_POLITICI_PRETURI + SET ID_VALUTA = pack_def.GetIdMonedaNationala() + WHERE ID_POL = V_ID_POL; + + UPDATE CRM_POLITICI_PRET_ART + SET PRET = 0, + PRETFTVA = 0, + PRETCTVA = 0, + PROC_TVAV = NULL, + DISCOUNT_UNITAR = NULL, + ID_VALUTA = pack_def.GetIdMonedaNationala() + WHERE ID_POL = V_ID_POL; + END modificare_politica_stoc; + ------------------------------------------------------------------- + PROCEDURE cursor_preturi(V_DATA_CURS IN DATE, + V_TIP IN NUMBER, + V_ID_VALUTA IN NUMBER, + V_ID_GESTIUNE_INIT IN NUMBER, + V_LUNA IN NUMBER, + V_AN IN NUMBER, + V_ID_UTIL IN NUMBER, + V_ID_SUCURSALA IN NUMBER, + V_CURSOR OUT cursor_facturare) IS + lnFacturareFaraStoc NUMBER(1) := 0; + BEGIN + pack_facturare.initializeaza_facturare(V_ID_UTIL); + + pack_facturare.completare_politica_stoc(); + + pack_facturare.verifica_cursuri_valute(V_DATA_CURS, V_ID_UTIL); + + -- FACTURARE LISTA PRETURI: se selecteaza toate articolele din lista de preturi, indiferent daca au stoc > 0 + lnFacturareFaraStoc := TO_NUMBER(NVL(pack_sesiune.getoptiunefirma('RF_FACTURARE_FARA_STOC'), + '0')); + + CASE + WHEN V_TIP = 45 THEN + -- factura restaurant + OPEN V_CURSOR FOR + SELECT rownum as id_c, + B.ID_ARTICOL, + NULL AS LOT, + NULL as SERIE, + A.ID_POL, + B.ID_VALUTA, + A.NUME_LISTA_PRETURI, + (CASE + WHEN NVL(G.MONEDA_NATIONALA, 1) <> 1 THEN + ROUND(NVL(F.CURS, 0) * + ROUND(NVL(B.DISCOUNT_UNITAR, 0), + pack_sesiune.nzecimale_pretvval) / + NVL(F.MULTIPLICATOR, 1), + pack_sesiune.nzecimale_pretv) + ELSE + ROUND(NVL(B.DISCOUNT_UNITAR, 0), + pack_sesiune.nzecimale_pretv) + END) AS DISCOUNT_UNITAR, + (CASE + WHEN NVL(G.MONEDA_NATIONALA, 1) <> 1 THEN + ROUND(NVL(B.DISCOUNT_UNITAR, 0), + pack_sesiune.nzecimale_pretvval) + ELSE + 0 + END) AS DISCOUNT_UNITAR_VAL, + C.CODMAT, + C.CODBARE, + C.DENUMIRE, + NVL(C.UM, '') AS UM, + C.IN_STOC AS GESTIONABIL, + 1 AS CANTITATE, + B.PROC_TVAV, + A.PRETURI_CU_TVA, + F.CURS, + F.MULTIPLICATOR, + (CASE + WHEN NVL(G.MONEDA_NATIONALA, 1) <> 1 THEN + ROUND(NVL(F.CURS, 0) * + ROUND(NVL(B.PRET, 0), + pack_sesiune.nzecimale_pretvval) / + NVL(F.MULTIPLICATOR, 1), + pack_sesiune.nzecimale_pretv) + ELSE + ROUND(NVL(B.PRET, 0), pack_sesiune.nzecimale_pretv) + END) AS PRET, + (CASE + WHEN NVL(G.MONEDA_NATIONALA, 1) <> 1 THEN + ROUND(NVL(B.PRET, 0), pack_sesiune.nzecimale_pretvval) + ELSE + 0 + END) AS PRET_VAL, + 1 - NVL(G.MONEDA_NATIONALA, 1) AS TIP_VALUTA, + G.NUME_VAL, + DECODE(A.ID_POL, + NVL(pack_facturare.nid_politica_stoc, A.ID_POL + 1), + 1, + 0) AS MODIFICABIL, + A.ID_GESTIUNE, + '371' AS CONT + FROM (select a1.id_util, + a3.id_pol, + a3.preturi_cu_tva, + a3.nume_lista_preturi, + a3.id_nota, + a6.id_gestiune + from utilizatori_rol_intern a1 + left join politici_grupuri a2 + on a1.id_grup = a2.id_grup + left join crm_politici_preturi a3 + on a2.id_politica = a3.id_pol + left join crm_note_vanzari a4 + on a3.id_nota = a4.id_nota + left join note_contabile a5 + on a4.id_set = a5.id_set + left join rest_coresp_pol_gest a6 + on a3.id_pol = a6.id_pol + where a1.sters = 0 + and a2.sters = 0 + and a3.sters = 0 + and a1.id_util = V_ID_UTIL + and NVL(a5.in_valuta, 0) = 0 + and least(NVL(last_day(to_date(V_AN || V_LUNA, 'YYYYMM')), + sysdate), + sysdate) between a3.datai and + NVL(a3.datas, to_date('300012', 'YYYYMM')) + and NVL(a1.ID_SUCURSALA, -99) = + NVL(V_ID_SUCURSALA, -99) + and nvl(a6.id_rest_locatie, 0) = + NVL(V_ID_GESTIUNE_INIT, -1)) A + LEFT JOIN CRM_POLITICI_PRET_ART B + ON A.ID_POL = B.ID_POL + LEFT JOIN NOM_ARTICOLE C + ON B.ID_ARTICOL = C.ID_ARTICOL + LEFT JOIN (SELECT ID_VALUTA, CURS, MULTIPLICATOR + FROM CURS + WHERE DATA <= V_DATA_CURS + AND DATA2 >= V_DATA_CURS + AND STERS = 0) F + ON B.ID_VALUTA = F.ID_VALUTA + LEFT JOIN NOM_VALUTE G + ON B.ID_VALUTA = G.ID_VALUTA + ORDER BY C.DENUMIRE; + WHEN V_TIP IN (1, 2) THEN + -- factura in lei + OPEN V_CURSOR FOR + SELECT rownum as id_c, + B.ID_ARTICOL, + NULL AS LOT, + NULL as SERIE, + A.ID_POL, + B.ID_VALUTA, + A.NUME_LISTA_PRETURI, + (CASE + WHEN NVL(G.MONEDA_NATIONALA, 1) <> 1 THEN + ROUND(NVL(F.CURS, 0) * + ROUND(NVL(B.DISCOUNT_UNITAR, 0), + pack_sesiune.nzecimale_pretvval) / + NVL(F.MULTIPLICATOR, 1), + pack_sesiune.nzecimale_pretv) + ELSE + ROUND(NVL(B.DISCOUNT_UNITAR, 0), + pack_sesiune.nzecimale_pretv) + END) AS DISCOUNT_UNITAR, + (CASE + WHEN NVL(G.MONEDA_NATIONALA, 1) <> 1 THEN + ROUND(NVL(B.DISCOUNT_UNITAR, 0), + pack_sesiune.nzecimale_pretvval) + ELSE + 0 + END) AS DISCOUNT_UNITAR_VAL, + C.CODMAT, + C.CODBARE, + C.DENUMIRE, + NVL(C.UM, '') AS UM, + C.IN_STOC AS GESTIONABIL, + (CASE + WHEN lnFacturareFaraStoc = 1 AND E.CANTITATE < 0 THEN + 0 + ELSE + NVL(E.CANTITATE, 0) + END) AS CANTITATE, + B.PROC_TVAV, + A.PRETURI_CU_TVA, + F.CURS, + F.MULTIPLICATOR, + (CASE + WHEN NVL(G.MONEDA_NATIONALA, 1) <> 1 THEN + ROUND(NVL(F.CURS, 0) * + ROUND(NVL(B.PRET, 0), + pack_sesiune.nzecimale_pretvval) / + NVL(F.MULTIPLICATOR, 1), + pack_sesiune.nzecimale_pretv) + ELSE + ROUND(NVL(B.PRET, 0), pack_sesiune.nzecimale_pretv) + END) AS PRET, + (CASE + WHEN NVL(G.MONEDA_NATIONALA, 1) <> 1 THEN + ROUND(NVL(B.PRET, 0), pack_sesiune.nzecimale_pretvval) + ELSE + 0 + END) AS PRET_VAL, + 1 - NVL(G.MONEDA_NATIONALA, 1) AS TIP_VALUTA, + G.NUME_VAL, + DECODE(A.ID_POL, + NVL(pack_facturare.nid_politica_stoc, A.ID_POL + 1), + 1, + 0) AS MODIFICABIL + FROM (select a1.id_util, + a3.id_pol, + a3.preturi_cu_tva, + a3.nume_lista_preturi, + a3.id_nota + from utilizatori_rol_intern a1 + left join politici_grupuri a2 + on a1.id_grup = a2.id_grup + left join crm_politici_preturi a3 + on a2.id_politica = a3.id_pol + left join crm_note_vanzari a4 + on a3.id_nota = a4.id_nota + left join note_contabile a5 + on a4.id_set = a5.id_set + where a1.sters = 0 + and a2.sters = 0 + and a3.sters = 0 + and a1.id_util = V_ID_UTIL + and NVL(a5.in_valuta, 0) = 0 + and least(NVL(last_day(to_date(V_AN || V_LUNA, 'YYYYMM')), + sysdate), + sysdate) between a3.datai and + NVL(a3.datas, to_date('300012', 'YYYYMM')) + and NVL(a1.ID_SUCURSALA, -99) = + NVL(V_ID_SUCURSALA, -99)) A + LEFT JOIN CRM_POLITICI_PRET_ART B + ON A.ID_POL = B.ID_POL + LEFT JOIN NOM_ARTICOLE C + ON B.ID_ARTICOL = C.ID_ARTICOL + LEFT JOIN (SELECT ID_ARTICOL, + SUM(CANTS + CANT - CANTE) AS CANTITATE + FROM STOC + WHERE LUNA = V_LUNA + AND AN = V_AN + AND NVL(ID_SUCURSALA, -99) = + NVL(V_ID_SUCURSALA, -99) + AND ID_GESTIUNE IN + (SELECT DISTINCT D1.ID_GESTIUNE + FROM GEST_CORESP_GRUPE_GESTIUNI D1 + LEFT JOIN GEST_CORESP_UTIL_GRUPE D2 + ON D1.ID_GRUPE = D2.ID_GRUPE + WHERE D1.STERS = 0 + AND D2.STERS = 0 + AND D2.ID_UTIL = V_ID_UTIL + AND NVL2(V_ID_GESTIUNE_INIT, + D1.ID_GESTIUNE, + -1) = NVL(V_ID_GESTIUNE_INIT, -1)) + GROUP BY ID_ARTICOL) E + ON B.ID_ARTICOL = E.ID_ARTICOL + LEFT JOIN (SELECT ID_VALUTA, CURS, MULTIPLICATOR + FROM CURS + WHERE DATA <= V_DATA_CURS + AND DATA2 >= V_DATA_CURS + AND STERS = 0) F + ON B.ID_VALUTA = F.ID_VALUTA + LEFT JOIN NOM_VALUTE G + ON B.ID_VALUTA = G.ID_VALUTA + WHERE (lnFacturareFaraStoc = 1 and NVL(E.CANTITATE, 0) <= 0) + OR DECODE(NVL(C.IN_STOC, 2), 1, NVL(E.CANTITATE, 0), 2, 0, 1) > 0 + ORDER BY C.DENUMIRE; + + WHEN V_TIP IN (5, 6, 10, 52) THEN + -- factura in valuta + OPEN V_CURSOR FOR + SELECT rownum as id_c, + A.ID_ARTICOL, + NULL AS LOT, + NULL as SERIE, + A.ID_POL, + V_ID_VALUTA AS ID_VALUTA, -- A.ID_VALUTA + A.NUME_LISTA_PRETURI, + ROUND(NVL(D.CURS, 0) * + ROUND(A.DISCOUNT_UNITAR, + pack_sesiune.nzecimale_pretvval) / + NVL(D.MULTIPLICATOR, 1), + pack_sesiune.nzecimale_pretv) AS DISCOUNT_UNITAR, + ROUND(A.DISCOUNT_UNITAR, pack_sesiune.nzecimale_pretvval) AS DISCOUNT_UNITAR_VAL, + A.CODMAT, + A.CODBARE, + A.DENUMIRE, + NVL(A.UM, '') AS UM, + A.GESTIONABIL, + (CASE + WHEN lnFacturareFaraStoc = 1 AND C.CANTITATE < 0 THEN + 0 + ELSE + NVL(C.CANTITATE, 0) + END) AS CANTITATE, + A.PROC_TVAV, + A.PRETURI_CU_TVA, + D.CURS, + D.MULTIPLICATOR, + ROUND(NVL(D.CURS, 0) * + ROUND(A.PRET, pack_sesiune.nzecimale_pretvval) / + NVL(D.MULTIPLICATOR, 1), + pack_sesiune.nzecimale_pretv) AS PRET, + ROUND(A.PRET, pack_sesiune.nzecimale_pretvval) AS PRET_VAL, + 1 AS TIP_VALUTA, + E.NUME_VAL + FROM FACT_VPRETURI_UTILIZATOR A + LEFT JOIN (SELECT ID_ARTICOL, + SUM(CANTS + CANT - CANTE) AS CANTITATE + FROM STOC + WHERE LUNA = V_LUNA + AND AN = V_AN + AND NVL(ID_SUCURSALA, -99) = + NVL(V_ID_SUCURSALA, -99) + AND ID_GESTIUNE IN + (SELECT DISTINCT A1.ID_GESTIUNE + FROM GEST_CORESP_GRUPE_GESTIUNI A1 + LEFT JOIN GEST_CORESP_UTIL_GRUPE A2 + ON A1.ID_GRUPE = A2.ID_GRUPE + WHERE A1.STERS = 0 + AND A2.STERS = 0 + AND A2.ID_UTIL = V_ID_UTIL + AND NVL2(V_ID_GESTIUNE_INIT, + A1.ID_GESTIUNE, + -1) = NVL(V_ID_GESTIUNE_INIT, -1)) + GROUP BY ID_ARTICOL) C + ON A.ID_ARTICOL = C.ID_ARTICOL + /* AND NVL(C.ID_RUL_AUX, 0) = 0*/ + LEFT JOIN (SELECT ID_VALUTA, CURS, MULTIPLICATOR + FROM CURS + WHERE DATA <= V_DATA_CURS + AND DATA2 >= V_DATA_CURS + AND STERS = 0) D + ON V_ID_VALUTA = D.ID_VALUTA + LEFT JOIN NOM_VALUTE E + ON V_ID_VALUTA = E.ID_VALUTA + WHERE A.ID_UTIL = V_ID_UTIL + -- AND A.ID_VALUTA = V_ID_VALUTA AND A.IN_VALUTA = 1 + AND ((A.ID_VALUTA = V_ID_VALUTA AND A.IN_VALUTA = 1) OR + A.ID_POL = pack_facturare.nid_politica_stoc) + AND ((lnFacturareFaraStoc = 1 and NVL(C.CANTITATE, 0) <= 0) OR + DECODE(A.GESTIONABIL, 1, NVL(C.CANTITATE, 0), 1) > 0) + ORDER BY A.DENUMIRE; + + WHEN V_TIP = 7 THEN + -- credit note + OPEN V_CURSOR FOR + SELECT rownum as id_c, + A.ID_ARTICOL, + NULL AS LOT, + NULL as SERIE, + A.ID_POL, + V_ID_VALUTA AS ID_VALUTA, -- A.ID_VALUTA + A.NUME_LISTA_PRETURI, + ROUND(NVL(D.CURS, 0) * + ROUND(A.DISCOUNT_UNITAR, + pack_sesiune.nzecimale_pretvval) / + NVL(D.MULTIPLICATOR, 1), + pack_sesiune.nzecimale_pretv) AS DISCOUNT_UNITAR, + ROUND(A.DISCOUNT_UNITAR, pack_sesiune.nzecimale_pretvval) AS DISCOUNT_UNITAR_VAL, + A.CODMAT, + A.CODBARE, + A.DENUMIRE, + NVL(A.UM, '') AS UM, + A.GESTIONABIL, + (CASE + WHEN lnFacturareFaraStoc = 1 AND C.CANTITATE < 0 THEN + 0 + ELSE + NVL(C.CANTITATE, 0) + END) AS CANTITATE, + A.PROC_TVAV, + A.PRETURI_CU_TVA, + D.CURS, + D.MULTIPLICATOR, + ROUND(NVL(D.CURS, 0) * + ROUND(A.PRET, pack_sesiune.nzecimale_pretvval) / + NVL(D.MULTIPLICATOR, 1), + pack_sesiune.nzecimale_pretv) AS PRET, + ROUND(A.PRET, pack_sesiune.nzecimale_pretvval) AS PRET_VAL, + 1 AS TIP_VALUTA, + E.NUME_VAL + FROM FACT_VPRETURI_UTILIZATOR A + LEFT JOIN (SELECT ID_ARTICOL, + SUM(CANTS + CANT - CANTE) AS CANTITATE + FROM STOC + WHERE LUNA = V_LUNA + AND AN = V_AN + AND NVL(ID_SUCURSALA, -99) = + NVL(V_ID_SUCURSALA, -99) + AND ID_GESTIUNE IN + (SELECT DISTINCT A1.ID_GESTIUNE + FROM GEST_CORESP_GRUPE_GESTIUNI A1 + LEFT JOIN GEST_CORESP_UTIL_GRUPE A2 + ON A1.ID_GRUPE = A2.ID_GRUPE + WHERE A1.STERS = 0 + AND A2.STERS = 0 + AND A2.ID_UTIL = V_ID_UTIL + AND NVL2(V_ID_GESTIUNE_INIT, + A1.ID_GESTIUNE, + -1) = NVL(V_ID_GESTIUNE_INIT, -1)) + GROUP BY ID_ARTICOL) C + ON A.ID_ARTICOL = C.ID_ARTICOL + LEFT JOIN (SELECT ID_VALUTA, CURS, MULTIPLICATOR + FROM CURS + WHERE DATA <= V_DATA_CURS + AND DATA2 >= V_DATA_CURS + AND ID_VALUTA = V_ID_VALUTA + AND STERS = 0) D + ON V_ID_VALUTA = D.ID_VALUTA + LEFT JOIN NOM_VALUTE E + ON V_ID_VALUTA = E.ID_VALUTA + WHERE A.ID_UTIL = V_ID_UTIL + AND A.ID_VALUTA = V_ID_VALUTA + AND A.IN_VALUTA = 1 + AND NVL(A.nota_discount, 0) = 1 + AND ((lnFacturareFaraStoc = 1 and NVL(C.CANTITATE, 0) <= 0) OR + DECODE(A.GESTIONABIL, 1, NVL(C.CANTITATE, 0), 1) > 0) + ORDER BY A.DENUMIRE; + ELSE + -- aviz + OPEN V_CURSOR FOR + SELECT rownum as id_c, + A.ID_ARTICOL, + NULL AS LOT, + NULL as SERIE, + A.ID_POL, + A.ID_VALUTA, + A.NUME_LISTA_PRETURI, + (CASE + WHEN NVL(E.MONEDA_NATIONALA, 1) <> 1 THEN + ROUND(NVL(D.CURS, 0) * + ROUND(A.DISCOUNT_UNITAR, + pack_sesiune.nzecimale_pretvval) / + NVL(D.MULTIPLICATOR, 1), + pack_sesiune.nzecimale_pretv) + ELSE + ROUND(A.DISCOUNT_UNITAR, pack_sesiune.nzecimale_pretv) + END) AS DISCOUNT_UNITAR, + (CASE + WHEN NVL(E.MONEDA_NATIONALA, 1) <> 1 THEN + ROUND(A.DISCOUNT_UNITAR, pack_sesiune.nzecimale_pretvval) + ELSE + 0 + END) AS DISCOUNT_UNITAR_VAL, + A.CODMAT, + A.CODBARE, + A.DENUMIRE, + NVL(A.UM, '') AS UM, + A.GESTIONABIL, + (CASE + WHEN lnFacturareFaraStoc = 1 AND C.CANTITATE < 0 THEN + 0 + ELSE + NVL(C.CANTITATE, 0) + END) AS CANTITATE, + A.PROC_TVAV, + A.PRETURI_CU_TVA, + D.CURS, + D.MULTIPLICATOR, + (CASE + WHEN NVL(E.MONEDA_NATIONALA, 1) <> 1 THEN + ROUND(NVL(D.CURS, 0) * + ROUND(A.PRET, pack_sesiune.nzecimale_pretvval) / + NVL(D.MULTIPLICATOR, 1), + pack_sesiune.nzecimale_pretv) + ELSE + ROUND(A.PRET, pack_sesiune.nzecimale_pretv) + END) AS PRET, + (CASE + WHEN NVL(E.MONEDA_NATIONALA, 1) <> 1 THEN + ROUND(A.PRET, pack_sesiune.nzecimale_pretvval) + ELSE + 0 + END) AS PRET_VAL, + 1 - NVL(E.MONEDA_NATIONALA, 1) AS TIP_VALUTA, + E.NUME_VAL, + DECODE(A.ID_POL, + NVL(pack_facturare.nid_politica_stoc, A.ID_POL + 1), + 1, + 0) AS MODIFICABIL + FROM FACT_VPRETURI_UTILIZATOR A + LEFT JOIN (SELECT ID_ARTICOL, + SUM(CANTS + CANT - CANTE) AS CANTITATE + FROM STOC + WHERE LUNA = V_LUNA + AND AN = V_AN + AND NVL(ID_SUCURSALA, -99) = + NVL(V_ID_SUCURSALA, -99) + AND ID_GESTIUNE IN + (SELECT DISTINCT A1.ID_GESTIUNE + FROM GEST_CORESP_GRUPE_GESTIUNI A1 + LEFT JOIN GEST_CORESP_UTIL_GRUPE A2 + ON A1.ID_GRUPE = A2.ID_GRUPE + WHERE A1.STERS = 0 + AND A2.STERS = 0 + AND A2.ID_UTIL = V_ID_UTIL + AND NVL2(V_ID_GESTIUNE_INIT, + A1.ID_GESTIUNE, + -1) = NVL(V_ID_GESTIUNE_INIT, -1)) + GROUP BY ID_ARTICOL) C + ON A.ID_ARTICOL = C.ID_ARTICOL + LEFT JOIN (SELECT ID_VALUTA, CURS, MULTIPLICATOR + FROM CURS + WHERE DATA <= V_DATA_CURS + AND DATA2 >= V_DATA_CURS + AND STERS = 0) D + ON A.ID_VALUTA = D.ID_VALUTA + LEFT JOIN NOM_VALUTE E + ON A.ID_VALUTA = E.ID_VALUTA + WHERE A.ID_UTIL = V_ID_UTIL + AND ((lnFacturareFaraStoc = 1 and NVL(C.CANTITATE, 0) <= 0) OR + DECODE(NVL(A.GESTIONABIL, 2), + 1, + NVL(C.CANTITATE, 0), + 2, + 0, + 1) > 0) + ORDER BY A.DENUMIRE; + + END CASE; + END cursor_preturi; + ------------------------------------------------------------------- + PROCEDURE cursor_contract(V_DATA_CURS IN DATE, + V_TIP IN NUMBER, + V_ID_VALUTA IN NUMBER, + V_LISTAID IN VARCHAR2, + V_ID_GESTIUNE_INIT IN NUMBER, + V_LUNA IN NUMBER, + V_AN IN NUMBER, + V_ID_UTIL IN NUMBER, + V_ID_SUCURSALA IN NUMBER, + V_ID_AGENT OUT NUMBER, + V_NUME_AGENT OUT VARCHAR2, + V_CURSOR OUT cursor_facturare, + V_CURSOR2 OUT cursor_facturare) IS + V_NR_INREGISTRARI NUMBER(10); + V_NR_INREGISTRARI_TOT NUMBER(10); + V_SEPARATOR VARCHAR2(10) := ','; + BEGIN + pack_facturare.initializeaza_facturare(V_ID_UTIL); + + BEGIN + SELECT DISTINCT ID_AGENT, NUME_AGENT + INTO V_ID_AGENT, V_NUME_AGENT + FROM VCONTRACTE + WHERE ID_CTR IN + (SELECT X as ID_CTR + FROM table(charn2collection(V_LISTAID, V_SEPARATOR))); + EXCEPTION + WHEN TOO_MANY_ROWS THEN + V_ID_AGENT := NULL; + V_NUME_AGENT := NULL; + END; + + -- verificare ca exista cursul pentru valutele din CTR_SCADENTAR si CTR_ARTICOLE + WITH CRS AS + (SELECT X as ID_CTR + FROM table(charn2collection(V_LISTAID, V_SEPARATOR))) + SELECT SUM(CASE + WHEN B.ID_VALUTA <> pack_facturare.nid_moneda_nationala THEN + 1 + ELSE + 0 + END), + SUM(CASE + WHEN A.ID_VALUTA <> pack_facturare.nid_moneda_nationala THEN + 1 + ELSE + 0 + END) + INTO V_NR_INREGISTRARI, V_NR_INREGISTRARI_TOT + FROM (SELECT DISTINCT NVL(C.ID_VALUTA, B.ID_VALUTA) AS ID_VALUTA + FROM CONTRACTE A + LEFT JOIN CTR_ARTICOLE B + ON A.ID_CTR = B.ID_CTR + AND A.OPT_FACTURARE = 3 + LEFT JOIN CTR_SCADENTAR C + ON A.ID_CTR = B.ID_CTR + AND A.OPT_FACTURARE IN (1, 2) + WHERE A.ID_CTR IN (SELECT ID_CTR FROM CRS) + AND A.STERS = 0 + AND A.INACTIV = 0) A + LEFT JOIN CURS B + ON A.ID_VALUTA = B.ID_VALUTA + AND B.STERS = 0 + AND B.DATA <= V_DATA_CURS + AND B.DATA2 >= V_DATA_CURS; + + IF V_NR_INREGISTRARI <> V_NR_INREGISTRARI_TOT THEN + RAISE_APPLICATION_ERROR(-20005, + 'Nu este setat cursul din data de ' || + to_char(V_DATA_CURS, 'DD/MM/YYYY') || ' !'); + END IF; + + OPEN V_CURSOR2 FOR + WITH CRS AS + (SELECT X as ID_CTR + FROM table(charn2collection(V_LISTAID, V_SEPARATOR))) + SELECT rownum - 10000 as id_c, + id_ctr, + id_articol, + id_rata, + id_pol, + id_valuta, + numar || '/' || to_char(data, 'DD.MM.YYYY') as numar_contract, + numar, + data, + discount_unitar, + discount_unitar_val, + codmat, + codbare, + denumire, + preturi_cu_tva, + um, + gestionabil, + cantitate, + proc_tvav, + curs, + multiplicator, + pret, + pret_val, + tip_valuta, + nume_val, + nr_rata, + data_rata, + data_scadenta, + explicatie, + opt_facturare + FROM (SELECT A.ID_CTR, + C.ID_ARTICOL, + NULL as id_rata, + C.ID_POL, + B.ID_VALUTA, + A.NUMAR, + A.DATA, + (CASE + WHEN NVL(G.MONEDA_NATIONALA, 1) <> 1 THEN + ROUND(NVL(F.CURS, 0) * + ROUND(ROUND(B.PRET_UNITAR, + pack_sesiune.nzecimale_pretvval) + + * B.COEF_DISCOUNT / 100, + pack_sesiune.nzecimale_pretvval) / + NVL(F.MULTIPLICATOR, 1), + pack_sesiune.nzecimale_pretv) + ELSE + ROUND(ROUND(B.PRET_UNITAR, + pack_sesiune.nzecimale_pretv) * + B.COEF_DISCOUNT / 100, + pack_sesiune.nzecimale_pretv) + END) AS DISCOUNT_UNITAR, + (CASE + WHEN NVL(G.MONEDA_NATIONALA, 1) <> 1 THEN + ROUND(ROUND(B.PRET_UNITAR, + pack_sesiune.nzecimale_pretvval) * + B.COEF_DISCOUNT / 100, + pack_sesiune.nzecimale_pretvval) + ELSE + 0 + END) AS DISCOUNT_UNITAR_VAL, + E.CODMAT, + E.CODBARE, + E.DENUMIRE, + B.PRET_CU_TVA AS PRETURI_CU_TVA, + NVL(E.UM, '') AS UM, + E.IN_STOC AS GESTIONABIL, + B.CANT AS CANTITATE, + C.PROC_TVAV, + F.CURS, + F.MULTIPLICATOR, + (CASE + WHEN NVL(G.MONEDA_NATIONALA, 1) <> 1 THEN + ROUND(NVL(F.CURS, 0) * + ROUND(B.PRET_UNITAR, + pack_sesiune.nzecimale_pretvval) / + NVL(F.MULTIPLICATOR, 1), + pack_sesiune.nzecimale_pretv) + ELSE + ROUND(B.PRET_UNITAR, pack_sesiune.nzecimale_pretv) + END) AS PRET, + (CASE + WHEN NVL(G.MONEDA_NATIONALA, 1) <> 1 THEN + ROUND(B.PRET_UNITAR, pack_sesiune.nzecimale_pretvval) + ELSE + 0 + END) AS PRET_VAL, + 1 - NVL(G.MONEDA_NATIONALA, 1) AS TIP_VALUTA, + G.NUME_VAL, + NULL as NR_RATA, + null as data_rata, + null as data_scadenta, + '' as explicatie, + A.OPT_FACTURARE + FROM (SELECT ID_CTR, NUMAR, DATA, OPT_FACTURARE + FROM CONTRACTE + WHERE ID_CTR in (SELECT ID_CTR FROM CRS) + AND OPT_FACTURARE = 3 + AND STERS = 0) A + LEFT JOIN CTR_ARTICOLE B + ON A.ID_CTR = B.ID_CTR + LEFT JOIN CRM_POLITICI_PRET_ART C + ON B.ID_POL_ART = C.ID_POL_ART + LEFT JOIN NOM_ARTICOLE E + ON C.ID_ARTICOL = E.ID_ARTICOL + LEFT JOIN (SELECT ID_VALUTA, CURS, MULTIPLICATOR + FROM CURS + WHERE DATA <= V_DATA_CURS + AND DATA2 >= V_DATA_CURS + AND STERS = 0) F + ON B.ID_VALUTA = F.ID_VALUTA + LEFT JOIN NOM_VALUTE G + ON B.ID_VALUTA = G.ID_VALUTA + UNION ALL + SELECT A01.ID_CTR, + null as id_articol, + B01.ID_RATA, + NULL AS ID_POL, + B01.ID_VALUTA, + A01.NUMAR, + A01.DATA, + 0 as discount_unitar, + 0 as discount_unitar_val, + null as codmat, + null as codbare, + B01.DEN_RATA as denumire, + B01.PRET_CU_TVA AS PRETURI_CU_TVA, + NULL AS UM, + 0 as gestionabil, + 1 as cantitate, + (A01.PROC_TVA + 100) / 100 AS PROC_TVAV, + E01.CURS, + E01.MULTIPLICATOR, + (CASE + WHEN NVL(F01.MONEDA_NATIONALA, 1) <> 1 THEN + ROUND(NVL(E01.CURS, 0) * + (ROUND(B01.VALRATA, + pack_sesiune.nzecimale_pretvval) - + DECODE(B01.PRET_CU_TVA, + 0, + NVL(D01.VALVALUTA, 0), + NVL(D01.VALVALUTACTVA, 0))) / + NVL(E01.MULTIPLICATOR, 1), + pack_sesiune.nzecimale_pretv) + ELSE + ROUND(ROUND(B01.VALRATA, pack_sesiune.nzecimale_pretv) - + DECODE(B01.PRET_CU_TVA, + 0, + NVL(D01.VALVALUTA, 0), + NVL(D01.VALVALUTACTVA, 0)), + pack_sesiune.nzecimale_pretv) + END) AS PRET, + (CASE + WHEN NVL(F01.MONEDA_NATIONALA, 1) <> 1 THEN + ROUND(ROUND(B01.VALRATA, + pack_sesiune.nzecimale_pretvval) - + DECODE(B01.PRET_CU_TVA, + 0, + NVL(D01.VALVALUTA, 0), + NVL(D01.VALVALUTACTVA, 0)), + pack_sesiune.nzecimale_pretvval) + ELSE + 0 + END) AS PRET_VAL, + 1 - NVL(F01.MONEDA_NATIONALA, 1) AS TIP_VALUTA, + F01.NUME_VAL, + B01.NR_RATA, + B01.DATA_RATA, + B01.DATA_SCADENTA, + UPPER(NVL(C01.DENUMIRE, B01.DEN_RATA)) AS EXPLICATIE, + A01.OPT_FACTURARE + FROM (SELECT ID_CTR, NUMAR, DATA, OPT_FACTURARE, PROC_TVA + FROM CONTRACTE + WHERE STERS = 0 + AND ID_CTR in (SELECT ID_CTR FROM CRS) + AND OPT_FACTURARE IN (1, 2)) A01 + LEFT JOIN CTR_SCADENTAR B01 + ON A01.ID_CTR = B01.ID_CTR + AND B01.STERS = 0 + LEFT JOIN (SELECT DENUMIRE, ID_CTR AS ID_CONTRACT + FROM (SELECT C1.ID_CTR, + C3.DENUMIRE, + ROW_NUMBER() OVER(PARTITION BY C1.ID_CTR ORDER BY C1.ID_CTR_ART) AS NRCRT + FROM CTR_ARTICOLE C1 + LEFT JOIN CRM_POLITICI_PRET_ART C2 + ON C1.ID_POL_ART = C2.ID_POL_ART + LEFT JOIN NOM_ARTICOLE C3 + ON C2.ID_ARTICOL = C3.ID_ARTICOL + WHERE C1.id_ctr in + (SELECT ID_CTR FROM CRS)) + WHERE NRCRT = 1) C01 + ON A01.ID_CTR = C01.ID_CONTRACT + AND A01.OPT_FACTURARE = 2 + -- 14.11.2012 : am scos round(...) de la valvaluta si valvalutactva - trebuie rotunjite in fct. de id_valuta + LEFT JOIN (SELECT SUM(VALVALUTA) AS VALVALUTA, + SUM(VALVALUTACTVA) AS VALVALUTACTVA, + ID_RATA + FROM CTR_RATE_FACTURI + WHERE STERS = 0 + GROUP BY ID_RATA) D01 + ON B01.ID_RATA = D01.ID_RATA + LEFT JOIN (SELECT ID_VALUTA, CURS, MULTIPLICATOR + FROM CURS + WHERE DATA <= V_DATA_CURS + AND DATA2 >= V_DATA_CURS + AND STERS = 0) E01 + ON B01.ID_VALUTA = E01.ID_VALUTA + LEFT JOIN NOM_VALUTE F01 + ON B01.ID_VALUTA = F01.ID_VALUTA + -- 14.11.2012 : am scos round(...) de la valrata - trebuie rotunjita in fct. de id_valuta + WHERE B01.VALRATA - + DECODE(B01.PRET_CU_TVA, + 0, + NVL(D01.VALVALUTA, 0), + NVL(D01.VALVALUTACTVA, 0)) > 0) + ORDER BY data, numar, data_rata, denumire; + + pack_facturare.cursor_preturi(V_DATA_CURS, + V_TIP, + V_ID_VALUTA, + V_ID_GESTIUNE_INIT, + V_LUNA, + V_AN, + V_ID_UTIL, + V_ID_SUCURSALA, + V_CURSOR); + + END cursor_contract; + ------------------------------------------------------------------- + PROCEDURE cursor_comanda(V_DATA_CURS IN DATE, + V_TIP IN NUMBER, + V_LISTAID IN VARCHAR2, + V_ID_UTIL IN NUMBER, + V_CURSOR OUT cursor_facturare) IS + V_ID_COMANDA COMENZI.ID_COMANDA%TYPE; + V_NR_INREGISTRARI NUMBER(10); + V_NR_INREGISTRARI_TOT NUMBER(10); + BEGIN + pack_facturare.initializeaza_facturare(V_ID_UTIL); + V_ID_COMANDA := TO_NUMBER(V_LISTAID); + + -- verificare ca exista cursul pentru valutele din COMENZI_ELEMENTE + SELECT SUM(CASE + WHEN B.ID_VALUTA <> pack_facturare.nid_moneda_nationala THEN + 1 + ELSE + 0 + END), + SUM(CASE + WHEN A.ID_VALUTA <> pack_facturare.nid_moneda_nationala THEN + 1 + ELSE + 0 + END) + INTO V_NR_INREGISTRARI, V_NR_INREGISTRARI_TOT + FROM (SELECT DISTINCT ID_VALUTA + FROM COMENZI_ELEMENTE + WHERE ID_COMANDA = V_ID_COMANDA) A + LEFT JOIN CURS B + ON A.ID_VALUTA = B.ID_VALUTA + AND B.STERS = 0 + AND B.DATA <= V_DATA_CURS + AND B.DATA2 >= V_DATA_CURS; + + IF V_NR_INREGISTRARI <> V_NR_INREGISTRARI_TOT THEN + RAISE_APPLICATION_ERROR(-20005, + 'Nu este setat cursul din data de ' || + to_char(V_DATA_CURS, 'DD/MM/YYYY') || ' !'); + END IF; + + IF V_TIP <= 20 THEN + -- factura + OPEN V_CURSOR FOR + SELECT ROWNUM as id_c, + A.ID_ARTICOL, + NULL AS LOT, + NULL as SERIE, + A.ID_POL, + A.ID_VALUTA, + G.NUME_LISTA_PRETURI, + (CASE + WHEN NVL(F.MONEDA_NATIONALA, 1) <> 1 THEN + ROUND(NVL(E.CURS, 0) * + ROUND(NVL(B.DISCOUNT_UNITAR, 0) + + NVL(A.DISCOUNT_UNITAR, 0), + pack_sesiune.nzecimale_pretvval) / + NVL(E.MULTIPLICATOR, 1), + pack_sesiune.nzecimale_pretv) + ELSE + ROUND(NVL(B.DISCOUNT_UNITAR, 0) + + NVL(A.DISCOUNT_UNITAR, 0), + pack_sesiune.nzecimale_pretv) + END) AS DISCOUNT_UNITAR, + (CASE + WHEN NVL(F.MONEDA_NATIONALA, 1) <> 1 THEN + ROUND(NVL(B.DISCOUNT_UNITAR, 0) + + NVL(A.DISCOUNT_UNITAR, 0), + pack_sesiune.nzecimale_pretvval) + ELSE + 0 + END) AS DISCOUNT_UNITAR_VAL, + C.CODMAT, + C.CODBARE, + C.DENUMIRE, + NVL(C.UM, '') AS UM, + C.IN_STOC AS GESTIONABIL, + A.CANTITATE - NVL(D.CANTITATE, 0) AS CANTITATE, + B.PROC_TVAV, + A.PRET_CU_TVA AS PRETURI_CU_TVA, + E.CURS, + E.MULTIPLICATOR, + (CASE + WHEN NVL(F.MONEDA_NATIONALA, 1) <> 1 THEN + ROUND(NVL(E.CURS, 0) * + ROUND(A.PRET, pack_sesiune.nzecimale_pretvval) / + NVL(E.MULTIPLICATOR, 1), + pack_sesiune.nzecimale_pretv) + ELSE + ROUND(A.PRET, pack_sesiune.nzecimale_pretv) + END) AS PRET, + (CASE + WHEN NVL(F.MONEDA_NATIONALA, 1) <> 1 THEN + ROUND(A.PRET, pack_sesiune.nzecimale_pretvval) + ELSE + 0 + END) AS PRET_VAL, + 1 - NVL(F.MONEDA_NATIONALA, 1) AS TIP_VALUTA, + F.NUME_VAL + FROM COMENZI_ELEMENTE A + LEFT JOIN CRM_POLITICI_PRET_ART B + ON A.ID_POL = B.ID_POL + AND A.ID_ARTICOL = B.ID_ARTICOL + LEFT JOIN CRM_POLITICI_PRETURI G + ON B.ID_POL = G.ID_POL + LEFT JOIN NOM_ARTICOLE C + ON A.ID_ARTICOL = C.ID_ARTICOL + LEFT JOIN (SELECT B1.ID_ARTICOL, SUM(B1.CANTITATE) AS CANTITATE + FROM VANZARI A1 + LEFT JOIN VANZARI_DETALII B1 + ON A1.ID_VANZARE = B1.ID_VANZARE + AND B1.STERS = 0 + WHERE A1.STERS = 0 + AND A1.ID_COMANDA = V_ID_COMANDA + GROUP BY B1.ID_ARTICOL) D + ON A.ID_ARTICOL = D.ID_ARTICOL + LEFT JOIN (SELECT ID_VALUTA, CURS, MULTIPLICATOR + FROM CURS + WHERE DATA <= V_DATA_CURS + AND DATA2 >= V_DATA_CURS + AND STERS = 0) E + ON A.ID_VALUTA = E.ID_VALUTA + LEFT JOIN NOM_VALUTE F + ON A.ID_VALUTA = F.ID_VALUTA + WHERE A.STERS = 0 + AND A.ID_COMANDA = V_ID_COMANDA + AND A.CANTITATE - NVL(D.CANTITATE, 0) > 0 + ORDER BY C.DENUMIRE; + ELSE + -- aviz + OPEN V_CURSOR FOR + SELECT ROWNUM as id_c, + A.ID_ARTICOL, + NULL AS LOT, + NULL as SERIE, + A.ID_POL, + A.ID_VALUTA, + G.NUME_LISTA_PRETURI, + (CASE + WHEN NVL(F.MONEDA_NATIONALA, 1) <> 1 THEN + ROUND(NVL(E.CURS, 0) * + ROUND(NVL(B.DISCOUNT_UNITAR, 0) + + NVL(A.DISCOUNT_UNITAR, 0), + pack_sesiune.nzecimale_pretvval) / + NVL(E.MULTIPLICATOR, 1), + pack_sesiune.nzecimale_pretv) + ELSE + ROUND(NVL(B.DISCOUNT_UNITAR, 0) + + NVL(A.DISCOUNT_UNITAR, 0), + pack_sesiune.nzecimale_pretv) + END) AS DISCOUNT_UNITAR, + (CASE + WHEN NVL(F.MONEDA_NATIONALA, 1) <> 1 THEN + ROUND(NVL(B.DISCOUNT_UNITAR, 0) + + NVL(A.DISCOUNT_UNITAR, 0), + pack_sesiune.nzecimale_pretvval) + ELSE + 0 + END) AS DISCOUNT_UNITAR_VAL, + C.CODMAT, + C.CODBARE, + C.DENUMIRE, + NVL(C.UM, '') AS UM, + C.IN_STOC AS GESTIONABIL, + A.CANTITATE - NVL(D.CANTITATE, 0) AS CANTITATE, + B.PROC_TVAV, + A.PRET_CU_TVA AS PRETURI_CU_TVA, + E.CURS, + E.MULTIPLICATOR, + (CASE + WHEN NVL(F.MONEDA_NATIONALA, 1) <> 1 THEN + ROUND(NVL(E.CURS, 0) * + ROUND(A.PRET, pack_sesiune.nzecimale_pretvval) / + NVL(E.MULTIPLICATOR, 1), + pack_sesiune.nzecimale_pretv) + ELSE + ROUND(A.PRET, pack_sesiune.nzecimale_pretv) + END) AS PRET, + (CASE + WHEN NVL(F.MONEDA_NATIONALA, 1) <> 1 THEN + ROUND(A.PRET, pack_sesiune.nzecimale_pretvval) + ELSE + 0 + END) AS PRET_VAL, + 1 - NVL(F.MONEDA_NATIONALA, 1) AS TIP_VALUTA, + F.NUME_VAL + FROM COMENZI_ELEMENTE A + LEFT JOIN CRM_POLITICI_PRET_ART B + ON A.ID_POL = B.ID_POL + AND A.ID_ARTICOL = B.ID_ARTICOL + LEFT JOIN CRM_POLITICI_PRETURI G + ON B.ID_POL = G.ID_POL + LEFT JOIN NOM_ARTICOLE C + ON A.ID_ARTICOL = C.ID_ARTICOL + LEFT JOIN (SELECT B1.ID_ARTICOL, SUM(B1.CANTITATE) AS CANTITATE + FROM VANZARI A1 + LEFT JOIN VANZARI_DETALII B1 + ON A1.ID_VANZARE = B1.ID_VANZARE + AND B1.STERS = 0 + WHERE A1.STERS = 0 + AND A1.ID_COMANDA = V_ID_COMANDA + GROUP BY B1.ID_ARTICOL) D + ON A.ID_ARTICOL = D.ID_ARTICOL + LEFT JOIN (SELECT ID_VALUTA, CURS, MULTIPLICATOR + FROM CURS + WHERE DATA <= V_DATA_CURS + AND DATA2 >= V_DATA_CURS + AND STERS = 0) E + ON A.ID_VALUTA = E.ID_VALUTA + LEFT JOIN NOM_VALUTE F + ON A.ID_VALUTA = F.ID_VALUTA + WHERE A.STERS = 0 + AND A.ID_COMANDA = V_ID_COMANDA + AND SIGN(A.CANTITATE) * (A.CANTITATE - NVL(D.CANTITATE, 0)) > 0 + ORDER BY C.DENUMIRE; + END IF; + END cursor_comanda; + ------------------------------------------------------------------- + PROCEDURE cursor_lucrare(V_DATA_CURS IN DATE, + V_ID_GESTIUNE IN NUMBER, + V_ID_LUCRARE IN NUMBER, + V_LUNA IN NUMBER, + V_AN IN NUMBER, + V_ID_UTIL IN NUMBER, + V_ID_SUCURSALA IN NUMBER, + V_CURSOR OUT cursor_facturare) IS + V_NR_INREGISTRARI NUMBER(10); + V_NR_INREGISTRARI_TOT NUMBER(10); + BEGIN + pack_facturare.initializeaza_facturare(V_ID_UTIL); + + -- verificare ca exista cursul pentru valutele din COMENZI_ELEMENTE + SELECT SUM(CASE + WHEN B.ID_VALUTA <> pack_facturare.nid_moneda_nationala THEN + 1 + ELSE + 0 + END), + SUM(CASE + WHEN A.ID_VALUTA <> pack_facturare.nid_moneda_nationala THEN + 1 + ELSE + 0 + END) + INTO V_NR_INREGISTRARI, V_NR_INREGISTRARI_TOT + FROM (SELECT DISTINCT ID_VALUTA + FROM COMENZI_ELEMENTE + WHERE ID_COMANDA IN + (SELECT ID_COMANDA + FROM COMENZI + WHERE ID_LUCRARE = V_ID_LUCRARE + AND STERS = 0 + AND ID_SUCURSALA = V_ID_SUCURSALA)) A + LEFT JOIN CURS B + ON A.ID_VALUTA = B.ID_VALUTA + AND B.STERS = 0 + AND B.DATA <= V_DATA_CURS + AND B.DATA2 >= V_DATA_CURS; + + IF V_NR_INREGISTRARI <> V_NR_INREGISTRARI_TOT THEN + RAISE_APPLICATION_ERROR(-20005, + 'Nu este setat cursul din data de ' || + to_char(V_DATA_CURS, 'DD/MM/YYYY') || ' !'); + END IF; + + IF TO_NUMBER(NVL(pack_sesiune.getoptiunefirma('FACTALGREPCOM'), '0')) = 1 THEN + -- in gestiunea sursa exista un singur cont + OPEN V_CURSOR FOR + select A1.id_articol, + A1.id_comanda, + A1.id_comanda_element, + A1.id_gestiune, + A1.id_pol, + A1.cont, + A3.nume_gestiune, + A2.codmat, + A2.codbare, + A2.denumire, + A1.cant_com, + A1.cant_ramasa, + A1.cant_stoc, + A1.cantitate, + A1.cant_stoc - + (SUM(a1.cantitate) over(partition by a1.id_articol)) as cant_disp, + A1.ID_VALUTA, + NVL(A4.PROC_TVAV, 1) AS PROC_TVAV, + A1.PRET_CU_TVA AS PRETURI_CU_TVA, + NVL(A5.CURS, 0) AS CURS, + NVL(A5.MULTIPLICATOR, 1) AS MULTIPLICATOR, + (CASE + WHEN NVL(A6.MONEDA_NATIONALA, 1) <> 1 THEN + ROUND(NVL(A5.CURS, 0) * + (ROUND(A1.PRET, pack_sesiune.nzecimale_pretvval) - + ROUND(NVL(A4.DISCOUNT_UNITAR, 0), + pack_sesiune.nzecimale_pretvval)) / + NVL(A5.MULTIPLICATOR, 1), + pack_sesiune.nzecimale_pretv) + ELSE + ROUND(A1.PRET, pack_sesiune.nzecimale_pretv) - + ROUND(NVL(A4.DISCOUNT_UNITAR, 0), + pack_sesiune.nzecimale_pretv) + END) AS PRET, + 1 - NVL(A6.MONEDA_NATIONALA, 1) AS TIP_VALUTA, + A6.NUME_VAL, + (CASE + WHEN NVL(A6.MONEDA_NATIONALA, 1) <> 1 THEN + ROUND(NVL(A5.CURS, 0) * + (ROUND(A1.PRET, pack_sesiune.nzecimale_pretvval) - + ROUND(NVL(A4.DISCOUNT_UNITAR, 0), + pack_sesiune.nzecimale_pretvval)) / + NVL(A5.MULTIPLICATOR, 1), + pack_sesiune.nzecimale_pretv) + ELSE + ROUND(A1.PRET, pack_sesiune.nzecimale_pretv) - + ROUND(NVL(A4.DISCOUNT_UNITAR, 0), + pack_sesiune.nzecimale_pretv) + END) + ROUND((CASE + WHEN NVL(A6.MONEDA_NATIONALA, 1) <> 1 THEN + ROUND(NVL(A5.CURS, 0) * + (ROUND(A1.PRET, pack_sesiune.nzecimale_pretvval) - + ROUND(NVL(A4.DISCOUNT_UNITAR, 0), + pack_sesiune.nzecimale_pretvval)) / + NVL(A5.MULTIPLICATOR, 1), + pack_sesiune.nzecimale_pretv) + ELSE + ROUND(A1.PRET, pack_sesiune.nzecimale_pretv) - + ROUND(NVL(A4.DISCOUNT_UNITAR, 0), + pack_sesiune.nzecimale_pretv) + END) * (CASE + WHEN A1.PRET_CU_TVA = 0 THEN + A4.PROC_TVAV - 1 + ELSE + 0 + END), + pack_sesiune.nzecimale_pretv) AS PRETCTVA + from (SELECT CRS.ID_ARTICOL, + CRS.ID_VALUTA, + CRS.PRET_CU_TVA, + CRS.PRET, + CRS.ID_POL, + CRS.ID_COMANDA_ELEMENT, + CRS.ID_COMANDA, + CRS.ID_GESTIUNE, + CRS.CONT, + CRS.PROCENT, + CRS.CANT_COM, + CRS.CANT_RAMASA, + CRS.CANT_STOC, + CRS.CANT_REP, + CRS.INCOMPLET, + CRS.cant_rep + (case + when CRS.incomplet = 1 and CRS.cant_stoc > 0 and + CRS.cant_stoc - sum(CRS.cant_rep) + over(partition by CRS.id_articol) > 0 then + trunc((CRS.cant_stoc - sum(CRS.cant_rep) + over(partition by CRS.id_articol)) / + sum(CRS.incomplet) + over(partition by CRS.id_articol)) + + (case + when mod((CRS.cant_stoc - sum(CRS.cant_rep) + over(partition by CRS.id_articol)), + sum(CRS.incomplet) + over(partition by CRS.id_articol)) >= + row_number() + over(partition by CRS.id_articol order by + CRS.incomplet desc, + CRS.procent desc) then + 1 + else + 0 + end) + else + 0 + end) as cantitate + FROM (SELECT A.ID_ARTICOL, + A.ID_VALUTA, + A.PRET_CU_TVA, + A.PRET - NVL(A.DISCOUNT_UNITAR, 0) AS PRET, + A.ID_POL, + A.ID_COMANDA_ELEMENT, + COM.ID_COMANDA, + COM.ID_GESTIUNE, + STOC.CONT, + FLOOR(RATIO_TO_REPORT(A.CANTITATE - + NVL(D.CANTITATE, 0)) + OVER(PARTITION BY A.ID_ARTICOL) * 100) / 100 as procent, + A.CANTITATE AS CANT_COM, + A.CANTITATE - NVL(D.CANTITATE, 0) AS CANT_RAMASA, + NVL(STOC.CANT_STOC, 0) AS CANT_STOC, + (case + when NVL(STOC.CANT_STOC, 0) - + (SUM(A.CANTITATE - NVL(D.CANTITATE, 0)) + OVER(PARTITION BY A.ID_ARTICOL)) > 0 and + A.CANTITATE - NVL(D.CANTITATE, 0) > 0 and + NVL(STOC.CANT_STOC, 0) > 0 then + A.CANTITATE - NVL(D.CANTITATE, 0) + when NVL(STOC.CANT_STOC, 0) > 0 and + A.CANTITATE - NVL(D.CANTITATE, 0) > 0 then + LEAST(A.CANTITATE - NVL(D.CANTITATE, 0), + FLOOR(FLOOR(RATIO_TO_REPORT(A.CANTITATE - + NVL(D.CANTITATE, + 0)) + OVER(PARTITION BY + A.ID_ARTICOL) * 100) / 100 * + NVL(STOC.CANT_STOC, 0))) + else + 0 + end) AS CANT_REP, + (case + when NVL(STOC.CANT_STOC, 0) - + (SUM(A.CANTITATE - NVL(D.CANTITATE, 0)) + OVER(PARTITION BY A.ID_ARTICOL)) > 0 and + A.CANTITATE - NVL(D.CANTITATE, 0) > 0 and + NVL(STOC.CANT_STOC, 0) > 0 then + 0 + when A.CANTITATE - NVL(D.CANTITATE, 0) - + FLOOR(FLOOR(RATIO_TO_REPORT(A.CANTITATE - + NVL(D.CANTITATE, + 0)) + OVER(PARTITION BY + A.ID_ARTICOL) * 100) / 100 * + NVL(STOC.CANT_STOC, 0)) > 0 AND + NVL(STOC.CANT_STOC, 0) > 0 AND + A.CANTITATE - NVL(D.CANTITATE, 0) > 0 then + 1 + else + 0 + end) AS incomplet + FROM COMENZI COM + LEFT JOIN COMENZI_ELEMENTE A + ON COM.ID_COMANDA = A.ID_COMANDA + LEFT JOIN NOM_ARTICOLE C + ON A.ID_ARTICOL = C.ID_ARTICOL + LEFT JOIN (SELECT B1.ID_ARTICOL, + A1.ID_COMANDA, + SUM(B1.CANTITATE) AS CANTITATE + FROM VANZARI A1 + LEFT JOIN VANZARI_DETALII B1 + ON A1.ID_VANZARE = B1.ID_VANZARE + AND B1.STERS = 0 + WHERE A1.STERS = 0 + GROUP BY B1.ID_ARTICOL, A1.ID_COMANDA) D + ON A.ID_ARTICOL = D.ID_ARTICOL + AND A.ID_COMANDA = D.ID_COMANDA + LEFT JOIN (SELECT ID_ARTICOL, + SUM(CANTS + CANT - CANTE) AS CANT_STOC, + CONT + FROM STOC + WHERE AN = V_AN + AND LUNA = V_LUNA + AND ID_GESTIUNE = V_ID_GESTIUNE + AND NVL2(V_ID_SUCURSALA, + ID_SUCURSALA, + -99) = + NVL(V_ID_SUCURSALA, -99) + GROUP BY ID_ARTICOL, CONT) STOC + ON A.ID_ARTICOL = STOC.ID_ARTICOL + WHERE A.STERS = 0 + AND COM.ID_LUCRARE = V_ID_LUCRARE + AND COM.STERS = 0 + AND COM.ID_SECTIE IN + (SELECT ID_SECTIE + FROM NOM_SECTII + WHERE STERS = 0 + AND NVL2(V_ID_SUCURSALA, ID_SUCURSALA, -99) = + NVL(V_ID_SUCURSALA, -99)) + AND C.IN_STOC = 1 + AND A.CANTITATE - NVL(D.CANTITATE, 0) > 0 + AND COM.ID_GESTIUNE IS NOT NULL + order by 1, 2 desc) CRS) A1 + LEFT JOIN NOM_ARTICOLE A2 + ON A1.ID_ARTICOL = A2.ID_ARTICOL + LEFT JOIN NOM_GESTIUNI A3 + ON A1.ID_GESTIUNE = A3.ID_GESTIUNE + LEFT JOIN CRM_POLITICI_PRET_ART A4 + ON A1.ID_POL = A4.ID_POL + AND A1.ID_ARTICOL = A4.ID_ARTICOL + LEFT JOIN (SELECT ID_VALUTA, CURS, MULTIPLICATOR + FROM CURS + WHERE DATA <= V_DATA_CURS + AND DATA2 >= V_DATA_CURS + AND STERS = 0) A5 + ON A1.ID_VALUTA = A5.ID_VALUTA + LEFT JOIN NOM_VALUTE A6 + ON A1.ID_VALUTA = A6.ID_VALUTA + ORDER BY a2.denumire, a2.codmat, a3.nume_gestiune; + + ELSE + + OPEN V_CURSOR FOR + select A1.id_articol, + A1.id_comanda, + A1.id_comanda_element, + A1.id_gestiune, + A1.id_pol, + A1.cont, + A3.nume_gestiune, + A2.codmat, + A2.codbare, + A2.denumire, + A1.cant_com, + A1.cant_ramasa, + A1.cant_stoc, + A1.CANT_REP as cantitate, + A1.cant_stoc - + (SUM(a1.CANT_REP) over(partition by a1.id_articol)) as cant_disp, + A1.ID_VALUTA, + NVL(A4.PROC_TVAV, 1) AS PROC_TVAV, + A1.PRET_CU_TVA AS PRETURI_CU_TVA, + NVL(A5.CURS, 0) AS CURS, + NVL(A5.MULTIPLICATOR, 1) AS MULTIPLICATOR, + (CASE + WHEN NVL(A6.MONEDA_NATIONALA, 1) <> 1 THEN + ROUND(NVL(A5.CURS, 0) * + (ROUND(A1.PRET, pack_sesiune.nzecimale_pretvval) - + ROUND(NVL(A4.DISCOUNT_UNITAR, 0), + pack_sesiune.nzecimale_pretvval)) / + NVL(A5.MULTIPLICATOR, 1), + pack_sesiune.nzecimale_pretv) + ELSE + ROUND(A1.PRET, pack_sesiune.nzecimale_pretv) - + ROUND(NVL(A4.DISCOUNT_UNITAR, 0), + pack_sesiune.nzecimale_pretv) + END) AS PRET, + 1 - NVL(A6.MONEDA_NATIONALA, 1) AS TIP_VALUTA, + A6.NUME_VAL, + (CASE + WHEN NVL(A6.MONEDA_NATIONALA, 1) <> 1 THEN + ROUND(NVL(A5.CURS, 0) * + (ROUND(A1.PRET, pack_sesiune.nzecimale_pretvval) - + ROUND(NVL(A4.DISCOUNT_UNITAR, 0), + pack_sesiune.nzecimale_pretvval)) / + NVL(A5.MULTIPLICATOR, 1), + pack_sesiune.nzecimale_pretv) + ELSE + ROUND(A1.PRET, pack_sesiune.nzecimale_pretv) - + ROUND(NVL(A4.DISCOUNT_UNITAR, 0), + pack_sesiune.nzecimale_pretv) + END) + ROUND((CASE + WHEN NVL(A6.MONEDA_NATIONALA, 1) <> 1 THEN + ROUND(NVL(A5.CURS, 0) * + (ROUND(A1.PRET, pack_sesiune.nzecimale_pretvval) - + ROUND(NVL(A4.DISCOUNT_UNITAR, 0), + pack_sesiune.nzecimale_pretvval)) / + NVL(A5.MULTIPLICATOR, 1), + pack_sesiune.nzecimale_pretv) + ELSE + ROUND(A1.PRET, pack_sesiune.nzecimale_pretv) - + ROUND(NVL(A4.DISCOUNT_UNITAR, 0), + pack_sesiune.nzecimale_pretv) + END) * (CASE + WHEN A1.PRET_CU_TVA = 0 THEN + A4.PROC_TVAV - 1 + ELSE + 0 + END), + pack_sesiune.nzecimale_pretv) AS PRETCTVA + from (SELECT A.ID_ARTICOL, + A.ID_VALUTA, + A.PRET_CU_TVA, + A.PRET - NVL(A.DISCOUNT_UNITAR, 0) AS PRET, + A.ID_POL, + A.ID_COMANDA_ELEMENT, + COM.ID_COMANDA, + COM.ID_GESTIUNE, + STOC.CONT, + A.CANTITATE AS CANT_COM, + A.CANTITATE - NVL(D.CANTITATE, 0) AS CANT_RAMASA, + NVL(STOC.CANT_STOC, 0) AS CANT_STOC, + (CASE + WHEN NVL(STOC.CANT_STOC, 0) > 0 THEN + A.CANTITATE - NVL(D.CANTITATE, 0) + ELSE + 0 + END) AS CANT_REP, + 0 AS incomplet + FROM COMENZI COM + LEFT JOIN COMENZI_ELEMENTE A + ON COM.ID_COMANDA = A.ID_COMANDA + LEFT JOIN NOM_ARTICOLE C + ON A.ID_ARTICOL = C.ID_ARTICOL + LEFT JOIN (SELECT B1.ID_ARTICOL, + A1.ID_COMANDA, + SUM(B1.CANTITATE) AS CANTITATE + FROM VANZARI A1 + LEFT JOIN VANZARI_DETALII B1 + ON A1.ID_VANZARE = B1.ID_VANZARE + AND B1.STERS = 0 + WHERE A1.STERS = 0 + GROUP BY B1.ID_ARTICOL, A1.ID_COMANDA) D + ON A.ID_ARTICOL = D.ID_ARTICOL + AND A.ID_COMANDA = D.ID_COMANDA + LEFT JOIN (SELECT ID_ARTICOL, + SUM(CANTS + CANT - CANTE) AS CANT_STOC, + CONT + FROM STOC + WHERE AN = V_AN + AND LUNA = V_LUNA + AND ID_GESTIUNE = V_ID_GESTIUNE + AND NVL2(V_ID_SUCURSALA, ID_SUCURSALA, -99) = + NVL(V_ID_SUCURSALA, -99) + GROUP BY ID_ARTICOL, CONT) STOC + ON A.ID_ARTICOL = STOC.ID_ARTICOL + WHERE A.STERS = 0 + AND COM.ID_LUCRARE = V_ID_LUCRARE + AND COM.STERS = 0 + AND COM.ID_SECTIE IN + (SELECT ID_SECTIE + FROM NOM_SECTII + WHERE STERS = 0 + AND NVL2(V_ID_SUCURSALA, ID_SUCURSALA, -99) = + NVL(V_ID_SUCURSALA, -99)) + AND C.IN_STOC = 1 + AND A.CANTITATE - NVL(D.CANTITATE, 0) > 0 + AND COM.ID_GESTIUNE IS NOT NULL + order by 1, 2 desc) A1 + LEFT JOIN NOM_ARTICOLE A2 + ON A1.ID_ARTICOL = A2.ID_ARTICOL + LEFT JOIN NOM_GESTIUNI A3 + ON A1.ID_GESTIUNE = A3.ID_GESTIUNE + LEFT JOIN CRM_POLITICI_PRET_ART A4 + ON A1.ID_POL = A4.ID_POL + AND A1.ID_ARTICOL = A4.ID_ARTICOL + LEFT JOIN (SELECT ID_VALUTA, CURS, MULTIPLICATOR + FROM CURS + WHERE DATA <= V_DATA_CURS + AND DATA2 >= V_DATA_CURS + AND STERS = 0) A5 + ON A1.ID_VALUTA = A5.ID_VALUTA + LEFT JOIN NOM_VALUTE A6 + ON A5.ID_VALUTA = A6.ID_VALUTA + ORDER BY a2.denumire, a2.codmat, a3.nume_gestiune; + END IF; + + END cursor_lucrare; + ------------------------------------------------------------------- + PROCEDURE cursor_articole_k(V_DATA_CURS IN DATE, + V_LUNA IN NUMBER, + V_AN IN NUMBER, + V_ID_UTIL IN NUMBER, + V_ID_SUCURSALA IN NUMBER, + V_CURSOR OUT cursor_facturare) IS + BEGIN + pack_facturare.initializeaza_facturare(V_ID_UTIL); + + OPEN V_CURSOR FOR + SELECT rownum as id_c, + B.ID_ARTICOL, + NULL AS LOT, + NULL as SERIE, + A.ID_POL, + B.ID_VALUTA, + A.NUME_LISTA_PRETURI, + (CASE + WHEN NVL(E.MONEDA_NATIONALA, 1) <> 1 THEN + ROUND(NVL(D.CURS, 0) * + ROUND(NVL(B.DISCOUNT_UNITAR, 0), + pack_sesiune.nzecimale_pretvval) / + NVL(D.MULTIPLICATOR, 1), + pack_sesiune.nzecimale_pretv) + ELSE + ROUND(NVL(B.DISCOUNT_UNITAR, 0), + pack_sesiune.nzecimale_pretv) + END) AS DISCOUNT_UNITAR, + (CASE + WHEN NVL(E.MONEDA_NATIONALA, 1) <> 1 THEN + ROUND(NVL(B.DISCOUNT_UNITAR, 0), + pack_sesiune.nzecimale_pretvval) + ELSE + 0 + END) AS DISCOUNT_UNITAR_VAL, + C.CODMAT, + C.CODBARE, + C.DENUMIRE, + NVL(C.UM, '') AS UM, + C.IN_STOC AS GESTIONABIL, + 0 AS CANTITATE, + B.PROC_TVAV, + A.PRETURI_CU_TVA, + D.CURS, + D.MULTIPLICATOR, + (CASE + WHEN NVL(E.MONEDA_NATIONALA, 1) <> 1 THEN + ROUND(NVL(D.CURS, 0) * + ROUND(NVL(B.PRET, 0), pack_sesiune.nzecimale_pretvval) / + NVL(D.MULTIPLICATOR, 1), + pack_sesiune.nzecimale_pretv) + ELSE + ROUND(NVL(B.PRET, 0), pack_sesiune.nzecimale_pretv) + END) AS PRET, + (CASE + WHEN NVL(E.MONEDA_NATIONALA, 1) <> 1 THEN + ROUND(NVL(B.PRET, 0), pack_sesiune.nzecimale_pretvval) + ELSE + 0 + END) AS PRET_VAL, + 1 - NVL(E.MONEDA_NATIONALA, 1) AS TIP_VALUTA, + E.NUME_VAL + FROM (select a1.id_util, + a3.id_pol, + a3.preturi_cu_tva, + a3.nume_lista_preturi, + a3.id_nota + from utilizatori_rol_intern a1 + left join politici_grupuri a2 + on a1.id_grup = a2.id_grup + left join crm_politici_preturi a3 + on a2.id_politica = a3.id_pol + left join crm_note_vanzari a4 + on a3.id_nota = a4.id_nota + left join note_contabile a5 + on a4.id_set = a5.id_set + where a1.sters = 0 + and a2.sters = 0 + and a3.sters = 0 + and a1.id_util = V_ID_UTIL + and NVL(a5.in_valuta, 0) = 0 + and least(NVL(last_day(to_date(V_AN || V_LUNA, 'YYYYMM')), + sysdate), + sysdate) between a3.datai and + NVL(a3.datas, to_date('300012', 'YYYYMM')) + and NVL(a1.ID_SUCURSALA, -99) = NVL(V_ID_SUCURSALA, -99) + and a3.id_pol = + to_number(pack_sesiune.getoptiunefirma('IDPOLPRETFACTK'))) A + LEFT JOIN CRM_POLITICI_PRET_ART B + ON A.ID_POL = B.ID_POL + LEFT JOIN NOM_ARTICOLE C + ON B.ID_ARTICOL = C.ID_ARTICOL + LEFT JOIN (SELECT ID_VALUTA, CURS, MULTIPLICATOR + FROM CURS + WHERE DATA <= V_DATA_CURS + AND DATA2 >= V_DATA_CURS + AND STERS = 0) D + ON B.ID_VALUTA = D.ID_VALUTA + LEFT JOIN NOM_VALUTE E + ON B.ID_VALUTA = E.ID_VALUTA + WHERE C.IN_STOC = 0 + AND C.IN_CRM = 1 + AND C.STERS = 0 + AND C.INACTIV = 0 + ORDER BY C.DENUMIRE; + + END cursor_articole_k; + ------------------------------------------------------------------- + PROCEDURE cursor_avize(V_LISTAID IN VARCHAR2, + V_ID_UTIL IN NUMBER, + V_DISCOUNT OUT NUMBER, + V_CURSOR OUT cursor_facturare) IS + V_SEPARATOR VARCHAR2(10) := ','; + BEGIN + pack_facturare.initializeaza_facturare(V_ID_UTIL); + + V_DISCOUNT := 0; + + OPEN V_CURSOR FOR + WITH CRS AS + (SELECT X as ID_VANZARE + FROM table(charn2collection(V_LISTAID, V_SEPARATOR))) + SELECT ROWNUM AS ID_C, + A.ID_ARTICOL, + A.LOT, + A.SERIE, + A.ID_POL, + A.ID_VALUTA, + (CASE + WHEN NVL(D.MONEDA_NATIONALA, 1) <> 1 THEN + ROUND(A.CURS * + ROUND(NVL(A.DISCOUNT_UNITAR, 0), + pack_sesiune.nzecimale_pretvval) / + NVL(A.MULTIPLICATOR, 1), + pack_sesiune.nzecimale_pretv) + ELSE + ROUND(NVL(A.DISCOUNT_UNITAR, 0), + pack_sesiune.nzecimale_pretv) + END) AS DISCOUNT_UNITAR, + (CASE + WHEN NVL(D.MONEDA_NATIONALA, 1) <> 1 THEN + ROUND(NVL(A.DISCOUNT_UNITAR, 0), + pack_sesiune.nzecimale_pretvval) + ELSE + 0 + END) AS DISCOUNT_UNITAR_VAL, + C.CODMAT, + C.CODBARE, + C.DENUMIRE, + NVL(C.UM, '') AS UM, + 0 AS GESTIONABIL, + A.CANTITATE - NVL(B.CANTITATE, 0) AS CANTITATE, + A.PROC_TVAV, + A.ID_JTVA_COLOANA, + A.ID_GESTIUNE, + A.CONT, + A.PRET_CU_TVA AS PRETURI_CU_TVA, + A.CURS, + A.MULTIPLICATOR, + A.PRET_ACHIZITIE, + A.PRETD, + A.ID_VALUTAD AS ID_VALUTA_D, + (CASE + WHEN NVL(D.MONEDA_NATIONALA, 1) <> 1 THEN + ROUND(A.CURS * + ROUND(A.PRET, pack_sesiune.nzecimale_pretvval) / + NVL(A.MULTIPLICATOR, 1), + pack_sesiune.nzecimale_pretv) + ELSE + ROUND(A.PRET, pack_sesiune.nzecimale_pretv) + END) AS PRET, + (CASE + WHEN NVL(D.MONEDA_NATIONALA, 1) <> 1 THEN + ROUND(A.PRET, pack_sesiune.nzecimale_pretvval) + ELSE + 0 + END) AS PRET_VAL, + 1 - NVL(D.MONEDA_NATIONALA, 1) AS TIP_VALUTA, + D.NUME_VAL + FROM (SELECT A1.ID_ARTICOL, + A1.LOT, + A1.SERIE, + A1.ID_POL, + A1.DISCOUNT_UNITAR, + SUM(A1.CANTITATE) AS CANTITATE, + A1.PROC_TVAV, + A1.ID_JTVA_COLOANA, + NVL(A1.ID_GESTIUNE, -1000) AS ID_GESTIUNE, + NVL(A1.CONT, 'XXXX') AS CONT, + A1.PRET_CU_TVA, + A1.PRET_ACHIZITIE, + A1.PRETD, + A1.ID_VALUTAD, + A1.PRET, + A1.ID_VALUTA, + NVL(B1.CURS, 0) AS CURS, + NVL(B1.MULTIPLICATOR, 1) AS MULTIPLICATOR + FROM VANZARI_DETALII A1 + LEFT JOIN VANZARI_CURSURI B1 + ON A1.ID_VANZARE = B1.ID_VANZARE + AND A1.ID_VALUTA = B1.ID_VALUTA + WHERE A1.STERS = 0 + AND A1.ID_VANZARE IN (SELECT ID_VANZARE FROM CRS) + GROUP BY A1.ID_ARTICOL, + A1.ID_POL, + A1.LOT, + A1.SERIE, + A1.DISCOUNT_UNITAR, + A1.PROC_TVAV, + A1.ID_JTVA_COLOANA, + NVL(A1.ID_GESTIUNE, -1000), + NVL(A1.CONT, 'XXXX'), + A1.PRET_CU_TVA, + A1.PRET_ACHIZITIE, + A1.PRETD, + A1.ID_VALUTAD, + A1.PRET, + A1.ID_VALUTA, + NVL(B1.CURS, 0), + NVL(B1.MULTIPLICATOR, 1)) A + LEFT JOIN (SELECT A2.ID_ARTICOL, + A2.LOT, + A2.SERIE, + A2.ID_POL, + A2.DISCOUNT_UNITAR, + SUM(B2.CANTITATE) AS CANTITATE, + A2.PROC_TVAV, + A2.ID_JTVA_COLOANA, + NVL(A2.ID_GESTIUNE, -1000) AS ID_GESTIUNE, + NVL(A2.CONT, 'XXXX') AS CONT, + A2.PRET_CU_TVA, + A2.PRET_ACHIZITIE, + A2.PRETD, + A2.ID_VALUTAD, + A2.PRET, + A2.ID_VALUTA + FROM VANZARI_DETALII A2 + RIGHT JOIN VANZARI_CANTITATI B2 + ON A2.ID_VANZARE_DET = B2.ID_VANZARE_DET_AVIZ + WHERE A2.STERS = 0 + AND A2.ID_VANZARE IN (SELECT ID_VANZARE FROM CRS) + AND B2.STERS = 0 + GROUP BY A2.ID_ARTICOL, + A2.ID_POL, + A2.LOT, + A2.SERIE, + A2.DISCOUNT_UNITAR, + A2.PROC_TVAV, + A2.ID_JTVA_COLOANA, + NVL(A2.ID_GESTIUNE, -1000), + NVL(A2.CONT, 'XXXX'), + A2.PRET_CU_TVA, + A2.PRET_ACHIZITIE, + A2.PRETD, + A2.ID_VALUTAD, + A2.PRET, + A2.ID_VALUTA) B + ON A.ID_ARTICOL = B.ID_ARTICOL + AND A.ID_POL = B.ID_POL + AND NVL(A.LOT, '+_') = NVL(B.LOT, '+_') + AND NVL(A.SERIE, '+_') = NVL(B.SERIE, '+_') + AND A.DISCOUNT_UNITAR = B.DISCOUNT_UNITAR + AND A.PROC_TVAV = B.PROC_TVAV + AND NVL(A.ID_JTVA_COLOANA, -9999) = NVL(B.ID_JTVA_COLOANA, -9999) + AND NVL(A.ID_GESTIUNE, -9999) = NVL(B.ID_GESTIUNE, -9999) + AND NVL(A.CONT, 'XXXX') = NVL(B.CONT, 'XXXX') + AND A.PRET_CU_TVA = B.PRET_CU_TVA + AND A.PRET = B.PRET + AND A.ID_VALUTA = B.ID_VALUTA + AND NVL(A.PRET_ACHIZITIE, 0) = NVL(B.PRET_ACHIZITIE, 0) + AND NVL(A.PRETD, 0) = NVL(B.PRETD, 0) + AND NVL(A.ID_VALUTAD, -99) = NVL(B.ID_VALUTAD, -99) + LEFT JOIN NOM_ARTICOLE C + ON A.ID_ARTICOL = C.ID_ARTICOL + LEFT JOIN NOM_VALUTE D + ON A.ID_VALUTA = D.ID_VALUTA + WHERE A.CANTITATE <> NVL(B.CANTITATE, 0) + ORDER BY C.DENUMIRE; + + END cursor_avize; + ------------------------------------------------------------------- + PROCEDURE cursor_aviz_nir(V_ID_GESTIUNE_DEST IN NUMBER, + V_ID_FURNIZOR IN NUMBER, + V_NR_ACT IN NUMBER, + V_ID_SUCURSALA IN NUMBER, + V_CURSOR OUT cursor_facturare) IS + + BEGIN + OPEN V_CURSOR FOR + select rownum as id_c, + rownum as id_temp, + a.ID_ARTICOL, + a.LOT, + a.SERIE, + a.ID_GESTIUNE, + b.ID_VALUTA, + 0 as discount_unitar, + c.CODMAT, + c.DENUMIRE, + Nvl(c.UM, Chr(32)) as um, + 1 as gestionabil, + a.CANT as cantitate, + a.PROC_TVAV, + decode(d.nr_pag, 6, 1, 7, 1, 0) as preturi_cu_tva, + 0 as CURS, + 1 as multiplicator, + a.PRET as preta, + a.pretv + a.tvav as pretctva, + a.pretv as pretftva, + a.tvav, + 0 as pret_val, + b.nume_val, + 0 as discount_unitar_val, + 0 as tip_valuta, + a.cont, + a.pretd, + a.id_valuta as id_valuta_d + from rul A + left join (select id_valuta, nume_val + from vnom_valute + where moneda_nationala = 1 + and rownum = 1) b + on 1 = 1 + left join nom_articole c + on a.id_articol = c.id_articol + left join nom_gestiuni d + on a.id_gestiune = d.id_gestiune + where a.sters = 0 + and a.id_gestiune = V_ID_GESTIUNE_DEST + and a.cod in (select max(a1.cod) + from act a1 + where a1.sters = 0 + and a1.id_partc = V_ID_FURNIZOR + and a1.scc = '401' + and a1.nract = V_NR_ACT + and NVL2(V_ID_SUCURSALA, a1.id_sucursala, -1) = + NVL(V_ID_SUCURSALA, -1)); + END cursor_aviz_nir; + ------------------------------------------------------------------- + PROCEDURE cursor_retur(V_IN_VALUTA IN NUMBER, + V_LISTAID IN VARCHAR2, + V_ID_UTIL IN NUMBER, + V_CURSOR OUT cursor_facturare) IS + V_COPIERE NUMBER := 0; + V_PROFORMA NUMBER := 0; + BEGIN + pack_facturare.cursor_retur_document(V_IN_VALUTA, + V_LISTAID, + V_COPIERE, + V_PROFORMA, + V_ID_UTIL, + V_CURSOR); + END; + + PROCEDURE cursor_retur_document(V_IN_VALUTA IN NUMBER, + V_LISTAID IN VARCHAR2, + V_COPIERE IN NUMBER, + V_PROFORMA IN NUMBER, + V_ID_UTIL IN NUMBER, + V_CURSOR OUT cursor_facturare) IS + V_SEPARATOR VARCHAR2(10) := ','; + -- V_COPIERE: 1 (COPIERE) GESTIONABIL = NOM_ARTICOLE.IN_STOC, 0 (RETUR) GESTIONABIL = VANZARI_DETALII.ID_GEST <> 0 + -- V_PROFORMA: Daca este proforma (1), fac articolele negestionabile sa pot alege orice cantitate + BEGIN + pack_facturare.initializeaza_facturare(V_ID_UTIL); + + OPEN V_CURSOR FOR + WITH CRS AS + (SELECT X as ID_VANZARE + FROM table(charn2collection(V_LISTAID, V_SEPARATOR))) + SELECT ROWNUM AS ID_C, + A.ID_ARTICOL, + A.LOT, + A.SERIE, + A.ID_POL, + A.ID_VALUTA, + (CASE + WHEN NVL(C.MONEDA_NATIONALA, 1) <> 1 THEN + ROUND(A.CURS * + ROUND(NVL(A.DISCOUNT_UNITAR, 0), + pack_sesiune.nzecimale_pretvval) / + NVL(A.MULTIPLICATOR, 1), + pack_sesiune.nzecimale_pretv) + ELSE + ROUND(NVL(A.DISCOUNT_UNITAR, 0), + pack_sesiune.nzecimale_pretv) + END) AS DISCOUNT_UNITAR, + (CASE + WHEN NVL(C.MONEDA_NATIONALA, 1) <> 1 THEN + ROUND(NVL(A.DISCOUNT_UNITAR, 0), + pack_sesiune.nzecimale_pretvval) + ELSE + 0 + END) AS DISCOUNT_UNITAR_VAL, + B.CODMAT, + B.CODBARE, + B.DENUMIRE, + NVL(B.UM, '') AS UM, + (case + when V_PROFORMA = 1 then + 0 + when V_COPIERE = 1 then + B.IN_STOC + else + A.GESTIONABIL + end) AS GESTIONABIL, + A.CANTITATE, + A.PROC_TVAV, + A.ID_JTVA_COLOANA, + A.PRET_CU_TVA AS PRETURI_CU_TVA, + A.CURS, + A.MULTIPLICATOR, + (CASE + WHEN NVL(C.MONEDA_NATIONALA, 1) <> 1 THEN + ROUND(A.CURS * + ROUND(A.PRET, pack_sesiune.nzecimale_pretvval) / + NVL(A.MULTIPLICATOR, 1), + pack_sesiune.nzecimale_pretv) + ELSE + ROUND(A.PRET, pack_sesiune.nzecimale_pretv) + END) + A.DIFERENTA AS PRET, + (CASE + WHEN NVL(C.MONEDA_NATIONALA, 1) <> 1 THEN + ROUND(A.PRET, pack_sesiune.nzecimale_pretvval) + ELSE + 0 + END) AS PRET_VAL, + 1 - NVL(C.MONEDA_NATIONALA, 1) AS TIP_VALUTA, + C.NUME_VAL, + A.EXPLICATIE, + nvl(A.ID_GESTIUNE, 0) as ID_GESTIUNE, + A.PRET_ACHIZITIE, + A.PRETD, + A.ID_JTVA_COLOANA_EX + FROM (SELECT A1.ID_ARTICOL, + A1.LOT, + A1.SERIE, + A1.ID_POL, + A1.DISCOUNT_UNITAR, + A1.DIFERENTA, + --SUM(A1.CANTITATE) AS CANTITATE, + A1.CANTITATE, + A1.PROC_TVAV, + A1.ID_JTVA_COLOANA, + NVL2(A1.ID_GESTIUNE, 1, 0) AS GESTIONABIL, + A1.PRET_CU_TVA, + A1.PRET, + A1.ID_VALUTA, + NVL(A2.CURS, 0) AS CURS, + NVL(A2.MULTIPLICATOR, 1) AS MULTIPLICATOR, + A1.EXPLICATIE, + A1.ID_GESTIUNE, + A1.PRET_ACHIZITIE, + A1.PRETD, + A1.ID_JTVA_COLOANA_EX + FROM VANZARI_DETALII A1 + LEFT JOIN VANZARI_CURSURI A2 + ON A1.ID_VANZARE = A2.ID_VANZARE + AND A1.ID_VALUTA = A2.ID_VALUTA + WHERE A1.STERS = 0 + AND A1.ID_VANZARE IN (SELECT ID_VANZARE FROM CRS)) A + LEFT JOIN NOM_ARTICOLE B + ON A.ID_ARTICOL = B.ID_ARTICOL + LEFT JOIN NOM_VALUTE C + ON A.ID_VALUTA = C.ID_VALUTA + ORDER BY B.DENUMIRE; + + END cursor_retur_document; + ----------------------------------------------------------------- + PROCEDURE cursor_copiere(V_IN_VALUTA IN NUMBER, + V_LISTAID IN VARCHAR2, + V_ID_UTIL IN NUMBER, + V_CURSOR OUT cursor_facturare) IS + V_SEPARATOR VARCHAR2(10) := ','; + BEGIN + pack_facturare.initializeaza_facturare(V_ID_UTIL); + + OPEN V_CURSOR FOR + WITH CRS AS + (SELECT X as ID_VANZARE + FROM table(charn2collection(V_LISTAID, V_SEPARATOR))) + SELECT ROWNUM AS ID_C, + A.ID_ARTICOL, + A.LOT, + A.SERIE, + A.ID_POL, + A.ID_VALUTA, + (CASE + WHEN NVL(C.MONEDA_NATIONALA, 1) <> 1 THEN + ROUND(A.CURS * + ROUND(NVL(A.DISCOUNT_UNITAR, 0), + pack_sesiune.nzecimale_pretvval) / + NVL(A.MULTIPLICATOR, 1), + pack_sesiune.nzecimale_pretv) + ELSE + ROUND(NVL(A.DISCOUNT_UNITAR, 0), + pack_sesiune.nzecimale_pretv) + END) AS DISCOUNT_UNITAR, + (CASE + WHEN NVL(C.MONEDA_NATIONALA, 1) <> 1 THEN + ROUND(NVL(A.DISCOUNT_UNITAR, 0), + pack_sesiune.nzecimale_pretvval) + ELSE + 0 + END) AS DISCOUNT_UNITAR_VAL, + B.CODMAT, + B.CODBARE, + B.DENUMIRE, + NVL(B.UM, '') AS UM, + A.GESTIONABIL, + A.CANTITATE, + A.PROC_TVAV, + A.ID_JTVA_COLOANA, + A.PRET_CU_TVA AS PRETURI_CU_TVA, + A.CURS, + A.MULTIPLICATOR, + (CASE + WHEN NVL(C.MONEDA_NATIONALA, 1) <> 1 THEN + ROUND(A.CURS * + ROUND(A.PRET, pack_sesiune.nzecimale_pretvval) / + NVL(A.MULTIPLICATOR, 1), + pack_sesiune.nzecimale_pretv) + ELSE + ROUND(A.PRET, pack_sesiune.nzecimale_pretv) + END) + A.DIFERENTA AS PRET, + (CASE + WHEN NVL(C.MONEDA_NATIONALA, 1) <> 1 THEN + ROUND(A.PRET, pack_sesiune.nzecimale_pretvval) + ELSE + 0 + END) AS PRET_VAL, + 1 - NVL(C.MONEDA_NATIONALA, 1) AS TIP_VALUTA, + C.NUME_VAL + FROM (SELECT A1.ID_ARTICOL, + A1.LOT, + A1.SERIE, + A1.ID_POL, + A1.DISCOUNT_UNITAR, + A1.DIFERENTA, + --SUM(A1.CANTITATE) AS CANTITATE, + A1.CANTITATE, + A1.PROC_TVAV, + A1.ID_JTVA_COLOANA, + NVL2(A1.ID_GESTIUNE, 1, 0) AS GESTIONABIL, + A1.PRET_CU_TVA, + A1.PRET, + A1.ID_VALUTA, + NVL(A2.CURS, 0) AS CURS, + NVL(A2.MULTIPLICATOR, 1) AS MULTIPLICATOR + FROM VANZARI_DETALII A1 + LEFT JOIN VANZARI_CURSURI A2 + ON A1.ID_VANZARE = A2.ID_VANZARE + AND A1.ID_VALUTA = A2.ID_VALUTA + WHERE A1.STERS = 0 + AND A1.ID_VANZARE IN (SELECT ID_VANZARE FROM CRS)) A + LEFT JOIN NOM_ARTICOLE B + ON A.ID_ARTICOL = B.ID_ARTICOL + LEFT JOIN NOM_VALUTE C + ON A.ID_VALUTA = C.ID_VALUTA + ORDER BY B.DENUMIRE; + + END cursor_copiere; + ------------------------------------------------------------------- + PROCEDURE cursor_gestiune(V_DATA_CURS IN DATE, + V_ID_POL IN NUMBER, + V_ID_GESTIUNE IN NUMBER, + V_LUNA IN NUMBER, + V_AN IN NUMBER, + V_ID_UTIL IN NUMBER, + V_ID_SUCURSALA IN NUMBER, + V_CURSOR OUT cursor_facturare) IS + V_NR_INREGISTRARI NUMBER(10); + V_NR_INREGISTRARI_TOT NUMBER(10); + BEGIN + pack_facturare.initializeaza_facturare(V_ID_UTIL); + + -- verificare ca exista cursul pentru valutele din CRM_POLITICI_PRET_ART + SELECT SUM(CASE + WHEN B.ID_VALUTA <> pack_facturare.nid_moneda_nationala THEN + 1 + ELSE + 0 + END), + SUM(CASE + WHEN A.ID_VALUTA <> pack_facturare.nid_moneda_nationala THEN + 1 + ELSE + 0 + END) + INTO V_NR_INREGISTRARI, V_NR_INREGISTRARI_TOT + FROM (SELECT DISTINCT A2.ID_VALUTA + FROM STOC A1 + LEFT JOIN CRM_POLITICI_PRET_ART A2 + ON A1.ID_ARTICOL = A2.ID_ARTICOL + WHERE A1.ID_GESTIUNE = V_ID_GESTIUNE + AND A2.ID_POL = V_ID_POL + AND NVL(A1.ID_SUCURSALA, -99) = NVL(V_ID_SUCURSALA, -99)) A + LEFT JOIN CURS B + ON A.ID_VALUTA = B.ID_VALUTA + AND B.STERS = 0 + AND B.DATA <= V_DATA_CURS + AND B.DATA2 >= V_DATA_CURS; + + IF V_NR_INREGISTRARI <> V_NR_INREGISTRARI_TOT THEN + RAISE_APPLICATION_ERROR(-20005, + 'Nu este setat cursul din data de ' || + to_char(V_DATA_CURS, 'DD/MM/YYYY') || ' !'); + END IF; + + -- nu se mai verifica dreptul pe gestiune + -- v_id_gestiune este dintre gestiunile pe care are drepturi utilizatorul + OPEN V_CURSOR FOR + SELECT ROWNUM as id_c, A.* + FROM (SELECT A.ID_ARTICOL, + NULL AS LOT, + NULL AS SERIE, + V_ID_GESTIUNE AS ID_GESTIUNE, + --A.CONT, + B.ID_POL, + B.ID_VALUTA, + D.NUME_LISTA_PRETURI, + (CASE + WHEN NVL(F.MONEDA_NATIONALA, 1) <> 1 THEN + ROUND(NVL(E.CURS, 0) * + ROUND(NVL(B.DISCOUNT_UNITAR, 0), + pack_sesiune.nzecimale_pretvval) / + NVL(E.MULTIPLICATOR, 1), + pack_sesiune.nzecimale_pretv) + ELSE + ROUND(NVL(B.DISCOUNT_UNITAR, 0), + pack_sesiune.nzecimale_pretv) + END) AS DISCOUNT_UNITAR, + (CASE + WHEN NVL(F.MONEDA_NATIONALA, 1) <> 1 THEN + ROUND(NVL(B.DISCOUNT_UNITAR, 0), + pack_sesiune.nzecimale_pretvval) + ELSE + 0 + END) AS DISCOUNT_UNITAR_VAL, + C.CODMAT, + C.CODBARE, + C.DENUMIRE, + NVL(C.UM, '') AS UM, + 1 AS GESTIONABIL, + SUM(NVL(A.CANTS + A.CANT - A.CANTE, 0)) AS CANTITATE, + B.PROC_TVAV, + D.PRETURI_CU_TVA, + E.CURS, + E.MULTIPLICATOR, + (CASE + WHEN NVL(F.MONEDA_NATIONALA, 1) <> 1 THEN + ROUND(NVL(E.CURS, 0) * + ROUND(B.PRET, pack_sesiune.nzecimale_pretvval) / + NVL(E.MULTIPLICATOR, 1), + pack_sesiune.nzecimale_pretv) + ELSE + ROUND(B.PRET, pack_sesiune.nzecimale_pretv) + END) AS PRET, + (CASE + WHEN NVL(F.MONEDA_NATIONALA, 1) <> 1 THEN + ROUND(B.PRET, pack_sesiune.nzecimale_pretvval) + ELSE + 0 + END) AS PRET_VAL, + 1 - NVL(F.MONEDA_NATIONALA, 1) AS TIP_VALUTA, + F.NUME_VAL, + DECODE(B.ID_POL, + NVL(pack_facturare.nid_politica_stoc, + B.ID_POL + 1), + 1, + 0) AS MODIFICABIL + FROM (SELECT ID_ARTICOL, CANT, CANTS, CANTE + FROM STOC + WHERE AN = V_AN + AND LUNA = V_LUNA + AND ID_GESTIUNE = V_ID_GESTIUNE + AND NVL(ID_SUCURSALA, -99) = + NVL(V_ID_SUCURSALA, -99)) A + JOIN (SELECT ID_ARTICOL, + ID_POL, + ID_VALUTA, + DISCOUNT_UNITAR, + PROC_TVAV, + PRET + FROM CRM_POLITICI_PRET_ART + WHERE ID_POL = V_ID_POL) B + ON A.ID_ARTICOL = B.ID_ARTICOL + LEFT JOIN NOM_ARTICOLE C + ON A.ID_ARTICOL = C.ID_ARTICOL + LEFT JOIN CRM_POLITICI_PRETURI D + ON B.ID_POL = D.ID_POL + LEFT JOIN (SELECT ID_VALUTA, CURS, MULTIPLICATOR + FROM CURS + WHERE DATA <= V_DATA_CURS + AND DATA2 >= V_DATA_CURS + AND STERS = 0) E + ON B.ID_VALUTA = E.ID_VALUTA + LEFT JOIN NOM_VALUTE F + ON B.ID_VALUTA = F.ID_VALUTA + GROUP BY A.ID_ARTICOL, + -- A.CONT, + B.ID_POL, + B.ID_VALUTA, + D.NUME_LISTA_PRETURI, + (CASE + WHEN NVL(F.MONEDA_NATIONALA, 1) <> 1 THEN + ROUND(NVL(E.CURS, 0) * + ROUND(NVL(B.DISCOUNT_UNITAR, 0), + pack_sesiune.nzecimale_pretvval) / + NVL(E.MULTIPLICATOR, 1), + pack_sesiune.nzecimale_pretv) + ELSE + ROUND(NVL(B.DISCOUNT_UNITAR, 0), + pack_sesiune.nzecimale_pretv) + END), + (CASE + WHEN NVL(F.MONEDA_NATIONALA, 1) <> 1 THEN + ROUND(NVL(B.DISCOUNT_UNITAR, 0), + pack_sesiune.nzecimale_pretvval) + ELSE + 0 + END), + C.CODMAT, + C.CODBARE, + C.DENUMIRE, + NVL(C.UM, ''), + C.IN_STOC, + B.PROC_TVAV, + D.PRETURI_CU_TVA, + E.CURS, + E.MULTIPLICATOR, + (CASE + WHEN NVL(F.MONEDA_NATIONALA, 1) <> 1 THEN + ROUND(NVL(E.CURS, 0) * + ROUND(B.PRET, + pack_sesiune.nzecimale_pretvval) / + NVL(E.MULTIPLICATOR, 1), + pack_sesiune.nzecimale_pretv) + ELSE + ROUND(B.PRET, pack_sesiune.nzecimale_pretv) + END), + (CASE + WHEN NVL(F.MONEDA_NATIONALA, 1) <> 1 THEN + ROUND(B.PRET, pack_sesiune.nzecimale_pretvval) + ELSE + 0 + END), + 1 - NVL(F.MONEDA_NATIONALA, 1), + F.NUME_VAL + ORDER BY C.DENUMIRE) A + WHERE A.CANTITATE > 0; + + END cursor_gestiune; + ------------------------------------------------------------------- + PROCEDURE cursor_gestiuni_articol(V_ID_ARTICOL IN NUMBER, + V_TIP IN NUMBER, + V_ID_GESTIUNE IN NUMBER, + V_LUNA IN NUMBER, + V_AN IN NUMBER, + V_ID_UTIL IN NUMBER, + V_ID_SUCURSALA IN NUMBER, + V_CURSOR OUT cursor_facturare) IS + BEGIN + OPEN V_CURSOR FOR + SELECT 0 AS ALES, + A.ID_GESTIUNE, + A.CANTITATE, + A.CONT, + A.ACONT, + A.LOT, + A.SERIE, + A.PRET, + A.PRETD, + A.ID_VALUTA, + B.NUME_GESTIUNE, + A.DATAIN, + A.PRETV, + A.PRETVCTVA, + A.ID_PART_REZ, + A.ID_LUCRARE_REZ, + C.DENUMIRE AS PART_REZ, + D.NRORD AS NRORD_REZ, + E.NUME_VAL + FROM (SELECT A1.ID_GESTIUNE, + A2.ID_ARTICOL, + A2.PRET, + A2.PRETD, + A2.ID_VALUTA, + A2.LOT, + A2.SERIE, + SUM(NVL(A2.CANTS + A2.CANT - A2.CANTE, 0)) AS CANTITATE, + A2.CONT, + A2.ACONT, + A2.DATAIN, + A2.PRETV, + A2.PRETV + A2.TVAV as PRETVCTVA, + A2.ID_PART_REZ, + A2.ID_LUCRARE_REZ + FROM (SELECT DISTINCT A11.ID_GESTIUNE + FROM GEST_CORESP_GRUPE_GESTIUNI A11 + LEFT JOIN GEST_CORESP_UTIL_GRUPE A12 + ON A11.ID_GRUPE = A12.ID_GRUPE + WHERE A11.STERS = 0 + AND A12.STERS = 0 + AND A12.ID_UTIL = V_ID_UTIL + AND NVL2(V_ID_GESTIUNE, A11.ID_GESTIUNE, 2) = + NVL(V_ID_GESTIUNE, 2)) A1 + LEFT JOIN STOC A2 + ON A1.ID_GESTIUNE = A2.ID_GESTIUNE + AND A2.LUNA = V_LUNA + AND A2.AN = V_AN + AND NVL2(V_ID_SUCURSALA, A2.ID_SUCURSALA, -99) = + NVL(V_ID_SUCURSALA, -99) + AND A2.ID_ARTICOL = V_ID_ARTICOL + GROUP BY A1.ID_GESTIUNE, + A2.ID_ARTICOL, + A2.PRET, + A2.PRETD, + A2.ID_VALUTA, + A2.LOT, + A2.SERIE, + A2.CONT, + A2.ACONT, + A2.DATAIN, + A2.PRETV, + A2.TVAV, + A2.ID_PART_REZ, + A2.ID_LUCRARE_REZ) A + LEFT JOIN NOM_GESTIUNI B + ON A.ID_GESTIUNE = B.ID_GESTIUNE + LEFT JOIN NOM_PARTENERI C + ON A.ID_PART_REZ = C.ID_PART + LEFT JOIN VNOM_LUCRARI D + ON A.ID_LUCRARE_REZ = D.ID_LUCRARE + LEFT JOIN NOM_VALUTE E + ON A.ID_VALUTA = E.ID_VALUTA + WHERE A.CANTITATE > 0 + ORDER BY A.DATAIN, + B.NUME_GESTIUNE, + A.LOT, + A.SERIE, + A.PRET, + A.PRETV, + A.CONT, + A.ACONT, + C.DENUMIRE, + D.NRORD; + + END cursor_gestiuni_articol; + + ------------------------------------------------------------------- + -- adaugare articol gestionabil pe factura, daca nu exista in stoc + -- pentru optiunea RF_FACTURARE_FARA_STOC = 1 + -- se selecteaza din stoc datele de pe ultima intrare, ultimele 12 luni + ------------------------------------------------------------------- + PROCEDURE cursor_gestiuni_articol_stoc0(V_ID_ARTICOL IN NUMBER, + V_TIP IN NUMBER, + V_ID_GESTIUNE IN NUMBER, + V_LUNA IN NUMBER, + V_AN IN NUMBER, + V_ID_UTIL IN NUMBER, + V_ID_SUCURSALA IN NUMBER, + V_CURSOR OUT cursor_facturare) IS + BEGIN + OPEN V_CURSOR FOR + SELECT 0 AS ALES, + A.ID_GESTIUNE, + A.CANTITATE, + CAST(NVL2(B.CONT, B.CONT, NVL2(A.CONT, A.CONT, '371')) AS + VARCHAR2(4)) AS CONT, + A.ACONT, + A.LOT, + A.SERIE, + NVL(A.PRET, 0.00) AS PRET, + NVL(A.PRETD, 0.00) AS PRETD, + A.ID_VALUTA, + B.NUME_GESTIUNE, + A.DATAIN, + NVL(A.PRETV, 0.00) AS PRETV, + NVL(A.PRETVCTVA, 0.00) AS PRETVCTVA, + A.ID_PART_REZ, + A.ID_LUCRARE_REZ, + C.DENUMIRE AS PART_REZ, + D.NRORD AS NRORD_REZ, + E.NUME_VAL + FROM (SELECT A1.ID_GESTIUNE, + A2.ID_ARTICOL, + A2.PRET, + A2.PRETD, + A2.ID_VALUTA, + A2.LOT, + A2.SERIE, + 1000 AS CANTITATE, -- cantitate suficienta 1000 pentru vanzarea articolelor gestionabile fara stoc + A2.CONT, + A2.ACONT, + A2.DATAIN, + A2.PRETV, + A2.PRETV + A2.TVAV as PRETVCTVA, + CAST(NULL AS Number(10, 0)) AS ID_PART_REZ, + CAST(NULL AS Number(10, 0)) AS ID_LUCRARE_REZ + FROM (SELECT DISTINCT A11.ID_GESTIUNE + FROM GEST_CORESP_GRUPE_GESTIUNI A11 + JOIN GEST_CORESP_UTIL_GRUPE A12 + ON A11.ID_GRUPE = A12.ID_GRUPE + JOIN NOM_GESTIUNI A13 + ON A11.ID_GESTIUNE = A13.ID_GESTIUNE + WHERE A11.STERS = 0 + AND A12.STERS = 0 + AND A12.ID_UTIL = V_ID_UTIL + AND A13.STERS = 0 + AND A13.INACTIV = 0 + AND A13.NR_PAG IN (2, 4, 5, 6, 7) + AND NVL2(V_ID_GESTIUNE, A11.ID_GESTIUNE, 2) = + NVL(V_ID_GESTIUNE, 2)) A1 + LEFT JOIN STOC A2 + ON A1.ID_GESTIUNE = A2.ID_GESTIUNE + AND A2.AN >= V_AN - 1 -- anul precedent si anul curent + AND A2.PRET <> 0 + AND NVL2(V_ID_SUCURSALA, A2.ID_SUCURSALA, -99) = + NVL(V_ID_SUCURSALA, -99) + AND A2.ID_ARTICOL = V_ID_ARTICOL + GROUP BY A1.ID_GESTIUNE, + A2.ID_ARTICOL, + A2.PRET, + A2.PRETD, + A2.ID_VALUTA, + A2.LOT, + A2.SERIE, + A2.CONT, + A2.ACONT, + A2.DATAIN, + A2.PRETV, + A2.TVAV, + A2.ID_PART_REZ, + A2.ID_LUCRARE_REZ) A + LEFT JOIN NOM_GESTIUNI B + ON A.ID_GESTIUNE = B.ID_GESTIUNE + LEFT JOIN NOM_PARTENERI C + ON A.ID_PART_REZ = C.ID_PART + LEFT JOIN VNOM_LUCRARI D + ON A.ID_LUCRARE_REZ = D.ID_LUCRARE + LEFT JOIN NOM_VALUTE E + ON A.ID_VALUTA = E.ID_VALUTA + ORDER BY NVL(A.DATAIN, TO_DATE('1900', 'YYYY')) DESC, + B.NUME_GESTIUNE, + A.LOT, + A.SERIE, + A.PRET, + A.PRETV, + A.CONT, + A.ACONT, + C.DENUMIRE, + D.NRORD; + + END cursor_gestiuni_articol_stoc0; + ------------------------------------------------------------------- + PROCEDURE cursor_gestiuni_articol_retur(V_ID_ARTICOL IN NUMBER, + V_TIP IN NUMBER, + V_ID_GESTIUNE IN NUMBER, + V_PRETV IN NUMBER, + V_DISCOUNT IN NUMBER, + V_LUNA IN NUMBER, + V_AN IN NUMBER, + V_ID_UTIL IN NUMBER, + V_LISTAID IN VARCHAR2, + V_ID_SUCURSALA IN NUMBER, + V_CURSOR OUT cursor_facturare) IS + V_SEPARATOR VARCHAR2(10) := ','; + BEGIN + OPEN V_CURSOR FOR + WITH CRS AS + ( + + SELECT X as ID_VANZARE + FROM table(charn2collection(V_LISTAID, V_SEPARATOR)) + + ) + SELECT 0 AS ALES, + A1.ID_GESTIUNE, + A2.CANTITATE, + A2.CONT, + A2.ACONT, + A2.LOT, + A2.SERIE, + A2.PRET, + A2.PRETD, + A2.ID_VALUTA, + B.NUME_GESTIUNE, + A2.DATAIN, + A2.PRETV, + A2.PRETVCTVA, + A2.ID_PART_REZ, + A2.ID_LUCRARE_REZ, + C.DENUMIRE AS PART_REZ, + D.NRORD AS NRORD_REZ, + E.NUME_VAL + FROM (SELECT DISTINCT A11.ID_GESTIUNE + FROM GEST_CORESP_GRUPE_GESTIUNI A11 + LEFT JOIN GEST_CORESP_UTIL_GRUPE A12 + ON A11.ID_GRUPE = A12.ID_GRUPE + WHERE A11.STERS = 0 + AND A12.STERS = 0 + AND A12.ID_UTIL = V_ID_UTIL + AND NVL2(V_ID_GESTIUNE, A11.ID_GESTIUNE, 2) = + NVL(V_ID_GESTIUNE, 2)) A1 + LEFT JOIN (SELECT SUM(A22.CANTE) AS CANTITATE, + A22.ID_GESTIUNE, + A23.NR_PAG, + A22.ID_ARTICOL, + A22.PRET, + A22.PRETD, + A22.ID_VALUTA, + A22.LOT, + A22.SERIE, + A22.CONT, + A22.ACONT, + A22.DATAIN, + A22.PRETV, + A22.PRETV + A22.TVAV AS PRETVCTVA, + A22.ID_PART_REZ, + A22.ID_LUCRARE_REZ + FROM (SELECT COD + FROM VANZARI + WHERE ID_VANZARE IN (SELECT ID_VANZARE FROM CRS)) A21 + LEFT JOIN RUL A22 + ON A21.COD = A22.COD + AND A22.STERS = 0 + AND A22.ID_TIP_RULAJ = 0 + AND A22.ID_ARTICOL = V_ID_ARTICOL + AND NVL2(V_ID_SUCURSALA, A22.ID_SUCURSALA, -99) = + NVL(V_ID_SUCURSALA, -99) + LEFT JOIN NOM_GESTIUNI A23 + ON A22.ID_GESTIUNE = A23.ID_GESTIUNE + GROUP BY A22.ID_GESTIUNE, + A23.NR_PAG, + A22.ID_ARTICOL, + A22.PRET, + A22.PRETD, + A22.ID_VALUTA, + A22.LOT, + A22.SERIE, + A22.CONT, + A22.ACONT, + A22.DATAIN, + A22.PRETV, + A22.TVAV, + A22.ID_PART_REZ, + A22.ID_LUCRARE_REZ) A2 + ON A1.ID_GESTIUNE = A2.ID_GESTIUNE + LEFT JOIN NOM_GESTIUNI B + ON A1.ID_GESTIUNE = B.ID_GESTIUNE + LEFT JOIN NOM_PARTENERI C + ON A2.ID_PART_REZ = C.ID_PART + LEFT JOIN VNOM_LUCRARI D + ON A2.ID_LUCRARE_REZ = D.ID_LUCRARE + LEFT JOIN NOM_VALUTE E + ON A2.ID_VALUTA = E.ID_VALUTA + WHERE A2.CANTITATE > 0 + ORDER BY A2.DATAIN, + B.NUME_GESTIUNE, + A2.LOT, + A2.SERIE, + A2.PRET, + A2.PRETV, + A2.CONT, + A2.ACONT, + C.DENUMIRE, + D.NRORD; + + END cursor_gestiuni_articol_retur; + ------------------------------------------------------------------- + PROCEDURE adauga_articol_factura_deviz(V_ID_ARTICOL IN NUMBER, + V_EXPLICATIE IN VARCHAR2, + V_SERIE IN VARCHAR2, + V_PRET_ACHIZITIE IN NUMBER, + V_PRETD IN NUMBER, + V_ID_VALUTAD IN NUMBER, + V_PRET IN NUMBER, + V_ID_VALUTA IN NUMBER, + V_CURS IN NUMBER, + V_MULTIPLICATOR IN NUMBER, + V_PROC_TVAV IN NUMBER, + V_ID_JTVA_COLOANA IN NUMBER, + V_CANTITATE IN NUMBER, + V_DISCOUNT_UNITAR IN NUMBER, + V_ID_GESTIUNE IN NUMBER, + V_CONT IN NUMBER, + V_PRET_CU_TVA IN NUMBER, + V_ID_JTVA_COLOANA_EX IN NUMBER DEFAULT NULL, + V_ID_CTR IN NUMBER DEFAULT NULL, + V_TAXCODE IN NUMBER DEFAULT NULL, + V_LOT IN VARCHAR2 DEFAULT NULL) IS + BEGIN + INSERT INTO VANZARI_DETALII_TEMP + (ID_ARTICOL, + EXPLICATIA, + SERIE, + PRET_ACHIZITIE, + PRETD, + ID_VALUTAD, + PRET, + PROC_TVAV, + ID_JTVA_COLOANA, + ID_JTVA_COLOANA_EX, + CANTITATE, + DISCOUNT_UNITAR, + ID_GESTIUNE, + CONT, + ID_VALUTA, + CURS, + MULTIPLICATOR, + PRET_CU_TVA, + IN_STOC, + ID_TEMP, + ID_CTR, + TAXCODE, + LOT) + VALUES + (V_ID_ARTICOL, + V_EXPLICATIE, + V_SERIE, + V_PRET_ACHIZITIE, + V_PRETD, + V_ID_VALUTAD, + V_PRET, + V_PROC_TVAV, + V_ID_JTVA_COLOANA, + V_ID_JTVA_COLOANA_EX, + V_CANTITATE, + V_DISCOUNT_UNITAR, + V_ID_GESTIUNE, + V_CONT, + NVL(V_ID_VALUTA, pack_facturare.nid_moneda_nationala), + DECODE(V_CURS, 0, 1, V_CURS), + V_MULTIPLICATOR, + V_PRET_CU_TVA, + 1, + 0, + V_ID_CTR, + decode(V_TAXCODE, 0, null, V_TAXCODE), + V_LOT); + END adauga_articol_factura_deviz; + ------------------------------------------------------------------- + PROCEDURE adauga_articol_factura_stoc(V_ID_ARTICOL IN NUMBER, + V_SERIE IN VARCHAR2, + V_PRET_ACHIZITIE IN NUMBER, + V_PRETD IN NUMBER, + V_ID_VALUTAD IN NUMBER, + V_PRET IN NUMBER, + V_ID_VALUTA IN NUMBER, + V_CURS IN NUMBER, + V_MULTIPLICATOR IN NUMBER, + V_PROC_TVAV IN NUMBER, + V_ID_JTVA_COLOANA IN NUMBER, + V_CANTITATE IN NUMBER, + V_DISCOUNT_UNITAR IN NUMBER, + V_ID_GESTIUNE IN NUMBER, + V_CONT IN NUMBER, + V_PRET_CU_TVA IN NUMBER, + V_EXPLICATIE IN VARCHAR2, + V_ID_RUL_AUX IN NUMBER, + V_TAXCODE IN NUMBER DEFAULT NULL, + V_LOT IN VARCHAR2 DEFAULT NULL) IS + lcExplicatia varchar2(240); + BEGIN + if pack_facturare.ntip = 50 and nvl(V_ID_RUL_AUX, 0) <> 0 then + select to_char(V_CANTITATE / ROUND(LUNGIME * LATIME / 1000000, 2)) || + ' buc. - ' || to_char(LUNGIME) || 'x' || to_char(LATIME) + into lcExplicatia + from DEV_ESTIMARI_PRODUSE + where id_dev_estimare_prod in + (select id_dev_estimare_prod + from rul_auxiliar + where id_rul_aux = V_ID_RUL_AUX) + and sters = 0; + end if; + INSERT INTO VANZARI_DETALII_TEMP + (ID_ARTICOL, + SERIE, + PRET_ACHIZITIE, + PRETD, + ID_VALUTAD, + PRET, + PROC_TVAV, + ID_JTVA_COLOANA, + CANTITATE, + DISCOUNT_UNITAR, + ID_GESTIUNE, + CONT, + ID_VALUTA, + CURS, + MULTIPLICATOR, + PRET_CU_TVA, + IN_STOC, + EXPLICATIA, + ID_TEMP, + TAXCODE, + LOT) + VALUES + (V_ID_ARTICOL, + V_SERIE, + V_PRET_ACHIZITIE, + V_PRETD, + V_ID_VALUTAD, + V_PRET, + V_PROC_TVAV, + V_ID_JTVA_COLOANA, + V_CANTITATE, + V_DISCOUNT_UNITAR, + V_ID_GESTIUNE, + V_CONT, + NVL(V_ID_VALUTA, pack_facturare.nid_moneda_nationala), + DECODE(V_CURS, 0, 1, V_CURS), + V_MULTIPLICATOR, + V_PRET_CU_TVA, + 1, + lcExplicatia, + 0, + decode(V_TAXCODE, 0, NULL, V_TAXCODE), + V_LOT); + END adauga_articol_factura_stoc; + ------------------------------------------------------------------- + PROCEDURE adauga_articol_factura_stoc(V_ID_ARTICOL IN NUMBER, + V_SERIE IN VARCHAR2, + V_PRET_ACHIZITIE IN NUMBER, + V_PRETD IN NUMBER, + V_ID_VALUTAD IN NUMBER, + V_PRET IN NUMBER, + V_ID_VALUTA IN NUMBER, + V_CURS IN NUMBER, + V_MULTIPLICATOR IN NUMBER, + V_PROC_TVAV IN NUMBER, + V_ID_JTVA_COLOANA IN NUMBER, + V_CANTITATE IN NUMBER, + V_DISCOUNT_UNITAR IN NUMBER, + V_ID_GESTIUNE IN NUMBER, + V_CONT IN NUMBER, + V_PRET_CU_TVA IN NUMBER) is + begin + adauga_articol_factura_stoc(V_ID_ARTICOL, + V_SERIE, + V_PRET_ACHIZITIE, + V_PRETD, + V_ID_VALUTAD, + V_PRET, + V_ID_VALUTA, + V_CURS, + V_MULTIPLICATOR, + V_PROC_TVAV, + V_ID_JTVA_COLOANA, + V_CANTITATE, + V_DISCOUNT_UNITAR, + V_ID_GESTIUNE, + V_CONT, + V_PRET_CU_TVA, + null, + null, + null, + null); + end; + ------------------------------------------------------------------- + + PROCEDURE adauga_articol_lucrare_pret(V_ID_COMANDA IN NUMBER, + V_ID_ARTICOL IN NUMBER, + V_ID_POL IN NUMBER, + V_CANTITATE IN NUMBER, + V_CONT IN VARCHAR2, + V_CURS IN NUMBER, + V_MULTIPLICATOR IN NUMBER, + V_ID_JTVA_COLOANA IN NUMBER, + V_ID_GESTIUNE_DEST IN NUMBER, + V_ID_UTIL IN NUMBER, + V_PRETIN IN NUMBER) IS + V_PRET CRM_POLITICI_PRET_ART.PRET%TYPE; + V_DISCOUNT_UNITAR CRM_POLITICI_PRET_ART.DISCOUNT_UNITAR%TYPE; + V_PROC_TVAV CRM_POLITICI_PRET_ART.PROC_TVAV%TYPE; + V_ID_VALUTA CRM_POLITICI_PRET_ART.ID_VALUTA%TYPE; + V_PRETURI_CU_TVA CRM_POLITICI_PRETURI.PRETURI_CU_TVA%TYPE; + V_DENUMIRE NOM_ARTICOLE.DENUMIRE%TYPE; + V_CODMAT NOM_ARTICOLE.CODMAT%TYPE; + V_NR_COMANDA COMENZI.NR_COMANDA%TYPE; + BEGIN + BEGIN + SELECT NVL(V_PRETIN, A.PRET) as PRET, + NVL(C.PROC_TVAV, (D.COTA_TVA + 100) / 100), + C.ID_VALUTA, + B.PRETURI_CU_TVA, + NVL(C.DISCOUNT_UNITAR, 0) + NVL(A.DISCOUNT_UNITAR, 0) + INTO V_PRET, + V_PROC_TVAV, + V_ID_VALUTA, + V_PRETURI_CU_TVA, + V_DISCOUNT_UNITAR + FROM COMENZI_ELEMENTE A + LEFT JOIN CRM_POLITICI_PRETURI B + ON A.ID_POL = B.ID_POL + LEFT JOIN CRM_POLITICI_PRET_ART C + ON A.ID_POL = C.ID_POL + AND A.ID_ARTICOL = C.ID_ARTICOL + LEFT JOIN JTVA_COLOANE D + ON D.ID_JTVA_COLOANA = V_ID_JTVA_COLOANA + WHERE A.ID_COMANDA = V_ID_COMANDA + AND A.ID_ARTICOL = V_ID_ARTICOL + AND A.ID_POL = V_ID_POL + AND A.STERS = 0; + EXCEPTION + WHEN TOO_MANY_ROWS THEN + SELECT DENUMIRE, CODMAT + INTO V_DENUMIRE, V_CODMAT + FROM NOM_ARTICOLE + WHERE ID_ARTICOL = V_ID_ARTICOL; + + SELECT NR_COMANDA + INTO V_NR_COMANDA + FROM COMENZI + WHERE ID_COMANDA = V_ID_COMANDA; + + RAISE_APPLICATION_ERROR(-20000, + 'Articolul ' || V_DENUMIRE || ' cu codul ' || + V_CODMAT || ' este dublat pe comanda ' || + V_NR_COMANDA || ' !'); + END; + + INSERT INTO VANZARI_DETALII_TEMP + (ID_ARTICOL, + ID_POL, + PRET, + PRET_CU_TVA, + PROC_TVAV, + CANTITATE, + DISCOUNT_UNITAR, + ID_GESTIUNE, + CONT, + ID_VALUTA, + CURS, + MULTIPLICATOR, + ID_JTVA_COLOANA, + IN_STOC, + ID_GESTIUNE_DEST, + ID_COMANDA, + ID_UTIL, + ID_TEMP) + SELECT V_ID_ARTICOL, + V_ID_POL, + V_PRET, + V_PRETURI_CU_TVA, + V_PROC_TVAV, + V_CANTITATE, + V_DISCOUNT_UNITAR, + pack_facturare.nid_gestiune_sursa, + V_CONT, + V_ID_VALUTA, + DECODE(V_CURS, 0, 1, V_CURS), + V_MULTIPLICATOR, + V_ID_JTVA_COLOANA, + 1, + V_ID_GESTIUNE_DEST, + V_ID_COMANDA, + V_ID_UTIL, + COUNT(*) + 1 + FROM VANZARI_DETALII_TEMP; + + END adauga_articol_lucrare_pret; + ------------------------------------------------------------------- + PROCEDURE adauga_articol_set(V_ID_VANZARE_SET IN NUMBER, + V_DENUMIRE IN VARCHAR2, + V_EXPLICATIE IN VARCHAR2, + V_UM IN VARCHAR2, + V_SERIE IN VARCHAR2, + V_CANTITATE IN NUMBER, + V_PRET IN NUMBER, + V_DISCOUNT_UNITAR IN NUMBER) is + begin + INSERT INTO VANZARI_SETURI_TEMP + (ID_VANZARE_SET, + DENUMIRE, + EXPLICATIE, + CANTITATE, + UM, + SERIE, + PRET, + DISCOUNT_UNITAR) + VALUES + ((-1) * V_ID_VANZARE_SET, + V_DENUMIRE, + V_EXPLICATIE, + V_CANTITATE, + V_UM, + V_SERIE, + V_PRET, + V_DISCOUNT_UNITAR); + end adauga_articol_set; + ------------------------------------------------------------------- + PROCEDURE adauga_articol_factura(V_ID_TEMP IN NUMBER, + V_ID_ARTICOL IN NUMBER, + V_SERIE IN VARCHAR2, + V_EXPLICATIE IN VARCHAR2, + V_ID_POL IN NUMBER, + V_ID_GESTIUNE IN NUMBER, + V_PRET_ACHIZITIE_TEMP IN NUMBER, + V_PRETD IN NUMBER, + V_ID_VALUTAD IN NUMBER, + V_PRET_TEMP IN NUMBER, + V_ID_VALUTA_TEMP IN NUMBER, + V_PRETURI_CU_TVA_TEMP IN NUMBER, + V_IN_STOC_TEMP IN NUMBER, + V_CANTITATE IN NUMBER, + V_DISCOUNT_UNITAR IN NUMBER, + V_CONT IN VARCHAR2, + V_CURS IN NUMBER, + V_MULTIPLICATOR IN NUMBER, + V_ID_JTVA_COLOANA IN NUMBER, + V_ID_PART_REZ IN NUMBER, + V_ID_LUCRARE_REZ IN NUMBER, + V_PRETV_ORIG IN NUMBER, + V_ID_VANZARE_SET IN NUMBER, + V_ID_CTR IN NUMBER, + V_ID_UTIL IN NUMBER, + V_TAXCODE IN NUMBER DEFAULT NULL, + V_LOT IN VARCHAR2 DEFAULT NULL) IS + V_ID_GESTIUNE2 NOM_GESTIUNI.ID_GESTIUNE%TYPE; + V_CONT2 VARCHAR2(4); + V_ID_COMANDA COMENZI.ID_COMANDA%TYPE; + + V_PRET_ACHIZITIE VANZARI_DETALII.PRET_ACHIZITIE%TYPE; + V_ID_POLITICA_PRETACH CRM_POLITICI_PRETURI.ID_POL%TYPE; + V_PROCENT_ADAOS NUMBER(10, 2); + + V_PRET CRM_POLITICI_PRET_ART.PRET%TYPE; + V_PROC_TVAV CRM_POLITICI_PRET_ART.PROC_TVAV%TYPE; + V_ID_VALUTA CRM_POLITICI_PRET_ART.ID_VALUTA%TYPE; + V_PRETURI_CU_TVA CRM_POLITICI_PRETURI.PRETURI_CU_TVA%TYPE; + V_IN_STOC NOM_ARTICOLE.IN_STOC%TYPE; + V_OPT_FACTURARE CONTRACTE.OPT_FACTURARE%TYPE; + BEGIN + V_PRET_ACHIZITIE := V_PRET_ACHIZITIE_TEMP; + IF V_ID_GESTIUNE <> -1000 THEN + V_ID_GESTIUNE2 := V_ID_GESTIUNE; + END IF; + IF V_CONT <> 'XXXX' THEN + V_CONT2 := V_CONT; + END IF; + + IF pack_facturare.ntip IN (2, 6, 26, 52) THEN + -- factura / aviz pe baza de contract + BEGIN + SELECT NVL(OPT_FACTURARE, 3) + INTO V_OPT_FACTURARE + FROM CONTRACTE + WHERE ID_CTR = V_ID_CTR; + EXCEPTION + WHEN NO_DATA_FOUND THEN + V_OPT_FACTURARE := 4; + END; + END IF; + + CASE + WHEN pack_facturare.ntip IN (3, 21, 28, 42, 47) THEN + -- facturare/aviz din comenzi + V_ID_COMANDA := to_number(pack_facturare.clistaid); + + SELECT A.PRET, + C.PROC_TVAV, + C.ID_VALUTA, + B.PRETURI_CU_TVA, + D.IN_STOC + INTO V_PRET, + V_PROC_TVAV, + V_ID_VALUTA, + V_PRETURI_CU_TVA, + V_IN_STOC + FROM COMENZI_ELEMENTE A + LEFT JOIN CRM_POLITICI_PRETURI B + ON A.ID_POL = B.ID_POL + LEFT JOIN CRM_POLITICI_PRET_ART C + ON A.ID_POL = C.ID_POL + AND A.ID_ARTICOL = C.ID_ARTICOL + LEFT JOIN NOM_ARTICOLE D + ON A.ID_ARTICOL = D.ID_ARTICOL + WHERE A.ID_COMANDA = V_ID_COMANDA + AND A.ID_ARTICOL = V_ID_ARTICOL + AND A.STERS = 0; + + WHEN pack_facturare.ntip = 4 THEN + -- facturare din avize + SELECT DISTINCT A.PRET, + A.PROC_TVAV, + A.ID_VALUTA, + A.PRET_CU_TVA, + B.IN_STOC + INTO V_PRET, + V_PROC_TVAV, + V_ID_VALUTA, + V_PRETURI_CU_TVA, + V_IN_STOC + FROM VANZARI_DETALII A + LEFT JOIN NOM_ARTICOLE B + ON A.ID_ARTICOL = B.ID_ARTICOL + WHERE A.ID_ARTICOL = V_ID_ARTICOL + AND A.ID_POL = V_ID_POL + AND NVL(A.ID_GESTIUNE, -1000) = V_ID_GESTIUNE + AND A.DISCOUNT_UNITAR = V_DISCOUNT_UNITAR + AND NVL(A.CONT, 'XXXX') = V_CONT + AND A.ID_VANZARE IN + (SELECT X AS ID_VANZARE + FROM table(cast(CHARN2COLLECTION(pack_facturare.clistaid, + ',') AS num_tab))); + WHEN pack_facturare.ntip = 45 THEN + -- facturare restaurant + BEGIN + V_ID_POLITICA_PRETACH := to_number(pack_sesiune.getoptiunefirma('ID_POLPRODREST')); + V_PROCENT_ADAOS := to_number(pack_sesiune.getoptiunefirma('RESTPROCADAOS')); + V_PRET := V_PRET_TEMP; + V_ID_VALUTA := V_ID_VALUTA_TEMP; + V_PRETURI_CU_TVA := V_PRETURI_CU_TVA_TEMP; + V_IN_STOC := V_IN_STOC_TEMP; + + SELECT ROUND((A.COTA_TVA + 100) / 100, 2), + NVL2(B.PRETFTVA, + round(decode(B.ID_VALUTA, + pack_def.GetIdMonedaNationala(), + 1, + V_CURS) * NVL(B.PRETFTVA, 0), + pack_sesiune.nzecimale_preta), + NVL2(V_PROCENT_ADAOS, + round(pack_sesiune.calculeaza_pret_fara_tva(V_PRET, + V_CURS, + V_ID_VALUTA, + (A.COTA_TVA + 100) / 100, + V_PRETURI_CU_TVA, + 1) * 100 / + (100 + V_PROCENT_ADAOS), + pack_sesiune.nzecimale_preta), + 0)) + INTO V_PROC_TVAV, V_PRET_ACHIZITIE + FROM JTVA_COLOANE A + LEFT JOIN (SELECT PRETFTVA, ID_VALUTA + FROM CRM_POLITICI_PRET_ART + WHERE NVL2(V_ID_POLITICA_PRETACH, ID_POL, 1) = + NVL(V_ID_POLITICA_PRETACH, 2) + AND ID_ARTICOL = V_ID_ARTICOL) B + ON 1 = 1 + WHERE A.ID_JTVA_COLOANA = V_ID_JTVA_COLOANA; + EXCEPTION + WHEN NO_DATA_FOUND THEN + RAISE_APPLICATION_ERROR(-20000, + 'Nu a fost gasita cota de TVA! (FACT-018 : ' || + V_ID_ARTICOL || ')'); + END; + WHEN V_OPT_FACTURARE = 3 THEN + -- facturare/aviz de pe contract cu preturile de pe contract + BEGIN + SELECT DECODE(A.PRET_UNITAR, 0, V_PRET_TEMP, A.PRET_UNITAR), + B.PROC_TVAV, + B.ID_VALUTA, + A.PRET_CU_TVA, + C.IN_STOC + INTO V_PRET, + V_PROC_TVAV, + V_ID_VALUTA, + V_PRETURI_CU_TVA, + V_IN_STOC + FROM CTR_ARTICOLE A + LEFT JOIN CRM_POLITICI_PRET_ART B + ON A.ID_POL_ART = B.ID_POL_ART + LEFT JOIN NOM_ARTICOLE C + ON B.ID_ARTICOL = C.ID_ARTICOL + WHERE B.ID_ARTICOL = V_ID_ARTICOL + AND A.ID_CTR = V_ID_CTR + AND B.ID_POL = V_ID_POL; + EXCEPTION + WHEN NO_DATA_FOUND THEN + BEGIN + SELECT ROUND((COTA_TVA + 100) / 100, 2) + INTO V_PROC_TVAV + FROM JTVA_COLOANE + WHERE ID_JTVA_COLOANA = V_ID_JTVA_COLOANA; + EXCEPTION + WHEN NO_DATA_FOUND THEN + RAISE_APPLICATION_ERROR(-20000, + 'Nu a fost gasita cota de TVA! (FACT-012 : ' || + V_ID_ARTICOL || ')'); + END; + + V_PRET := V_PRET_TEMP; + V_ID_VALUTA := V_ID_VALUTA_TEMP; + V_PRETURI_CU_TVA := V_PRETURI_CU_TVA_TEMP; + V_IN_STOC := V_IN_STOC_TEMP; + END; + + ELSE + BEGIN + SELECT ROUND((COTA_TVA + 100) / 100, 2) + INTO V_PROC_TVAV + FROM JTVA_COLOANE + WHERE ID_JTVA_COLOANA = V_ID_JTVA_COLOANA; + EXCEPTION + WHEN NO_DATA_FOUND THEN + RAISE_APPLICATION_ERROR(-20000, + 'Nu a fost gasita cota de TVA! (FACT-013 : ' || + V_ID_ARTICOL || ')'); + END; + + V_PRET := V_PRET_TEMP; + V_ID_VALUTA := V_ID_VALUTA_TEMP; + V_PRETURI_CU_TVA := V_PRETURI_CU_TVA_TEMP; + V_IN_STOC := V_IN_STOC_TEMP; + /* SELECT A.PRET, + A.PROC_TVAV, + A.ID_VALUTA, + B.PRETURI_CU_TVA, + C.IN_STOC + INTO V_PRET, + V_PROC_TVAV, + V_ID_VALUTA, + V_PRETURI_CU_TVA, + V_IN_STOC + FROM CRM_POLITICI_PRET_ART A + LEFT JOIN CRM_POLITICI_PRETURI B ON A.ID_POL = B.ID_POL + LEFT JOIN NOM_ARTICOLE C ON A.ID_ARTICOL = C.ID_ARTICOL + WHERE A.ID_ARTICOL = V_ID_ARTICOL + AND A.ID_POL = V_ID_POL;*/ + + END CASE; + + INSERT INTO VANZARI_DETALII_TEMP + (ID_TEMP, + ID_ARTICOL, + SERIE, + LOT, + EXPLICATIA, + ID_POL, + PRET_ACHIZITIE, + PRETD, + ID_VALUTAD, + PRET, + PRET_CU_TVA, + PROC_TVAV, + CANTITATE, + DISCOUNT_UNITAR, + ID_GESTIUNE, + CONT, + ID_VALUTA, + CURS, + MULTIPLICATOR, + ID_JTVA_COLOANA, + IN_STOC, + ID_VANZARE_SET, + ID_PART_REZ, + ID_LUCRARE_REZ, + PRETV_ORIG, + CUSTODIE, + ID_CTR, + ID_UTIL, + TAXCODE) + VALUES + (V_ID_TEMP, + V_ID_ARTICOL, + V_SERIE, + V_LOT, + V_EXPLICATIE, + V_ID_POL, + NVL(V_PRET_ACHIZITIE, 0), + NVL(V_PRETD, 0), + V_ID_VALUTAD, + V_PRET, + V_PRETURI_CU_TVA, + V_PROC_TVAV, + V_CANTITATE, + V_DISCOUNT_UNITAR, + V_ID_GESTIUNE2, + V_CONT2, + V_ID_VALUTA, + DECODE(V_CURS, 0, 1, V_CURS), + V_MULTIPLICATOR, + V_ID_JTVA_COLOANA, + V_IN_STOC, + (-1) * V_ID_VANZARE_SET, + V_ID_PART_REZ, + V_ID_LUCRARE_REZ, + V_PRETV_ORIG, + (CASE WHEN pack_facturare.ntip IN (42, 47) OR + pack_facturare.v_date_gestiune.cont = '357' THEN 1 ELSE 0 END), + V_ID_CTR, + V_ID_UTIL, + decode(V_TAXCODE, 0, NULL, V_TAXCODE)); + + END adauga_articol_factura; + ------------------------------------------------------------------- + PROCEDURE sterge_articol_factura(V_ID_TEMP IN NUMBER, + V_ID_UTIL IN NUMBER) IS + BEGIN + DELETE FROM VANZARI_DETALII_TEMP WHERE ID_TEMP = V_ID_TEMP; + END sterge_articol_factura; + ------------------------------------------------------------------- + PROCEDURE adauga_diferente_pret(V_SIR_ID_TEMP IN VARCHAR2, + V_SIR_DIFERENTA IN VARCHAR, + V_ID_UTIL IN NUMBER) IS + V_SEPARATOR VARCHAR2(1) := '|'; + BEGIN + MERGE INTO VANZARI_DETALII_TEMP A + USING (SELECT ID_TEMP, SUM(DIFERENTA) AS DIFERENTA + FROM (SELECT to_number(substr(V_SIR_ID_TEMP, + decode(rownum, + 1, + 1, + instr(V_SIR_ID_TEMP, + V_SEPARATOR, + 1, + rownum - 1) + 1), + instr(V_SIR_ID_TEMP, + V_SEPARATOR, + 1, + rownum) - + decode(rownum, + 1, + 0, + instr(V_SIR_ID_TEMP, + V_SEPARATOR, + 1, + rownum - 1)) - 1)) AS ID_TEMP, + to_number(substr(V_SIR_DIFERENTA, + decode(rownum, + 1, + 1, + instr(V_SIR_DIFERENTA, + V_SEPARATOR, + 1, + rownum - 1) + 1), + instr(V_SIR_DIFERENTA, + V_SEPARATOR, + 1, + rownum) - + decode(rownum, + 1, + 0, + instr(V_SIR_DIFERENTA, + V_SEPARATOR, + 1, + rownum - 1)) - 1)) AS DIFERENTA + FROM dual + CONNECT BY level <= + length(V_SIR_ID_TEMP) - + length(REPLACE(V_SIR_ID_TEMP, V_SEPARATOR))) + GROUP BY ID_TEMP) B + ON (A.ID_TEMP = B.ID_TEMP) + WHEN MATCHED THEN + UPDATE SET DIFERENTA = B.DIFERENTA; + END adauga_diferente_pret; + ------------------------------------------------------------------- + PROCEDURE adauga_rata_factura(V_ID_RATA IN NUMBER, + V_PRET IN NUMBER, + V_CURS IN NUMBER, + V_MULTIPLICATOR IN NUMBER, + V_ID_JTVA_COLOANA IN NUMBER, + V_EXPLICATIE IN VARCHAR2, + V_ID_UTIL IN NUMBER, + V_TAXCODE IN NUMBER DEFAULT NULL) IS + V_CANTITATE VANZARI_DETALII.CANTITATE%TYPE := 1; + V_PRETURI_CU_TVA VANZARI_DETALII.PRET_CU_TVA%TYPE; + V_PROC_TVAV VANZARI_DETALII.PROC_TVAV%TYPE; + V_ID_CTR CONTRACTE.ID_CTR%TYPE; + + V_ID_VALUTA NOM_VALUTE.ID_VALUTA%TYPE; + lnIdTemp NUMBER(10); + BEGIN + SELECT (B.PROC_TVA + 100) / 100 AS PROC_TVAV, + A.ID_VALUTA, + A.ID_CTR, + A.PRET_CU_TVA + INTO V_PROC_TVAV, V_ID_VALUTA, V_ID_CTR, V_PRETURI_CU_TVA + FROM CTR_SCADENTAR A + LEFT JOIN CONTRACTE B + ON A.ID_CTR = B.ID_CTR + WHERE A.ID_RATA = V_ID_RATA; + + SELECT COUNT(*) + 1 INTO lnIdTemp from vanzari_detalii_temp; + + INSERT INTO VANZARI_DETALII_TEMP + (ID_RATA, + PRET, + PROC_TVAV, + CANTITATE, + ID_VALUTA, + CURS, + MULTIPLICATOR, + EXPLICATIA, + PRET_CU_TVA, + ID_JTVA_COLOANA, + ID_CTR, + ID_UTIL, + ID_TEMP, + TAXCODE) + VALUES + (V_ID_RATA, + V_PRET, + V_PROC_TVAV, + V_CANTITATE, + V_ID_VALUTA, + V_CURS, + V_MULTIPLICATOR, + V_EXPLICATIE, + V_PRETURI_CU_TVA, + V_ID_JTVA_COLOANA, + V_ID_CTR, + V_ID_UTIL, + lnIdTemp, + decode(V_TAXCODE, 0, NULL, V_TAXCODE)); + + END adauga_rata_factura; + ------------------------------------------------------------------- + PROCEDURE sterge_rata_factura(V_ID_RATA IN NUMBER, V_ID_UTIL IN NUMBER) IS + BEGIN + DELETE FROM VANZARI_DETALII_TEMP WHERE ID_RATA = V_ID_RATA; + END sterge_rata_factura; + ------------------------------------------------------------------- + PROCEDURE sterge_proforma_old(V_ID_PROFORMA IN NUMBER, + V_ID_UTIL IN NUMBER) IS + V_STERS NUMBER(1) := 1; + V_NESTERS NUMBER(1) := 0; + V_DATAORA DATE := SYSDATE; + + BEGIN + UPDATE PROFORME_DETALII + SET STERS = V_STERS, ID_UTILS = V_ID_UTIL, DATAORAS = V_DATAORA + WHERE ID_PROFORMA = V_ID_PROFORMA + AND STERS = V_NESTERS; + + UPDATE PROFORME + SET STERS = V_STERS, ID_UTILS = V_ID_UTIL, DATAORAS = V_DATAORA + WHERE ID_PROFORMA = V_ID_PROFORMA; + + END sterge_proforma_old; + + ------------------------------------------------------------------- + PROCEDURE sterge_factura(V_ID_VANZARE IN NUMBER, + V_LUNA IN NUMBER, + V_AN IN NUMBER, + V_ID_UTIL IN NUMBER) IS + TYPE sir_id_rata IS TABLE OF VANZARI_DETALII.ID_RATA%TYPE; + arr_id_rata sir_id_rata; + + V_COD ACT.COD%TYPE; + V_ID_SET XSETS.ID_SET%TYPE := 0; + V_STERS NUMBER(1) := 1; + V_NESTERS NUMBER(1) := 0; + V_DATAORA DATE := SYSDATE; + V_TIP VANZARI.TIP%TYPE; + + V_NR_AVIZE_FACT NUMBER(10); + V_NR_FACT_RETUR NUMBER(10); + V_ID_COMANDA COMENZI.ID_COMANDA%TYPE; + BEGIN + -- pentru o factura : + -- verific daca exista facturi de retur + SELECT COUNT(*) + INTO V_NR_FACT_RETUR + FROM VANZARI_CORESP + WHERE STERS = 0 + AND ID_VANZARE_AVIZ = V_ID_VANZARE + AND TIP = 3; + + IF V_NR_FACT_RETUR > 0 THEN + RAISE_APPLICATION_ERROR(-20000, + 'Pentru acesta factura s-au emis facturi de retur. Trebuie sa stergeti mai intai factura de retur!'); + END IF; + + -- ptr. un aviz normal: + -- verific daca exista facturi sau avize de retur pe avizul resp. + SELECT COUNT(*) + INTO V_NR_AVIZE_FACT + FROM VANZARI_CORESP + WHERE STERS = 0 + AND ID_VANZARE_AVIZ = V_ID_VANZARE + AND TIP IN (1, 2); + + IF V_NR_AVIZE_FACT > 0 THEN + RAISE_APPLICATION_ERROR(-20000, + 'Pe acest aviz s-au emis facturi / aviz de retur. Trebuie sa stergeti mai intai facturile / avizul de retur!'); + END IF; + + -- ptr. o factura din aviz: + -- verific daca sunt avize de retur pe avizele pentru care s-a emis factura resp. + SELECT COUNT(*) + INTO V_NR_AVIZE_FACT + FROM VANZARI_CORESP + WHERE STERS = 0 + AND ID_VANZARE_AVIZ IN (SELECT ID_VANZARE_AVIZ + FROM VANZARI_CORESP + WHERE ID_VANZARE_FACT = V_ID_VANZARE + AND TIP = 1) + AND TIP = 2; + + IF V_NR_AVIZE_FACT > 0 THEN + RAISE_APPLICATION_ERROR(-20000, + 'Pe unul dintre avizele facturate s-a emis si aviz de retur! ' || + 'Trebuie sa stergeti avizul de retur mai intai!'); + END IF; + + UPDATE VANZARI + SET STERS = V_STERS, ID_UTILS = V_ID_UTIL, DATAORAS = V_DATAORA + WHERE ID_VANZARE = V_ID_VANZARE + RETURNING COD, TIP, ID_COMANDA INTO V_COD, V_TIP, V_ID_COMANDA; + + CASE + WHEN V_TIP = 24 THEN + -- aviz de retur + UPDATE VANZARI + SET FACTURAT = 0, ID_UTILFACT = NULL, DATA_FACTURAT = NULL + WHERE ID_VANZARE IN (SELECT ID_VANZARE_AVIZ + FROM VANZARI_CORESP + WHERE ID_VANZARE_FACT = V_ID_VANZARE + AND STERS = 0) + AND FACTURAT = 1; + + WHEN V_TIP > 20 and + V_TIP not in (pack_facturare.nTipFacturaHotel, + pack_facturare.nTipFacturaRestaurant, + pack_facturare.nTipNotaPlata) THEN + -- alte tipuri de avize + UPDATE VANZARI_CANTITATI + SET STERS = 1 + WHERE ID_VANZARE_DET_AVIZ IN + (SELECT ID_VANZARE_DET AS ID_VANZARE_DET_AVIZ + FROM VANZARI_DETALII + WHERE ID_VANZARE = V_ID_VANZARE + AND STERS = 0); + + WHEN V_TIP = 4 THEN + -- factura din aviz + UPDATE VANZARI + SET FACTURAT = 0, ID_UTILFACT = NULL, DATA_FACTURAT = NULL + WHERE ID_VANZARE IN (SELECT ID_VANZARE_AVIZ + FROM VANZARI_CORESP + WHERE ID_VANZARE_FACT = V_ID_VANZARE + AND STERS = 0) + AND FACTURAT = 1; + + UPDATE VANZARI_CANTITATI + SET STERS = 1 + WHERE ID_VANZARE_DET IN + (SELECT ID_VANZARE_DET + FROM VANZARI_DETALII + WHERE ID_VANZARE = V_ID_VANZARE); + + WHEN V_TIP = pack_facturare.nTipFacturaRestaurant THEN + SELECT DISTINCT ID_SET + INTO V_ID_SET + FROM ACT + WHERE COD IN + (SELECT COD FROM VANZARI WHERE ID_VANZARE = V_ID_VANZARE); + + ELSE + V_STERS := 1; + END CASE; + + IF V_ID_COMANDA IS NOT NULL THEN + UPDATE COMENZI_ELEMENTE + SET STERS = V_STERS, DATAORAS = V_DATAORA, ID_UTILS = V_ID_UTIL + WHERE ID_COMANDA = V_ID_COMANDA + AND CANTITATE < 0; + END IF; + + UPDATE VANZARI_DETALII + SET STERS = V_STERS, ID_UTILS = V_ID_UTIL, DATAORAS = V_DATAORA + WHERE ID_VANZARE = V_ID_VANZARE + AND STERS = V_NESTERS + RETURNING ID_RATA BULK COLLECT INTO arr_id_rata; + + IF V_TIP IN (2, 6, 52) THEN + FOR i IN arr_id_rata.FIRST .. arr_id_rata.LAST LOOP + IF arr_id_rata(i) IS NOT NULL THEN + UPDATE CTR_RATE_FACTURI + SET STERS = V_STERS, + ID_UTILS = V_ID_UTIL, + DATAORAS = V_DATAORA + WHERE ID_FACT IN + (SELECT DISTINCT ID_FACT FROM ACT WHERE COD = V_COD) + AND ID_RATA = arr_id_rata(i) + AND STERS = V_NESTERS; + END IF; + END LOOP; + + END IF; + + UPDATE VANZARI_CORESP + SET STERS = V_STERS + WHERE ID_VANZARE_FACT = V_ID_VANZARE + OR ID_VANZARE_AVIZ = V_ID_VANZARE; + + CASE + WHEN V_TIP IN (pack_facturare.nTipFacturaRestaurant, nTipNotaPlata) AND + V_ID_SET <> + 25000 + pack_facturare.nTipFacturaRestaurant - 1 + 10 then + pack_restaurant.sterge_vanzare(V_ID_VANZARE, V_ID_UTIL); + + WHEN V_TIP = pack_facturare.nTipFacturaHotel then + pack_hotel.sterge_vanzare(V_ID_VANZARE, V_ID_UTIL); + + WHEN V_TIP = pack_facturare.nTipFacturaACN then + -- apelez cu execute immediate pentru ca nu exista pack_acn decat pe firma ACN + if pack_migrare.ObjectExist('PACK_ACN') = 1 then + execute immediate 'begin pack_acn.sterge_vanzare(:1, :2); end;' + using V_ID_VANZARE, V_ID_UTIL; + end if; + + ELSE + NULL; + END CASE; + + END sterge_factura; + + ------------------------------------------------------------------- + PROCEDURE sterge_proforma(V_ID_VANZARE IN NUMBER, V_ID_UTIL IN NUMBER) IS + TYPE sir_id_rata IS TABLE OF VANZARI_DETALII.ID_RATA%TYPE; + arr_id_rata sir_id_rata; + + V_COD ACT.COD%TYPE; + V_ID_SET XSETS.ID_SET%TYPE := 0; + V_STERS NUMBER(1) := 1; + V_NESTERS NUMBER(1) := 0; + V_DATAORA DATE := SYSDATE; + V_TIP VANZARI.TIP%TYPE; + + V_NR_AVIZE_FACT NUMBER(10); + V_NR_FACT_RETUR NUMBER(10); + V_ID_COMANDA COMENZI.ID_COMANDA%TYPE; + BEGIN + + UPDATE VANZARI + SET STERS = V_STERS, ID_UTILS = V_ID_UTIL, DATAORAS = V_DATAORA + WHERE ID_VANZARE = V_ID_VANZARE; + + UPDATE VANZARI_DETALII + SET STERS = V_STERS, ID_UTILS = V_ID_UTIL, DATAORAS = V_DATAORA + WHERE ID_VANZARE = V_ID_VANZARE + AND STERS = V_NESTERS; + + END sterge_proforma; + + PROCEDURE scrie_proforma(V_TOTFTVA IN NUMBER, + V_TOTTVA IN NUMBER, + V_DISCOUNT_FACTURA IN NUMBER, + V_SERIE_ACT_INCASARE IN VARCHAR2, + V_NUMAR_ACT_INCASARE IN NUMBER, + V_LISTA_INCASARE IN VARCHAR2, + V_ID_DELEGAT IN NUMBER, + V_ID_MASINA IN NUMBER, + V_ID_FACTURARE IN NUMBER, + V_LISTARE_DETALIATA IN NUMBER, + V_DATAORA_EXP IN DATE, + V_ID_AGENT IN NUMBER, + V_TEXT_ADITIONAL IN VARCHAR2, + V_DISCOUNT_EVIDENTIAT IN NUMBER, + V_PARAMETRU_ADITIONAL IN NUMBER, + V_ID_VANZARE OUT NUMBER) is + begin + pack_facturare.scrie_in_vanzari(V_DISCOUNT_FACTURA, + V_ID_DELEGAT, + V_ID_MASINA, + V_ID_FACTURARE, + V_LISTARE_DETALIATA, + V_DATAORA_EXP, + V_ID_AGENT, + V_TEXT_ADITIONAL, + pack_facturare.nid_vanzare); + if pack_facturare.nid_vanzare is not null then + V_ID_VANZARE := pack_facturare.nid_vanzare; + + -- completez vanzari.eproforma + update vanzari + set eproforma = 1 + where id_vanzare = pack_facturare.nid_vanzare; + end if; + end; + + ------------------------------------------------------------------- + PROCEDURE scrie_proforma_old(V_DISCOUNT_PROFORMA IN NUMBER, + V_TEXT_ADITIONAL IN VARCHAR2, + V_DISCOUNT_EVIDENTIAT IN NUMBER, + V_ID_PROFORMA OUT NUMBER, + V_NUMAR_ACT OUT NUMBER) IS + + V_DATAORA DATE := SYSDATE; + + BEGIN + pack_serii_numere.dezaloca_numar(pack_facturare.nid_tipfactura); + pack_facturare.ndiscount_evidentiat := V_DISCOUNT_EVIDENTIAT; + pack_facturare.genereaza_numar_proforma(V_NUMAR_ACT); + + INSERT /*+ APPEND */ + INTO PROFORME + (id_util, + dataora, + id_part, + id_comanda, + numar_act, + tip, + data_act, + discount, + discount_evidentiat, + text_aditional, + in_valuta, + id_sucursala) + VALUES + (pack_facturare.nid_util, + V_DATAORA, + pack_facturare.nid_part, + pack_facturare.nid_comanda, + pack_facturare.nnumar_act, + pack_facturare.ntip, + pack_facturare.ddata_act, + V_DISCOUNT_PROFORMA, + pack_facturare.ndiscount_evidentiat, + REPLACE(V_TEXT_ADITIONAL, CHR(13) || CHR(10), CHR(32)), + pack_facturare.nin_valuta, + pack_facturare.nid_sucursala) + RETURNING ID_PROFORMA INTO V_ID_PROFORMA; + + pack_facturare.scrie_cursuri_proforma(V_ID_PROFORMA); + + pack_facturare.scrie_seturi_proforma; + + INSERT /*+ APPEND */ + INTO PROFORME_DETALII + (ID_PROFORMA, + ID_ARTICOL, + ID_POL, + CANTITATE, + PRET, + PROC_TVAV, + ID_JTVA_COLOANA, + DISCOUNT_UNITAR, + ID_GESTIUNE, + ID_VALUTA, + EXPLICATIE, + CONT, + PRET_CU_TVA, + SERIE, + PRET_ACHIZITIE, + PRETD, + ID_VALUTAD, + ID_CTR, + ID_PROFORMA_SET) + SELECT V_ID_PROFORMA AS ID_PROFORMA, + ID_ARTICOL, + ID_POL, + CANTITATE, + PRET, + PROC_TVAV, + ID_JTVA_COLOANA, + DISCOUNT_UNITAR, + ID_GESTIUNE, + ID_VALUTA, + EXPLICATIA AS EXPLICATIE, + CONT, + PRET_CU_TVA, + SERIE, + PRET_ACHIZITIE, + PRETD, + ID_VALUTAD, + ID_CTR, + DECODE(ID_VANZARE_SET, 0, NULL, ID_VANZARE_SET) AS ID_PROFORMA_SET + FROM VANZARI_DETALII_TEMP; + + IF SQL%ROWCOUNT = 0 THEN + RAISE_APPLICATION_ERROR(-20000, + 'Nu exista articole in lista de vanzare! (FACT-001)'); + END IF; + + END scrie_proforma_old; + ------------------------------------------------------------------- + PROCEDURE inchide_comanda IS + BEGIN + INSERT INTO COMENZI_ELEMENTE + (ID_COMANDA, + ID_ARTICOL, + ID_POL, + PRET, + DISCOUNT_UNITAR, + CANTITATE, + ID_VALUTA, + PRET_CU_TVA) + SELECT to_number(pack_facturare.clistaid) AS ID_COMANDA, + A.ID_ARTICOL, + A.ID_POL, + A.PRET, + A.DISCOUNT_UNITAR, + NVL(C.CANTITATE, 0) + NVL(B.CANTITATE, 0) - A.CANTITATE AS CANTITATE, + A.ID_VALUTA, + A.PRET_CU_TVA + FROM COMENZI_ELEMENTE A + LEFT JOIN (SELECT ID_ARTICOL, + ID_POL, + ID_VALUTA, + SUM(CANTITATE) AS CANTITATE + FROM VANZARI_DETALII_TEMP + GROUP BY ID_ARTICOL, ID_POL, ID_VALUTA) B + ON A.ID_ARTICOL = B.ID_ARTICOL + AND A.ID_POL = B.ID_POL + AND A.ID_VALUTA = B.ID_VALUTA + LEFT JOIN (SELECT B.ID_ARTICOL, + B.ID_POL, + B.ID_VALUTA, + SUM(B.CANTITATE) AS CANTITATE + FROM VANZARI A + LEFT JOIN VANZARI_DETALII B + ON A.ID_VANZARE = B.ID_VANZARE + AND B.STERS = 0 + WHERE A.ID_COMANDA = to_number(pack_facturare.clistaid) + AND A.STERS = 0 + GROUP BY B.ID_ARTICOL, B.ID_POL, B.ID_VALUTA) C + ON A.ID_ARTICOL = C.ID_ARTICOL + AND A.ID_POL = C.ID_POL + AND A.ID_VALUTA = C.ID_VALUTA + WHERE A.STERS = 0 + AND A.ID_COMANDA = to_number(pack_facturare.clistaid) + AND A.CANTITATE > NVL(C.CANTITATE, 0) + NVL(B.CANTITATE, 0); + + END inchide_comanda; + ------------------------------------------------------------------- + PROCEDURE scrie_avize_lucrare(V_DISCOUNT_FACTURA IN NUMBER, + V_DISCOUNT_EVIDENTIAT IN NUMBER, + V_ID_SERIE_ACT IN NUMBER, + V_ID_VANZARE OUT NUMBER, + V_CURSOR_VERIFICARE OUT pack_facturare.cursor_facturare) IS + CURSOR CRS IS + SELECT ROWNUM AS NRCRT, ID_COMANDA, ID_GESTIUNE + FROM (SELECT ID_COMANDA, ID_GESTIUNE + FROM COMENZI + WHERE STERS = 0 + AND ID_LUCRARE = pack_facturare.nid_lucrare + -- modificare 11.07 + AND ID_COMANDA IN + (SELECT ID_COMANDA FROM VANZARI_DETALII_TEMP) + -- AND ID_GESTIUNE IN + -- (SELECT DISTINCT ID_GESTIUNE_DEST FROM VANZARI_DETALII_TEMP) + -- modificare 11.07 ^ + ORDER BY ID_COMANDA); + CRS_LINIE CRS%ROWTYPE; + + TYPE tab_detalii_type IS TABLE OF vanzari_detalii_temp%ROWTYPE; + tab_detalii tab_detalii_type; + + NR_AVIZ NUMBER(5) := 0; + NR_ELEMENT NUMBER(5) := 0; + ELEM_OPTIUNE NUMBER(5) := 0; + BEGIN + DELETE FROM VANZARI_TEMP; + pack_contafin.sterge_temp_actrul(); + pack_facturare.initializeaza_setari_facturare(); + pack_facturare.ndiscount_evidentiat := V_DISCOUNT_EVIDENTIAT; + pack_facturare.nid_serie := V_ID_SERIE_ACT; + ELEM_OPTIUNE := NVL(pack_sesiune.getoptiunefirma('NRMAXELEMPAG'), + 9999); + + OPEN CRS; + LOOP + FETCH CRS + INTO CRS_LINIE; + EXIT WHEN CRS%NOTFOUND; + + IF CRS_LINIE.NRCRT > 1 THEN + IF pack_facturare.nid_serie IS NULL THEN + pack_facturare.nnumar_act := pack_facturare.nnumar_act + 1; + ELSE + pack_serii_numere.aloca_numar(pack_facturare.nid_tipaviz, + pack_facturare.nid_serie, + NULL, + pack_facturare.nid_util, + pack_facturare.nid_sucursala, + pack_facturare.nnumar_act); + END IF; + END IF; + + pack_facturare.nid_comanda := CRS_LINIE.ID_COMANDA; + pack_facturare.v_date_gestiune.id_gestiune := CRS_LINIE.ID_GESTIUNE; + pack_facturare.v_date_gestiune.acont := NULL; + + SELECT NR_PAG, CONT, ACONT + INTO pack_facturare.v_date_gestiune.id_tip_gest, + pack_facturare.v_date_gestiune.cont, + pack_facturare.v_date_gestiune.acont + FROM NOM_GESTIUNI + WHERE ID_GESTIUNE = pack_facturare.v_date_gestiune.id_gestiune; + + INSERT INTO VANZARI_TEMP + (id_gestiune_dest, id_lucrare, numar_act, id_comanda, id_gestiune) + values + (pack_facturare.v_date_gestiune.id_gestiune, + pack_facturare.nid_lucrare, + pack_facturare.nnumar_act, + pack_facturare.nid_comanda, + pack_facturare.nid_gestiune_sursa); + + pack_serii_numere.aloca_numar(pack_facturare.nid_tipbon, + NULL, + pack_facturare.nid_gestiune_sursa, + pack_facturare.nid_util, + pack_facturare.nid_sucursala, + pack_facturare.nnumar_bon); + + SELECT * + BULK COLLECT + INTO tab_detalii + FROM VANZARI_DETALII_TEMP + WHERE ID_COMANDA = CRS_LINIE.ID_COMANDA; + -- modificare 11.07 : WHERE ID_GESTIUNE_DEST = pack_facturare.v_date_gestiune.id_gestiune; + + IF SQL%ROWCOUNT = 0 THEN + RAISE_APPLICATION_ERROR(-20000, + 'Nu exista articole in lista de vanzare! (FACT-002)'); + END IF; + + NR_AVIZ := 1; + NR_ELEMENT := 0; + + FOR i IN tab_detalii.first .. tab_detalii.last LOOP + -- modificare 01.07.2008 + -- daca depasesc un anumit numar de elemente pe aviz, generez datele pentru urmatorul + NR_ELEMENT := NR_ELEMENT + 1; + IF NR_AVIZ < FLOOR((NR_ELEMENT - 1) / ELEM_OPTIUNE) + 1 THEN + NR_AVIZ := NR_AVIZ + 1; + IF pack_facturare.nid_serie IS NULL THEN + pack_facturare.nnumar_act := pack_facturare.nnumar_act + 1; + ELSE + pack_serii_numere.aloca_numar(pack_facturare.nid_tipaviz, + pack_facturare.nid_serie, + NULL, + pack_facturare.nid_util, + pack_facturare.nid_sucursala, + pack_facturare.nnumar_act); + END IF; + + INSERT INTO VANZARI_TEMP + (id_gestiune_dest, + id_lucrare, + numar_act, + id_comanda, + id_gestiune) + values + (pack_facturare.v_date_gestiune.id_gestiune, + pack_facturare.nid_lucrare, + pack_facturare.nnumar_act, + pack_facturare.nid_comanda, + pack_facturare.nid_gestiune_sursa); + + pack_serii_numere.aloca_numar(pack_facturare.nid_tipbon, + NULL, + pack_facturare.nid_gestiune_sursa, + pack_facturare.nid_util, + pack_facturare.nid_sucursala, + pack_facturare.nnumar_bon); + + END IF; + -- modificare 01.07.2008 ^ + + pack_facturare.transfera_articol(tab_detalii(i)); + END LOOP; + END LOOP; + + CLOSE CRS; + + -- cumulare note + pack_facturare.cumuleaza_note_act(); + -- pack_facturare.completeaza_analitice(); am mutat-o in cumuleaza_note_act + + if pack_contafin.verifica_note_contabile(1) > 0 then + pack_facturare.cursor_verificare(V_CURSOR_VERIFICARE); + else + pack_facturare.finalizeaza_avize_lucrare(V_DISCOUNT_FACTURA); + + OPEN V_CURSOR_VERIFICARE FOR + SELECT * FROM ACT_TEMP WHERE 1 = 2; + end if; + V_ID_VANZARE := NULL; + + END scrie_avize_lucrare; + ------------------------------------------------------------------- + /* PROCEDURE scrie_factura2(V_TOTFTVA IN NUMBER, + V_TOTTVA IN NUMBER, + V_DISCOUNT_FACTURA IN NUMBER, + V_SERIE_ACT_INCASARE IN VARCHAR2, + V_NUMAR_ACT_INCASARE IN NUMBER, + V_LISTA_INCASARE IN VARCHAR2, + V_ID_DELEGAT IN NUMBER, + V_ID_MASINA IN NUMBER, + V_DATAORA_EXP IN DATE, + V_ID_AGENT IN NUMBER, + V_TEXT_ADITIONAL IN VARCHAR2, + V_DISCOUNT_EVIDENTIAT IN NUMBER, + V_PARAMETRU_ADITIONAL IN NUMBER, + V_ID_VANZARE OUT NUMBER, + V_CURSOR_VERIFICARE OUT pack_facturare.cursor_facturare) IS + + lnIdFacturare NUMBER(10) := null; + lnListareDetaliata NUMBER(1) := 0; + begin + pack_facturare.scrie_factura2(V_TOTFTVA, + V_TOTTVA, + V_DISCOUNT_FACTURA, + V_SERIE_ACT_INCASARE, + V_NUMAR_ACT_INCASARE, + V_LISTA_INCASARE, + V_ID_DELEGAT, + V_ID_MASINA, + lnIdFacturare, + lnListareDetaliata, + V_DATAORA_EXP, + V_ID_AGENT, + V_TEXT_ADITIONAL, + V_DISCOUNT_EVIDENTIAT, + V_PARAMETRU_ADITIONAL, + V_ID_VANZARE, + V_CURSOR_VERIFICARE); + + end;*/ + ------------------------------------------------------------------- + + PROCEDURE scrie_factura2(V_TOTFTVA IN NUMBER, + V_TOTTVA IN NUMBER, + V_DISCOUNT_FACTURA IN NUMBER, + V_SERIE_ACT_INCASARE IN VARCHAR2, + V_NUMAR_ACT_INCASARE IN NUMBER, + V_LISTA_INCASARE IN VARCHAR2, + V_ID_DELEGAT IN NUMBER, + V_ID_MASINA IN NUMBER, + V_ID_FACTURARE IN NUMBER, + V_LISTARE_DETALIATA IN NUMBER, + V_DATAORA_EXP IN DATE, + V_ID_AGENT IN NUMBER, + V_TEXT_ADITIONAL IN VARCHAR2, + V_DISCOUNT_EVIDENTIAT IN NUMBER, + V_PARAMETRU_ADITIONAL IN NUMBER, + V_ID_VANZARE OUT NUMBER, + V_CURSOR_VERIFICARE OUT pack_facturare.cursor_facturare) IS + -- V_LISTA_INCASARE : tip1|valoare1|id_bancasa1;tip2|valoare2|id_bancasa2 (pentru incasari cu mai multe tipuri ex: NUMERAR + CARD + TICHETE) + + TYPE tab_detalii_type IS TABLE OF vanzari_detalii_temp%ROWTYPE; + tab_detalii tab_detalii_type; + + V_INCASAT_CALCUL ACT.SUMA%TYPE := 0; + V_DISCOUNT_TOTAL_CU_TVA ACT.SUMA%TYPE := 0; + V_ASCD ACT.ASCD%TYPE; + V_ID_SECTIE ACT.ID_SECTIE%TYPE; + V_ID_CTR ACT.ID_CTR%TYPE; + V_SEPARATOR VARCHAR2(1) := ','; + BEGIN + pack_contafin.sterge_temp_actrul(); + pack_facturare.ntotftva := V_TOTFTVA; + pack_facturare.ntottva := V_TOTTVA; + + pack_facturare.initializeaza_setari_facturare(); + + IF pack_facturare.nscadere_stoc = 0 AND + pack_facturare.ntip IN (23, 25, 30, 41) THEN + RAISE_APPLICATION_ERROR(-20000, + 'Nu exista configurari pentru transfer intre subunitati fara scadere din stoc! (FACT-003)'); + END IF; + + pack_facturare.ndiscount_evidentiat := V_DISCOUNT_EVIDENTIAT; + + SELECT * BULK COLLECT INTO tab_detalii FROM VANZARI_DETALII_TEMP; + + IF SQL%ROWCOUNT = 0 THEN + RAISE_APPLICATION_ERROR(-20000, + 'Nu exista articole in lista de vanzare! (FACT-004)'); + END IF; + + FOR i IN tab_detalii.first .. tab_detalii.last LOOP + + CASE + WHEN pack_facturare.ntip IN (23, 25, 30, 41) THEN + -- transfer intre subunitati + V_INCASAT_CALCUL := 0; + pack_facturare.transfera_articol(tab_detalii(i)); + /* WHEN pack_facturare.ntip = pack_facturare.nTipNotaPlata THEN + pack_facturare.descarca_gestiune(tab_detalii(i).id_articol, + tab_detalii(i).serie, + tab_detalii(i).pret_achizitie, + tab_detalii(i).pretd, + tab_detalii(i).id_valutad, + tab_detalii(i).pretv_orig, + tab_detalii(i).pret, + tab_detalii(i).diferenta, + tab_detalii(i).proc_tvav, + tab_detalii(i).pret_cu_tva, + tab_detalii(i).cantitate, + tab_detalii(i).discount_unitar, + tab_detalii(i).id_gestiune, + pack_facturare.nid_sectie_stoc, -- V_ID_SECTIE + tab_detalii(i).cont, + pack_facturare.nid_venchelt, -- V_ID_VENCHELT + tab_detalii(i).id_valuta, + tab_detalii(i).curs, + NULL, -- V_ID_PART_REZ + NULL);*/ + WHEN pack_facturare.ntip IN (42, 47) THEN + V_INCASAT_CALCUL := 0; + pack_facturare.nfactavizcust := 1; + pack_facturare.descarca_gestiune(tab_detalii (i).id_articol, + tab_detalii (i).serie, + tab_detalii (i).pret_achizitie, + tab_detalii (i).pretd, + tab_detalii (i).id_valutad, + tab_detalii (i).pretv_orig, + tab_detalii (i).pret, + tab_detalii (i).diferenta, + tab_detalii (i).proc_tvav, + tab_detalii (i).pret_cu_tva, + tab_detalii (i).cantitate, + tab_detalii (i).discount_unitar, + tab_detalii (i).id_gestiune, + pack_facturare.nid_sectie_stoc, -- V_ID_SECTIE + tab_detalii (i).cont, + pack_facturare.nid_venchelt, -- V_ID_VENCHELT + tab_detalii (i).id_valuta, + tab_detalii (i).curs / tab_detalii(i).multiplicator, + NULL, -- V_ID_PART_REZ + NULL, + tab_detalii (i).id_jtva_coloana, + tab_detalii (i).taxcode); + pack_facturare.nfactavizcust := 0; + WHEN pack_facturare.ntip IN (2, 6, 52) AND + NVL(tab_detalii(i).id_rata, 0) <> 0 THEN + V_INCASAT_CALCUL := V_INCASAT_CALCUL + + pack_facturare.contabilizeaza_rata(tab_detalii(i)); + ELSE + -- 24 = AVIZ RETUR + IF pack_facturare.ntip = 24 THEN + SELECT STRINGAGG(COD) + INTO pack_facturare.ccod_retur + FROM VANZARI + WHERE ID_VANZARE IN + (SELECT X AS ID_VANZARE + FROM table(charn2collection(pack_facturare.clistaid, + V_SEPARATOR))); + END IF; + + V_INCASAT_CALCUL := V_INCASAT_CALCUL + + pack_facturare.contabilizeaza_articol(tab_detalii(i)); + END CASE; + + END LOOP; + + IF pack_facturare.ntip in (48, 49) THEN + pack_facturare.scrie_descarcare_k(V_PARAMETRU_ADITIONAL); + END IF; + + BEGIN + SELECT ID_CTR + INTO V_ID_CTR + FROM (SELECT SUM(SUMA), ID_CTR + FROM ACT_TEMP + WHERE SCD IN ('4111', '418') + GROUP BY ID_CTR + ORDER BY 1) + WHERE ROWNUM < 2; + EXCEPTION + WHEN NO_DATA_FOUND THEN + V_ID_CTR := NULL; + END; + + IF V_DISCOUNT_FACTURA <> 0 THEN + SELECT DISTINCT ASCD, ID_SECTIE + INTO V_ASCD, V_ID_SECTIE + FROM ACT_TEMP + WHERE SCD IN ('4111', '418', '461') + AND ROWNUM < 2; + + V_DISCOUNT_TOTAL_CU_TVA := pack_facturare.scrie_discount(1, + V_DISCOUNT_FACTURA, + pack_facturare.nid_valuta, + pack_facturare.nin_valuta, + V_ASCD, + V_ID_SECTIE, + V_ID_CTR, + 1, + (100 + + pack_facturare.nproc_tva_max) / 100, + 0, + 1, -- V_CU_TVA + pack_facturare.nid_jtva_coloana, + pack_facturare.nTaxCode); + END IF; + + V_INCASAT_CALCUL := V_INCASAT_CALCUL - V_DISCOUNT_TOTAL_CU_TVA; + + /* IF V_AVANS <> 0 THEN + V_INCASAT_CALCUL := V_INCASAT_CALCUL - ABS(v_avans); + pack_facturare.scrie_avans(V_ID_CONTRACT, (-1) * ABS(v_avans)); + END IF;*/ + + IF V_LISTA_INCASARE IS NOT NULL THEN + pack_facturare.scrie_incasari(V_SERIE_ACT_INCASARE, + V_NUMAR_ACT_INCASARE, + V_LISTA_INCASARE, + V_ID_CTR); + END IF; + + -- cumulare note + pack_facturare.cumuleaza_note_act(); + + if pack_contafin.verifica_note_contabile(1) > 0 then + pack_facturare.cursor_verificare(V_CURSOR_VERIFICARE); + V_ID_VANZARE := NULL; + else + pack_facturare.finalizeaza_factura(V_DISCOUNT_FACTURA, + V_ID_DELEGAT, + V_ID_MASINA, + V_ID_FACTURARE, + V_LISTARE_DETALIATA, + V_DATAORA_EXP, + V_ID_AGENT, + V_TEXT_ADITIONAL, + V_PARAMETRU_ADITIONAL); + + OPEN V_CURSOR_VERIFICARE FOR + SELECT * FROM VACT WHERE 1 = 2; + V_ID_VANZARE := pack_facturare.nid_vanzare; + end if; + + END scrie_factura2; + ------------------------------------------------------------------- + /* PROCEDURE scrie_factura_avize_retur(V_DISCOUNT_FACTURA IN NUMBER, + V_ID_DELEGAT IN NUMBER, + V_ID_MASINA IN NUMBER, + V_DATAORA_EXP IN DATE, + V_ID_AGENT IN NUMBER, + V_DISCOUNT_EVIDENTIAT IN NUMBER, + V_TEXT_ADITIONAL IN VARCHAR2, + V_TEXT_ADITIONAL_RETUR IN VARCHAR2, + V_SIR_MODIFICARI_ACONT IN VARCHAR2, + V_SIR_MODIFICARI_PART IN VARCHAR2, + V_PARAMETRU_ADITIONAL IN NUMBER, + V_SERIE_ACT IN VARCHAR2, + V_NUMAR_ACT IN NUMBER, + V_ID_VANZARE OUT NUMBER, + V_ID_VANZARE_RETUR OUT NUMBER, + V_CURSOR_RETUR OUT cursor_facturare) is + lnIdFacturare NUMBER(10) := null; + lnListareDetaliata NUMBER(1) := 0; + begin + pack_facturare.scrie_factura_avize_retur(V_DISCOUNT_FACTURA, + V_ID_DELEGAT, + V_ID_MASINA, + lnIdFacturare, + lnListareDetaliata, + V_DATAORA_EXP, + V_ID_AGENT, + V_DISCOUNT_EVIDENTIAT, + V_TEXT_ADITIONAL, + V_TEXT_ADITIONAL_RETUR, + V_SIR_MODIFICARI_ACONT, + V_SIR_MODIFICARI_PART, + V_PARAMETRU_ADITIONAL, + V_SERIE_ACT, + V_NUMAR_ACT, + V_ID_VANZARE, + V_ID_VANZARE_RETUR, + V_CURSOR_RETUR); + end;*/ + ------------------------------------------------------------------- + PROCEDURE scrie_factura_avize_retur(V_DISCOUNT_FACTURA IN NUMBER, + V_ID_DELEGAT IN NUMBER, + V_ID_MASINA IN NUMBER, + V_ID_FACTURARE IN NUMBER, + V_LISTARE_DETALIATA IN NUMBER, + V_DATAORA_EXP IN DATE, + V_ID_AGENT IN NUMBER, + V_DISCOUNT_EVIDENTIAT IN NUMBER, + V_TEXT_ADITIONAL IN VARCHAR2, + V_TEXT_ADITIONAL_RETUR IN VARCHAR2, + V_SIR_MODIFICARI_ACONT IN VARCHAR2, + V_SIR_MODIFICARI_PART IN VARCHAR2, + V_PARAMETRU_ADITIONAL IN NUMBER, + V_SERIE_ACT IN VARCHAR2, + V_NUMAR_ACT IN NUMBER, + V_ID_VANZARE OUT NUMBER, + V_ID_VANZARE_RETUR OUT NUMBER, + V_CURSOR_RETUR OUT cursor_facturare) IS + + lcSirIdFacturi VARCHAR2(3000); + V_NUME_DOC NOM_FDOC.FEL_DOCUMENT%TYPE; + V_CURSOR_VERIFICARE cursor_facturare; + V_SCRIS NUMBER(1); + V_SEPARATOR VARCHAR2(1) := ','; + BEGIN + IF V_SIR_MODIFICARI_ACONT IS NOT NULL OR + V_SIR_MODIFICARI_PART IS NOT NULL THEN + -- nu a fost scrisa factura la prima apelare + pack_facturare.finalizeaza_scriere_verificare(V_DISCOUNT_FACTURA, + V_ID_DELEGAT, + V_ID_MASINA, + V_ID_FACTURARE, + V_LISTARE_DETALIATA, + V_DATAORA_EXP, + V_ID_AGENT, + V_TEXT_ADITIONAL, + V_SIR_MODIFICARI_ACONT, + V_SIR_MODIFICARI_PART, + V_PARAMETRU_ADITIONAL, + V_ID_VANZARE); + END IF; + -- scrie avizul de retur + DELETE FROM VANZARI_DETALII_TEMP; + + SELECT STRINGAGG(COD) + INTO pack_facturare.ccod_retur + FROM VANZARI + WHERE ID_VANZARE IN + (SELECT X AS ID_VANZARE + FROM table(charn2collection(pack_facturare.clistaid, + V_SEPARATOR))); + + SELECT STRINGAGG(ID_VANZARE_FACT) + INTO lcSirIdFacturi + FROM (SELECT DISTINCT ID_VANZARE_FACT + FROM VANZARI_CORESP + WHERE ID_VANZARE_AVIZ IN + (SELECT X AS ID_VANZARE_AVIZ + FROM table(charn2collection(pack_Facturare.clistaid, + V_SEPARATOR))) + AND STERS = 0 + AND TIP = 1); + + INSERT INTO VANZARI_DETALII_TEMP + (CUSTODIE, + ID_ARTICOL, + SERIE, + ID_POL, + DISCOUNT_UNITAR, + PRET, + CANTITATE, + PROC_TVAV, + ID_GESTIUNE, + CONT, + ID_UTIL, + ID_VALUTA, + PRET_CU_TVA, + ID_JTVA_COLOANA, + PRET_ACHIZITIE, + PRETD, + ID_VALUTAD, + IN_STOC, + CURS, + MULTIPLICATOR) + SELECT CUSTODIE, + ID_ARTICOL, + SERIE, + ID_POL, + DISCOUNT_UNITAR, + PRET, + CANTITATE, + PROC_TVAV, + ID_GESTIUNE, + CONT, + ID_UTIL, + ID_VALUTA, + PRET_CU_TVA, + (CASE + WHEN ID_JTVA_COLOANA IS NULL THEN + (CASE PROC_TVAV + WHEN 1.24 THEN + 15 + WHEN 1.19 THEN + 1 + WHEN 1.09 THEN + 3 + ELSE + 8 + END) + ELSE + ID_JTVA_COLOANA + END) AS ID_JTVA_COLOANA, + PRET_ACHIZITIE, + PRETD, + ID_VALUTAD, + 1 AS IN_STOC, + CURS, + MULTIPLICATOR + FROM (SELECT A.CUSTODIE, + A.ID_ARTICOL, + A.SERIE, + A.ID_POL, + NVL(A.DISCOUNT_UNITAR, 0) AS DISCOUNT_UNITAR, + A.PRET, + SUM(CASE + WHEN A.ID_VANZARE IN + (SELECT X AS ID_VANZARE + FROM table(charn2collection(lcSirIdFacturi, + V_SEPARATOR))) THEN + A.CANTITATE + ELSE + (-1) * A.CANTITATE + END) AS CANTITATE, + A.PROC_TVAV, + A.ID_GESTIUNE, + A.CONT, + pack_facturare.nid_util AS ID_UTIL, + A.ID_VALUTA, + A.PRET_CU_TVA, + A.PRET_ACHIZITIE, + A.PRETD, + A.ID_VALUTAD, + NVL(B.CURS, 1) AS CURS, + NVL(B.MULTIPLICATOR, 1) AS MULTIPLICATOR, + A.ID_JTVA_COLOANA + FROM VANZARI_DETALII A + LEFT JOIN VANZARI_CURSURI B + ON A.ID_VANZARE = B.ID_VANZARE + AND A.ID_VALUTA = B.ID_VALUTA + WHERE A.STERS = 0 + AND A.ID_VANZARE IN + (SELECT X AS ID_VANZARE + FROM table(charn2collection(pack_facturare.clistaid || + V_SEPARATOR || + lcSirIdFacturi, + V_SEPARATOR))) + GROUP BY A.CUSTODIE, + A.ID_ARTICOL, + A.ID_POL, + NVL(A.DISCOUNT_UNITAR, 0), + A.SERIE, + A.PRET_ACHIZITIE, + A.PRETD, + A.ID_VALUTAD, + A.PRET, + A.PROC_TVAV, + A.ID_JTVA_COLOANA, + A.ID_GESTIUNE, + A.CONT, + A.ID_VALUTA, + A.PRET_CU_TVA, + NVL(B.CURS, 1), + NVL(B.MULTIPLICATOR, 1)) + WHERE CANTITATE < 0; + + /* lcSelect_discount := 'SELECT (-1)*SUM(DISCOUNT) FROM VANZARI WHERE ID_VANZARE IN (' || + pack_facturare.v_listaid || ')'; + + EXECUTE IMMEDIATE lcSelect_discount + INTO V_DISCOUNT_AVIZ;*/ + + pack_facturare.nperechec := 0; + pack_facturare.nid_factc := 0; + + pack_facturare.ntip := 24; + -- numar aviz retur + pack_facturare.cserie_act := V_SERIE_ACT; + pack_facturare.nnumar_act := V_NUMAR_ACT; + + pack_facturare.nid_set := 25000 + pack_facturare.ntip - 1 + + pack_facturare.nscadere_stoc * 10; + + pack_facturare.citeste_setari_document(pack_facturare.ntip, + pack_facturare.nid_fdoc, + V_NUME_DOC); + -- numar de bon pentru retur + pack_serii_numere.aloca_numar(pack_facturare.nid_tipbon, + NULL, + pack_facturare.nid_gestiune_sursa, + pack_facturare.nid_util, + pack_facturare.nid_sucursala, + pack_facturare.nnumar_bon); + + pack_facturare.scrie_aviz_retur(V_ID_DELEGAT, + V_ID_MASINA, + V_ID_FACTURARE, + V_LISTARE_DETALIATA, + V_DATAORA_EXP, + V_ID_AGENT, + V_TEXT_ADITIONAL_RETUR, + V_DISCOUNT_EVIDENTIAT, + V_SCRIS, + V_ID_VANZARE_RETUR, + V_CURSOR_VERIFICARE); + + CLOSE V_CURSOR_VERIFICARE; + + IF V_SCRIS = 0 THEN + pack_facturare.finalizeaza_factura(0, + V_ID_DELEGAT, + V_ID_MASINA, + V_ID_FACTURARE, + V_LISTARE_DETALIATA, + V_DATAORA_EXP, + V_ID_AGENT, + V_TEXT_ADITIONAL_RETUR, + 0); + V_ID_VANZARE_RETUR := pack_facturare.nid_vanzare; + END IF; + + OPEN V_CURSOR_RETUR FOR + SELECT ID_VANZARE_DET, + NULL AS EXPLICATIE, + DENUMIRE, + SERIE, + DISCOUNT_UNITAR, + DISCOUNT_UNITAR_VAL, + PRET, + PRET_VAL, + CURS, + MULTIPLICATOR, + CANTITATE, + PROC_TVAV, + UM, + ID_VALUTA, + PRET_CU_TVA, + TIP_VALUTA, + CODMAT, + CODMATF, + ID_JTVA_COLOANA, + CODBARE, + 0 AS PRET_ACHIZITIE, + NULL AS ID_VANZARE_SET, + 0 AS ID_GESTIUNE, + 0 AS ID_CTR, + NULL AS NUMAR_CONTRACT, + NUME_VAL + FROM (SELECT MIN(A.ID_VANZARE_DET) AS ID_VANZARE_DET, + B.DENUMIRE, + A.SERIE, + C.CURS, + C.MULTIPLICATOR, + (CASE + WHEN NVL(D.MONEDA_NATIONALA, 1) <> 1 THEN + ROUND(NVL(C.CURS, 0) * + ROUND(NVL(A.DISCOUNT_UNITAR, 0), + pack_sesiune.nzecimale_pretvval) / + NVL(C.MULTIPLICATOR, 1), + pack_sesiune.nzecimale_pretv) + ELSE + ROUND(NVL(A.DISCOUNT_UNITAR, 0), + pack_sesiune.nzecimale_pretv) + END) AS DISCOUNT_UNITAR, + (CASE + WHEN NVL(D.MONEDA_NATIONALA, 1) <> 1 THEN + ROUND(NVL(A.DISCOUNT_UNITAR, 0), + pack_sesiune.nzecimale_pretvval) + ELSE + 0 + END) AS DISCOUNT_UNITAR_VAL, + (CASE + WHEN NVL(D.MONEDA_NATIONALA, 1) <> 1 THEN + ROUND(NVL(C.CURS, 0) * + ROUND(NVL(A.PRET, 0), + pack_sesiune.nzecimale_pretvval) / + NVL(C.MULTIPLICATOR, 1), + pack_sesiune.nzecimale_pretv) + ELSE + ROUND(NVL(A.PRET, 0), pack_sesiune.nzecimale_pretv) + END) AS PRET, + (CASE + WHEN NVL(D.MONEDA_NATIONALA, 1) <> 1 THEN + ROUND(NVL(A.PRET, 0), pack_sesiune.nzecimale_pretvval) + ELSE + 0 + END) AS PRET_VAL, + SUM(CASE + WHEN A.ID_VANZARE IN + (SELECT X AS ID_VANZARE + FROM table(charn2collection(lcSirIdFacturi, + V_SEPARATOR))) THEN + A.CANTITATE + ELSE + (-1) * A.CANTITATE + END) AS CANTITATE, + A.PROC_TVAV, + B.UM, + A.ID_VALUTA, + A.PRET_CU_TVA, + (CASE + WHEN A.ID_VALUTA <> + pack_facturare.nid_moneda_nationala THEN + 1 + ELSE + 0 + END) AS TIP_VALUTA, + B.CODMAT, + B.CODMATF, + A.ID_JTVA_COLOANA, + B.CODBARE, + D.NUME_VAL + FROM VANZARI_DETALII A + LEFT JOIN NOM_ARTICOLE B + ON A.ID_ARTICOL = B.ID_ARTICOL + LEFT JOIN VANZARI_CURSURI C + ON A.ID_VALUTA = C.ID_VALUTA + AND A.ID_VANZARE = C.ID_VANZARE + LEFT JOIN NOM_VALUTE D + ON A.ID_VALUTA = D.ID_VALUTA + WHERE A.STERS = 0 + AND A.ID_VANZARE IN + (SELECT X AS ID_VANZARE + FROM table(charn2collection(pack_facturare.clistaid || + V_SEPARATOR || + lcSirIdFacturi, + V_SEPARATOR))) + GROUP BY B.DENUMIRE, + A.SERIE, + (CASE + WHEN NVL(D.MONEDA_NATIONALA, 1) <> 1 THEN + ROUND(NVL(C.CURS, 0) * + ROUND(NVL(A.DISCOUNT_UNITAR, 0), + pack_sesiune.nzecimale_pretvval) / + NVL(C.MULTIPLICATOR, 1), + pack_sesiune.nzecimale_pretv) + ELSE + ROUND(NVL(A.DISCOUNT_UNITAR, 0), + pack_sesiune.nzecimale_pretv) + END), + (CASE + WHEN NVL(D.MONEDA_NATIONALA, 1) <> 1 THEN + ROUND(NVL(A.DISCOUNT_UNITAR, 0), + pack_sesiune.nzecimale_pretvval) + ELSE + 0 + END), + (CASE + WHEN NVL(D.MONEDA_NATIONALA, 1) <> 1 THEN + ROUND(NVL(C.CURS, 0) * + ROUND(NVL(A.PRET, 0), + pack_sesiune.nzecimale_pretvval) / + NVL(C.MULTIPLICATOR, 1), + pack_sesiune.nzecimale_pretv) + ELSE + ROUND(NVL(A.PRET, 0), pack_sesiune.nzecimale_pretv) + END), + (CASE + WHEN NVL(D.MONEDA_NATIONALA, 1) <> 1 THEN + ROUND(NVL(A.PRET, 0), + pack_sesiune.nzecimale_pretvval) + ELSE + 0 + END), + A.PROC_TVAV, + A.ID_JTVA_COLOANA, + B.UM, + B.CODMAT, + B.CODMATF, + B.CODBARE, + A.ID_VALUTA, + A.PRET_CU_TVA, + C.CURS, + C.MULTIPLICATOR, + (CASE + WHEN A.ID_VALUTA <> + pack_facturare.nid_moneda_nationala THEN + 1 + ELSE + 0 + END), + D.NUME_VAL) + WHERE CANTITATE < 0; + + END scrie_factura_avize_retur; + /* ------------------------------------------------------------------- + PROCEDURE scrie_factura_avize(V_DISCOUNT_FACTURA IN NUMBER, + V_SERIE_ACT_INCASARE IN VARCHAR2, + V_NUMAR_ACT_INCASARE IN NUMBER, + V_LISTA_INCASARE IN VARCHAR2, + V_ID_DELEGAT IN NUMBER, + V_ID_MASINA IN NUMBER, + V_DATAORA_EXP IN DATE, + V_ID_AGENT IN NUMBER, + V_TEXT_ADITIONAL IN VARCHAR2, + V_DISCOUNT_EVIDENTIAT IN NUMBER, + V_VERIFICARE_FACTURAT IN NUMBER, + V_ID_VANZARE OUT NUMBER, + V_CURSOR_VERIFICARE OUT pack_facturare.cursor_facturare) is + lnIdFacturare NUMBER(10) := null; + lnListareDetaliata NUMBER(1) := 0; + begin + pack_facturare.scrie_factura_avize(V_DISCOUNT_FACTURA, + V_SERIE_ACT_INCASARE, + V_NUMAR_ACT_INCASARE, + V_LISTA_INCASARE, + V_ID_DELEGAT, + V_ID_MASINA, + lnIdFacturare, + lnListareDetaliata, + V_DATAORA_EXP, + V_ID_AGENT, + V_TEXT_ADITIONAL, + V_DISCOUNT_EVIDENTIAT, + V_VERIFICARE_FACTURAT, + V_ID_VANZARE, + V_CURSOR_VERIFICARE); + end;*/ + ------------------------------------------------------------------- + PROCEDURE scrie_factura_avize(V_DISCOUNT_FACTURA IN NUMBER, + V_SERIE_ACT_INCASARE IN VARCHAR2, + V_NUMAR_ACT_INCASARE IN NUMBER, + V_LISTA_INCASARE IN VARCHAR2, + V_ID_DELEGAT IN NUMBER, + V_ID_MASINA IN NUMBER, + V_ID_FACTURARE IN NUMBER, + V_LISTARE_DETALIATA IN NUMBER, + V_DATAORA_EXP IN DATE, + V_ID_AGENT IN NUMBER, + V_TEXT_ADITIONAL IN VARCHAR2, + V_DISCOUNT_EVIDENTIAT IN NUMBER, + V_VERIFICARE_FACTURAT IN NUMBER, + V_ID_VANZARE OUT NUMBER, + V_CURSOR_VERIFICARE OUT pack_facturare.cursor_facturare) IS + + TYPE tab_detalii_type IS TABLE OF vanzari_detalii_temp%ROWTYPE; + tab_detalii tab_detalii_type; + articole_aviz tab_articole_aviz_type; + + V_INCASAT_CALCUL ACT.SUMA%TYPE := 0; + V_DISCOUNT_TOTAL_CU_TVA ACT.SUMA%TYPE := 0; + + V_PRET ACT.SUMA%TYPE; + V_ID_VENCHELT ACT.ID_VENCHELT%TYPE; + V_ID_SECTIE ACT.ID_SECTIE%TYPE; + V_EXPLICATIE ACT.EXPLICATIA%TYPE; + V_ASCD ACT.ASCD%TYPE; + V_SCD ACT.SCD%TYPE; + V_SCC ACT.SCC%TYPE; + V_CU_TVA NOTE_CONTABILE.CU_TVA%TYPE; + V_IN_VALUTA NOTE_CONTABILE.IN_VALUTA%TYPE; + V_CANTITATE VANZARI_DETALII.CANTITATE%TYPE; + V_CANTITATE_RAMASA VANZARI_DETALII.CANTITATE%TYPE; + V_PTVA NUMBER(4); + + V_LISTAID VARCHAR2(32000) := '<>'; + V_ID_CTR ACT.ID_CTR%TYPE; + + V_DISCOUNT_UNITAR VANZARI_DETALII.DISCOUNT_UNITAR%TYPE; + BEGIN + pack_contafin.sterge_temp_actrul(); + pack_facturare.ndiscount_evidentiat := V_DISCOUNT_EVIDENTIAT; + pack_facturare.initializeaza_setari_facturare(); + + V_SCD := '4111'; + V_SCC := '418'; + V_ID_VENCHELT := 0; + V_CU_TVA := 0; + V_IN_VALUTA := 0; + + V_EXPLICATIE := SUBSTR('FACTURARE AVIZE ' || pack_facturare.cdescriere, + 1, + 100); + + pack_facturare.nid_partc := pack_facturare.nid_part; + + SELECT * BULK COLLECT INTO tab_detalii FROM VANZARI_DETALII_TEMP; + + IF SQL%ROWCOUNT = 0 THEN + RAISE_APPLICATION_ERROR(-20000, + 'Nu exista articole in lista de vanzare! (FACT-005)'); + END IF; + + FOR i IN tab_detalii.first .. tab_detalii.last LOOP + + IF tab_detalii(i).proc_tvav > 1 THEN + V_CU_TVA := 1; + V_PTVA := (tab_detalii(i).proc_tvav - 1) * 100; + ELSE + V_CU_TVA := 0; + V_PTVA := 0; + END IF; + + IF pack_facturare.nproc_tva_max < V_PTVA THEN + pack_facturare.nproc_tva_max := V_PTVA; + pack_facturare.nid_jtva_coloana := tab_detalii(i).id_jtva_coloana; + pack_facturare.nTaxCode := tab_detalii(i).taxcode; + END IF; + + SELECT A.ID_VANZARE, + A.ID_VANZARE_DET, + A.CANTITATE, + A.CUSTODIE, + C.COD, + C.ID_FACT, + C.NRACT, + C.SERIE_ACT, + C.DATAACT, + MIN(C.ASCD) AS ASCD, + NVL(B.ID_SECTIE, E.ID_SECTIE) AS ID_SECTIE + BULK COLLECT + INTO articole_aviz + FROM VANZARI_DETALII A + LEFT JOIN VANZARI B + ON A.ID_VANZARE = B.ID_VANZARE + LEFT JOIN ACT C + ON B.COD = C.COD + AND C.SCD = DECODE(B.TIP, 42, '357', '418') + AND DECODE(B.TIP, 42, '4428', C.SCC) = '4428' + LEFT JOIN CRM_POLITICI_PRETURI D + ON A.ID_POL = D.ID_POL + LEFT JOIN CRM_NOTE_VANZARI E + ON D.ID_NOTA = E.ID_NOTA + WHERE A.ID_VANZARE IN + (SELECT X AS ID_VANZARE + FROM table(cast(CHARN2COLLECTION(pack_facturare.clistaid, + ',') as num_tab))) + AND A.ID_ARTICOL = tab_detalii(i).id_articol + AND A.DISCOUNT_UNITAR = tab_detalii(i).discount_unitar + AND A.ID_POL = tab_detalii(i).id_pol + AND A.ID_VALUTA = tab_detalii(i).id_valuta + AND A.PRET = tab_detalii(i).pret + AND A.PRET_ACHIZITIE = tab_detalii(i).pret_achizitie + AND NVL(A.PRETD, 0) = NVL(tab_detalii(i).pretd, NVL(A.PRETD, 0)) + AND NVL(A.ID_VALUTAD, -99) = + NVL(tab_detalii(i).id_valutad, NVL(A.ID_VALUTAD, -99)) + AND NVL(A.ID_GESTIUNE, -9999) = + NVL(tab_detalii(i).id_gestiune, -9999) + AND NVL(A.CONT, 'XXXX') = NVL(tab_detalii(i).cont, 'XXXX') + AND NVL(A.SERIE, '+_') = NVL(tab_detalii(i).serie, '+_') + GROUP BY A.ID_VANZARE, + A.ID_VANZARE_DET, + A.CANTITATE, + A.CUSTODIE, + C.COD, + C.ID_FACT, + C.NRACT, + C.SERIE_ACT, + C.DATAACT, + NVL(B.ID_SECTIE, E.ID_SECTIE) + ORDER BY 6; + + V_CANTITATE_RAMASA := tab_detalii(i).cantitate; + + IF SQL%ROWCOUNT = 0 THEN + RAISE_APPLICATION_ERROR(-20000, + 'Nu au fost gasite articolele! (FACT-015)'); + END IF; + + FOR j IN articole_aviz.first .. articole_aviz.last LOOP + EXIT WHEN V_CANTITATE_RAMASA = 0; + + pack_facturare.nid_factc := articole_aviz(j).id_fact; + pack_facturare.nperechec := articole_aviz(j).nract; + + V_CANTITATE := articole_aviz(j).cantitate; + + IF V_CANTITATE_RAMASA >= V_CANTITATE THEN + V_CANTITATE_RAMASA := V_CANTITATE_RAMASA - V_CANTITATE; + + ELSE + V_CANTITATE := V_CANTITATE_RAMASA; + V_CANTITATE_RAMASA := 0; + END IF; + + -- modificare 20.11 + IF instr(V_LISTAID, '<' || articole_aviz(j).id_vanzare || '>') = 0 THEN + V_LISTAID := V_LISTAID || '<' || articole_aviz(j).id_vanzare || '>,'; + END IF; + + IF articole_aviz(j).custodie = 1 THEN + pack_facturare.nfactavizcust := 1; + tab_detalii(i).cantitate := V_CANTITATE; + tab_detalii(i).id_rata := articole_aviz(j).cod; + V_INCASAT_CALCUL := V_INCASAT_CALCUL + + pack_facturare.contabilizeaza_articol(tab_detalii(i)); + + UPDATE VANZARI_DETALII_TEMP + SET CANTITATE = CANTITATE - V_CANTITATE + WHERE ID_TEMP = tab_detalii(i).id_temp; + + MERGE INTO VANZARI_DETALII_TEMP A + USING DUAL B + ON (A.ID_ARTICOL = tab_detalii(i).id_articol AND A.ID_POL = tab_detalii(i).id_pol AND A.PRET = tab_detalii(i).pret AND A.PRET_CU_TVA = tab_detalii(i).pret_cu_tva AND A.PROC_TVAV = tab_detalii(i).proc_tvav AND A.DISCOUNT_UNITAR = tab_detalii(i).discount_unitar AND A.ID_GESTIUNE = tab_detalii(i).id_gestiune AND NVL(A.CONT, 'XXXX') = NVL(tab_detalii(i).cont, 'XXX') AND NVL(A.ID_VALUTA, -1) = NVL(tab_detalii(i).id_valuta, -1) AND NVL(A.CURS, 1) = NVL(tab_detalii(i).curs, 1) AND A.ID_JTVA_COLOANA = tab_detalii(i).id_jtva_coloana AND A.IN_STOC = tab_detalii(i).in_stoc AND NVL(A.ID_GESTIUNE_DEST, -99) = NVL(tab_detalii(i).id_gestiune_dest, -99) AND NVL(A.ID_UTIL, 0) = NVL(tab_detalii(i).id_util, 0) AND A.PRET_ACHIZITIE = tab_detalii(i).pret_achizitie AND NVL(A.ID_VANZARE_SET, -99) = NVL(tab_detalii(i).id_vanzare_set, -99) AND A.CUSTODIE = articole_aviz(j).custodie) + WHEN MATCHED THEN + UPDATE SET CANTITATE = CANTITATE + V_CANTITATE + WHEN NOT MATCHED THEN + INSERT + (ID_ARTICOL, + ID_POL, + PRET, + PRET_CU_TVA, + PROC_TVAV, + CANTITATE, + DISCOUNT_UNITAR, + ID_GESTIUNE, + CONT, + ID_VALUTA, + CURS, + MULTIPLICATOR, + ID_JTVA_COLOANA, + IN_STOC, + ID_GESTIUNE_DEST, + ID_COMANDA, + ID_UTIL, + PRET_ACHIZITIE, + PRETD, + ID_VALUTAD, + ID_VANZARE_SET, + ID_LUCRARE_REZ, + ID_PART_REZ, + NUMAR_ACT, + CUSTODIE, + ID_TEMP) + VALUES + (tab_detalii(i).id_articol, + tab_detalii(i).id_pol, + tab_detalii(i).pret, + tab_detalii(i).pret_cu_tva, + tab_detalii(i).proc_tvav, + V_CANTITATE, + tab_detalii(i).discount_unitar, + tab_detalii(i).id_gestiune, + tab_detalii(i).cont, + tab_detalii(i).id_valuta, + tab_detalii(i).curs, + tab_detalii(i).multiplicator, + tab_detalii(i).id_jtva_coloana, + tab_detalii(i).in_stoc, + tab_detalii(i).id_gestiune_dest, + tab_detalii(i).id_comanda, + tab_detalii(i).id_util, + tab_detalii(i).pret_achizitie, + NVL(tab_detalii(i).pretd, 0), + tab_detalii(i).id_valutad, + tab_detalii(i).id_vanzare_set, + tab_detalii(i).id_lucrare_rez, + tab_detalii(i).id_part_rez, + pack_facturare.nnumar_act, + articole_aviz(j).custodie, + -1000); + + pack_facturare.nfactavizcust := 0; + ELSE + IF pack_facturare.ndiscount_evidentiat = 1 AND tab_detalii(i).discount_unitar <> 0 THEN + V_PRET := tab_detalii(i).pret; + V_DISCOUNT_UNITAR := tab_detalii(i).discount_unitar; + + V_DISCOUNT_TOTAL_CU_TVA := V_DISCOUNT_TOTAL_CU_TVA + + pack_facturare.scrie_discount(V_CANTITATE, + tab_detalii (i).discount_unitar, + tab_detalii (i).id_valuta, + V_IN_VALUTA, + articole_aviz(j).ascd, -- ASCD + articole_aviz(j).id_sectie, + tab_detalii (i).id_ctr, + tab_detalii (i).curs / tab_detalii(i).multiplicator, + tab_detalii (i).proc_tvav, + tab_detalii (i).pret_cu_tva, + V_CU_TVA, + tab_detalii (i).id_jtva_coloana); + ELSE + V_PRET := tab_detalii(i).pret - tab_detalii(i).discount_unitar; + V_DISCOUNT_UNITAR := 0; + END IF; + + -- scriere nota in act + V_INCASAT_CALCUL := V_INCASAT_CALCUL + + pack_facturare.scrie_nota(V_CANTITATE, + V_PRET, + V_DISCOUNT_UNITAR, + tab_detalii (i).pret_cu_tva, + tab_detalii (i).id_valuta, + V_IN_VALUTA, + tab_detalii (i).curs / tab_detalii(i).multiplicator, + V_ID_VENCHELT, + articole_aviz (j).id_sectie, + tab_detalii (i).id_ctr, + V_EXPLICATIE, + V_SCD, + articole_aviz (j).ascd, -- ascd + V_SCC, + articole_aviz (j).ascd, -- ascc + 0, -- V_ID_GESTIN + 0, -- V_ID_GESTOUT + pack_facturare.nid_set, -- V_ID_SET + V_CU_TVA, + tab_detalii (i).proc_tvav * 100 - 100, + tab_detalii (i).id_jtva_coloana, + tab_detalii (i).taxcode, + null); + END IF; + END LOOP; + + END LOOP; + + BEGIN + SELECT ID_CTR + INTO V_ID_CTR + FROM (SELECT SUM(SUMA), ID_CTR + FROM ACT_TEMP + WHERE SCD IN ('4111', '418') + GROUP BY ID_CTR + ORDER BY 1) + WHERE ROWNUM < 2; + EXCEPTION + WHEN NO_DATA_FOUND THEN + V_ID_CTR := NULL; + END; + + IF V_DISCOUNT_FACTURA <> 0 THEN + SELECT DISTINCT ASCD, ID_SECTIE + INTO V_ASCD, V_ID_SECTIE + FROM ACT_TEMP + WHERE SCD = '4111' + AND ROWNUM < 2; + + V_DISCOUNT_TOTAL_CU_TVA := V_DISCOUNT_TOTAL_CU_TVA + + pack_facturare.scrie_discount(1, + V_DISCOUNT_FACTURA, + pack_facturare.nid_valuta, + pack_facturare.nin_valuta, + V_ASCD, + V_ID_SECTIE, + V_ID_CTR, + 1, + (100 + + pack_facturare.nproc_tva_max) / 100, + 1, + 1, -- V_CU_TVA + pack_facturare.nid_jtva_coloana, + pack_facturare.nTaxCode); + END IF; + + V_INCASAT_CALCUL := V_INCASAT_CALCUL - V_DISCOUNT_TOTAL_CU_TVA; + + /* IF V_AVANS <> 0 THEN + V_INCASAT_CALCUL := V_INCASAT_CALCUL - ABS(v_avans); + pack_facturare.scrie_avans((-1) * ABS(v_avans)); + END IF;*/ + + IF V_LISTA_INCASARE IS NOT NULL THEN + pack_facturare.scrie_incasari(V_SERIE_ACT_INCASARE, + V_NUMAR_ACT_INCASARE, + V_LISTA_INCASARE, + V_ID_CTR); + END IF; + + -- modificare 22.08.2008 + DELETE FROM VANZARI_DETALII_TEMP WHERE CANTITATE = 0; + + -- cumulare note + pack_facturare.cumuleaza_note_act(); + + pack_facturare.clistaid_avize := REPLACE(REPLACE(V_LISTAID, '<'), '>'); + + if pack_contafin.verifica_note_contabile(1) > 0 then + pack_facturare.cursor_verificare(V_CURSOR_VERIFICARE); + V_ID_VANZARE := NULL; + else + pack_facturare.finalizeaza_factura(V_DISCOUNT_FACTURA, + V_ID_DELEGAT, + V_ID_MASINA, + V_ID_FACTURARE, + V_LISTARE_DETALIATA, + V_DATAORA_EXP, + V_ID_AGENT, + V_TEXT_ADITIONAL, + V_VERIFICARE_FACTURAT); + + OPEN V_CURSOR_VERIFICARE FOR + SELECT * FROM ACT_TEMP WHERE 1 = 2; + V_ID_VANZARE := pack_facturare.nid_vanzare; + end if; + + END scrie_factura_avize; + ------------------------------------------------------------------- + /* PROCEDURE scrie_aviz_retur(V_ID_DELEGAT IN NUMBER, + V_ID_MASINA IN NUMBER, + V_DATAORA_EXP IN DATE, + V_ID_AGENT IN NUMBER, + V_TEXT_ADITIONAL IN VARCHAR2, + V_DISCOUNT_EVIDENTIAT IN NUMBER, + V_SCRIS OUT NUMBER, + V_ID_VANZARE OUT NUMBER, + V_CURSOR_VERIFICARE OUT pack_facturare.cursor_facturare) IS + lnIdFacturare NUMBER(10) := null; + lnListareDetaliata NUMBER(1) := 0; + begin + pack_facturare.scrie_aviz_retur(V_ID_DELEGAT, + V_ID_MASINA, + lnIdFacturare, + lnListareDetaliata, + V_DATAORA_EXP, + V_ID_AGENT, + V_TEXT_ADITIONAL, + V_DISCOUNT_EVIDENTIAT, + V_SCRIS, + V_ID_VANZARE, + V_CURSOR_VERIFICARE); + end;*/ + ------------------------------------------------------------------- + PROCEDURE scrie_aviz_retur(V_ID_DELEGAT IN NUMBER, + V_ID_MASINA IN NUMBER, + V_ID_FACTURARE IN NUMBER, + V_LISTARE_DETALIATA IN NUMBER, + V_DATAORA_EXP IN DATE, + V_ID_AGENT IN NUMBER, + V_TEXT_ADITIONAL IN VARCHAR2, + V_DISCOUNT_EVIDENTIAT IN NUMBER, + V_SCRIS OUT NUMBER, + V_ID_VANZARE OUT NUMBER, + V_CURSOR_VERIFICARE OUT pack_facturare.cursor_facturare) IS + + TYPE tab_detalii_type IS TABLE OF vanzari_detalii_temp%ROWTYPE; + tab_detalii tab_detalii_type; + + V_INCASAT_CALCUL ACT.SUMA%TYPE := 0; + BEGIN + pack_contafin.sterge_temp_actrul(); + pack_facturare.ndiscount_evidentiat := V_DISCOUNT_EVIDENTIAT; + pack_facturare.initializeaza_setari_facturare(); + + SELECT * BULK COLLECT INTO tab_detalii FROM VANZARI_DETALII_TEMP; + + IF SQL%ROWCOUNT = 0 THEN + RAISE_APPLICATION_ERROR(-20000, + 'Nu exista articole in lista de vanzare! (FACT-006)'); + END IF; + + FOR i IN tab_detalii.first .. tab_detalii.last LOOP + pack_facturare.nfactavizcust := tab_detalii(i).custodie; + IF pack_facturare.nfactavizcust = 1 THEN + pack_facturare.descarca_gestiune(tab_detalii (i).id_articol, + tab_detalii (i).serie, + tab_detalii (i).pret_achizitie, + tab_detalii (i).pretd, + tab_detalii (i).id_valutad, + tab_detalii (i).pretv_orig, + tab_detalii (i).pret, + tab_detalii (i).diferenta, + tab_detalii (i).proc_tvav, + tab_detalii (i).pret_cu_tva, + tab_detalii (i).cantitate, + tab_detalii (i).discount_unitar, + tab_detalii (i).id_gestiune, + pack_facturare.nid_sectie_stoc, -- V_ID_SECTIE + tab_detalii (i).cont, + pack_facturare.nid_venchelt, -- ID_VENCHELT, + tab_detalii (i).id_valuta, + tab_detalii (i).curs / tab_detalii(i).multiplicator, + NULL, -- V_ID_PART_REZ + NULL, + tab_detalii (i).id_jtva_coloana, + tab_detalii (i).taxcode); + ELSE + V_INCASAT_CALCUL := V_INCASAT_CALCUL + + pack_facturare.contabilizeaza_articol(tab_detalii(i)); + END IF; + pack_facturare.nfactavizcust := 0; + END LOOP; + + -- cumulare note + pack_facturare.scrie_note_banca_compensari(); + pack_facturare.cumuleaza_note_act(); + + if pack_contafin.verifica_note_contabile(1) > 0 then + pack_facturare.cursor_verificare(V_CURSOR_VERIFICARE); + V_SCRIS := 0; + V_ID_VANZARE := NULL; + else + pack_facturare.finalizeaza_factura(0, -- V_DISCOUNT_FACTURA + V_ID_DELEGAT, + V_ID_MASINA, + V_ID_FACTURARE, + V_LISTARE_DETALIATA, + V_DATAORA_EXP, + V_ID_AGENT, + V_TEXT_ADITIONAL, + 0); -- V_VERIFICAT_FACTURAT + + OPEN V_CURSOR_VERIFICARE FOR + SELECT * FROM ACT_TEMP WHERE 1 = 2; + + V_SCRIS := 1; + V_ID_VANZARE := pack_facturare.nid_vanzare; + end if; + + END scrie_aviz_retur; + ------------------------------------------------------------------- + FUNCTION contabilizeaza_articol(detalii_articol VANZARI_DETALII_TEMP%ROWTYPE) + RETURN NUMBER IS + V_COMPUS NUMBER(1); + V_ID_POL_ART CRM_POLITICI_PRET_ART.Id_Pol_Art%TYPE; + + V_INCASAT_CALCUL ACT.SUMA%TYPE := 0; + + V_SCD ACT.SCD%TYPE; + V_ASCD ACT.ASCD%TYPE; + V_SCC ACT.SCC%TYPE; + V_ASCC ACT.ASCC%TYPE; + V_EXPLICATIE ACT.EXPLICATIA%TYPE; + V_IN_VALUTA NUMBER(1) := 0; + + /* CURSOR cursor_elemente_pachet IS + SELECT A.ID_POL_ART, + B.ID_POL, + B.ID_ARTICOL, + B.PRET, + B.PROC_TVAV, + B.ID_VALUTA, + C.ID_NOTA, + C.PRETURI_CU_TVA, + NVL(B.ID_VENCHELT, D.ID_VENCHELT) AS ID_VENCHELT, + DECODE(B.ID_POL, + NVL(pack_facturare.nid_politica_stoc, -99), + pack_facturare.nid_sectie_stoc, + D.ID_SECTIE) as ID_SECTIE, + D.ID_SET, + E.EXPLICATIE, + E.SCD, + E.ASCD, + E.SCC, + E.ASCC, + E.CU_TVA, + E.IN_VALUTA + FROM CRM_PACHETE_ARTICOLE A + LEFT JOIN CRM_POLITICI_PRET_ART B ON A.ID_POL_ART = B.ID_POL_ART + LEFT JOIN CRM_POLITICI_PRETURI C ON B.ID_POL = C.ID_POL + LEFT JOIN CRM_NOTE_VANZARI D ON C.ID_NOTA = D.ID_NOTA + LEFT JOIN NOTE_CONTABILE E ON D.ID_SET = E.ID_SET + WHERE A.STERS = 0 + AND A.ID_PACHET = V_ID_POL_ART; + crs_rand_elemente_pachet cursor_elemente_pachet%rowtype;*/ + + CURSOR cursor_articol IS + SELECT A.ID_POL_ART, + A.ID_POL, + A.ID_ARTICOL, + A.PRET, + (CASE + WHEN A.ID_POL = pack_facturare.nid_politica_stoc AND + pack_facturare.nin_valuta = 1 THEN + pack_facturare.nid_valuta + ELSE + A.ID_VALUTA + END) AS ID_VALUTA, + B.ID_NOTA, + B.PRETURI_CU_TVA, + /* (CASE + WHEN (A.ID_POL = pack_facturare.nid_politica_stoc AND + pack_facturare.nid_venchelt IS NOT NULL) OR + (A.ID_VENCHELT IS NULL AND C.ID_VENCHELT IS NULL) THEN + pack_facturare.nid_venchelt + ELSE + NVL(A.ID_VENCHELT, C.ID_VENCHELT) + END) AS ID_VENCHELT, + DECODE(A.ID_POL, + NVL(pack_facturare.nid_politica_stoc, -99), + pack_facturare.nid_sectie_stoc, + C.ID_SECTIE) as ID_SECTIE,*/ + NVL(pack_facturare.nid_venchelt, + NVL(A.ID_VENCHELT, C.ID_VENCHELT)) AS ID_VENCHELT, + NVL(pack_facturare.nid_sectie_stoc, C.ID_SECTIE) as ID_SECTIE, + C.ID_SET, + D.EXPLICATIE, + D.SCD, + D.ASCD, + D.SCC, + D.ASCC, + D.CU_TVA, + (CASE + WHEN A.ID_POL = pack_facturare.nid_politica_stoc AND + pack_facturare.nin_valuta = 1 THEN + 1 + ELSE + D.IN_VALUTA + END) AS IN_VALUTA + FROM CRM_POLITICI_PRET_ART A + LEFT JOIN CRM_POLITICI_PRETURI B + ON A.ID_POL = B.ID_POL + LEFT JOIN CRM_NOTE_VANZARI C + ON B.ID_NOTA = C.ID_NOTA + LEFT JOIN NOTE_CONTABILE D + ON C.ID_SET = D.ID_SET + WHERE + -- A.STERS = 0 AND + A.ID_POL = detalii_articol.id_pol + AND A.ID_ARTICOL = detalii_articol.id_articol; + crs_rand_articol cursor_articol%rowtype; + lcArticol nom_articole.denumire%type; + lcPolitica crm_politici_preturi.nume_lista_preturi%type; + BEGIN + + -- 05.07.2011 + BEGIN + SELECT COMPUS, ID_POL_ART + INTO V_COMPUS, V_ID_POL_ART + FROM VCRM_POLITICI_PRET_ART + WHERE ID_ARTICOL = detalii_articol.id_articol + AND ID_POL = detalii_articol.id_pol; + EXCEPTION + WHEN NO_DATA_FOUND THEN + SELECT DENUMIRE + INTO lcArticol + FROM NOM_ARTICOLE + where id_articol = detalii_articol.id_articol; + + SELECT NUME_LISTA_PRETURI + INTO lcPolitica + FROM CRM_POLITICI_PRETURI + where id_pol = detalii_articol.id_pol; + + RAISE_APPLICATION_ERROR(-20000, + 'Articolul ' || detalii_articol.id_articol || '|' || + lcArticol || + ' nu este definit in politica de preturi ' || + detalii_articol.id_pol || '|' || lcPolitica || + '! (FACT-024)'); + END; + -- 05.07.2011 ^ + + IF V_COMPUS = 1 THEN + -- articol compus + RAISE_APPLICATION_ERROR(-20000, + 'Nu sunt facute configurarile pentru articolele compuse! (FACT-016 : ' || + detalii_articol.id_articol || '.' || + detalii_articol.id_pol || ' )'); + -- in_valuta = ? + + /* OPEN cursor_elemente_pachet; + FETCH cursor_elemente_pachet + INTO crs_rand_elemente_pachet; + WHILE cursor_elemente_pachet%FOUND LOOP + + CASE + WHEN pack_facturare.v_tip <= 20 THEN + -- factura + V_SCD := crs_rand_elemente_pachet.scd; + V_ASCD := crs_rand_elemente_pachet.ascd; + V_SCC := crs_rand_elemente_pachet.scc; + V_ASCC := crs_rand_elemente_pachet.ascc; + ELSE + -- aviz + V_SCD := '418'; + V_ASCD := crs_rand_elemente_pachet.ascd; + V_SCC := crs_rand_elemente_pachet.scc; + V_ASCC := crs_rand_elemente_pachet.ascc; + END CASE; + + IF pack_facturare.v_discount_evidentiat = 0 THEN + V_PRET := crs_rand_elemente_pachet.pret - + detalii_articol.discount_unitar * + ROUND(crs_rand_elemente_pachet.pret / + detalii_articol.pret, + pack_facturare.v_zecimale_procent); + ELSE + V_PRET := crs_rand_elemente_pachet.pret; + END IF; + + V_INCASAT_CALCUL := V_INCASAT_CALCUL + + pack_facturare.scrie_nota(detalii_articol.cantitate, + V_PRET, + detalii_articol.pret_cu_tva, + detalii_articol.id_valuta, + crs_rand_elemente_pachet.in_valuta, + detalii_articol.curs, + crs_rand_elemente_pachet.id_venchelt, + crs_rand_elemente_pachet.id_sectie, + crs_rand_elemente_pachet.explicatie, + V_SCD, + V_ASCD, + V_SCC, + V_ASCC, + 0, + 0, + V_ID_CONTRACT, + pack_facturare.v_id_set, + crs_rand_elemente_pachet.cu_tva, + detalii_articol.proc_tvav * 100 - 100, + detalii_articol.id_jtva_coloana); + + IF pack_facturare.v_scadere_stoc = 1 AND + detalii_articol.id_gestiune <> -1000 AND + detalii_articol.in_stoc = 1 THEN + pack_facturare.descarca_gestiune(crs_rand_elemente_pachet.id_articol, + detalii_articol.serie, + crs_rand_elemente_pachet.pret, + crs_rand_elemente_pachet.proc_tvav, + detalii_articol.pret_cu_tva, + detalii_articol.cantitate, + detalii_articol.discount_unitar * + ROUND(crs_rand_elemente_pachet.pret / + detalii_articol.pret, + pack_facturare.v_zecimale_procent), + detalii_articol.id_gestiune, + detalii_articol.cont, + detalii_articol.id_valuta, + detalii_articol.curs); + END IF; + + FETCH cursor_elemente_pachet + INTO crs_rand_elemente_pachet; + END LOOP; + CLOSE cursor_elemente_pachet; + + -- discount ? */ + + ELSE + -- articol simplu + OPEN cursor_articol; + FETCH cursor_articol + INTO crs_rand_articol; + WHILE cursor_articol%FOUND LOOP + + CASE + -- 30.10.2009 + WHEN pack_facturare.ntip <= 20 or + pack_facturare.ntip IN (pack_facturare.nTipFacturaHotel, + pack_facturare.nTipFacturaRestaurant, + pack_facturare.nTipNotaPlata, + pack_facturare.nTipVanzareRetail, + 48, + 49,51,52) THEN + -- 30.10.2009 ^ + -- factura,factura roahotel + V_SCD := crs_rand_articol.scd; + V_ASCD := NVL(crs_rand_articol.ascd, + PACK_FACTURARE.GetAnaliticByGrupUtilizatori(pack_facturare.nid_util, + V_SCD)); + WHEN pack_facturare.ntip in (28, 29) THEN + -- aviz catre clienti debitori + V_SCD := '461'; + V_ASCD := PACK_FACTURARE.GetAnaliticByGrupUtilizatori(pack_facturare.nid_util, + V_SCD); + ELSE + -- aviz + V_SCD := '418'; + V_ASCD := PACK_FACTURARE.GetAnaliticByGrupUtilizatori(pack_facturare.nid_util, + V_SCD); + END CASE; + + V_SCC := crs_rand_articol.scc; + V_ASCC := NVL(crs_rand_articol.ascc, + PACK_FACTURARE.GetAnaliticByGrupUtilizatori(pack_facturare.nid_util, + V_SCC)); + + CASE + WHEN pack_facturare.ntip = 7 THEN + V_EXPLICATIE := SUBSTR(TRIM(crs_rand_articol.explicatie) || + ' INVOICE:' || pack_facturare.cdescriere, 1, 100); + WHEN pack_facturare.ntip IN (8, 9) THEN + V_EXPLICATIE := SUBSTR(TRIM(crs_rand_articol.explicatie) || + ' RETUR FACTURA:' || pack_facturare.cdescriere, 1,100); + ELSE + V_EXPLICATIE := crs_rand_articol.explicatie; + END CASE; + + IF pack_facturare.nTip <> pack_facturare.nTipNotaPlata THEN + + V_INCASAT_CALCUL := V_INCASAT_CALCUL + + pack_facturare.scrie_nota(detalii_articol.cantitate, + detalii_articol.pret, + detalii_articol.discount_unitar, + detalii_articol.pret_cu_tva, + detalii_articol.id_valuta, + crs_rand_articol.in_valuta, + detalii_articol.curs / + detalii_articol.multiplicator, + crs_rand_articol.id_venchelt, + crs_rand_articol.id_sectie, + detalii_articol.id_ctr, + V_EXPLICATIE, + V_SCD, + V_ASCD, + V_SCC, + V_ASCC, + 0, + 0, + pack_facturare.nid_set, + crs_rand_articol.cu_tva, + detalii_articol.proc_tvav * 100 - 100, + detalii_articol.id_jtva_coloana, + detalii_articol.taxcode, + null); + END IF; + + V_IN_VALUTA := crs_rand_articol.in_valuta; + + IF pack_facturare.ntip <> 4 THEN + IF pack_facturare.nscadere_stoc = 1 AND + detalii_articol.id_gestiune <> -1000 AND + detalii_articol.in_stoc = 1 THEN + pack_facturare.descarca_gestiune(detalii_articol.id_articol, + detalii_articol.serie, + detalii_articol.pret_achizitie, + detalii_articol.pretd, + detalii_articol.id_valutad, + detalii_articol.pretv_orig, + detalii_articol.pret, + detalii_articol.diferenta, + detalii_articol.proc_tvav, + detalii_articol.pret_cu_tva, + detalii_articol.cantitate, + detalii_articol.discount_unitar, + detalii_articol.id_gestiune, + crs_rand_articol.id_sectie, + detalii_articol.cont, + crs_rand_articol.id_venchelt, + detalii_articol.id_valuta, + detalii_articol.curs / + detalii_articol.multiplicator, + detalii_articol.id_part_rez, + detalii_articol.id_lucrare_rez, + detalii_articol.id_jtva_coloana, + detalii_articol.taxcode); + END IF; + + IF detalii_articol.discount_unitar <> 0 AND + pack_facturare.ndiscount_evidentiat = 1 THEN + V_INCASAT_CALCUL := V_INCASAT_CALCUL - + pack_facturare.scrie_discount(detalii_articol.cantitate, + detalii_articol.discount_unitar, + detalii_articol.id_valuta, + V_IN_VALUTA, + V_ASCD, + crs_rand_articol.id_sectie, + detalii_articol.id_ctr, + detalii_articol.curs / + detalii_articol.multiplicator, + detalii_articol.proc_tvav, + detalii_articol.pret_cu_tva, + crs_rand_articol.cu_tva, + detalii_articol.id_jtva_coloana, + detalii_articol.taxcode); + END IF; + + ELSE + pack_facturare.scrie_fact_aviz_custodie(detalii_articol.id_rata, -- V_COD + crs_rand_articol.id_sectie, + detalii_articol.id_articol, + detalii_articol.id_gestiune, + detalii_articol.cont, + detalii_articol.cantitate, + detalii_articol.pret_cu_tva, + detalii_articol.pret_achizitie, + detalii_articol.pretd, + detalii_articol.id_valutad, + detalii_articol.pret, + detalii_articol.discount_unitar, + detalii_articol.id_valuta, + detalii_articol.curs / + detalii_articol.multiplicator, + detalii_articol.proc_tvav); + END IF; + + FETCH cursor_articol + INTO crs_rand_articol; + END LOOP; + CLOSE cursor_articol; + + END IF; + + RETURN V_INCASAT_CALCUL; + END contabilizeaza_articol; + ------------------------------------------------------------------- + FUNCTION contabilizeaza_rata(detalii_rata VANZARI_DETALII_TEMP%ROWTYPE) + RETURN NUMBER IS + V_INCASAT_CALCUL ACT.SUMA%TYPE := 0; + + V_ID_VENCHELT ACT.ID_VENCHELT%TYPE; + V_ID_SECTIE ACT.ID_SECTIE%TYPE; + V_ID_SET ACT.ID_SET%TYPE; + V_EXPLICATIE ACT.EXPLICATIA%TYPE; + V_SCD ACT.SCD%TYPE; + V_ASCD ACT.ASCD%TYPE; + V_SCC ACT.SCC%TYPE; + V_ASCC ACT.ASCC%TYPE; + V_CU_TVA NOTE_CONTABILE.CU_TVA%TYPE; + V_IN_VALUTA NOTE_CONTABILE.IN_VALUTA%TYPE; + BEGIN + BEGIN + SELECT NVL(B.ID_VENCHELT, pack_facturare.nid_venchelt), + NVL(pack_facturare.nid_sectie_stoc, B.ID_SECTIE) AS ID_SECTIE, + B.ID_SET, + C.EXPLICATIE, + C.SCD, + C.ASCD, + C.SCC, + C.ASCC, + C.CU_TVA, + C.IN_VALUTA + INTO V_ID_VENCHELT, + V_ID_SECTIE, + V_ID_SET, + V_EXPLICATIE, + V_SCD, + V_ASCD, + V_SCC, + V_ASCC, + V_CU_TVA, + V_IN_VALUTA + FROM CONTRACTE A + LEFT JOIN CRM_NOTE_VANZARI B + ON A.ID_NOTA = B.ID_NOTA + LEFT JOIN NOTE_CONTABILE C + ON B.ID_SET = C.ID_SET + WHERE A.STERS = 0 + AND A.ID_CTR = detalii_rata.id_ctr + AND B.STERS = 0; + EXCEPTION + WHEN NO_DATA_FOUND THEN + RAISE_APPLICATION_ERROR(-20000, + 'Nu sunt configurate notele de vanzare pentru acest contract!'); + END; + + IF pack_facturare.ndiscount_evidentiat = 1 AND + detalii_rata.discount_unitar > 0 THEN + V_INCASAT_CALCUL := V_INCASAT_CALCUL - + pack_facturare.scrie_discount(detalii_rata.cantitate, + detalii_rata.discount_unitar, + detalii_rata.id_valuta, + V_IN_VALUTA, + V_ASCD, + V_ID_SECTIE, + detalii_rata.id_ctr, + detalii_rata.curs / + detalii_rata.multiplicator, + detalii_rata.proc_tvav, + detalii_rata.pret_cu_tva, + V_CU_TVA, + detalii_rata.id_jtva_coloana, + detalii_rata.taxcode); + END IF; + + -- scriere nota in act + V_INCASAT_CALCUL := V_INCASAT_CALCUL + + pack_facturare.scrie_nota(detalii_rata.cantitate, + detalii_rata.pret, + detalii_rata.discount_unitar, + detalii_rata.pret_cu_tva, + detalii_rata.id_valuta, + V_IN_VALUTA, + detalii_rata.curs / + detalii_rata.Multiplicator, + V_ID_VENCHELT, + V_ID_SECTIE, + detalii_rata.id_ctr, + detalii_rata.explicatia, + V_SCD, + V_ASCD, + V_SCC, + V_ASCC, + 0, -- V_ID_GESTIN + 0, -- V_ID_GESTOUT + pack_facturare.nid_set, -- V_ID_SET + V_CU_TVA, + detalii_rata.proc_tvav * 100 - 100, + detalii_rata.id_jtva_coloana, + detalii_Rata.Taxcode, + null); --(tab_detalii(i).proc_tvav - 1) * 100 + + RETURN V_INCASAT_CALCUL; + END; + ------------------------------------------------------------------- + PROCEDURE descarca_gestiune(V_ID_ARTICOL IN NUMBER, + V_SERIE IN VARCHAR2, + V_PRET_ACHIZITIE IN NUMBER, + V_PRETD IN NUMBER, + V_ID_VALUTAD IN NUMBER, + V_PRETV_ALES IN NUMBER, + V_PRET_UNITAR IN NUMBER, + V_AJUSTARE IN NUMBER, + V_PROC_TVAV IN NUMBER, + V_PRET_ARE_TVA IN NUMBER, + V_CANTE IN NUMBER, + V_DISCOUNT IN NUMBER, + V_ID_GESTIUNE IN NUMBER, + V_ID_SECTIE IN NUMBER, + V_CONT IN VARCHAR2, + V_ID_VENCHELT IN NUMBER, + V_ID_VALUTA IN NUMBER, + V_CURS IN NUMBER, + V_ID_PART_REZ IN NUMBER, + V_ID_LUCRARE_REZ IN NUMBER) IS + begin + + PACK_FACTURARE.descarca_gestiune(V_ID_ARTICOL => V_ID_ARTICOL, + V_SERIE => V_SERIE, + V_PRET_ACHIZITIE => V_PRET_ACHIZITIE, + V_PRETD => V_PRETD, + V_ID_VALUTAD => V_ID_VALUTAD, + V_PRETV_ALES => V_PRETV_ALES, + V_PRET_UNITAR => V_PRET_UNITAR, + V_AJUSTARE => V_AJUSTARE, + V_PROC_TVAV => V_PROC_TVAV, + V_PRET_ARE_TVA => V_PRET_ARE_TVA, + V_CANTE => V_CANTE, + V_DISCOUNT => V_DISCOUNT, + V_ID_GESTIUNE => V_ID_GESTIUNE, + V_ID_SECTIE => V_ID_SECTIE, + V_CONT => V_CONT, + V_ID_VENCHELT => V_ID_VENCHELT, + V_ID_VALUTA => V_ID_VALUTA, + V_CURS => V_CURS, + V_ID_PART_REZ => V_ID_PART_REZ, + V_ID_LUCRARE_REZ => V_ID_LUCRARE_REZ, + V_ID_JTVA_COLOANA => NULL, + V_TAXCODE => NULL); + end; + + PROCEDURE descarca_gestiune(V_ID_ARTICOL IN NUMBER, + V_SERIE IN VARCHAR2, + V_PRET_ACHIZITIE IN NUMBER, + V_PRETD IN NUMBER, + V_ID_VALUTAD IN NUMBER, + V_PRETV_ALES IN NUMBER, + V_PRET_UNITAR IN NUMBER, + V_AJUSTARE IN NUMBER, + V_PROC_TVAV IN NUMBER, + V_PRET_ARE_TVA IN NUMBER, + V_CANTE IN NUMBER, + V_DISCOUNT IN NUMBER, + V_ID_GESTIUNE IN NUMBER, + V_ID_SECTIE IN NUMBER, + V_CONT IN VARCHAR2, + V_ID_VENCHELT IN NUMBER, + V_ID_VALUTA IN NUMBER, + V_CURS IN NUMBER, + V_ID_PART_REZ IN NUMBER, + V_ID_LUCRARE_REZ IN NUMBER, + V_ID_JTVA_COLOANA IN NUMBER, + V_TAXCODE IN NUMBER) IS + V_PRET STOC.PRET%TYPE; + V_TVA STOC.TVA%TYPE; + V_PRETV_ORIG STOC.PRETV%TYPE; + V_ACONT STOC.ACONT%TYPE; + V_ACONT_REST STOC.ACONT%TYPE; + + V_ACONT_GEST NOM_GESTIUNI.ACONT%TYPE; + + V_ADAOS RUL.ADAOS%TYPE; + V_ADAOS_ORIG RUL.ADAOS%TYPE; + V_PRETV RUL.PRETV%TYPE; + V_TVAV RUL.PRETV%TYPE; + V_PRETVTVA RUL.PRETVTVA%TYPE; + V_TVAV_ORIG RUL.PRETV%TYPE; + V_PROC_TVAV_ORIG RUL.PROC_TVAV%TYPE; + V_DISCOUNT_UNITAR RUL.DISCUNITAR%TYPE; + V_DISCOUNT_TVA RUL.DISCOUNT_TVA%TYPE; + V_DISCOUNT_CU_TVA RUL.DISCUNITAR%TYPE; + V_PROC_DISCOUNT RUL.PROC_DISC%TYPE; + V_PROCENT RUL.PROCENT%TYPE; + V_PROCENT_ORIG RUL.PROCENT%TYPE; + + V_EXPLICATIE ACT.EXPLICATIA%TYPE; + V_SUMA ACT.SUMA%TYPE; + V_INCASAT_CALCUL ACT.SUMA%TYPE; + V_CONT2 ACT.SCD%TYPE; + V_CONT3 ACT.SCD%TYPE; + V_ACONT2 ACT.ASCD%TYPE; + V_ANALITICCUST ACT.ASCD%TYPE; + + V_TIP_GESTIUNE NOM_GESTIUNI.NR_PAG%TYPE; + tab_stoc tab_stoc_type; + + V_CANTITATE STOC.CANTS%TYPE; + V_CANTITATE_RAMASA STOC.CANTS%TYPE; + V_DENUMIRE NOM_ARTICOLE.DENUMIRE%TYPE; + + V_ID_TIP_RULAJ NOM_TIP_RULAJ.ID_TIP_RULAJ%TYPE := 3; + --V_ZECIMALE_PRETV NUMBER(1) := pack_sesiune.nzecimale_pretv; + V_VALOARE_PRET ACT.SUMA%TYPE; + V_VALOARE_PRETV ACT.SUMA%TYPE; + V_VALOARE_PRETV_ORIG ACT.SUMA%TYPE; + V_VALOARE_TVA ACT.SUMA%TYPE; + V_VALOARE_TVAV ACT.SUMA%TYPE; + V_VALOARE_TVAV_ORIG ACT.SUMA%TYPE; + V_VALOARE_ADAOS ACT.SUMA%TYPE; + V_VALOARE_ADAOS_ORIG ACT.SUMA%TYPE; + V_VALOARE_DIFERENTA_PRETV ACT.SUMA%TYPE; + V_VALOARE_DIFERENTA_TVAV ACT.SUMA%TYPE; + V_VALOARE_PRETVTVA ACT.SUMA%TYPE; + V_PROC_TVA ACT.PROC_TVA%TYPE; + V_TIP_INREG RUL.AN%TYPE; + V_DATAIN RUL.DATAIN%TYPE; + -- diferenta dintre pretul de lista si pretul de vanzare din stoc + + V_DISCOUNT_EVIDENTIAT_AVIZ VANZARI.DISCOUNT_EVIDENTIAT%TYPE; + + lcAcont607 ACT.ASCD%TYPE; + lcAcont608 ACT.ASCD%TYPE; + lcAcont378 ACT.ASCD%TYPE; + lcAcont388 ACT.ASCD%TYPE; + V_ACONT3 ACT.ASCD%TYPE; + lnFacturareFaraStoc NUMBER(1) := 0; + lnDescarcare345FaraAdaos NUMBER(1) := 0; + lnInStoc number(10) := 1; + + BEGIN + lnFacturareFaraStoc := TO_NUMBER(NVL(pack_sesiune.getoptiunefirma('RF_FACTURARE_FARA_STOC'), + '0')); + + lnDescarcare345FaraAdaos := TO_NUMBER(NVL(pack_sesiune.getoptiunefirma('RF_DESCARCARE_345_FARA_ADAOS'), + '0')); + + -- NU SE DESCARCA GESTIUNEA PENTRU ARTICOLELE NEGESTIONABILE + -- ASTFEL INCAT SA SE POATA FACE OPERATII GEN AVIZ DIN CUSTODIE INCLUSIV CU ARTICOLE NEGESTIONABILE + SELECT MAX(IN_STOC) + INTO lnInStoc + FROM NOM_ARTICOLE + WHERE ID_ARTICOL = V_ID_ARTICOL; + if lnInStoc = 0 then + GOTO SFARSIT; + end if; + -- V_PRETV_ORIG si V_PRETV_ALES + V_EXPLICATIE := NULL; + + pack_facturare.calculeaza_pret(V_PRET_UNITAR, + V_CURS, + V_ID_VALUTA, + V_PROC_TVAV, + V_PRET_ARE_TVA, + 2, + V_PRETV, + V_TVAV, + V_PRETVTVA); + + pack_facturare.calculeaza_pret(V_DISCOUNT, + V_CURS, + V_ID_VALUTA, + V_PROC_TVAV, + V_PRET_ARE_TVA, + 2, + V_DISCOUNT_UNITAR, + V_DISCOUNT_TVA, + V_DISCOUNT_CU_TVA); + + IF V_PRETVTVA <> 0 THEN + V_PROC_DISCOUNT := ROUND(V_DISCOUNT_CU_TVA / V_PRETVTVA, + pack_facturare.nzecimale_procent) * 100; + ELSE + V_PROC_DISCOUNT := 0; + END IF; + + -- modificare pentru discount evidentiat + IF pack_facturare.ndiscount_evidentiat = 0 THEN + V_PRETV := V_PRETV - V_DISCOUNT_UNITAR; + V_TVAV := V_TVAV - V_DISCOUNT_TVA; + V_PRETVTVA := V_PRETVTVA - V_DISCOUNT_CU_TVA; + V_DISCOUNT_UNITAR := 0; + V_DISCOUNT_TVA := 0; + V_DISCOUNT_CU_TVA := 0; + END IF; + + -- modificare pentru facturile in valuta + IF V_AJUSTARE <> 0 THEN + V_PRETV := V_PRETV + V_AJUSTARE; + V_TVAV := V_TVAV + ROUND(V_AJUSTARE * V_PROC_TVAV, + pack_sesiune.nzecimale_pretv); + V_PRETVTVA := V_PRETV + V_TVAV; + END IF; + -- + + BEGIN + SELECT NR_PAG, NVL(ACONT, 'XXXX') + INTO V_TIP_GESTIUNE, V_ACONT_GEST + FROM NOM_GESTIUNI + WHERE ID_GESTIUNE = V_ID_GESTIUNE + AND STERS = 0; + EXCEPTION + WHEN NO_DATA_FOUND THEN + RAISE_APPLICATION_ERROR(-20000, + 'Eroare la selectarea gestiunii! (FACT-007 : ' || + V_ID_GESTIUNE || '.' || V_ID_ARTICOL || ')'); + END; + + CASE + WHEN pack_facturare.ntip IN (8, 9) THEN + -- factura de retur + SELECT 1 as tip, + a.pret, + a.pretv, + a.acont, + 0 as cants, + a.cante as cant, + 0 as cante, + a.tvav, + a.proc_tvav, + a.tva, + a.datain, + a.id_rul_aux, + a.pretd, + a.id_valuta, + a.lot, + a.adata_expirare, + a.serie, + a.id_lucrare_rez, + a.id_part_rez, + b.PRETACHCTVA + BULK COLLECT + INTO tab_stoc + FROM RUL A + LEFT JOIN NOM_ARTICOLE B + ON A.ID_ARTICOL = B.ID_ARTICOL + WHERE A.STERS = 0 + AND NVL(A.ID_SUCURSALA, -99) = + NVL(pack_facturare.nid_sucursala, -99) + AND A.ID_ARTICOL = V_ID_ARTICOL + AND A.ID_GESTIUNE = V_ID_GESTIUNE + AND NVL(A.CONT, 'XXXX') = V_CONT + AND NVL(A.SERIE, '+_') = NVL(V_SERIE, '+_') + AND A.PRETV = V_PRETV_ALES + AND A.PRET = NVL(V_PRET_ACHIZITIE, A.PRET) + AND NVL(A.PRETD, 0) = NVL(V_PRETD, NVL(A.PRETD, 0)) + AND NVL(A.ID_VALUTA, 0) = + NVL(DECODE(V_ID_VALUTAD, -99, 0, V_ID_VALUTAD), + NVL(A.ID_VALUTA, 0)) + AND A.CANTE <> 0 + AND NVL(A.ID_LUCRARE_REZ, 0) = NVL(V_ID_LUCRARE_REZ, 0) + AND NVL(A.ID_PART_REZ, 0) = NVL(V_ID_PART_REZ, 0) + AND A.ID_TIP_RULAJ = 0 + AND A.COD IN + (SELECT COD + FROM VANZARI + WHERE ID_VANZARE IN + (SELECT X AS ID_VANZARE + FROM table(cast(CHARN2COLLECTION(pack_facturare.clistaid, + ',') as num_tab)))); + WHEN pack_Facturare.ntip = 24 THEN + BEGIN + SELECT DISTINCT DISCOUNT_EVIDENTIAT + INTO V_DISCOUNT_EVIDENTIAT_AVIZ + FROM VANZARI + WHERE COD IN + (SELECT X AS COD + FROM table(cast(CHARN2COLLECTION(pack_facturare.ccod_retur, + ',') as num_tab))); + EXCEPTION + WHEN TOO_MANY_ROWS THEN + RAISE_APPLICATION_ERROR(-20000, + 'O parte dintre avize sunt cu discount evidentiat,iar altele sunt fara! (FACT-022)'); + END; + -- aviz de retur + SELECT 1 as tip, + A.pret, + A.pretv, + A.acont, + 0 as cants, + A.cante as cant, + 0 as cante, + A.tvav, + A.proc_tvav, + A.tva, + A.datain, + A.id_rul_aux, + A.pretd, + A.id_valuta, + A.lot, + A.adata_expirare, + A.serie, + A.id_lucrare_rez, + A.id_part_rez, + B.PRETACHCTVA + BULK COLLECT + INTO tab_stoc + FROM RUL A + LEFT JOIN NOM_ARTICOLE B + ON A.ID_ARTICOL = B.ID_ARTICOL + WHERE A.STERS = 0 + AND A.ID_TIP_RULAJ = 0 + AND NVL(A.ID_SUCURSALA, -99) = + NVL(pack_facturare.nid_sucursala, -99) + AND A.ID_ARTICOL = V_ID_ARTICOL + AND A.ID_GESTIUNE = V_ID_GESTIUNE + AND NVL(A.CONT, 'XXXX') = V_CONT + AND NVL(A.SERIE, '+_') = NVL(V_SERIE, '+_') + AND A.PRETV = DECODE(V_DISCOUNT_EVIDENTIAT_AVIZ, + 1, + V_PRETV, + V_PRETV - V_DISCOUNT_UNITAR) + AND A.PRET = NVL(V_PRET_ACHIZITIE, A.PRET) + AND NVL(A.PRETD, 0) = NVL(V_PRETD, NVL(A.PRETD, 0)) + AND NVL(A.ID_VALUTA, 0) = + NVL(DECODE(V_ID_VALUTAD, -99, 0, V_ID_VALUTAD), + NVL(A.ID_VALUTA, 0)) + AND A.CANTE <> 0 + AND NVL(A.ID_LUCRARE_REZ, 0) = NVL(V_ID_LUCRARE_REZ, 0) + AND NVL(A.ID_PART_REZ, 0) = NVL(V_ID_PART_REZ, 0) + AND A.COD IN + (SELECT X AS COD + FROM table(cast(CHARN2COLLECTION(pack_facturare.ccod_retur, + ',') as num_tab))); + + WHEN pack_Facturare.ntip = pack_facturare.nTipFacturaHotel THEN + -- 09.02.2010 + -- la vanzarea din stoc din ROARETAIL - aflu preturile de achizitie/vanzare, seria, gestiunea si trebuie sa intru pe ramura default + -- DESCARCAREA DE GESTIUNE OFFLINE TREBUIE RESCRISA SA FOLOSEASCA PROCEDURA PACK_RETAIL_STOC.SALVEAZABON + -- pack_Facturare.ntip = pack_gestiuni_retail.nTipVanzareRetail + -- BONURI FISCALE DIN ROARETAIL (NU AM PRETUL DE ACHIZITIE, CONTUL) PACK_GESTIUNI_RETAIL.DESCARCARE_RETAIL + -- 09.02.2010 ^ + SELECT 1 as tip, + a.pret, + a.pretv, + a.acont, + a.cants, + a.cant, + a.cante, + a.tvav, + a.proc_tvav, + a.tva, + a.datain, + a.id_rul_aux, + a.pretd, + a.id_valuta, + a.lot, + a.adata_expirare, + a.serie, + a.id_lucrare_rez, + a.id_part_rez, + b.PRETACHCTVA + BULK COLLECT + INTO tab_stoc + FROM STOC A + LEFT JOIN NOM_ARTICOLE B + ON A.ID_ARTICOL = B.ID_ARTICOL + WHERE NVL(A.ID_SUCURSALA, -99) = + NVL(pack_facturare.nid_sucursala, -99) + AND A.ID_ARTICOL = V_ID_ARTICOL + AND A.ID_GESTIUNE = V_ID_GESTIUNE + AND A.LUNA = pack_facturare.nluna + AND A.AN = pack_facturare.nan + AND A.CANTS + A.CANT > a.cante + ORDER BY A.PRET; + + WHEN pack_Facturare.ntip in + (pack_facturare.nTipFacturaRestaurant, + pack_facturare.nTipNotaPlata) THEN + V_ACONT_REST := NULL; + + SELECT * + BULK COLLECT + INTO tab_stoc + FROM (SELECT 1 as tip, + a.pret, + a.pretv, + a.acont, + a.cants, + a.cant + nvl(b.cant, 0) as cant, + a.cante + nvl(b.cante, 0) as cante, + a.tvav, + a.proc_tvav, + a.tva, + a.datain, + a.id_rul_aux, + a.pretd, + a.id_valuta, + a.lot, + a.adata_expirare, + a.serie, + a.id_lucrare_rez, + a.id_part_rez, + c.pretachctva + FROM STOC A + LEFT JOIN (select sum(cant) as cant, + sum(cante) as cante, + id_articol, + id_gestiune, + cont, + acont, + serie, + pret, + pretv, + id_lucrare_rez, + id_part_rez, + proc_tvav, + id_rul_aux, + pretd, + id_valuta, + lot, + adata_expirare + from rul_temp + where an = 1 + group by id_articol, + id_gestiune, + cont, + acont, + serie, + pret, + pretv, + id_lucrare_rez, + id_part_rez, + proc_tvav, + id_rul_aux, + pretd, + id_valuta, + lot, + adata_expirare) B + ON A.ID_ARTICOL = B.ID_ARTICOL + AND A.ID_GESTIUNE = B.ID_GESTIUNE + AND NVL(A.CONT, 'XXXX') = NVL(B.CONT, 'XXXX') + AND NVL(A.ACONT, 'XXXX') = NVL(B.ACONT, 'XXXX') + AND A.PRET = B.PRET + AND A.PRETV = B.PRETV + AND NVL(A.SERIE, '+_') = NVL(B.SERIE, '+_') + AND NVL(A.ID_PART_REZ, 0) = NVL(B.ID_PART_REZ, 0) + AND NVL(A.ID_LUCRARE_REZ, 0) = NVL(B.ID_LUCRARE_REZ, 0) + AND A.PROC_TVAV = B.PROC_TVAV + AND NVL(A.ID_RUL_AUX, 0) = NVL(B.ID_RUL_AUX, 0) + AND A.PRETD = B.PRETD + AND NVL(A.ID_VALUTA, 0) = NVL(B.ID_VALUTA, 0) + AND NVL(A.LOT, '_') = NVL(B.LOT, '_') + AND NVL(A.ADATA_EXPIRARE, to_date('01011500', 'DDMMYYYY')) = + NVL(B.ADATA_EXPIRARE, to_date('01011500', 'DDMMYYYY')) + LEFT JOIN NOM_ARTICOLE C + ON A.ID_ARTICOL = C.ID_ARTICOL + WHERE NVL(A.ID_SUCURSALA, -99) = + NVL(pack_facturare.nid_sucursala, -99) + AND A.ID_ARTICOL = V_ID_ARTICOL + AND A.ID_GESTIUNE = V_ID_GESTIUNE + AND A.LUNA = pack_facturare.nluna + AND A.AN = pack_facturare.nan + AND A.CANTS + A.CANT + nvl(b.cant, 0) > + a.cante + nvl(b.cante, 0) + UNION ALL + SELECT 2 AS TIP, + NVL(V_PRET_ACHIZITIE, 0) as pret, + NVL(V_PRETV_ALES, 0) as pretv, + V_ACONT_REST as acont, + V_CANTE as cants, + 0 as cant, + 0 as cante, + pack_sesiune.calculeaza_pret_tva(V_PRETV_ALES, + 1, + pack_Facturare.nid_moneda_nationala, + V_PROC_TVAV, + 0, + 2) as tvav, + V_PROC_TVAV as proc_tvav, + pack_sesiune.calculeaza_pret_tva(V_PRET_ACHIZITIE, + 1, + pack_facturare.nid_moneda_nationala, + V_PROC_TVAV, + 0, + 1) as tva, + NULL as datain, + NULL as id_rul_aux, + V_PRETD as pretd, + V_ID_VALUTAD as id_valuta, + NULL as lot, + NULL as adata_expirare, + V_SERIE as serie, + V_ID_LUCRARE_REZ as id_lucrare_rez, + V_ID_PART_REZ as id_part_rez, + pretachctva + FROM NOM_ARTICOLE + WHERE ID_ARTICOL = V_ID_ARTICOL) + ORDER BY TIP, PRET; + + WHEN V_CANTE < 0 and pack_facturare.clistaid is not null and + instr(pack_facturare.clistaid, ':') > 0 THEN + -- tip = 1 facturare cu articole retur din rulaj, nu din stoc + -- am facut ramura separata pt ca la conpress group bon fiscal de la chiosc + -- statea foarte mult sa parcurga rulajul, + -- desi nu aveam nici V_CANTE < 0 nici pack_facturare.clista_id + -- este la fel ca ramura else, dar cu tip = 1 in plus + -- tip = 2 facturare articole din stoc (cantitate pozitiva sau negativa) + -- tip = 3 facturare articole fara stoc, din nomenclatorul de articole, RF_FACTURARE_FARA_STOC = 1 + SELECT * + BULK COLLECT + INTO tab_stoc + FROM (SELECT 1 as tip, -- ARTICOLE RETUR, DIN RUL + a.pret, + a.pretv, + a.acont, + 0 as cants, + a.cante as cant, + 0 as cante, + a.tvav, + a.proc_tvav, + a.tva, + a.datain, + a.id_rul_aux, + a.pretd, + a.id_valuta, + a.lot, + a.adata_expirare, + a.serie, + a.id_lucrare_rez, + a.id_part_rez, + b.PRETACHCTVA + FROM RUL A + LEFT JOIN NOM_ARTICOLE B + ON A.ID_ARTICOL = B.ID_ARTICOL + WHERE V_CANTE < 0 + AND A.STERS = 0 + AND NVL(A.ID_SUCURSALA, -99) = + NVL(pack_facturare.nid_sucursala, -99) + AND A.ID_ARTICOL = V_ID_ARTICOL + AND A.ID_GESTIUNE = V_ID_GESTIUNE + AND NVL(A.CONT, 'XXXX') = V_CONT + AND NVL(A.SERIE, '+_') = NVL(V_SERIE, '+_') + AND A.PRETV = V_PRETV_ALES + AND A.PRET = NVL(V_PRET_ACHIZITIE, A.PRET) + AND NVL(A.PRETD, 0) = NVL(V_PRETD, NVL(A.PRETD, 0)) + AND NVL(A.ID_VALUTA, 0) = + NVL(DECODE(V_ID_VALUTAD, -99, 0, V_ID_VALUTAD), + NVL(A.ID_VALUTA, 0)) + AND A.CANTE <> 0 + AND NVL(A.ID_LUCRARE_REZ, 0) = NVL(V_ID_LUCRARE_REZ, 0) + AND NVL(A.ID_PART_REZ, 0) = NVL(V_ID_PART_REZ, 0) + AND A.ID_TIP_RULAJ = 0 + AND A.COD IN + (SELECT COD + FROM VANZARI + WHERE ID_VANZARE IN + (select id_vanzare + from (select cast(getwordnum(id_articol_id_vanzare, + 1, + ':') as + number(20, 0)) as id_articol, + cast(getwordnum(id_articol_id_vanzare, + 2, + ':') as + number(20, 0)) as id_vanzare + from (select x as id_articol_id_vanzare + FROM table(cast(CHARC2COLLECTION(pack_facturare.clistaid, + ',') as + char_tab)))) + where id_articol = V_ID_ARTICOL)) -- ID_ARTICOL:ID_VANZARE,ID_ARTICOL:ID_VANZARE + UNION ALL + SELECT 2 as tip, -- FARA ARTICOLE RETUR, DIN STOC. ulterior am inclus si articolele vandute normal (nu din rulaj) dar cu cantitate negativa, care exista in stoc + a.pret, + a.pretv, + a.acont, + a.cants, + a.cant + nvl(b.cant, 0) as cant, + a.cante + nvl(b.cante, 0) as cante, + a.tvav, + a.proc_tvav, + a.tva, + a.datain, + a.id_rul_aux, + a.pretd, + a.id_valuta, + a.lot, + a.adata_expirare, + a.serie, + a.id_lucrare_rez, + a.id_part_rez, + c.pretachctva + FROM STOC A + LEFT JOIN (select sum(cant) as cant, + sum(cante) as cante, + id_articol, + id_gestiune, + cont, + acont, + serie, + pret, + pretv, + id_lucrare_rez, + id_part_rez, + proc_tvav, + id_rul_aux, + pretd, + id_valuta, + lot, + adata_expirare + from rul_temp + where an = 1 + group by id_articol, + id_gestiune, + cont, + acont, + serie, + pret, + pretv, + id_lucrare_rez, + id_part_rez, + proc_tvav, + id_rul_aux, + pretd, + id_valuta, + lot, + adata_expirare) B + ON A.ID_ARTICOL = B.ID_ARTICOL + AND A.ID_GESTIUNE = B.ID_GESTIUNE + AND NVL(A.CONT, 'XXXX') = NVL(B.CONT, 'XXXX') + AND NVL(A.ACONT, 'XXXX') = NVL(B.ACONT, 'XXXX') + AND A.PRET = B.PRET + AND A.PRETV = B.PRETV + AND NVL(A.SERIE, '+_') = NVL(B.SERIE, '+_') + AND NVL(A.ID_PART_REZ, 0) = NVL(B.ID_PART_REZ, 0) + AND NVL(A.ID_LUCRARE_REZ, 0) = NVL(B.ID_LUCRARE_REZ, 0) + AND A.PROC_TVAV = B.PROC_TVAV + AND NVL(A.ID_RUL_AUX, 0) = NVL(B.ID_RUL_AUX, 0) + AND A.PRETD = B.PRETD + AND NVL(A.ID_VALUTA, 0) = NVL(B.ID_VALUTA, 0) + AND NVL(A.LOT, '_') = NVL(B.LOT, '_') + AND NVL(A.ADATA_EXPIRARE, to_date('01011500', 'DDMMYYYY')) = + NVL(B.ADATA_EXPIRARE, to_date('01011500', 'DDMMYYYY')) + LEFT JOIN NOM_ARTICOLE C + ON A.ID_ARTICOL = C.ID_ARTICOL + WHERE V_CANTE <> 0 + AND NVL(A.ID_SUCURSALA, -99) = + NVL(pack_facturare.nid_sucursala, -99) + AND A.ID_ARTICOL = V_ID_ARTICOL + AND A.ID_GESTIUNE = V_ID_GESTIUNE + AND NVL(A.CONT, 'XXXX') = V_CONT + AND A.PRET = V_PRET_ACHIZITIE + AND A.PRETD = V_PRETD + AND NVL(A.ID_VALUTA, 0) = + DECODE(V_ID_VALUTAD, -99, 0, NVL(V_ID_VALUTAD, 0)) + AND A.PRETV = V_PRETV_ALES -- modificare v 2.0.19 + AND NVL(A.SERIE, '+_') = NVL(V_SERIE, '+_') + AND A.LUNA = pack_facturare.nluna + AND A.AN = pack_facturare.nan + AND A.CANTS + A.CANT + nvl(b.cant, 0) > + a.cante + nvl(b.cante, 0) + AND NVL(A.ID_PART_REZ, 0) = NVL(V_ID_PART_REZ, 0) + AND NVL(A.ID_LUCRARE_REZ, 0) = NVL(V_ID_LUCRARE_REZ, 0) + UNION ALL + SELECT 3 AS TIP, -- ARTICOLE FARA STOC, DIN NOMENCLATORUL DE ARTICOLE, RF_FACTURARE_FARA_STOC = 1 + NVL(V_PRET_ACHIZITIE, 0) as pret, + NVL(V_PRETV_ALES, 0) as pretv, + pack_facturare.getanaliticbyarticol(V_CONT, + V_ID_GESTIUNE, + V_ID_ARTICOL) as acont, + V_CANTE as cants, + 0 as cant, + 0 as cante, + pack_sesiune.calculeaza_pret_tva(V_PRETV_ALES, + 1, + pack_Facturare.nid_moneda_nationala, + V_PROC_TVAV, + 0, + 2) as tvav, + V_PROC_TVAV as proc_tvav, + pack_sesiune.calculeaza_pret_tva(V_PRET_ACHIZITIE, + 1, + pack_facturare.nid_moneda_nationala, + V_PROC_TVAV, + 0, + 1) as tva, + NULL as datain, + NULL as id_rul_aux, + V_PRETD as pretd, + V_ID_VALUTAD as id_valuta, + NULL as lot, + NULL as adata_expirare, + V_SERIE as serie, + V_ID_LUCRARE_REZ as id_lucrare_rez, + V_ID_PART_REZ as id_part_rez, + pretachctva + FROM NOM_ARTICOLE + WHERE lnFacturareFaraStoc = 1 + and ID_ARTICOL = V_ID_ARTICOL) + ORDER BY TIP, PRET; + + ELSE + SELECT * + BULK COLLECT + INTO tab_stoc + FROM (SELECT 2 as tip, -- FARA ARTICOLE RETUR, DIN STOC. ulterior am inclus si articolele vandute normal (nu din rulaj) dar cu cantitate negativa, care exista in stoc + a.pret, + a.pretv, + a.acont, + a.cants, + a.cant + nvl(b.cant, 0) as cant, + a.cante + nvl(b.cante, 0) as cante, + a.tvav, + a.proc_tvav, + a.tva, + a.datain, + a.id_rul_aux, + a.pretd, + a.id_valuta, + a.lot, + a.adata_expirare, + a.serie, + a.id_lucrare_rez, + a.id_part_rez, + c.pretachctva + FROM STOC A + LEFT JOIN (select sum(cant) as cant, + sum(cante) as cante, + id_articol, + id_gestiune, + cont, + acont, + serie, + pret, + pretv, + id_lucrare_rez, + id_part_rez, + proc_tvav, + id_rul_aux, + pretd, + id_valuta, + lot, + adata_expirare + from rul_temp + where an = 1 + group by id_articol, + id_gestiune, + cont, + acont, + serie, + pret, + pretv, + id_lucrare_rez, + id_part_rez, + proc_tvav, + id_rul_aux, + pretd, + id_valuta, + lot, + adata_expirare) B + ON A.ID_ARTICOL = B.ID_ARTICOL + AND A.ID_GESTIUNE = B.ID_GESTIUNE + AND NVL(A.CONT, 'XXXX') = NVL(B.CONT, 'XXXX') + AND NVL(A.ACONT, 'XXXX') = NVL(B.ACONT, 'XXXX') + AND A.PRET = B.PRET + AND A.PRETV = B.PRETV + AND NVL(A.SERIE, '+_') = NVL(B.SERIE, '+_') + AND NVL(A.ID_PART_REZ, 0) = NVL(B.ID_PART_REZ, 0) + AND NVL(A.ID_LUCRARE_REZ, 0) = NVL(B.ID_LUCRARE_REZ, 0) + AND A.PROC_TVAV = B.PROC_TVAV + AND NVL(A.ID_RUL_AUX, 0) = NVL(B.ID_RUL_AUX, 0) + AND A.PRETD = B.PRETD + AND NVL(A.ID_VALUTA, 0) = NVL(B.ID_VALUTA, 0) + AND NVL(A.LOT, '_') = NVL(B.LOT, '_') + AND NVL(A.ADATA_EXPIRARE, to_date('01011500', 'DDMMYYYY')) = + NVL(B.ADATA_EXPIRARE, to_date('01011500', 'DDMMYYYY')) + LEFT JOIN NOM_ARTICOLE C + ON A.ID_ARTICOL = C.ID_ARTICOL + WHERE V_CANTE <> 0 + AND NVL(A.ID_SUCURSALA, -99) = + NVL(pack_facturare.nid_sucursala, -99) + AND A.ID_ARTICOL = V_ID_ARTICOL + AND A.ID_GESTIUNE = V_ID_GESTIUNE + AND NVL(A.CONT, 'XXXX') = V_CONT + AND A.PRET = V_PRET_ACHIZITIE + AND A.PRETD = V_PRETD + AND NVL(A.ID_VALUTA, 0) = + DECODE(V_ID_VALUTAD, -99, 0, NVL(V_ID_VALUTAD, 0)) + AND A.PRETV = V_PRETV_ALES -- modificare v 2.0.19 + AND NVL(A.SERIE, '+_') = NVL(V_SERIE, '+_') + AND A.LUNA = pack_facturare.nluna + AND A.AN = pack_facturare.nan + AND A.CANTS + A.CANT + nvl(b.cant, 0) > + a.cante + nvl(b.cante, 0) + AND NVL(A.ID_PART_REZ, 0) = NVL(V_ID_PART_REZ, 0) + AND NVL(A.ID_LUCRARE_REZ, 0) = NVL(V_ID_LUCRARE_REZ, 0) + UNION ALL + SELECT 3 AS TIP, -- ARTICOLE FARA STOC, DIN NOMENCLATORUL DE ARTICOLE, RF_FACTURARE_FARA_STOC = 1 + NVL(V_PRET_ACHIZITIE, 0) as pret, + NVL(V_PRETV_ALES, 0) as pretv, + pack_facturare.getanaliticbyarticol(V_CONT, + V_ID_GESTIUNE, + V_ID_ARTICOL) as acont, + V_CANTE as cants, + 0 as cant, + 0 as cante, + pack_sesiune.calculeaza_pret_tva(V_PRETV_ALES, + 1, + pack_Facturare.nid_moneda_nationala, + V_PROC_TVAV, + 0, + 2) as tvav, + V_PROC_TVAV as proc_tvav, + pack_sesiune.calculeaza_pret_tva(V_PRET_ACHIZITIE, + 1, + pack_facturare.nid_moneda_nationala, + V_PROC_TVAV, + 0, + 1) as tva, + NULL as datain, + NULL as id_rul_aux, + V_PRETD as pretd, + V_ID_VALUTAD as id_valuta, + NULL as lot, + NULL as adata_expirare, + V_SERIE as serie, + V_ID_LUCRARE_REZ as id_lucrare_rez, + V_ID_PART_REZ as id_part_rez, + pretachctva + FROM NOM_ARTICOLE + WHERE lnFacturareFaraStoc = 1 + and ID_ARTICOL = V_ID_ARTICOL) + ORDER BY TIP, PRET; + -- AND NVL(A.ID_RUL_AUX, 0) = 0 + END CASE; + + IF SQL%ROWCOUNT = 0 THEN + BEGIN + SELECT DENUMIRE + INTO V_DENUMIRE + FROM NOM_ARTICOLE + WHERE ID_ARTICOL = V_ID_ARTICOL; + + RAISE_APPLICATION_ERROR(-20000, + 'Articolul ' || V_DENUMIRE || + ' nu mai e in stoc! (FACT-008)'); + EXCEPTION + WHEN NO_DATA_FOUND THEN + RAISE_APPLICATION_ERROR(-20000, + 'Unul dintre articole nu mai exista in stoc! (FACT-009)'); + END; + END IF; + + V_CANTITATE_RAMASA := V_CANTE; + + FOR i IN tab_stoc.first .. tab_stoc.last LOOP + + EXIT WHEN V_CANTITATE_RAMASA = 0; + + V_TIP_INREG := 1; + V_PRET := tab_stoc(i).PRET; + V_TVA := tab_stoc(i).TVA; + V_PRETV_ORIG := tab_stoc(i).PRETV; + V_ACONT := tab_stoc(i).ACONT; + V_DATAIN := tab_stoc(i).DATAIN; + + -- 29.03.2010 + lcAcont607 := GetAnaliticByArticol('607', V_ID_GESTIUNE, V_ID_ARTICOL); + lcAcont607 := CASE + WHEN lcAcont607 IS NULL THEN + REPLACE(V_ACONT, 'X') + ELSE + lcAcont607 + END; + + lcAcont608 := GetAnaliticByArticol('608', V_ID_GESTIUNE, V_ID_ARTICOL); + lcAcont608 := CASE + WHEN lcAcont608 IS NULL THEN + REPLACE(V_ACONT, 'X') + ELSE + lcAcont608 + END; + + lcAcont378 := GetAnaliticByArticol('378', V_ID_GESTIUNE, V_ID_ARTICOL); + lcAcont378 := CASE + WHEN lcAcont378 IS NULL THEN + REPLACE(V_ACONT, 'X') + ELSE + lcAcont378 + END; + + lcAcont388 := GetAnaliticByArticol('388', V_ID_GESTIUNE, V_ID_ARTICOL); + lcAcont388 := CASE + WHEN lcAcont388 IS NULL THEN + REPLACE(V_ACONT, 'X') + ELSE + lcAcont388 + END; + -- 29.03.2010 + + V_CANTITATE := tab_stoc(i).CANTS + tab_stoc(i).CANT - tab_stoc(i).CANTE; + + IF V_CANTITATE_RAMASA >= V_CANTITATE THEN + V_CANTITATE_RAMASA := V_CANTITATE_RAMASA - V_CANTITATE; + ELSE + V_CANTITATE := V_CANTITATE_RAMASA; + V_CANTITATE_RAMASA := 0; + END IF; + + V_ADAOS := V_PRETV - V_PRET; + V_ADAOS_ORIG := V_PRETV_ORIG - V_PRET; + + IF V_PRET <> 0 THEN + V_PROCENT := ROUND(V_ADAOS * 100 / V_PRET, + pack_facturare.nzecimale_procent); + V_PROCENT_ORIG := ROUND(V_ADAOS_ORIG * 100 / V_PRET, + pack_facturare.nzecimale_procent); + ELSE + V_PROCENT := 0; + V_PROCENT_ORIG := 0; + END IF; + + V_TVAV_ORIG := tab_stoc(i).TVAV; + + -- gestiune marfa la pret de vanzare sau marfa pret de achizitie* (defalcata in stoc si dupa pretul de vanzare) + IF V_TIP_GESTIUNE in (6, 7) OR tab_stoc(i).TVAV <> 0 THEN + V_PROC_TVAV_ORIG := tab_stoc(i).PROC_TVAV; + ELSE + V_PROC_TVAV_ORIG := pack_sesiune.TVA2PROCTVA(V_TVAV_ORIG, + V_PRETV_ORIG, + pack_facturare.nan, + pack_facturare.nluna); + END IF; + + V_SUMA := 0; + V_INCASAT_CALCUL := 0; + + /* V_VALOARE_TVAV_ORIG := pack_facturare.calculeaza_total_tva(V_PRET => CASE V_PRET_ARE_TVA WHEN 0 THEN V_PRETV_ORIG ELSE V_PRETV_ORIG + V_TVAV_ORIG END, V_AJUSTARE => 0, V_CURS => 1, V_DISCOUNT_UNITAR => 0, V_DISCOUNT_EVIDENTIAT => pack_facturare.ndiscount_evidentiat, V_CANTITATE => V_CANTITATE, V_PRET_CU_TVA => V_PRET_ARE_TVA, V_PROC_TVAV => V_PROC_TVAV, V_ZECIMALE_PRET => V_ZECIMALE_PRET);*/ + V_VALOARE_TVAV_ORIG := pack_facturare.calculeaza_total_tva(V_PRET => CASE + V_PRET_ARE_TVA + WHEN 0 THEN + V_PRETV_ORIG + ELSE + V_PRETV_ORIG + + V_TVAV_ORIG + END, + V_AJUSTARE => 0, + V_CURS => 1, + V_DISCOUNT_UNITAR => 0, + V_DISCOUNT_EVIDENTIAT => pack_facturare.ndiscount_evidentiat, + V_CANTITATE => V_CANTITATE, + V_PRET_CU_TVA => V_PRET_ARE_TVA, + V_PROC_TVAV => V_PROC_TVAV_ORIG, + V_ZECIMALE_PRET => pack_sesiune.nzecimale_pretv, + V_ZECIMALE_SUMA => pack_sesiune.nzecimale_sumav); + V_VALOARE_TVAV := pack_facturare.calculeaza_total_tva(V_PRET => CASE + V_PRET_ARE_TVA + WHEN 0 THEN + V_PRETV + ELSE + V_PRETV + + V_TVAV + END, + V_AJUSTARE => 0, + V_CURS => 1, + V_DISCOUNT_UNITAR => CASE + V_PRET_ARE_TVA + WHEN 0 THEN + V_DISCOUNT_UNITAR + ELSE + V_DISCOUNT_CU_TVA + END, + V_DISCOUNT_EVIDENTIAT => pack_facturare.ndiscount_evidentiat, + V_CANTITATE => V_CANTITATE, + V_PRET_CU_TVA => V_PRET_ARE_TVA, + V_PROC_TVAV => V_PROC_TVAV, + V_ZECIMALE_PRET => pack_sesiune.nzecimale_pretv, + V_ZECIMALE_SUMA => pack_sesiune.nzecimale_sumav); + V_VALOARE_DIFERENTA_TVAV := V_VALOARE_TVAV - V_VALOARE_TVAV_ORIG; + + /* V_VALOARE_PRETV_ORIG := pack_facturare.calculeaza_total_fara_tva(V_PRET => CASE V_PRET_ARE_TVA WHEN 0 THEN V_PRETV_ORIG ELSE V_PRETV_ORIG + V_TVAV_ORIG END, V_AJUSTARE => 0, V_CURS => 1, V_DISCOUNT_UNITAR => 0, V_DISCOUNT_EVIDENTIAT => pack_facturare.ndiscount_evidentiat, V_CANTITATE => V_CANTITATE, V_PRET_CU_TVA => V_PRET_ARE_TVA, V_PROC_TVAV => V_PROC_TVAV, V_ZECIMALE_PRET => V_ZECIMALE_PRET);*/ + V_VALOARE_PRETV_ORIG := pack_facturare.calculeaza_total_fara_tva(V_PRET => CASE + V_PRET_ARE_TVA + WHEN 0 THEN + V_PRETV_ORIG + ELSE + V_PRETV_ORIG + + V_TVAV_ORIG + END, + V_AJUSTARE => 0, + V_CURS => 1, + V_DISCOUNT_UNITAR => 0, + V_DISCOUNT_EVIDENTIAT => pack_facturare.ndiscount_evidentiat, + V_CANTITATE => V_CANTITATE, + V_PRET_CU_TVA => V_PRET_ARE_TVA, + V_PROC_TVAV => V_PROC_TVAV_ORIG, + V_ZECIMALE_PRET => pack_sesiune.nzecimale_pretv, + V_ZECIMALE_SUMA => pack_sesiune.nzecimale_sumav); + V_VALOARE_PRETV := pack_facturare.calculeaza_total_fara_tva(V_PRET => CASE + V_PRET_ARE_TVA + WHEN 0 THEN + V_PRETV + ELSE + V_PRETV + + V_TVAV + END, + V_AJUSTARE => 0, + V_CURS => 1, + V_DISCOUNT_UNITAR => CASE + V_PRET_ARE_TVA + WHEN 0 THEN + V_DISCOUNT_UNITAR + ELSE + V_DISCOUNT_CU_TVA + END, + V_DISCOUNT_EVIDENTIAT => pack_facturare.ndiscount_evidentiat, + V_CANTITATE => V_CANTITATE, + V_PRET_CU_TVA => V_PRET_ARE_TVA, + V_PROC_TVAV => V_PROC_TVAV, + V_ZECIMALE_PRET => pack_sesiune.nzecimale_pretv, + V_ZECIMALE_SUMA => pack_sesiune.nzecimale_sumav); + V_VALOARE_DIFERENTA_PRETV := V_VALOARE_PRETV - V_VALOARE_PRETV_ORIG; + + V_PROC_TVA := pack_sesiune.TVA2PROCTVA(V_TVA, + V_PRET, + pack_facturare.nan, + pack_facturare.nluna); + + V_VALOARE_PRET := pack_facturare.calculeaza_total_fara_tva(V_PRET => (CASE + WHEN tab_stoc(i).pretachctva = 1 THEN + V_PRET + V_TVA + ELSE + V_PRET + END), + V_AJUSTARE => 0, + V_CURS => 1, + V_DISCOUNT_UNITAR => 0, + V_DISCOUNT_EVIDENTIAT => 0, + V_CANTITATE => V_CANTITATE, + V_PRET_CU_TVA => tab_stoc(i).pretachctva, + V_PROC_TVAV => V_PROC_TVA, + V_ZECIMALE_PRET => pack_sesiune.nzecimale_preta, + V_ZECIMALE_SUMA => pack_sesiune.nzecimale_sumaa); + V_VALOARE_TVA := pack_facturare.calculeaza_total_fara_tva(V_PRET => (CASE + WHEN tab_stoc(i).pretachctva = 1 THEN + V_PRET + V_TVA + ELSE + V_TVA + END), + V_AJUSTARE => 0, + V_CURS => 1, + V_DISCOUNT_UNITAR => 0, + V_DISCOUNT_EVIDENTIAT => 0, + V_CANTITATE => V_CANTITATE, + V_PRET_CU_TVA => tab_stoc(i).pretachctva, + V_PROC_TVAV => V_PROC_TVA, + V_ZECIMALE_PRET => pack_sesiune.nzecimale_preta, + V_ZECIMALE_SUMA => pack_sesiune.nzecimale_sumaa); + V_VALOARE_ADAOS := V_VALOARE_PRETV - V_VALOARE_PRET; + V_VALOARE_ADAOS_ORIG := V_VALOARE_PRETV_ORIG - V_VALOARE_PRET; + V_VALOARE_PRETVTVA := pack_facturare.calculeaza_total_cu_tva(V_PRET => CASE + V_PRET_ARE_TVA + WHEN 0 THEN + V_PRETV + ELSE + V_PRETV + + V_TVAV + END, + V_AJUSTARE => 0, + V_CURS => 1, + V_DISCOUNT_UNITAR => 0, + V_DISCOUNT_EVIDENTIAT => 0, + V_CANTITATE => V_CANTITATE, + V_PRET_CU_TVA => V_PRET_ARE_TVA, + V_PROC_TVAV => V_PROC_TVAV, + V_ZECIMALE_PRET => pack_sesiune.nzecimale_pretv, + V_ZECIMALE_SUMA => pack_sesiune.nzecimale_sumav); + CASE + WHEN V_CONT = '371' AND pack_facturare.ntip = 47 THEN + V_ANALITICCUST := pack_facturare.getAnaliticK(V_PROC_TVAV); + + -- 357-371.C + V_INCASAT_CALCUL := pack_facturare.scrie_nota(1, + (CASE + WHEN V_TIP_GESTIUNE = 6 THEN + V_VALOARE_PRETVTVA + ELSE + V_VALOARE_PRET + END), + 0, -- DISCOUNT_UNITAR + 0, -- PRET CU TVA + pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA + 0, -- V_IN_VALUTA + 0, -- V_CURS, + 0, -- ID_VENCHELT + NVL(V_ID_SECTIE, 0), + NULL, -- V_ID_CTR + V_EXPLICATIE, + '357', + NULL, + '371', + V_ANALITICCUST, + 0, + 0, + 1, + 0, + 0, + NULL); + + -- 371.C-371 + V_INCASAT_CALCUL := pack_facturare.scrie_nota(1, + V_VALOARE_PRET, + 0, -- DISCOUNT_UNITAR + 0, -- PRET CU TVA + pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA + 0, -- V_IN_VALUTA + 0, -- V_CURS, + 0, -- ID_VENCHELT + NVL(V_ID_SECTIE, 0), + NULL, -- V_ID_CTR + V_EXPLICATIE, + '371', + V_ANALITICCUST, + '371', + REPLACE(V_ACONT, 'X'), + 0, + V_ID_GESTIUNE, + 1, + 0, + 0, + NULL); + + IF V_TIP_GESTIUNE = 6 THEN + --371.C-378.C + V_INCASAT_CALCUL := pack_facturare.scrie_nota(1, + V_VALOARE_ADAOS, + 0, -- DISCOUNT_UNITAR + 0, -- PRET CU TVA + pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA + 0, -- V_IN_VALUTA + 0, -- V_CURS, + 0, -- ID_VENCHELT + NVL(V_ID_SECTIE, 0), + NULL, -- V_ID_CTR, + V_EXPLICATIE, + '371', + V_ANALITICCUST, + '378', + V_ANALITICCUST, + 0, -- id_gestin + 0, + 2, + 0, + (V_PROC_TVAV - 1) * 100, + NULL); + + --371.C-4428.C + V_INCASAT_CALCUL := pack_facturare.scrie_nota(1, + V_VALOARE_TVAV, + 0, -- DISCOUNT_UNITAR + 0, -- PRET CU TVA + pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA + 0, -- V_IN_VALUTA + 0, -- V_CURS, + 0, -- ID_VENCHELT + NVL(V_ID_SECTIE, 0), + NULL, -- V_ID_CTR, + V_EXPLICATIE, + '371', + V_ANALITICCUST, + '4428', + V_ANALITICCUST, + 0, -- id_gestin + 0, + 2, + 0, + (V_PROC_TVAV - 1) * 100, + NULL); + + --378-371 + V_INCASAT_CALCUL := pack_facturare.scrie_nota(1, + V_VALOARE_ADAOS, + 0, -- DISCOUNT_UNITAR + 0, -- PRET CU TVA + pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA + 0, -- V_IN_VALUTA + 0, -- V_CURS, + 0, -- ID_VENCHELT + NVL(V_ID_SECTIE, 0), + NULL, -- V_ID_CTR, + V_EXPLICATIE, + '378', + REPLACE(V_ACONT, + 'X'), + '371', + REPLACE(V_ACONT, + 'X'), + V_ID_GESTIUNE, -- id_gestin + V_ID_GESTIUNE, + 2, + 0, + (V_PROC_TVAV - 1) * 100, + NULL); + + --4428-371 + V_INCASAT_CALCUL := pack_facturare.scrie_nota(1, + V_VALOARE_TVAV, + 0, -- DISCOUNT_UNITAR + 0, -- PRET CU TVA + pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA + 0, -- V_IN_VALUTA + 0, -- V_CURS, + 0, -- ID_VENCHELT + NVL(V_ID_SECTIE, 0), + NULL, -- V_ID_CTR, + V_EXPLICATIE, + '4428', + NULL, + '371', + REPLACE(V_ACONT, + 'X'), + V_ID_GESTIUNE, -- id_gestin + V_ID_GESTIUNE, + 2, + 0, + (V_PROC_TVAV - 1) * 100, + NULL); + END IF; + + IF V_TIP_GESTIUNE IN (6, 7) AND + (V_PRETV_ORIG <> V_PRETV OR V_TVAV_ORIG <> V_TVAV OR + V_DISCOUNT_UNITAR <> 0) THEN + + IF V_TIP_GESTIUNE = 6 THEN + --371-378 + V_INCASAT_CALCUL := pack_facturare.scrie_nota(1, + V_VALOARE_DIFERENTA_PRETV, + 0, -- DISCOUNT_UNITAR + 0, -- PRET CU TVA + pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA + 0, -- V_IN_VALUTA + 0, -- V_CURS, + 0, -- ID_VENCHELT + NVL(V_ID_SECTIE, + 0), + NULL, -- V_ID_CTR, + V_EXPLICATIE, + '371', + REPLACE(V_ACONT, + 'X'), + '378', + REPLACE(V_ACONT, + 'X'), + V_ID_GESTIUNE, -- id_gestin + V_ID_GESTIUNE, + 2, + 0, + (V_PROC_TVAV - 1) * 100, + NULL); + + --371-4428 + V_INCASAT_CALCUL := pack_facturare.scrie_nota(1, + V_VALOARE_DIFERENTA_TVAV, + 0, -- DISCOUNT_UNITAR + 0, -- PRET CU TVA + pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA + 0, -- V_IN_VALUTA + 0, -- V_CURS, + 0, -- ID_VENCHELT + NVL(V_ID_SECTIE, + 0), + NULL, -- V_ID_CTR, + V_EXPLICATIE, + '371', + REPLACE(V_ACONT, + 'X'), + '4428', + NULL, + V_ID_GESTIUNE, -- id_gestin + V_ID_GESTIUNE, + 2, + 0, + (V_PROC_TVAV - 1) * 100, + NULL); + END IF; + + IF (V_PRETV_ORIG <> V_PRETV OR V_TVAV_ORIG <> V_TVAV) THEN + INSERT INTO rul_temp + (AN, + ID_ARTICOL, + SERIE, + ID_GESTIUNE, + ID_LUCRARE, + ID_RESPONSABIL, + NRACT, + SERIE_ACT, + CANT, + CANTE, + CONT, + ACONT, + PRETV, + TVAV, + PRETVTVA, + PROC_TVAV, + PROC_TVA, + PRET, + TVA, + ADAOS, + PROCENT, + DATAACT, + NNIR, + DATAIN, + DATAOUT, + PRETD, + ID_VALUTA, + ID_SET, + ID_TIP_RULAJ, + LOT, + ADATA_EXPIRARE, + ID_RUL_AUX, + ID_LUCRARE_REZ, + ID_PART_REZ) + SELECT decode(rownum, 1, V_TIP_INREG, 0), + V_ID_ARTICOL, + tab_stoc(i).serie, + V_ID_GESTIUNE, + NVL(pack_facturare.nid_lucrare, 0), + pack_facturare.nid_responsabil, + pack_facturare.nnumar_act, + pack_facturare.cserie_act, + decode(rownum, 2, V_CANTITATE, 0) as CANT, + decode(rownum, 1, V_CANTITATE, 0) as CANTE, + V_CONT as CONT, + REPLACE(V_ACONT, 'X', '') as ACONT, + decode(rownum, 1, V_PRETV_ORIG, V_PRETV) as PRETV, + decode(rownum, 1, tab_stoc(i).tvav, V_TVAV) as TVAV, + decode(rownum, + 1, + tab_stoc(i).pretv + tab_stoc(i).tvav, + V_PRETVTVA) as PRETVTVA, + decode(rownum, 1, tab_stoc(i).proc_Tvav, V_PROC_TVAV) as PROC_TVAV, + V_PROC_TVA as PROC_TVA, + V_PRET as PRET, + V_TVA AS TVA, + decode(rownum, 1, V_ADAOS_ORIG, V_ADAOS) as ADAOS, + decode(rownum, 1, V_PROCENT_ORIG, V_PROCENT) as PROCENT, + pack_facturare.ddata_act, + pack_facturare.nnumar_bon, + decode(rownum, + 1, + tab_stoc(i).datain, + pack_facturare.ddata_act) as datain, + decode(rownum, 1, pack_facturare.ddata_act, null) as dataout, + tab_stoc(i).pretd, + tab_stoc(i).id_valuta, + pack_facturare.nid_set, + 3 as ID_TIP_RULAJ, + tab_stoc(i).lot, + tab_stoc(i).adata_expirare, + tab_stoc(i).id_rul_aux, + tab_stoc(i).ID_LUCRARE_REZ, + tab_stoc(i).ID_PART_REZ + FROM dual + CONNECT BY level <= 2; + + V_TIP_INREG := V_TIP_INREG - 1; + V_DATAIN := pack_facturare.ddata_act; + END IF; + END IF; + + WHEN V_CONT = '371' AND pack_facturare.nfactavizcust = 1 + /* (pack_facturare.ntip = 42 or (pack_facturare.ntip = 24 and pack_facturare.nfactavizcust = 1))*/ + THEN + -- 357-371 + V_INCASAT_CALCUL := pack_facturare.scrie_nota(1, + (CASE + WHEN V_TIP_GESTIUNE = 6 THEN + V_VALOARE_PRETVTVA + ELSE + V_VALOARE_PRET + END), + 0, -- DISCOUNT_UNITAR + 0, -- PRET CU TVA + pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA + 0, -- V_IN_VALUTA + 0, -- V_CURS, + 0, -- ID_VENCHELT + NVL(V_ID_SECTIE, 0), + NULL, -- V_ID_CTR + V_EXPLICATIE, + '357', + NULL, + '371', + REPLACE(V_ACONT, 'X', ''), + 0, + V_ID_GESTIUNE, + 1, + 0, + 0, + NULL); + + IF V_TIP_GESTIUNE IN (6, 7) AND + (V_PRETV_ORIG <> V_PRETV OR V_TVAV_ORIG <> V_TVAV OR + V_DISCOUNT_UNITAR <> 0) THEN + + IF V_TIP_GESTIUNE = 6 THEN + --371-378 + V_INCASAT_CALCUL := pack_facturare.scrie_nota(1, + V_VALOARE_DIFERENTA_PRETV, + 0, -- DISCOUNT_UNITAR + 0, -- PRET CU TVA + pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA + 0, -- V_IN_VALUTA + 0, -- V_CURS, + 0, -- ID_VENCHELT + NVL(V_ID_SECTIE, + 0), + NULL, -- V_ID_CTR, + V_EXPLICATIE, + '371', + REPLACE(V_ACONT, + 'X'), + '378', + REPLACE(V_ACONT, + 'X'), + V_ID_GESTIUNE, -- id_gestin + V_ID_GESTIUNE, + 2, + 0, + (V_PROC_TVAV - 1) * 100, + NULL); + + --371-4428 + V_INCASAT_CALCUL := pack_facturare.scrie_nota(1, + V_VALOARE_DIFERENTA_TVAV, + 0, -- DISCOUNT_UNITAR + 0, -- PRET CU TVA + pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA + 0, -- V_IN_VALUTA + 0, -- V_CURS, + 0, -- ID_VENCHELT + NVL(V_ID_SECTIE, + 0), + NULL, -- V_ID_CTR, + V_EXPLICATIE, + '371', + REPLACE(V_ACONT, + 'X'), + '4428', + NULL, + V_ID_GESTIUNE, -- id_gestin + V_ID_GESTIUNE, + 2, + 0, + (V_PROC_TVAV - 1) * 100, + NULL); + END IF; + + IF (V_PRETV_ORIG <> V_PRETV OR V_TVAV_ORIG <> V_TVAV) THEN + INSERT INTO rul_temp + (AN, + ID_ARTICOL, + SERIE, + ID_GESTIUNE, + ID_LUCRARE, + ID_RESPONSABIL, + NRACT, + SERIE_ACT, + CANT, + CANTE, + CONT, + ACONT, + PRETV, + TVAV, + PRETVTVA, + PROC_TVAV, + PROC_TVA, + PRET, + TVA, + ADAOS, + PROCENT, + DATAACT, + NNIR, + DATAIN, + DATAOUT, + PRETD, + ID_VALUTA, + ID_SET, + ID_TIP_RULAJ, + LOT, + ADATA_EXPIRARE, + ID_RUL_AUX, + ID_LUCRARE_REZ, + ID_PART_REZ) + SELECT decode(rownum, 1, V_TIP_INREG, 0), + V_ID_ARTICOL, + tab_stoc(i).serie, + V_ID_GESTIUNE, + NVL(pack_facturare.nid_lucrare, 0), + pack_facturare.nid_responsabil, + pack_facturare.nnumar_act, + pack_facturare.cserie_act, + decode(rownum, 2, V_CANTITATE, 0) as CANT, + decode(rownum, 1, V_CANTITATE, 0) as CANTE, + V_CONT as CONT, + REPLACE(V_ACONT, 'X', '') as ACONT, + decode(rownum, 1, V_PRETV_ORIG, V_PRETV) as PRETV, + decode(rownum, 1, tab_stoc(i).tvav, V_TVAV) as TVAV, + decode(rownum, + 1, + tab_stoc(i).pretv + tab_stoc(i).tvav, + V_PRETVTVA) as PRETVTVA, + decode(rownum, 1, tab_stoc(i).proc_Tvav, V_PROC_TVAV) as PROC_TVAV, + V_PROC_TVA as PROC_TVA, + V_PRET as PRET, + V_TVA AS TVA, + decode(rownum, 1, V_ADAOS_ORIG, V_ADAOS) as ADAOS, + decode(rownum, 1, V_PROCENT_ORIG, V_PROCENT) as PROCENT, + pack_facturare.ddata_act, + pack_facturare.nnumar_bon, + decode(rownum, + 1, + tab_stoc(i).datain, + pack_facturare.ddata_act) as datain, + decode(rownum, 1, pack_facturare.ddata_act, null) as dataout, + tab_stoc(i).pretd, + tab_stoc(i).id_valuta, + pack_facturare.nid_set, + 3 as ID_TIP_RULAJ, + tab_stoc(i).lot, + tab_stoc(i).adata_expirare, + tab_stoc(i).id_rul_aux, + tab_stoc(i).ID_LUCRARE_REZ, + tab_stoc(i).ID_PART_REZ + FROM dual + CONNECT BY level <= 2; + + V_TIP_INREG := V_TIP_INREG - 1; + V_DATAIN := pack_facturare.ddata_act; + END IF; + END IF; + + WHEN V_CONT IN ('371', '357') AND V_TIP_GESTIUNE <> 6 AND + pack_facturare.nfactavizcust = 0 THEN + --607-371 + V_INCASAT_CALCUL := pack_facturare.scrie_nota(1, + V_VALOARE_PRET, + 0, -- DISCOUNT_UNITAR + 0, -- PRET ARE TVA + pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA + 0, -- V_IN_VALUTA + 0, -- V_CURS, + V_ID_VENCHELT, + V_ID_SECTIE, + NULL, -- V_ID_CTR, + V_EXPLICATIE, + '607', + lcAcont607, -- REPLACE(V_ACONT, 'X') + V_CONT, + REPLACE(V_ACONT, 'X'), + 0, -- ID_GESTIN + V_ID_GESTIUNE, + 3, + 0, + 0, + NULL); + --371-378 + V_INCASAT_CALCUL := pack_facturare.scrie_nota(1, + V_VALOARE_ADAOS, + 0, -- DISCOUNT_UNITAR + 0, -- PRET ARE TVA + pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA + 0, -- V_IN_VALUTA + 0, -- V_CURS, + 0, -- V_ID_VENCHELT + V_ID_SECTIE, + NULL, -- V_ID_CTR, + V_EXPLICATIE, + V_CONT, + REPLACE(V_ACONT, 'X'), + '378', + lcAcont378, -- REPLACE(V_ACONT, 'X') + V_ID_GESTIUNE, -- V_ID_GESTIN + V_ID_GESTIUNE, + 3, + 0, + (V_PROC_TVAV - 1) * 100, + NULL); + + --378-371 + V_INCASAT_CALCUL := pack_facturare.scrie_nota(1, + V_VALOARE_ADAOS, + 0, -- DISCOUNT_UNITAR + 0, -- PRET ARE TVA + pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA + 0, -- V_IN_VALUTA + 0, -- V_CURS, + 0, -- ID_VENCHELT + V_ID_SECTIE, + NULL, -- V_ID_CTR, + V_EXPLICATIE, + '378', + lcAcont378, -- REPLACE(V_ACONT, 'X') + V_CONT, + REPLACE(V_ACONT, 'X'), + 0, -- V_ID_GESTIN + V_ID_GESTIUNE, + 3, + 0, + (V_PROC_TVAV - 1) * 100, + NULL); + + IF V_CONT = '357' THEN + -- 371 - 357 + V_INCASAT_CALCUL := pack_facturare.scrie_nota(1, + V_VALOARE_PRET, + 0, -- DISCOUNT_UNITAR + 0, -- PRET CU TVA + pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA + 0, -- V_IN_VALUTA + 0, -- V_CURS, + 0, -- ID_VENCHELT + V_ID_SECTIE, + NULL, -- V_ID_CTR + V_EXPLICATIE, + '371', + REPLACE(V_ACONT, + 'X'), + V_CONT, + NULL, + 0, -- V_ID_GESTIN + V_ID_GESTIUNE, + 3, + 0, + (V_PROC_TVAV - 1) * 100, + NULL); + + END IF; + + IF V_TIP_GESTIUNE = 7 AND + (V_PRETV_ORIG <> V_PRETV OR V_TVAV_ORIG <> V_TVAV) THEN + INSERT INTO rul_temp + (AN, + ID_ARTICOL, + SERIE, + ID_GESTIUNE, + ID_LUCRARE, + ID_RESPONSABIL, + NRACT, + SERIE_ACT, + CANT, + CANTE, + CONT, + ACONT, + PRETV, + TVAV, + PRETVTVA, + PROC_TVAV, + PROC_TVA, + PRET, + TVA, + ADAOS, + PROCENT, + DATAACT, + NNIR, + DATAIN, + DATAOUT, + PRETD, + ID_VALUTA, + ID_SET, + ID_TIP_RULAJ, + LOT, + ADATA_EXPIRARE, + ID_RUL_AUX, + ID_LUCRARE_REZ, + ID_PART_REZ) + SELECT decode(rownum, 1, V_TIP_INREG, 0), + V_ID_ARTICOL, + tab_stoc(i).serie, + V_ID_GESTIUNE, + NVL(pack_facturare.nid_lucrare, 0), + pack_facturare.nid_responsabil, + pack_facturare.nnumar_act, + pack_facturare.cserie_act, + decode(rownum, 2, V_CANTITATE, 0) as CANT, + decode(rownum, 1, V_CANTITATE, 0) as CANTE, + V_CONT as CONT, + REPLACE(V_ACONT, 'X', '') as ACONT, + decode(rownum, 1, V_PRETV_ORIG, V_PRETV) as PRETV, + decode(rownum, 1, tab_stoc(i).tvav, V_TVAV) as TVAV, + decode(rownum, + 1, + tab_stoc(i).pretv + tab_stoc(i).tvav, + V_PRETVTVA) as PRETVTVA, + decode(rownum, 1, tab_stoc(i).proc_Tvav, V_PROC_TVAV) as PROC_TVAV, + V_PROC_TVA as PROC_TVA, + V_PRET as PRET, + V_TVA AS TVA, + decode(rownum, 1, V_ADAOS_ORIG, V_ADAOS) as ADAOS, + decode(rownum, 1, V_PROCENT_ORIG, V_PROCENT) as PROCENT, + pack_facturare.ddata_act, + pack_facturare.nnumar_bon, + decode(rownum, + 1, + tab_stoc(i).datain, + pack_facturare.ddata_act) as datain, + decode(rownum, 1, pack_facturare.ddata_act, null) as dataout, + tab_stoc(i).pretd, + tab_stoc(i).id_valuta, + pack_facturare.nid_set, + 3 as ID_TIP_RULAJ, + tab_stoc(i).lot, + tab_stoc(i).adata_expirare, + tab_stoc(i).id_rul_aux, + tab_stoc(i).ID_LUCRARE_REZ, + tab_stoc(i).ID_PART_REZ + FROM dual + CONNECT BY level <= 2; + + V_TIP_INREG := V_TIP_INREG - 1; + V_DATAIN := pack_facturare.ddata_act; + END IF; + + WHEN V_CONT IN ('371', '357') AND V_TIP_GESTIUNE = 6 THEN + --607-371 + V_INCASAT_CALCUL := pack_facturare.scrie_nota(1, + V_VALOARE_PRET, + 0, -- DISCOUNT_UNITAR + 0, -- PRET CU TVA + pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA + 0, -- V_IN_VALUTA + 0, -- V_CURS, + V_ID_VENCHELT, + V_ID_SECTIE, + NULL, -- V_ID_CTR + V_EXPLICATIE, + '607', + lcAcont607, -- REPLACE(V_ACONT, 'X'), + '371', + REPLACE(V_ACONT, 'X'), + 0, + V_ID_GESTIUNE, + 4, + 0, + 0, + NULL); + --378-371 + V_INCASAT_CALCUL := pack_facturare.scrie_nota(1, + V_VALOARE_ADAOS_ORIG, + 0, -- DISCOUNT_UNITAR + 0, -- PRET CU TVA + pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA + 0, -- V_IN_VALUTA + 0, -- V_CURS, + 0, -- ID_VENCHELT + V_ID_SECTIE, + NULL, -- V_ID_CTR + V_EXPLICATIE, + '378', + lcAcont378, -- REPLACE(V_ACONT, 'X'), + '371', + REPLACE(V_ACONT, 'X'), + 0, -- V_ID_GESTIN + V_ID_GESTIUNE, + 4, + 0, + (V_PROC_TVAV - 1) * 100, + NULL); + --4428-371 + V_INCASAT_CALCUL := pack_facturare.scrie_nota(1, + V_VALOARE_TVAV_ORIG, + 0, -- DISCOUNT_UNITAR + 0, -- PRET CU TVA + pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA + 0, -- V_IN_VALUTA + 0, -- V_CURS, + 0, -- ID_VENCHELT + V_ID_SECTIE, + NULL, -- V_ID_CTR + V_EXPLICATIE, + '4428', + NULL, + '371', + REPLACE(V_ACONT, 'X'), + 0, -- V_ID_GESTIN + V_ID_GESTIUNE, + 4, + 0, + (V_PROC_TVAV - 1) * 100, + NULL); + + IF V_CONT = '357' THEN + -- 371 - 357 + V_INCASAT_CALCUL := pack_facturare.scrie_nota(1, + V_VALOARE_PRET + + V_VALOARE_ADAOS_ORIG + + V_VALOARE_TVAV_ORIG, + 0, -- DISCOUNT_UNITAR + 0, -- PRET CU TVA + pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA + 0, -- V_IN_VALUTA + 0, -- V_CURS, + 0, -- ID_VENCHELT + V_ID_SECTIE, + NULL, -- V_ID_CTR + V_EXPLICATIE, + '371', + REPLACE(V_ACONT, + 'X'), + V_CONT, + NULL, + 0, -- V_ID_GESTIN + V_ID_GESTIUNE, + 4, + 0, + (V_PROC_TVAV - 1) * 100, + NULL); + + END IF; + + IF (V_PRETV_ORIG <> V_PRETV OR V_TVAV_ORIG <> V_TVAV) THEN + + INSERT INTO RUL_TEMP + (AN, + ID_ARTICOL, + SERIE, + ID_GESTIUNE, + ID_LUCRARE, + ID_RESPONSABIL, + NRACT, + SERIE_ACT, + CANTE, + CANT, + CONT, + ACONT, + PRETV, + TVAV, + PRETVTVA, + PROC_TVAV, + PROC_TVA, + PRET, + TVA, + ADAOS, + PROCENT, + DATAACT, + NNIR, + DATAIN, + DATAOUT, + ID_RUL_AUX, + PRETD, + ID_VALUTA, + ID_SET, + ID_TIP_RULAJ, + LOT, + ADATA_EXPIRARE, + ID_LUCRARE_REZ, + ID_PART_REZ) + SELECT decode(rownum, 1, V_TIP_INREG, 0), + V_ID_ARTICOL, + tab_stoc(i).serie, + V_ID_GESTIUNE, + nvl(pack_facturare.nid_lucrare, 0), + pack_facturare.nid_responsabil, + pack_facturare.nnumar_act, + pack_facturare.cserie_act, + decode(rownum, 1, V_CANTITATE, 0) as CANTE, + decode(rownum, 2, V_CANTITATE, 0) as CANT, + V_CONT, + V_ACONT, + decode(rownum, 1, V_PRETV_ORIG, V_PRETV) as PRETV, + decode(rownum, 1, tab_stoc(i).tvav, V_TVAV) as TVAV, + decode(rownum, + 1, + tab_stoc(i).pretv + tab_stoc(i).tvav, + V_PRETVTVA) as PRETVTVA, + decode(rownum, 1, tab_stoc(i).proc_Tvav, V_PROC_TVAV) as PROC_TVAV, + V_PROC_TVA as PROC_TVA, + V_PRET, + V_TVA, + decode(rownum, 1, V_ADAOS_ORIG, V_ADAOS) as ADAOS, + decode(rownum, 1, V_PROCENT_ORIG, V_PROCENT) as PROCENT, + pack_facturare.ddata_act, + pack_facturare.nnumar_bon, + decode(rownum, + 1, + tab_stoc(i).datain, + pack_facturare.ddata_act) as datain, + decode(rownum, 1, pack_facturare.ddata_act, null) as dataout, + tab_stoc(i).id_rul_aux, + tab_stoc(i).pretd, + tab_stoc(i).id_valuta, + pack_facturare.nid_set, + V_ID_TIP_RULAJ, + tab_stoc(i).LOT, + tab_stoc(i).ADATA_EXPIRARE, + tab_stoc(i).ID_LUCRARE_REZ, + tab_stoc(i).ID_PART_REZ + FROM DUAL + CONNECT BY level <= 2; + V_DATAIN := pack_facturare.ddata_act; + V_TIP_INREG := V_TIP_INREG - 1; + + --378-371 + V_INCASAT_CALCUL := pack_facturare.scrie_nota(1, + V_VALOARE_DIFERENTA_PRETV, + 0, -- DISCOUNT_UNITAR + 0, -- PRET CU TVA + pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA + 0, -- V_IN_VALUTA + 0, -- V_CURS, + 0, -- ID_VENCHELT + V_ID_SECTIE, + NULL, -- V_ID_CTR + V_EXPLICATIE, + '378', + lcAcont378, --REPLACE(V_ACONT,'X'), + V_CONT, + REPLACE(V_ACONT, + 'X'), + V_ID_GESTIUNE, -- V_ID_GESTIN + V_ID_GESTIUNE, + 5, + 0, + (V_PROC_TVAV - 1) * 100, + NULL); + + -- 30.10.2009 + --4428-371 + V_INCASAT_CALCUL := pack_facturare.scrie_nota(1, + V_VALOARE_DIFERENTA_TVAV, + 0, -- DISCOUNT_UNITAR + 0, -- PRET CU TVA + pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA + 0, -- V_IN_VALUTA + 0, -- V_CURS, + 0, -- ID_VENCHELT + NVL(V_ID_SECTIE, 0), + NULL, -- V_ID_CTR, + V_EXPLICATIE, + '4428', + NULL, + V_CONT, + REPLACE(V_ACONT, + 'X'), + V_ID_GESTIUNE, -- id_gestin + V_ID_GESTIUNE, + 5, + 0, + (V_PROC_TVAV - 1) * 100, + NULL); + -- 30.10.2009 ^ + + --371-378 + V_INCASAT_CALCUL := pack_facturare.scrie_nota(1, + V_VALOARE_DIFERENTA_PRETV, + 0, -- DISCOUNT_UNITAR + 0, -- PRET CU TVA + pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA + 0, -- V_IN_VALUTA + 0, -- V_CURS, + 0, -- ID_VENCHELT + V_ID_SECTIE, + NULL, -- V_ID_CTR + V_EXPLICATIE, + V_CONT, + REPLACE(V_ACONT, + 'X'), + '378', + lcAcont378, --REPLACE(V_ACONT,'X'), + V_ID_GESTIUNE, -- V_ID_GESTIN + V_ID_GESTIUNE, + 5, + 0, + (V_PROC_TVAV - 1) * 100, + NULL); + + -- 30.10.2009 + --371-4428 + V_INCASAT_CALCUL := pack_facturare.scrie_nota(1, + V_VALOARE_DIFERENTA_TVAV, + 0, -- DISCOUNT_UNITAR + 0, -- PRET CU TVA + pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA + 0, -- V_IN_VALUTA + 0, -- V_CURS, + 0, -- ID_VENCHELT + V_ID_SECTIE, + NULL, -- V_ID_CTR + V_EXPLICATIE, + V_CONT, + REPLACE(V_ACONT, + 'X'), + '4428', + NULL, + V_ID_GESTIUNE, -- V_ID_GESTIN + V_ID_GESTIUNE, + 5, + 0, + (V_PROC_TVAV - 1) * 100, + NULL); + -- 30.10.2009 ^ + + END IF; + WHEN V_CONT IN ('341', '345', '346', '381') AND + pack_facturare.nfactavizcust = 0 THEN + -- 711 - 34X / 608 - 381 + IF V_CONT = '381' THEN + V_CONT2 := '608'; + V_CONT3 := '388'; + V_SUMA := V_VALOARE_PRET; + V_ACONT2 := lcAcont608; + V_ACONT3 := lcAcont388; + ELSE + V_CONT2 := '711'; + V_CONT3 := '348'; + V_SUMA := V_VALOARE_PRET; + V_ACONT2 := REPLACE(V_ACONT, 'X'); + V_ACONT3 := REPLACE(V_ACONT, 'X'); + END IF; + + V_INCASAT_CALCUL := pack_facturare.scrie_nota(1, + V_SUMA, + 0, -- DISCOUNT_UNITAR + 0, -- PRET CU TVA + pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA + 0, -- V_IN_VALUTA + 0, -- V_CURS, + V_ID_VENCHELT, + V_ID_SECTIE, + NULL, -- V_ID_CTR + V_EXPLICATIE, + V_CONT2, + V_ACONT2, -- REPLACE(V_ACONT, 'X'), + V_CONT, + REPLACE(V_ACONT, 'X'), + 0, -- V_ID_GESTIN + V_ID_GESTIUNE, + 6, + 0, + (V_PROC_TVAV - 1) * 100, + NULL); + + IF V_VALOARE_ADAOS <> 0 AND lnDescarcare345FaraAdaos = 0 THEN + -- 34X -348 / 381 - 388 + V_INCASAT_CALCUL := pack_facturare.scrie_nota(1, + V_VALOARE_ADAOS, + 0, -- DISCOUNT_UNITAR + 0, -- PRET CU TVA + pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA + 0, -- V_IN_VALUTA + 0, -- V_CURS, + 0, -- ID_VENCHELT + V_ID_SECTIE, + NULL, -- V_ID_CTR + V_EXPLICATIE, + V_CONT, + REPLACE(V_ACONT, + 'X'), + V_CONT3, + V_ACONT3, -- REPLACE(V_ACONT,'X'), + 0, -- V_ID_GESTIN + V_ID_GESTIUNE, + 7, + 0, + (V_PROC_TVAV - 1) * 100, + NULL); + + -- 348 - 34x / 388 - 381 +/* IF V_CONT = '381' THEN + V_CONT2 := V_CONT; + V_ACONT2 := REPLACE(V_ACONT, 'X'); + ELSE + V_ACONT2 := NULL; + END IF;*/ + V_INCASAT_CALCUL := pack_facturare.scrie_nota(1, + V_VALOARE_ADAOS, + 0, -- DISCOUNT_UNITAR + 0, -- PRET CU TVA + pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA + 0, -- V_IN_VALUTA + 0, -- V_CURS, + V_ID_VENCHELT, + V_ID_SECTIE, + NULL, -- V_ID_CTR + V_EXPLICATIE, + V_CONT3, + V_ACONT3, -- REPLACE(V_ACONT,'X'), + V_CONT, + REPLACE(V_ACONT, 'X'), + 0, -- V_ID_GESTIN + V_ID_GESTIUNE, + 7, + 0, + (V_PROC_TVAV - 1) * 100, + NULL); + + END IF; + + IF (V_PRETV_ORIG <> V_PRETV OR V_TVAV_ORIG <> V_TVAV) AND + V_TIP_GESTIUNE IN (6, 7) THEN + INSERT INTO rul_temp + (AN, + ID_ARTICOL, + SERIE, + ID_GESTIUNE, + ID_LUCRARE, + ID_RESPONSABIL, + NRACT, + SERIE_ACT, + CANT, + CANTE, + CONT, + ACONT, + PRETV, + TVAV, + PRETVTVA, + PROC_TVAV, + PROC_TVA, + PRET, + TVA, + ADAOS, + PROCENT, + DATAACT, + NNIR, + DATAIN, + DATAOUT, + PRETD, + ID_VALUTA, + ID_SET, + ID_TIP_RULAJ, + LOT, + ADATA_EXPIRARE, + ID_RUL_AUX, + ID_LUCRARE_REZ, + ID_PART_REZ) + SELECT decode(rownum, 1, V_TIP_INREG, 0), + V_ID_ARTICOL, + tab_stoc(i).serie, + V_ID_GESTIUNE, + NVL(pack_facturare.nid_lucrare, 0), + pack_facturare.nid_responsabil, + pack_facturare.nnumar_act, + pack_facturare.cserie_act, + decode(rownum, 2, V_CANTITATE, 0) as CANT, + decode(rownum, 1, V_CANTITATE, 0) as CANTE, + V_CONT as CONT, + REPLACE(V_ACONT, 'X', '') as ACONT, + decode(rownum, 1, V_PRETV_ORIG, V_PRETV) as PRETV, + decode(rownum, 1, tab_stoc(i).tvav, V_TVAV) as TVAV, + decode(rownum, + 1, + tab_stoc(i).pretv + tab_stoc(i).tvav, + V_PRETVTVA) as PRETVTVA, + decode(rownum, 1, tab_stoc(i).proc_Tvav, V_PROC_TVAV) as PROC_TVAV, + V_PROC_TVA as PROC_TVA, + V_PRET as PRET, + V_TVA AS TVA, + decode(rownum, 1, V_ADAOS_ORIG, V_ADAOS) as ADAOS, + decode(rownum, 1, V_PROCENT_ORIG, V_PROCENT) as PROCENT, + pack_facturare.ddata_act, + pack_facturare.nnumar_bon, + decode(rownum, + 1, + tab_stoc(i).datain, + pack_facturare.ddata_act) as datain, + decode(rownum, 1, pack_facturare.ddata_act, null) as dataout, + tab_stoc(i).pretd, + tab_stoc(i).id_valuta, + pack_facturare.nid_set, + 3 as ID_TIP_RULAJ, + tab_stoc(i).lot, + tab_stoc(i).adata_expirare, + tab_stoc(i).id_rul_aux, + tab_stoc(i).ID_LUCRARE_REZ, + tab_stoc(i).ID_PART_REZ + FROM dual + CONNECT BY level <= 2; + + V_TIP_INREG := V_TIP_INREG - 1; + V_DATAIN := pack_facturare.ddata_act; + END IF; + + WHEN V_CONT <> '371' AND pack_facturare.nfactavizcust = 0 THEN + --371-x + V_INCASAT_CALCUL := pack_facturare.scrie_nota(1, + V_VALOARE_PRET, + 0, -- DISCOUNT_UNITAR + 0, -- PRET CU TVA + pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA + 0, -- V_IN_VALUTA + 0, -- V_CURS, + V_ID_VENCHELT, + V_ID_SECTIE, + NULL, -- V_ID_CTR + V_EXPLICATIE, + '371', + REPLACE(V_ACONT, 'X'), + V_CONT, + REPLACE(V_ACONT, 'X'), + 0, -- V_ID_GESTIN + V_ID_GESTIUNE, + 8, + 0, + (V_PROC_TVAV - 1) * 100, + NULL); + --607-371 + V_INCASAT_CALCUL := pack_facturare.scrie_nota(1, + V_VALOARE_PRET, + 0, -- DISCOUNT_UNITAR + 0, -- PRET CU TVA + pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA + 0, -- V_IN_VALUTA + 0, -- V_CURS, + V_ID_VENCHELT, + V_ID_SECTIE, + NULL, -- V_ID_CTR + V_EXPLICATIE, + '607', + lcAcont607, -- REPLACE(V_ACONT, 'X'), + '371', + REPLACE(V_ACONT, 'X'), + 0, -- V_ID_GESTIN + V_ID_GESTIUNE, + 8, + 0, + 0, + NULL); + --371-378 + V_INCASAT_CALCUL := pack_facturare.scrie_nota(1, + V_VALOARE_ADAOS, + 0, -- DISCOUNT_UNITAR + 0, -- PRET CU TVA + pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA + 0, -- V_IN_VALUTA + 0, -- V_CURS, + 0, -- ID_VENCHELT + V_ID_SECTIE, + NULL, -- V_ID_CTR + V_EXPLICATIE, + '371', + REPLACE(V_ACONT, 'X'), + '378', + lcAcont378, -- REPLACE(V_ACONT, 'X'), + 0, -- V_ID_GESTIN + V_ID_GESTIUNE, + 8, + 0, + (V_PROC_TVAV - 1) * 100, + NULL); + + --378-371 + V_INCASAT_CALCUL := pack_facturare.scrie_nota(1, + V_VALOARE_ADAOS, + 0, -- DISCOUNT_UNITAR + 0, -- PRET CU TVA + pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA + 0, -- V_IN_VALUTA + 0, -- V_CURS, + 0, -- ID_VENCHELT + V_ID_SECTIE, + NULL, -- V_ID_CTR + V_EXPLICATIE, + '378', + lcAcont378, -- REPLACE(V_ACONT, 'X'), + '371', + REPLACE(V_ACONT, 'X'), + 0, -- V_ID_GESTIN + V_ID_GESTIUNE, + 8, + 0, + (V_PROC_TVAV - 1) * 100, + NULL); + + IF (V_PRETV_ORIG <> V_PRETV OR V_TVAV_ORIG <> V_TVAV) AND + V_TIP_GESTIUNE IN (6, 7) THEN + INSERT INTO rul_temp + (AN, + ID_ARTICOL, + SERIE, + ID_GESTIUNE, + ID_LUCRARE, + ID_RESPONSABIL, + NRACT, + SERIE_ACT, + CANT, + CANTE, + CONT, + ACONT, + PRETV, + TVAV, + PRETVTVA, + PROC_TVAV, + PROC_TVA, + PRET, + TVA, + ADAOS, + PROCENT, + DATAACT, + NNIR, + DATAIN, + DATAOUT, + PRETD, + ID_VALUTA, + ID_SET, + ID_TIP_RULAJ, + LOT, + ADATA_EXPIRARE, + ID_RUL_AUX, + ID_LUCRARE_REZ, + ID_PART_REZ) + SELECT decode(rownum, 1, V_TIP_INREG, 0), + V_ID_ARTICOL, + tab_stoc(i).serie, + V_ID_GESTIUNE, + NVL(pack_facturare.nid_lucrare, 0), + pack_facturare.nid_responsabil, + pack_facturare.nnumar_act, + pack_facturare.cserie_act, + decode(rownum, 2, V_CANTITATE, 0) as CANT, + decode(rownum, 1, V_CANTITATE, 0) as CANTE, + V_CONT as CONT, + REPLACE(V_ACONT, 'X', '') as ACONT, + decode(rownum, 1, V_PRETV_ORIG, V_PRETV) as PRETV, + decode(rownum, 1, tab_stoc(i).tvav, V_TVAV) as TVAV, + decode(rownum, + 1, + tab_stoc(i).pretv + tab_stoc(i).tvav, + V_PRETVTVA) as PRETVTVA, + decode(rownum, 1, tab_stoc(i).proc_Tvav, V_PROC_TVAV) as PROC_TVAV, + V_PROC_TVA as PROC_TVA, + V_PRET as PRET, + V_TVA AS TVA, + decode(rownum, 1, V_ADAOS_ORIG, V_ADAOS) as ADAOS, + decode(rownum, 1, V_PROCENT_ORIG, V_PROCENT) as PROCENT, + pack_facturare.ddata_act, + pack_facturare.nnumar_bon, + decode(rownum, + 1, + tab_stoc(i).datain, + pack_facturare.ddata_act) as datain, + decode(rownum, 1, pack_facturare.ddata_act, null) as dataout, + tab_stoc(i).pretd, + tab_stoc(i).id_valuta, + pack_facturare.nid_set, + 3 as ID_TIP_RULAJ, + tab_stoc(i).lot, + tab_stoc(i).adata_expirare, + tab_stoc(i).id_rul_aux, + tab_stoc(i).ID_LUCRARE_REZ, + tab_stoc(i).ID_PART_REZ + FROM dual + CONNECT BY level <= 2; + + V_TIP_INREG := V_TIP_INREG - 1; + V_DATAIN := pack_facturare.ddata_act; + END IF; + + ELSE + RAISE_APPLICATION_ERROR(-20000, + 'Combinatie invalida! (FACT-010 : ' || + V_ID_ARTICOL || '.' || V_ID_GESTIUNE || '.' || + V_CONT || ')'); + END CASE; + + INSERT INTO RUL_TEMP + (AN, + ID_ARTICOL, + SERIE, + ID_GESTIUNE, + ID_LUCRARE, + ID_RESPONSABIL, + NRACT, + SERIE_ACT, + CANTE, + CONT, + ACONT, + PRETV, + TVAV, + PRETVTVA, + PROC_TVAV, + PROC_TVA, + PRET, + TVA, + DISCUNITAR, + DISCOUNT_TVA, + PROC_DISC, + ADAOS, + PROCENT, + DATAACT, + NNIR, + DATAIN, + DATAOUT, + PRETD, + ID_VALUTA, + ID_RUL_AUX, + ID_SET, + LOT, + ADATA_EXPIRARE, + ID_LUCRARE_REZ, + ID_PART_REZ, + ID_JTVA_COLOANA, + TAXCODE) + VALUES + (V_TIP_INREG, + V_ID_ARTICOL, + tab_stoc(i).serie, + V_ID_GESTIUNE, + nvl(pack_facturare.nid_lucrare, 0), + pack_facturare.nid_responsabil, + pack_facturare.nnumar_act, + pack_facturare.cserie_act, + V_CANTITATE, + V_CONT, + V_ACONT, + V_PRETV, + V_TVAV, + V_PRETVTVA, + V_PROC_TVAV, + V_PROC_TVAV, + V_PRET, + V_TVA, + V_DISCOUNT_UNITAR, + V_DISCOUNT_TVA, + V_PROC_DISCOUNT, + V_ADAOS, + V_PROCENT, + pack_facturare.ddata_act, + pack_facturare.nnumar_bon, + V_DATAIN, + pack_facturare.ddata_act, + tab_stoc(i).pretd, + tab_stoc(i).id_valuta, + tab_stoc(i).id_rul_aux, + pack_facturare.nid_set, + tab_stoc(i).lot, + tab_stoc(i).adata_expirare, + tab_stoc(i).ID_LUCRARE_REZ, + tab_stoc(i).ID_PART_REZ, + V_ID_JTVA_COLOANA, + V_TAXCODE); + + END LOOP; + + <> + NULL; + END descarca_gestiune; + ------------------------------------------------------------------- + PROCEDURE scrie_fact_aviz_custodie(V_COD IN NUMBER, + V_ID_SECTIE IN NUMBER, + V_ID_ARTICOL IN NUMBER, + V_ID_GESTIUNE IN NUMBER, + V_CONT IN VARCHAR2, + V_CANTITATE IN NUMBER, + V_PRET_ARE_TVA IN NUMBER, + V_PRET_ACHIZITIE IN NUMBER, + V_PRETD IN NUMBER, + V_ID_VALUTAD IN NUMBER, + V_PRETV IN NUMBER, + V_DISCOUNT_UNITAR IN NUMBER, + V_ID_VALUTA IN NUMBER, + V_CURS IN NUMBER, + V_PROC_TVAV IN NUMBER) IS + V_VALOARE_TVAV ACT.SUMA%TYPE; + V_VALOARE_PRETV ACT.SUMA%TYPE; + V_VALOARE_PRET ACT.SUMA%TYPE; + V_VALOARE_ADAOS ACT.SUMA%TYPE; + V_VALOARE_PRETVTVA ACT.SUMA%TYPE; + V_PRETACHCTVA NOM_ARTICOLE.PRETACHCTVA%TYPE; + + V_INCASAT_CALCUL ACT.SUMA%TYPE := 0; + + V_PROC_TVA RUL.PROC_TVA%TYPE; + V_ACONT RUL.ACONT%TYPE; + V_TVA RUL.TVA%TYPE; + V_PRETV_RON RUL.PRETV%TYPE; + + V_DISCOUNT_EVIDENTIAT_AVIZ NUMBER(1); + BEGIN + SELECT DISCOUNT_EVIDENTIAT + INTO V_DISCOUNT_EVIDENTIAT_AVIZ + FROM VANZARI + WHERE COD = V_COD; + + IF V_PRET_ARE_TVA = 1 THEN + IF V_DISCOUNT_EVIDENTIAT_AVIZ = 1 THEN + V_PRETV_RON := pack_sesiune.calculeaza_pret_cu_tva(V_PRETV, + V_CURS, + V_ID_VALUTA, + V_PROC_TVA, + V_PRET_ARE_TVA, + 2); + ELSE + V_PRETV_RON := pack_sesiune.calculeaza_pret_cu_tva(V_PRETV - + V_DISCOUNT_UNITAR, + V_CURS, + V_ID_VALUTA, + V_PROC_TVA, + V_PRET_ARE_TVA, + 2); + END IF; + ELSE + IF V_DISCOUNT_EVIDENTIAT_AVIZ = 1 THEN + V_PRETV_RON := pack_sesiune.calculeaza_pret_fara_tva(V_PRETV, + V_CURS, + V_ID_VALUTA, + V_PROC_TVA, + V_PRET_ARE_TVA, + 2); + ELSE + V_PRETV_RON := pack_sesiune.calculeaza_pret_fara_tva(V_PRETV - + V_DISCOUNT_UNITAR, + V_CURS, + V_ID_VALUTA, + V_PROC_TVA, + V_PRET_ARE_TVA, + 2); + END IF; + END IF; + + SELECT A.PROC_TVA, A.TVA, A.ACONT, B.PRETACHCTVA + INTO V_PROC_TVA, V_TVA, V_ACONT, V_PRETACHCTVA + FROM RUL A + LEFT JOIN NOM_ARTICOLE B + ON A.ID_ARTICOL = B.ID_ARTICOL + WHERE A.COD = V_COD + AND A.STERS = 0 + AND A.ID_ARTICOL = V_ID_ARTICOL + AND A.PRET = V_PRET_ACHIZITIE + AND A.PRETD = V_PRETD + AND NVL(A.ID_VALUTA, 0) = NVL(V_ID_VALUTAD, 0) + AND DECODE(V_PRET_ARE_TVA, 1, A.PRETV + A.TVAV, A.PRETV) = + V_PRETV_RON + AND A.ID_GESTIUNE = V_ID_GESTIUNE + AND A.ID_TIP_RULAJ = 0 + AND ROWNUM = 1; + + V_VALOARE_TVAV := pack_facturare.calculeaza_total_tva(V_PRET => V_PRETV, + V_AJUSTARE => 0, + V_CURS => V_CURS, + V_DISCOUNT_UNITAR => V_DISCOUNT_UNITAR, + V_DISCOUNT_EVIDENTIAT => pack_facturare.ndiscount_evidentiat, + V_CANTITATE => V_CANTITATE, + V_PRET_CU_TVA => V_PRET_ARE_TVA, + V_PROC_TVAV => V_PROC_TVAV, + V_ZECIMALE_PRET => pack_sesiune.nzecimale_pretv, + V_ZECIMALE_SUMA => pack_sesiune.nzecimale_sumav); + + V_VALOARE_PRETV := pack_facturare.calculeaza_total_fara_tva(V_PRET => V_PRETV, + V_AJUSTARE => 0, + V_CURS => V_CURS, + V_DISCOUNT_UNITAR => V_DISCOUNT_UNITAR, + V_DISCOUNT_EVIDENTIAT => pack_facturare.ndiscount_evidentiat, + V_CANTITATE => V_CANTITATE, + V_PRET_CU_TVA => V_PRET_ARE_TVA, + V_PROC_TVAV => V_PROC_TVAV, + V_ZECIMALE_PRET => pack_sesiune.nzecimale_pretv, + V_ZECIMALE_SUMA => pack_sesiune.nzecimale_sumav); + + V_VALOARE_PRET := pack_facturare.calculeaza_total_fara_tva(V_PRET => V_PRET_ACHIZITIE + + (CASE + WHEN V_PRETACHCTVA = 1 THEN + V_TVA + ELSE + 0 + END), + V_AJUSTARE => 0, + V_CURS => 1, + V_DISCOUNT_UNITAR => 0, + V_DISCOUNT_EVIDENTIAT => 0, + V_CANTITATE => V_CANTITATE, + V_PRET_CU_TVA => V_PRETACHCTVA, + V_PROC_TVAV => V_PROC_TVA, + V_ZECIMALE_PRET => pack_sesiune.nzecimale_preta, + V_ZECIMALE_SUMA => pack_sesiune.nzecimale_sumaa); + V_VALOARE_ADAOS := V_VALOARE_PRETV - V_VALOARE_PRET; + + V_VALOARE_PRETVTVA := pack_facturare.calculeaza_total_cu_tva(V_PRET => V_PRETV, + V_AJUSTARE => 0, + V_CURS => V_CURS, + V_DISCOUNT_UNITAR => V_DISCOUNT_UNITAR, + V_DISCOUNT_EVIDENTIAT => pack_facturare.ndiscount_evidentiat, + V_CANTITATE => V_CANTITATE, + V_PRET_CU_TVA => V_PRET_ARE_TVA, + V_PROC_TVAV => V_PROC_TVAV, + V_ZECIMALE_PRET => pack_sesiune.nzecimale_pretv, + V_ZECIMALE_SUMA => pack_sesiune.nzecimale_sumav); + + IF V_CONT = '371' THEN + -- 371 - 357 + V_INCASAT_CALCUL := pack_facturare.scrie_nota(1, + V_VALOARE_PRETVTVA, + 0, -- DISCOUNT_UNITAR + 0, -- PRET CU TVA + pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA + 0, -- V_IN_VALUTA + 0, -- V_CURS, + 0, -- ID_VENCHELT + NVL(V_ID_SECTIE, 0), + 0, -- V_ID_CTR + NULL, + '371', + REPLACE(V_ACONT, 'X'), + '357', + NULL, + 0, + V_ID_GESTIUNE, + 1, + 0, + 0, + NULL); + + --607-371 + V_INCASAT_CALCUL := pack_facturare.scrie_nota(1, + V_VALOARE_PRET, + 0, -- DISCOUNT_UNITAR + 0, -- PRET CU TVA + pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA + 0, -- V_IN_VALUTA + 0, -- V_CURS, + 0, -- ID_VENCHELT + NVL(V_ID_SECTIE, 0), + NULL, -- V_ID_CTR + NULL, + '607', + REPLACE(V_ACONT, 'X', ''), + '371', + REPLACE(V_ACONT, 'X', ''), + 0, + V_ID_GESTIUNE, + 1, + 0, + 0, + NULL); + + --378-371 + V_INCASAT_CALCUL := pack_facturare.scrie_nota(1, + V_VALOARE_ADAOS, + 0, -- DISCOUNT_UNITAR + 0, -- PRET CU TVA + pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA + 0, -- V_IN_VALUTA + 0, -- V_CURS, + 0, -- ID_VENCHELT + NVL(V_ID_SECTIE, 0), + NULL, -- V_ID_CTR + NULL, + '378', + REPLACE(V_ACONT, 'X'), + '371', + REPLACE(V_ACONT, 'X'), + V_ID_GESTIUNE, + V_ID_GESTIUNE, + 1, + 0, + 0, + NULL); + --4428-371 + V_INCASAT_CALCUL := pack_facturare.scrie_nota(1, + V_VALOARE_TVAV, + 0, -- DISCOUNT_UNITAR + 0, -- PRET CU TVA + pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA + 0, -- V_IN_VALUTA + 0, -- V_CURS, + 0, -- ID_VENCHELT + NVL(V_ID_SECTIE, 0), + NULL, -- V_ID_CTR + NULL, + '4428', + NULL, + '371', + REPLACE(V_ACONT, 'X'), + V_ID_GESTIUNE, + V_ID_GESTIUNE, + 1, + 0, + 0, + NULL); + ELSE + RAISE_APPLICATION_ERROR(-20000, + 'Nu exista configurari pentru contul ' || + V_CONT || ' ! (FACT-011)'); + END IF; + END scrie_fact_aviz_custodie; + ------------------------------------------------------------------- + PROCEDURE transfera_articol(detalii_articol VANZARI_DETALII_TEMP%ROWTYPE) IS + V_PRET STOC.PRET%TYPE; + V_PRETV_ORIG STOC.PRETV%TYPE; + V_ACONT STOC.ACONT%TYPE; + + V_ACONT_GEST NOM_GESTIUNI.ACONT%TYPE; + + V_ID_SECTIE RUL.ID_SECTIE%TYPE; + V_ADAOS RUL.ADAOS%TYPE; + V_ADAOS_ORIG RUL.ADAOS%TYPE; + V_PRETV RUL.PRETV%TYPE; + V_TVAV RUL.PRETV%TYPE; + V_PRETVTVA RUL.PRETVTVA%TYPE; + V_TVAV_ORIG RUL.PRETV%TYPE; + V_DISCOUNT_CU_TVA RUL.DISCUNITAR%TYPE; + V_DISCOUNT_UNITAR RUL.DISCUNITAR%TYPE; + V_DISCOUNT_TVA RUL.DISCOUNT_TVA%TYPE; + -- V_PROC_DISCOUNT RUL.PROC_DISC%TYPE; + V_PROCENT RUL.PROCENT%TYPE; + V_PROCENT_ORIG RUL.PROCENT%TYPE; + V_DATAIN RUL.DATAIN%TYPE; + + V_CONT2 ACT.SCD%TYPE; + V_CONT3 ACT.SCD%TYPE; + V_ACONT2 ACT.ASCC%TYPE; + + V_EXPLICATIE ACT.EXPLICATIA%TYPE; + V_SUMA ACT.SUMA%TYPE; + V_INCASAT_CALCUL ACT.SUMA%TYPE; + + V_TIP_GESTIUNE NOM_GESTIUNI.NR_PAG%TYPE; + tab_stoc tab_stoc_type; + + V_CANTITATE STOC.CANTS%TYPE; + V_CANTITATE_RAMASA STOC.CANTS%TYPE; + V_DENUMIRE NOM_ARTICOLE.DENUMIRE%TYPE; + + V_VALOARE_PRET ACT.SUMA%TYPE; + V_VALOARE_PRETV ACT.SUMA%TYPE; + V_VALOARE_PRETV_ORIG ACT.SUMA%TYPE; + V_VALOARE_PRETVTVA ACT.SUMA%TYPE; + V_VALOARE_TVAV ACT.SUMA%TYPE; + V_VALOARE_TVAV_ORIG ACT.SUMA%TYPE; + V_VALOARE_ADAOS ACT.SUMA%TYPE; + V_VALOARE_ADAOS_ORIG ACT.SUMA%TYPE; + V_VALOARE_DIFERENTA_PRETV ACT.SUMA%TYPE; + V_VALOARE_DIFERENTA_TVAV ACT.SUMA%TYPE; + + V_PRET_ARE_TVA NUMBER(1) := 0; + V_PROC_TVAV RUL.PROC_TVAV%TYPE; + V_PROC_TVA ACT.PROC_TVA%TYPE; + V_TVA ACT.SUMA%TYPE; + -- V_ZECIMALE_PRET NUMBER(1) := pack_facturare.nzecimale_calcul_ach; + + V_TIP_INREG RUL.AN%TYPE; + BEGIN + IF pack_facturare.nid_sectie_stoc IS NULL THEN + BEGIN + SELECT B.ID_SECTIE + INTO V_ID_SECTIE + FROM CRM_POLITICI_PRETURI A + LEFT JOIN CRM_NOTE_VANZARI B + ON A.ID_NOTA = B.ID_NOTA + WHERE A.ID_POL = detalii_articol.id_pol; + EXCEPTION + WHEN NO_DATA_FOUND THEN + V_ID_SECTIE := 0; + END; + ELSE + V_ID_SECTIE := pack_facturare.nid_sectie_stoc; + END IF; + + V_EXPLICATIE := NULL; + + pack_facturare.calculeaza_pret(detalii_articol.pret, + detalii_articol.curs / + detalii_articol.multiplicator, + detalii_articol.id_valuta, + detalii_articol.proc_tvav, + detalii_articol.pret_cu_tva, + 2, + V_PRETV, + V_TVAV, + V_PRETVTVA); + + pack_facturare.calculeaza_pret(detalii_articol.discount_unitar, + detalii_articol.curs / + detalii_articol.multiplicator, + detalii_articol.id_valuta, + detalii_articol.proc_tvav, + detalii_articol.pret_cu_tva, + 2, + V_DISCOUNT_UNITAR, + V_DISCOUNT_TVA, + V_DISCOUNT_CU_TVA); + + -- modificare pentru discount evidentiat + IF pack_facturare.ndiscount_evidentiat = 0 THEN + V_PRETV := V_PRETV - V_DISCOUNT_UNITAR; + V_TVAV := V_TVAV - V_DISCOUNT_TVA; + V_PRETVTVA := V_PRETVTVA - V_DISCOUNT_CU_TVA; + V_DISCOUNT_UNITAR := 0; + V_DISCOUNT_TVA := 0; + V_DISCOUNT_CU_TVA := 0; + END IF; + + /* IF V_PRETVTVA <> 0 THEN + V_PROC_DISCOUNT := ROUND(V_DISCOUNT_CU_TVA / V_PRETVTVA, + pack_facturare.nzecimale_procent) * 100; + ELSE + V_PROC_DISCOUNT := 0; + END IF;*/ + + BEGIN + SELECT NR_PAG, NVL(ACONT, 'XXXX') + INTO V_TIP_GESTIUNE, V_ACONT_GEST + FROM NOM_GESTIUNI + WHERE ID_GESTIUNE = detalii_articol.id_gestiune + AND STERS = 0; + EXCEPTION + WHEN NO_DATA_FOUND THEN + RAISE_APPLICATION_ERROR(-20000, + 'Eroare la selectarea gestiunii! (FACT-019 : ' || + detalii_articol.id_gestiune || ')'); + END; + + CASE + WHEN pack_facturare.ntip = 27 THEN + -- (25026,27) - transfer catre subunitati pe baza de lucrare( 25036 - daca e cu scadere din gestiune ) + SELECT 1 as tip, + a.pret, + a.pretv, + a.acont, + a.cants, + a.cant + nvl(b.cant, 0) as cant, + a.cante + nvl(b.cante, 0) as cante, + a.tvav, + a.proc_tvav, + a.tva, + a.datain, + a.id_rul_aux, + a.pretd, + a.id_valuta, + a.lot, + a.adata_expirare, + a.serie, + a.id_lucrare_rez, + a.id_part_rez, + c.pretachctva + BULK COLLECT + INTO tab_stoc + FROM STOC a + LEFT JOIN (select sum(cant) as cant, + sum(cante) as cante, + id_articol, + id_gestiune, + cont, + acont, + serie, + pret, + pretv, + id_lucrare_rez, + id_part_rez, + proc_tvav, + id_rul_aux, + pretd, + id_valuta, + lot, + adata_expirare + from rul_temp + where an = 1 + group by id_articol, + id_gestiune, + cont, + acont, + serie, + pret, + pretv, + id_lucrare_rez, + id_part_rez, + proc_tvav, + id_rul_aux, + pretd, + id_valuta, + lot, + adata_expirare) B + ON A.ID_ARTICOL = B.ID_ARTICOL + AND A.ID_GESTIUNE = B.ID_GESTIUNE + AND NVL(A.CONT, 'XXXX') = NVL(B.CONT, 'XXXX') + AND NVL(A.ACONT, 'XXXX') = NVL(B.ACONT, 'XXXX') + AND A.PRET = B.PRET + AND A.PRETV = B.PRETV + AND NVL(A.SERIE, '+_') = NVL(B.SERIE, '+_') + AND NVL(A.ID_PART_REZ, 0) = NVL(B.ID_PART_REZ, 0) + AND NVL(A.ID_LUCRARE_REZ, 0) = NVL(B.ID_LUCRARE_REZ, 0) + AND A.PROC_TVAV = B.PROC_TVAV + AND NVL(A.ID_RUL_AUX, 0) = NVL(B.ID_RUL_AUX, 0) + AND NVL(A.PRETD, 0) = NVL(B.PRETD, 0) + AND NVL(A.ID_VALUTA, 0) = NVL(B.ID_VALUTA, 0) + AND NVL(A.LOT, '_') = NVL(B.LOT, '_') + AND NVL(A.ADATA_EXPIRARE, to_date('01011500', 'DDMMYYYY')) = + NVL(B.ADATA_EXPIRARE, to_date('01011500', 'DDMMYYYY')) + LEFT JOIN NOM_ARTICOLE C + ON A.ID_ARTICOL = C.ID_ARTICOL + WHERE NVL(A.ID_SUCURSALA, -99) = + NVL(pack_facturare.nid_sucursala, -99) + AND A.ID_ARTICOL = detalii_articol.id_articol + AND A.ID_GESTIUNE = detalii_articol.id_gestiune + AND NVL(A.CONT, 'XXXX') = detalii_articol.cont + AND A.LUNA = pack_facturare.nluna + AND A.AN = pack_facturare.nan + AND A.CANTS + A.CANT + NVL(B.CANT, 0) > + A.CANTE + NVL(B.CANTE, 0) + AND NVL(A.ID_LUCRARE_REZ, 0) = + NVL(detalii_articol.id_lucrare_rez, 0) + AND NVL(A.ID_PART_REZ, 0) = NVL(detalii_articol.id_part_rez, 0) + ORDER BY A.PRET; + WHEN pack_facturare.ntip = 30 THEN + -- (25029,30) - transfer catre subunitati pe baza de NIR ( 25039 - daca e cu scadere din gestiune ) + SELECT 1 as tip, + a.pret, + a.pretv, + a.acont, + a.cants, + a.cant + nvl(b.cant, 0) as cant, + a.cante + nvl(b.cante, 0) as cante, + a.tvav, + a.proc_tvav, + a.tva, + a.datain, + a.id_rul_aux, + a.pretd, + a.id_valuta, + a.lot, + a.adata_expirare, + a.serie, + a.id_lucrare_rez, + a.id_part_rez, + c.pretachctva + BULK COLLECT + INTO tab_stoc + FROM STOC A + LEFT JOIN (select sum(cant) as cant, + sum(cante) as cante, + id_articol, + id_gestiune, + cont, + acont, + serie, + pret, + pretv, + id_lucrare_rez, + id_part_rez, + proc_tvav, + id_rul_aux, + pretd, + id_valuta, + lot, + adata_expirare + from rul_temp + where an = 1 + group by id_articol, + id_gestiune, + cont, + acont, + serie, + pret, + pretv, + id_lucrare_rez, + id_part_rez, + proc_tvav, + id_rul_aux, + pretd, + id_valuta, + lot, + adata_expirare) B + ON A.ID_ARTICOL = B.ID_ARTICOL + AND A.ID_GESTIUNE = B.ID_GESTIUNE + AND NVL(A.CONT, 'XXXX') = NVL(B.CONT, 'XXXX') + AND NVL(A.ACONT, 'XXXX') = NVL(B.ACONT, 'XXXX') + AND A.PRET = B.PRET + AND A.PRETV = B.PRETV + AND NVL(A.SERIE, '+_') = NVL(B.SERIE, '+_') + AND NVL(A.ID_PART_REZ, 0) = NVL(B.ID_PART_REZ, 0) + AND NVL(A.ID_LUCRARE_REZ, 0) = NVL(B.ID_LUCRARE_REZ, 0) + AND A.PROC_TVAV = B.PROC_TVAV + AND NVL(A.ID_RUL_AUX, 0) = NVL(B.ID_RUL_AUX, 0) + AND A.PRETD = B.PRETD + AND NVL(A.ID_VALUTA, 0) = NVL(B.ID_VALUTA, 0) + AND NVL(A.LOT, '_') = NVL(B.LOT, '_') + AND NVL(A.ADATA_EXPIRARE, to_date('01011500', 'DDMMYYYY')) = + NVL(B.ADATA_EXPIRARE, to_date('01011500', 'DDMMYYYY')) + LEFT JOIN NOM_ARTICOLE C + ON A.ID_ARTICOL = C.ID_ARTICOL + WHERE NVL(A.ID_SUCURSALA, -99) = + NVL(pack_facturare.nid_sucursala, -99) + AND A.ID_ARTICOL = detalii_articol.id_articol + AND NVL(A.SERIE, '+_') = NVL(detalii_articol.serie, '+_') + AND A.ID_GESTIUNE = detalii_articol.id_gestiune + AND A.PRETV = V_PRETV + AND A.PRETD = detalii_articol.pretd + AND NVL(A.ID_VALUTA, 0) = + decode(detalii_articol.id_valutad, + -99, + 0, + NVL(detalii_articol.id_valutad, 0)) + AND A.PRET = detalii_articol.pret_achizitie + AND NVL(A.CONT, 'XXXX') = detalii_articol.cont + AND A.LUNA = pack_facturare.nluna + AND A.AN = pack_facturare.nan + AND A.CANTS + A.CANT + NVL(B.CANT, 0) > + A.CANTE + NVL(B.CANTE, 0) + AND NVL(A.ID_LUCRARE_REZ, 0) = + NVL(detalii_articol.id_lucrare_rez, 0) + AND NVL(A.ID_PART_REZ, 0) = NVL(detalii_articol.id_part_rez, 0) + /* AND NVL(ID_RUL_AUX, 0) = 0*/ + ORDER BY A.PRET; + ELSE + SELECT 1 as tip, + a.pret, + a.pretv, + a.acont, + a.cants, + a.cant + nvl(b.cant, 0) as cant, + a.cante + nvl(b.cante, 0) as cante, + a.tvav, + a.proc_tvav, + a.tva, + a.datain, + a.id_rul_aux, + a.pretd, + a.id_valuta, + a.lot, + a.adata_expirare, + a.serie, + a.id_lucrare_rez, + a.id_part_rez, + c.pretachctva + BULK COLLECT + INTO tab_stoc + FROM STOC A + LEFT JOIN (select sum(cant) as cant, + sum(cante) as cante, + id_articol, + id_gestiune, + cont, + acont, + serie, + pret, + pretv, + id_lucrare_rez, + id_part_rez, + proc_tvav, + id_rul_aux, + pretd, + id_valuta, + lot, + adata_expirare + from rul_temp + where an = 1 + group by id_articol, + id_gestiune, + cont, + acont, + serie, + pret, + pretv, + id_lucrare_rez, + id_part_rez, + proc_tvav, + id_rul_aux, + pretd, + id_valuta, + lot, + adata_expirare) B + ON A.ID_ARTICOL = B.ID_ARTICOL + AND A.ID_GESTIUNE = B.ID_GESTIUNE + AND NVL(A.CONT, 'XXXX') = NVL(B.CONT, 'XXXX') + AND NVL(A.ACONT, 'XXXX') = NVL(B.ACONT, 'XXXX') + AND A.PRET = B.PRET + AND A.PRETV = B.PRETV + AND NVL(A.SERIE, '+_') = NVL(B.SERIE, '+_') + AND NVL(A.ID_PART_REZ, 0) = NVL(B.ID_PART_REZ, 0) + AND NVL(A.ID_LUCRARE_REZ, 0) = NVL(B.ID_LUCRARE_REZ, 0) + AND A.PROC_TVAV = B.PROC_TVAV + AND NVL(A.ID_RUL_AUX, 0) = NVL(B.ID_RUL_AUX, 0) + AND A.PRETD = B.PRETD + AND NVL(A.ID_VALUTA, 0) = NVL(B.ID_VALUTA, 0) + AND NVL(A.LOT, '_') = NVL(B.LOT, '_') + AND NVL(A.ADATA_EXPIRARE, to_date('01011500', 'DDMMYYYY')) = + NVL(B.ADATA_EXPIRARE, to_date('01011500', 'DDMMYYYY')) + LEFT JOIN NOM_ARTICOLE C + ON A.ID_ARTICOL = C.ID_ARTICOL + WHERE NVL(A.ID_SUCURSALA, -99) = + NVL(pack_facturare.nid_sucursala, -99) + AND A.ID_ARTICOL = detalii_articol.id_articol + AND NVL(A.SERIE, '+_') = NVL(detalii_articol.serie, '+_') + AND A.ID_GESTIUNE = detalii_articol.id_gestiune + AND A.PRET = detalii_articol.pret_achizitie + AND A.PRETV = detalii_articol.pretv_orig -- modificare v 2.0.19 + AND NVL(A.CONT, 'XXXX') = detalii_articol.cont + AND A.LUNA = pack_facturare.nluna + AND A.AN = pack_facturare.nan + AND A.CANTS + A.CANT + NVL(B.CANT, 0) > + A.CANTE + NVL(B.CANTE, 0) + AND NVL(A.ID_LUCRARE_REZ, 0) = + NVL(detalii_articol.id_lucrare_rez, 0) + AND NVL(A.ID_PART_REZ, 0) = NVL(detalii_articol.id_part_rez, 0) + /* AND NVL(ID_RUL_AUX, 0) = 0*/ + ORDER BY PRET; + END CASE; + + IF SQL%ROWCOUNT = 0 THEN + BEGIN + SELECT DENUMIRE + INTO V_DENUMIRE + FROM NOM_ARTICOLE + WHERE ID_ARTICOL = detalii_articol.id_articol; + + RAISE_APPLICATION_ERROR(-20000, + 'Articolul ' || V_DENUMIRE || + ' nu mai e in stoc! (FACT-020)'); + EXCEPTION + WHEN NO_DATA_FOUND THEN + RAISE_APPLICATION_ERROR(-20000, + 'Unul dintre articole nu mai exista in stoc! (FACT-021 : ' || + detalii_articol.id_articol || ')'); + END; + END IF; + + V_CANTITATE_RAMASA := detalii_articol.cantitate; + + IF pack_facturare.ntip = 27 THEN + -- (25026,27) - transfer catre subunitati pe baza de lucrare( 25036 - daca e cu scadere din gestiune ) + DELETE FROM VANZARI_DETALII_TEMP + WHERE ID_TEMP = detalii_articol.id_temp; + END IF; + + FOR i IN tab_stoc.first .. tab_stoc.last LOOP + + EXIT WHEN V_CANTITATE_RAMASA = 0; + + V_TIP_INREG := 1; + V_TVA := tab_stoc(i).TVA; + V_PRET := tab_stoc(i).PRET; + V_PRETV_ORIG := tab_stoc(i).PRETV; + V_ACONT := tab_stoc(i).ACONT; + V_DATAIN := tab_stoc(i).DATAIN; + + V_CANTITATE := tab_stoc(i).CANTS + tab_stoc(i).CANT - tab_stoc(i).CANTE; + + IF V_CANTITATE_RAMASA >= V_CANTITATE THEN + V_CANTITATE_RAMASA := V_CANTITATE_RAMASA - V_CANTITATE; + ELSE + V_CANTITATE := V_CANTITATE_RAMASA; + V_CANTITATE_RAMASA := 0; + END IF; + + V_ADAOS := V_PRETV - V_PRET; + V_ADAOS_ORIG := V_PRETV_ORIG - V_PRET; + IF V_PRET <> 0 THEN + V_PROCENT := ROUND(V_ADAOS * 100 / V_PRET, + pack_facturare.nzecimale_procent); + V_PROCENT_ORIG := ROUND(V_ADAOS_ORIG * 100 / V_PRET, + pack_facturare.nzecimale_procent); + ELSE + V_PROCENT := 0; + V_PROCENT_ORIG := 0; + END IF; + + V_TVAV_ORIG := tab_stoc(i).TVAV; + + V_SUMA := 0; + V_INCASAT_CALCUL := 0; + + V_PRET_ARE_TVA := detalii_articol.pret_cu_tva; + V_PROC_TVAV := detalii_articol.proc_tvav; + V_VALOARE_TVAV := pack_facturare.calculeaza_total_tva(V_PRET => CASE + V_PRET_ARE_TVA + WHEN 0 THEN + V_PRETV + ELSE + V_PRETV + + V_TVAV + END, + V_AJUSTARE => 0, + V_CURS => 1, + V_DISCOUNT_UNITAR => CASE + V_PRET_ARE_TVA + WHEN 0 THEN + V_DISCOUNT_UNITAR + ELSE + V_DISCOUNT_CU_TVA + END, + V_DISCOUNT_EVIDENTIAT => pack_facturare.ndiscount_evidentiat, + V_CANTITATE => V_CANTITATE, + V_PRET_CU_TVA => V_PRET_ARE_TVA, + V_PROC_TVAV => V_PROC_TVAV, + V_ZECIMALE_PRET => pack_sesiune.nzecimale_pretv, + V_ZECIMALE_SUMA => pack_sesiune.nzecimale_sumav); + /* V_VALOARE_TVAV_ORIG := pack_facturare.calculeaza_total_tva(V_PRET => CASE V_PRET_ARE_TVA WHEN 0 THEN V_PRETV_ORIG ELSE V_PRETV_ORIG + V_TVAV_ORIG END, V_AJUSTARE => 0, V_CURS => 1, V_DISCOUNT_UNITAR => 0, V_DISCOUNT_EVIDENTIAT => pack_facturare.ndiscount_evidentiat, V_CANTITATE => V_CANTITATE, V_PRET_CU_TVA => V_PRET_ARE_TVA, V_PROC_TVAV => V_PROC_TVAV, V_ZECIMALE_PRET => V_ZECIMALE_PRET);*/ + V_VALOARE_TVAV_ORIG := pack_facturare.calculeaza_total_tva(V_PRET => CASE + V_PRET_ARE_TVA + WHEN 0 THEN + V_PRETV_ORIG + ELSE + V_PRETV_ORIG + + V_TVAV_ORIG + END, + V_AJUSTARE => 0, + V_CURS => 1, + V_DISCOUNT_UNITAR => 0, + V_DISCOUNT_EVIDENTIAT => pack_facturare.ndiscount_evidentiat, + V_CANTITATE => V_CANTITATE, + V_PRET_CU_TVA => V_PRET_ARE_TVA, + V_PROC_TVAV => pack_sesiune.TVA2PROCTVA(V_TVAV_ORIG, + V_PRETV_ORIG, + pack_facturare.nan, + pack_facturare.nluna), + V_ZECIMALE_PRET => pack_sesiune.nzecimale_pretv, + V_ZECIMALE_SUMA => pack_sesiune.nzecimale_sumav); + V_VALOARE_DIFERENTA_TVAV := V_VALOARE_TVAV - V_VALOARE_TVAV_ORIG; + V_VALOARE_PRETV := pack_facturare.calculeaza_total_fara_tva(V_PRET => CASE + V_PRET_ARE_TVA + WHEN 0 THEN + V_PRETV + ELSE + V_PRETV + + V_TVAV + END, + V_AJUSTARE => 0, + V_CURS => 1, + V_DISCOUNT_UNITAR => CASE + V_PRET_ARE_TVA + WHEN 0 THEN + V_DISCOUNT_UNITAR + ELSE + V_DISCOUNT_CU_TVA + END, + V_DISCOUNT_EVIDENTIAT => pack_facturare.ndiscount_evidentiat, + V_CANTITATE => V_CANTITATE, + V_PRET_CU_TVA => V_PRET_ARE_TVA, + V_PROC_TVAV => V_PROC_TVAV, + V_ZECIMALE_PRET => pack_sesiune.nzecimale_pretv, + V_ZECIMALE_SUMA => pack_sesiune.nzecimale_sumav); + /* V_VALOARE_PRETV_ORIG := pack_facturare.calculeaza_total_fara_tva(V_PRET => CASE V_PRET_ARE_TVA WHEN 0 THEN V_PRETV_ORIG ELSE V_PRETV_ORIG + V_TVAV_ORIG END, V_AJUSTARE => 0, V_CURS => 1, V_DISCOUNT_UNITAR => 0, V_DISCOUNT_EVIDENTIAT => pack_facturare.ndiscount_evidentiat, V_CANTITATE => V_CANTITATE, V_PRET_CU_TVA => V_PRET_ARE_TVA, V_PROC_TVAV => V_PROC_TVAV, V_ZECIMALE_PRET => V_ZECIMALE_PRET);*/ + V_VALOARE_PRETV_ORIG := pack_facturare.calculeaza_total_fara_tva(V_PRET => CASE + V_PRET_ARE_TVA + WHEN 0 THEN + V_PRETV_ORIG + ELSE + V_PRETV_ORIG + + V_TVAV_ORIG + END, + V_AJUSTARE => 0, + V_CURS => 1, + V_DISCOUNT_UNITAR => 0, + V_DISCOUNT_EVIDENTIAT => pack_facturare.ndiscount_evidentiat, + V_CANTITATE => V_CANTITATE, + V_PRET_CU_TVA => V_PRET_ARE_TVA, + V_PROC_TVAV => pack_sesiune.TVA2PROCTVA(V_TVAV_ORIG, + V_PRETV_ORIG, + pack_facturare.nan, + pack_facturare.nluna), + V_ZECIMALE_PRET => pack_sesiune.nzecimale_pretv, + V_ZECIMALE_SUMA => pack_sesiune.nzecimale_sumav); + V_VALOARE_DIFERENTA_PRETV := V_VALOARE_PRETV - V_VALOARE_PRETV_ORIG; + V_VALOARE_PRETVTVA := pack_facturare.calculeaza_total_cu_tva(V_PRET => CASE + V_PRET_ARE_TVA + WHEN 0 THEN + V_PRETV + ELSE + V_PRETV + + V_TVAV + END, + V_AJUSTARE => 0, + V_CURS => 1, + V_DISCOUNT_UNITAR => CASE + V_PRET_ARE_TVA + WHEN 0 THEN + V_DISCOUNT_UNITAR + ELSE + V_DISCOUNT_CU_TVA + END, + V_DISCOUNT_EVIDENTIAT => pack_facturare.ndiscount_evidentiat, + V_CANTITATE => V_CANTITATE, + V_PRET_CU_TVA => V_PRET_ARE_TVA, + V_PROC_TVAV => V_PROC_TVAV, + V_ZECIMALE_PRET => pack_sesiune.nzecimale_pretv, + V_ZECIMALE_SUMA => pack_sesiune.nzecimale_sumav); + + V_PROC_TVA := pack_sesiune.TVA2PROCTVA(V_TVA, + V_PRET, + pack_facturare.nan, + pack_facturare.nluna); + V_VALOARE_PRET := pack_facturare.calculeaza_total_fara_tva(V_PRET => (CASE + WHEN tab_stoc(i).pretachctva = 1 THEN + V_PRET + V_TVA + ELSE + V_PRET + END), + V_AJUSTARE => 0, + V_CURS => 1, + V_DISCOUNT_UNITAR => 0, + V_DISCOUNT_EVIDENTIAT => pack_facturare.ndiscount_evidentiat, + V_CANTITATE => V_CANTITATE, + V_PRET_CU_TVA => tab_stoc(i).pretachctva, + V_PROC_TVAV => V_PROC_TVA, + V_ZECIMALE_PRET => pack_sesiune.nzecimale_preta, + V_ZECIMALE_SUMA => pack_sesiune.nzecimale_sumaa); + + V_VALOARE_ADAOS := V_VALOARE_PRETV - V_VALOARE_PRET; + V_VALOARE_ADAOS_ORIG := V_VALOARE_PRETV_ORIG - V_VALOARE_PRET; + + -- 08.11.2010 + -- (25040,41) - retur transfer catre subunitati lista pret ( 25050 - daca e cu scadere din gestiune ) + -- la retur transfer, trebuie schimbat semnul diferentei de pret + if pack_facturare.ntip = 41 then + V_VALOARE_DIFERENTA_TVAV := -V_VALOARE_DIFERENTA_TVAV; + V_VALOARE_DIFERENTA_PRETV := -V_VALOARE_DIFERENTA_PRETV; + end if; + -- 08.11.2010 ^ + + CASE + WHEN detalii_articol.cont IN ('341', '345', '346', '381') THEN + -- x - 345 / 341 / 346 / 381 + IF detalii_articol.cont = '381' THEN + V_CONT2 := '388'; + V_CONT3 := detalii_articol.cont; + ELSE + V_CONT2 := '348'; + V_CONT3 := '711'; + END IF; + + V_INCASAT_CALCUL := pack_facturare.scrie_nota(1, + V_VALOARE_PRET, + 0, -- DISCOUNT_UNITAR + 0, -- PRET CU TVA + pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA + 0, -- V_IN_VALUTA + 0, -- V_CURS, + 0, -- ID_VENCHELT + V_ID_SECTIE, + NULL, -- V_ID_CTR + V_EXPLICATIE, + (case + when pack_facturare.ntip = 41 then + detalii_articol.cont + else + pack_facturare.v_date_gestiune.cont + end), -- scd + (case + when pack_facturare.ntip = 41 then + REPLACE(V_ACONT, 'X', '') + else + REPLACE(pack_facturare.v_date_gestiune.acont, + 'X', + '') + end), -- ascd + (case + when pack_facturare.ntip = 41 then + pack_facturare.v_date_gestiune.cont + else + detalii_articol.cont + end), -- scc + (case + when pack_facturare.ntip = 41 then + REPLACE(pack_facturare.v_date_gestiune.acont, + 'X', + '') + else + REPLACE(V_ACONT, 'X', '') + end), -- ascc + (case + when pack_facturare.ntip = 41 then + detalii_articol.id_gestiune + else + pack_facturare.v_date_gestiune.id_gestiune + end), -- gestin + (case + when pack_facturare.ntip = 41 then + pack_facturare.v_date_gestiune.id_gestiune + else + detalii_articol.id_gestiune + end), -- gestout + 1, + 0, + 0, + NULL); + + IF V_VALOARE_ADAOS <> 0 THEN + -- 341 / 345 / 346 - 348 / 381 - 388 + V_INCASAT_CALCUL := pack_facturare.scrie_nota(1, + V_VALOARE_ADAOS, + 0, -- DISCOUNT_UNITAR + 0, -- PRET CU TVA + pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA + 0, -- V_IN_VALUTA + 0, -- V_CURS, + 0, -- ID_VENCHELT + V_ID_SECTIE, + NULL, -- V_ID_CTR + V_EXPLICATIE, + detalii_articol.cont, + REPLACE(V_ACONT, + 'X', + ''), + V_CONT2, + NULL, + pack_facturare.v_date_gestiune.id_gestiune, -- V_ID_GESTIN + detalii_articol.id_gestiune, + 2, + 0, + 0, + NULL); + + -- 348 - 711 / 388 - 381 + IF V_CONT3 = '711' THEN + V_ACONT2 := NULL; + ELSE + V_ACONT2 := REPLACE(V_ACONT, 'X'); + END IF; + + V_INCASAT_CALCUL := pack_facturare.scrie_nota(1, + V_VALOARE_ADAOS, + 0, -- DISCOUNT_UNITAR + 0, -- PRET CU TVA + pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA + 0, -- V_IN_VALUTA + 0, -- V_CURS, + 0, -- ID_VENCHELT + V_ID_SECTIE, + NULL, -- V_ID_CTR + V_EXPLICATIE, + V_CONT2, + NULL, + V_CONT3, + V_ACONT2, + 0, -- V_ID_GESTIN + detalii_articol.id_gestiune, + 2, + 0, + 0, + NULL); + + END IF; + + WHEN V_TIP_GESTIUNE <> 6 AND + pack_facturare.v_date_gestiune.id_tip_gest <> 6 THEN + + V_INCASAT_CALCUL := pack_facturare.scrie_nota(1, + V_VALOARE_PRET, + 0, -- DISCOUNT_UNITAR + 0, -- PRET CU TVA + pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA + 0, -- V_IN_VALUTA + 0, -- V_CURS, + 0, -- ID_VENCHELT + V_ID_SECTIE, + NULL, -- V_ID_CTR + V_EXPLICATIE, + (case + when pack_facturare.ntip = 41 then + detalii_articol.cont + else + pack_facturare.v_date_gestiune.cont + end), -- scd + (case + when pack_facturare.ntip = 41 then + REPLACE(V_ACONT, 'X') + else + REPLACE(pack_facturare.v_date_gestiune.acont, 'X') + end), -- ascd + (case + when pack_facturare.ntip = 41 then + pack_facturare.v_date_gestiune.cont + else + detalii_articol.cont + end), -- scc + (case + when pack_facturare.ntip = 41 then + REPLACE(pack_facturare.v_date_gestiune.acont, 'X') + else + REPLACE(V_ACONT, 'X') + end), -- ascc + (case + when pack_facturare.ntip = 41 then + detalii_articol.id_gestiune + else + pack_facturare.v_date_gestiune.id_gestiune + end), -- id_gestin + (case + when pack_facturare.ntip = 41 then + pack_facturare.v_date_gestiune.id_gestiune + else + detalii_articol.id_gestiune + end), -- id_gestout + 3, + 0, + 0, + NULL); + + IF V_TIP_GESTIUNE = 7 AND + (V_PRETV_ORIG <> V_PRETV OR V_TVAV_ORIG <> V_TVAV OR + V_DISCOUNT_UNITAR <> 0) THEN + + INSERT INTO rul_temp + (AN, + ID_ARTICOL, + SERIE, + ID_GESTIUNE, + ID_LUCRARE, + ID_RESPONSABIL, + NRACT, + SERIE_ACT, + CANT, + CANTE, + CONT, + ACONT, + PRETV, + TVAV, + PRETVTVA, + PROC_TVAV, + PROC_TVA, + PRET, + TVA, + ADAOS, + PROCENT, + DATAACT, + NNIR, + DATAIN, + DATAOUT, + PRETD, + ID_VALUTA, + ID_SET, + ID_TIP_RULAJ, + LOT, + ADATA_EXPIRARE, + ID_RUL_AUX, + ID_LUCRARE_REZ, + ID_PART_REZ) + SELECT decode(rownum, 1, V_TIP_INREG, 0), + detalii_articol.id_articol, + tab_stoc(i).serie, + detalii_articol.id_gestiune, + nvl(pack_facturare.nid_lucrare, 0), + pack_facturare.nid_responsabil, + pack_facturare.nnumar_act, + pack_facturare.cserie_act, + -- decode(rownum, 2, V_CANTITATE, 0) as CANT, + (case + when (rownum = 1 and pack_facturare.ntip = 41) or + (rownum = 2 and pack_facturare.ntip <> 41) then + V_CANTITATE + else + 0 + end) as CANT, + -- decode(rownum, 1, V_CANTITATE, 0) as CANTE, + (case + when (rownum = 2 and pack_facturare.ntip = 41) or + (rownum = 1 and pack_facturare.ntip <> 41) then + V_CANTITATE + else + 0 + end) as CANTE, + detalii_articol.cont as CONT, + REPLACE(V_ACONT, 'X', '') as ACONT, + decode(rownum, 1, V_PRETV_ORIG, V_PRETV) as PRETV, + decode(rownum, 1, tab_stoc(i).tvav, V_TVAV) as TVAV, + decode(rownum, + 1, + tab_stoc(i).pretv + tab_stoc(i).tvav, + V_PRETVTVA) as PRETVTVA, + decode(rownum, + 1, + tab_stoc(i).proc_Tvav, + detalii_articol.proc_tvav) as PROC_TVAV, + V_PROC_TVA as PROC_TVA, + V_PRET as PRET, + V_TVA AS TVA, + decode(rownum, 1, V_ADAOS_ORIG, V_ADAOS) as ADAOS, + decode(rownum, 1, V_PROCENT_ORIG, V_PROCENT) as PROCENT, + pack_facturare.ddata_act, + pack_facturare.nnumar_bon, + decode(rownum, + 1, + tab_stoc(i).datain, + pack_facturare.ddata_act) as datain, + decode(rownum, 1, pack_facturare.ddata_act, null) as dataout, + tab_stoc(i).pretd, + tab_stoc(i).id_valuta, + pack_facturare.nid_set, + 3 as ID_TIP_RULAJ, + tab_stoc(i).lot, + tab_stoc(i).adata_expirare, + tab_stoc(i).id_rul_aux, + tab_stoc(i).ID_LUCRARE_REZ, + tab_stoc(i).ID_PART_REZ + FROM dual + CONNECT BY level <= 2; + + V_TIP_INREG := V_TIP_INREG - 1; + V_DATAIN := pack_facturare.ddata_act; + + END IF; + + WHEN V_TIP_GESTIUNE = pack_facturare.v_date_gestiune.id_tip_gest AND + pack_facturare.v_date_gestiune.id_tip_gest = 6 THEN + -- SCHIMB PRETUL DE VANZARE IN GESTIUNEA SURSA SI APOI IL TRANSFER LA NOUL PRET DE VANZARE + V_INCASAT_CALCUL := pack_facturare.scrie_nota(1, + V_VALOARE_PRETVTVA, + 0, -- DISCOUNT_UNITAR + 0, -- PRET CU TVA + pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA + 0, -- V_IN_VALUTA + 0, -- V_CURS, + 0, -- ID_VENCHELT + V_ID_SECTIE, + NULL, -- V_ID_CTR + V_EXPLICATIE, + (case + when pack_facturare.ntip = 41 then + detalii_articol.cont + else + pack_facturare.v_date_gestiune.cont + end), -- scd + (case + when pack_facturare.ntip = 41 then + REPLACE(V_ACONT, 'X') + else + REPLACE(pack_facturare.v_date_gestiune.acont, 'X') + end), -- ascd + (case + when pack_facturare.ntip = 41 then + pack_facturare.v_date_gestiune.cont + else + detalii_articol.cont + end), -- scc + (case + when pack_facturare.ntip = 41 then + REPLACE(pack_facturare.v_date_gestiune.acont, 'X') + else + REPLACE(V_ACONT, 'X') + end), -- ascc + (case + when pack_facturare.ntip = 41 then + detalii_articol.id_gestiune + else + pack_facturare.v_date_gestiune.id_gestiune + end), -- id_gestin + (case + when pack_facturare.ntip = 41 then + pack_facturare.v_date_gestiune.id_gestiune + else + detalii_articol.id_gestiune + end), -- id_gestout + 4, + 0, + 0, + NULL); + + IF V_TIP_GESTIUNE = 6 AND + (V_PRETV_ORIG <> V_PRETV OR V_TVAV_ORIG <> V_TVAV OR + V_DISCOUNT_UNITAR <> 0) THEN + -- SCHIMB PRETUL DE VANZARE IN GESTIUNEA SURSA SI APOI IL TRANSFER LA NOUL PRET DE VANZARE + --371-378 + V_INCASAT_CALCUL := pack_facturare.scrie_nota(1, + V_VALOARE_DIFERENTA_PRETV, + 0, -- DISCOUNT_UNITAR + 0, -- PRET CU TVA + pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA + 0, -- V_IN_VALUTA + 0, -- V_CURS, + 0, -- ID_VENCHELT + V_ID_SECTIE, + NULL, -- V_ID_CTR + V_EXPLICATIE, + '371', + REPLACE(V_ACONT, -- pack_facturare.v_date_gestiune.acont, + 'X'), + '378', + NULL, -- pack_facturare.v_date_gestiune.acont, + detalii_articol.id_gestiune, + detalii_articol.id_gestiune, -- pack_facturare.v_date_gestiune.id_gestiune, + 5, + 0, + (detalii_articol.proc_tvav - 1) * 100, + NULL); + --371-4428 + V_INCASAT_CALCUL := pack_facturare.scrie_nota(1, + V_VALOARE_DIFERENTA_TVAV, + 0, -- DISCOUNT_UNITAR + 0, -- PRET CU TVA + pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA + 0, -- V_IN_VALUTA + 0, -- V_CURS, + 0, -- ID_VENCHELT + V_ID_SECTIE, + NULL, -- V_ID_CTR + V_EXPLICATIE, + '371', + REPLACE(V_ACONT, -- pack_facturare.v_date_gestiune.acont, + 'X'), + '4428', + NULL, + detalii_articol.id_gestiune, + detalii_articol.id_gestiune, -- pack_facturare.v_date_gestiune.id_gestiune, + 5, + 0, + (detalii_articol.proc_tvav - 1) * 100, + NULL); + + IF V_DISCOUNT_UNITAR = 0 THEN + INSERT INTO rul_temp + (AN, + ID_ARTICOL, + SERIE, + ID_GESTIUNE, + ID_GESTIUNEC, + ID_LUCRARE, + ID_RESPONSABIL, + NRACT, + SERIE_ACT, + CANT, + CANTE, + CONT, + ACONT, + PRETV, + TVAV, + PRETVTVA, + PROC_TVAV, + PROC_TVA, + PRET, + TVA, + ADAOS, + PROCENT, + DATAACT, + NNIR, + DATAIN, + DATAOUT, + PRETD, + ID_VALUTA, + ID_SET, + ID_TIP_RULAJ, + LOT, + ADATA_EXPIRARE, + ID_RUL_AUX, + ID_LUCRARE_REZ, + ID_PART_REZ) + SELECT decode(rownum, 1, V_TIP_INREG, 0), + detalii_articol.id_articol, + tab_stoc(i).serie, + detalii_articol.id_gestiune, + pack_facturare.v_date_gestiune.id_gestiune, + nvl(pack_facturare.nid_lucrare, 0), + pack_facturare.nid_responsabil, + pack_facturare.nnumar_act, + pack_facturare.cserie_act, + -- decode(rownum, 2, V_CANTITATE, 0) as CANT, + (case + when (rownum = 1 and pack_facturare.ntip = 41) or + (rownum = 2 and pack_facturare.ntip <> 41) then + V_CANTITATE + else + 0 + end) as CANT, + -- decode(rownum, 1, V_CANTITATE, 0) as CANTE, + (case + when (rownum = 2 and pack_facturare.ntip = 41) or + (rownum = 1 and pack_facturare.ntip <> 41) then + V_CANTITATE + else + 0 + end) as CANTE, + detalii_articol.cont as CONT, + REPLACE(V_ACONT, 'X', '') as ACONT, + decode(rownum, 1, V_PRETV_ORIG, V_PRETV) as PRETV, + decode(rownum, 1, tab_stoc(i).tvav, V_TVAV) as TVAV, + decode(rownum, + 1, + tab_stoc(i).pretv + tab_stoc(i).tvav, + V_PRETVTVA) as PRETVTVA, + decode(rownum, + 1, + tab_stoc(i).proc_Tvav, + detalii_articol.proc_tvav) as PROC_TVAV, + V_PROC_TVA as PROC_TVA, + V_PRET as PRET, + V_TVA AS TVA, + decode(rownum, 1, V_ADAOS_ORIG, V_ADAOS) as ADAOS, + decode(rownum, 1, V_PROCENT_ORIG, V_PROCENT) as PROCENT, + pack_facturare.ddata_act, + pack_facturare.nnumar_bon, + decode(rownum, + 1, + tab_stoc(i).datain, + pack_facturare.ddata_act) as datain, + decode(rownum, 1, pack_facturare.ddata_act, null) as dataout, + tab_stoc(i).pretd, + tab_stoc(i).id_valuta, + pack_facturare.nid_set, + 3 as ID_TIP_RULAJ, + tab_stoc(i).lot, + tab_stoc(i).adata_expirare, + tab_stoc(i).id_rul_aux, + tab_stoc(i).ID_LUCRARE_REZ, + tab_stoc(i).ID_PART_REZ + FROM dual + CONNECT BY level <= 2; + + V_TIP_INREG := V_TIP_INREG - 1; + V_DATAIN := pack_facturare.ddata_act; + END IF; + END IF; + + -- daca are analitice la adaos : trebuie sa transfer adaosul dintr-un analitic in altul + IF pack_facturare.nanalitice_378 = 1 THEN + -- 378 - 378 + V_INCASAT_CALCUL := scrie_nota(1, + V_VALOARE_ADAOS, + 0, -- DISCOUNT_UNITAR + 0, -- PRET CU TVA + pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA + 0, -- V_IN_VALUTA + 0, -- V_CURS, + 0, -- ID_VENCHELT + V_ID_SECTIE, + NULL, -- V_ID_CTR + V_EXPLICATIE, + '378', -- scd + Null, -- ascd + '378', -- scc + Null, -- ascc + (case + when pack_facturare.ntip = 41 then + pack_facturare.v_date_gestiune.id_gestiune + else + detalii_articol.id_gestiune + end), -- id_gestin + (case + when pack_facturare.ntip = 41 then + detalii_articol.id_gestiune + else + pack_facturare.v_date_gestiune.id_gestiune + end), -- id_gestout + 4, + 0, + 0, + NULL); + + IF NVL(V_ACONT, '') <> + NVL(pack_facturare.v_date_gestiune.acont, '') THEN + -- 4428 - 4428 + V_INCASAT_CALCUL := scrie_nota(1, + V_VALOARE_TVAV, + 0, -- DISCOUNT_UNITAR + 0, -- PRET CU TVA + pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA + 0, -- V_IN_VALUTA + 0, -- V_CURS, + 0, -- ID_VENCHELT + V_ID_SECTIE, + NULL, -- V_ID_CTR + V_EXPLICATIE, + '4428', -- scd + Null, -- ascd + '4428', -- scc + Null, -- ascc + (case + when pack_facturare.ntip = 41 then + pack_facturare.v_date_gestiune.id_gestiune + else + detalii_articol.id_gestiune + end), -- id_gestin + (case + when pack_facturare.ntip = 41 then + detalii_articol.id_gestiune + else + pack_facturare.v_date_gestiune.id_gestiune + end), -- id_gestout + 4, + 0, + 0, + NULL); + END IF; + + END IF; + + WHEN (V_TIP_GESTIUNE IN (4, 5, 7) AND + pack_facturare.v_date_gestiune.id_tip_gest = 6 and + pack_facturare.ntip <> 41) OR + (pack_facturare.ntip = 41 AND V_TIP_GESTIUNE = 6 AND + pack_facturare.v_date_gestiune.id_tip_gest IN (4, 5, 7)) THEN + -- achizitie > vanzare + -- 371- x + V_INCASAT_CALCUL := pack_facturare.scrie_nota(1, + V_VALOARE_PRET, + 0, -- DISCOUNT_UNITAR + 0, -- PRET CU TVA + pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA + 0, -- V_IN_VALUTA + 0, -- V_CURS, + 0, -- V_ID_VENCHELT + V_ID_SECTIE, + NULL, -- V_ID_CTR + V_EXPLICATIE, + (case + when pack_facturare.ntip = 41 then + detalii_articol.cont + else + '371' + end), -- scd + (case + when pack_facturare.ntip = 41 then + REPLACE(V_ACONT, 'X') + else + REPLACE(pack_facturare.v_date_gestiune.acont, 'X') + end), --ascd + (case + when pack_facturare.ntip = 41 then + '371' + else + detalii_articol.cont + end), -- scc + (case + when pack_facturare.ntip = 41 then + REPLACE(pack_facturare.v_date_gestiune.acont, 'X') + else + REPLACE(V_ACONT, 'X') + end), -- ascc + (case + when pack_facturare.ntip = 41 then + detalii_articol.id_gestiune + else + pack_facturare.v_date_gestiune.id_gestiune + end), -- id_gestin + (case + when pack_facturare.ntip = 41 then + pack_facturare.v_date_gestiune.id_gestiune + else + detalii_articol.id_gestiune + end), -- id_gestout + 6, + 0, + 0, + NULL); + --371-378 + V_INCASAT_CALCUL := pack_facturare.scrie_nota(1, + V_VALOARE_ADAOS, + 0, -- DISCOUNT_UNITAR + + 0, -- PRET CU TVA + pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA + 0, -- V_IN_VALUTA + 0, -- V_CURS, + 0, -- V_ID_VENCHELT + V_ID_SECTIE, + NULL, -- V_ID_CTR + V_EXPLICATIE, + '371', -- scd + (case + when pack_facturare.ntip = 41 then + REPLACE(V_ACONT, 'X') + else + REPLACE(pack_facturare.v_date_gestiune.acont, 'X') + end), -- ascd + '378', + NULL, -- ascc + (case + when pack_facturare.ntip <> 41 then + pack_facturare.v_date_gestiune.id_gestiune + else + detalii_articol.id_gestiune + end), -- id_gestin + (case + when pack_facturare.ntip <> 41 then + pack_facturare.v_date_gestiune.id_gestiune + else + detalii_articol.id_gestiune + end), -- id_gestout + 6, + 0, + 0, + NULL); + + --371-4428 + V_INCASAT_CALCUL := pack_facturare.scrie_nota(1, + V_VALOARE_TVAV, + 0, -- DISCOUNT_UNITAR + + 0, -- PRET CU TVA + pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA + 0, -- V_IN_VALUTA + 0, -- V_CURS, + 0, -- ID_VENCHELT + V_ID_SECTIE, + NULL, -- V_ID_CTR + V_EXPLICATIE, + '371', -- scd + (case + when pack_facturare.ntip <> 41 then + REPLACE(pack_facturare.v_date_gestiune.acont, 'X') + else + REPLACE(V_ACONT, 'X') + end), -- ascd + '4428', + NULL, -- ascc + (case + when pack_facturare.ntip <> 41 then + pack_facturare.v_date_gestiune.id_gestiune + else + detalii_articol.id_gestiune + end), -- id_gestin + (case + when pack_facturare.ntip <> 41 then + pack_facturare.v_date_gestiune.id_gestiune + else + detalii_articol.id_gestiune + end), -- id_gestout + 6, + 0, + (detalii_articol.proc_tvav - 1) * 100, + NULL); + + IF ((V_TIP_GESTIUNE = 7 AND pack_facturare.ntip <> 41) or + (pack_facturare.v_date_gestiune.id_tip_gest = 7 AND + pack_facturare.ntip = 41)) AND + (V_PRETV_ORIG <> V_PRETV OR V_TVAV_ORIG <> V_TVAV OR + V_DISCOUNT_UNITAR <> 0) THEN + + IF pack_facturare.v_date_gestiune.id_tip_gest = 7 and + V_TIP_GESTIUNE = 6 and pack_facturare.ntip = 41 THEN + -- 371-378 + V_INCASAT_CALCUL := pack_facturare.scrie_nota(1, + V_VALOARE_DIFERENTA_PRETV, + 0, -- DISCOUNT_UNITAR + 0, -- PRET CU TVA + pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA + 0, -- V_IN_VALUTA + 0, -- V_CURS, + 0, -- ID_VENCHELT + V_ID_SECTIE, + NULL, -- V_ID_CTR + V_EXPLICATIE, + '371', + REPLACE(V_ACONT, + 'X'), + '378', + NULL, + detalii_articol.id_gestiune, + detalii_articol.id_gestiune, + 7, + 0, + (detalii_articol.proc_tvav - 1) * 100, + NULL); + --371-4428 + V_INCASAT_CALCUL := pack_facturare.scrie_nota(1, + V_VALOARE_DIFERENTA_TVAV, + 0, -- DISCOUNT_UNITAR + 0, -- PRET CU TVA + pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA + 0, -- V_IN_VALUTA + 0, -- V_CURS, + 0, -- ID_VENCHELT + V_ID_SECTIE, + NULL, -- V_ID_CTR + V_EXPLICATIE, + '371', + REPLACE(V_ACONT, + 'X'), + '4428', + NULL, + detalii_articol.id_gestiune, + detalii_articol.id_gestiune, + 7, + 0, + (detalii_articol.proc_tvav - 1) * 100, + NULL); + + END IF; + + IF V_DISCOUNT_UNITAR = 0 THEN + INSERT INTO rul_temp + (AN, + ID_ARTICOL, + SERIE, + ID_GESTIUNE, + ID_LUCRARE, + ID_RESPONSABIL, + NRACT, + SERIE_ACT, + CANT, + CANTE, + CONT, + ACONT, + PRETV, + TVAV, + PRETVTVA, + PROC_TVAV, + PROC_TVA, + PRET, + TVA, + ADAOS, + PROCENT, + DATAACT, + NNIR, + DATAIN, + DATAOUT, + PRETD, + ID_VALUTA, + ID_SET, + ID_TIP_RULAJ, + LOT, + ADATA_EXPIRARE, + ID_RUL_AUX, + ID_LUCRARE_REZ, + ID_PART_REZ) + SELECT decode(rownum, 1, V_TIP_INREG, 0), + detalii_articol.id_articol, + tab_stoc(i).serie, + detalii_articol.id_gestiune, + nvl(pack_facturare.nid_lucrare, 0), + pack_facturare.nid_responsabil, + pack_facturare.nnumar_act, + pack_facturare.cserie_act, + (case + when (rownum = 1 and pack_facturare.ntip = 41) or + (rownum = 2 and pack_facturare.ntip <> 41) then + V_CANTITATE + else + 0 + end) as CANT, + (case + when (rownum = 2 and pack_facturare.ntip = 41) or + (rownum = 1 and pack_facturare.ntip <> 41) then + V_CANTITATE + else + 0 + end) as CANTE, + detalii_articol.cont as CONT, + REPLACE(V_ACONT, 'X', '') as ACONT, + decode(rownum, 1, V_PRETV_ORIG, V_PRETV) as PRETV, + decode(rownum, 1, tab_stoc(i).tvav, V_TVAV) as TVAV, + decode(rownum, + 1, + tab_stoc(i).pretv + tab_stoc(i).tvav, + V_PRETVTVA) as PRETVTVA, + decode(rownum, + 1, + tab_stoc(i).proc_Tvav, + detalii_articol.proc_tvav) as PROC_TVAV, + V_PROC_TVA as PROC_TVA, + V_PRET as PRET, + V_TVA AS TVA, + decode(rownum, 1, V_ADAOS_ORIG, V_ADAOS) as ADAOS, + decode(rownum, 1, V_PROCENT_ORIG, V_PROCENT) as PROCENT, + pack_facturare.ddata_act, + pack_facturare.nnumar_bon, + decode(rownum, + 1, + tab_stoc(i).datain, + pack_facturare.ddata_act) as datain, + decode(rownum, 1, pack_facturare.ddata_act, null) as dataout, + tab_stoc(i).pretd, + tab_stoc(i).id_valuta, + pack_facturare.nid_set, + 3 as ID_TIP_RULAJ, + tab_stoc(i).lot, + tab_stoc(i).adata_expirare, + tab_stoc(i).id_rul_aux, + tab_stoc(i).ID_LUCRARE_REZ, + tab_stoc(i).ID_PART_REZ + FROM dual + CONNECT BY level <= 2; + + V_TIP_INREG := V_TIP_INREG - 1; + V_DATAIN := pack_facturare.ddata_act; + END IF; + + END IF; + + WHEN (V_TIP_GESTIUNE = 6 AND + pack_facturare.v_date_gestiune.id_tip_gest IN (4, 5, 7) and + pack_facturare.ntip <> 41) OR + (pack_facturare.ntip = 41 AND V_TIP_GESTIUNE IN (4, 5, 7) AND + pack_facturare.v_date_gestiune.id_tip_gest = 6) THEN + -- vanzare > achizitie + -- retur achizitie > vanzare + -- pack_facturare.ntip = 41 = retur transfer + + --x-371 + V_INCASAT_CALCUL := pack_facturare.scrie_nota(1, + V_VALOARE_PRET, + 0, -- DISCOUNT_UNITAR + 0, -- PRET CU TVA + pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA + 0, -- V_IN_VALUTA + 0, -- V_CURS, + 0, -- ID_VENCHELT + V_ID_SECTIE, + NULL, -- V_ID_CTR + V_EXPLICATIE, + (case + when pack_facturare.ntip = 41 then + '371' + else + pack_facturare.v_date_gestiune.cont + end), + (case + when pack_facturare.ntip = 41 then + REPLACE(V_ACONT, 'X') + else + REPLACE(pack_facturare.v_date_gestiune.acont, 'X') + end), + (case + when pack_facturare.ntip = 41 then + pack_facturare.v_date_gestiune.cont + else + '371' + end), + (case + when pack_facturare.ntip = 41 then + REPLACE(pack_facturare.v_date_gestiune.acont, 'X') + else + REPLACE(V_ACONT, 'X') + end), + (case + when pack_facturare.ntip = 41 then + detalii_articol.id_gestiune + else + pack_facturare.v_date_gestiune.id_gestiune + end), -- V_ID_GESTIN + (case + when pack_facturare.ntip = 41 then + pack_facturare.v_date_gestiune.id_gestiune + else + detalii_articol.id_gestiune + end), + 8, + 0, + 0, + NULL); + --378-371 + V_INCASAT_CALCUL := pack_facturare.scrie_nota(1, + V_VALOARE_ADAOS, + 0, -- DISCOUNT_UNITAR + 0, -- PRET CU TVA + pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA + 0, -- V_IN_VALUTA + 0, -- V_CURS, + 0, -- ID_VENCHELT + V_ID_SECTIE, + NULL, -- V_ID_CTR + V_EXPLICATIE, + '378', + NULL, + '371', + (case + when pack_facturare.ntip = 41 then + REPLACE(pack_facturare.v_date_gestiune.acont, 'X') + else + REPLACE(V_ACONT, 'X') + end), + (case + when pack_facturare.ntip = 41 then + pack_facturare.v_date_gestiune.id_gestiune + else + detalii_articol.id_gestiune + end), -- V_ID_GESTIN + (case + when pack_facturare.ntip = 41 then + pack_facturare.v_date_gestiune.id_gestiune + else + detalii_articol.id_gestiune + end), + 8, + 0, + (detalii_articol.proc_tvav - 1) * 100, + NULL); + + --4428-371 + V_INCASAT_CALCUL := pack_facturare.scrie_nota(1, + V_VALOARE_TVAV, + 0, -- DISCOUNT_UNITAR + 0, -- PRET CU TVA + pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA + 0, -- V_IN_VALUTA + 0, -- V_CURS, + 0, -- ID_VENCHELT + V_ID_SECTIE, + NULL, -- V_ID_CTR + V_EXPLICATIE, + '4428', + NULL, + '371', + (case + when pack_facturare.ntip = 41 then + REPLACE(pack_facturare.v_date_gestiune.acont, 'X') + else + REPLACE(V_ACONT, 'X') + end), + (case + when pack_facturare.ntip = 41 then + pack_facturare.v_date_gestiune.id_gestiune + else + detalii_articol.id_gestiune + end), -- V_ID_GESTIN + (case + when pack_facturare.ntip = 41 then + pack_facturare.v_date_gestiune.id_gestiune + else + detalii_articol.id_gestiune + end), + 8, + 0, + (detalii_articol.proc_tvav - 1) * 100, + NULL); + + IF (V_PRETV_ORIG <> V_PRETV OR V_TVAV_ORIG <> V_TVAV OR + V_DISCOUNT_UNITAR <> 0) and pack_facturare.ntip <> 41 THEN + -- SCHIMB PRETUL DE VANZARE IN GESTIUNEA SURSA SI APOI IL TRANSFER LA NOUL PRET DE VANZARE + --371-378 + V_INCASAT_CALCUL := pack_facturare.scrie_nota(1, + V_VALOARE_DIFERENTA_PRETV, + 0, -- DISCOUNT_UNITAR + + 0, -- PRET CU TVA + pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA + 0, -- V_IN_VALUTA + 0, -- V_CURS, + 0, -- ID_VENCHELT + V_ID_SECTIE, + NULL, -- V_ID_CTR + V_EXPLICATIE, + '371', + REPLACE(V_ACONT, 'X'), + '378', + NULL, + (case + when pack_facturare.ntip = 41 then + pack_facturare.v_date_gestiune.id_gestiune + else + detalii_articol.id_gestiune + end), + (case + when pack_facturare.ntip = 41 then + pack_facturare.v_date_gestiune.id_gestiune + else + detalii_articol.id_gestiune + end), + 9, + 0, + (detalii_articol.proc_tvav - 1) * 100, + NULL); + + --371-4428 + V_INCASAT_CALCUL := pack_facturare.scrie_nota(1, + V_VALOARE_DIFERENTA_TVAV, + 0, -- DISCOUNT_UNITAR + + 0, -- PRET CU TVA + pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA + 0, -- V_IN_VALUTA + 0, -- V_CURS, + 0, -- ID_VENCHELT + V_ID_SECTIE, + NULL, -- V_ID_CTR + V_EXPLICATIE, + '371', + REPLACE(V_ACONT, -- pack_facturare.v_date_gestiune.acont, + 'X'), + '4428', + NULL, + (case + when pack_facturare.ntip = 41 then + pack_facturare.v_date_gestiune.id_gestiune + else + detalii_articol.id_gestiune + end), + (case + when pack_facturare.ntip = 41 then + pack_facturare.v_date_gestiune.id_gestiune + else + detalii_articol.id_gestiune + end), + 9, + 0, + (detalii_articol.proc_tvav - 1) * 100, + NULL); + END IF; + + IF ((V_PRETV_ORIG <> V_PRETV OR V_TVAV_ORIG <> V_TVAV) AND + V_DISCOUNT_UNITAR = 0 AND + (pack_facturare.ntip <> 41 OR + (pack_facturare.ntip = 41 AND V_TIP_GESTIUNE = 7))) THEN + INSERT INTO rul_temp + (AN, + ID_ARTICOL, + SERIE, + ID_GESTIUNE, + ID_LUCRARE, + ID_RESPONSABIL, + NRACT, + SERIE_ACT, + CANT, + CANTE, + CONT, + ACONT, + PRETV, + TVAV, + PRETVTVA, + PROC_TVAV, + PROC_TVA, + PRET, + TVA, + ADAOS, + PROCENT, + DATAACT, + NNIR, + DATAIN, + DATAOUT, + PRETD, + ID_VALUTA, + ID_SET, + ID_TIP_RULAJ, + LOT, + ADATA_EXPIRARE, + ID_RUL_AUX, + ID_LUCRARE_REZ, + ID_PART_REZ) + SELECT decode(rownum, 1, V_TIP_INREG, 0), + detalii_articol.id_articol, + tab_stoc(i).serie, + (case + when pack_facturare.ntip = 41 then + pack_facturare.v_date_gestiune.id_gestiune + else + detalii_articol.id_gestiune + end), + nvl(pack_facturare.nid_lucrare, 0), + pack_facturare.nid_responsabil, + pack_facturare.nnumar_act, + pack_facturare.cserie_act, + -- decode(rownum, 2, V_CANTITATE, 0) as CANT, + (case + when (rownum = 1 and pack_facturare.ntip = 41) or + (rownum = 2 and pack_facturare.ntip <> 41) then + V_CANTITATE + else + 0 + end) as CANT, + -- decode(rownum, 1, V_CANTITATE, 0) as CANTE, + (case + when (rownum = 2 and pack_facturare.ntip = 41) or + (rownum = 1 and pack_facturare.ntip <> 41) then + V_CANTITATE + else + 0 + end) as CANTE, + detalii_articol.cont as CONT, + REPLACE(V_ACONT, 'X', '') as ACONT, + decode(rownum, 1, V_PRETV_ORIG, V_PRETV) as PRETV, + decode(rownum, 1, tab_stoc(i).tvav, V_TVAV) as TVAV, + decode(rownum, + 1, + tab_stoc(i).pretv + tab_stoc(i).tvav, + V_PRETVTVA) as PRETVTVA, + decode(rownum, + 1, + tab_stoc(i).proc_Tvav, + detalii_articol.proc_tvav) as PROC_TVAV, + V_PROC_TVA as PROC_TVA, + V_PRET as PRET, + V_TVA AS TVA, + decode(rownum, 1, V_ADAOS_ORIG, V_ADAOS) as ADAOS, + decode(rownum, 1, V_PROCENT_ORIG, V_PROCENT) as PROCENT, + pack_facturare.ddata_act, + pack_facturare.nnumar_bon, + decode(rownum, + 1, + tab_stoc(i).datain, + pack_facturare.ddata_act) as datain, + decode(rownum, 1, pack_facturare.ddata_act, null) as dataout, + tab_stoc(i).pretd, + tab_stoc(i).id_valuta, + pack_facturare.nid_set, + 3 as ID_TIP_RULAJ, + tab_stoc(i).lot, + tab_stoc(i).adata_expirare, + tab_stoc(i).id_rul_aux, + tab_stoc(i).ID_LUCRARE_REZ, + tab_stoc(i).ID_PART_REZ + FROM dual + CONNECT BY level <= 2; + V_TIP_INREG := V_TIP_INREG - 1; + V_DATAIN := pack_facturare.ddata_act; + END IF; + + ELSE + RAISE_APPLICATION_ERROR(-20000, + 'Combinatie invalida de gestiuni! (FACT-014 : ' || + detalii_articol.cont || '.' || + detalii_articol.id_gestiune || '.' || + pack_facturare.v_date_gestiune.id_gestiune || ')'); + END CASE; + + -- pe randul 1 e iesirea + -- pe randul 2 e intrarea + INSERT INTO rul_temp + (AN, + ID_ARTICOL, + SERIE, + ID_GESTIUNE, + ID_GESTIUNEC, + ID_LUCRARE, + ID_RESPONSABIL, + NRACT, + SERIE_ACT, + CANT, + CANTE, + CONT, + ACONT, + PRETV, + TVAV, + PRETVTVA, + PROC_TVAV, + PROC_TVA, + PRET, + TVA, + ADAOS, + PROCENT, + DATAACT, + NNIR, + DATAIN, + DATAOUT, + PRETD, + ID_VALUTA, + ID_SET, + ID_TIP_RULAJ, + LOT, + ADATA_EXPIRARE, + ID_RUL_AUX, + ID_LUCRARE_REZ, + ID_PART_REZ) + SELECT decode(rownum, 1, V_TIP_INREG, 0), + detalii_articol.id_articol as ID_ARTICOL, + tab_stoc(i).serie as SERIE, + decode(rownum, + 1, + detalii_articol.id_gestiune, + pack_facturare.v_date_gestiune.id_gestiune) as ID_GESTIUNE, + decode(rownum, + 2, + detalii_articol.id_gestiune, + pack_facturare.v_date_gestiune.id_gestiune) as ID_GESTIUNEC, + nvl(pack_facturare.nid_lucrare, 0) as ID_LUCRARE, + pack_facturare.nid_responsabil as ID_RESPONSABIL, + pack_facturare.nnumar_act, + pack_facturare.cserie_act, + -- decode(rownum, 2, V_CANTITATE, 0) as CANT, + (case + when (rownum = 1 and pack_facturare.ntip = 41) or + (rownum = 2 and pack_facturare.ntip <> 41) then + V_CANTITATE + else + 0 + end) as CANT, + -- decode(rownum, 1, V_CANTITATE, 0) as CANTE, + (case + when (rownum = 2 and pack_facturare.ntip = 41) or + (rownum = 1 and pack_facturare.ntip <> 41) then + V_CANTITATE + else + 0 + end) as CANTE, + decode(rownum, + 1, + detalii_articol.cont, + pack_facturare.v_date_gestiune.cont) as CONT, + decode(rownum, + 1, + REPLACE(V_ACONT, 'X'), + REPLACE(pack_facturare.v_date_gestiune.acont, 'X')) as ACONT, + (case + when rownum = 1 and V_TIP_GESTIUNE IN (6, 7) then + V_PRETV + when rownum = 2 and + pack_facturare.v_date_gestiune.id_tip_gest in (6, 7) then + V_PRETV - V_DISCOUNT_UNITAR + else + 0 + end) as PRETV, + (case + when rownum = 1 and V_TIP_GESTIUNE IN (6, 7) then + V_TVAV + when rownum = 2 and + pack_facturare.v_date_gestiune.id_tip_gest in (6, 7) then + V_TVAV - V_DISCOUNT_TVA + else + 0 + end) as TVAV, + (case + when rownum = 1 and V_TIP_GESTIUNE in (6, 7) then + V_PRETVTVA + when rownum = 2 and + pack_facturare.v_date_gestiune.id_tip_gest in (6, 7) then + V_PRETVTVA - V_DISCOUNT_CU_TVA + else + 0 + end) as PRETVTVA, + detalii_articol.proc_tvav as PROC_TVAV, + V_PROC_TVA as PROC_TVA, + V_PRET as PRET, + V_TVA AS TVA, + V_ADAOS as ADAOS, + V_PROCENT as PROCENT, + pack_facturare.ddata_act as DATAACT, + pack_facturare.nnumar_bon as NNIR, + decode(rownum, 1, V_DATAIN, pack_facturare.ddata_act) as datain, + decode(rownum, 1, pack_facturare.ddata_act, NULL) as dataout, + tab_stoc(i).pretd as PRETD, + tab_stoc(i).id_valuta as ID_VALUTA, + pack_facturare.nid_set as ID_SET, + 1 as ID_TIP_RULAJ, + tab_stoc(i).lot, + tab_stoc(i).adata_expirare, + tab_stoc(i).id_rul_aux, + tab_stoc(i).ID_LUCRARE_REZ, + (case + when rownum = 2 and pack_facturare.ntip in (23, 25) and + pack_facturare.v_date_gestiune.cont = '357' then + pack_facturare.nid_part_rez + else + tab_stoc(i).ID_PART_REZ + end) + FROM dual + CONNECT BY level <= 2; + + IF pack_facturare.ntip = 27 THEN + MERGE INTO VANZARI_DETALII_TEMP A + USING DUAL B + ON (A.ID_ARTICOL = detalii_articol.id_articol AND A.ID_POL = detalii_articol.id_pol AND A.PRET = detalii_articol.pret AND A.PRET_CU_TVA = detalii_articol.pret_cu_tva AND A.PROC_TVAV = detalii_articol.proc_tvav AND A.DISCOUNT_UNITAR = detalii_articol.discount_unitar AND A.ID_GESTIUNE = detalii_articol.id_gestiune AND NVL(A.CONT, 'XXXX') = NVL(detalii_articol.cont, 'XXX') AND NVL(A.ID_VALUTA, -1) = NVL(detalii_articol.id_valuta, -1) AND NVL(A.MULTIPLICATOR, 1) = NVL(detalii_articol.multiplicator, 1) AND NVL(A.CURS, 1) = NVL(detalii_articol.curs, 1) AND A.ID_JTVA_COLOANA = detalii_articol.id_jtva_coloana AND A.IN_STOC = detalii_articol.in_stoc AND NVL(A.ID_GESTIUNE_DEST, -99) = NVL(detalii_articol.id_gestiune_dest, -99) AND NVL(A.ID_UTIL, 0) = NVL(detalii_articol.id_util, 0) AND A.PRET_ACHIZITIE = V_PRET AND NVL(A.ID_VANZARE_SET, -99) = NVL(detalii_articol.id_vanzare_set, -99) AND NVL(A.PRETD, 0) = NVL(tab_stoc(i).pretd, 0) AND NVL(A.ID_VALUTAD, -99) = NVL(tab_stoc(i).id_valuta, -99)) + WHEN MATCHED THEN + UPDATE SET CANTITATE = CANTITATE + V_CANTITATE + WHEN NOT MATCHED THEN + INSERT + (ID_ARTICOL, + ID_POL, + PRET, + PRET_CU_TVA, + PROC_TVAV, + CANTITATE, + DISCOUNT_UNITAR, + ID_GESTIUNE, + CONT, + ID_VALUTA, + CURS, + MULTIPLICATOR, + ID_JTVA_COLOANA, + IN_STOC, + ID_GESTIUNE_DEST, + ID_COMANDA, + ID_UTIL, + PRET_ACHIZITIE, + PRETD, + ID_VALUTAD, + ID_VANZARE_SET, + ID_LUCRARE_REZ, + ID_PART_REZ, + NUMAR_ACT, + ID_TEMP) + VALUES + (detalii_articol.id_articol, + detalii_articol.id_pol, + detalii_articol.pret, + detalii_articol.pret_cu_tva, + detalii_articol.proc_tvav, + V_CANTITATE, + detalii_articol.discount_unitar, + detalii_articol.id_gestiune, + detalii_articol.cont, + detalii_articol.id_valuta, + detalii_articol.curs, + detalii_articol.multiplicator, + detalii_articol.id_jtva_coloana, + detalii_articol.in_stoc, + detalii_articol.id_gestiune_dest, + detalii_articol.id_comanda, + detalii_articol.id_util, + V_PRET, + tab_stoc (i).pretd, + tab_stoc (i).id_valuta, + detalii_articol.id_vanzare_set, + detalii_articol.id_lucrare_rez, + detalii_articol.id_part_rez, + pack_facturare.nnumar_act, + detalii_articol.id_temp); + + END IF; + END LOOP; + END transfera_articol; + ------------------------------------------------------------------- + FUNCTION scrie_nota(V_CANTITATE IN NUMBER, + V_PRET IN NUMBER, + V_DISCOUNT_UNITAR IN NUMBER, + V_PRET_ARE_TVA IN NUMBER, + V_ID_VALUTA IN NUMBER, + V_IN_VALUTA IN NUMBER, + V_CURS IN NUMBER, + V_ID_VENCHELT IN NUMBER, + V_ID_SECTIE IN NUMBER, + V_ID_CTR IN NUMBER, + V_EXPLICATIE IN VARCHAR2, + V_SCD IN VARCHAR2, + V_ASCD IN VARCHAR2, + V_SCC IN VARCHAR2, + V_ASCC IN VARCHAR2, + V_ID_GESTIN IN NUMBER, + V_ID_GESTOUT IN NUMBER, + V_ID_SET IN NUMBER, + V_CU_TVA IN NUMBER, -- 0 DACA SE SCRIE SI NOTA DE TVA + V_PTVA IN NUMBER, + V_ID_JTVA_COLOANA IN NUMBER, + V_TAXCODE IN NUMBER DEFAULT NULL, + V_PAYMENTCODE IN NUMBER DEFAULT NULL) RETURN NUMBER IS + V_INCASAT_CALCUL ACT_TEMP.SUMA%TYPE := 0; + V_SUMA ACT_TEMP.SUMA%TYPE; + V_SUMA_FARA_TVA ACT_TEMP.SUMA%TYPE; + V_SUMA_TVA ACT_TEMP.SUMA%TYPE; + V_SUMA_CU_TVA ACT_TEMP.SUMA%TYPE := 0; + V_SUMA_VAL ACT_TEMP.SUMA_VAL%TYPE := 0; + V_SUMA_FARA_TVA_VAL ACT_TEMP.SUMA_VAL%TYPE := 0; + V_SUMA_TVA_VAL ACT_TEMP.SUMA_VAL%TYPE := 0; + V_SUMA_CU_TVA_VAL ACT_TEMP.SUMA_VAL%TYPE := 0; + V_PROCENT_TVA ACT_TEMP.PROC_TVA%TYPE; + V_ID_FACT ACT_TEMP.ID_FACT%TYPE := -1; + V_ZECIMALE_PRET NUMBER(2); + V_ZECIMALE_SUMA NUMBER(2); + V_SEMN NUMBER(1) := 1; -- V_SEMN = -1 DACA AM 667 = 4111 (INTRU CU SUMA NEGATIVA SI O PUN POZITIVA, O LAS NEGATIVA LA SCRIE_TVA) + + BEGIN + V_PROCENT_TVA := (V_PTVA + 100) / 100; + + IF NVL(V_ID_GESTIN, 0) <> 0 OR NVL(V_ID_GESTOUT, 0) <> 0 THEN + V_ZECIMALE_PRET := pack_sesiune.nzecimale_preta; + V_ZECIMALE_SUMA := pack_sesiune.nzecimale_sumaa; + ELSE + V_ZECIMALE_PRET := pack_sesiune.nzecimale_pretv; + V_ZECIMALE_SUMA := pack_sesiune.nzecimale_sumav; + END IF; + + pack_facturare.calculeaza_sume(V_PRET, + V_DISCOUNT_UNITAR, + V_ZECIMALE_PRET, + V_ZECIMALE_SUMA, + V_CANTITATE, + V_CURS, + V_ID_VALUTA, + V_PROCENT_TVA, + V_PRET_ARE_TVA, + V_SUMA_FARA_TVA, + V_SUMA_TVA, + V_SUMA_CU_TVA); + + IF V_IN_VALUTA = 1 THEN + pack_facturare.calculeaza_sume(V_PRET, + V_DISCOUNT_UNITAR, + pack_sesiune.nzecimale_pretvval, + pack_sesiune.nzecimale_sumaval, + V_CANTITATE, + 1, + V_ID_VALUTA, + V_PROCENT_TVA, + V_PRET_ARE_TVA, + V_SUMA_FARA_TVA_VAL, + V_SUMA_TVA_VAL, + V_SUMA_CU_TVA_VAL); + END IF; + + IF V_SCD in ('667', '267', '2678', '709') AND + ((pack_facturare.ntip <= 20 AND pack_facturare.ntip <> 7) or + pack_facturare.ntip in + (pack_facturare.nTipFacturaHotel, + pack_facturare.nTipFacturaRestaurant, + pack_facturare.nTipNotaPlata)) THEN + -- FACTURA DISCOUNT ( in afara de credit note ) + V_SEMN := -1; + END IF; + + IF V_SCD NOT IN ('5311', '5314', '5125', '5121', '5124', '5126') THEN + IF V_CU_TVA = 0 THEN + V_INCASAT_CALCUL := V_INCASAT_CALCUL + V_SUMA_FARA_TVA; + ELSE + V_INCASAT_CALCUL := V_INCASAT_CALCUL + V_SUMA_CU_TVA; + END IF; + END IF; + + IF pack_facturare.ntip = 4 AND pack_facturare.nfactavizcust = 0 THEN + V_SUMA := V_SUMA_CU_TVA; + V_SUMA_VAL := V_SUMA_CU_TVA_VAL; + ELSE + V_SUMA := V_SUMA_FARA_TVA; + V_SUMA_VAL := V_SUMA_FARA_TVA_VAL; + END IF; + + /* IF V_SUMA IS NULL THEN + RAISE_APPLICATION_ERROR(-20000, + V_CANTITATE || ' ; ' || V_PRET || ' ; ' || + V_DISCOUNT_UNITAR || ' ; ' || V_PRET_ARE_TVA || + ' ; ' || V_ID_VALUTA || ' ; ' || V_IN_VALUTA || + ' ; ' || V_CURS || ' ; ' || V_ID_VENCHELT || + ' ; ' || V_ID_SECTIE || ' ; ' || V_EXPLICATIE || + ' ; ' || V_SCD || ' ; ' || V_ASCD || ' ; ' || + V_SCC || ' ; ' || V_ASCC || ' ; ' || + V_ID_GESTIN || ' ; ' || V_ID_GESTOUT || ' ; ' || + V_ID_SET || ' ; ' || V_CU_TVA || ' ; ' || + V_PTVA || ' ; ' || V_ID_JTVA_COLOANA); + END IF;*/ + + -- cursul il completez in cumuleaza_note_act + pack_facturare.nid_act := pack_facturare.nid_act + 1; + + INSERT INTO ACT_TEMP + (ID_ACT, + NRACT, + SERIE_ACT, + DATAIREG, + DATAACT, + DATASCAD, + ID_VALUTA, + ID_VENCHELT, + ID_LUCRARE, + ID_SECTIE, + ID_SET, + EXPLICATIA, + SCD, + ASCD, + SCC, + ASCC, + SUMA, + SUMA_VAL, + CURS, + PROC_TVA, + ID_FDOC, + ID_PARTD, + ID_GESTIN, + ID_GESTOUT, + NNIR, + ID_CTR, + ID_FACT, + PERECHEC, + ID_FACTC, + ID_PARTC, + ID_JTVA_COLOANA, + EXPLICATIA4, + ID_RESPONSABIL, + TAXCODE, + PAYMENTCODE) + VALUES + (pack_facturare.nid_act, + pack_facturare.nnumar_act, + pack_facturare.cserie_act, + pack_facturare.ddata_ireg, + pack_facturare.ddata_act, + pack_facturare.ddata_scadenta, + DECODE(V_IN_VALUTA, + 1, + V_ID_VALUTA, + pack_facturare.nid_moneda_nationala), + V_ID_VENCHELT, + NVL(pack_Facturare.nid_lucrare, 0), + NVL(V_ID_SECTIE, 0), + V_ID_SET, + V_EXPLICATIE, + V_SCD, + V_ASCD, + V_SCC, + V_ASCC, + V_SEMN * V_SUMA, + DECODE(V_IN_VALUTA, 1, V_SEMN * V_SUMA_VAL, 0), + DECODE(V_IN_VALUTA, 1, V_CURS, 0), + V_PROCENT_TVA, + pack_facturare.nid_fdoc, + (CASE WHEN + V_SCD LIKE '41%' OR V_SCD LIKE '46%' OR V_SCD LIKE '45%' OR + (V_SCD = '357' AND pack_facturare.ntip in (42, 47)) OR + (pack_facturare.ntip = 24 and pack_facturare.nfactavizcust = 1) THEN + pack_facturare.nid_part WHEN V_SCD = '357' THEN + pack_facturare.nid_part_rez ELSE 0 END), + V_ID_GESTIN, + V_ID_GESTOUT, + pack_facturare.nnumar_bon, + V_ID_CTR, + V_ID_FACT, + pack_facturare.nperechec, + pack_facturare.nid_factc, + DECODE(V_SCC, + '419', + pack_facturare.nid_part, + '4111', + pack_facturare.nid_part, + '357', + pack_facturare.nid_part, + pack_facturare.nid_partc), + V_ID_JTVA_COLOANA, + pack_facturare.cexplicatia4, + NVL(pack_facturare.nid_responsabil, 0), + V_TAXCODE, + V_PAYMENTCODE); + + IF V_CU_TVA = 1 THEN + IF pack_facturare.nproc_tva_max < V_PTVA THEN + pack_facturare.nproc_tva_max := V_PTVA; + pack_facturare.nid_jtva_coloana := V_ID_JTVA_COLOANA; + pack_facturare.nTaxCode := V_TAXCODE; + END IF; + + pack_facturare.scrie_tva(V_SUMA_TVA, + V_SUMA_TVA_VAL, + V_ID_VALUTA, + V_IN_VALUTA, + V_SCD, + V_ASCD, + V_CURS, + V_ID_VENCHELT, + V_ID_SECTIE, + V_ID_CTR, + V_EXPLICATIE, + V_PROCENT_TVA, + V_ID_FACT, + V_ID_JTVA_COLOANA); + END IF; + + RETURN V_INCASAT_CALCUL; + END scrie_nota; + ------------------------------------------------------------------- + PROCEDURE scrie_tva(V_SUMA IN NUMBER, + V_SUMA_VAL IN NUMBER, + V_ID_VALUTA IN NUMBER, + V_IN_VALUTA IN NUMBER, + V_CONT IN VARCHAR2, + V_ACONT IN VARCHAR2, + V_CURS IN NUMBER, + V_ID_VENCHELT IN NUMBER, + V_ID_SECTIE IN NUMBER, + V_ID_CTR IN NUMBER, + V_EXPLICATIE IN VARCHAR2, + V_PTVA IN NUMBER, + V_ID_FACT IN NUMBER, + V_ID_JTVA_COLOANA IN NUMBER) IS + V_EXPLICATIA ACT_TEMP.EXPLICATIA%TYPE; + V_SCD ACT_TEMP.SCD%TYPE; + V_ASCD ACT_TEMP.ASCD%TYPE; + V_SCC ACT_TEMP.SCC%TYPE; + V_ID_PARTD ACT_TEMP.ID_PARTD%TYPE; + V_ID_TVA ACT_TEMP.ID_JTVA_COLOANA%TYPE; + lnAn ACT_TEMP.AN%TYPE; + lnLuna ACT_TEMP.LUNA%TYPE; + lnTaxCode ACT_TEMP.TAXCODE%TYPE; + BEGIN + CASE + -- 30.10.2009 + -- 26.08.2009 + -- WHEN V_CONT = '667' AND pack_facturare.ntip <= 20 THEN + WHEN V_CONT in ('667', '267', '2678', '709') AND + (pack_facturare.ntip <= 20 or + pack_facturare.ntip in (pack_facturare.nTipFacturaHotel, + pack_facturare.nTipFacturaRestaurant, + pack_facturare.nTipNotaPlata, + pack_facturare.nTipVanzareRetail, + 48, + 49,51,52)) THEN + -- 26.08.2009 ^ + -- 30.10.2009 ^ + -- FACTURA DISCOUNT + V_SCD := '4111'; + V_ASCD := NULL; + V_SCC := '4427'; + V_ID_PARTD := pack_facturare.nid_part; + WHEN pack_facturare.ntip = 4 AND pack_facturare.nfactavizcust = 0 THEN + -- factura din aviz + V_SCD := '4428'; + V_ASCD := NULL; + V_SCC := '4427'; + V_ID_PARTD := 0; + + -- 30.10.2009 + -- 26.08.2009 + -- WHEN pack_facturare.ntip <= 20 OR pack_facturare.ntip in (28, 29) THEN + WHEN pack_facturare.ntip <= 20 OR + pack_facturare.ntip in (28, + 29, + pack_facturare.nTipFacturaHotel, + pack_facturare.nTipFacturaRestaurant, + pack_facturare.nTipNotaPlata, + pack_facturare.nTipVanzareRetail, + 48, + 49,51,52) THEN + -- 26.08.2009 ^ + -- 30.10.2009 ^ + -- factura + V_SCD := V_CONT; + V_ASCD := V_ACONT; + V_SCC := '4427'; + V_ID_PARTD := pack_facturare.nid_part; + ELSE + -- aviz + V_SCD := '418'; + V_ASCD := V_ACONT; + V_SCC := '4428'; + V_ID_PARTD := pack_facturare.nid_part; + END CASE; + + BEGIN + SELECT ID_TVA + INTO V_ID_TVA + FROM JTVA_COLOANE + WHERE ID_JTVA_COLOANA = V_ID_JTVA_COLOANA; + EXCEPTION + WHEN NO_DATA_FOUND THEN + V_ID_TVA := NULL; + END; + lnAn := pack_sesiune.getan(); + lnLuna := pack_sesiune.getluna(); + lnTaxCode := PACK_SAFT.GetTaxCode(lnAn, + lnLuna, + pack_facturare.ddata_act, + V_ID_TVA); + + -- V_EXPLICATIA := 'TVA ' || V_EXPLICATIE; + pack_facturare.nid_act := pack_facturare.nid_act + 1; + INSERT INTO ACT_TEMP + (ID_ACT, + NRACT, + SERIE_ACT, + DATAIREG, + DATAACT, + DATASCAD, + ID_VALUTA, + ID_VENCHELT, + ID_LUCRARE, + ID_SECTIE, + ID_SET, + EXPLICATIA, + SCD, + ASCD, + SCC, + SUMA, + SUMA_VAL, + CURS, + PROC_TVA, + ID_CTR, + ID_FDOC, + ID_PARTD, + ID_FACT, + ID_JTVA_COLOANA, + EXPLICATIA4, + ID_RESPONSABIL, + TAXCODE) + VALUES + (pack_facturare.nid_act, + pack_facturare.nnumar_act, + pack_facturare.cserie_act, + pack_facturare.ddata_ireg, + pack_facturare.ddata_act, + pack_facturare.ddata_scadenta, + DECODE(V_IN_VALUTA, + 1, + V_ID_VALUTA, + pack_facturare.nid_moneda_nationala), + V_ID_VENCHELT, + nvl(pack_facturare.nid_lucrare, 0), + V_ID_SECTIE, + pack_facturare.nid_set, + V_EXPLICATIA, + V_SCD, + V_ASCD, + V_SCC, + V_SUMA, + DECODE(V_IN_VALUTA, 1, V_SUMA_VAL, 0), + DECODE(V_IN_VALUTA, 1, V_CURS, 0), + V_PTVA, + V_ID_CTR, + pack_facturare.nid_fdoc, + V_ID_PARTD, + V_ID_FACT, + V_ID_TVA, + pack_facturare.cexplicatia4, + NVL(pack_facturare.nid_responsabil, 0), + lnTaxCode); + END; + ------------------------------------------------------------------- + PROCEDURE scrie_descarcare_k(V_COEFICIENT_K IN NUMBER) IS + V_ANALITICCUST ACT.ASCC%TYPE; + V_INCASAT ACT.SUMA%TYPE; + BEGIN + for grup in (SELECT SUM(pack_facturare.calculeaza_total_fara_tva(pret, + diferenta, + curs, + 0, + 0, + cantitate, + pret_cu_tva, + proc_tvav)) as totalfaratvafaradisc, + SUM(pack_facturare.calculeaza_total_fara_tva(pret, + diferenta, + curs, + discount_unitar, + pack_facturare.ndiscount_evidentiat, + cantitate, + pret_cu_tva, + proc_tvav)) as totalfaratva, + SUM(pack_facturare.calculeaza_total_tva(pret, + diferenta, + curs, + discount_unitar, + pack_facturare.ndiscount_evidentiat, + cantitate, + pret_cu_tva, + proc_tvav)) as totaltva, + proc_tvav + FROM VANZARI_DETALII_TEMP + GROUP BY PROC_TVAV) loop + + V_ANALITICCUST := pack_facturare.getAnaliticK(grup.proc_tvav); + + -- 371-357 + V_INCASAT := pack_facturare.scrie_nota(1, + grup.totalfaratva + + grup.totaltva, + 0, + 0, + pack_def.getidmonedanationala(), + 0, + 1, + 0, + 0, + NULL, + 'DESCARCARE CU K', + '371', + V_ANALITICCUST, + '357', + NULL, + 0, + 0, + pack_facturare.nid_set, + 0, + 0, + NULL); + + IF pack_facturare.ntip = 48 THEN + pack_facturare.ncoeficient_k := V_COEFICIENT_K; + + -- 607-371 + V_INCASAT := pack_facturare.scrie_nota(1, + ROUND(grup.totalfaratvafaradisc * + pack_facturare.ncoeficient_k / 100, + pack_sesiune.nzecimale_sumav), + 0, + 0, + pack_def.getidmonedanationala(), + 0, + 1, + pack_facturare.nid_venchelt, + 0, + NULL, + 'DESCARCARE CU K', + '607', + NULL, + '371', + V_ANALITICCUST, + 0, + 0, + pack_facturare.nid_set, + 0, + 0, + NULL); + -- 378-371 + V_INCASAT := pack_facturare.scrie_nota(1, + grup.totalfaratva - + ROUND(grup.totalfaratvafaradisc * + pack_facturare.ncoeficient_k / 100, + pack_sesiune.nzecimale_sumav), + 0, + 0, + pack_def.getidmonedanationala(), + 0, + 1, + 0, + 0, + NULL, + 'DESCARCARE CU K', + '378', + V_ANALITICCUST, + '371', + V_ANALITICCUST, + 0, + 0, + pack_facturare.nid_set, + 0, + 0, + NULL); + + -- 4428-371 + V_INCASAT := pack_facturare.scrie_nota(1, + grup.totaltva, + 0, + 0, + pack_def.getidmonedanationala(), + 0, + 1, + 0, + 0, + NULL, + 'DESCARCARE CU K', + '4428', + V_ANALITICCUST, + '371', + V_ANALITICCUST, + 0, + 0, + pack_facturare.nid_set, + 0, + 0, + NULL); + END IF; + end loop; + END scrie_descarcare_k; + ------------------------------------------------------------------- + FUNCTION scrie_discount(V_CANTITATE IN NUMBER, + V_DISCOUNT_UNITAR IN NUMBER, + V_ID_VALUTA IN NUMBER, + V_IN_VALUTA IN NUMBER, + V_ASCC IN VARCHAR2, + V_ID_SECTIE IN NUMBER, + V_ID_CTR IN NUMBER, + V_CURS IN NUMBER, + V_PROC_TVAV IN NUMBER, + V_PRET_CU_TVA IN NUMBER, + V_CU_TVA IN NUMBER, -- daca se scrie si nota pentru TVA + V_ID_JTVA_COLOANA IN NUMBER, + V_TAXCODE IN NUMBER DEFAULT NULL) + RETURN NUMBER IS + V_EXPLICATIA ACT.EXPLICATIA%TYPE; + V_SCD ACT.SCD%TYPE; + V_ASCD ACT.ASCD%TYPE; + V_SCC ACT.SCC%TYPE; + V_ID_PARTD ACT.ID_PARTD%TYPE := 0; + V_ID_FACT ACT.ID_FACT%TYPE := -1; + V_DATA_SCADENTA ACT.DATASCAD%TYPE; + V_ID_SET ACT.ID_SET%TYPE; + V_SUMA_DISCOUNT ACT.SUMA%TYPE; + V_SUMA_TVA_DISCOUNT ACT.SUMA%TYPE; + + V_DISCOUNT_TOTAL_FARA_TVA ACT.SUMA%TYPE := 0; + V_DISCOUNT_TOTAL_TVA ACT.SUMA%TYPE := 0; + V_DISCOUNT_TOTAL_CU_TVA ACT.SUMA%TYPE := 0; + + V_SUMA_DISCOUNT_VAL ACT.SUMA_VAL%TYPE; + V_SUMA_TVA_DISCOUNT_VAL ACT.SUMA_VAL%TYPE; + V_DISCOUNT_TOTAL_FARA_TVA_VAL ACT.SUMA_VAL%TYPE := 0; + V_DISCOUNT_TOTAL_TVA_VAL ACT.SUMA_VAL%TYPE := 0; + V_DISCOUNT_TOTAL_CU_TVA_VAL ACT.SUMA_VAL%TYPE := 0; + + BEGIN + V_EXPLICATIA := 'DISCOUNT'; + + V_ID_SET := pack_facturare.nid_set; + V_DATA_SCADENTA := pack_facturare.ddata_scadenta; + + pack_facturare.ddata_scadenta := NULL; + pack_facturare.nid_set := pack_facturare.nid_set + 5; + + pack_facturare.calculeaza_sume(V_DISCOUNT_UNITAR, + 0, + pack_sesiune.nzecimale_pretv, + pack_sesiune.nzecimale_sumav, + V_CANTITATE, + V_CURS, + V_ID_VALUTA, + V_PROC_TVAV, + V_PRET_CU_TVA, + V_DISCOUNT_TOTAL_FARA_TVA, + V_DISCOUNT_TOTAL_TVA, + V_DISCOUNT_TOTAL_CU_TVA); + + IF V_IN_VALUTA = 1 THEN + pack_facturare.calculeaza_sume(V_DISCOUNT_UNITAR, + 0, + pack_sesiune.nzecimale_pretvval, + pack_sesiune.nzecimale_sumaval, + V_CANTITATE, + 1, + V_ID_VALUTA, + V_PROC_TVAV, + V_PRET_CU_TVA, + V_DISCOUNT_TOTAL_FARA_TVA_VAL, + V_DISCOUNT_TOTAL_TVA_VAL, + V_DISCOUNT_TOTAL_CU_TVA_VAL); + END IF; + + CASE + WHEN pack_facturare.ntip = 4 THEN + -- facturare din aviz + V_SCD := '4111'; + V_ASCD := V_ASCC; + V_SCC := '418'; + V_SUMA_DISCOUNT := (-1) * V_DISCOUNT_TOTAL_CU_TVA; + V_SUMA_TVA_DISCOUNT := (-1) * V_DISCOUNT_TOTAL_TVA; + + V_SUMA_DISCOUNT_VAL := (-1) * V_DISCOUNT_TOTAL_CU_TVA_VAL; + V_SUMA_TVA_DISCOUNT_VAL := (-1) * V_DISCOUNT_TOTAL_TVA_VAL; + V_ID_PARTD := pack_facturare.nid_part; + WHEN pack_facturare.ntip <= 20 OR + pack_facturare.nTip in + (pack_facturare.nTipFacturaHotel, + pack_facturare.nTipFacturaRestaurant, + pack_facturare.nTipNotaPlata, + pack_facturare.nTipVanzareRetail, + 48,49,51,52) THEN + -- factura + V_SCD := '667'; + V_ASCD := NULL; + V_SCC := '4111'; + V_SUMA_DISCOUNT := V_DISCOUNT_TOTAL_FARA_TVA; + V_SUMA_TVA_DISCOUNT := (-1) * V_DISCOUNT_TOTAL_TVA; + + V_SUMA_DISCOUNT_VAL := V_DISCOUNT_TOTAL_FARA_TVA_VAL; + V_SUMA_TVA_DISCOUNT_VAL := (-1) * V_DISCOUNT_TOTAL_TVA_VAL; + ELSE + -- aviz + V_SCD := '667'; + V_ASCD := NULL; + V_SCC := '418'; + V_SUMA_DISCOUNT := V_DISCOUNT_TOTAL_FARA_TVA; + V_SUMA_TVA_DISCOUNT := (-1) * V_DISCOUNT_TOTAL_TVA; + + V_SUMA_DISCOUNT_VAL := V_DISCOUNT_TOTAL_FARA_TVA_VAL; + V_SUMA_TVA_DISCOUNT_VAL := (-1) * V_DISCOUNT_TOTAL_TVA_VAL; + END CASE; + + pack_facturare.nid_act := pack_facturare.nid_act + 1; + INSERT INTO ACT_TEMP + (ID_ACT, + NRACT, + SERIE_ACT, + DATAIREG, + DATAACT, + DATASCAD, + EXPLICATIA, + SCD, + ASCD, + SCC, + ASCC, + SUMA, + SUMA_VAL, + CURS, + ID_SECTIE, + ID_LUCRARE, + ID_CTR, + ID_SET, + ID_FDOC, + ID_PARTD, + ID_PARTC, + ID_FACT, + ID_VALUTA, + PROC_TVA, + PERECHEC, + ID_FACTC, + ID_JTVA_COLOANA, + EXPLICATIA4, + ID_RESPONSABIL, + TAXCODE) + VALUES + (pack_facturare.nid_act, + pack_facturare.nnumar_act, + pack_facturare.cserie_act, + pack_facturare.ddata_ireg, + pack_facturare.ddata_act, + pack_facturare.ddata_scadenta, + V_EXPLICATIA, + V_SCD, + V_ASCD, + V_SCC, + V_ASCC, + V_SUMA_DISCOUNT, + DECODE(V_IN_VALUTA, 1, V_SUMA_DISCOUNT_VAL, 0), + DECODE(V_IN_VALUTA, 1, V_CURS, 0), + NVL(V_ID_SECTIE, 0), + NVL(pack_facturare.nid_lucrare, 0), + V_ID_CTR, + pack_facturare.nid_set, + pack_facturare.nid_fdoc, + V_ID_PARTD, + pack_facturare.nid_part, + V_ID_FACT, + DECODE(V_IN_VALUTA, + 1, + V_ID_VALUTA, + pack_facturare.nid_moneda_nationala), + V_PROC_TVAV, + pack_facturare.nperechec, + pack_facturare.nid_factc, + V_ID_JTVA_COLOANA, + pack_facturare.cexplicatia4, + NVL(pack_facturare.nid_responsabil, 0), + V_TAXCODE); + + IF V_CU_TVA = 1 THEN + pack_facturare.scrie_tva(V_SUMA_TVA_DISCOUNT, + V_SUMA_TVA_DISCOUNT_VAL, + V_ID_VALUTA, + V_IN_VALUTA, + V_SCC, + V_ASCC, + V_CURS, -- V_CURS, + 0, -- V_ID_VENCHELT, + V_ID_SECTIE, + V_ID_CTR, + V_EXPLICATIA, + V_PROC_TVAV, + V_ID_FACT, + V_ID_JTVA_COLOANA); + END IF; + pack_facturare.nid_set := V_ID_SET; + pack_facturare.ddata_scadenta := V_DATA_SCADENTA; + RETURN V_DISCOUNT_TOTAL_CU_TVA; + END; + ------------------------------------------------------------------- + PROCEDURE scrie_avans(V_SUMA IN NUMBER) IS + /* V_EXPLICATIA ACT.EXPLICATIA%TYPE; + V_SCD ACT.SCD%TYPE := '4111'; + V_SCC ACT.SCC%TYPE := '419'; + V_SUMA_AVANS ACT.SUMA%TYPE := 0;*/ + BEGIN + DBMS_OUTPUT.PUT_LINE('Explicatie TVA pentru stornare avans!'); + /* V_EXPLICATIA := 'STORNARE AVANS'; + IF V_SUMA <> 0 THEN + V_SUMA_AVANS := pack_facturare.scrie_nota(1, + V_SUMA, + 1, -- PRET CU TVA + pack_facturare.v_id_moneda_nationala, -- ID_VALUTA, + 0, -- CURS, + 0, -- ID_VENCHELT + NULL, -- ID_SECTIE + V_EXPLICATIA, + V_SCD, + '', + V_SCC, + '', + 0, + 0, + V_ID_CONTRACT, + pack_facturare.v_id_set, + 1, + pack_facturare.v_proc_tva_max, + V_ID_JTVA_COLOANA); + END IF;*/ + END; + ------------------------------------------------------------------- + Procedure scrie_incasari(V_SERIE_ACT_INCASARE IN VARCHAR2, + V_NUMAR_ACT_INCASARE IN NUMBER, + V_LISTA_INCASARE IN VARCHAR2, + V_ID_CTR IN NUMBER) is + V_INCASAT ACT.SUMA%TYPE := 0; + V_TIP NUMBER(10); + V_ID_BANCASA ACT.ID_PARTD%TYPE; + V_ASCC ACT.ASCC%TYPE; + V_SCD ACT.SCD%TYPE; + V_ASCD ACT.ASCD%TYPE; + begin + pack_facturare.cserie_act_incasare := V_SERIE_ACT_INCASARE; + pack_facturare.nnumar_act_incasare := V_NUMAR_ACT_INCASARE; + pack_facturare.ntip_doc_incasare := pack_facturare.nTipIncasareChitanta; + pack_facturare.nsuma_incasare := 0; + -- daca se incaseaza factura in valuta : trebuie sa trimit si cursul, suma in valuta, id_valuta + -- V_LISTA_INCASARE : tip|valoare|id_bancasa|ascc|scd|ascd + -- daca ascc, scd, ascd sunt nule primesc 'xxxx' pentru ca getwordnume nu considera cuvant valoarea NULL si sare peste ea, decaland restul valorilor + + FOR R_INCASARE IN (SELECT X as LINIE_INCASARE + FROM table(charc2collection(V_LISTA_INCASARE, ';'))) LOOP + V_TIP := TO_NUMBER(getwordnum(R_INCASARE.LINIE_INCASARE, + 1, + '|')); + V_INCASAT := TO_NUMBER(getwordnum(R_INCASARE.LINIE_INCASARE, + 2, + '|')); + V_ID_BANCASA := TO_NUMBER(getwordnum(R_INCASARE.LINIE_INCASARE, + 3, + '|')); + + V_ASCC := getwordnum(R_INCASARE.LINIE_INCASARE, 4, '|'); + -- 11.08.2010 + V_SCD := getwordnum(R_INCASARE.LINIE_INCASARE, 5, '|'); + V_ASCD := getwordnum(R_INCASARE.LINIE_INCASARE, 6, '|'); + IF lower(V_ASCC) = 'xxxx' THEN + V_ASCC := NULL; + END IF; + IF lower(V_SCD) = 'xxxx' THEN + V_SCD := NULL; + END IF; + IF lower(V_ASCD) = 'xxxx' THEN + V_ASCD := NULL; + END IF; + + pack_facturare.nsuma_incasare := pack_facturare.nsuma_incasare + + V_INCASAT; + + IF V_INCASAT <> 0 THEN + pack_facturare.ntip_doc_incasare := V_TIP; + if V_TIP not in (pack_facturare.nTipIncasareChitanta, + pack_facturare.nTipIncasareCardBancar, + pack_facturare.nTipIncasareBonFiscal) then + pack_facturare.ntip_doc_incasare := pack_facturare.nTipIncasareBonFiscal; + end if; + + pack_facturare.scrie_incasare2(V_TIP, + V_SERIE_ACT_INCASARE, + V_NUMAR_ACT_INCASARE, + V_ID_CTR, + V_ID_BANCASA, + V_INCASAT, + V_ASCC, + V_SCD, + V_ASCD); + END IF; + -- 11.08.2010 ^ + END LOOP; + + end scrie_incasari; + ------------------------------------------------------------------- + PROCEDURE scrie_incasare2(V_TIP IN NUMBER, + V_SERIE_ACT_INCASARE IN VARCHAR2, + V_NUMAR_ACT_INCASARE IN NUMBER, + V_ID_CTR IN NUMBER, + V_ID_BANCASA IN NUMBER, + V_SUMA IN NUMBER, + V_ASCC IN ACT.ASCC%TYPE DEFAULT NULL, + V_PSCD IN ACT.SCD%TYPE DEFAULT NULL, + V_ASCD IN ACT.ASCD%TYPE DEFAULT NULL) IS + V_EXPLICATIA VARCHAR2(100); + V_SCD VARCHAR2(4); + V_FDOC VARCHAR2(20); + V_PAYMENTCODE ACT_TEMP.PAYMENTCODE%TYPE; + lcMesaj varchar2(1000); + lnD406 number; + BEGIN + lnD406 := TO_NUMBER(NVL(pack_sesiune.getoptiunefirma('D406'), '0')); + -- 11.08.2010 + V_PAYMENTCODE := case lnD406 + when 1 then + nSaftPaymentCodeNumerar + else + NULL + end; + V_SCD := V_PSCD; + CASE + WHEN V_TIP = nTipIncasareBonFiscal THEN + V_EXPLICATIA := 'INCASARE NUMERAR'; + V_FDOC := 'ID_FDOC_BONFISCAL'; + + IF V_SCD IS NULL THEN + V_SCD := PACK_SESIUNE.getoptiunefirma('RF_CONT_INCASARE_BONFISCAL'); + END IF; + IF V_SCD IS NULL THEN + V_SCD := '5311'; + END IF; + + WHEN V_TIP = nTipIncasareCardBancar THEN + V_EXPLICATIA := 'INCASARE CARD BANCAR'; + V_FDOC := 'ID_FDOC_CARD'; + + IF V_SCD IS NULL THEN + V_SCD := PACK_SESIUNE.getoptiunefirma('RF_CONT_INCASARE_CARDBANCAR'); + END IF; + IF V_SCD IS NULL THEN + V_SCD := '5125'; + END IF; + V_PAYMENTCODE := case lnD406 + when 1 then + nSaftPaymentCodeCard + else + NULL + end; + + WHEN V_TIP = nTipIncasareTichete THEN + V_EXPLICATIA := 'INCASARE TICHETE'; + V_FDOC := 'ID_FDOC_BONFISCAL'; + IF V_SCD IS NULL THEN + V_SCD := PACK_SESIUNE.getoptiunefirma('RF_CONT_INCASARE_TICHETE'); + END IF; + IF V_SCD IS NULL THEN + V_SCD := '5323'; + END IF; + + WHEN V_TIP = nTipIncasareChitanta THEN + V_EXPLICATIA := 'INCASARE NUMERAR'; + V_FDOC := 'ID_FDOC_CHITANTA'; + IF V_SCD IS NULL THEN + V_SCD := PACK_SESIUNE.getoptiunefirma('RF_CONT_INCASARE_CHITANTA'); + END IF; + IF V_SCD IS NULL THEN + V_SCD := '5311'; + END IF; + END CASE; + -- 11.08.2010 ^ + + -- select pack_sesiune.getoptiunefirma(user, 'ID_FDOC_BONFISCAL') into lcMesaj from dual; + /* pinfo('V_FDOC: ' || V_FDOC || ' VALOARE: ' || V_SUMA,'SCRIE_INCASARE2');*/ + + pack_facturare.nid_act := pack_facturare.nid_act + 1; + INSERT INTO ACT_TEMP + (ID_ACT, + SERIE_ACT, + NRACT, + DATAIREG, + DATAACT, + EXPLICATIA, + PERECHEC, + SCD, + ASCD, + SCC, + ASCC, + SUMA, + ID_CTR, + ID_LUCRARE, + ID_FDOC, + ID_PARTC, + ID_PARTD, + ID_SECTIE, + ID_VENCHELT, + ID_RESPONSABIL, + PAYMENTCODE) + SELECT pack_facturare.nid_act as ID_ACT, + V_SERIE_ACT_INCASARE as serie_act, + V_NUMAR_ACT_INCASARE as nract, + pack_facturare.ddata_ireg as dataireg, + pack_facturare.ddata_act as dataact, + V_EXPLICATIA as explicatia, + pack_facturare.nnumar_act as perechec, + V_SCD as scd, + V_ASCD as ascd, -- 11.08.2010 + SCD as scc, + CASE + WHEN V_ASCC IS NULL THEN + max(ASCD) + ELSE + V_ASCC + END as ascc, -- 03.09.2009 -- 18.05.2010 + V_SUMA as suma, + V_ID_CTR, + NVL(pack_facturare.nid_lucrare, 0) as id_lucrare, + TO_NUMBER(pack_sesiune.getoptiunefirma(user, V_FDOC)) as id_fdoc, + pack_facturare.nid_part as id_partc, + V_ID_BANCASA as id_partd, + MAX(ID_SECTIE) as id_sectie, + MAX(ID_VENCHELT) as id_venchelt, + NVL(pack_facturare.nid_responsabil, 0), + V_PAYMENTCODE + FROM ACT_TEMP + WHERE SCD = '4111' + GROUP BY SCD; + + /* IF pack_facturare.ntva_incasare = 1 THEN + INSERT INTO ACT_TEMP(ID_ACT, + NRACT, + SERIE_ACT, + DATAIREG, + DATAACT, + ID_VALUTA, + ID_VENCHELT, + ID_LUCRARE, + ID_SECTIE, + ID_SET, + EXPLICATIA, + SCD, + ASCD, + SCC, + ASCC, + SUMA, + SUMA_VAL, + CURS, + PROC_TVA, + ID_FDOC, + NNIR, + ID_CTR, + PERECHEC, + ID_FACT, + ID_JTVA_COLOANA, + EXPLICATIA4) + SELECT pack_facturare.nid_act as ID_ACT, + V_NUMAR_ACT_INCASARE as nract, + V_SERIE_ACT_INCASARE as serie_act, + pack_facturare.ddata_ireg as dataireg, + pack_facturare.ddata_act as dataact, + ID_VALUTA, -- ?? + ID_VENCHELT, -- ?? + NVL(pack_facturare.nid_lucrare, 0) as ID_LUCRARE, + ID_SECTIE, -- ?? + ID_SET, -- ?? + V_EXPLICATIA as explicatia, + SCD, -- ?? + ASCD, -- ?? + SCC, -- ?? + ASCC, -- ?? + SUMA, -- ?? + SUMA_VAL, -- ?? + CURS, -- ?? + PROC_TVA, -- ?? + TO_NUMBER(pack_sesiune.getoptiunefirma(user, V_FDOC)) as ID_FDOC, + NNIR, -- ?? + V_ID_CTR as ID_CTR, + pack_facturare.nnumar_act as perechec, + -5 AS ID_FACT, + ID_JTVA_COLOANA, + EXPLICATIA4 + END IF;*/ + END scrie_incasare2; + ------------------------------------------------------------------- + PROCEDURE scrie_note_banca_compensari IS + V_ID_BANCA NOM_PARTENERI.ID_PART%TYPE := 0; + V_NUME_BANCA NOM_PARTENERI.DENUMIRE%TYPE := NULL; + V_ID_FDOC_COMP NOM_FDOC.ID_FDOC%TYPE := 0; + V_NUME_FDOC NOM_FDOC.FEL_DOCUMENT%TYPE := NULL; + BEGIN + pack_facturare.citeste_setari_document(0, V_ID_FDOC_COMP, V_NUME_FDOC); + pack_facturare.citeste_setari_partener(0, V_ID_BANCA, V_NUME_BANCA); + + -- compensare aviz retur + INSERT INTO ACT_TEMP + (ID_ACT, + NRACT, + SERIE_ACT, + DATAIREG, + DATAACT, + ID_VALUTA, + ID_SET, + EXPLICATIA, + SCD, + SCC, + SUMA, + PROC_TVA, + ID_JTVA_COLOANA, + ID_FDOC, + ID_PARTD, + PERECHEC, + ID_PARTC) + SELECT 9998 as ID_ACT, + pack_facturare.nnumar_act AS NRACT, + pack_facturare.cserie_act, + DATAIREG, + DATAACT, + ID_VALUTA, + MIN(ID_SET) AS ID_SET, + 'COMPENSARE AVIZ ' || pack_facturare.nnumar_act AS EXPLICATIA, + '5121' AS SCD, + '418' AS SCC, + SUM(CASE + WHEN SCD in ('667', '267', '2678', '709') THEN + (-1) * SUMA + ELSE + SUMA + END) AS SUMA, + PROC_TVA, + MAX(CASE + WHEN SCC = '4428' THEN + 0 + ELSE + ID_JTVA_COLOANA + END) AS ID_JTVA_COLOANA, + V_ID_FDOC_COMP AS ID_FDOC, + V_ID_BANCA AS ID_PARTD, + pack_facturare.nnumar_act AS PERECHEC, + pack_facturare.nid_part ID_PARTC + FROM ACT_TEMP + WHERE SCD = '418' + OR (SCD in ('667', '267', '2678', '709') AND SCC = '418') + GROUP BY DATAIREG, DATAACT, ID_VALUTA, PROC_TVA; + + -- compensari avize - aici + INSERT INTO ACT_TEMP + (ID_ACT, + NRACT, + SERIE_ACT, + DATAIREG, + DATAACT, + ID_VALUTA, + ID_VENCHELT, + ID_SET, + EXPLICATIA, + SCD, + SCC, + SUMA, + PROC_TVA, + ID_JTVA_COLOANA, + ID_FDOC, + ID_PARTD, + PERECHEC, + ID_FACTC, + ID_PARTC) + SELECT 9999 as ID_ACT, + pack_facturare.nnumar_act AS NRACT, + pack_facturare.cserie_act, + to_date(to_char(pack_facturare.ddata_ireg, 'YYYYMMDD'), + 'YYYYMMDD') AS DATAIREG, + to_date(to_char(pack_facturare.ddata_act, 'YYYYMMDD'), + 'YYYYMMDD') AS DATAACT, + ID_VALUTA, + ID_VENCHELT, + pack_Facturare.nid_set AS ID_SET, + 'COMPENSARE AVIZ ' || NRACT AS EXPLICATIA, + '5121' AS SCD, + '418' AS SCC, + debit + precdeb - credit - preccred AS SUMA, + PROC_TVA, + ID_JTVA_COLOANA, + V_ID_FDOC_COMP AS ID_FDOC, + V_ID_BANCA AS ID_PARTD, + NRACT AS PERECHEC, + ID_FACT AS ID_FACTC, + ID_PART AS ID_PARTC + FROM IREG_PARTENERI + WHERE CONT = '418' + AND COD IN + (SELECT COD + FROM VANZARI + WHERE ID_VANZARE IN + (SELECT X AS ID_VANZARE + FROM table(cast(CHARN2COLLECTION(pack_facturare.clistaid, + ',') AS num_tab)))) + AND AN = pack_facturare.nan + AND LUNA = pack_facturare.nluna + AND debit + precdeb - credit - preccred > 0; + + END scrie_note_banca_compensari; + + ------------------------------------------------------------------- + /* PROCEDURE scrie_in_vanzari(V_DISCOUNT_FACTURA IN NUMBER, + V_ID_DELEGAT IN NUMBER, + V_ID_MASINA IN NUMBER, + V_DATAORA_EXP IN DATE, + V_ID_AGENT IN NUMBER, + V_TEXT_ADITIONAL IN VARCHAR2, + V_ID_VANZARE OUT NUMBER) is + lnIdFacturare NUMBER(10) := null; + lnListareDetaliata NUMBER(1) := 0; + begin + pack_facturare.scrie_in_vanzari(V_DISCOUNT_FACTURA, + V_ID_DELEGAT, + V_ID_MASINA, + lnIdFacturare, + lnListareDetaliata, + V_DATAORA_EXP, + V_ID_AGENT, + V_TEXT_ADITIONAL, + V_ID_VANZARE); + end;*/ + ------------------------------------------------------------------- + PROCEDURE scrie_in_vanzari(V_DISCOUNT_FACTURA IN NUMBER, + V_ID_DELEGAT IN NUMBER, + V_ID_MASINA IN NUMBER, + V_ID_FACTURARE IN NUMBER, + V_LISTARE_DETALIATA IN NUMBER, + V_DATAORA_EXP IN DATE, + V_ID_AGENT IN NUMBER, + V_TEXT_ADITIONAL IN VARCHAR2, + V_ID_VANZARE OUT NUMBER) IS + + V_DATAORA DATE := SYSDATE; + V_FACTURAT VANZARI.FACTURAT%TYPE := 0; + lnDiscountTVA VANZARI.DISCOUNT_TVA%TYPE; + lnValoareAchizitie VANZARI.VALOARE_ACHIZITIE%TYPE; + lnSerieIncasat ACT.SERIE_ACT%TYPE; + lnNrIncasat ACT.NRACT%TYPE; + lnSumaIncasat ACT.SUMA%TYPE; + lnTipIncasat NUMBER(2); + lnTotalFaraTVA VANZARI.TOTAL_FARA_TVA%TYPE; + lnTotalTVA VANZARI.TOTAL_TVA%TYPE; + lnTotalCuTVA VANZARI.TOTAL_CU_TVA%TYPE; + lnIdGestiune VANZARI.ID_GESTIUNE%TYPE; + lnIdValuta VANZARI.Id_Valuta%TYPE; + lnCurs VANZARI.CURS%TYPE; + lnMultiplicator VANZARI.MULTIPLICATOR%TYPE; + lnIdCtr VANZARI.ID_CTR%TYPE; + lnValVal VANZARI.VALVAL%TYPE; + lnTVAVal VANZARI.TVAVAL%TYPE; + lnTotVal VANZARI.TOTVAL%TYPE; + lnPrecizieCalcul NUMBER(2) := pack_sesiune.getOptiuneFirma('PC'); + lnPreciziePretV NUMBER(2) := pack_sesiune.getOptiuneFirma('PPRETV'); + + BEGIN + -- 1 - 20 facturi, 51 factura ACN + -- 21 - 42, 47 avize + -- -6 retur transfer din gestiune valorica (ROAGEST) + -- -7 retur aviz ( valoric ) ( ROAGEST ) + -- -8 retur factura ( valorica ) ( ROAGEST ) + -- -13 retur marfa din custodie ( valoric ) ( ROAFACTURARE ) + IF pack_facturare.ntip between 1 and 20 OR + pack_facturare.ntip in (-8, + pack_facturare.nTipFacturaHotel, + pack_facturare.nTipFacturaRestaurant, + -12, + 48, + 49, + 51, + 52) THEN + V_FACTURAT := 1; + ELSE + V_FACTURAT := 0; + END IF; + + IF pack_facturare.ntip in (2,6,52) THEN + SELECT NVL(MAX(AFISARE_SCADENTA), 1) + INTO pack_facturare.nafisare_scadenta + FROM VCONTRACTE + WHERE ID_CTR IN (SELECT DISTINCT ID_CTR FROM VANZARI_DETALII_TEMP); + ELSE + pack_facturare.nafisare_scadenta := 1; + END IF; + + -- 23,25,27,30 ROAFACTURARE aviz transfer catre subunitati + -- 41 = ROAFACTURARE retur transfer catre subunitati; + -- 6 = ROAGEST retur de la gestiune valorica + if pack_facturare.ntip in (23, 25, 27, 30, 41) then + lnIdGestiune := pack_facturare.v_date_gestiune.id_gestiune; + elsif pack_facturare.ntip = -6 then + lnIdGestiune := pack_facturare.nid_gestiune_sursa; + end if; + + if (lnIdGestiune is null and pack_facturare.ntip in (41, -6)) then + select min(id_gestiune) into lnIdGestiune from vanzari_detalii_temp; + end if; + + -- completez vanzari.id_ctr, ca sa nu mai caut in vanzari_detalii + SELECT MAX(ID_CTR) INTO lnIdCtr FROM VANZARI_DETALII_TEMP; + + -- nu stiu de ce nu se completa id_valuta, curs, multiplicator mai jos + -- il selectez direct din vanzari_detalii_temp, in loc de vanzari_cursuri + SELECT max(ID_VALUTA), max(CURS), max(MULTIPLICATOR) + INTO lnIdValuta, lnCurs, lnMultiplicator + FROM (SELECT DISTINCT ID_VALUTA, CURS, MULTIPLICATOR + FROM VANZARI_DETALII_TEMP + WHERE ID_VALUTA <> pack_facturare.nid_moneda_nationala) + WHERE ROWNUM = 1; + + INSERT INTO VANZARI + (id_util, + dataora, + id_part, + numar_act, + serie_act, + facturat, + data_facturat, + id_utilfact, + id_lucrare, + id_comanda, + tip, + id_gestiune, + cod, + id_delegat, + id_masina, + id_facturare, + listare_detaliata, + dataora_exp, + data_act, + discount, + discount_evidentiat, + id_agent, + text_aditional, + in_valuta, + id_sucursala, + id_sectie, + diftotftva, + diftottva, + afisare_scadenta, + coeficient_k, + id_ordl, + tva_incasare, + data_scad, + id_ctr, + tip_factura, + id_beneficiar, + tip_saft) + VALUES + (pack_facturare.nid_util, + V_DATAORA, + DECODE(pack_facturare.ntip, + 23, + NULL, + 25, + NULL, + 41, + NULL, + -6, + NULL, + pack_facturare.nid_part), + pack_facturare.nnumar_act, + pack_facturare.cserie_act, + V_FACTURAT, + (CASE WHEN + pack_facturare.ntip < 20 OR + pack_facturare.ntip in (pack_facturare.nTipFacturaHotel, + pack_facturare.nTipFacturaRestaurant, + -12, + 48, + 49,51,52) THEN V_DATAORA ELSE NULL END), + (CASE WHEN + pack_facturare.ntip < 20 OR + pack_facturare.ntip in (pack_facturare.nTipFacturaHotel, + pack_facturare.nTipFacturaRestaurant, + -12, + 48, + 49,51,52) THEN pack_facturare.nid_util ELSE NULL END), + pack_facturare.nid_lucrare, + pack_facturare.nid_comanda, + pack_facturare.ntip, + lnIdGestiune, + pack_contafin.get_cod(), + V_ID_DELEGAT, + V_ID_MASINA, + V_ID_FACTURARE, + V_LISTARE_DETALIATA, + V_DATAORA_EXP, + pack_facturare.ddata_act, + V_DISCOUNT_FACTURA, + pack_facturare.ndiscount_evidentiat, + V_ID_AGENT, + REPLACE(V_TEXT_ADITIONAL, CHR(170), CHR(13) || CHR(10)), + pack_facturare.nin_valuta, + pack_facturare.nid_sucursala, + pack_facturare.nid_sectie_stoc, + pack_facturare.ndifftva, + pack_facturare.ndiftva, + pack_facturare.nafisare_scadenta, + pack_facturare.ncoeficient_k, + pack_facturare.nid_ordl, + pack_facturare.ntva_incasare, + pack_facturare.ddata_scadenta, + lnIdCtr, + pack_facturare.ntip_factura, + pack_facturare.nid_beneficiar, + pack_facturare.ntip_saft) + RETURNING ID_VANZARE INTO V_ID_VANZARE; + + pack_facturare.scrie_cursuri(V_ID_VANZARE); + + pack_facturare.scrie_seturi; + + INSERT /*+ APPEND */ + INTO VANZARI_DETALII + (ID_VANZARE, + ID_ARTICOL, + LOT, + SERIE, + ID_RATA, + ID_POL, + CANTITATE, + PRET_ACHIZITIE, + PRETD, + ID_VALUTAD, + PRET, + PROC_TVAV, + ID_JTVA_COLOANA, + ID_JTVA_COLOANA_EX, + DISCOUNT_UNITAR, + ID_GESTIUNE, + ID_VALUTA, + CONT, + EXPLICATIE, + PRET_CU_TVA, + DIFERENTA, + CUSTODIE, + ID_VANZARE_SET, + ID_CTR, + TAXCODE) + SELECT V_ID_VANZARE as ID_VANZARE, + ID_ARTICOL, + LOT, + SERIE, + ID_RATA, + ID_POL, + CANTITATE, + PRET_ACHIZITIE, + PRETD, + ID_VALUTAD, + PRET, + PROC_TVAV, + ID_JTVA_COLOANA, + ID_JTVA_COLOANA_EX, + DISCOUNT_UNITAR, + ID_GESTIUNE, + ID_VALUTA, + CONT, + EXPLICATIA, + PRET_CU_TVA, + DIFERENTA, + CUSTODIE, + DECODE(ID_VANZARE_SET, 0, NULL, ID_VANZARE_SET), + ID_CTR, + TAXCODE + FROM VANZARI_DETALII_TEMP; + + -- Completare totaluri in vanzari din vanzari_detalii pentru a usura selectiile din fact_vfacturi + begin + select DISC_TVA_VAL AS DISCOUNT_TVA, + VALOARE_ACHIZITIE, + a.suma_fara_tva_ron - a.disc_fara_tva_ron as TOTAL_FARA_TVA, + a.suma_tva_ron - a.disc_tva_ron as TOTAL_TVA, + a.suma_fara_tva_ron - a.disc_fara_tva_ron + a.suma_tva_ron - + a.disc_tva_ron as TOTAL_CU_TVA, + a.suma_fara_tva_val - a.disc_fara_tva_val as VALVAL, + a.suma_tva_val - a.disc_tva_val as TVAVAL, + a.suma_fara_tva_val - a.disc_fara_tva_val + a.suma_tva_val - + a.disc_tva_val as TOTVAL, + id_valuta, + curs, + multiplicator, + pack_facturare.cserie_act_incasare as SERIE_INCASAT, + pack_facturare.nnumar_act_incasare as NR_INCASAT, + pack_facturare.nsuma_incasare AS SUMA_INCASAT, + pack_facturare.ntip_doc_incasare as TIP_INCASAT + INTO lnDiscountTVA, + lnValoareAchizitie, + lnTotalFaraTVA, + lnTotalTVA, + lnTotalCuTVA, + lnValVal, + lnTVAVal, + lnTotVal, + lnIdValuta, + lnCurs, + lnMultiplicator, + lnSerieIncasat, + lnNrIncasat, + lnSumaIncasat, + lnTipIncasat + FROM (select MAX(decode(pack_facturare.nin_valuta, + 1, + ROUND(a1.curs * NVL(V_DISCOUNT_FACTURA, 0) / + a1.multiplicator, + lnPreciziePretV), + NVL(V_DISCOUNT_FACTURA, 0))) as DISC_FARA_TVA_RON, + NVL(V_DISCOUNT_FACTURA, 0) as DISC_FARA_TVA_VAL, + pack_facturare.nin_valuta AS IN_VALUTA, + MAX(ROUND(decode(pack_facturare.nin_valuta, + 1, + ROUND(a1.curs * + NVL(V_DISCOUNT_FACTURA, 0) / + a1.multiplicator, + lnPreciziePretV), + NVL(V_DISCOUNT_FACTURA, 0)) * + (a1.proc_tvav - 1), + lnPreciziePretV)) as DISC_TVA_RON, + MAX(ROUND(NVL(V_DISCOUNT_FACTURA, 0) * + (a1.proc_tvav - 1), + lnPreciziePretV)) as DISC_TVA_VAL, + sum(pack_facturare.calculeaza_total_fara_tva_fact(a1.pret_ron, + 0, + 1, + NVL(a1.discount_unitar_ron, + 0), + pack_facturare.ndiscount_evidentiat, + a1.cantitate, + a1.pret_cu_tva, + a1.proc_tvav)) AS SUMA_FARA_TVA_RON, + sum(pack_facturare.calculeaza_total_tva_fact(a1.pret_ron, + 0, + 1, + NVL(a1.discount_unitar_ron, + 0), + pack_facturare.ndiscount_evidentiat, + a1.cantitate, + a1.pret_cu_tva, + a1.proc_tvav)) as SUMA_TVA_RON, + sum(pack_facturare.calculeaza_total_fara_tva_fact(a1.pret_val, + 0, + 1, + NVL(a1.discount_unitar_val, + 0), + pack_facturare.ndiscount_evidentiat, + a1.cantitate, + a1.pret_cu_tva, + a1.proc_tvav)) AS SUMA_FARA_TVA_VAL, + sum(pack_facturare.calculeaza_total_tva_fact(a1.pret_val, + 0, + 1, + NVL(a1.discount_unitar_val, + 0), + pack_facturare.ndiscount_evidentiat, + a1.cantitate, + a1.pret_cu_tva, + a1.proc_tvav)) as SUMA_TVA_VAL, + sum(round(a1.cantitate * a1.pret_achizitie, + lnPrecizieCalcul)) AS VALOARE_ACHIZITIE, + max(a1.id_valuta) as id_valuta, + max(a1.curs) as curs, + max(a1.multiplicator) as multiplicator + from (select vd.id_vanzare_set, + (case + when (pack_facturare.nin_valuta = 1 or + vd.id_valuta <> + pack_def.GetIdMonedaNationala()) then + ROUND(vc.curs * vd.pret / vc.multiplicator, + lnPreciziePretV) + else + vd.pret + end) as pret_ron, + vd.pret as pret_val, + vd.proc_tvav, + vd.cantitate, + vd.diferenta, + (case + when (pack_facturare.nin_valuta = 1 or + vd.id_valuta <> + pack_def.GetIdMonedaNationala()) then + ROUND(vc.curs * vd.discount_unitar / + vc.multiplicator, + lnPreciziePretV) + else + vd.discount_unitar + end) as discount_unitar_ron, + vd.discount_unitar as discount_unitar_val, + vd.id_valuta, + vd.pret_cu_tva, + vd.pret_achizitie, + vc.curs, + vc.multiplicator + from (select a.id_vanzare_set, + a.pret, + a.proc_tvav, + a.cantitate, + a.diferenta, + a.discount_unitar, + a.id_valuta, + a.pret_cu_tva, + a.pret_achizitie + from VANZARI_DETALII_TEMP a + where nvl(a.id_vanzare_set, 0) = 0 + union all + select b.id_vanzare_set, + b.pret, + max(c.proc_tvav) as proc_tvav, + b.cantitate, + 0 as diferenta, + b.discount_unitar, + decode(pack_facturare.nin_valuta, + 0, + pack_def.GetIdMonedaNationala(), + c.id_valuta) as id_valuta, + b.pret_cu_tva, + sum(decode(b.cantitate, + 0, + 0, + c.pret_achizitie * c.cantitate / + b.cantitate)) as pret_achizitie + from vanzari_detalii_temp c + left join vanzari_seturi b + on b.id_vanzare_set = c.id_vanzare_set + where nvl(c.id_vanzare_set, 0) <> 0 + and nvl(pack_facturare.nin_valuta, -1) > -1 + group by b.id_vanzare_set, + b.pret, + b.cantitate, + b.discount_unitar, + b.pret_cu_tva, + decode(pack_facturare.nin_valuta, + 0, + pack_def.GetIdMonedaNationala(), + c.id_valuta)) vd + left join vanzari_cursuri vc + on vc.id_vanzare = V_ID_VANZARE + and vd.id_valuta = vc.id_valuta) a1) a; + + update vanzari + set discount_tva = lnDiscountTVA, + valoare_achizitie = lnValoareAchizitie, + total_fara_tva = lnTotalFaraTVA, + total_tva = lnTotalTVA, + total_cu_tva = lnTotalCuTVA, + valval = lnValVal, + tvaval = lnTVAVal, + totval = lnTotVal, + id_valuta = lnIdValuta, + curs = lnCurs, + multiplicator = lnMultiplicator, + serie_incasat = lnSerieIncasat, + nr_incasat = lnNrIncasat, + suma_incasat = lnSumaIncasat, + tip_incasat = lnTipIncasat + where id_vanzare = V_ID_VANZARE; + + exception + when NO_DATA_FOUND then + null; + end; + + END scrie_in_vanzari; + ------------------------------------------------------------------- + PROCEDURE scrie_atasamente_factura(V_ID_VANZARE IN NUMBER, + V_NUME_FRX IN NUMBER, + V_WDOCUMENT IN BLOB, + V_ID_UTIL IN NUMBER) IS + V_TIP NUMBER(2) := 0; + V_FORMAT ATASAMENTE_VANZARI.FORMAT%TYPE; + begin + CASE + WHEN UPPER(TRIM(V_NUME_FRX)) LIKE 'FACTURA_VAL' THEN + V_TIP := 2; + WHEN UPPER(TRIM(V_NUME_FRX)) LIKE 'FACTURA%' THEN + V_TIP := 1; + WHEN UPPER(TRIM(V_NUME_FRX)) LIKE 'INVOICE%' THEN + V_TIP := 3; + WHEN UPPER(TRIM(V_NUME_FRX)) = 'RECAPITULATIE' THEN + V_TIP := 4; + WHEN UPPER(TRIM(V_NUME_FRX)) LIKE 'AVIZ%' THEN + V_TIP := 5; + END CASE; + + IF UPPER(TRIM(V_NUME_FRX)) LIKE '%_A5' THEN + V_FORMAT := 'A5'; + ELSE + V_FORMAT := 'A4'; + END IF; + + IF V_WDOCUMENT IS NOT NULL THEN + INSERT INTO ATASAMENTE_VANZARI + (ID_VANZARE, TIP, FORMAT, DOCUMENT) + VALUES + (V_ID_VANZARE, V_TIP, V_FORMAT, V_WDOCUMENT); + END IF; + + end scrie_atasamente_factura; + ------------------------------------------------------------------- + PROCEDURE scrie_seturi is + cursor crs is + SELECT * FROM VANZARI_SETURI_TEMP; + linie_crs crs%ROWTYPE; + V_ID VANZARI_SETURI.ID_VANZARE_SET%TYPE; + begin + open crs; + loop + fetch crs + into linie_crs; + exit when crs%NOTFOUND; + INSERT INTO VANZARI_SETURI + (DENUMIRE, + EXPLICATIE, + CANTITATE, + UM, + SERIE, + PRET, + DISCOUNT_UNITAR, + PRET_CU_TVA) + VALUES + (linie_crs.denumire, + linie_crs.explicatie, + linie_crs.cantitate, + linie_crs.um, + linie_crs.serie, + linie_crs.pret, + linie_crs.discount_unitar, + linie_crs.pret_cu_tva) + RETURNING ID_VANZARE_SET INTO V_ID; + UPDATE VANZARI_DETALII_TEMP + SET ID_VANZARE_SET = V_ID + WHERE ID_VANZARE_SET = linie_crs.id_vanzare_set; + end loop; + close crs; + end scrie_seturi; + ------------------------------------------------------------------- + PROCEDURE scrie_seturi_proforma is + cursor crs is + SELECT * FROM VANZARI_SETURI_TEMP; + linie_crs crs%ROWTYPE; + V_ID NUMBER(10); + begin + open crs; + loop + fetch crs + into linie_crs; + exit when crs%NOTFOUND; + INSERT INTO PROFORME_SETURI + (DENUMIRE, + EXPLICATIE, + CANTITATE, + UM, + SERIE, + PRET, + DISCOUNT_UNITAR, + PRET_CU_TVA) + VALUES + (linie_crs.denumire, + linie_crs.explicatie, + linie_crs.cantitate, + linie_crs.um, + linie_crs.serie, + linie_crs.pret, + linie_crs.discount_unitar, + linie_crs.pret_cu_tva) + RETURNING ID_PROFORMA_SET INTO V_ID; + UPDATE VANZARI_DETALII_TEMP + SET ID_VANZARE_SET = V_ID + WHERE ID_VANZARE_SET = linie_crs.id_vanzare_set; + end loop; + close crs; + + end scrie_seturi_proforma; + ------------------------------------------------------------------- + PROCEDURE initializeaza_part_rez(V_ID_PART IN NUMBER) IS + BEGIN + pack_facturare.nid_part_rez := V_ID_PART; + END initializeaza_part_rez; + ------------------------------------------------------------------- + PROCEDURE cumuleaza_note_act IS + lnInregSumaNot0 NUMBER(10) := 0; + BEGIN + -- era apelata la sfarsitul procedurii + pack_contafin.completeaza_parteneri_gestiuni(); + --IF pack_facturare.ntip = 27 THEN + pack_contafin.completeaza_analitice(); + --END IF; + UPDATE ACT_TEMP + SET STERS = 1, TVA_INCASARE = pack_facturare.ntva_incasare; + + -- verific daca am vreo inregistrare cu suma <> 0 + -- sterg inregistrarile cu suma 0 doar daca am inregistrari cu suma <> 0 + -- altfel nu se inregistreaza nimic in Reg. Jurnal ACT, doar in RUL si VANZARI/VANZARI_DETALII + SELECT COUNT(*) INTO lnInregSumaNot0 from ACT_TEMP where SUMA <> 0; + if lnInregSumaNot0 > 0 then + DELETE FROM ACT_TEMP + WHERE SUMA = 0 + AND NOT ((SCD LIKE '4%' OR SCC LIKE '4%') AND SCC NOT LIKE '4427') + AND ID_SET <> 32003; + end if; + + pack_facturare.cumuleaza_note_act_temp(); + + if pack_facturare.ntip <> pack_facturare.nTipNotaPlata then + pack_facturare.verifica_total_document(); + end if; + pack_contafin.sterge_analitice_gresite(); + + if pack_facturare.ntip in + (pack_facturare.nTipFacturaRestaurant, pack_facturare.nTipNotaPlata) then + pack_contafin.completeaza_analitice_rul(); + pack_contafin.sterge_analitice_gresite_rul(); + end if; + + pack_facturare.adauga_note_tva_incasare(); + + END cumuleaza_note_act; + ----------------------------------------------------------- + PROCEDURE cumuleaza_note_act_temp IS + lcMesaj xmltype; + BEGIN + + /* SELECT DBMS_XMLGEN.GETXMLTYPE('SELECT * FROM ACT_TEMP') INTO lcMesaj FROM DUAL; + + PINFO(lcMesaj.getClobVal(), 'cumuleaza_note_act_temp');*/ + + UPDATE ACT_TEMP SET STERS = 1, ID_ACT = ROWNUM; + + INSERT INTO ACT_TEMP + (ID_ACT, + LUNA, + AN, + COD, + DATAIREG, + NRACT, + SERIE_ACT, + DATAACT, + EXPLICATIA, + SCD, + ASCD, + SCC, + ASCC, + SUMA, + SUMA_VAL, + CURS, + PERECHED, + PERECHEC, + DATASCAD, + NEIMPOZAB, + NNIR, + ID_RESPONSABIL, + ID_VENCHELT, + ID_SECTIE, + ID_SET, + ID_FACT, + ID_PARTD, + ID_PARTC, + ID_SUCURSALA, + ID_FDOC, + EXPLICATIA4, + EXPLICATIA5, + ID_LUCRARE, + ID_GESTIN, + ID_GESTOUT, + ID_VALUTA, + PROC_TVA, + ID_FACTD, + ID_FACTC, + ID_CTR, + ID_JTVA_COLOANA, + TVA_INCASARE, + TAXCODE, + PAYMENTCODE) + SELECT ROW_NUMBER() OVER(ORDER BY A.ID_SET, A.ID_ACT) AS ID_ACT, + A.LUNA, + A.AN, + A.COD, + A.DATAIREG, + A.NRACT, + A.SERIE_ACT, + A.DATAACT, + A.EXPLICATIA, + A.SCD, + A.ASCD, + A.SCC, + A.ASCC, + (CASE + WHEN pack_facturare.nin_valuta = 1 AND + A.ID_VALUTA NOT IN + (0, pack_facturare.nid_moneda_nationala) THEN + ROUND(A.SUMA_VAL * A.CURS, pack_sesiune.nzecimale_sumav) + ELSE + A.SUMA + END) AS SUMA, + A.SUMA_VAL, + A.CURS, + A.PERECHED, + A.PERECHEC, + A.DATASCAD, + A.NEIMPOZAB, + A.NNIR, + A.ID_RESPONSABIL, + A.ID_VENCHELT, + A.ID_SECTIE, + pack_facturare.nid_set AS ID_SET, + A.ID_FACT, + A.ID_PARTD, + A.ID_PARTC, + A.ID_SUCURSALA, + A.ID_FDOC, + A.EXPLICATIA4, + A.EXPLICATIA5, + A.ID_LUCRARE, + A.ID_GESTIN, + A.ID_GESTOUT, + A.ID_VALUTA, + A.PROC_TVA, + A.ID_FACTD, + A.ID_FACTC, + A.ID_CTR, + A.ID_JTVA_COLOANA, + pack_facturare.ntva_incasare as TVA_INCASARE, + A.TAXCODE, + A.PAYMENTCODE + FROM (SELECT MIN(A11.ID_ACT) AS ID_ACT, + A11.ID_SET, + A11.LUNA, + A11.AN, + A11.COD, + A11.DATAIREG, + A11.NRACT, + A11.SERIE_ACT, + A11.DATAACT, + A11.EXPLICATIA, + A11.SCD, + A11.ASCD, + A11.SCC, + A11.ASCC, + SUM(A11.SUMA) AS SUMA, + SUM(A11.SUMA_VAL) AS SUMA_VAL, + A11.CURS, + A11.PERECHED, + A11.PERECHEC, + A11.DATASCAD, + A11.NEIMPOZAB, + A11.NNIR, + DECODE(pack_facturare.ntip, + 2, + NVL(A12.ID_RESPONSABIL, A11.ID_RESPONSABIL), + A11.ID_RESPONSABIL) AS ID_RESPONSABIL, + A11.ID_VENCHELT, + A11.ID_SECTIE, + A11.ID_FACT, + A11.ID_PARTD, + A11.ID_PARTC, + A11.ID_SUCURSALA, + A11.ID_FDOC, + A11.EXPLICATIA4, + A11.EXPLICATIA5, + A11.ID_LUCRARE, + A11.ID_GESTIN, + A11.ID_GESTOUT, + A11.ID_VALUTA, + (CASE + WHEN A11.ID_JTVA_COLOANA IS NOT NULL THEN + A11.PROC_TVA + ELSE + 0 + END) AS PROC_TVA, + A11.ID_FACTD, + A11.ID_FACTC, + A11.ID_CTR, + A11.ID_JTVA_COLOANA, + A11.TAXCODE, + A11.PAYMENTCODE + FROM ACT_TEMP A11 + LEFT JOIN CONTRACTE A12 + ON A11.ID_CTR = A12.ID_CTR + GROUP BY A11.LUNA, + A11.AN, + A11.COD, + A11.DATAIREG, + A11.SERIE_ACT, + A11.NRACT, + A11.DATAACT, + A11.EXPLICATIA, + A11.SCD, + A11.ASCD, + A11.SCC, + A11.ASCC, + A11.PERECHED, + A11.PERECHEC, + A11.DATASCAD, + A11.NEIMPOZAB, + A11.NNIR, + A11.ID_SET, + DECODE(pack_facturare.ntip, + 2, + NVL(A12.ID_RESPONSABIL, A11.ID_RESPONSABIL), + A11.ID_RESPONSABIL), + A11.ID_VENCHELT, + A11.ID_SECTIE, + A11.ID_SET, + A11.ID_FACT, + A11.ID_PARTD, + A11.ID_PARTC, + A11.ID_SUCURSALA, + A11.ID_FDOC, + A11.EXPLICATIA4, + A11.EXPLICATIA5, + A11.ID_LUCRARE, + A11.ID_GESTIN, + A11.ID_GESTOUT, + A11.ID_VALUTA, + A11.CURS, + A11.PROC_TVA, + A11.ID_FACTD, + A11.ID_FACTC, + A11.ID_CTR, + A11.ID_JTVA_COLOANA, + A11.TAXCODE, + A11.PAYMENTCODE) A; + + /* SELECT DBMS_XMLGEN.GETXMLTYPE('SELECT * FROM ACT_TEMP') INTO lcMesaj FROM DUAL; + PINFO(lcMesaj.getClobVal(), 'cumuleaza_note_act_temp'); + */ + + DELETE FROM ACT_TEMP WHERE STERS = 1; + END cumuleaza_note_act_temp; + ------------------------------------------------------------------- + PROCEDURE cursor_verificare(V_CURSOR_VERIFICARE OUT pack_facturare.cursor_facturare) IS + BEGIN + OPEN V_CURSOR_VERIFICARE FOR + SELECT A.ID_ACT, + A.LUNA, + A.AN, + A.DATAIREG as datairegt, + A.NRACT, + A.SERIE_ACT, + A.DATAACT as dataactt, + A.suma, + A.EXPLICATIA, + A.SCD, + A.ASCD, + A.ASCD as ascd1, + A.SCC, + A.ASCC, + A.ASCC as ascc1, + A.PERECHED, + A.PERECHEC, + A.SUMA_VAL, + A.EXPLICATIA4, + A.EXPLICATIA5, + A.CURS, + A.DATASCAD as datascadt, + A.NEIMPOZAB, + A.NNIR, + A.ID_UTIL, + UTIL2.UTILIZATOR AS UTIL, + A.DATAORA, + A.ID_UTILS, + UTIL1.UTILIZATOR AS UTILS, + A.DATAORAS, + A.ID_RESPONSABIL, + RESP.DENUMIRE AS NRESP, + A.ID_VENCHELT, + VENCHELT.EXPLICATIE AS DST_CHLT, + A.ID_LUCRARE, + LUCR.NRORD, + A.ID_CTR, + CTR.CONTRACT, + A.ID_SECTIE, + SECTII.SECTIE, + A.PROC_TVA, + A.ID_SET, + A.ID_FACT, + A.ID_FACTD, + A.ID_FACTC, + A.ID_PARTD, + A.ID_PARTD AS ID_PARTD1, + PART1.NUME AS PARTD, + A.ID_PARTC, + A.ID_PARTC AS ID_PARTC1, + PART.NUME AS PARTC, + A.ID_SUCURSALA, + S.FIRMA AS SUCURSALA, + A.ID_FDOC, + FDOC.FEL_DOCUMENT AS FDOC, + A.ID_GESTIN, + A.ID_JTVA_COLOANA, + jtva.denumire as explicatie_tva, + G1.NUME_GESTIUNE AS GESTIN, + A.ID_GESTOUT, + G2.NUME_GESTIUNE AS GESTOUT, + A.ID_VALUTA, + V.NUME_VAL, + 0000000000 as id_pol, + lpad(' ', 30, ' ') as nume_lista_preturi, + A.TVA_INCASARE, + a.taxcode, + st.descriere as saft_descriere, + st.procent_taxa as saft_procent, + st.taxname, + a.paymentcode, + sp.methodcode, + sp.name as paymentmechanism, + sp.methodname as paymentmethod, + sp.paymentname + FROM ACT_TEMP A + LEFT JOIN NOM_FDOC FDOC + ON A.ID_FDOC = FDOC.ID_FDOC + LEFT JOIN SYN_NOM_FIRME S + ON A.ID_SUCURSALA = S.ID_FIRMA + LEFT JOIN NOM_PARTENERI PART + ON A.ID_PARTC = PART.ID_PART + LEFT JOIN NOM_PARTENERI PART1 + ON A.ID_PARTD = PART1.ID_PART + LEFT JOIN VNOM_VENCHEL VENCHELT + ON A.ID_VENCHELT = VENCHELT.ID_VENCHELT + LEFT JOIN NOM_PARTENERI RESP + ON A.ID_RESPONSABIL = RESP.ID_PART + LEFT JOIN SYN_UTILIZATORI UTIL1 + ON A.ID_UTILS = UTIL1.ID_UTIL + LEFT JOIN SYN_UTILIZATORI UTIL2 + ON A.ID_UTIL = UTIL2.ID_UTIL + LEFT JOIN VNOM_LUCRARI LUCR + ON A.ID_LUCRARE = LUCR.ID_LUCRARE + LEFT JOIN VCONTRACTE CTR + ON A.ID_CTR = CTR.ID_CTR + LEFT JOIN NOM_GESTIUNI G1 + ON A.ID_GESTIN = G1.ID_GESTIUNE + LEFT JOIN NOM_GESTIUNI G2 + ON A.ID_GESTOUT = G2.ID_GESTIUNE + LEFT JOIN NOM_VALUTE V + ON A.ID_VALUTA = V.ID_VALUTA + LEFT JOIN NOM_SECTII SECTII + ON A.ID_SECTIE = SECTII.ID_SECTIE + LEFT JOIN jtva_coloane jtva + ON a.id_jtva_coloana = jtva.id_jtva_coloana + left join vsaft_taxtable st + on a.taxcode = st.taxcode + left join vsaft_mecanisme_plati sp + on a.paymentcode = sp.mechanismcode + WHERE A.STERS = 0; + END cursor_verificare; + ------------------------------------------------------------------- + -- MODIFICA NUMAR, DATA, DATA_SCAD si in restul tabelelor + ------------------------------------------------------------------- + PROCEDURE modifica_date_factura(V_ID_VANZARE IN NUMBER, + V_ID_RUTA IN NUMBER, + V_ID_DELEGAT IN NUMBER, + V_ID_AGENT IN NUMBER, + V_ID_MASINA IN NUMBER, + V_DATAORA_EXP IN DATE, + V_ID_FACTURARE IN VANZARI.ID_FACTURARE%TYPE, + V_LISTARE_DETALIATA IN VANZARI.LISTARE_DETALIATA%TYPE, + V_TEXT_ADITIONAL IN VANZARI.TEXT_ADITIONAL%TYPE, + V_TIP_SAFT IN VANZARI.TIP_SAFT%TYPE DEFAULT NULL, + V_EFACTURA IN VANZARI.EFACTURA%TYPE DEFAULT NULL, + V_DATA_ACT IN VANZARI.DATA_ACT%TYPE DEFAULT NULL, + V_DATA_SCAD IN VANZARI.DATA_SCAD%TYPE DEFAULT NULL, + V_NUMAR_ACT IN VANZARI.NUMAR_ACT%TYPE DEFAULT NULL, + V_SERIE_ACT IN VANZARI.SERIE_ACT%TYPE DEFAULT NULL) IS + lnIdFact VANZARI.ID_FACT%TYPE; + lnNrAct VANZARI.NUMAR_ACT%TYPE; + ldDataAct VANZARI.DATA_ACT%TYPE; + ldDataScad VANZARI.DATA_SCAD%TYPE; + lcSerieAct VANZARI.SERIE_ACT%TYPE; + BEGIN + UPDATE VANZARI + SET ID_RUTA = V_ID_RUTA, + ID_DELEGAT = V_ID_DELEGAT, + ID_AGENT = V_ID_AGENT, + ID_MASINA = V_ID_MASINA, + DATAORA_EXP = V_DATAORA_EXP, + ID_FACTURARE = V_ID_FACTURARE, + LISTARE_DETALIATA = NVL(V_LISTARE_DETALIATA, 0), + TEXT_ADITIONAL = V_TEXT_ADITIONAL, + TIP_SAFT = V_TIP_SAFT, + EFACTURA = V_EFACTURA + WHERE ID_VANZARE = V_ID_VANZARE; + + select id_fact, numar_act, data_act, data_scad, serie_act into lnIdFact, lnNrAct, ldDataAct, ldDataScad, lcSerieAct from vanzari where ID_VANZARE = V_ID_VANZARE; + + IF V_SERIE_ACT IS NOT NULL AND V_SERIE_ACT <> NVL(lcSerieAct, '') THEN + UPDATE VANZARI SET SERIE_ACT = V_SERIE_ACT WHERE ID_VANZARE = V_ID_VANZARE; + UPDATE DOCUMENTE SET SERIE_ACT = V_SERIE_ACT WHERE ID_DOC = lnIdFact; + UPDATE ACT SET SERIE_ACT = V_SERIE_ACT WHERE ID_FACT = lnIdFact; + UPDATE IREG_PARTENERI SET SERIE_ACT = V_SERIE_ACT WHERE ID_FACT = lnIdFact; + UPDATE JV2007 SET SERIE_ACT = V_SERIE_ACT WHERE ID_FACT = lnIdFact; + UPDATE RUL SET SERIE_ACT = V_SERIE_ACT WHERE ID_FACT = lnIdFact; + END IF; + + + IF V_NUMAR_ACT IS NOT NULL AND V_NUMAR_ACT <> NVL(lnNrAct, 0) THEN + UPDATE VANZARI SET NUMAR_ACT = V_NUMAR_ACT WHERE ID_VANZARE = V_ID_VANZARE; + UPDATE DOCUMENTE SET NRACT = V_NUMAR_ACT WHERE ID_DOC = lnIdFact; + UPDATE ACT SET NRACT = V_NUMAR_ACT WHERE ID_FACT = lnIdFact; + UPDATE IREG_PARTENERI SET NRACT = V_NUMAR_ACT WHERE ID_FACT = lnIdFact; + UPDATE JV2007 SET NRACT = V_NUMAR_ACT WHERE ID_FACT = lnIdFact; + UPDATE RUL SET NRACT = V_NUMAR_ACT WHERE ID_FACT = lnIdFact; + END IF; + + IF V_DATA_ACT IS NOT NULL and V_DATA_ACT <> NVL(ldDataAct, SYSDATE) THEN + UPDATE VANZARI SET DATA_ACT = V_DATA_ACT WHERE ID_VANZARE = V_ID_VANZARE; + UPDATE DOCUMENTE SET DATAACT = V_DATA_ACT WHERE ID_DOC = lnIdFact; + UPDATE ACT SET DATAACT = V_DATA_ACT WHERE ID_FACT = lnIdFact; + UPDATE IREG_PARTENERI SET DATAACT = V_DATA_ACT WHERE ID_FACT = lnIdFact; + UPDATE JV2007 SET DATAACT = V_DATA_ACT WHERE ID_FACT = lnIdFact; + UPDATE RUL SET DATAACT = V_DATA_ACT, DATAOUT = V_DATA_ACT WHERE ID_FACT = lnIdFact; + END IF; + + IF V_DATA_SCAD IS NOT NULL and V_DATA_SCAD <> NVL(ldDataScad, sysdate) THEN + UPDATE VANZARI SET DATA_SCAD = V_DATA_SCAD WHERE ID_VANZARE = V_ID_VANZARE; + UPDATE ACT SET DATASCAD = V_DATA_SCAD WHERE ID_FACT = lnIdFact; + UPDATE IREG_PARTENERI SET DATASCAD = V_DATA_SCAD WHERE ID_FACT = lnIdFact; + END IF; + + END modifica_date_factura; + ------------------------------------------------------------------- + PROCEDURE modifica_explicatie_articol(V_ID_VANZARE_DET IN NUMBER, + V_EXPLICATIE IN VARCHAR2, + V_ID_UTIL IN NUMBER, + V_TAXCODE IN NUMBER DEFAULT NULL) is + BEGIN + UPDATE VANZARI_DETALII + SET EXPLICATIE = V_EXPLICATIE, TAXCODE = V_TAXCODE + WHERE ID_VANZARE_DET = V_ID_VANZARE_DET; + END modifica_explicatie_articol; + ------------------------------------------------------------------- + PROCEDURE initializeaza_moneda_nationala IS + BEGIN + pack_facturare.nid_moneda_nationala := pack_def.GetIdMonedaNationala(); + END initializeaza_moneda_nationala; + ------------------------------------------------------------------- + PROCEDURE scrie_cursuri_proforma(V_ID_PROFORMA IN NUMBER) IS + BEGIN + INSERT INTO PROFORME_CURSURI + (ID_PROFORMA, ID_VALUTA, CURS, MULTIPLICATOR) + SELECT DISTINCT V_ID_PROFORMA AS ID_PROFORMA, + ID_VALUTA, + CURS, + MULTIPLICATOR + FROM VANZARI_DETALII_TEMP + WHERE ID_VALUTA <> pack_facturare.nid_moneda_nationala; + END scrie_cursuri_proforma; + ------------------------------------------------------------------- + PROCEDURE scrie_cursuri(V_ID_VANZARE IN NUMBER) IS + BEGIN + INSERT INTO VANZARI_CURSURI + (ID_VANZARE, ID_VALUTA, CURS, MULTIPLICATOR) + SELECT DISTINCT V_ID_VANZARE AS ID_VANZARE, + ID_VALUTA, + CURS, + MULTIPLICATOR + FROM VANZARI_DETALII_TEMP + WHERE ID_VALUTA <> pack_facturare.nid_moneda_nationala; + END scrie_cursuri; + ------------------------------------------------------------------- + PROCEDURE scrie_rate_factura(V_DATAORA IN DATE) IS + BEGIN + INSERT INTO CTR_RATE_FACTURI + (ID_RATA, + ID_FACT, + VALVALUTA, + VALVALUTACTVA, + PROCTVA, + ID_VALUTA, + CURS, + ID_UTIL, + DATAORA) + SELECT A.ID_RATA, + B.ID_FACT, + pack_facturare.calculeaza_total_fara_tva(A.PRET, + A.DIFERENTA, + 1, + A.DISCOUNT_UNITAR, + pack_facturare.ndiscount_evidentiat, + A.CANTITATE, + A.PRET_CU_TVA, + A.PROC_TVAV, + pack_sesiune.nzecimale_pretvval, + pack_sesiune.nzecimale_sumaval) as VALVALUTA, + pack_facturare.calculeaza_total_cu_tva(A.PRET, + A.DIFERENTA, + 1, + A.DISCOUNT_UNITAR, + pack_facturare.ndiscount_evidentiat, + A.CANTITATE, + A.PRET_CU_TVA, + A.PROC_TVAV, + pack_sesiune.nzecimale_pretvval, + pack_sesiune.nzecimale_sumaval) as VALVALUTACTVA, + (A.PROC_TVAV - 1) * 100 AS PROC_TVAV, + A.ID_VALUTA, + A.CURS / NVL(A.MULTIPLICATOR, 1) AS CURS, + pack_facturare.nid_util as ID_UTIL, + V_DATAORA as DATAORA + FROM VANZARI_DETALII_TEMP A + LEFT JOIN (SELECT DISTINCT ID_FACT, ID_CTR + FROM ACT_TEMP + WHERE STERS = 0 + AND SCD LIKE '4%') B + ON A.ID_CTR = B.ID_CTR + WHERE A.ID_RATA IS NOT NULL; + + END scrie_rate_factura; + ------------------------------------------------------------------- + FUNCTION calculeaza_k RETURN NUMBER IS + BEGIN + RETURN 0; + END calculeaza_k; + ------------------------------------------------------------------- + PROCEDURE calculeaza_pret(V_PRET_UNITAR IN NUMBER, + V_CURS IN NUMBER, + V_ID_VALUTA IN NUMBER, + V_PROC_TVA IN NUMBER, + V_PRET_ARE_TVA IN NUMBER, + V_TIP IN NUMBER, + V_PRET_FARA_TVA OUT NUMBER, + V_PRET_TVA OUT NUMBER, + V_PRET_CU_TVA OUT NUMBER) IS + BEGIN + V_PRET_FARA_TVA := pack_sesiune.calculeaza_pret_fara_tva(v_pret_unitar, + v_curs, + v_id_valuta, + v_proc_tva, + v_pret_are_tva, + v_tip); + V_PRET_TVA := pack_sesiune.calculeaza_pret_tva(v_pret_unitar, + v_curs, + v_id_valuta, + v_proc_tva, + v_pret_are_tva, + v_tip); + V_PRET_CU_TVA := pack_sesiune.calculeaza_pret_cu_tva(v_pret_unitar, + v_curs, + v_id_valuta, + v_proc_tva, + v_pret_are_tva, + v_tip); + END calculeaza_pret; + ------------------------------------------------------------------- + /* function calculeaza_pret_fara_tva(V_PRET_UNITAR IN NUMBER, + V_CURS IN NUMBER, + V_ID_VALUTA IN NUMBER, + V_PROC_TVA IN NUMBER, + V_PRET_ARE_TVA IN NUMBER, + V_TIP IN NUMBER) return number IS + BEGIN + + return pack_sesiune.calculeaza_pret_fara_tva(V_PRET_UNITAR, + V_CURS, + V_ID_VALUTA, + V_PROC_TVA, + V_PRET_ARE_TVA, V_TIP); + END calculeaza_pret_fara_tva;*/ + + ------------------------------------------------------------------- + /* function calculeaza_pret_TVA(V_PRET_UNITAR IN NUMBER, + V_CURS IN NUMBER, + V_ID_VALUTA IN NUMBER, + V_PROC_TVA IN NUMBER, + V_PRET_ARE_TVA IN NUMBER, + V_TIP IN NUMBER) return NUMBER IS + V_PRET_TVA number := 0; + BEGIN + return pack_sesiune.calculeaza_pret_TVA(V_PRET_UNITAR, + V_CURS, + V_ID_VALUTA, + V_PROC_TVA, + V_PRET_ARE_TVA); + END calculeaza_pret_TVA;*/ + ------------------------------------------------------------------- + /* function calculeaza_pret_cu_tva(V_PRET_UNITAR IN NUMBER, + V_CURS IN NUMBER, + V_ID_VALUTA IN NUMBER, + V_PROC_TVA IN NUMBER, + V_PRET_ARE_TVA IN NUMBER) RETURN NUMBER IS + BEGIN + return pack_sesiune.calculeaza_pret_cu_tva(V_PRET_UNITAR, + V_CURS, + V_ID_VALUTA, + V_PROC_TVA, + V_PRET_ARE_TVA); + END calculeaza_pret_cu_tva;*/ + ------------------------------------------------------------------- + PROCEDURE calculeaza_sume(V_PRET_UNITAR IN NUMBER, + V_DISCOUNT_UNITAR IN NUMBER, + V_ZECIMALE_PRET IN NUMBER, + V_ZECIMALE_SUMA IN NUMBER, + V_CANTITATE IN NUMBER, + V_CURS IN NUMBER, + V_ID_VALUTA IN NUMBER, + V_PROC_TVA IN NUMBER, + V_PRET_ARE_TVA IN NUMBER, + V_SUMA_FARA_TVA OUT NUMBER, + V_SUMA_TVA OUT NUMBER, + V_SUMA_CU_TVA OUT NUMBER) IS + V_CURS_NOU NUMBER; + BEGIN + IF NVL(V_CURS, 0) = 0 THEN + V_CURS_NOU := 1; + ELSE + V_CURS_NOU := V_CURS; + END IF; + V_SUMA_FARA_TVA := pack_facturare.calculeaza_total_fara_tva(V_PRET => V_PRET_UNITAR, + V_AJUSTARE => 0, + V_CURS => V_CURS_NOU, + V_DISCOUNT_UNITAR => (CASE + pack_facturare.ndiscount_evidentiat + WHEN 0 THEN + V_DISCOUNT_UNITAR + ELSE + 0 + END), + V_DISCOUNT_EVIDENTIAT => pack_facturare.ndiscount_evidentiat, + V_CANTITATE => V_CANTITATE, + V_PRET_CU_TVA => V_PRET_ARE_TVA, + V_PROC_TVAV => V_PROC_TVA, + V_ZECIMALE_PRET => V_ZECIMALE_PRET, + V_ZECIMALE_SUMA => V_ZECIMALE_SUMA); + V_SUMA_TVA := pack_facturare.calculeaza_total_tva(V_PRET => V_PRET_UNITAR, + V_AJUSTARE => 0, + V_CURS => V_CURS_NOU, + V_DISCOUNT_UNITAR => (CASE + pack_facturare.ndiscount_evidentiat + WHEN 0 THEN + V_DISCOUNT_UNITAR + ELSE + 0 + END), + V_DISCOUNT_EVIDENTIAT => pack_facturare.ndiscount_evidentiat, + V_CANTITATE => V_CANTITATE, + V_PRET_CU_TVA => V_PRET_ARE_TVA, + V_PROC_TVAV => V_PROC_TVA, + V_ZECIMALE_PRET => V_ZECIMALE_PRET, + V_ZECIMALE_SUMA => V_ZECIMALE_SUMA); + V_SUMA_CU_TVA := pack_facturare.calculeaza_total_cu_tva(V_PRET => V_PRET_UNITAR, + V_AJUSTARE => 0, + V_CURS => V_CURS_NOU, + V_DISCOUNT_UNITAR => (CASE + pack_facturare.ndiscount_evidentiat + WHEN 0 THEN + V_DISCOUNT_UNITAR + ELSE + 0 + END), + V_DISCOUNT_EVIDENTIAT => pack_facturare.ndiscount_evidentiat, + V_CANTITATE => V_CANTITATE, + V_PRET_CU_TVA => V_PRET_ARE_TVA, + V_PROC_TVAV => V_PROC_TVA, + V_ZECIMALE_PRET => V_ZECIMALE_PRET, + V_ZECIMALE_SUMA => V_ZECIMALE_SUMA); + + END calculeaza_sume; + ------------------------------------------------------------------- + /* PROCEDURE finalizeaza_factura(V_DISCOUNT_FACTURA IN NUMBER, + V_ID_DELEGAT IN NUMBER, + V_ID_MASINA IN NUMBER, + V_DATAORA_EXP IN DATE, + V_ID_AGENT IN NUMBER, + V_TEXT_ADITIONAL IN VARCHAR2, + V_PARAMETRU_ADITIONAL IN NUMBER) IS + lnIdFacturare NUMBER(10) := null; + lnListareDetaliata NUMBER(1) := 0; + begin + pack_facturare.finalizeaza_factura(V_DISCOUNT_FACTURA, + V_ID_DELEGAT, + V_ID_MASINA, + lnIdFacturare, + lnListareDetaliata, + V_DATAORA_EXP, + V_ID_AGENT, + V_TEXT_ADITIONAL, + V_PARAMETRU_ADITIONAL); + end; + */ + ------------------------------------------------------------------- + PROCEDURE finalizeaza_factura(V_DISCOUNT_FACTURA IN NUMBER, + V_ID_DELEGAT IN NUMBER, + V_ID_MASINA IN NUMBER, + V_ID_FACTURARE IN NUMBER, + V_LISTARE_DETALIATA IN NUMBER, + V_DATAORA_EXP IN DATE, + V_ID_AGENT IN NUMBER, + V_TEXT_ADITIONAL IN VARCHAR2, + V_PARAMETRU_ADITIONAL IN NUMBER) IS + V_DATAORA DATE := SYSDATE; + lnIdFact vanzari.id_fact%type; + lnIdFact2 vanzari.id_fact%type; + BEGIN + pack_facturare.nid_vanzare := NULL; + + pack_facturare.initializeaza_scriere_actrul(V_DATAORA); + + pack_facturare.scrie_in_vanzari(V_DISCOUNT_FACTURA, + V_ID_DELEGAT, + V_ID_MASINA, + V_ID_FACTURARE, + V_LISTARE_DETALIATA, + V_DATAORA_EXP, + V_ID_AGENT, + V_TEXT_ADITIONAL, + pack_facturare.nid_vanzare); + + pack_facturare.finalizeaza_scriere_actrul(); + + -- completez id_fact dupa generarea id_fact la scrierea in contabilitate + -- daca este factura cu incasare, pack_contafin.id_fact este id_fact-ul documentului de incasare, nu id_fact-ul facturii + lnIdFact := pack_contafin.get_idFact(); + select min(id_fact) + into lnIdFact2 + from act + where cod in (select cod + from act + where id_fact = lnIdFact + and sters = 0) + and scd not like '5%'; + if lnIdFact <> lnIdFact2 then + lnIdFact := lnIdFact2; + end if; + + update vanzari + set id_fact = lnIdFact + where id_vanzare = pack_facturare.nid_vanzare; + + CASE + WHEN V_PARAMETRU_ADITIONAL = 1 AND + pack_facturare.ntip IN (3, 21, 25, 28, 42, 47) THEN + -- daca e comanda, atunci V_PARAMETRU_ADITIONAL este V_INCHIDERE_COMANDA + pack_facturare.inchide_comanda(); + WHEN pack_facturare.ntip = 4 THEN + -- daca e facturare din aviz, atunci V_PARAMETRU_ADITIONAL este V_VERIFICARE_FACTURAT + pack_facturare.scrie_cantitati_vanzari_avize; + pack_facturare.scrie_corespondente_vanzari(1); + pack_facturare.marcheaza_facturat(V_PARAMETRU_ADITIONAL); + WHEN pack_facturare.ntip = 24 THEN + -- daca e aviz de retur, atunci V_PARAMETRU_ADITIONAL este V_VERIFICARE_FACTURAT ( = 0 ) + pack_facturare.scrie_corespondente_vanzari(2); + pack_facturare.marcheaza_facturat(V_PARAMETRU_ADITIONAL); + WHEN pack_facturare.ntip in ( 2, 6, 52) THEN + pack_facturare.scrie_rate_factura(V_DATAORA); + WHEN pack_facturare.ntip in (8, 9) THEN + -- daca e factura de retur + pack_facturare.scrie_corespondente_vanzari(3); + ELSE + dbms_output.put_line('---'); + END CASE; + + IF pack_facturare.nid_set = + 25000 + pack_facturare.nTipFacturaRestaurant - 1 + + pack_facturare.nscadere_stoc * 10 AND + to_number(pack_sesiune.getoptiunefirma('DESCARCAREGESTZ')) = 1 THEN + pack_grestaurant.descarcare_automata_zi(pack_facturare.ddata_act, + pack_facturare.nid_vanzare, + NULL, + NULL, + pack_facturare.nid_sucursala, + pack_facturare.nid_util); + END IF; + END finalizeaza_factura; + ------------------------------------------------------------------- + PROCEDURE finalizeaza_avize_lucrare(V_DISCOUNT_FACTURA IN NUMBER) IS + V_DATAORA DATE := SYSDATE; + V_ID_DELEGAT VANZARI.ID_DELEGAT%TYPE; + V_ID_MASINA VANZARI.ID_MASINA%TYPE; + V_ID_AGENT VANZARI.ID_AGENT%TYPE; + V_ID_RUTA VANZARI.ID_RUTA%TYPE; + V_COD VANZARI.COD%TYPE; + i NUMBER(10); + V_NUME_GESTIUNE NOM_GESTIUNI.NUME_GESTIUNE%TYPE; + + TYPE tab_vanzari_type IS TABLE OF vanzari_temp%ROWTYPE; + tab_vanz tab_vanzari_type; + + lnDiscountTVA VANZARI.DISCOUNT_TVA%TYPE; + lnValoareAchizitie VANZARI.VALOARE_ACHIZITIE%TYPE; + lnSerieIncasat ACT.SERIE_ACT%TYPE; + lnNrIncasat ACT.NRACT%TYPE; + lnSumaIncasat ACT.SUMA%TYPE; + lnTipIncasat NUMBER(2); + lnTotalFaraTVA VANZARI.TOTAL_FARA_TVA%TYPE; + lnTotalTVA VANZARI.TOTAL_TVA%TYPE; + lnTotalCuTVA VANZARI.TOTAL_CU_TVA%TYPE; + lnIdGestiune VANZARI.ID_GESTIUNE%TYPE; + lnIdValuta VANZARI.Id_Valuta%TYPE; + lnCurs VANZARI.CURS%TYPE; + lnMultiplicator VANZARI.MULTIPLICATOR%TYPE; + BEGIN + pack_facturare.nid_vanzare := NULL; + -- nu se mai genereaza codul la initializare, trebuie sa-l generez la fiecare document + -- pana acum aveam conditia sa-l genereze doar de la i > 1 + pack_facturare.initializeaza_scriere_actrul(V_DATAORA, 0); + + SELECT * BULK COLLECT INTO tab_vanz FROM VANZARI_TEMP; + + FOR I IN tab_vanz.first .. tab_vanz.last LOOP + + V_COD := pack_contafin.GENEREAZA_COD(user); + + BEGIN + SELECT ID_DELEGAT, ID_MASINA, ID_AGENT, ID_RUTA + INTO V_ID_DELEGAT, V_ID_MASINA, V_ID_AGENT, V_ID_RUTA + FROM FACT_NOM_RUTE + WHERE ID_RUTA IN (SELECT ID_RUTA + FROM FACT_NOM_RUTEGEST + WHERE ID_GESTIUNE = tab_vanz(i).id_gestiune_dest + AND STERS = 0) + AND STERS = 0; + EXCEPTION + WHEN TOO_MANY_ROWS THEN + SELECT NUME_GESTIUNE + INTO V_NUME_GESTIUNE + FROM NOM_GESTIUNI + WHERE ID_GESTIUNE = tab_vanz(i).id_gestiune_dest; + + RAISE_APPLICATION_ERROR(-20000, + 'Pentru gestiunea ' || V_NUME_GESTIUNE || + ' aveti configurate mai multe rute! (FACT-023)'); + + WHEN NO_DATA_FOUND THEN + V_ID_DELEGAT := NULL; + V_ID_MASINA := NULL; + V_ID_AGENT := NULL; + V_ID_RUTA := NULL; + END; + + INSERT INTO VANZARI + (id_util, + dataora, + numar_act, + serie_act, + id_lucrare, + id_comanda, + tip, + id_gestiune, + cod, + data_act, + discount, + discount_evidentiat, + id_delegat, + id_masina, + id_agent, + id_ruta, + id_sucursala, + id_sectie) + VALUES + (pack_facturare.nid_util, + V_DATAORA, + tab_vanz (i).numar_act, + pack_facturare.cserie_act, + tab_vanz (i).id_lucrare, + tab_vanz (i).id_comanda, + pack_facturare.ntip, + tab_vanz (i).id_gestiune_dest, + V_COD, + pack_facturare.ddata_act, + V_DISCOUNT_FACTURA, + pack_facturare.ndiscount_evidentiat, + V_ID_DELEGAT, + V_ID_MASINA, + V_ID_AGENT, + V_ID_RUTA, + pack_facturare.nid_sucursala, + pack_facturare.nid_sectie_stoc) + RETURNING ID_VANZARE INTO pack_facturare.nid_vanzare; + + pack_facturare.scrie_cursuri(pack_facturare.nid_vanzare); + + INSERT /*+ APPEND */ + INTO VANZARI_DETALII + (ID_VANZARE, + ID_ARTICOL, + SERIE, + ID_POL, + CANTITATE, + PRET_ACHIZITIE, + PRETD, + ID_VALUTAD, + PRET, + PROC_TVAV, + DISCOUNT_UNITAR, + ID_GESTIUNE, + ID_VALUTA, + CONT, + PRET_CU_TVA, + ID_JTVA_COLOANA) + SELECT pack_facturare.nid_vanzare as ID_VANZARE, + ID_ARTICOL, + SERIE, + ID_POL, + CANTITATE, + PRET_ACHIZITIE, + PRETD, + ID_VALUTAD, + PRET, + PROC_TVAV, + DISCOUNT_UNITAR, + ID_GESTIUNE, + ID_VALUTA, + CONT, + PRET_CU_TVA, + ID_JTVA_COLOANA + FROM VANZARI_DETALII_TEMP + WHERE ID_COMANDA = tab_vanz(i).id_comanda + AND NUMAR_ACT = tab_vanz(i).numar_act + ORDER BY ID_TEMP; + + UPDATE RUL_TEMP SET COD = V_COD WHERE nract = tab_vanz(i).numar_act; + UPDATE ACT_TEMP SET COD = V_COD WHERE nract = tab_vanz(i).numar_act; + + -- Completare totaluri in vanzari din vanzari_detalii pentru a usura selectiile din fact_vfacturi + begin + select DISC_TVA AS DISCOUNT_TVA, + VALOARE_ACHIZITIE, + decode(a.in_valuta, + 1, + ROUND(a.curs * (a.suma_fara_tva - a.disc_fara_tva) / + a.multiplicator, + pack_sesiune.getOptiuneFirma('PC')), + a.suma_fara_tva - a.disc_fara_tva) as TOTAL_FARA_TVA, + decode(a.in_valuta, + 1, + ROUND(a.curs * (a.suma_tva - a.disc_tva) / + a.multiplicator, + pack_sesiune.getOptiuneFirma('PC')), + a.suma_tva - a.disc_tva) as TOTAL_TVA, + decode(a.in_valuta, + 1, + ROUND(a.curs * (a.suma_fara_tva - a.disc_fara_tva) / + a.multiplicator, + pack_sesiune.getOptiuneFirma('PC')), + a.suma_fara_tva - a.disc_fara_tva) + + decode(a.in_valuta, + 1, + ROUND(a.curs * (a.suma_tva - a.disc_tva) / + a.multiplicator, + pack_sesiune.getOptiuneFirma('PC')), + a.suma_tva - a.disc_tva) as TOTAL_CU_TVA, + pack_facturare.cserie_act_incasare as SERIE_INCASAT, + pack_facturare.nnumar_act_incasare as NR_INCASAT, + pack_facturare.nsuma_incasare AS SUMA_INCASAT, + pack_facturare.ntip_doc_incasare as TIP_INCASAT, + a.id_valuta, + a.curs, + a.multiplicator + INTO lnDiscountTVA, + lnValoareAchizitie, + lnTotalFaraTVA, + lnTotalTVA, + lnTotalCuTVA, + lnSerieIncasat, + lnNrIncasat, + lnSumaIncasat, + lnTipIncasat, + lnIdValuta, + lnCurs, + lnMultiplicator + FROM (select NVL(V_DISCOUNT_FACTURA, 0) as DISC_FARA_TVA, + pack_facturare.nin_valuta AS IN_VALUTA, + ROUND(NVL(V_DISCOUNT_FACTURA, 0) * + max(vd.proc_tvav - 1), + pack_sesiune.getOptiuneFirma('PPRETV')) as DISC_TVA, + sum(pack_facturare.calculeaza_total_fara_tva_fact(vd.pret / + decode(pack_facturare.nin_valuta, + 1, + 1, + NVL(vc.multiplicator, + 1)), + decode(pack_facturare.nin_valuta, + 1, + 0, + vd.diferenta), + decode(pack_facturare.nin_valuta, + 1, + 1, + NVL(vc.curs, + 1)), + NVL(vd.discount_unitar, + 0) / + decode(pack_facturare.nin_valuta, + 1, + 1, + NVL(vc.multiplicator, + 1)), + pack_facturare.ndiscount_evidentiat, + vd.cantitate, + vd.pret_cu_tva, + vd.proc_tvav)) AS SUMA_FARA_TVA, + sum(pack_facturare.calculeaza_total_tva_fact(vd.pret / + decode(pack_facturare.nin_valuta, + 1, + 1, + NVL(vc.multiplicator, + 1)), + decode(pack_facturare.nin_valuta, + 1, + 0, + vd.diferenta), + decode(pack_facturare.nin_valuta, + 1, + 1, + NVL(vc.curs, + 1)), + NVL(vd.discount_unitar, + 0) / + decode(pack_facturare.nin_valuta, + 1, + 1, + NVL(vc.multiplicator, + 1)), + pack_facturare.ndiscount_evidentiat, + vd.cantitate, + vd.pret_cu_tva, + vd.proc_tvav)) as SUMA_TVA, + sum(round(vd.cantitate * vd.pret_achizitie, + pack_sesiune.getOptiuneFirma('PC'))) AS VALOARE_ACHIZITIE, + max(decode(pack_facturare.nin_valuta, + 1, + vc.id_valuta, + 0)) as id_valuta, + max(decode(pack_facturare.nin_valuta, 1, vc.curs, 1)) as curs, + max(decode(pack_facturare.nin_valuta, + 1, + vc.multiplicator, + 1)) as multiplicator + from (select a.id_vanzare_set, + a.pret, + a.proc_tvav, + a.cantitate, + a.diferenta, + a.discount_unitar, + a.id_valuta, + a.pret_cu_tva, + a.pret_achizitie + FROM VANZARI_DETALII_TEMP a + WHERE a.ID_COMANDA = tab_vanz(i).id_comanda + AND a.NUMAR_ACT = tab_vanz(i).numar_act + and nvl(a.id_vanzare_set, 0) = 0 + union all + select b.id_vanzare_set, + b.pret, + max(c.proc_tvav) as proc_tvav, + b.cantitate, + 0 as diferenta, + b.discount_unitar, + decode(pack_facturare.nin_valuta, + 0, + pack_def.GetIdMonedaNationala(), + c.id_valuta) as id_valuta, + b.pret_cu_tva, + sum(decode(b.cantitate, + 0, + 0, + c.pret_achizitie * c.cantitate / + b.cantitate)) as pret_achizitie + from vanzari_detalii_temp c + left join vanzari_seturi b + on b.id_vanzare_set = c.id_vanzare_set + WHERE nvl(c.id_vanzare_set, 0) <> 0 + and c.ID_COMANDA = tab_vanz(i).id_comanda + AND c.NUMAR_ACT = tab_vanz(i).numar_act + and nvl(pack_facturare.nin_valuta, -1) > -1 + group by b.id_vanzare_set, + b.pret, + b.cantitate, + b.discount_unitar, + b.pret_cu_tva, + decode(pack_facturare.nin_valuta, + 0, + pack_def.GetIdMonedaNationala(), + c.id_valuta)) vd + left join vanzari_cursuri vc + on vc.id_vanzare = pack_facturare.nid_vanzare + and vd.id_valuta = vc.id_valuta) a; + + update vanzari + set discount_tva = lnDiscountTVA, + valoare_achizitie = lnValoareAchizitie, + total_fara_tva = lnTotalFaraTVA, + total_tva = lnTotalTVA, + total_cu_tva = lnTotalCuTVA, + serie_incasat = lnSerieIncasat, + nr_incasat = lnNrIncasat, + suma_incasat = lnSumaIncasat, + tip_incasat = lnTipIncasat, + id_valuta = lnIdValuta, + curs = lnCurs, + multiplicator = lnMultiplicator + where id_vanzare = pack_facturare.nid_vanzare; + + exception + when NO_DATA_FOUND then + null; + end; + --------------------------------------------- + END LOOP; + + pack_facturare.finalizeaza_scriere_actrul(); + + END finalizeaza_avize_lucrare; + + ------------------------------------------------------------------- + /* PROCEDURE finalizeaza_scriere_verificare(V_DISCOUNT_FACTURA IN NUMBER, + V_ID_DELEGAT IN NUMBER, + V_ID_MASINA IN NUMBER, + V_DATAORA_EXP IN DATE, + V_ID_AGENT IN NUMBER, + V_TEXT_ADITIONAL IN VARCHAR2, + V_SIR_MODIFICARI_ACONT IN VARCHAR2, + V_SIR_MODIFICARI_PART IN VARCHAR, + V_PARAMETRU_ADITIONAL IN NUMBER, + V_ID_VANZARE OUT NUMBER) is + lnIdFacturare NUMBER(10) := null; + lnListareDetaliata NUMBER(1) := 0; + begin + pack_facturare.finalizeaza_scriere_verificare(V_DISCOUNT_FACTURA, + V_ID_DELEGAT, + V_ID_MASINA, + lnIdFacturare, + lnListareDetaliata, + V_DATAORA_EXP, + V_ID_AGENT, + V_TEXT_ADITIONAL, + V_SIR_MODIFICARI_ACONT, + V_SIR_MODIFICARI_PART, + V_PARAMETRU_ADITIONAL, + V_ID_VANZARE); + end;*/ + + ------------------------------------------------------------------- + PROCEDURE finalizeaza_scriere_verificare(V_DISCOUNT_FACTURA IN NUMBER, + V_ID_DELEGAT IN NUMBER, + V_ID_MASINA IN NUMBER, + V_DATAORA_EXP IN DATE, + V_ID_AGENT IN NUMBER, + V_TEXT_ADITIONAL IN VARCHAR2, + V_SIR_MODIFICARI_ACONT IN VARCHAR2, + V_SIR_MODIFICARI_PART IN VARCHAR, + V_PARAMETRU_ADITIONAL IN NUMBER, + V_ID_VANZARE OUT NUMBER) IS + V_ID_FACTURARE NUMBER(20) := NULL; + V_LISTARE_DETALIATA NUMBER(20) := NULL; + BEGIN + finalizeaza_scriere_verificare(V_DISCOUNT_FACTURA, + V_ID_DELEGAT, + V_ID_MASINA, + V_ID_FACTURARE, + V_LISTARE_DETALIATA, + V_DATAORA_EXP, + V_ID_AGENT, + V_TEXT_ADITIONAL, + V_SIR_MODIFICARI_ACONT, + V_SIR_MODIFICARI_PART, + V_PARAMETRU_ADITIONAL, + V_ID_VANZARE); + END; + + PROCEDURE finalizeaza_scriere_verificare(V_DISCOUNT_FACTURA IN NUMBER, + V_ID_DELEGAT IN NUMBER, + V_ID_MASINA IN NUMBER, + V_ID_FACTURARE IN NUMBER, + V_LISTARE_DETALIATA IN NUMBER, + V_DATAORA_EXP IN DATE, + V_ID_AGENT IN NUMBER, + V_TEXT_ADITIONAL IN VARCHAR2, + V_SIR_MODIFICARI_ACONT IN VARCHAR2, + V_SIR_MODIFICARI_PART IN VARCHAR, + V_PARAMETRU_ADITIONAL IN NUMBER, + V_ID_VANZARE OUT NUMBER) IS + V_SEPARATOR_LINIE VARCHAR2(5) := ';'; + V_SEPARATOR VARCHAR2(5) := '|'; + BEGIN + IF V_SIR_MODIFICARI_ACONT IS NOT NULL THEN + MERGE INTO ACT_TEMP A + USING (select to_number(substr(lista || V_SEPARATOR, + 1, + instr(lista, V_SEPARATOR) - 1)) as id_act, + substr(lista || V_SEPARATOR || V_SEPARATOR, + instr(lista || V_SEPARATOR || V_SEPARATOR, + V_SEPARATOR) + 1, + instr(lista || V_SEPARATOR || V_SEPARATOR, + V_SEPARATOR, + 1, + 2) - + instr(lista || V_SEPARATOR || V_SEPARATOR, + V_SEPARATOR) - 1) as ascd, + rtrim(substr(lista || V_SEPARATOR || V_SEPARATOR, + instr(lista || V_SEPARATOR || V_SEPARATOR, + V_SEPARATOR, + 1, + 2) + 1), + V_SEPARATOR) as ascc + from (SELECT X as LISTA + FROM table(charc2collection(V_SIR_MODIFICARI_ACONT, + V_SEPARATOR_LINIE)) + + )) B + ON (A.ID_ACT = B.ID_ACT) + WHEN MATCHED THEN + UPDATE SET ASCD = B.ASCD, ASCC = B.ASCC; + + END IF; + + IF V_SIR_MODIFICARI_PART IS NOT NULL THEN + MERGE INTO ACT_TEMP A + USING (select to_number(substr(lista || V_SEPARATOR, + 1, + instr(lista, V_SEPARATOR) - 1)) as id_act, + nvl(to_number(substr(lista || V_SEPARATOR || V_SEPARATOR, + instr(lista || V_SEPARATOR || + V_SEPARATOR, + V_SEPARATOR) + 1, + instr(lista || V_SEPARATOR || + V_SEPARATOR, + V_SEPARATOR, + 1, + 2) - + instr(lista || V_SEPARATOR || + V_SEPARATOR, + V_SEPARATOR) - 1)), + 0) as id_partd, + nvl(to_number(rtrim(substr(lista || V_SEPARATOR || + V_SEPARATOR, + instr(lista || V_SEPARATOR || + V_SEPARATOR, + V_SEPARATOR, + 1, + 2) + 1), + V_SEPARATOR)), + 0) as id_partc + from (SELECT X as LISTA + FROM table(charc2collection(V_SIR_MODIFICARI_PART, + V_SEPARATOR_LINIE)))) B + ON (A.ID_ACT = B.ID_ACT) + WHEN MATCHED THEN + UPDATE SET ID_PARTD = B.ID_PARTD, ID_PARTC = B.ID_PARTC; + + END IF; + + IF pack_facturare.ntip = 27 THEN + pack_facturare.finalizeaza_avize_lucrare(V_DISCOUNT_FACTURA); + V_ID_VANZARE := NULL; + ELSE + pack_facturare.finalizeaza_factura(V_DISCOUNT_FACTURA, + V_ID_DELEGAT, + V_ID_MASINA, + V_ID_FACTURARE, + V_LISTARE_DETALIATA, + V_DATAORA_EXP, + V_ID_AGENT, + V_TEXT_ADITIONAL, + V_PARAMETRU_ADITIONAL); + V_ID_VANZARE := pack_facturare.nid_vanzare; + END IF; + + END finalizeaza_scriere_verificare; + ------------------------------------------------------------------- + Procedure initializeaza_scriere_actrul(tdDataOra IN DATE, + tnSuprascriereCod IN NUMBER DEFAULT 1) IS + BEGIN + pack_contafin.initializeaza_scriere_act_rul(pack_facturare.nid_util, + tdDataOra, + pack_facturare.nan, + pack_facturare.nluna, + tnSuprascriereCod, + 1, -- tnSuprascriereAnLuna + 0, -- tnScrie_Sterge: 0 = scriere, 1 = refacere, 2 = stergere + pack_facturare.nid_sucursala); + END initializeaza_scriere_actrul; + ------------------------------------------------------------------- + PROCEDURE finalizeaza_scriere_actrul IS + BEGIN + pack_contafin.finalizeaza_scriere_act_rul(); + END finalizeaza_scriere_actrul; + ------------------------------------------------------------------- + PROCEDURE marcheaza_facturat(V_VERIFICARE IN NUMBER) IS + BEGIN + IF V_VERIFICARE = 0 THEN + UPDATE VANZARI + SET FACTURAT = 1, ID_UTILFACT = pack_facturare.nid_util + WHERE ID_VANZARE IN + (SELECT id_vanzare_aviz as id_vanzare + FROM vanzari_coresp + WHERE id_vanzare_Fact = pack_facturare.nid_vanzare + AND sters = 0 + AND tip <> 3) -- modificare v 2.0.56 : tip <> 3 + AND FACTURAT = 0; + ELSE + UPDATE VANZARI + SET FACTURAT = 1, ID_UTILFACT = pack_facturare.nid_util + WHERE ID_VANZARE IN + (select id_vanzare + from (select a.id_vanzare, + sum(a.cantitate - NVL(b.cantitate, 0)) as ramas + from vanzari_detalii a + left join (select sum(cantitate) as cantitate, + id_vanzare_det_aviz as id_vanzare_det + from vanzari_cantitati + where sters = 0 + group by id_vanzare_det_aviz) b + on a.id_vanzare_det = b.id_vanzare_det + where a.id_vanzare in + (select id_vanzare_aviz as id_vanzare + from vanzari_coresp + where id_vanzare_Fact = + pack_facturare.nid_vanzare + and sters = 0 + and tip <> 3) -- modificare v 2.0.56 : sters = 0 and tip <> 3 + group by a.id_vanzare) + where ramas = 0); + + END IF; + END marcheaza_facturat; + ------------------------------------------------------------------- + PROCEDURE scrie_cantitati_vanzari_avize IS + V_SEPARATOR VARCHAR2(10) := ','; + V_LISTA VARCHAR2(3000) := ''; + BEGIN + V_LISTA := pack_facturare.clistaid_avize || V_SEPARATOR || + pack_facturare.nid_vanzare || V_SEPARATOR; + + INSERT INTO VANZARI_CANTITATI + (ID_VANZARE_DET, ID_VANZARE_DET_AVIZ, CANTITATE) + SELECT A.MAX_IDT AS ID_VANZARE_DET, + A.ID_VANZARE_DET AS ID_VANZARE_DET_AVIZ, + (CASE + WHEN A.TOTAL >= 0 THEN + A.CANTITATE + ELSE + A.CANTITATE + A.TOTAL + END) AS CANTITATE + FROM (SELECT MAX(A.ID_VANZARE) OVER(PARTITION BY A.ID_ARTICOL, A.SERIE, A.DISCOUNT_UNITAR, A.ID_POL, A.ID_VALUTA, A.PRET, A.ID_GESTIUNE, A.CONT) AS MAX_ID, + MAX(A.ID_VANZARE_DET) OVER(PARTITION BY A.ID_ARTICOL, A.SERIE, A.DISCOUNT_UNITAR, A.ID_POL, A.ID_VALUTA, A.PRET, A.ID_GESTIUNE, A.CONT) AS MAX_IDT, + SUM(DECODE(A.ID_VANZARE, + pack_facturare.nid_vanzare, + A.CANTITATE, + (-1) * A.CANTITATE)) OVER(PARTITION BY A.ID_ARTICOL, A.SERIE, A.DISCOUNT_UNITAR, A.ID_POL, A.ID_VALUTA, A.PRET, A.ID_GESTIUNE, A.CONT ORDER BY DECODE(A.ID_VANZARE, pack_facturare.nid_vanzare, 0, A.ID_VANZARE_DET)) AS TOTAL, + A.ID_VANZARE, + DECODE(A.ID_VANZARE, + pack_facturare.nid_vanzare, + 0, + A.ID_VANZARE_DET) AS ID_VANZARE_DET, + DECODE(A.ID_VANZARE, + pack_facturare.nid_vanzare, + 0, + A.CANTITATE) AS CANTITATE, + A.ID_ARTICOL, + A.SERIE, + A.DISCOUNT_UNITAR, + A.ID_POL, + A.ID_VALUTA, + A.PRET, + A.ID_GESTIUNE, + A.CONT + FROM VANZARI_DETALII A + WHERE A.ID_VANZARE IN + (SELECT X as ID_VANZARE + FROM table(charn2collection(V_LISTA, V_SEPARATOR))) + AND A.STERS = 0 + ORDER BY A.ID_ARTICOL, + A.SERIE, + A.DISCOUNT_UNITAR, + A.ID_POL, + A.ID_VALUTA, + A.PRET, + A.ID_GESTIUNE, + A.CONT, + A.ID_VANZARE_DET DESC) A + WHERE A.MAX_ID = pack_facturare.nid_vanzare + AND A.ID_VANZARE_DET <> 0 + AND A.CANTITATE + A.TOTAL > 0 + ORDER BY A.MAX_IDT, A.ID_VANZARE_DET; + + END scrie_cantitati_vanzari_avize; + ------------------------------------------------------------------- + PROCEDURE scrie_corespondente_vanzari(V_TIP IN NUMBER) IS + V_LISTAID VARCHAR2(2000); + V_SEPARATOR VARCHAR2(1) := ','; + BEGIN + IF V_TIP = 1 THEN + -- facturare din aviz: + V_LISTAID := SUBSTR(pack_facturare.clistaid_avize, + 1, + LENGTH(pack_facturare.clistaid_avize) - 1); + ELSE + V_LISTAID := pack_facturare.clistaid; + END IF; + + INSERT INTO VANZARI_CORESP + (ID_VANZARE_FACT, ID_VANZARE_AVIZ, TIP) + SELECT pack_facturare.nid_vanzare as ID_VANZARE_FACT, + ID_VANZARE as ID_VANZARE_AVIZ, + V_TIP as TIP + FROM VANZARI + WHERE ID_VANZARE IN + (SELECT X as ID_VANZARE + FROM table(charn2collection(V_LISTAID, V_SEPARATOR)) + + ); + -- Completez VANZARI.AVIZE redundant, pentru a nu face mai rapid fact_vfacturi (selecta din fact_vdetalii_avize) + UPDATE VANZARI + SET AVIZE = + SUBSTR((select stringagg(nvl(a2.serie_act, '') || CHR(32) || + a2.numar_act) as nr_avize + from vanzari_coresp a1 + join vanzari a2 + on a1.id_vanzare_aviz = a2.id_vanzare + where a1.id_vanzare_fact = pack_facturare.nid_vanzare),1,1000); + + END scrie_corespondente_vanzari; + ------------------------------------------------------------------- + PROCEDURE cauta_date_ultima_factura(V_ID_PART IN NUMBER, + V_ID_SUCURSALA IN NUMBER, + V_ID_DELEGAT OUT NUMBER, + V_NUME_DELEGAT OUT VARCHAR2, + V_SERIE_BI OUT VARCHAR2, + V_CNP OUT VARCHAR2, + V_ID_MASINA OUT NUMBER, + V_NRINMAT OUT VARCHAR2) IS + BEGIN + BEGIN + SELECT A.ID_DELEGAT, + B.DENUMIRE, + B.REG_COMERT, + B.COD_FISCAL, + A.ID_MASINA, + C.NRINMAT + INTO V_ID_DELEGAT, + V_NUME_DELEGAT, + V_SERIE_BI, + V_CNP, + V_ID_MASINA, + V_NRINMAT + FROM (SELECT ID_DELEGAT, + ID_MASINA, + ROW_NUMBER() OVER(ORDER BY DATA_ACT DESC) AS NRCRT + FROM VANZARI + WHERE STERS = 0 + AND ID_PART = V_ID_PART + AND NVL(ID_SUCURSALA, -99) = NVL(V_ID_SUCURSALA, -99)) A + LEFT JOIN NOM_PARTENERI B + ON A.ID_DELEGAT = B.ID_PART + AND B.STERS = 0 + AND B.INACTIV = 0 + LEFT JOIN NOM_MASINI C + ON A.ID_MASINA = C.ID_MASINA + AND C.STERS = 0 + AND C.INACTIV = 0 + WHERE A.NRCRT = 1; + EXCEPTION + WHEN NO_DATA_FOUND THEN + BEGIN + -- daca nu am gasit datele de pe ultima factura, iar id_part corespunde unei persoane fizice, + -- atunci iau datele acesteia + SELECT ID_PART, DENUMIRE, REG_COMERT, COD_FISCAL + INTO V_ID_DELEGAT, V_NUME_DELEGAT, V_SERIE_BI, V_CNP + FROM NOM_PARTENERI + WHERE ID_PART = V_ID_PART + AND TIP_PERSOANA = 2; + + MERGE INTO CORESP_TIP_PART + USING DUAL + ON (ID_TIP_PART = pack_sesiune.getoptiunefirma(USER, 'IDTIPDELEGATI') AND ID_PART = V_ID_PART) + WHEN NOT MATCHED THEN + INSERT + (ID_TIP_PART, ID_PART) + VALUES + (pack_sesiune.getoptiunefirma(USER, 'IDTIPDELEGATI'), + V_ID_PART); + + MERGE INTO CORESP_DELEGATI_PART + USING DUAL + ON (ID_DELEGAT = V_ID_PART AND ID_PART = V_ID_PART) + WHEN NOT MATCHED THEN + INSERT (ID_DELEGAT, ID_PART) VALUES (V_ID_PART, V_ID_PART); + + EXCEPTION + WHEN NO_DATA_FOUND THEN + V_ID_DELEGAT := NULL; + V_NUME_DELEGAT := ''; + V_SERIE_BI := ''; + V_CNP := ''; + END; + V_ID_MASINA := NULL; + V_NRINMAT := ''; + END; + END cauta_date_ultima_factura; + -------------------------------------------------------------------------------------------------------------- + -- caut datele ultimei facturi dupa tip (pentru avize de transfer intre subunitati, nu am client) + PROCEDURE cauta_date_ultima_factura_tip(V_TIP IN NUMBER, + V_ID_SUCURSALA IN NUMBER, + V_ID_DELEGAT OUT NUMBER, + V_NUME_DELEGAT OUT VARCHAR2, + V_SERIE_BI OUT VARCHAR2, + V_CNP OUT VARCHAR2, + V_ID_MASINA OUT NUMBER, + V_NRINMAT OUT VARCHAR2) IS + BEGIN + BEGIN + SELECT A.ID_DELEGAT, + B.DENUMIRE, + B.REG_COMERT, + B.COD_FISCAL, + A.ID_MASINA, + C.NRINMAT + INTO V_ID_DELEGAT, + V_NUME_DELEGAT, + V_SERIE_BI, + V_CNP, + V_ID_MASINA, + V_NRINMAT + FROM (SELECT ID_DELEGAT, + ID_MASINA, + ROW_NUMBER() OVER(ORDER BY ID_VANZARE DESC) AS NRCRT + FROM VANZARI + WHERE STERS = 0 + AND TIP = V_TIP + AND NVL(ID_SUCURSALA, -99) = NVL(V_ID_SUCURSALA, -99)) A + LEFT JOIN NOM_PARTENERI B + ON A.ID_DELEGAT = B.ID_PART + AND B.STERS = 0 + AND B.INACTIV = 0 + LEFT JOIN NOM_MASINI C + ON A.ID_MASINA = C.ID_MASINA + AND C.STERS = 0 + AND C.INACTIV = 0 + WHERE A.NRCRT = 1; + EXCEPTION + WHEN NO_DATA_FOUND THEN + V_ID_DELEGAT := NULL; + V_NUME_DELEGAT := ''; + V_SERIE_BI := ''; + V_CNP := ''; + V_ID_MASINA := NULL; + V_NRINMAT := ''; + END; + + END cauta_date_ultima_factura_tip; + ---------------------------------------------------------------------------- + PROCEDURE cauta_date_comanda(V_ID_CLIENT IN NUMBER, + V_ID_SUCURSALA IN NUMBER, + V_DATA_FACTURA IN DATE, + V_LISTAID OUT VARCHAR2, + V_DESCRIERE OUT VARCHAR2) is + BEGIN + BEGIN + SELECT TO_CHAR(ID_COMANDA), NR_COMANDA + INTO V_LISTAID, V_DESCRIERE + FROM (SELECT ROW_NUMBER() OVER(ORDER BY DATA_LIVRARE) AS NR_CRT, + ID_COMANDA, + NR_COMANDA + FROM VCOMENZI + WHERE FACTURAT = 0 + AND INTERNA = 2 + AND ID_PART = V_ID_CLIENT + AND NVL(ID_SUCURSALA, -99) = NVL(V_ID_SUCURSALA, -99) + AND TRUNC(DATA_LIVRARE) = TRUNC(V_DATA_FACTURA)) + WHERE NR_CRT = 1; + EXCEPTION + WHEN NO_DATA_FOUND THEN + V_LISTAID := NULL; + V_DESCRIERE := NULL; + END; + END cauta_date_comanda; + ---------------------------------------------------------------------------- + PROCEDURE cauta_date_comanda_gest(V_ID_GESTIUNE IN NUMBER, + V_ID_SUCURSALA IN NUMBER, + V_DATA_FACTURA IN DATE, + V_LISTAID OUT VARCHAR2, + V_DESCRIERE OUT VARCHAR2) is + BEGIN + BEGIN + SELECT TO_CHAR(ID_COMANDA), NR_COMANDA + INTO V_LISTAID, V_DESCRIERE + FROM (SELECT ROW_NUMBER() OVER(ORDER BY DATA_LIVRARE) AS NR_CRT, + ID_COMANDA, + NR_COMANDA + FROM VCOMENZI + WHERE FACTURAT = 0 + AND NVL(ID_SUCURSALA, -99) = NVL(V_ID_SUCURSALA, -99) + AND INTERNA = 3 + AND ID_GESTIUNE = V_ID_GESTIUNE + AND TRUNC(DATA_LIVRARE) = TRUNC(V_DATA_FACTURA)) + WHERE NR_CRT = 1; + EXCEPTION + WHEN NO_DATA_FOUND THEN + V_LISTAID := NULL; + V_DESCRIERE := NULL; + END; + END cauta_date_comanda_gest; + ---------------------------------------------------------------------------- + -- e folosita in view-urile fact_vrap_centralizator_* ( in afara de _fact ) + FUNCTION calculeaza_total_cu_tva(V_PRET IN NUMBER, + V_AJUSTARE IN NUMBER, + V_CURS IN NUMBER, + V_DISCOUNT_UNITAR IN NUMBER, + V_DISCOUNT_EVIDENTIAT IN NUMBER, + V_CANTITATE IN NUMBER, + V_PRET_CU_TVA IN NUMBER, + V_PROC_TVAV IN NUMBER) + RETURN NUMBER IS + BEGIN + -- APELEZ calculeaza_total_cu_tva cu V_ZECIMALE_PRET = 0 + RETURN pack_sesiune.calculeaza_total_cu_tva(V_PRET => V_PRET, + V_AJUSTARE => V_AJUSTARE, + V_CURS => V_CURS, + V_DISCOUNT_UNITAR => V_DISCOUNT_UNITAR, + V_DISCOUNT_EVIDENTIAT => V_DISCOUNT_EVIDENTIAT, + V_CANTITATE => V_CANTITATE, + V_PRET_CU_TVA => V_PRET_CU_TVA, + V_PROC_TVAV => V_PROC_TVAV, + V_ZECIMALE_PRET => NULL, + V_ZECIMALE_SUMA => NULL); + + END calculeaza_total_cu_tva; + ------------------------------------------------------------------- + FUNCTION calculeaza_total_cu_tva(V_PRET IN NUMBER, + V_AJUSTARE IN NUMBER, + V_CURS IN NUMBER, + V_DISCOUNT_UNITAR IN NUMBER, + V_DISCOUNT_EVIDENTIAT IN NUMBER, + V_CANTITATE IN NUMBER, + V_PRET_CU_TVA IN NUMBER, + V_PROC_TVAV IN NUMBER, + V_ZECIMALE_PRET IN NUMBER, + V_ZECIMALE_SUMA IN NUMBER) + RETURN NUMBER IS + BEGIN + RETURN pack_sesiune.calculeaza_total_cu_tva(V_PRET, + V_AJUSTARE, + V_CURS, + V_DISCOUNT_UNITAR, + V_DISCOUNT_EVIDENTIAT, + V_CANTITATE, + V_PRET_CU_TVA, + V_PROC_TVAV, + V_ZECIMALE_PRET, + V_ZECIMALE_SUMA); + END calculeaza_total_cu_tva; + ------------------------------------------------------------------- + -- e folosita in view-ul fact_vrap_centralizator_fact + FUNCTION calculeaza_total_cu_tva_fact(V_PRET IN NUMBER, + V_DIFERENTA IN NUMBER, + V_CURS IN NUMBER, + V_DISCOUNT_UNITAR IN NUMBER, + V_DISCOUNT_EVIDENTIAT IN NUMBER, + V_CANTITATE IN NUMBER, + V_PRET_CU_TVA IN NUMBER, + V_PROC_TVAV IN NUMBER) + RETURN NUMBER IS + V_ZECIMALE_SUMA NUMBER(1) := pack_sesiune.getOptiuneFirma('PC'); + V_ZECIMALE_PRETV NUMBER(1) := pack_sesiune.getOptiuneFirma('PPRETV'); + V_SUMA_CU_TVA ACT.SUMA%TYPE; + BEGIN + IF V_PRET_CU_TVA = 1 THEN + IF V_DISCOUNT_EVIDENTIAT = 1 THEN + V_SUMA_CU_TVA := ROUND((ROUND(NVL(V_CURS, 1) * V_PRET, + V_ZECIMALE_PRETV) - + ROUND(V_DIFERENTA * V_PROC_TVAV, + V_ZECIMALE_PRETV)) * V_CANTITATE, + V_ZECIMALE_SUMA) - + ROUND(ROUND(NVL(V_CURS, 1) * + NVL(V_DISCOUNT_UNITAR, 0), + V_ZECIMALE_PRETV) * V_CANTITATE, + V_ZECIMALE_SUMA); + ELSE + V_SUMA_CU_TVA := ROUND((ROUND(NVL(V_CURS, 1) * + ROUND(V_PRET, V_ZECIMALE_PRETV), + V_ZECIMALE_PRETV) - + ROUND(NVL(V_CURS, 1) * + ROUND(NVL(V_DISCOUNT_UNITAR, 0), + V_ZECIMALE_PRETV) - + ROUND(V_DIFERENTA * V_PROC_TVAV, + V_ZECIMALE_PRETV), + V_ZECIMALE_PRETV)) * V_CANTITATE, + V_ZECIMALE_SUMA); + END IF; + ELSE + V_SUMA_CU_TVA := pack_facturare.calculeaza_total_fara_tva_fact(V_PRET, + V_DIFERENTA, + V_CURS, + V_DISCOUNT_UNITAR, + V_DISCOUNT_EVIDENTIAT, + V_CANTITATE, + V_PRET_CU_TVA, + V_PROC_TVAV) + + pack_facturare.calculeaza_total_tva_fact(V_PRET, + V_DIFERENTA, + V_CURS, + V_DISCOUNT_UNITAR, + V_DISCOUNT_EVIDENTIAT, + V_CANTITATE, + V_PRET_CU_TVA, + V_PROC_TVAV); + END IF; + RETURN V_SUMA_CU_TVA; + END calculeaza_total_cu_tva_fact; + ------------------------------------------------------------------- + -- e folosita in view-urile fact_vrap_centralizator_* ( in afara de _fact ) + FUNCTION calculeaza_total_fara_tva(V_PRET IN NUMBER, + V_AJUSTARE IN NUMBER, + V_CURS IN NUMBER, + V_DISCOUNT_UNITAR IN NUMBER, + V_DISCOUNT_EVIDENTIAT IN NUMBER, + V_CANTITATE IN NUMBER, + V_PRET_CU_TVA IN NUMBER, + V_PROC_TVAV IN NUMBER) + RETURN NUMBER IS + BEGIN + -- APELEZ calculeaza_total_cu_tva cu V_ZECIMALE_PRET = 0 + RETURN pack_sesiune.calculeaza_total_fara_tva(V_PRET => V_PRET, + V_AJUSTARE => V_AJUSTARE, + V_CURS => V_CURS, + V_DISCOUNT_UNITAR => V_DISCOUNT_UNITAR, + V_DISCOUNT_EVIDENTIAT => V_DISCOUNT_EVIDENTIAT, + V_CANTITATE => V_CANTITATE, + V_PRET_CU_TVA => V_PRET_CU_TVA, + V_PROC_TVAV => V_PROC_TVAV, + V_ZECIMALE_PRET => NULL, + V_ZECIMALE_SUMA => NULL); + + END calculeaza_total_fara_tva; + ------------------------------------------------------------------- + FUNCTION calculeaza_total_fara_tva(V_PRET IN NUMBER, + V_AJUSTARE IN NUMBER, + V_CURS IN NUMBER, + V_DISCOUNT_UNITAR IN NUMBER, + V_DISCOUNT_EVIDENTIAT IN NUMBER, + V_CANTITATE IN NUMBER, + V_PRET_CU_TVA IN NUMBER, + V_PROC_TVAV IN NUMBER, + V_ZECIMALE_PRET IN NUMBER, + V_ZECIMALE_SUMA IN NUMBER) + RETURN NUMBER IS + BEGIN + RETURN pack_sesiune.calculeaza_total_fara_tva(V_PRET, + V_AJUSTARE, + V_CURS, + V_DISCOUNT_UNITAR, + V_DISCOUNT_EVIDENTIAT, + V_CANTITATE, + V_PRET_CU_TVA, + V_PROC_TVAV, + V_ZECIMALE_PRET, + V_ZECIMALE_SUMA); + END calculeaza_total_fara_tva; + ------------------------------------------------------------------- + -- e folosita in view-ul fact_vrap_centralizator_fact + FUNCTION calculeaza_total_fara_tva_fact(V_PRET IN NUMBER, + V_DIFERENTA IN NUMBER, + V_CURS IN NUMBER, + V_DISCOUNT_UNITAR IN NUMBER, + V_DISCOUNT_EVIDENTIAT IN NUMBER, + V_CANTITATE IN NUMBER, + V_PRET_CU_TVA IN NUMBER, + V_PROC_TVAV IN NUMBER) + RETURN NUMBER IS + V_ZECIMALE_SUMA NUMBER(1) := pack_sesiune.getOptiuneFirma('PC'); + V_ZECIMALE_PRETV NUMBER(1) := pack_sesiune.getOptiuneFirma('PPRETV'); + V_SUMA_FARA_TVA ACT.SUMA%TYPE; + BEGIN + IF V_PRET_CU_TVA = 1 THEN + V_SUMA_FARA_TVA := pack_facturare.calculeaza_total_cu_tva_fact(V_PRET, + V_DIFERENTA, + V_CURS, + V_DISCOUNT_UNITAR, + V_DISCOUNT_EVIDENTIAT, + V_CANTITATE, + V_PRET_CU_TVA, + V_PROC_TVAV) - + pack_facturare.calculeaza_total_tva_fact(V_PRET, + V_DIFERENTA, + V_CURS, + V_DISCOUNT_UNITAR, + V_DISCOUNT_EVIDENTIAT, + V_CANTITATE, + V_PRET_CU_TVA, + V_PROC_TVAV); + ELSE + IF V_DISCOUNT_EVIDENTIAT = 1 THEN + V_SUMA_FARA_TVA := ROUND((ROUND(NVL(V_CURS, 1) * V_PRET, + V_ZECIMALE_PRETV) - V_DIFERENTA) * + V_CANTITATE, + V_ZECIMALE_SUMA) - + ROUND(ROUND(NVL(V_CURS, 1) * + NVL(V_DISCOUNT_UNITAR, 0), + V_ZECIMALE_PRETV) * V_CANTITATE, + V_ZECIMALE_SUMA); + ELSE + V_SUMA_FARA_TVA := ROUND((ROUND(NVL(V_CURS, 1) * + ROUND(V_PRET, V_ZECIMALE_PRETV), + V_ZECIMALE_PRETV) - + ROUND(NVL(V_CURS, 1) * + ROUND(NVL(V_DISCOUNT_UNITAR, 0), + V_ZECIMALE_PRETV), + V_ZECIMALE_PRETV) - V_DIFERENTA) * + V_CANTITATE, + V_ZECIMALE_SUMA); + END IF; + END IF; + RETURN V_SUMA_FARA_TVA; + END calculeaza_total_fara_tva_fact; + ------------------------------------------------------------------- + -- e folosita in view-urile fact_vrap_centralizator_* ( in afara de _fact ) + FUNCTION calculeaza_total_tva(V_PRET IN NUMBER, + V_AJUSTARE IN NUMBER, + V_CURS IN NUMBER, + V_DISCOUNT_UNITAR IN NUMBER, + V_DISCOUNT_EVIDENTIAT IN NUMBER, + V_CANTITATE IN NUMBER, + V_PRET_CU_TVA IN NUMBER, + V_PROC_TVAV IN NUMBER) + RETURN NUMBER IS + BEGIN + -- APELEZ calculeaza_total_cu_tva cu V_ZECIMALE_PRET = 0 + Return pack_sesiune.calculeaza_total_tva(V_PRET => V_PRET, + V_AJUSTARE => V_AJUSTARE, + V_CURS => V_CURS, + V_DISCOUNT_UNITAR => V_DISCOUNT_UNITAR, + V_DISCOUNT_EVIDENTIAT => V_DISCOUNT_EVIDENTIAT, + V_CANTITATE => V_CANTITATE, + V_PRET_CU_TVA => V_PRET_CU_TVA, + V_PROC_TVAV => V_PROC_TVAV, + V_ZECIMALE_PRET => NULL, + V_ZECIMALE_SUMA => NULL); + + END calculeaza_total_tva; + ------------------------------------------------------------------- + FUNCTION calculeaza_total_tva(V_PRET IN NUMBER, + V_AJUSTARE IN NUMBER, + V_CURS IN NUMBER, + V_DISCOUNT_UNITAR IN NUMBER, + V_DISCOUNT_EVIDENTIAT IN NUMBER, + V_CANTITATE IN NUMBER, + V_PRET_CU_TVA IN NUMBER, + V_PROC_TVAV IN NUMBER, + V_ZECIMALE_PRET IN NUMBER, + V_ZECIMALE_SUMA IN NUMBER) + RETURN NUMBER IS + BEGIN + RETURN pack_sesiune.calculeaza_total_tva(V_PRET, + V_AJUSTARE, + V_CURS, + V_DISCOUNT_UNITAR, + V_DISCOUNT_EVIDENTIAT, + V_CANTITATE, + V_PRET_CU_TVA, + V_PROC_TVAV, + V_ZECIMALE_PRET, + V_ZECIMALE_SUMA); + END calculeaza_total_tva; + ---------------------------------------------------------------------------------------- + -- e folosita in view-ul fact_vrap_centralizator_fact + FUNCTION calculeaza_total_tva_fact(V_PRET IN NUMBER, + V_DIFERENTA IN NUMBER, + V_CURS IN NUMBER, + V_DISCOUNT_UNITAR IN NUMBER, + V_DISCOUNT_EVIDENTIAT IN NUMBER, + V_CANTITATE IN NUMBER, + V_PRET_CU_TVA IN NUMBER, + V_PROC_TVAV IN NUMBER) + RETURN NUMBER IS + V_ZECIMALE_SUMA NUMBER(1) := pack_sesiune.getOptiuneFirma('PC'); + V_ZECIMALE_PRETV NUMBER(1) := pack_sesiune.getOptiuneFirma('PPRETV'); + V_SUMA_TVA ACT.SUMA%TYPE; + BEGIN + IF V_PRET_CU_TVA = 1 THEN + V_SUMA_TVA := ROUND(pack_facturare.calculeaza_total_cu_tva_fact(V_PRET, + V_DIFERENTA, + V_CURS, + V_DISCOUNT_UNITAR, + V_DISCOUNT_EVIDENTIAT, + V_CANTITATE, + V_PRET_CU_TVA, + V_PROC_TVAV) * + (V_PROC_TVAV - 1) / V_PROC_TVAV, + V_ZECIMALE_SUMA); + ELSE + IF V_DISCOUNT_EVIDENTIAT = 1 THEN + V_SUMA_TVA := ROUND(ROUND((ROUND(NVL(V_CURS, 1) * V_PRET, + V_ZECIMALE_PRETV) - V_DIFERENTA) * + V_CANTITATE, + V_ZECIMALE_SUMA) * (V_PROC_TVAV - 1), + V_ZECIMALE_SUMA) - + ROUND(ROUND(ROUND(NVL(V_CURS, 1) * + NVL(V_DISCOUNT_UNITAR, 0), + V_ZECIMALE_PRETV) * V_CANTITATE, + V_ZECIMALE_SUMA) * (V_PROC_TVAV - 1), + V_ZECIMALE_SUMA); + ELSE + V_SUMA_TVA := ROUND(ROUND((ROUND(NVL(V_CURS, 1) * + ROUND(V_PRET, V_ZECIMALE_PRETV), + V_ZECIMALE_PRETV) - + ROUND(NVL(V_CURS, 1) * + ROUND(NVL(V_DISCOUNT_UNITAR, 0), + V_ZECIMALE_PRETV), + V_ZECIMALE_PRETV) - V_DIFERENTA) * + V_CANTITATE, + V_ZECIMALE_SUMA) * (V_PROC_TVAV - 1), + V_ZECIMALE_SUMA); + END IF; + END IF; + RETURN V_SUMA_TVA; + END calculeaza_total_tva_fact; + ------------------------------------------------------------------- + PROCEDURE actualizeaza_vanzari(V_COD_VECHI IN NUMBER, + V_COD_NOU IN NUMBER) is + BEGIN + -- de modificat in caz ca il las sa stearga manual inregistrari din VANZARI_DETALII + -- acum se marcheaza cu STERS = 1 doar cand se sterge toata factura + UPDATE VANZARI_DETALII + SET STERS = 0 + WHERE ID_VANZARE IN + (SELECT ID_VANZARE FROM VANZARI WHERE COD = V_COD_VECHI); + UPDATE VANZARI SET COD = V_COD_NOU, STERS = 0 WHERE COD = V_COD_VECHI; + END actualizeaza_vanzari; + ------------------------------------------------------------------- + PROCEDURE sterge_din_vanzari(V_COD IN NUMBER, + V_AN IN NUMBER, + V_LUNA IN NUMBER, + V_ID_UTIL IN NUMBER) is + V_ID_VANZARE VANZARI.ID_VANZARE%TYPE; + BEGIN + BEGIN + SELECT ID_VANZARE INTO V_ID_VANZARE FROM VANZARI WHERE COD = V_COD; + pack_facturare.sterge_factura(V_ID_VANZARE, V_LUNA, V_AN, V_ID_UTIL); + EXCEPTION + WHEN NO_DATA_FOUND THEN + RAISE_APPLICATION_ERROR(-20000, + 'Aceasta factura nu a fost inregistrata in ROAFACTURARE! (FACT-017 : ' || + V_COD || ')'); + END; + END sterge_din_vanzari; + ------------------------------------------------------------------- + PROCEDURE verifica_cursuri_valute(V_DATA_CURS IN DATE, + V_ID_UTIL IN NUMBER) IS + V_NUME_VALUTE VARCHAR2(100); + BEGIN + -- verificare ca exista cursul pentru valutele din FACT_VPRETURI_UTILIZATOR + SELECT STRINGAGG(B.NUME_VAL) + INTO V_NUME_VALUTE + FROM (SELECT A.ID_VALUTA, B.CURS + FROM (SELECT DISTINCT ID_VALUTA + FROM FACT_VPRETURI_UTILIZATOR + WHERE ID_UTIL = V_ID_UTIL) A + LEFT JOIN CURS B + ON A.ID_VALUTA = B.ID_VALUTA + AND B.STERS = 0 + AND B.DATA <= V_DATA_CURS + AND B.DATA2 >= V_DATA_CURS) A + LEFT JOIN NOM_VALUTE B + ON A.ID_VALUTA = B.ID_VALUTA + WHERE A.CURS IS NULL + AND A.ID_VALUTA <> pack_facturare.nid_moneda_nationala; + + IF V_NUME_VALUTE IS NOT NULL THEN + RAISE_APPLICATION_ERROR(-20005, + 'Nu este setat cursul din data de ' || + to_char(V_DATA_CURS, 'DD/MM/YYYY') || + ' pentru ' || V_NUME_VALUTE || '!'); + END IF; + END verifica_cursuri_valute; + ------------------------------------------------------------------- + PROCEDURE verifica_total_document IS + V_TOTFTVA_VER ACT.SUMA%TYPE; + V_ID_TOTFTVA ACT.SUMA%TYPE; + V_TOTTVA_VER ACT.SUMA%TYPE; + V_ID_TOTTVA ACT.SUMA%TYPE; + BEGIN + IF pack_facturare.ntip < 20 or + pack_facturare.ntip in (pack_facturare.nTipFacturaHotel, + pack_facturare.nTipFacturaRestaurant, + 48, + 49,51,52) THEN + SELECT SUM(CASE + WHEN SCD in ('667', '267', '2678', '709') THEN + (-1) * SUMA + WHEN SCC <> '4427' THEN + SUMA + ELSE + 0 + END), + SUM(CASE + WHEN SCC = '4427' THEN + SUMA + ELSE + 0 + END), + MIN(CASE + WHEN SCC <> '4427' AND + SCD not in ('667', '267', '2678', '709') THEN + ID_ACT + ELSE + 9999999 + END), + MIN(CASE + WHEN SCC = '4427' THEN + ID_ACT + ELSE + 9999999 + END) + INTO V_TOTFTVA_VER, V_TOTTVA_VER, V_ID_TOTFTVA, V_ID_TOTTVA + FROM ACT_TEMP + WHERE (SCD = '4111' OR (SCC = '4111' AND SCD not in ('5311','5314','5121','5125','5126'))); + ELSE + SELECT SUM(CASE + WHEN SCD in ('667', '267', '2678', '709') THEN + (-1) * SUMA + WHEN SCC <> '4428' THEN + SUMA + ELSE + 0 + END), + SUM(CASE + WHEN SCC = '4428' THEN + SUMA + ELSE + 0 + END), + MIN(CASE + WHEN SCC <> '4428' AND + SCD not in ('667', '267', '2678', '709') THEN + ID_ACT + ELSE + 9999999 + END), + MIN(CASE + WHEN SCC = '4428' THEN + ID_ACT + ELSE + 9999999 + END) + INTO V_TOTFTVA_VER, V_TOTTVA_VER, V_ID_TOTFTVA, V_ID_TOTTVA + FROM ACT_TEMP + WHERE (SCD = '418' OR SCC = '418'); + END IF; + IF NVL(pack_facturare.ntotftva, 0) <> 0 and + NVL(pack_facturare.ntotftva, 0) <> V_TOTFTVA_VER THEN + + pack_facturare.ndifftva := pack_facturare.ntotftva - V_TOTFTVA_VER; + insert into act_temp + (id_act, + luna, + an, + cod, + dataireg, + nract, + dataact, + explicatia, + scd, + ascd, + scc, + ascc, + suma, + pereched, + perechec, + suma_val, + curs, + datascad, + neimpozab, + nnir, + id_util, + dataora, + id_utils, + dataoras, + id_responsabil, + id_venchelt, + id_sectie, + id_set, + id_fact, + id_partd, + id_partc, + id_sucursala, + id_fdoc, + explicatia4, + explicatia5, + id_lucrare, + id_gestin, + id_gestout, + id_valuta, + proc_tva, + sters, + id_factd, + id_factc, + id_ctr, + id_jtva_coloana, + serie_act, + tva_incasare, + validat, + id_utilv, + dataorav, + taxcode) + select b.id_act, + a.luna, + a.an, + a.cod, + a.dataireg, + a.nract, + a.dataact, + a.explicatia, + a.scd, + a.ascd, + a.scc, + a.ascc, + pack_facturare.ndifftva as suma, + a.pereched, + a.perechec, + 0 as suma_val, + a.curs, + a.datascad, + a.neimpozab, + a.nnir, + a.id_util, + a.dataora, + a.id_utils, + a.dataoras, + a.id_responsabil, + a.id_venchelt, + a.id_sectie, + a.id_set, + a.id_fact, + a.id_partd, + a.id_partc, + a.id_sucursala, + a.id_fdoc, + a.explicatia4, + a.explicatia5, + a.id_lucrare, + a.id_gestin, + a.id_gestout, + a.id_valuta, + a.proc_tva, + a.sters, + a.id_factd, + a.id_factc, + a.id_ctr, + a.id_jtva_coloana, + a.serie_act, + pack_facturare.ntva_incasare, + a.validat, + a.id_utilv, + a.dataorav, + a.taxcode + from act_temp a + left join (select max(id_act) + 1 as id_act, 0 as sters + from act_temp) b + on a.sters = b.sters + where a.id_act = V_ID_TOTFTVA; + END IF; + IF NVL(pack_facturare.ntottva, 0) <> 0 and + NVL(pack_facturare.ntottva, 0) <> V_TOTTVA_VER THEN + + pack_facturare.ndiftva := pack_facturare.ntottva - V_TOTTVA_VER; + + insert into act_temp + (id_act, + luna, + an, + cod, + dataireg, + nract, + dataact, + explicatia, + scd, + ascd, + scc, + ascc, + suma, + pereched, + perechec, + suma_val, + curs, + datascad, + neimpozab, + nnir, + id_util, + dataora, + id_utils, + dataoras, + id_responsabil, + id_venchelt, + id_sectie, + id_set, + id_fact, + id_partd, + id_partc, + id_sucursala, + id_fdoc, + explicatia4, + explicatia5, + id_lucrare, + id_gestin, + id_gestout, + id_valuta, + proc_tva, + sters, + id_factd, + id_factc, + id_ctr, + id_jtva_coloana, + serie_act, + tva_incasare, + validat, + id_utilv, + dataorav, + taxcode) + select b.id_act, + a.luna, + a.an, + a.cod, + a.dataireg, + a.nract, + a.dataact, + a.explicatia, + a.scd, + a.ascd, + a.scc, + a.ascc, + pack_facturare.ndiftva as suma, + a.pereched, + a.perechec, + 0 as suma_val, + a.curs, + a.datascad, + a.neimpozab, + a.nnir, + a.id_util, + a.dataora, + a.id_utils, + a.dataoras, + a.id_responsabil, + a.id_venchelt, + a.id_sectie, + a.id_set, + a.id_fact, + a.id_partd, + a.id_partc, + a.id_sucursala, + a.id_fdoc, + a.explicatia4, + a.explicatia5, + a.id_lucrare, + a.id_gestin, + a.id_gestout, + a.id_valuta, + a.proc_tva, + a.sters, + a.id_factd, + a.id_factc, + a.id_ctr, + a.id_jtva_coloana, + a.serie_act, + pack_facturare.ntva_incasare, + a.validat, + a.id_utilv, + a.dataorav, + a.taxcode + from act_temp a + left join (select max(id_act) + 1 as id_act, 0 as sters + from act_temp) b + on a.sters = b.sters + where a.id_act = V_ID_TOTTVA; + END IF; + + IF pack_facturare.ntip in (48, 49) AND + ((NVL(pack_facturare.ntottva, 0) <> 0 and + NVL(pack_facturare.ntottva, 0) <> V_TOTTVA_VER) OR + (NVL(pack_facturare.ntotftva, 0) <> 0 and + NVL(pack_facturare.ntotftva, 0) <> V_TOTFTVA_VER)) THEN + insert into act_temp + (id_act, + luna, + an, + cod, + dataireg, + nract, + dataact, + explicatia, + scd, + ascd, + scc, + ascc, + suma, + pereched, + perechec, + suma_val, + curs, + datascad, + neimpozab, + nnir, + id_util, + dataora, + id_utils, + dataoras, + id_responsabil, + id_venchelt, + id_sectie, + id_set, + id_fact, + id_partd, + id_partc, + id_sucursala, + id_fdoc, + explicatia4, + explicatia5, + id_lucrare, + id_gestin, + id_gestout, + id_valuta, + proc_tva, + sters, + id_factd, + id_factc, + id_ctr, + id_jtva_coloana, + serie_act, + tva_incasare, + validat, + id_utilv, + dataorav) + select b.id_act, + a.luna, + a.an, + a.cod, + a.dataireg, + a.nract, + a.dataact, + a.explicatia, + a.scd, + a.ascd, + a.scc, + a.ascc, + pack_facturare.ndifftva + pack_facturare.ndiftva as suma, + a.pereched, + a.perechec, + 0 as suma_val, + a.curs, + a.datascad, + a.neimpozab, + a.nnir, + a.id_util, + a.dataora, + a.id_utils, + a.dataoras, + a.id_responsabil, + a.id_venchelt, + a.id_sectie, + a.id_set, + a.id_fact, + a.id_partd, + a.id_partc, + a.id_sucursala, + a.id_fdoc, + a.explicatia4, + a.explicatia5, + a.id_lucrare, + a.id_gestin, + a.id_gestout, + a.id_valuta, + a.proc_tva, + a.sters, + a.id_factd, + a.id_factc, + a.id_ctr, + a.id_jtva_coloana, + a.serie_act, + pack_facturare.ntva_incasare, + a.validat, + a.id_utilv, + a.dataorav + from act_temp a + left join (select max(id_act) + 1 as id_act, 0 as sters + from act_temp) b + on a.sters = b.sters + where a.scc = '357'; + END IF; + + END verifica_total_document; + ------------------------------------------------------------------- + PROCEDURE verifica_analitice378 is + BEGIN + SELECT DECODE(X, 0, 0, 1) + INTO PACK_FACTURARE.NANALITICE_378 + FROM (SELECT COUNT(*) AS X + FROM plcont + WHERE CONT = '378' + AND AN = PACK_FACTURARE.nan + AND TIP_CONT = 1 + AND INACTIV = 0); + END verifica_analitice378; + ------------------------------------------------------------------- + function GetAnaliticByGrupUtilizatori(tnIdUtilizator ACT.ID_UTIL%TYPE, + tcCont ACT.SCD%TYPE) + return ACT.ASCD%TYPE IS + lcAcont ACT.ASCD%TYPE; + BEGIN + BEGIN + select ga.acont + into lcAcont + from config_gruputil_analitice ga + join utilizatori_rol_intern u + on ga.id_grup = u.id_grup + where u.id_util = tnIdUtilizator + and ga.cont = tcCont + and u.sters = 0; + EXCEPTION + WHEN NO_DATA_FOUND THEN + NULL; + END; + return lcAcont; + end GetAnaliticByGrupUtilizatori; + ------------------------------------------------------------------- + -- intoarce analiticul unui cont (371,607,378 etc.) + -- pe baza configurarilor din config_analitice si a GESTIUNII/ARTICOLULUI + FUNCTION GetAnaliticByArticol(tcCont RUL.CONT%TYPE, + tnIdGestiune RUL.ID_GESTIUNE%TYPE DEFAULT NULL, + tnIdArticol RUL.ID_ARTICOL%TYPE DEFAULT NULL) + return RUL.ACONT%TYPE IS + + crs_linie config_analitice%rowtype; + lcSelect VARCHAR2(10000); + lcAnalitic VARCHAR2(1000); + lcColoanaP VARCHAR2(100); + lcColoanaS VARCHAR2(100); + lcNumeColoanaP VARCHAR2(1000); + lcNumeColoanaS VARCHAR2(1000); + lcAcont RUL.ACONT%TYPE; + lcParametruP VARCHAR2(100); + lcParametruS VARCHAR2(100); + BEGIN + + begin + select * + into crs_linie + from config_analitice a + where a.cont = tcCont; + exception + when NO_DATA_FOUND then + return lcAcont; + end; + + lcAnalitic := ''; + lcColoanaP := ''; + lcColoanaS := ''; + if crs_linie.tabel_prefix is not null then + lcColoanaP := 'A.' || crs_linie.camp_leg_prefix; + lcNumeColoanaP := crs_linie.camp_leg_prefix; + lcAnalitic := 'substr(a.' || crs_linie.col_prefix || ',' || + crs_linie.poz_start_prefix || ',' || + crs_linie.nr_return_prefix || ')'; + end if; + + if crs_linie.tabel_sufix is not null then + lcColoanaS := 'B.' || crs_linie.camp_leg_sufix; + lcNumeColoanaS := crs_linie.camp_leg_prefix; + lcAnalitic := lcAnalitic || '||substr(b.' || crs_linie.col_sufix || ',' || + crs_linie.poz_start_sufix || ',' || + crs_linie.nr_return_sufix || ')'; + end if; + + lcParametruP := CASE UPPER(lcNumeColoanaP) + WHEN 'ID_GESTIUNE' THEN + 'tnIdGestiune' + WHEN 'ID_ARTICOL' THEN + 'tnIdArticol' + ELSE + '' + END; + lcParametruS := CASE UPPER(lcNumeColoanaS) + WHEN 'ID_GESTIUNE' THEN + 'tnIdGestiune' + WHEN 'ID_ARTICOL' THEN + 'tnIdArticol' + ELSE + '' + END; + if lcParametruP is not null then + lcSelect := 'SELECT ' || lcAnalitic || ' AS ACONT + FROM ' || crs_linie.tabel_prefix || + ' A ' || (CASE + WHEN lcColoanaS IS NULL THEN + '' + ELSE + 'LEFT JOIN ' || crs_linie.tabel_sufix || + ' B ON 1=1 AND A.STERS = 0 AND B.STERS = 0 ' + END) || 'WHERE ' || CASE UPPER(lcNumeColoanaP) + WHEN 'ID_GESTIUNE' THEN + tnIdGestiune + WHEN 'ID_ARTICOL' THEN + tnIdArticol + END || ' = ' || lcNumeColoanaP || ' ' || (CASE + WHEN lcColoanaS IS NULL or lcParametruS IS NULL THEN + '' + ELSE + 'AND ' || CASE UPPER(lcNumeColoanaS) + WHEN 'ID_GESTIUNE' THEN + 'tnIdGestiune' + WHEN 'ID_ARTICOL' THEN + 'tnIdArticol' + END || ' = ' || lcNumeColoanaS + END); + + EXECUTE IMMEDIATE lcSelect + into lcAcont; + END IF; -- lcParametruP + + return lcAcont; + END GetAnaliticByArticol; + ----------------------------------------------------------------------------------------------- + Procedure citeste_vanzari_seturi(V_COD IN NUMBER, + V_CURSOR OUT cursor_facturare) is + begin + OPEN V_CURSOR FOR + select b2.id_vanzare_set, + cast(a2.id_vanzare_det as number(10)) as id_vanzare_det, + b2.denumire, + b2.explicatie, + b2.cantitate, + b2.um, + b2.serie, + cast(decode(a2.in_valuta, + 1, + round(b2.pret * a2.curs / a2.multiplicator, + pack_sesiune.nzecimale_pretv), + b2.pret) as number(14, 4)) as pret, + cast(decode(a2.in_valuta, 1, b2.pret, 0) as number(14, 4)) as pret_val, + a2.id_valuta, + a2.in_valuta as tip_valuta, + c2.nume_val, + decode(a2.in_valuta, + 1, + round(Nvl(b2.discount_unitar, 0) * a2.curs / + a2.multiplicator, + pack_sesiune.nzecimale_pretv), + Nvl(b2.discount_unitar, 0)) as discount_unitar, + decode(a2.in_valuta, 1, Nvl(b2.discount_unitar, 0), 0) as discount_unitar_val, + b2.pret_cu_tva as pret_cu_tva, + a2.curs, + a2.multiplicator, + cast(0 as number(18)) as id_ctr, -- a2.id_ctr, + cast(null as varchar2(100)) as numar_contract, -- c2.numar_contract, + cast(a2.proc_tvav as number(8, 4)) as proc_Tvav, + cast(a2.id_jtva_coloana as number(10)) as id_jtva_coloana, + cast(a2.gestionabil as number(1)) as gestionabil, + cast(null as varchar2(100)) as codmat, + cast(null as varchar2(100)) as codmatf, + cast(null as varchar2(100)) as codbare, + cast(0 as number(14, 4)) as pret_achizitie, + cast(null as number(10)) as id_gestiune + from (select b.id_vanzare_set, + a.in_valuta, + -- b.id_ctr, + max(b.proc_tvav) as proc_tvav, + max(nvl2(b.id_gestiune, 1, 0)) as gestionabil, + min(b.id_jtva_coloana) as id_jtva_coloana, + min(b.id_vanzare_det) as id_vanzare_det, + c.curs, + c.multiplicator, + decode(a.in_valuta, + 1, + c.id_valuta, + pack_def.getidmonedanationala()) as id_valuta + from (select id_vanzare, in_valuta + from vanzari + where cod = V_COD + and sters = 0) a + left join vanzari_detalii b + on a.id_vanzare = b.id_vanzare + and b.sters = 0 + left join vanzari_cursuri c + on decode(a.in_valuta, 1, b.id_valuta, -10000) = + decode(a.in_valuta, 1, c.id_valuta, -9999) + and a.id_vanzare = c.id_vanzare + where b.id_vanzare_set is not null + group by b.id_vanzare_set, + a.in_valuta, + b.id_ctr, + c.curs, + c.multiplicator, + decode(a.in_valuta, + 1, + c.id_valuta, + pack_def.getidmonedanationala())) a2 + left join vanzari_seturi b2 + on a2.id_vanzare_set = b2.id_vanzare_set + left join nom_valute c2 + on a2.id_valuta = c2.id_valuta; + + end citeste_vanzari_seturi; + ----------------------------------------------------------------------------------------------- + Procedure citeste_proforme_seturi(V_ID_PROFORMA IN NUMBER, + V_CURSOR OUT cursor_facturare) is + begin + OPEN V_CURSOR FOR + select b2.id_proforma_set as id_vanzare_set, + cast(a2.id_proforma_det as number(10)) as id_vanzare_det, + b2.denumire, + b2.explicatie, + b2.cantitate, + b2.um, + b2.serie, + cast(round(decode(a2.in_valuta, + 1, + round(b2.pret * a2.curs / a2.multiplicator, + pack_sesiune.nzecimale_pretv), + b2.pret), + pack_sesiune.nzecimale_pretv) as number(14, 4)) as pret, + cast(round(decode(a2.in_valuta, 1, b2.pret, 0), + pack_sesiune.nzecimale_pretvval) as number(14, 4)) as pret_val, + a2.id_valuta, + a2.in_valuta as tip_valuta, + c2.nume_val, + decode(a2.in_valuta, + 1, + round(Nvl(b2.discount_unitar, 0) * a2.curs / + a2.multiplicator, + pack_sesiune.nzecimale_pretv), + Nvl(b2.discount_unitar, 0)) as discount_unitar, + decode(a2.in_valuta, 1, Nvl(b2.discount_unitar, 0), 0) as discount_unitar_val, + b2.pret_cu_tva as pret_cu_tva, + a2.curs, + a2.multiplicator, + cast(0 as number(18)) as id_ctr, -- a2.id_ctr, + cast(null as varchar2(100)) as numar_contract, -- c2.numar_contract, + cast(a2.proc_tvav as number(8, 4)) as proc_Tvav, + cast(a2.id_jtva_coloana as number(10)) as id_jtva_coloana, + cast(a2.gestionabil as number(1)) as gestionabil, + cast(null as varchar2(100)) as codmat, + cast(null as varchar2(100)) as codmatf, + cast(null as varchar2(100)) as codbare, + cast(0 as number(14, 4)) as pret_achizitie, + cast(null as number(10)) as id_gestiune + from (select b.id_proforma_set, + a.in_valuta, + -- b.id_ctr, + max(b.proc_tvav) as proc_tvav, + max(nvl2(b.id_gestiune, 1, 0)) as gestionabil, + min(b.id_jtva_coloana) as id_jtva_coloana, + min(b.id_proforma_det) as id_proforma_det, + c.curs, + c.multiplicator, + decode(a.in_valuta, + 1, + c.id_valuta, + pack_def.getidmonedanationala()) as id_valuta + from (select id_proforma, in_valuta + from proforme + where id_proforma = V_ID_PROFORMA + and sters = 0) a + left join proforme_detalii b + on a.id_proforma = b.id_proforma + and b.sters = 0 + left join proforme_cursuri c + on decode(a.in_valuta, 1, b.id_valuta, -10000) = + decode(a.in_valuta, 1, c.id_valuta, -9999) + and a.id_proforma = c.id_proforma + where b.id_proforma_set is not null + group by b.id_proforma_set, + a.in_valuta, + b.id_ctr, + c.curs, + c.multiplicator, + decode(a.in_valuta, + 1, + c.id_valuta, + pack_def.getidmonedanationala())) a2 + left join proforme_seturi b2 + on a2.id_proforma_set = b2.id_proforma_set + left join nom_valute c2 + on a2.id_valuta = c2.id_valuta; + + end citeste_proforme_seturi; + ----------------------------------------------------------------------------------------------- + procedure adauga_note_tva_incasare is + begin + UPDATE ACT_TEMP + SET SCC = '4428' + WHERE SCC = '4427' + AND TVA_INCASARE = 1 + AND ID_JTVA_COLOANA IN + (SELECT ID_TVA + FROM JTVA_COLOANE + WHERE ID_JTVA_COLOANA IN (SELECT ID_JTVA_NEEX + FROM JTVA_COLOANE + WHERE STERS = 0 + AND JV = 1)); + + INSERT INTO ACT_TEMP + (ID_ACT, + SERIE_ACT, + NRACT, + DATAIREG, + DATAACT, + PERECHEC, + SCD, + ASCD, + SCC, + ASCC, + SUMA, + ID_JTVA_COLOANA, + PROC_TVA, + ID_CTR, + ID_LUCRARE, + ID_FDOC, + ID_SECTIE, + ID_VENCHELT, + ID_FACT, + TVA_INCASARE, + ID_SET) + SELECT pack_facturare.nid_act + rownum as ID_ACT, + pack_facturare.cserie_act_incasare as serie_act, + pack_facturare.nnumar_act_incasare as nract, + pack_facturare.ddata_ireg as dataireg, + pack_facturare.ddata_act as dataact, + pack_facturare.nnumar_act as perechec, + '4428' as scd, + A1.ACONT as ascd, + '4427' as scc, + '' as ascc, + ROUND((CASE + WHEN A1.DIF <= 0 THEN + A1.totctva + ELSE + A1.totctva - A1.DIF + END) / A1.proc_tva * (A1.proc_tva - 1), + pack_sesiune.getoptiunefirma('PC')) as suma, + A3.ID_TVA AS ID_JTVA_COLOANA, + A1.PROC_TVA, + Null as id_ctr, + NVL(pack_facturare.nid_lucrare, 0) as id_lucrare, + A1.ID_FDOC, + A1.ID_SECTIE, + A1.ID_VENCHELT, + -5 AS id_fact, + pack_facturare.ntva_incasare, + pack_facturare.nid_set as id_set + FROM (select MAX(ID_FDOC) OVER() as id_fdoc, + acont, + proc_tva, + id_jtva_coloana, + baza, + tva, + totctva, + id_sectie, + id_venchelt, + SUM(totctva) OVER(ORDER BY PROC_TVA DESC, ACONT) as DIF + from (SELECT MAX(ID_FDOC) AS ID_FDOC, + NULL AS ACONT, + 2 AS PROC_TVA, + 0 as baza, + 0 as tva, + (-1) * sum(suma) AS totctva, + NULL AS ID_JTVA_COLOANA, + NULL AS ID_SECTIE, + NULL AS ID_VENCHELT + FROM act_temp + WHERE scc = '4111' + and id_jtva_coloana is null + UNION ALL + select null as id_fdoc, + a.ascc as acont, + a.proc_tva, + c.baza, + a.tva, + c.baza + a.tva as totctva, + a.id_jtva_coloana, + a.id_sectie, + a.id_venchelt + from (select ascc, + proc_tva, + sum(suma) as tva, + id_jtva_coloana, + max(id_sectie) as id_sectie, + max(id_venchelt) as id_venchelt + from act_temp + where id_jtva_coloana in + (SELECT ID_TVA + FROM VJTVA_COLOANE + WHERE ID_JTVA_EX IS NOT NULL) + group by proc_tva, id_jtva_coloana, ascc) a + left join jtva_coloane b + on a.id_jtva_coloana = b.id_tva + left join (select sum(decode(scc, '4111', -1, 1) * suma) as baza, + id_jtva_coloana + from act_temp + where id_jtva_coloana in + (SELECT ID_JTVA_COLOANA + FROM VJTVA_COLOANE + WHERE ID_JTVA_EX IS NOT NULL) + group by id_jtva_coloana) c + on b.id_jtva_coloana = c.id_jtva_coloana)) A1 + LEFT JOIN VJTVA_COLOANE A2 + ON A1.ID_JTVA_COLOANA = A2.ID_TVA + LEFT JOIN VJTVA_COLOANE A3 + ON A2.ID_JTVA_EX = A3.ID_JTVA_COLOANA + WHERE A1.ID_JTVA_COLOANA IS NOT NULL + AND A1.totctva > A1.DIF; + + end adauga_note_tva_incasare; + ----------------------------------------------------------------------------------------------- + function citeste_lungcampexplart return NUMBER is + V_LUNGIME NUMBER(10); + begin + select data_length + into V_LUNGIME + from user_tab_columns + where column_name = 'EXPLICATIE' + and table_name = 'VANZARI_DETALII'; + return V_LUNGIME; + end citeste_lungcampexplart; + ----------------------------------------------------------------------------------------------- + function getAnaliticK(tnProcTvaV IN NUMBER) return VARCHAR2 is + V_ANALITICCUST ACT.ASCC%TYPE; + lnProcTVA number(2); + begin + if tnProcTvaV between 1 and 2 then + lnProcTVA := round((tnProcTvaV - 1) * 100, 0); + else + lnProcTVA := tnProcTvaV; + end if; + + -- analiticele tip nou 371,378,4428 pentru descarcarea K + -- tnProcTvaV = 5/9/19/20/24 sau 1.05/1.09/1.19/1.20/1.24 + -- optiuni de tipul FACTANALITICCUSTK_5/FACTANALITICCUSTK_9/FACTANALITICCUSTK_19... + V_ANALITICCUST := pack_sesiune.getoptiunefirma('FACTANALITICCUSTK_' || + lnProcTVA); + if V_ANALITICCUST is null then + -- daca nu gasesc analitice cu optiuni de tip nou, caut optiunile vechi pentru cota standard si cota redusa 5% + if tnProcTvaV in (1.24, 1.20, 1.19) then + V_ANALITICCUST := pack_sesiune.getoptiunefirma('FACTANALITICCUSTK2'); + else + V_ANALITICCUST := pack_sesiune.getoptiunefirma('FACTANALITICCUSTK'); + end if; + end if; + return V_ANALITICCUST; + end getAnaliticK; + + ---------------------------- + -- Obtine sold client 4111 + 461 -419 din balanta_parteneri sau din ireg_parteneri pana la numarul facturii + -- Pentru afisarea in raportul factura + procedure getSoldClient(tnAn IN NUMBER, + tnLuna IN NUMBER, + tnIdPart IN NUMBER, + tnIdFact IN NUMBER default 0, + V_CURSOR OUT cursor_facturare) is + begin + IF nvl(tnIdFact, 0) = 0 then + OPEN V_CURSOR FOR + SELECT SUM(semn * (precdeb + debit - preccred - credit)) as sold_lei, + SUM(semn * (precvaldeb + valdebit - precvalcred - valcredit)) as sold_valuta + from (select 1 as semn, + precdeb, + debit, + preccred, + credit, + precvaldeb, + valdebit, + precvalcred, + valcredit + from balanta_parteneri + WHERE an = tnAn + AND luna = tnLuna + and id_part = tnIdPart + AND cont in ('4111', '461')); + ELSE + + OPEN V_CURSOR FOR + SELECT SUM(semn * (precdeb + debit - preccred - credit)) as sold_lei, + SUM(semn * (precvaldeb + valdebit - precvalcred - valcredit)) as sold_valuta + from (select 1 as semn, + precdeb, + debit, + preccred, + credit, + precvaldeb, + valdebit, + precvalcred, + valcredit + from ireg_parteneri + WHERE an = tnAn + AND luna = tnLuna + and id_part = tnIdPart + AND cont in ('4111', '461') + and (dataact < (select max(dataact) + from ireg_parteneri + where an = tnAn + and luna = tnLuna + and id_part = tnIdPart + and id_fact = tnIdFact) or + nract <= (select max(nract) + from ireg_parteneri + where an = tnAn + and luna = tnLuna + and id_part = tnIdPart + and id_fact = tnIdFact))); + + END IF; + end getSoldClient; + +end PACK_FACTURARE; +/ diff --git a/docs/data-entry/ARCHITECTURE.md b/docs/data-entry/ARCHITECTURE.md index b4ab85f..7df4961 100644 --- a/docs/data-entry/ARCHITECTURE.md +++ b/docs/data-entry/ARCHITECTURE.md @@ -33,8 +33,11 @@ Aplicatie separata pentru introducere date in ERP, cu workflow de aprobare si st - Scalare independenta **Shared Components**: -- `shared/database/oracle_pool.py` - conexiune Oracle pentru nomenclatoare -- `shared/auth/` - autentificare JWT comuna +- `shared/database/oracle_pool.py` - conexiune Oracle pentru nomenclatoare si autentificare +- `shared/auth/` - autentificare JWT comuna (middleware, routes factory, auth service) +- `shared/frontend/components/LoginView.vue` - UI login partajat +- `shared/frontend/stores/auth.js` - Pinia auth store factory +- `shared/frontend/styles/login.css` - stiluri login ### 3. Workflow cu Staging Area diff --git a/reports-app/frontend/src/stores/auth.js b/reports-app/frontend/src/stores/auth.js index afe3c95..d1b6f9c 100644 --- a/reports-app/frontend/src/stores/auth.js +++ b/reports-app/frontend/src/stores/auth.js @@ -1,119 +1,11 @@ -import { defineStore } from "pinia"; -import { ref, computed } from "vue"; +/** + * Auth Store for Reports App + * + * Uses the shared auth store factory from shared/frontend/stores/auth.js + * Configured with the reports API service (port 8001) + */ + +import { createAuthStore } from "../../../../shared/frontend/stores/auth"; import { apiService } from "../services/api"; -export const useAuthStore = defineStore("auth", () => { - // State - const accessToken = ref(localStorage.getItem("access_token")); - const refreshToken = ref(localStorage.getItem("refresh_token")); - const user = ref(JSON.parse(localStorage.getItem("user") || "null")); - const isLoading = ref(false); - const error = ref(null); - - // Getters - const isAuthenticated = computed(() => !!accessToken.value); - const currentUser = computed(() => user.value); - - // Actions - const login = async (credentials) => { - isLoading.value = true; - error.value = null; - - try { - const loginData = { - username: credentials.username, - password: credentials.password, - }; - - const response = await apiService.post("/auth/login", loginData); - const { access_token, refresh_token, user: userData } = response.data; - - accessToken.value = access_token; - refreshToken.value = refresh_token; - user.value = userData; - - localStorage.setItem("access_token", access_token); - localStorage.setItem("refresh_token", refresh_token); - localStorage.setItem("user", JSON.stringify(userData)); - - apiService.defaults.headers.common["Authorization"] = - `Bearer ${access_token}`; - - return { success: true }; - } catch (err) { - error.value = err.response?.data?.detail || "Login failed"; - return { success: false, error: error.value }; - } finally { - isLoading.value = false; - } - }; - - const logout = () => { - accessToken.value = null; - refreshToken.value = null; - user.value = null; - error.value = null; - - localStorage.removeItem("access_token"); - localStorage.removeItem("refresh_token"); - localStorage.removeItem("user"); - // Note: selected_company is now per-user and persists across logout/login - // It's stored as 'selected_company_${username}' in localStorage - - delete apiService.defaults.headers.common["Authorization"]; - }; - - const refreshAccessToken = async () => { - if (!refreshToken.value) { - logout(); - return false; - } - - try { - const response = await apiService.post("/auth/refresh", { - refresh_token: refreshToken.value, - }); - - const { access_token } = response.data; - - accessToken.value = access_token; - localStorage.setItem("access_token", access_token); - apiService.defaults.headers.common["Authorization"] = - `Bearer ${access_token}`; - - return true; - } catch (err) { - console.error("Token refresh failed:", err); - logout(); - return false; - } - }; - - const initializeAuth = () => { - if (accessToken.value) { - apiService.defaults.headers.common["Authorization"] = - `Bearer ${accessToken.value}`; - } - }; - - const clearError = () => { - error.value = null; - }; - - initializeAuth(); - - return { - accessToken, - refreshToken, - user, - isLoading, - error, - isAuthenticated, - currentUser, - login, - logout, - refreshAccessToken, - initializeAuth, - clearError, - }; -}); +export const useAuthStore = createAuthStore(apiService); diff --git a/reports-app/frontend/src/views/LoginView.vue b/reports-app/frontend/src/views/LoginView.vue index a6f6e6c..94cb4b4 100644 --- a/reports-app/frontend/src/views/LoginView.vue +++ b/reports-app/frontend/src/views/LoginView.vue @@ -1,367 +1,16 @@ - - diff --git a/reports-app/frontend/vite.config.js b/reports-app/frontend/vite.config.js index 84f18a1..25bfc7a 100644 --- a/reports-app/frontend/vite.config.js +++ b/reports-app/frontend/vite.config.js @@ -18,7 +18,8 @@ export default defineConfig({ base: process.env.NODE_ENV === 'production' ? '/roa2web/' : '/', resolve: { alias: { - '@': fileURLToPath(new URL('./src', import.meta.url)) + '@': fileURLToPath(new URL('./src', import.meta.url)), + '@shared': fileURLToPath(new URL('../../shared', import.meta.url)) } }, server: { diff --git a/shared/auth/routes.py b/shared/auth/routes.py index ec6311e..6aafaf4 100644 --- a/shared/auth/routes.py +++ b/shared/auth/routes.py @@ -116,6 +116,9 @@ def create_auth_router( logger.info(f"Successful login for user {login_data.username}") return token_response + except HTTPException: + # Re-raise HTTP exceptions as-is (e.g., 401 for invalid credentials) + raise except AuthenticationError as e: logger.error(f"Authentication error for user {login_data.username}: {str(e)}") raise HTTPException( diff --git a/shared/frontend/components/LoginView.vue b/shared/frontend/components/LoginView.vue new file mode 100644 index 0000000..2660572 --- /dev/null +++ b/shared/frontend/components/LoginView.vue @@ -0,0 +1,212 @@ + + + + + diff --git a/shared/frontend/stores/auth.js b/shared/frontend/stores/auth.js new file mode 100644 index 0000000..fa89962 --- /dev/null +++ b/shared/frontend/stores/auth.js @@ -0,0 +1,133 @@ +/** + * Shared Auth Store Factory + * + * Creates a Pinia auth store that can be used by any ROA2WEB application. + * Each app passes its own apiService instance configured with the correct baseURL. + * + * Usage: + * import { createAuthStore } from '@shared/frontend/stores/auth'; + * import { apiService } from '../services/api'; + * export const useAuthStore = createAuthStore(apiService); + */ + +import { defineStore } from "pinia"; +import { ref, computed } from "vue"; + +/** + * Factory function to create an auth store with the provided API service + * @param {Object} apiService - Axios instance configured for the app's API + * @returns {Function} Pinia store definition + */ +export function createAuthStore(apiService) { + return defineStore("auth", () => { + // State + const accessToken = ref(localStorage.getItem("access_token")); + const refreshToken = ref(localStorage.getItem("refresh_token")); + const user = ref(JSON.parse(localStorage.getItem("user") || "null")); + const isLoading = ref(false); + const error = ref(null); + + // Getters + const isAuthenticated = computed(() => !!accessToken.value); + const currentUser = computed(() => user.value); + + // Actions + const login = async (credentials) => { + isLoading.value = true; + error.value = null; + + try { + const response = await apiService.post("/auth/login", { + username: credentials.username, + password: credentials.password, + }); + const { access_token, refresh_token, user: userData } = response.data; + + accessToken.value = access_token; + refreshToken.value = refresh_token; + user.value = userData; + + localStorage.setItem("access_token", access_token); + localStorage.setItem("refresh_token", refresh_token); + localStorage.setItem("user", JSON.stringify(userData)); + + apiService.defaults.headers.common["Authorization"] = `Bearer ${access_token}`; + + return { success: true }; + } catch (err) { + error.value = err.response?.data?.detail || "Login failed"; + return { success: false, error: error.value }; + } finally { + isLoading.value = false; + } + }; + + const logout = () => { + accessToken.value = null; + refreshToken.value = null; + user.value = null; + error.value = null; + + localStorage.removeItem("access_token"); + localStorage.removeItem("refresh_token"); + localStorage.removeItem("user"); + + delete apiService.defaults.headers.common["Authorization"]; + }; + + const refreshAccessToken = async () => { + if (!refreshToken.value) { + logout(); + return false; + } + + try { + const response = await apiService.post("/auth/refresh", { + refresh_token: refreshToken.value, + }); + + const { access_token } = response.data; + accessToken.value = access_token; + localStorage.setItem("access_token", access_token); + apiService.defaults.headers.common["Authorization"] = `Bearer ${access_token}`; + + return true; + } catch (err) { + console.error("Token refresh failed:", err); + logout(); + return false; + } + }; + + const initializeAuth = () => { + if (accessToken.value) { + apiService.defaults.headers.common["Authorization"] = `Bearer ${accessToken.value}`; + } + }; + + const clearError = () => { + error.value = null; + }; + + // Initialize on store creation + initializeAuth(); + + return { + // State + accessToken, + refreshToken, + user, + isLoading, + error, + // Getters + isAuthenticated, + currentUser, + // Actions + login, + logout, + refreshAccessToken, + initializeAuth, + clearError, + }; + }); +} diff --git a/shared/frontend/styles/login.css b/shared/frontend/styles/login.css new file mode 100644 index 0000000..df896d9 --- /dev/null +++ b/shared/frontend/styles/login.css @@ -0,0 +1,177 @@ +/* Shared Login Page Styles */ + +.login-container { + min-height: 100vh; + display: flex; + align-items: center; + justify-content: center; + background: linear-gradient( + 135deg, + var(--color-primary-light) 0%, + var(--color-primary) 100% + ); + padding: 1rem; +} + +.login-wrapper { + width: 100%; + max-width: 400px; +} + +.login-card { + box-shadow: 0 25px 50px rgba(0, 0, 0, 0.15); + border-radius: 16px; + overflow: hidden; + border: 1px solid rgba(255, 255, 255, 0.1); +} + +.login-header { + text-align: center; + padding: 2rem 2rem 1rem 2rem; + background: white; +} + +.login-title { + margin: 1rem 0 0.5rem 0; + color: var(--primary-color); + font-size: 2rem; + font-weight: 700; +} + +.login-subtitle { + margin: 0; + color: var(--text-color-secondary); + font-size: 0.95rem; +} + +.login-form { + padding: 0 2rem 2rem 2rem; +} + +.login-button { + margin-top: 1rem; + padding: 0.75rem; + font-size: 1.1rem; + font-weight: 600; + background: var(--color-primary-light) !important; + color: white !important; + border: none !important; + box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); + transition: all 0.3s ease; +} + +.login-button:hover { + background: var(--color-primary) !important; + box-shadow: 0 6px 12px rgba(0, 0, 0, 0.15); + transform: translateY(-2px); +} + +.login-button:active { + transform: translateY(0); + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); +} + +.login-error-message { + display: flex; + align-items: center; + gap: 0.5rem; + padding: 0.75rem; + margin-bottom: 1rem; + background-color: var(--red-50); + color: var(--red-800); + border: 1px solid var(--red-200); + border-radius: 6px; + font-size: 0.9rem; +} + +.login-footer { + text-align: center; + padding: 1rem 2rem; + background-color: var(--surface-50); + border-top: 1px solid var(--surface-200); +} + +/* Responsive design */ +@media (max-width: 768px) { + .login-container { + padding: 0.5rem; + } + + .login-wrapper { + max-width: 100%; + padding: 0 1rem; + } + + .login-card { + border-radius: 8px; + } + + .login-header { + padding: 1.5rem 1rem; + } + + .login-title { + font-size: 1.5rem; + } + + .login-form { + padding: 0 1rem 1.5rem 1rem; + } + + /* Ensure inputs are touch-friendly */ + .login-container .p-inputtext, + .login-container .p-password input { + min-height: 44px; + font-size: 16px; /* Prevents zoom on iOS */ + } + + .login-footer { + padding: 1rem; + } +} + +@media (max-width: 480px) { + .login-container { + padding: 0.25rem; + } + + .login-card { + margin: 0; + } + + .login-header { + padding: 1rem 0.5rem; + } + + .login-title { + font-size: 1.25rem; + } + + .login-subtitle { + font-size: 0.875rem; + } + + .login-form { + padding: 0 0.5rem 1rem 0.5rem; + } + + .login-footer { + padding: 0.75rem 0.5rem; + } +} + +/* Animation for smooth transitions */ +.login-card { + animation: loginFadeInUp 0.6s ease-out; +} + +@keyframes loginFadeInUp { + from { + opacity: 0; + transform: translateY(30px); + } + to { + opacity: 1; + transform: translateY(0); + } +} diff --git a/start-data-entry.sh b/start-data-entry.sh index 5eb5473..d070fc9 100644 --- a/start-data-entry.sh +++ b/start-data-entry.sh @@ -342,8 +342,47 @@ trap cleanup SIGINT SIGTERM print_message "Starting Data Entry Development Environment..." echo -# Step 1: Start Backend -print_message "1. Starting Backend (FastAPI)..." +# Step 1: Start Frontend FIRST (for fast UI availability) +print_message "1. Starting Frontend (Vue.js)..." + +cd data-entry-app/frontend/ + +# Check if node_modules exists +if [ ! -d "node_modules" ]; then + print_message "Installing frontend dependencies..." + npm install +fi + +# Check for WSL compatibility +if [ -f "node_modules/.bin/vite.cmd" ] && [ ! -f "node_modules/.bin/vite" ]; then + print_warning "Windows node_modules detected, reinstalling for WSL..." + rm -rf node_modules package-lock.json + npm install +fi + +# Start frontend in background +print_message "Starting Vite development server..." +npm run dev -- --port 3010 > /tmp/data_entry_frontend.log 2>&1 & +FRONTEND_PID=$! + +# Wait for frontend to start +sleep 3 +for i in {1..10}; do + if check_port 3010; then + print_success "Frontend started on http://localhost:3010" + break + fi + if [ $i -eq 10 ]; then + print_error "Frontend failed to start after 10 attempts" + print_message "Check log at /tmp/data_entry_frontend.log" + cat /tmp/data_entry_frontend.log + cleanup + fi + sleep 1 +done + +# Step 2: Start Backend (with OCR loading in background) +print_message "2. Starting Backend (FastAPI + OCR)..." # Check if backend port is already in use if check_port 8003; then @@ -355,7 +394,7 @@ if check_port 8003; then fi fi -cd data-entry-app/backend/ +cd ../backend/ # Check if .env file exists if [ ! -f ".env" ]; then @@ -391,59 +430,22 @@ mkdir -p data/uploads print_message "Running database migrations..." alembic upgrade head 2>/dev/null || print_warning "Migration may have already been applied or first run" -# Start backend in background -print_message "Starting uvicorn server..." -uvicorn app.main:app --host 0.0.0.0 --port 8003 --reload & +# Start backend in background (OCR loads asynchronously) +print_message "Starting uvicorn server (OCR loads in background)..." +uvicorn app.main:app --host 0.0.0.0 --port 8003 --reload > /tmp/data_entry_backend.log 2>&1 & BACKEND_PID=$! -# Wait for backend to start -sleep 2 -for i in {1..10}; do - if check_port 8003; then - print_success "Backend started successfully on http://localhost:8003" - break - fi - if [ $i -eq 10 ]; then - print_error "Backend failed to start after 10 attempts" - cleanup - fi - sleep 1 -done - -# Step 2: Start Frontend -print_message "2. Starting Frontend (Vue.js)..." - -cd ../frontend/ - -# Check if node_modules exists -if [ ! -d "node_modules" ]; then - print_message "Installing frontend dependencies..." - npm install -fi - -# Check for WSL compatibility -if [ -f "node_modules/.bin/vite.cmd" ] && [ ! -f "node_modules/.bin/vite" ]; then - print_warning "Windows node_modules detected, reinstalling for WSL..." - rm -rf node_modules package-lock.json - npm install -fi - -# Start frontend in background -print_message "Starting Vite development server..." -npm run dev -- --port 3010 > /tmp/data_entry_frontend.log 2>&1 & -FRONTEND_PID=$! - -# Wait for frontend to start +# Wait for backend to start (uvicorn --reload takes longer to bind) sleep 3 -for i in {1..10}; do - if check_port 3010; then - print_success "Frontend started successfully on http://localhost:3010" +for i in {1..20}; do + if check_port 8003; then + print_success "Backend started on http://localhost:8003" + print_message "Note: OCR engine loading in background (first OCR request may be slow)" break fi - if [ $i -eq 10 ]; then - print_error "Frontend failed to start after 10 attempts" - print_message "Check log at /tmp/data_entry_frontend.log" - cat /tmp/data_entry_frontend.log + if [ $i -eq 20 ]; then + print_error "Backend failed to start after 20 attempts" + cat /tmp/data_entry_backend.log cleanup fi sleep 1